viem 2.12.3 → 2.12.4
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +6 -0
- package/_cjs/actions/wallet/signTypedData.js +1 -3
- package/_cjs/actions/wallet/signTypedData.js.map +1 -1
- package/_cjs/errors/version.js +1 -1
- package/_cjs/utils/typedData.js +31 -5
- package/_cjs/utils/typedData.js.map +1 -1
- package/_esm/actions/wallet/signTypedData.js +2 -4
- package/_esm/actions/wallet/signTypedData.js.map +1 -1
- package/_esm/errors/version.js +1 -1
- package/_esm/utils/typedData.js +30 -5
- package/_esm/utils/typedData.js.map +1 -1
- package/_types/actions/wallet/signTypedData.d.ts +2 -2
- package/_types/actions/wallet/signTypedData.d.ts.map +1 -1
- package/_types/errors/version.d.ts +1 -1
- package/_types/utils/typedData.d.ts +2 -0
- package/_types/utils/typedData.d.ts.map +1 -1
- package/actions/wallet/signTypedData.ts +4 -6
- package/errors/version.ts +1 -1
- package/package.json +1 -1
- package/utils/typedData.ts +49 -5
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# viem
|
2
2
|
|
3
|
+
## 2.12.4
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- [`ddfce938e4760f60be54ee97802d819cc2b052d8`](https://github.com/wevm/viem/commit/ddfce938e4760f60be54ee97802d819cc2b052d8) Thanks [@jxom](https://github.com/jxom)! - Resolved issue where hex-like strings were incorrectly being lowercased in `signTypedData`.
|
8
|
+
|
3
9
|
## 2.12.3
|
4
10
|
|
5
11
|
### Patch Changes
|
@@ -3,8 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.signTypedData = void 0;
|
4
4
|
const parseAccount_js_1 = require("../../accounts/utils/parseAccount.js");
|
5
5
|
const account_js_1 = require("../../errors/account.js");
|
6
|
-
const isHex_js_1 = require("../../utils/data/isHex.js");
|
7
|
-
const stringify_js_1 = require("../../utils/stringify.js");
|
8
6
|
const typedData_js_1 = require("../../utils/typedData.js");
|
9
7
|
async function signTypedData(client, parameters) {
|
10
8
|
const { account: account_ = client.account, domain, message, primaryType, } = parameters;
|
@@ -20,7 +18,7 @@ async function signTypedData(client, parameters) {
|
|
20
18
|
(0, typedData_js_1.validateTypedData)({ domain, message, primaryType, types });
|
21
19
|
if (account.type === 'local')
|
22
20
|
return account.signTypedData({ domain, message, primaryType, types });
|
23
|
-
const typedData = (0,
|
21
|
+
const typedData = (0, typedData_js_1.serializeTypedData)({ domain, message, primaryType, types });
|
24
22
|
return client.request({
|
25
23
|
method: 'eth_signTypedData_v4',
|
26
24
|
params: [account.address, typedData],
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"signTypedData.js","sourceRoot":"","sources":["../../../actions/wallet/signTypedData.ts"],"names":[],"mappings":";;;AAGA,0EAG6C;AAI7C,wDAGgC;
|
1
|
+
{"version":3,"file":"signTypedData.js","sourceRoot":"","sources":["../../../actions/wallet/signTypedData.ts"],"names":[],"mappings":";;;AAGA,0EAG6C;AAI7C,wDAGgC;AAShC,2DAMiC;AA0H1B,KAAK,UAAU,aAAa,CAMjC,MAAyC,EACzC,UAAoE;IAEpE,MAAM,EACJ,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,OAAO,EAClC,MAAM,EACN,OAAO,EACP,WAAW,GACZ,GAAG,UAAgD,CAAA;IAEpD,IAAI,CAAC,QAAQ;QACX,MAAM,IAAI,iCAAoB,CAAC;YAC7B,QAAQ,EAAE,oCAAoC;SAC/C,CAAC,CAAA;IACJ,MAAM,OAAO,GAAG,IAAA,8BAAY,EAAC,QAAQ,CAAC,CAAA;IAEtC,MAAM,KAAK,GAAG;QACZ,YAAY,EAAE,IAAA,sCAAuB,EAAC,EAAE,MAAM,EAAE,CAAC;QACjD,GAAG,UAAU,CAAC,KAAK;KACpB,CAAA;IAID,IAAA,gCAAiB,EAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAA;IAE1D,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO;QAC1B,OAAO,OAAO,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAA;IAEvE,MAAM,SAAS,GAAG,IAAA,iCAAkB,EAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAA;IAC7E,OAAO,MAAM,CAAC,OAAO,CACnB;QACE,MAAM,EAAE,sBAAsB;QAC9B,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC;KACrC,EACD,EAAE,UAAU,EAAE,CAAC,EAAE,CAClB,CAAA;AACH,CAAC;AA1CD,sCA0CC"}
|
package/_cjs/errors/version.js
CHANGED
package/_cjs/utils/typedData.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.domainSeparator = exports.getTypesForEIP712Domain = exports.validateTypedData = void 0;
|
3
|
+
exports.domainSeparator = exports.getTypesForEIP712Domain = exports.validateTypedData = exports.serializeTypedData = void 0;
|
4
4
|
const abi_js_1 = require("../errors/abi.js");
|
5
5
|
const address_js_1 = require("../errors/address.js");
|
6
6
|
const isAddress_js_1 = require("./address/isAddress.js");
|
@@ -8,6 +8,34 @@ const size_js_1 = require("./data/size.js");
|
|
8
8
|
const toHex_js_1 = require("./encoding/toHex.js");
|
9
9
|
const regex_js_1 = require("./regex.js");
|
10
10
|
const hashTypedData_js_1 = require("./signature/hashTypedData.js");
|
11
|
+
const stringify_js_1 = require("./stringify.js");
|
12
|
+
function serializeTypedData(parameters) {
|
13
|
+
const { domain: domain_, message: message_, primaryType, types, } = parameters;
|
14
|
+
const normalizeData = (struct, data_) => {
|
15
|
+
const data = { ...data_ };
|
16
|
+
for (const param of struct) {
|
17
|
+
const { name, type } = param;
|
18
|
+
if (type === 'address')
|
19
|
+
data[name] = data[name].toLowerCase();
|
20
|
+
}
|
21
|
+
return data;
|
22
|
+
};
|
23
|
+
const domain = (() => {
|
24
|
+
if (!types.EIP712Domain)
|
25
|
+
return {};
|
26
|
+
if (!domain_)
|
27
|
+
return {};
|
28
|
+
return normalizeData(types.EIP712Domain, domain_);
|
29
|
+
})();
|
30
|
+
const message = (() => {
|
31
|
+
if (primaryType === 'EIP712Domain')
|
32
|
+
return undefined;
|
33
|
+
return normalizeData(types[primaryType], message_);
|
34
|
+
})();
|
35
|
+
console.log(message);
|
36
|
+
return (0, stringify_js_1.stringify)({ domain, message, primaryType, types });
|
37
|
+
}
|
38
|
+
exports.serializeTypedData = serializeTypedData;
|
11
39
|
function validateTypedData(parameters) {
|
12
40
|
const { domain, message, primaryType, types } = parameters;
|
13
41
|
const validateData = (struct, data) => {
|
@@ -41,10 +69,8 @@ function validateTypedData(parameters) {
|
|
41
69
|
};
|
42
70
|
if (types.EIP712Domain && domain)
|
43
71
|
validateData(types.EIP712Domain, domain);
|
44
|
-
if (primaryType !== 'EIP712Domain')
|
45
|
-
|
46
|
-
validateData(type, message);
|
47
|
-
}
|
72
|
+
if (primaryType !== 'EIP712Domain')
|
73
|
+
validateData(types[primaryType], message);
|
48
74
|
}
|
49
75
|
exports.validateTypedData = validateTypedData;
|
50
76
|
function getTypesForEIP712Domain({ domain, }) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"typedData.js","sourceRoot":"","sources":["../../utils/typedData.ts"],"names":[],"mappings":";;;AAEA,6CAAyD;AACzD,qDAA0D;AAK1D,yDAA2E;AAC3E,4CAAyD;AACzD,kDAA4E;AAC5E,yCAAqD;AACrD,mEAGqC;
|
1
|
+
{"version":3,"file":"typedData.js","sourceRoot":"","sources":["../../utils/typedData.ts"],"names":[],"mappings":"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"}
|
@@ -1,8 +1,6 @@
|
|
1
1
|
import { parseAccount, } from '../../accounts/utils/parseAccount.js';
|
2
2
|
import { AccountNotFoundError, } from '../../errors/account.js';
|
3
|
-
import {
|
4
|
-
import { stringify } from '../../utils/stringify.js';
|
5
|
-
import { getTypesForEIP712Domain, validateTypedData, } from '../../utils/typedData.js';
|
3
|
+
import { getTypesForEIP712Domain, serializeTypedData, validateTypedData, } from '../../utils/typedData.js';
|
6
4
|
/**
|
7
5
|
* Signs typed data and calculates an Ethereum-specific signature in [https://eips.ethereum.org/EIPS/eip-712](https://eips.ethereum.org/EIPS/eip-712): `sign(keccak256("\x19\x01" ‖ domainSeparator ‖ hashStruct(message)))`
|
8
6
|
*
|
@@ -117,7 +115,7 @@ export async function signTypedData(client, parameters) {
|
|
117
115
|
validateTypedData({ domain, message, primaryType, types });
|
118
116
|
if (account.type === 'local')
|
119
117
|
return account.signTypedData({ domain, message, primaryType, types });
|
120
|
-
const typedData =
|
118
|
+
const typedData = serializeTypedData({ domain, message, primaryType, types });
|
121
119
|
return client.request({
|
122
120
|
method: 'eth_signTypedData_v4',
|
123
121
|
params: [account.address, typedData],
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"signTypedData.js","sourceRoot":"","sources":["../../../actions/wallet/signTypedData.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,YAAY,GACb,MAAM,sCAAsC,CAAA;AAI7C,OAAO,EACL,oBAAoB,GAErB,MAAM,yBAAyB,CAAA;
|
1
|
+
{"version":3,"file":"signTypedData.js","sourceRoot":"","sources":["../../../actions/wallet/signTypedData.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,YAAY,GACb,MAAM,sCAAsC,CAAA;AAI7C,OAAO,EACL,oBAAoB,GAErB,MAAM,yBAAyB,CAAA;AAShC,OAAO,EAGL,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,0BAA0B,CAAA;AAwBjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAMjC,MAAyC,EACzC,UAAoE;IAEpE,MAAM,EACJ,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,OAAO,EAClC,MAAM,EACN,OAAO,EACP,WAAW,GACZ,GAAG,UAAgD,CAAA;IAEpD,IAAI,CAAC,QAAQ;QACX,MAAM,IAAI,oBAAoB,CAAC;YAC7B,QAAQ,EAAE,oCAAoC;SAC/C,CAAC,CAAA;IACJ,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IAEtC,MAAM,KAAK,GAAG;QACZ,YAAY,EAAE,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;QACjD,GAAG,UAAU,CAAC,KAAK;KACpB,CAAA;IAED,uFAAuF;IACvF,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAA;IAE1D,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO;QAC1B,OAAO,OAAO,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAA;IAEvE,MAAM,SAAS,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAA;IAC7E,OAAO,MAAM,CAAC,OAAO,CACnB;QACE,MAAM,EAAE,sBAAsB;QAC9B,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC;KACrC,EACD,EAAE,UAAU,EAAE,CAAC,EAAE,CAClB,CAAA;AACH,CAAC"}
|
package/_esm/errors/version.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
export const version = '2.12.
|
1
|
+
export const version = '2.12.4';
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/_esm/utils/typedData.js
CHANGED
@@ -5,6 +5,33 @@ import { size } from './data/size.js';
|
|
5
5
|
import { numberToHex } from './encoding/toHex.js';
|
6
6
|
import { bytesRegex, integerRegex } from './regex.js';
|
7
7
|
import { hashDomain, } from './signature/hashTypedData.js';
|
8
|
+
import { stringify } from './stringify.js';
|
9
|
+
export function serializeTypedData(parameters) {
|
10
|
+
const { domain: domain_, message: message_, primaryType, types, } = parameters;
|
11
|
+
const normalizeData = (struct, data_) => {
|
12
|
+
const data = { ...data_ };
|
13
|
+
for (const param of struct) {
|
14
|
+
const { name, type } = param;
|
15
|
+
if (type === 'address')
|
16
|
+
data[name] = data[name].toLowerCase();
|
17
|
+
}
|
18
|
+
return data;
|
19
|
+
};
|
20
|
+
const domain = (() => {
|
21
|
+
if (!types.EIP712Domain)
|
22
|
+
return {};
|
23
|
+
if (!domain_)
|
24
|
+
return {};
|
25
|
+
return normalizeData(types.EIP712Domain, domain_);
|
26
|
+
})();
|
27
|
+
const message = (() => {
|
28
|
+
if (primaryType === 'EIP712Domain')
|
29
|
+
return undefined;
|
30
|
+
return normalizeData(types[primaryType], message_);
|
31
|
+
})();
|
32
|
+
console.log(message);
|
33
|
+
return stringify({ domain, message, primaryType, types });
|
34
|
+
}
|
8
35
|
export function validateTypedData(parameters) {
|
9
36
|
const { domain, message, primaryType, types } = parameters;
|
10
37
|
const validateData = (struct, data) => {
|
@@ -41,11 +68,9 @@ export function validateTypedData(parameters) {
|
|
41
68
|
// Validate domain types.
|
42
69
|
if (types.EIP712Domain && domain)
|
43
70
|
validateData(types.EIP712Domain, domain);
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
validateData(type, message);
|
48
|
-
}
|
71
|
+
// Validate message types.
|
72
|
+
if (primaryType !== 'EIP712Domain')
|
73
|
+
validateData(types[primaryType], message);
|
49
74
|
}
|
50
75
|
export function getTypesForEIP712Domain({ domain, }) {
|
51
76
|
return [
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"typedData.js","sourceRoot":"","sources":["../../utils/typedData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAK1D,OAAO,EAA2B,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAC3E,OAAO,EAAsB,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,EAA6B,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAEL,UAAU,GACX,MAAM,8BAA8B,CAAA;
|
1
|
+
{"version":3,"file":"typedData.js","sourceRoot":"","sources":["../../utils/typedData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAK1D,OAAO,EAA2B,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAC3E,OAAO,EAAsB,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,EAA6B,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAEL,UAAU,GACX,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAS1C,MAAM,UAAU,kBAAkB,CAGhC,UAAuD;IACvD,MAAM,EACJ,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,QAAQ,EACjB,WAAW,EACX,KAAK,GACN,GAAG,UAA4C,CAAA;IAEhD,MAAM,aAAa,GAAG,CACpB,MAAqC,EACrC,KAA8B,EAC9B,EAAE;QACF,MAAM,IAAI,GAAG,EAAE,GAAG,KAAK,EAAE,CAAA;QACzB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;YAC5B,IAAI,IAAI,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAI,IAAI,CAAC,IAAI,CAAY,CAAC,WAAW,EAAE,CAAA;QAC3E,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,KAAK,CAAC,YAAY;YAAE,OAAO,EAAE,CAAA;QAClC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAA;QACvB,OAAO,aAAa,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IACnD,CAAC,CAAC,EAAE,CAAA;IAEJ,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;QACpB,IAAI,WAAW,KAAK,cAAc;YAAE,OAAO,SAAS,CAAA;QACpD,OAAO,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,CAAA;IACpD,CAAC,CAAC,EAAE,CAAA;IAEJ,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAEpB,OAAO,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAA;AAC3D,CAAC;AASD,MAAM,UAAU,iBAAiB,CAG/B,UAAuD;IACvD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,GAC3C,UAA4C,CAAA;IAE9C,MAAM,YAAY,GAAG,CACnB,MAAqC,EACrC,IAA6B,EAC7B,EAAE;QACF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;YAExB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;YAC7C,IACE,YAAY;gBACZ,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,EACxD,CAAC;gBACD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,YAAY,CAAA;gBACzC,oEAAoE;gBACpE,kBAAkB;gBAClB,WAAW,CAAC,KAAK,EAAE;oBACjB,MAAM,EAAE,IAAI,KAAK,KAAK;oBACtB,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;iBACjC,CAAC,CAAA;YACJ,CAAC;YAED,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBACtE,MAAM,IAAI,mBAAmB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;YAEnD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;YACzC,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,UAAU,CAAA;gBACjC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAY,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;oBACxD,MAAM,IAAI,sBAAsB,CAAC;wBAC/B,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;wBACpC,SAAS,EAAE,IAAI,CAAC,KAAY,CAAC;qBAC9B,CAAC,CAAA;YACN,CAAC;YAED,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;YAC1B,IAAI,MAAM;gBAAE,YAAY,CAAC,MAAM,EAAE,KAAgC,CAAC,CAAA;QACpE,CAAC;IACH,CAAC,CAAA;IAED,yBAAyB;IACzB,IAAI,KAAK,CAAC,YAAY,IAAI,MAAM;QAAE,YAAY,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;IAE1E,0BAA0B;IAC1B,IAAI,WAAW,KAAK,cAAc;QAAE,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAA;AAC/E,CAAC;AAID,MAAM,UAAU,uBAAuB,CAAC,EACtC,MAAM,GACmC;IACzC,OAAO;QACL,OAAO,MAAM,EAAE,IAAI,KAAK,QAAQ,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;QACpE,MAAM,EAAE,OAAO,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;QACtD,OAAO,MAAM,EAAE,OAAO,KAAK,QAAQ,IAAI;YACrC,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;SAChB;QACD,MAAM,EAAE,iBAAiB,IAAI;YAC3B,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,SAAS;SAChB;QACD,MAAM,EAAE,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;KAClD,CAAC,MAAM,CAAC,OAAO,CAAyB,CAAA;AAC3C,CAAC;AAOD,MAAM,UAAU,eAAe,CAAC,EAAE,MAAM,EAA+B;IACrE,OAAO,UAAU,CAAC;QAChB,MAAM;QACN,KAAK,EAAE;YACL,YAAY,EAAE,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;SAClD;KACF,CAAC,CAAA;AACJ,CAAC"}
|
@@ -11,8 +11,8 @@ import type { Chain } from '../../types/chain.js';
|
|
11
11
|
import type { Hex } from '../../types/misc.js';
|
12
12
|
import type { TypedDataDefinition } from '../../types/typedData.js';
|
13
13
|
import type { RequestErrorType } from '../../utils/buildRequest.js';
|
14
|
-
import {
|
15
|
-
import {
|
14
|
+
import type { IsHexErrorType } from '../../utils/data/isHex.js';
|
15
|
+
import type { StringifyErrorType } from '../../utils/stringify.js';
|
16
16
|
import { type GetTypesForEIP712DomainErrorType, type ValidateTypedDataErrorType } from '../../utils/typedData.js';
|
17
17
|
export type SignTypedDataParameters<typedData extends TypedData | Record<string, unknown> = TypedData, primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData, account extends Account | undefined = undefined, primaryTypes = typedData extends TypedData ? keyof typedData : string> = TypedDataDefinition<typedData, primaryType, primaryTypes> & GetAccountParameter<account>;
|
18
18
|
export type SignTypedDataReturnType = Hex;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"signTypedData.d.ts","sourceRoot":"","sources":["../../../actions/wallet/signTypedData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,sCAAsC,CAAA;AAC7C,OAAO,KAAK,EAAE,sBAAsB,IAAI,8BAA8B,EAAE,MAAM,uCAAuC,CAAA;AACrH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAA;AAC5E,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"signTypedData.d.ts","sourceRoot":"","sources":["../../../actions/wallet/signTypedData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,sCAAsC,CAAA;AAC7C,OAAO,KAAK,EAAE,sBAAsB,IAAI,8BAA8B,EAAE,MAAM,uCAAuC,CAAA;AACrH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAA;AAC5E,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,EACL,KAAK,gCAAgC,EACrC,KAAK,0BAA0B,EAIhC,MAAM,0BAA0B,CAAA;AAEjC,MAAM,MAAM,uBAAuB,CACjC,SAAS,SAAS,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACjE,WAAW,SAAS,MAAM,SAAS,GAAG,cAAc,GAAG,MAAM,SAAS,EACtE,OAAO,SAAS,OAAO,GAAG,SAAS,GAAG,SAAS,EAE/C,YAAY,GAAG,SAAS,SAAS,SAAS,GAAG,MAAM,SAAS,GAAG,MAAM,IACnE,mBAAmB,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,GAC3D,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAE9B,MAAM,MAAM,uBAAuB,GAAG,GAAG,CAAA;AAEzC,MAAM,MAAM,sBAAsB,GAC9B,wBAAwB,GACxB,qBAAqB,GACrB,gCAAgC,GAChC,0BAA0B,GAC1B,kBAAkB,GAClB,8BAA8B,GAC9B,cAAc,GACd,gBAAgB,GAChB,SAAS,CAAA;AAEb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiGG;AACH,wBAAsB,aAAa,CACjC,KAAK,CAAC,SAAS,SAAS,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,WAAW,SAAS,MAAM,SAAS,GAAG,cAAc,EACpD,KAAK,SAAS,KAAK,GAAG,SAAS,EAC/B,OAAO,SAAS,OAAO,GAAG,SAAS,EAEnC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,EACzC,UAAU,EAAE,uBAAuB,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,GACnE,OAAO,CAAC,uBAAuB,CAAC,CAkClC"}
|
@@ -1,2 +1,2 @@
|
|
1
|
-
export declare const version = "2.12.
|
1
|
+
export declare const version = "2.12.4";
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
@@ -6,6 +6,8 @@ import { type IsAddressErrorType } from './address/isAddress.js';
|
|
6
6
|
import { type SizeErrorType } from './data/size.js';
|
7
7
|
import { type NumberToHexErrorType } from './encoding/toHex.js';
|
8
8
|
import { type HashDomainErrorType } from './signature/hashTypedData.js';
|
9
|
+
export type SerializeTypedDataErrorType = HashDomainErrorType | IsAddressErrorType | NumberToHexErrorType | SizeErrorType | ErrorType;
|
10
|
+
export declare function serializeTypedData<const typedData extends TypedData | Record<string, unknown>, primaryType extends keyof typedData | 'EIP712Domain'>(parameters: TypedDataDefinition<typedData, primaryType>): string;
|
9
11
|
export type ValidateTypedDataErrorType = HashDomainErrorType | IsAddressErrorType | NumberToHexErrorType | SizeErrorType | ErrorType;
|
10
12
|
export declare function validateTypedData<const typedData extends TypedData | Record<string, unknown>, primaryType extends keyof typedData | 'EIP712Domain'>(parameters: TypedDataDefinition<typedData, primaryType>): void;
|
11
13
|
export type GetTypesForEIP712DomainErrorType = ErrorType;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"typedData.d.ts","sourceRoot":"","sources":["../../utils/typedData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAI7E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAEhE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,KAAK,kBAAkB,EAAa,MAAM,wBAAwB,CAAA;AAC3E,OAAO,EAAE,KAAK,aAAa,EAAQ,MAAM,gBAAgB,CAAA;AACzD,OAAO,EAAE,KAAK,oBAAoB,EAAe,MAAM,qBAAqB,CAAA;AAE5E,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,8BAA8B,CAAA;
|
1
|
+
{"version":3,"file":"typedData.d.ts","sourceRoot":"","sources":["../../utils/typedData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAI7E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAEhE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,KAAK,kBAAkB,EAAa,MAAM,wBAAwB,CAAA;AAC3E,OAAO,EAAE,KAAK,aAAa,EAAQ,MAAM,gBAAgB,CAAA;AACzD,OAAO,EAAE,KAAK,oBAAoB,EAAe,MAAM,qBAAqB,CAAA;AAE5E,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,8BAA8B,CAAA;AAGrC,MAAM,MAAM,2BAA2B,GACnC,mBAAmB,GACnB,kBAAkB,GAClB,oBAAoB,GACpB,aAAa,GACb,SAAS,CAAA;AAEb,wBAAgB,kBAAkB,CAChC,KAAK,CAAC,SAAS,SAAS,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,WAAW,SAAS,MAAM,SAAS,GAAG,cAAc,EACpD,UAAU,EAAE,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC,UAkCxD;AAED,MAAM,MAAM,0BAA0B,GAClC,mBAAmB,GACnB,kBAAkB,GAClB,oBAAoB,GACpB,aAAa,GACb,SAAS,CAAA;AAEb,wBAAgB,iBAAiB,CAC/B,KAAK,CAAC,SAAS,SAAS,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,WAAW,SAAS,MAAM,SAAS,GAAG,cAAc,EACpD,UAAU,EAAE,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC,QAiDxD;AAED,MAAM,MAAM,gCAAgC,GAAG,SAAS,CAAA;AAExD,wBAAgB,uBAAuB,CAAC,EACtC,MAAM,GACP,EAAE;IAAE,MAAM,CAAC,EAAE,eAAe,GAAG,SAAS,CAAA;CAAE,GAAG,kBAAkB,EAAE,CAcjE;AAED,MAAM,MAAM,wBAAwB,GAChC,gCAAgC,GAChC,mBAAmB,GACnB,SAAS,CAAA;AAEb,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,eAAe,CAAA;CAAE,GAAG,GAAG,CAO5E"}
|
@@ -18,12 +18,13 @@ import type { Chain } from '../../types/chain.js'
|
|
18
18
|
import type { Hex } from '../../types/misc.js'
|
19
19
|
import type { TypedDataDefinition } from '../../types/typedData.js'
|
20
20
|
import type { RequestErrorType } from '../../utils/buildRequest.js'
|
21
|
-
import {
|
22
|
-
import {
|
21
|
+
import type { IsHexErrorType } from '../../utils/data/isHex.js'
|
22
|
+
import type { StringifyErrorType } from '../../utils/stringify.js'
|
23
23
|
import {
|
24
24
|
type GetTypesForEIP712DomainErrorType,
|
25
25
|
type ValidateTypedDataErrorType,
|
26
26
|
getTypesForEIP712Domain,
|
27
|
+
serializeTypedData,
|
27
28
|
validateTypedData,
|
28
29
|
} from '../../utils/typedData.js'
|
29
30
|
|
@@ -181,10 +182,7 @@ export async function signTypedData<
|
|
181
182
|
if (account.type === 'local')
|
182
183
|
return account.signTypedData({ domain, message, primaryType, types })
|
183
184
|
|
184
|
-
const typedData =
|
185
|
-
{ domain: domain ?? {}, message, primaryType, types },
|
186
|
-
(_, value) => (isHex(value) ? value.toLowerCase() : value),
|
187
|
-
)
|
185
|
+
const typedData = serializeTypedData({ domain, message, primaryType, types })
|
188
186
|
return client.request(
|
189
187
|
{
|
190
188
|
method: 'eth_signTypedData_v4',
|
package/errors/version.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export const version = '2.12.
|
1
|
+
export const version = '2.12.4'
|
package/package.json
CHANGED
package/utils/typedData.ts
CHANGED
@@ -14,6 +14,53 @@ import {
|
|
14
14
|
type HashDomainErrorType,
|
15
15
|
hashDomain,
|
16
16
|
} from './signature/hashTypedData.js'
|
17
|
+
import { stringify } from './stringify.js'
|
18
|
+
|
19
|
+
export type SerializeTypedDataErrorType =
|
20
|
+
| HashDomainErrorType
|
21
|
+
| IsAddressErrorType
|
22
|
+
| NumberToHexErrorType
|
23
|
+
| SizeErrorType
|
24
|
+
| ErrorType
|
25
|
+
|
26
|
+
export function serializeTypedData<
|
27
|
+
const typedData extends TypedData | Record<string, unknown>,
|
28
|
+
primaryType extends keyof typedData | 'EIP712Domain',
|
29
|
+
>(parameters: TypedDataDefinition<typedData, primaryType>) {
|
30
|
+
const {
|
31
|
+
domain: domain_,
|
32
|
+
message: message_,
|
33
|
+
primaryType,
|
34
|
+
types,
|
35
|
+
} = parameters as unknown as TypedDataDefinition
|
36
|
+
|
37
|
+
const normalizeData = (
|
38
|
+
struct: readonly TypedDataParameter[],
|
39
|
+
data_: Record<string, unknown>,
|
40
|
+
) => {
|
41
|
+
const data = { ...data_ }
|
42
|
+
for (const param of struct) {
|
43
|
+
const { name, type } = param
|
44
|
+
if (type === 'address') data[name] = (data[name] as string).toLowerCase()
|
45
|
+
}
|
46
|
+
return data
|
47
|
+
}
|
48
|
+
|
49
|
+
const domain = (() => {
|
50
|
+
if (!types.EIP712Domain) return {}
|
51
|
+
if (!domain_) return {}
|
52
|
+
return normalizeData(types.EIP712Domain, domain_)
|
53
|
+
})()
|
54
|
+
|
55
|
+
const message = (() => {
|
56
|
+
if (primaryType === 'EIP712Domain') return undefined
|
57
|
+
return normalizeData(types[primaryType], message_)
|
58
|
+
})()
|
59
|
+
|
60
|
+
console.log(message)
|
61
|
+
|
62
|
+
return stringify({ domain, message, primaryType, types })
|
63
|
+
}
|
17
64
|
|
18
65
|
export type ValidateTypedDataErrorType =
|
19
66
|
| HashDomainErrorType
|
@@ -72,11 +119,8 @@ export function validateTypedData<
|
|
72
119
|
// Validate domain types.
|
73
120
|
if (types.EIP712Domain && domain) validateData(types.EIP712Domain, domain)
|
74
121
|
|
75
|
-
|
76
|
-
|
77
|
-
const type = types[primaryType]
|
78
|
-
validateData(type, message)
|
79
|
-
}
|
122
|
+
// Validate message types.
|
123
|
+
if (primaryType !== 'EIP712Domain') validateData(types[primaryType], message)
|
80
124
|
}
|
81
125
|
|
82
126
|
export type GetTypesForEIP712DomainErrorType = ErrorType
|