diff options
| author | Adam Soltys <[email protected]> | 2024-10-08 21:22:45 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2024-10-10 12:17:05 -0700 |
| commit | c0bfa4a8a45415e16ef335219c84632f4c04f97d (patch) | |
| tree | 3500e42303c80314841a217a8e12f3c8f864e31d | |
| parent | 0a2734dfb5ae312f5283f93ab2e3f819ace3f94b (diff) | |
| download | coinos-server-c0bfa4a8a45415e16ef335219c84632f4c04f97d.tar.gz coinos-server-c0bfa4a8a45415e16ef335219c84632f4c04f97d.zip | |
use primal cache
| -rw-r--r-- | lib/nostr.ts | 10 | ||||
| -rw-r--r-- | 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<any> => { 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); } |
