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 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, stringify_js_1.stringify)({ domain: domain ?? {}, message, primaryType, types }, (_, value) => ((0, isHex_js_1.isHex)(value) ? value.toLowerCase() : value));
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;AAOhC,wDAAsE;AACtE,2DAA6E;AAC7E,2DAKiC;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,wBAAS,EACzB,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,EACrD,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAA,gBAAK,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAC3D,CAAA;IACD,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;AA7CD,sCA6CC"}
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"}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.version = void 0;
4
- exports.version = '2.12.3';
4
+ exports.version = '2.12.4';
5
5
  //# sourceMappingURL=version.js.map
@@ -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
- const type = types[primaryType];
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":"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"}
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 { isHex } from '../../utils/data/isHex.js';
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 = stringify({ domain: domain ?? {}, message, primaryType, types }, (_, value) => (isHex(value) ? value.toLowerCase() : value));
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;AAOhC,OAAO,EAAuB,KAAK,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAA2B,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAC7E,OAAO,EAGL,uBAAuB,EACvB,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,SAAS,CACzB,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,EACrD,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAC3D,CAAA;IACD,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"}
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"}
@@ -1,2 +1,2 @@
1
- export const version = '2.12.3';
1
+ export const version = '2.12.4';
2
2
  //# sourceMappingURL=version.js.map
@@ -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
- if (primaryType !== 'EIP712Domain') {
45
- // Validate message types.
46
- const type = types[primaryType];
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":"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"}
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 { type IsHexErrorType } from '../../utils/data/isHex.js';
15
- import { type StringifyErrorType } from '../../utils/stringify.js';
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,KAAK,cAAc,EAAS,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,KAAK,kBAAkB,EAAa,MAAM,0BAA0B,CAAA;AAC7E,OAAO,EACL,KAAK,gCAAgC,EACrC,KAAK,0BAA0B,EAGhC,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,CAqClC"}
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.3";
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;AAErC,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,QAoDxD;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"}
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 { type IsHexErrorType, isHex } from '../../utils/data/isHex.js'
22
- import { type StringifyErrorType, stringify } from '../../utils/stringify.js'
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 = stringify(
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.3'
1
+ export const version = '2.12.4'
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "viem",
3
3
  "description": "TypeScript Interface for Ethereum",
4
- "version": "2.12.3",
4
+ "version": "2.12.4",
5
5
  "main": "./_cjs/index.js",
6
6
  "module": "./_esm/index.js",
7
7
  "types": "./_types/index.d.ts",
@@ -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
- if (primaryType !== 'EIP712Domain') {
76
- // Validate message types.
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