diff options
| -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); |
