viem 2.11.1 → 2.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +3 -3
  3. package/_cjs/actions/public/verifyMessage.js.map +1 -1
  4. package/_cjs/actions/siwe/verifySiweMessage.js +32 -0
  5. package/_cjs/actions/siwe/verifySiweMessage.js.map +1 -0
  6. package/_cjs/chains/definitions/flowPreviewnet.js +6 -0
  7. package/_cjs/chains/definitions/flowPreviewnet.js.map +1 -1
  8. package/_cjs/chains/definitions/jbcTestnet.js +0 -4
  9. package/_cjs/chains/definitions/jbcTestnet.js.map +1 -1
  10. package/_cjs/chains/definitions/l3x.js +24 -0
  11. package/_cjs/chains/definitions/l3x.js.map +1 -0
  12. package/_cjs/chains/definitions/l3xTestnet.js +24 -0
  13. package/_cjs/chains/definitions/l3xTestnet.js.map +1 -0
  14. package/_cjs/chains/definitions/metis.js +5 -0
  15. package/_cjs/chains/definitions/metis.js.map +1 -1
  16. package/_cjs/chains/definitions/thaiChain.js +29 -0
  17. package/_cjs/chains/definitions/thaiChain.js.map +1 -0
  18. package/_cjs/chains/index.js +10 -4
  19. package/_cjs/chains/index.js.map +1 -1
  20. package/_cjs/clients/decorators/public.js +2 -0
  21. package/_cjs/clients/decorators/public.js.map +1 -1
  22. package/_cjs/errors/siwe.js +22 -0
  23. package/_cjs/errors/siwe.js.map +1 -0
  24. package/_cjs/errors/version.js +1 -1
  25. package/_cjs/siwe/index.js +16 -0
  26. package/_cjs/siwe/index.js.map +1 -0
  27. package/_cjs/utils/siwe/createSiweMessage.js +122 -0
  28. package/_cjs/utils/siwe/createSiweMessage.js.map +1 -0
  29. package/_cjs/utils/siwe/generateSiweNonce.js +9 -0
  30. package/_cjs/utils/siwe/generateSiweNonce.js.map +1 -0
  31. package/_cjs/utils/siwe/parseSiweMessage.js +25 -0
  32. package/_cjs/utils/siwe/parseSiweMessage.js.map +1 -0
  33. package/_cjs/utils/siwe/types.js +3 -0
  34. package/_cjs/utils/siwe/types.js.map +1 -0
  35. package/_cjs/utils/siwe/utils.js +44 -0
  36. package/_cjs/utils/siwe/utils.js.map +1 -0
  37. package/_cjs/utils/siwe/validateSiweMessage.js +29 -0
  38. package/_cjs/utils/siwe/validateSiweMessage.js.map +1 -0
  39. package/_esm/actions/public/verifyMessage.js.map +1 -1
  40. package/_esm/actions/siwe/verifySiweMessage.js +39 -0
  41. package/_esm/actions/siwe/verifySiweMessage.js.map +1 -0
  42. package/_esm/chains/definitions/flowPreviewnet.js +6 -0
  43. package/_esm/chains/definitions/flowPreviewnet.js.map +1 -1
  44. package/_esm/chains/definitions/jbcTestnet.js +0 -4
  45. package/_esm/chains/definitions/jbcTestnet.js.map +1 -1
  46. package/_esm/chains/definitions/l3x.js +21 -0
  47. package/_esm/chains/definitions/l3x.js.map +1 -0
  48. package/_esm/chains/definitions/l3xTestnet.js +21 -0
  49. package/_esm/chains/definitions/l3xTestnet.js.map +1 -0
  50. package/_esm/chains/definitions/metis.js +5 -0
  51. package/_esm/chains/definitions/metis.js.map +1 -1
  52. package/_esm/chains/definitions/thaiChain.js +26 -0
  53. package/_esm/chains/definitions/thaiChain.js.map +1 -0
  54. package/_esm/chains/index.js +3 -0
  55. package/_esm/chains/index.js.map +1 -1
  56. package/_esm/clients/decorators/public.js +2 -0
  57. package/_esm/clients/decorators/public.js.map +1 -1
  58. package/_esm/errors/siwe.js +18 -0
  59. package/_esm/errors/siwe.js.map +1 -0
  60. package/_esm/errors/version.js +1 -1
  61. package/_esm/siwe/index.js +7 -0
  62. package/_esm/siwe/index.js.map +1 -0
  63. package/_esm/utils/siwe/createSiweMessage.js +137 -0
  64. package/_esm/utils/siwe/createSiweMessage.js.map +1 -0
  65. package/_esm/utils/siwe/generateSiweNonce.js +15 -0
  66. package/_esm/utils/siwe/generateSiweNonce.js.map +1 -0
  67. package/_esm/utils/siwe/parseSiweMessage.js +30 -0
  68. package/_esm/utils/siwe/parseSiweMessage.js.map +1 -0
  69. package/_esm/utils/siwe/types.js +2 -0
  70. package/_esm/utils/siwe/types.js.map +1 -0
  71. package/_esm/utils/siwe/utils.js +49 -0
  72. package/_esm/utils/siwe/utils.js.map +1 -0
  73. package/_esm/utils/siwe/validateSiweMessage.js +30 -0
  74. package/_esm/utils/siwe/validateSiweMessage.js.map +1 -0
  75. package/_types/actions/public/verifyMessage.d.ts +3 -2
  76. package/_types/actions/public/verifyMessage.d.ts.map +1 -1
  77. package/_types/actions/siwe/verifySiweMessage.d.ts +34 -0
  78. package/_types/actions/siwe/verifySiweMessage.d.ts.map +1 -0
  79. package/_types/chains/definitions/flowPreviewnet.d.ts +6 -8
  80. package/_types/chains/definitions/flowPreviewnet.d.ts.map +1 -1
  81. package/_types/chains/definitions/jbcTestnet.d.ts +0 -4
  82. package/_types/chains/definitions/jbcTestnet.d.ts.map +1 -1
  83. package/_types/chains/definitions/l3x.d.ts +37 -0
  84. package/_types/chains/definitions/l3x.d.ts.map +1 -0
  85. package/_types/chains/definitions/l3xTestnet.d.ts +37 -0
  86. package/_types/chains/definitions/l3xTestnet.d.ts.map +1 -0
  87. package/_types/chains/definitions/metis.d.ts +5 -0
  88. package/_types/chains/definitions/metis.d.ts.map +1 -1
  89. package/_types/chains/definitions/thaiChain.d.ts +34 -0
  90. package/_types/chains/definitions/thaiChain.d.ts.map +1 -0
  91. package/_types/chains/index.d.ts +3 -0
  92. package/_types/chains/index.d.ts.map +1 -1
  93. package/_types/clients/decorators/public.d.ts +30 -0
  94. package/_types/clients/decorators/public.d.ts.map +1 -1
  95. package/_types/errors/siwe.d.ts +13 -0
  96. package/_types/errors/siwe.d.ts.map +1 -0
  97. package/_types/errors/version.d.ts +1 -1
  98. package/_types/siwe/index.d.ts +8 -0
  99. package/_types/siwe/index.d.ts.map +1 -0
  100. package/_types/utils/siwe/createSiweMessage.d.ts +24 -0
  101. package/_types/utils/siwe/createSiweMessage.d.ts.map +1 -0
  102. package/_types/utils/siwe/generateSiweNonce.d.ts +12 -0
  103. package/_types/utils/siwe/generateSiweNonce.d.ts.map +1 -0
  104. package/_types/utils/siwe/parseSiweMessage.d.ts +11 -0
  105. package/_types/utils/siwe/parseSiweMessage.d.ts.map +1 -0
  106. package/_types/utils/siwe/types.d.ts +61 -0
  107. package/_types/utils/siwe/types.d.ts.map +1 -0
  108. package/_types/utils/siwe/utils.d.ts +2 -0
  109. package/_types/utils/siwe/utils.d.ts.map +1 -0
  110. package/_types/utils/siwe/validateSiweMessage.d.ts +39 -0
  111. package/_types/utils/siwe/validateSiweMessage.d.ts.map +1 -0
  112. package/actions/public/verifyMessage.ts +11 -8
  113. package/actions/siwe/verifySiweMessage.ts +90 -0
  114. package/chains/definitions/flowPreviewnet.ts +6 -0
  115. package/chains/definitions/jbcTestnet.ts +0 -4
  116. package/chains/definitions/l3x.ts +21 -0
  117. package/chains/definitions/l3xTestnet.ts +21 -0
  118. package/chains/definitions/metis.ts +6 -0
  119. package/chains/definitions/thaiChain.ts +26 -0
  120. package/chains/index.ts +3 -0
  121. package/clients/decorators/public.ts +37 -0
  122. package/errors/siwe.ts +20 -0
  123. package/errors/version.ts +1 -1
  124. package/package.json +9 -1
  125. package/siwe/index.ts +29 -0
  126. package/siwe/package.json +6 -0
  127. package/utils/siwe/createSiweMessage.ts +168 -0
  128. package/utils/siwe/generateSiweNonce.ts +15 -0
  129. package/utils/siwe/parseSiweMessage.ts +55 -0
  130. package/utils/siwe/types.ts +61 -0
  131. package/utils/siwe/utils.ts +51 -0
  132. package/utils/siwe/validateSiweMessage.ts +70 -0
