diff options
| author | Adam Soltys <[email protected]> | 2024-10-14 10:44:59 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2024-10-14 10:44:59 -0700 |
| commit | 0c24ae9feedbcc90d88b6dc1be46095fb786dd93 (patch) | |
| tree | d62a9966558e8f5de86175007169f77e9167d814 | |
| parent | 73fab93255e7d8bbede4b7f881064dd5b89f93be (diff) | |
| download | coinos-server-0c24ae9feedbcc90d88b6dc1be46095fb786dd93.tar.gz coinos-server-0c24ae9feedbcc90d88b6dc1be46095fb786dd93.zip | |
pubkeys cache
| -rw-r--r-- | lib/register.ts | 1 | ||||
| -rw-r--r-- | routes/nostr.ts | 42 |
2 files changed, 25 insertions, 18 deletions
diff --git a/lib/register.ts b/lib/register.ts index 42a283a3..c2677c30 100644 --- a/lib/register.ts +++ b/lib/register.ts @@ -66,6 +66,7 @@ export default async (user, ip) => { .set(`account:${id}`, account) .set(`${pubkey}:follows:n`, 0) .set(`${pubkey}:followers:n`, 0) + .set(`${pubkey}:pubkeys`, "[]") .lPush(`${id}:accounts`, id) .exec(); diff --git a/routes/nostr.ts b/routes/nostr.ts index 2ed0d65f..ddec8803 100644 --- a/routes/nostr.ts +++ b/routes/nostr.ts @@ -56,34 +56,40 @@ export default { async follows(req, res) { let { params: { pubkey }, - query: { tagsonly }, + query: { pubkeysOnly, nocache }, } = req; try { - let filter = { kinds: [3], authors: [pubkey] }; - let ev = await pool.get([config.nostr], filter, opts); + let created_at; + let follows = []; - if (!ev) { - let { relays } = config; - ({ write: relays } = await getRelays(pubkey)); + let pubkeys = await g(`${pubkey}:pubkeys`); + if (!pubkeys || nocache) { + let filter = { kinds: [3], authors: [pubkey] }; + let ev = await pool.get([config.nostr], filter, opts); - filter = { kinds: [3], authors: [pubkey] }; - ev = await pool.get(relays, filter, opts); - send(ev); - } + if (!ev) { + let { relays } = config; + ({ write: relays } = await getRelays(pubkey)); - let created_at; - let follows = []; - let tags = []; + filter = { kinds: [3], authors: [pubkey] }; + ev = await pool.get(relays, filter, opts); + send(ev); + } - if (ev) ({ created_at, tags } = ev); - if (!tags.length || tagsonly) return res.send(tags); + let tags = []; + + if (ev) ({ created_at, tags } = ev); + pubkeys = tags + .map((t) => t[0] === "p" && t[1]) + .filter((p) => p && p.length === 64); + + await s(`${pubkeys}:pubkeys`, pubkeys); + } + if (!pubkeys.length || pubkeysOnly) return res.send(pubkeys); let cache = await g(`${pubkey}:follows`); if (cache && cache.t >= created_at) ({ follows } = cache); else { - let pubkeys = tags - .map((t) => t[0] === "p" && t[1]) - .filter((p) => p && p.length === 64); let filter: any = { cache: ["user_infos", { pubkeys }] }; let infos = await pool.querySync([config.cache], filter, opts); let profiles = infos.filter((e) => e.kind === 0); |
