diff --git a/packages/controller-utils/src/util.test.ts b/packages/controller-utils/src/util.test.ts index 8c2e1594bd5..ae8c002b39d 100644 --- a/packages/controller-utils/src/util.test.ts +++ b/packages/controller-utils/src/util.test.ts @@ -600,7 +600,7 @@ describe('util', () => { expect(invalid).toBeNull(); invalid = util.normalizeEnsName('@metamask.eth'); expect(invalid).toBeNull(); - invalid = util.normalizeEnsName('foobar.eth'); + invalid = util.normalizeEnsName('fo.eth'); expect(invalid).toBeNull(); }); @@ -617,9 +617,9 @@ describe('util', () => { expect(invalid).toBeNull(); }); - it('should return null with invalid 2LD and valid 3LD', async () => { - const invalid = util.normalizeEnsName('foo.barbaz.eth'); - expect(invalid).toBeNull(); + it('should normalize with valid 3LD', async () => { + const valid = util.normalizeEnsName('foo.barbaz.eth'); + expect(valid).toBe('foo.barbaz.eth'); }); it('should return null with invalid TLD', async () => { diff --git a/packages/controller-utils/src/util.ts b/packages/controller-utils/src/util.ts index 193c37c62c8..d8ce910c3d0 100644 --- a/packages/controller-utils/src/util.ts +++ b/packages/controller-utils/src/util.ts @@ -541,8 +541,7 @@ export function normalizeEnsName(ensName: string): string | null { try { const normalized = ensNamehash.normalize(ensName.trim()); // this regex is only sufficient with the above call to ensNamehash.normalize - // TODO: change 7 in regex to 3 when shorter ENS domains are live - if (normalized.match(/^(([\w\d-]+)\.)*[\w\d-]{7,}\.(eth|test)$/u)) { + if (normalized.match(/^(([\w\d-]+)\.)*[\w\d-]{3,}\.(eth|test)$/u)) { return normalized; } } catch { diff --git a/packages/ens-controller/src/EnsController.test.ts b/packages/ens-controller/src/EnsController.test.ts index 05e523a44e5..e113c914061 100644 --- a/packages/ens-controller/src/EnsController.test.ts +++ b/packages/ens-controller/src/EnsController.test.ts @@ -403,11 +403,26 @@ describe('EnsController', () => { messenger: ensControllerMessenger, }); expect(() => { - controller.set('0x1', 'foo.eth', address1); - }).toThrow('Invalid ENS name: foo.eth'); + controller.set('0x1', 'fo.eth', address1); + }).toThrow('Invalid ENS name: fo.eth'); expect(controller.state).toStrictEqual(defaultState); }); + it('should allow 3 character ENS names', () => { + const rootMessenger = getRootMessenger(); + const ensControllerMessenger = getEnsControllerMessenger(rootMessenger); + const controller = new EnsController({ + messenger: ensControllerMessenger, + }); + + expect(controller.set('0x1', 'foo.eth', address1)).toBe(true); + expect(controller.state.ensEntries['0x1']['foo.eth']).toStrictEqual({ + address: address1Checksum, + chainId: '0x1', + ensName: 'foo.eth', + }); + }); + it('should throw on attempt to set invalid ENS entry: address', () => { const rootMessenger = getRootMessenger(); const ensControllerMessenger = getEnsControllerMessenger(rootMessenger);