@@ -1,2 +1,2 @@
1
- export declare const version = "2.11.1";
1
+ export declare const version = "2.12.0";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1,8 @@
1
+ export { verifySiweMessage, type VerifySiweMessageParameters, type VerifySiweMessageReturnType, type VerifySiweMessageErrorType, } from '../actions/siwe/verifySiweMessage.js';
2
+ export { createSiweMessage, type CreateSiweMessageParameters, type CreateSiweMessageReturnType, type CreateSiweMessageErrorType, } from '../utils/siwe/createSiweMessage.js';
3
+ export { generateSiweNonce } from '../utils/siwe/generateSiweNonce.js';
4
+ export { parseSiweMessage } from '../utils/siwe/parseSiweMessage.js';
5
+ export { validateSiweMessage, type ValidateSiweMessageParameters, type ValidateSiweMessageReturnType, } from '../utils/siwe/validateSiweMessage.js';
6
+ export type { SiweMessage } from '../utils/siwe/types.js';
7
+ export { type SiweInvalidMessageFieldErrorType, SiweInvalidMessageFieldError, } from '../errors/siwe.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../siwe/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,GAChC,MAAM,sCAAsC,CAAA;AAE7C,OAAO,EACL,iBAAiB,EACjB,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,GAChC,MAAM,oCAAoC,CAAA;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAEpE,OAAO,EACL,mBAAmB,EACnB,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,GACnC,MAAM,sCAAsC,CAAA;AAE7C,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEzD,OAAO,EACL,KAAK,gCAAgC,EACrC,4BAA4B,GAC7B,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,24 @@
1
+ import { type SiweInvalidMessageFieldErrorType } from '../../errors/siwe.js';
2
+ import type { ErrorType } from '../../errors/utils.js';
3
+ import { type GetAddressErrorType } from '../address/getAddress.js';
4
+ import type { SiweMessage } from './types.js';
5
+ export type CreateSiweMessageParameters = SiweMessage;
6
+ export type CreateSiweMessageReturnType = string;
7
+ export type CreateSiweMessageErrorType = GetAddressErrorType | SiweInvalidMessageFieldErrorType | ErrorType;
8
+ /**
9
+ * @description Creates EIP-4361 formatted message.
10
+ *
11
+ * @example
12
+ * const message = createMessage({
13
+ * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
14
+ * chainId: 1,
15
+ * domain: 'example.com',
16
+ * nonce: 'foobarbaz',
17
+ * uri: 'https://example.com/path',
18
+ * version: '1',
19
+ * })
20
+ *
21
+ * @see https://eips.ethereum.org/EIPS/eip-4361
22
+ */
23
+ export declare function createSiweMessage(parameters: CreateSiweMessageParameters): CreateSiweMessageReturnType;
24
+ //# sourceMappingURL=createSiweMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSiweMessage.d.ts","sourceRoot":"","sources":["../../../utils/siwe/createSiweMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gCAAgC,EACtC,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,KAAK,mBAAmB,EAAc,MAAM,0BAA0B,CAAA;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAG7C,MAAM,MAAM,2BAA2B,GAAG,WAAW,CAAA;AAErD,MAAM,MAAM,2BAA2B,GAAG,MAAM,CAAA;AAEhD,MAAM,MAAM,0BAA0B,GAClC,mBAAmB,GACnB,gCAAgC,GAChC,SAAS,CAAA;AAEb;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,2BAA2B,GACtC,2BAA2B,CAgI7B"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @description Generates random EIP-4361 nonce.
3
+ *
4
+ * @example
5
+ * const nonce = generateNonce()
6
+ *
7
+ * @see https://eips.ethereum.org/EIPS/eip-4361
8
+ *
9
+ * @returns A randomly generated EIP-4361 nonce.
10
+ */
11
+ export declare function generateSiweNonce(): string;
12
+ //# sourceMappingURL=generateSiweNonce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateSiweNonce.d.ts","sourceRoot":"","sources":["../../../utils/siwe/generateSiweNonce.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
@@ -0,0 +1,11 @@
1
+ import type { ExactPartial, Prettify } from '../../types/utils.js';
2
+ import type { SiweMessage } from './types.js';
3
+ /**
4
+ * @description Parses EIP-4361 formatted message into message fields object.
5
+ *
6
+ * @see https://eips.ethereum.org/EIPS/eip-4361
7
+ *
8
+ * @returns EIP-4361 fields object
9
+ */
10
+ export declare function parseSiweMessage(message: string): Prettify<ExactPartial<SiweMessage>>;
11
+ //# sourceMappingURL=parseSiweMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseSiweMessage.d.ts","sourceRoot":"","sources":["../../../utils/siwe/parseSiweMessage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,GACd,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAgCrC"}
@@ -0,0 +1,61 @@
1
+ import type { Address } from 'abitype';
2
+ /**
3
+ * @description EIP-4361 message fields
4
+ *
5
+ * @see https://eips.ethereum.org/EIPS/eip-4361
6
+ */
7
+ export type SiweMessage = {
8
+ /**
9
+ * The Ethereum address performing the signing.
10
+ */
11
+ address: Address;
12
+ /**
13
+ * The [EIP-155](https://eips.ethereum.org/EIPS/eip-155) Chain ID to which the session is bound,
14
+ */
15
+ chainId: number;
16
+ /**
17
+ * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986) authority that is requesting the signing.
18
+ */
19
+ domain: string;
20
+ /**
21
+ * Time when the signed authentication message is no longer valid.
22
+ */
23
+ expirationTime?: Date | undefined;
24
+ /**
25
+ * Time when the message was generated, typically the current time.
26
+ */
27
+ issuedAt?: Date | undefined;
28
+ /**
29
+ * A random string typically chosen by the relying party and used to prevent replay attacks.
30
+ */
31
+ nonce: string;
32
+ /**
33
+ * Time when the signed authentication message will become valid.
34
+ */
35
+ notBefore?: Date | undefined;
36
+ /**
37
+ * A system-specific identifier that may be used to uniquely refer to the sign-in request.
38
+ */
39
+ requestId?: string | undefined;
40
+ /**
41
+ * A list of information or references to information the user wishes to have resolved as part of authentication by the relying party.
42
+ */
43
+ resources?: string[] | undefined;
44
+ /**
45
+ * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) URI scheme of the origin of the request.
46
+ */
47
+ scheme?: string | undefined;
48
+ /**
49
+ * A human-readable ASCII assertion that the user will sign.
50
+ */
51
+ statement?: string | undefined;
52
+ /**
53
+ * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986) URI referring to the resource that is the subject of the signing (as in the subject of a claim).
54
+ */
55
+ uri: string;
56
+ /**
57
+ * The current version of the SIWE Message.
58
+ */
59
+ version: '1';
60
+ };
61
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../utils/siwe/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;IAChB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,cAAc,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;IACjC;;OAEG;IACH,QAAQ,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;IAC3B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,SAAS,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;IAC5B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IAChC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;OAEG;IACH,OAAO,EAAE,GAAG,CAAA;CACb,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function isUri(value: string): string | false;
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../utils/siwe/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,kBA4ClC"}
@@ -0,0 +1,39 @@
1
+ import type { Address } from 'abitype';
2
+ import type { ExactPartial } from '../../types/utils.js';
3
+ import type { SiweMessage } from './types.js';
4
+ export type ValidateSiweMessageParameters = {
5
+ /**
6
+ * Ethereum address to check against.
7
+ */
8
+ address?: Address | undefined;
9
+ /**
10
+ * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986) authority to check against.
11
+ */
12
+ domain?: string | undefined;
13
+ /**
14
+ * EIP-4361 message fields.
15
+ */
16
+ message: ExactPartial<SiweMessage>;
17
+ /**
18
+ * Random string to check against.
19
+ */
20
+ nonce?: string | undefined;
21
+ /**
22
+ * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) URI scheme to check against.
23
+ */
24
+ scheme?: string | undefined;
25
+ /**
26
+ * Current time to check optional `expirationTime` and `notBefore` fields.
27
+ *
28
+ * @default new Date()
29
+ */
30
+ time?: Date | undefined;
31
+ };
32
+ export type ValidateSiweMessageReturnType = boolean;
33
+ /**
34
+ * @description Validates EIP-4361 message.
35
+ *
36
+ * @see https://eips.ethereum.org/EIPS/eip-4361
37
+ */
38
+ export declare function validateSiweMessage(parameters: ValidateSiweMessageParameters): ValidateSiweMessageReturnType;
39
+ //# sourceMappingURL=validateSiweMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateSiweMessage.d.ts","sourceRoot":"","sources":["../../../utils/siwe/validateSiweMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C,MAAM,MAAM,6BAA6B,GAAG;IAC1C;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B;;OAEG;IACH,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,CAAA;IAClC;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B;;;;OAIG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,OAAO,CAAA;AAEnD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,6BAA6B,GACxC,6BAA6B,CAyB/B"}
@@ -10,6 +10,7 @@ import type {
10
10
  SignableMessage,
11
11
  Signature,
12
12
  } from '../../types/misc.js'
