From c0bfa4a8a45415e16ef335219c84632f4c04f97d Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 8 Oct 2024 21:22:45 -0700 Subject: use primal cache --- lib/nostr.ts | 10 +++++----- routes/nostr.ts | 39 ++++++++++++++++----------------------- 2 files changed, 21 insertions(+), 28 deletions(-) diff --git a/lib/nostr.ts b/lib/nostr.ts index a1a9a245..ca09649c 100644 --- a/lib/nostr.ts +++ b/lib/nostr.ts @@ -4,13 +4,14 @@ import { l } from "$lib/logging"; import { fail } from "$lib/utils"; import { nip19, finalizeEvent, getPublicKey } from "nostr-tools"; import { Relay } from "nostr-tools/relay"; -import { SimplePool } from "nostr-tools"; +import { AbstractSimplePool } from "nostr-tools/abstract-pool"; export const serverPubkey = getPublicKey( nip19.decode(config.nostrKey).data as Uint8Array, ); -export let pool = new SimplePool(); +let alwaysTrue: any = (t: Event) => { t[Symbol("verified")] = true; return true; }; +export let pool = new AbstractSimplePool({ verifyEvent: alwaysTrue }); export async function send(ev, url = config.nostr) { if (!(ev && ev.id)) return; @@ -90,11 +91,10 @@ export let getRelays = async (pubkey): Promise => { let filter = { authors: [pubkey], kinds: [10002] }; let event = await pool.get([config.nostr], filter); - let read = relays; - let write = relays; + let read = relays; + let write = relays; if (event) { - read = []; write = []; for (let r of event.tags) { diff --git a/routes/nostr.ts b/routes/nostr.ts index 0fce9bdc..3f801677 100644 --- a/routes/nostr.ts +++ b/routes/nostr.ts @@ -32,20 +32,16 @@ export default { query: { tagsonly }, } = req; try { - let { relays } = config; - ({ write: relays } = await getRelays(pubkey)); - let ev = await pool.get([config.nostr], { - kinds: [3], - authors: [pubkey], - }); + let filter = { kinds: [3], authors: [pubkey] }; + let ev = await pool.get([config.nostr], filter); + if (!ev) { - pool - .get(relays, { - kinds: [3], - authors: [pubkey], - }) - .then(send); + let { relays } = config; + ({ write: relays } = await getRelays(pubkey)); + + filter = { kinds: [3], authors: [pubkey] }; + pool.get(relays, filter).then(send); } let created_at; @@ -64,20 +60,17 @@ export default { profiles.push(...(await pool.querySync([config.nostr], filter))); } + let filter: any = { cache: ["user_infos", { pubkeys }] }; + let followers = JSON.parse( + (await pool.querySync([config.cache], filter)).find( + (e) => e.kind === 10000133, + ).content, + ); + for (let p of profiles) { let { content, pubkey } = p; let user = JSON.parse(content); - - let cache = await g(`${pubkey}:followers`); - let followers; - if (cache && cache.t >= created_at) ({ followers } = cache); - else { - let filter = { "#p": [pubkey], kinds: [3] }; - followers = await pool.querySync([config.nostr], filter); - s(`${pubkey}:followers`, { followers, t: created_at }); - } - - user.followers = followers.length; + user.followers = followers[pubkey]; user.pubkey = pubkey; follows.push(user); } -- cgit v1.2.3