viem 2.12.3 → 2.12.5

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # viem
2
2
 
3
+ ## 2.12.5
4
+
5
+ ### Patch Changes
6
+
7
+ - [`41b48d47eb326de497773ba73ea89be41f980add`](https://github.com/wevm/viem/commit/41b48d47eb326de497773ba73ea89be41f980add) Thanks [@tmm](https://github.com/tmm)! - Removed console log
8
+
9
+ ## 2.12.4
10
+
11
+ ### Patch Changes
12
+
13
+ - [`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`.
14
+
3
15
  ## 2.12.3
4
16
 
5
17
  ### 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.5';
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,33 @@ 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
+ return (0, stringify_js_1.stringify)({ domain, message, primaryType, types });
36
+ }
37
+ exports.serializeTypedData = serializeTypedData;
11
38
  function validateTypedData(parameters) {
12
39
  const { domain, message, primaryType, types } = parameters;
13
40
  const validateData = (struct, data) => {
@@ -41,10 +68,8 @@ function validateTypedData(parameters) {
41
68
  };
42
69
  if (types.EIP712Domain && domain)
43
70
  validateData(types.EIP712Domain, domain);
44
- if (primaryType !== 'EIP712Domain') {
45
- const type = types[primaryType];
46
- validateData(type, message);
47
- }
71
+ if (primaryType !== 'EIP712Domain')
72
+ validateData(types[primaryType], message);
48
73
  }
49
74
  exports.validateTypedData = validateTypedData;
50
75
  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.5';
2
2
  //# sourceMappingURL=version.js.map
@@ -5,6 +5,32 @@ 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
+ return stringify({ domain, message, primaryType, types });
33
+ }
8
34
  export function validateTypedData(parameters) {
9
35
  const { domain, message, primaryType, types } = parameters;
10
36
  const validateData = (struct, data) => {
@@ -41,11 +67,9 @@ export function validateTypedData(parameters) {
41
67
  // Validate domain types.
42
68
  if (types.EIP712Domain && domain)
43
69
  validateData(types.EIP712Domain, domain);
44
- if (primaryType !== 'EIP712Domain') {
45
- // Validate message types.
46
- const type = types[primaryType];
47
- validateData(type, message);
48
- }
70
+ // Validate message types.
71
+ if (primaryType !== 'EIP712Domain')
72
+ validateData(types[primaryType], message);
49
73
  }
50
74
  export function getTypesForEIP712Domain({ domain, }) {
51
75
  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.5";
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,UAgCxD;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.5'
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.5",
5
5
  "main": "./_cjs/index.js",
6
6
  "module": "./_esm/index.js",
7
7
  "types": "./_types/index.d.ts",
@@ -14,6 +14,51 @@ 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
+ return stringify({ domain, message, primaryType, types })
61
+ }
17
62
 
18
63
  export type ValidateTypedDataErrorType =
19
64
  | HashDomainErrorType
@@ -72,11 +117,8 @@ export function validateTypedData<
72
117
  // Validate domain types.
73
118
  if (types.EIP712Domain && domain) validateData(types.EIP712Domain, domain)
74
119
 
75
- if (primaryType !== 'EIP712Domain') {
76
- // Validate message types.
77
- const type = types[primaryType]
78
- validateData(type, message)
79
- }
120
+ // Validate message types.
121
+ if (primaryType !== 'EIP712Domain') validateData(types[primaryType], message)
80
122
  }
81
123
 
82
124
  export type GetTypesForEIP712DomainErrorType = ErrorType