viem 2.12.3 → 2.12.4
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 +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":"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"}
|
@@ -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
|