viem 2.11.1 → 2.12.0
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +16 -0
- package/README.md +3 -3
- package/_cjs/actions/public/verifyMessage.js.map +1 -1
- package/_cjs/actions/siwe/verifySiweMessage.js +32 -0
- package/_cjs/actions/siwe/verifySiweMessage.js.map +1 -0
- package/_cjs/chains/definitions/flowPreviewnet.js +6 -0
- package/_cjs/chains/definitions/flowPreviewnet.js.map +1 -1
- package/_cjs/chains/definitions/jbcTestnet.js +0 -4
- package/_cjs/chains/definitions/jbcTestnet.js.map +1 -1
- package/_cjs/chains/definitions/l3x.js +24 -0
- package/_cjs/chains/definitions/l3x.js.map +1 -0
- package/_cjs/chains/definitions/l3xTestnet.js +24 -0
- package/_cjs/chains/definitions/l3xTestnet.js.map +1 -0
- package/_cjs/chains/definitions/metis.js +5 -0
- package/_cjs/chains/definitions/metis.js.map +1 -1
- package/_cjs/chains/definitions/thaiChain.js +29 -0
- package/_cjs/chains/definitions/thaiChain.js.map +1 -0
- package/_cjs/chains/index.js +10 -4
- package/_cjs/chains/index.js.map +1 -1
- package/_cjs/clients/decorators/public.js +2 -0
- package/_cjs/clients/decorators/public.js.map +1 -1
- package/_cjs/errors/siwe.js +22 -0
- package/_cjs/errors/siwe.js.map +1 -0
- package/_cjs/errors/version.js +1 -1
- package/_cjs/siwe/index.js +16 -0
- package/_cjs/siwe/index.js.map +1 -0
- package/_cjs/utils/siwe/createSiweMessage.js +122 -0
- package/_cjs/utils/siwe/createSiweMessage.js.map +1 -0
- package/_cjs/utils/siwe/generateSiweNonce.js +9 -0
- package/_cjs/utils/siwe/generateSiweNonce.js.map +1 -0
- package/_cjs/utils/siwe/parseSiweMessage.js +25 -0
- package/_cjs/utils/siwe/parseSiweMessage.js.map +1 -0
- package/_cjs/utils/siwe/types.js +3 -0
- package/_cjs/utils/siwe/types.js.map +1 -0
- package/_cjs/utils/siwe/utils.js +44 -0
- package/_cjs/utils/siwe/utils.js.map +1 -0
- package/_cjs/utils/siwe/validateSiweMessage.js +29 -0
- package/_cjs/utils/siwe/validateSiweMessage.js.map +1 -0
- package/_esm/actions/public/verifyMessage.js.map +1 -1
- package/_esm/actions/siwe/verifySiweMessage.js +39 -0
- package/_esm/actions/siwe/verifySiweMessage.js.map +1 -0
- package/_esm/chains/definitions/flowPreviewnet.js +6 -0
- package/_esm/chains/definitions/flowPreviewnet.js.map +1 -1
- package/_esm/chains/definitions/jbcTestnet.js +0 -4
- package/_esm/chains/definitions/jbcTestnet.js.map +1 -1
- package/_esm/chains/definitions/l3x.js +21 -0
- package/_esm/chains/definitions/l3x.js.map +1 -0
- package/_esm/chains/definitions/l3xTestnet.js +21 -0
- package/_esm/chains/definitions/l3xTestnet.js.map +1 -0
- package/_esm/chains/definitions/metis.js +5 -0
- package/_esm/chains/definitions/metis.js.map +1 -1
- package/_esm/chains/definitions/thaiChain.js +26 -0
- package/_esm/chains/definitions/thaiChain.js.map +1 -0
- package/_esm/chains/index.js +3 -0
- package/_esm/chains/index.js.map +1 -1
- package/_esm/clients/decorators/public.js +2 -0
- package/_esm/clients/decorators/public.js.map +1 -1
- package/_esm/errors/siwe.js +18 -0
- package/_esm/errors/siwe.js.map +1 -0
- package/_esm/errors/version.js +1 -1
- package/_esm/siwe/index.js +7 -0
- package/_esm/siwe/index.js.map +1 -0
- package/_esm/utils/siwe/createSiweMessage.js +137 -0
- package/_esm/utils/siwe/createSiweMessage.js.map +1 -0
- package/_esm/utils/siwe/generateSiweNonce.js +15 -0
- package/_esm/utils/siwe/generateSiweNonce.js.map +1 -0
- package/_esm/utils/siwe/parseSiweMessage.js +30 -0
- package/_esm/utils/siwe/parseSiweMessage.js.map +1 -0
- package/_esm/utils/siwe/types.js +2 -0
- package/_esm/utils/siwe/types.js.map +1 -0
- package/_esm/utils/siwe/utils.js +49 -0
- package/_esm/utils/siwe/utils.js.map +1 -0
- package/_esm/utils/siwe/validateSiweMessage.js +30 -0
- package/_esm/utils/siwe/validateSiweMessage.js.map +1 -0
- package/_types/actions/public/verifyMessage.d.ts +3 -2
- package/_types/actions/public/verifyMessage.d.ts.map +1 -1
- package/_types/actions/siwe/verifySiweMessage.d.ts +34 -0
- package/_types/actions/siwe/verifySiweMessage.d.ts.map +1 -0
- package/_types/chains/definitions/flowPreviewnet.d.ts +6 -8
- package/_types/chains/definitions/flowPreviewnet.d.ts.map +1 -1
- package/_types/chains/definitions/jbcTestnet.d.ts +0 -4
- package/_types/chains/definitions/jbcTestnet.d.ts.map +1 -1
- package/_types/chains/definitions/l3x.d.ts +37 -0
- package/_types/chains/definitions/l3x.d.ts.map +1 -0
- package/_types/chains/definitions/l3xTestnet.d.ts +37 -0
- package/_types/chains/definitions/l3xTestnet.d.ts.map +1 -0
- package/_types/chains/definitions/metis.d.ts +5 -0
- package/_types/chains/definitions/metis.d.ts.map +1 -1
- package/_types/chains/definitions/thaiChain.d.ts +34 -0
- package/_types/chains/definitions/thaiChain.d.ts.map +1 -0
- package/_types/chains/index.d.ts +3 -0
- package/_types/chains/index.d.ts.map +1 -1
- package/_types/clients/decorators/public.d.ts +30 -0
- package/_types/clients/decorators/public.d.ts.map +1 -1
- package/_types/errors/siwe.d.ts +13 -0
- package/_types/errors/siwe.d.ts.map +1 -0
- package/_types/errors/version.d.ts +1 -1
- package/_types/siwe/index.d.ts +8 -0
- package/_types/siwe/index.d.ts.map +1 -0
- package/_types/utils/siwe/createSiweMessage.d.ts +24 -0
- package/_types/utils/siwe/createSiweMessage.d.ts.map +1 -0
- package/_types/utils/siwe/generateSiweNonce.d.ts +12 -0
- package/_types/utils/siwe/generateSiweNonce.d.ts.map +1 -0
- package/_types/utils/siwe/parseSiweMessage.d.ts +11 -0
- package/_types/utils/siwe/parseSiweMessage.d.ts.map +1 -0
- package/_types/utils/siwe/types.d.ts +61 -0
- package/_types/utils/siwe/types.d.ts.map +1 -0
- package/_types/utils/siwe/utils.d.ts +2 -0
- package/_types/utils/siwe/utils.d.ts.map +1 -0
- package/_types/utils/siwe/validateSiweMessage.d.ts +39 -0
- package/_types/utils/siwe/validateSiweMessage.d.ts.map +1 -0
- package/actions/public/verifyMessage.ts +11 -8
- package/actions/siwe/verifySiweMessage.ts +90 -0
- package/chains/definitions/flowPreviewnet.ts +6 -0
- package/chains/definitions/jbcTestnet.ts +0 -4
- package/chains/definitions/l3x.ts +21 -0
- package/chains/definitions/l3xTestnet.ts +21 -0
- package/chains/definitions/metis.ts +6 -0
- package/chains/definitions/thaiChain.ts +26 -0
- package/chains/index.ts +3 -0
- package/clients/decorators/public.ts +37 -0
- package/errors/siwe.ts +20 -0
- package/errors/version.ts +1 -1
- package/package.json +9 -1
- package/siwe/index.ts +29 -0
- package/siwe/package.json +6 -0
- package/utils/siwe/createSiweMessage.ts +168 -0
- package/utils/siwe/generateSiweNonce.ts +15 -0
- package/utils/siwe/parseSiweMessage.ts +55 -0
- package/utils/siwe/types.ts +61 -0
- package/utils/siwe/utils.ts +51 -0
- package/utils/siwe/validateSiweMessage.ts +70 -0
@@ -1,2 +1,2 @@
|
|
1
|
-
export declare const version = "2.
|
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 @@
|
|
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 =
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
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
|
+
}
|
@@ -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.
|
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.
|
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'
|