replace domain storage in pipeline with ditto kv

This commit is contained in:
Siddharth Singh 2024-05-04 12:12:52 +05:30
parent 5f7ca8148e
commit 0d179c099b
No known key found for this signature in database

View file

@ -1,10 +1,8 @@
import { NostrEvent, NSchema as n } from '@nostrify/nostrify'; import { NostrEvent, NSchema as n } from '@nostrify/nostrify';
import { LNURL } from '@nostrify/nostrify/ln'; import { LNURL } from '@nostrify/nostrify/ln';
import Debug from '@soapbox/stickynotes/debug'; import Debug from '@soapbox/stickynotes/debug';
import { sql } from 'kysely';
import { Conf } from '@/config.ts'; import { Conf } from '@/config.ts';
import { db } from '@/db.ts';
import { deleteAttachedMedia } from '@/db/unattached-media.ts'; import { deleteAttachedMedia } from '@/db/unattached-media.ts';
import { DittoEvent } from '@/interfaces/DittoEvent.ts'; import { DittoEvent } from '@/interfaces/DittoEvent.ts';
import { isEphemeralKind } from '@/kinds.ts'; import { isEphemeralKind } from '@/kinds.ts';
@ -20,6 +18,7 @@ import { verifyEventWorker } from '@/workers/verify.ts';
import { AdminSigner } from '@/signers/AdminSigner.ts'; import { AdminSigner } from '@/signers/AdminSigner.ts';
import { lnurlCache } from '@/utils/lnurl.ts'; import { lnurlCache } from '@/utils/lnurl.ts';
import { nip05Cache } from '@/utils/nip05.ts'; import { nip05Cache } from '@/utils/nip05.ts';
import { PubkeyDomain } from '@/interfaces/PubkeyDomain.ts';
const debug = Debug('ditto:pipeline'); const debug = Debug('ditto:pipeline');
@ -74,17 +73,15 @@ async function encounterEvent(event: NostrEvent, signal: AbortSignal): Promise<b
return !!existing; return !!existing;
} }
const kv = await Deno.openKv();
/** Hydrate the event with the user, if applicable. */ /** Hydrate the event with the user, if applicable. */
async function hydrateEvent(event: DittoEvent, signal: AbortSignal): Promise<void> { async function hydrateEvent(event: DittoEvent, signal: AbortSignal): Promise<void> {
await hydrateEvents({ events: [event], storage: Storages.db, signal }); await hydrateEvents({ events: [event], storage: Storages.db, signal });
const res = await kv.get<PubkeyDomain>(['domain_for_pubkey', event.pubkey]);
const domain = await db if (res.value) {
.selectFrom('pubkey_domains') event.author_domain = res.value.domain;
.select('domain') }
.where('pubkey', '=', event.pubkey)
.executeTakeFirst();
event.author_domain = domain?.domain;
} }
/** Maybe store the event, if eligible. */ /** Maybe store the event, if eligible. */
@ -129,15 +126,12 @@ async function parseMetadata(event: NostrEvent, signal: AbortSignal): Promise<vo
// Track pubkey domain. // Track pubkey domain.
try { try {
const { domain } = parseNip05(nip05); const { domain } = parseNip05(nip05);
const { created_at } = event;
await sql` const existing = await kv.get<PubkeyDomain>(['domain_for_pubkey', pubkey]);
INSERT INTO pubkey_domains (pubkey, domain, last_updated_at) if (!existing.value || (existing.value && existing.value.updated_at < created_at)) {
VALUES (${pubkey}, ${domain}, ${event.created_at}) await kv.set(['domain_for_pubkey', pubkey], { domain, updated_at: created_at });
ON CONFLICT(pubkey) DO UPDATE SET await kv.set(['pubkeys_for_domain', domain, pubkey], true);
domain = excluded.domain, }
last_updated_at = excluded.last_updated_at
WHERE excluded.last_updated_at > pubkey_domains.last_updated_at
`.execute(db);
} catch (_e) { } catch (_e) {
// do nothing // do nothing
} }