From 8baa9a16db41713381d27fc9b8204dde4703f1b6 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 27 Mar 2024 15:10:13 -0500 Subject: [PATCH] nostrController: serve names from labels --- src/controllers/well-known/nostr.ts | 30 +++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/src/controllers/well-known/nostr.ts b/src/controllers/well-known/nostr.ts index 0d646fc7..049e5cd1 100644 --- a/src/controllers/well-known/nostr.ts +++ b/src/controllers/well-known/nostr.ts @@ -1,8 +1,7 @@ +import { AppController } from '@/app.ts'; import { Conf } from '@/config.ts'; -import { findUser } from '@/db/users.ts'; import { z } from '@/deps.ts'; - -import type { AppController } from '@/app.ts'; +import { eventsDB } from '@/storages.ts'; const nameSchema = z.string().min(1).regex(/^\w+$/); @@ -11,17 +10,32 @@ const nameSchema = z.string().min(1).regex(/^\w+$/); * https://github.com/nostr-protocol/nips/blob/master/05.md */ const nostrController: AppController = async (c) => { - const name = nameSchema.safeParse(c.req.query('name')); - const user = name.success ? await findUser({ username: name.data }) : null; + const result = nameSchema.safeParse(c.req.query('name')); + const name = result.success ? result.data : undefined; - if (!user) return c.json({ names: {}, relays: {} }); + if (!name) { + return c.json({ names: {}, relays: {} }); + } + + const [label] = await eventsDB.query([{ + kinds: [1985], + authors: [Conf.pubkey], + '#L': ['nip05'], + '#l': [`${name}@${Conf.url.host}`], + }]); + + const pubkey = label?.tags.find(([name]) => name === 'p')?.[1]; + + if (!label || !pubkey) { + return c.json({ names: {}, relays: {} }); + } return c.json({ names: { - [user.username]: user.pubkey, + [name]: pubkey, }, relays: { - [user.pubkey]: [Conf.relay], + [pubkey]: [Conf.relay], }, }); };