13
+ import type { Prettify } from '../../types/utils.js'
13
14
  import { hashMessage } from '../../utils/signature/hashMessage.js'
14
15
  import type { HashMessageErrorType } from '../../utils/signature/hashMessage.js'
15
16
  import {
@@ -18,14 +19,16 @@ import {
18
19
  verifyHash,
19
20
  } from './verifyHash.js'
20
21
 
21
- export type VerifyMessageParameters = Omit<VerifyHashParameters, 'hash'> & {
22
- /** The address that signed the original message. */
23
- address: Address
24
- /** The message to be verified. */
25
- message: SignableMessage
26
- /** The signature that was generated by signing the message with the address's private key. */
27
- signature: Hex | ByteArray | Signature
28
- }
22
+ export type VerifyMessageParameters = Prettify<
23
+ Omit<VerifyHashParameters, 'hash'> & {
24
+ /** The address that signed the original message. */
25
+ address: Address
26
+ /** The message to be verified. */
27
+ message: SignableMessage
28
+ /** The signature that was generated by signing the message with the address's private key. */
29
+ signature: Hex | ByteArray | Signature
30
+ }
31
+ >
29
32
 
30
33
  export type VerifyMessageReturnType = boolean
31
34
 
@@ -0,0 +1,90 @@
1
+ import type { Client } from '../../clients/createClient.js'
2
+ import type { Transport } from '../../clients/transports/createTransport.js'
3
+ import type { ErrorType } from '../../errors/utils.js'
4
+ import type { Chain } from '../../types/chain.js'
5
+ import type { Hex } from '../../types/misc.js'
6
+ import type { Prettify } from '../../types/utils.js'
7
+ import { hashMessage } from '../../utils/signature/hashMessage.js'
8
+ import type { HashMessageErrorType } from '../../utils/signature/hashMessage.js'
9
+ import { parseSiweMessage } from '../../utils/siwe/parseSiweMessage.js'
10
+ import {
11
+ type ValidateSiweMessageParameters,
12
+ validateSiweMessage,
13
+ } from '../../utils/siwe/validateSiweMessage.js'
14
+ import {
15
+ type VerifyHashErrorType,
16
+ type VerifyHashParameters,
17
+ verifyHash,
18
+ } from '../public/verifyHash.js'
19
+
20
+ export type VerifySiweMessageParameters = Prettify<
21
+ Pick<VerifyHashParameters, 'blockNumber' | 'blockTag'> &
22
+ Pick<
23
+ ValidateSiweMessageParameters,
24
+ 'address' | 'domain' | 'nonce' | 'scheme' | 'time'
25
+ > & {
26
+ /**
27
+ * EIP-4361 formatted message.
28
+ */
29
+ message: string
30
+ /**
31
+ * Signature to check against.
32
+ */
33
+ signature: Hex
34
+ }
35
+ >
36
+
37
+ export type VerifySiweMessageReturnType = boolean
38
+
39
+ export type VerifySiweMessageErrorType =
40
+ | HashMessageErrorType
41
+ | VerifyHashErrorType
42
+ | ErrorType
43
+
44
+ /**
45
+ * Verifies [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) formatted message was signed.
46
+ *
47
+ * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).
48
+ *
49
+ * - Docs {@link https://viem.sh/docs/siwe/actions/verifySiweMessage}
50
+ *
51
+ * @param client - Client to use.
52
+ * @param parameters - {@link VerifySiweMessageParameters}
53
+ * @returns Whether or not the signature is valid. {@link VerifySiweMessageReturnType}
54
+ */
55
+ export async function verifySiweMessage<chain extends Chain | undefined>(
56
+ client: Client<Transport, chain>,
57
+ parameters: VerifySiweMessageParameters,
58
+ ): Promise<VerifySiweMessageReturnType> {
59
+ const {
60
+ address,
61
+ domain,
62
+ message,
63
+ nonce,
64
+ scheme,
65
+ signature,
66
+ time = new Date(),
67
+ ...callRequest
68
+ } = parameters
69
+
70
+ const parsed = parseSiweMessage(message)
71
+ if (!parsed.address) return false
72
+
73
+ const isValid = validateSiweMessage({
74
+ address,
75
+ domain,
76
+ message: parsed,
77
+ nonce,
78
+ scheme,
79
+ time,
80
+ })
81
+ if (!isValid) return false
82
+
83
+ const hash = hashMessage(message)
84
+ return verifyHash(client, {
85
+ address: parsed.address,
86
+ hash,
87
+ signature,
88
+ ...callRequest,
89
+ })
90
+ }
@@ -19,4 +19,10 @@ export const flowPreviewnet = /*#__PURE__*/ defineChain({
19
19
  url: 'https://previewnet.flowdiver.io',
20
20
  },
21
21
  },
22
+ contracts: {
23
+ multicall3: {
24
+ address: '0xca11bde05977b3631167028862be2a173976ca11',
25
+ blockCreated: 6205,
26
+ },
27
+ },
22
28
  })
