diff --git a/.changeset/chatty-flies-tan.md b/.changeset/chatty-flies-tan.md new file mode 100644 index 0000000000..ad4fa79d32 --- /dev/null +++ b/.changeset/chatty-flies-tan.md @@ -0,0 +1,5 @@ +--- +"viem": patch +--- + +Fixed `createSiweMessage` `domain` validation. diff --git a/src/utils/siwe/createSiweMessage.test.ts b/src/utils/siwe/createSiweMessage.test.ts index 9012a4be95..285da436b9 100644 --- a/src/utils/siwe/createSiweMessage.test.ts +++ b/src/utils/siwe/createSiweMessage.test.ts @@ -332,3 +332,37 @@ test('behavior: invalid resources', () => { Version: viem@1.0.2] `) }) + +test.each([ + 'example.com', + 'localhost', + '127.0.0.1', + 'example.com:3000', + 'localhost:3000', + '127.0.0.1:3000', +])('valid domain `%s`', (domain) => { + expect( + createSiweMessage({ + ...message, + domain, + }), + ).toBeTypeOf('string') +}) + +test.each([ + 'http://example.com', + 'http://localhost', + 'http://127.0.0.1', + 'http://example.com:3000', + 'http://localhost:3000', + 'http://127.0.0.1:3000', + 'foobarbaz', + '-example.com', +])('invalid domain `%s`', (domain) => { + expect(() => + createSiweMessage({ + ...message, + domain, + }), + ).toThrowError() +}) diff --git a/src/utils/siwe/createSiweMessage.ts b/src/utils/siwe/createSiweMessage.ts index 1ebb729138..103d71c295 100644 --- a/src/utils/siwe/createSiweMessage.ts +++ b/src/utils/siwe/createSiweMessage.ts @@ -61,7 +61,13 @@ export function createSiweMessage( `Provided value: ${chainId}`, ], }) - if (!domainRegex.test(domain)) + if ( + !( + domainRegex.test(domain) || + ipRegex.test(domain) || + localhostRegex.test(domain) + ) + ) throw new SiweInvalidMessageFieldError({ field: 'domain', metaMessages: [ @@ -163,6 +169,10 @@ export function createSiweMessage( return `${prefix}\n${suffix}` } -const domainRegex = /^(?:(?:(?!-)[a-zA-Z0-9-]{1,63}(?