diff --git a/src/app.ts b/src/app.ts index 1cb3746b..14d511bd 100644 --- a/src/app.ts +++ b/src/app.ts @@ -42,6 +42,7 @@ import { bookmarksController } from '@/controllers/api/bookmarks.ts'; import { adminRelaysController, adminSetRelaysController, + lookupProfileController, nameRequestController, nameRequestsController, } from '@/controllers/api/ditto.ts'; @@ -266,6 +267,7 @@ app.delete('/api/v1/pleroma/admin/statuses/:id', requireRole('admin'), pleromaAd app.get('/api/v1/admin/ditto/relays', requireRole('admin'), adminRelaysController); app.put('/api/v1/admin/ditto/relays', requireRole('admin'), adminSetRelaysController); +app.get('/api/v1/admin/ditto/lookup/:pubkey{[0-9a-f]{64}}', requireRole('admin'), lookupProfileController); app.post('/api/v1/ditto/names', requireSigner, nameRequestController); app.get('/api/v1/ditto/names', requireSigner, nameRequestsController); diff --git a/src/controllers/api/ditto.ts b/src/controllers/api/ditto.ts index 841eb861..eafe9c9a 100644 --- a/src/controllers/api/ditto.ts +++ b/src/controllers/api/ditto.ts @@ -33,6 +33,38 @@ export const adminRelaysController: AppController = async (c) => { return c.json(renderRelays(event)); }; +export const lookupProfileController: AppController = async (c) => { + const store = await Storages.client(); + const db = await Storages.db(); + const id = c.req.param('pubkey'); + const response = { + got_kind_0: false, + got_kind_3: false, + notes_count: 0, + }; + const events = await store.query([{ authors: [id], kinds: [0, 3], limit: 2 }]); + + if (events.some((event) => event.kind === 0)) { + response.got_kind_0 = true; + response.notes_count -= 1; + } + + if (events.some((event) => event.kind === 3)) { + response.got_kind_3 = true; + response.notes_count -= 1; + } + + if (c.req.query('with_notes')) { + const notes = await store.query([{ authors: [id], kinds: [1], limit: 100 }]); + events.push(...notes); + } + + await Promise.all(events.map(async (event) => await db.event(event))); + response.notes_count += events.length; + + return c.json(response); +}; + export const adminSetRelaysController: AppController = async (c) => { const store = await Storages.db(); const relays = relaySchema.array().parse(await c.req.json());