@@ -3,15 +3,11 @@ import { defineChain } from '../../utils/chain/defineChain.js'
3
3
  export const jbcTestnet = /*#__PURE__*/ defineChain({
4
4
  id: 88991,
5
5
  name: 'Jibchain Testnet',
6
- network: 'jbcTestnet',
7
6
  nativeCurrency: { name: 'tJBC', symbol: 'tJBC', decimals: 18 },
8
7
  rpcUrls: {
9
8
  default: {
10
9
  http: ['https://rpc.testnet.jibchain.net'],
11
10
  },
12
- public: {
13
- http: ['https://rpc.testnet.jibchain.net'],
14
- },
15
11
  },
16
12
  blockExplorers: {
17
13
  default: {
@@ -0,0 +1,21 @@
1
+ import { defineChain } from '../../utils/chain/defineChain.js'
2
+
3
+ export const l3x = /*#__PURE__*/ defineChain({
4
+ id: 12324,
5
+ name: 'L3X Protocol',
6
+ nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },
7
+ rpcUrls: {
8
+ default: {
9
+ http: ['https://rpc-mainnet.l3x.com'],
10
+ webSocket: ['wss://rpc-mainnet.l3x.com'],
11
+ },
12
+ },
13
+ blockExplorers: {
14
+ default: {
15
+ name: 'L3X Mainnet Explorer',
16
+ url: 'https://explorer.l3x.com',
17
+ apiUrl: 'https://explorer.l3x.com/api/v2',
18
+ },
19
+ },
20
+ testnet: false,
21
+ })
@@ -0,0 +1,21 @@
1
+ import { defineChain } from '../../utils/chain/defineChain.js'
2
+
3
+ export const l3xTestnet = /*#__PURE__*/ defineChain({
4
+ id: 12325,
5
+ name: 'L3X Protocol Testnet',
6
+ nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },
7
+ rpcUrls: {
8
+ default: {
9
+ http: ['https://rpc-testnet.l3x.com'],
10
+ webSocket: ['wss://rpc-testnet.l3x.com'],
11
+ },
12
+ },
13
+ blockExplorers: {
14
+ default: {
15
+ name: 'L3X Testnet Explorer',
16
+ url: 'https://explorer-testnet.l3x.com',
17
+ apiUrl: 'https://explorer-testnet.l3x.com/api/v2',
18
+ },
19
+ },
20
+ testnet: true,
21
+ })
@@ -13,6 +13,12 @@ export const metis = /*#__PURE__*/ defineChain({
13
13
  },
14
14
  blockExplorers: {
15
15
  default: {
16
+ name: 'Metis Explorer',
17
+ url: 'https://explorer.metis.io',
18
+ apiUrl:
19
+ 'https://api.routescan.io/v2/network/mainnet/evm/43114/etherscan/api',
20
+ },
21
+ blockscout: {
16
22
  name: 'Andromeda Explorer',
17
23
  url: 'https://andromeda-explorer.metis.io',
18
24
  apiUrl: 'https://andromeda-explorer.metis.io/api',
@@ -0,0 +1,26 @@
1
+ import { defineChain } from '../../utils/chain/defineChain.js'
2
+
3
+ export const thaiChain = /*#__PURE__*/ defineChain({
4
+ id: 7,
5
+ name: 'ThaiChain',
6
+ nativeCurrency: { name: 'TCH', symbol: 'TCH', decimals: 18 },
7
+ rpcUrls: {
8
+ default: {
9
+ http: ['hhttps://rpc.thaichain.org'],
10
+ },
11
+ },
12
+ blockExplorers: {
13
+ default: {
14
+ name: 'Blockscout',
15
+ url: 'https://exp.thaichain.org',
16
+ apiUrl: 'https://exp.thaichain.org/api',
17
+ },
18
+ },
19
+ contracts: {
20
+ multicall3: {
21
+ address: '0x0DaD6130e832c21719C5CE3bae93454E16A84826',
22
+ blockCreated: 4806386,
23
+ },
24
+ },
25
+ testnet: false,
26
+ })
package/chains/index.ts CHANGED
@@ -124,6 +124,8 @@ export { klaytn } from './definitions/klaytn.js'
124
124
  export { klaytnBaobab } from './definitions/klaytnBaobab.js'
125
125
  export { kroma } from './definitions/kroma.js'
126
126
  export { kromaSepolia } from './definitions/kromaSepolia.js'
127
+ export { l3x } from './definitions/l3x.js'
128
+ export { l3xTestnet } from './definitions/l3xTestnet.js'
127
129
  export { lightlinkPegasus } from './definitions/lightlinkPegasus.js'
128
130
  export { lightlinkPhoenix } from './definitions/lightlinkPhoenix.js'
129
131
  export { linea } from './definitions/linea.js'
@@ -246,6 +248,7 @@ export { telcoinTestnet } from './definitions/telcoinTestnet.js'
246
248
  export { telos } from './definitions/telos.js'
247
249
  export { telosTestnet } from './definitions/telosTestnet.js'
248
250
  export { tenet } from './definitions/tenet.js'
251
+ export { thaiChain } from './definitions/thaiChain.js'
249
252
  export { thunderTestnet } from './definitions/thunderTestnet.js'
250
253
  export { vechain } from './definitions/vechain.js'
251
254
  export { wanchain } from './definitions/wanchain.js'
@@ -220,6 +220,11 @@ import {
220
220
  type WatchPendingTransactionsReturnType,
221
221
  watchPendingTransactions,
222
222
  } from '../../actions/public/watchPendingTransactions.js'
223
+ import {
224
+ type VerifySiweMessageParameters,
225
+ type VerifySiweMessageReturnType,
226
+ verifySiweMessage,
227
+ } from '../../actions/siwe/verifySiweMessage.js'
223
228
  import {
224
229
  type PrepareTransactionRequestParameters,
225
230
  type PrepareTransactionRequestRequest,
@@ -1511,9 +1516,40 @@ export type PublicActions<
1511
1516
  accountOverride
1512
1517
  >
1513
1518
  >
1519
+ /**
1520
+ * Verify that a message was signed by the provided address.
1521
+ *
1522
+ * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).
1523
+ *
1524
+ * - Docs {@link https://viem.sh/docs/actions/public/verifyMessage}
1525
+ *
1526
+ * @param parameters - {@link VerifyMessageParameters}
1527
+ * @returns Whether or not the signature is valid. {@link VerifyMessageReturnType}
1528
+ */
1514
1529
  verifyMessage: (
1515
1530
  args: VerifyMessageParameters,
1516
1531
  ) => Promise<VerifyMessageReturnType>
1532
+ /**
1533
+ * Verifies [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) formatted message was signed.
1534
+ *
1535
+ * Compatible with Smart Contract Accounts & Externally Owned Accounts via [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492).
1536
+ *
1537
+ * - Docs {@link https://viem.sh/docs/siwe/actions/verifySiweMessage}
1538
+ *
1539
+ * @param parameters - {@link VerifySiweMessageParameters}
1540
+ * @returns Whether or not the signature is valid. {@link VerifySiweMessageReturnType}
1541
+ */
1542
+ verifySiweMessage: (
1543
+ args: VerifySiweMessageParameters,
1544
+ ) => Promise<VerifySiweMessageReturnType>
1545
+ /**
1546
+ * Verify that typed data was signed by the provided address.
1547
+ *
1548
+ * - Docs {@link https://viem.sh/docs/actions/public/verifyTypedData}
1549
+ *
1550
+ * @param parameters - {@link VerifyTypedDataParameters}
1551
+ * @returns Whether or not the signature is valid. {@link VerifyTypedDataReturnType}
1552
+ */
1517
1553
  verifyTypedData: (
1518
1554
  args: VerifyTypedDataParameters,
1519
1555
  ) => Promise<VerifyTypedDataReturnType>
@@ -1807,6 +1843,7 @@ export function publicActions<
1807
1843
  sendRawTransaction: (args) => sendRawTransaction(client, args),
1808
1844
  simulateContract: (args) => simulateContract(client, args),
1809
1845
  verifyMessage: (args) => verifyMessage(client, args),
1846
+ verifySiweMessage: (args) => verifySiweMessage(client, args),
1810
1847
  verifyTypedData: (args) => verifyTypedData(client, args),
1811
1848
  uninstallFilter: (args) => uninstallFilter(client, args),
1812
1849
  waitForTransactionReceipt: (args) =>
package/errors/siwe.ts ADDED
@@ -0,0 +1,20 @@
1
+ import { BaseError } from './base.js'
2
+
3
+ export type SiweInvalidMessageFieldErrorType = SiweInvalidMessageFieldError & {
4
+ name: 'SiweInvalidMessageFieldError'
5
+ }
6
+ export class SiweInvalidMessageFieldError extends BaseError {
7
+ override name = 'SiweInvalidMessageFieldError'
8
+ constructor(parameters: {
9
+ docsPath?: string | undefined
10
+ field: string
11
+ metaMessages?: string[] | undefined
12
+ }) {
13
+ const { docsPath, field, metaMessages } = parameters
14
+ super(`Invalid Sign-In with Ethereum message field "${field}".`, {
15
+ docsPath,
16
+ docsSlug: 'TODO',
17
+ metaMessages,
18
+ })
19
+ }
20
+ }
package/errors/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '2.11.1'
1
+ export const version = '2.12.0'
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "viem",
3
3
  "description": "TypeScript Interface for Ethereum",
4
- "version": "2.11.1",
4
+ "version": "2.12.0",
5
5
  "main": "./_cjs/index.js",
6
6
  "module": "./_esm/index.js",
7
7
  "types": "./_types/index.d.ts",
@@ -68,6 +68,11 @@
68
68
  "import": "./_esm/op-stack/index.js",
69
69
  "default": "./_cjs/op-stack/index.js"
70
70
  },
71
+ "./siwe": {
72
+ "types": "./_types/siwe/index.d.ts",
73
+ "import": "./_esm/siwe/index.js",
74
+ "default": "./_cjs/siwe/index.js"
75
+ },
71
76
  "./utils": {
72
77
  "types": "./_types/utils/index.d.ts",
73
78
  "import": "./_esm/utils/index.js",
@@ -114,6 +119,9 @@
114
119
  "op-stack": [
115
120
  "./_types/op-stack/index.d.ts"
116
121
  ],
122
+ "siwe": [
123
+ "./_types/siwe/index.d.ts"
124
+ ],
117
125
  "utils": [
118
126
  "./_types/utils/index.d.ts"
119
127
  ],
package/siwe/index.ts ADDED
@@ -0,0 +1,29 @@
1
+ export {
2
+ verifySiweMessage,
3
+ type VerifySiweMessageParameters,
4
+ type VerifySiweMessageReturnType,
5
+ type VerifySiweMessageErrorType,
6
+ } from '../actions/siwe/verifySiweMessage.js'
7
+
8
+ export {
9
+ createSiweMessage,
10
+ type CreateSiweMessageParameters,
11
+ type CreateSiweMessageReturnType,
12
+ type CreateSiweMessageErrorType,
13
+ } from '../utils/siwe/createSiweMessage.js'
14
+
15
+ export { generateSiweNonce } from '../utils/siwe/generateSiweNonce.js'
16
+ export { parseSiweMessage } from '../utils/siwe/parseSiweMessage.js'
17
+
18
+ export {
19
+ validateSiweMessage,
20
+ type ValidateSiweMessageParameters,
21
+ type ValidateSiweMessageReturnType,
22
+ } from '../utils/siwe/validateSiweMessage.js'
23
+
24
+ export type { SiweMessage } from '../utils/siwe/types.js'
25
+
26
+ export {
27
+ type SiweInvalidMessageFieldErrorType,
28
+ SiweInvalidMessageFieldError,
29
+ } from '../errors/siwe.js'
@@ -0,0 +1,6 @@
1
+ {
2
+ "type": "module",
3
+ "types": "../_types/siwe/index.d.ts",
4
+ "module": "../_esm/siwe/index.js",
5
+ "main": "../_cjs/siwe/index.js"
6
+ }