From 7fe97ad157e1bf3b8974ac793eec7aa4a56daf72 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 18 Jan 2026 10:42:52 +0000 Subject: [PATCH] feat: configure NIP-05 verification for grimoire.rocks domain MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updates Grimoire member system to use grimoire.rocks domain and adds proper NIP-05 verification infrastructure. Changes: - Update member NIP-05 identifiers from @grimoire.pro to @grimoire.rocks - Create public/.well-known/nostr.json with member pubkey mappings - Configure Vercel to serve nostr.json with proper headers: - Content-Type: application/json - Access-Control-Allow-Origin: * (required for NIP-05) - Cache-Control: public, max-age=3600 - Update rewrites to exclude .well-known paths from SPA routing This enables NIP-05 verification for: - _@grimoire.rocks → ce3cd5ba... - verbiricha@grimoire.rocks → 7fa56f5d... --- public/.well-known/nostr.json | 6 +++++ src/components/nostr/GrimoireUsername.tsx | 2 +- src/lib/grimoire-members.test.ts | 16 ++++++------ src/lib/grimoire-members.ts | 4 +-- vercel.json | 30 ++++++++++++++++++++++- 5 files changed, 46 insertions(+), 12 deletions(-) create mode 100644 public/.well-known/nostr.json diff --git a/public/.well-known/nostr.json b/public/.well-known/nostr.json new file mode 100644 index 0000000..99ce39f --- /dev/null +++ b/public/.well-known/nostr.json @@ -0,0 +1,6 @@ +{ + "names": { + "_": "ce3cd5ba3ae52cec4e4b267fb29f1d2a526a5f4b8e8475d8a603a63c8925295f", + "verbiricha": "7fa56f5d6962ab1e3cd424e758c3002b8665f7b0d8dcee9fe9e288d7751ac194" + } +} diff --git a/src/components/nostr/GrimoireUsername.tsx b/src/components/nostr/GrimoireUsername.tsx index 5a9fa37..83460f0 100644 --- a/src/components/nostr/GrimoireUsername.tsx +++ b/src/components/nostr/GrimoireUsername.tsx @@ -32,7 +32,7 @@ export function GrimoireUsername({ )} title={`Grimoire member: ${member.nip05}`} > - {member.username}@grimoire.pro + {member.username}@grimoire.rocks {showIcon && ( { expect(member).toBeDefined(); expect(member?.username).toBe("_"); expect(member?.pubkey).toBe(underscorePubkey); - expect(member?.nip05).toBe("_@grimoire.pro"); + expect(member?.nip05).toBe("_@grimoire.rocks"); }); it("should return member info for verbiricha username", () => { @@ -67,7 +67,7 @@ describe("Grimoire Members", () => { expect(member).toBeDefined(); expect(member?.username).toBe("verbiricha"); expect(member?.pubkey).toBe(verbirichaPubkey); - expect(member?.nip05).toBe("verbiricha@grimoire.pro"); + expect(member?.nip05).toBe("verbiricha@grimoire.rocks"); }); it("should return undefined for non-member", () => { @@ -83,15 +83,15 @@ describe("Grimoire Members", () => { }); describe("getGrimoireMemberByNip05", () => { - it("should return member info for _@grimoire.pro", () => { - const member = getGrimoireMemberByNip05("_@grimoire.pro"); + it("should return member info for _@grimoire.rocks", () => { + const member = getGrimoireMemberByNip05("_@grimoire.rocks"); expect(member).toBeDefined(); expect(member?.username).toBe("_"); expect(member?.pubkey).toBe(underscorePubkey); }); - it("should return member info for verbiricha@grimoire.pro", () => { - const member = getGrimoireMemberByNip05("verbiricha@grimoire.pro"); + it("should return member info for verbiricha@grimoire.rocks", () => { + const member = getGrimoireMemberByNip05("verbiricha@grimoire.rocks"); expect(member).toBeDefined(); expect(member?.username).toBe("verbiricha"); expect(member?.pubkey).toBe(verbirichaPubkey); @@ -122,9 +122,9 @@ describe("Grimoire Members", () => { describe("getGrimoireNip05", () => { it("should return NIP-05 for member", () => { - expect(getGrimoireNip05(underscorePubkey)).toBe("_@grimoire.pro"); + expect(getGrimoireNip05(underscorePubkey)).toBe("_@grimoire.rocks"); expect(getGrimoireNip05(verbirichaPubkey)).toBe( - "verbiricha@grimoire.pro", + "verbiricha@grimoire.rocks", ); }); diff --git a/src/lib/grimoire-members.ts b/src/lib/grimoire-members.ts index b238599..02f7eb0 100644 --- a/src/lib/grimoire-members.ts +++ b/src/lib/grimoire-members.ts @@ -25,12 +25,12 @@ export const GRIMOIRE_MEMBERS: readonly GrimoireMember[] = [ { username: "_", pubkey: "ce3cd5ba3ae52cec4e4b267fb29f1d2a526a5f4b8e8475d8a603a63c8925295f", - nip05: "_@grimoire.pro", + nip05: "_@grimoire.rocks", }, { username: "verbiricha", pubkey: "7fa56f5d6962ab1e3cd424e758c3002b8665f7b0d8dcee9fe9e288d7751ac194", - nip05: "verbiricha@grimoire.pro", + nip05: "verbiricha@grimoire.rocks", }, ] as const; diff --git a/vercel.json b/vercel.json index 3a48e56..843a1da 100644 --- a/vercel.json +++ b/vercel.json @@ -1,3 +1,31 @@ { - "rewrites": [{ "source": "/(.*)", "destination": "/" }] + "headers": [ + { + "source": "/.well-known/nostr.json", + "headers": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET, OPTIONS" + }, + { + "key": "Cache-Control", + "value": "public, max-age=3600" + } + ] + } + ], + "rewrites": [ + { + "source": "/((?!.well-known).*)", + "destination": "/" + } + ] }