aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2024-10-14 10:44:59 -0700
committerAdam Soltys <[email protected]>2024-10-14 10:44:59 -0700
commit0c24ae9feedbcc90d88b6dc1be46095fb786dd93 (patch)
treed62a9966558e8f5de86175007169f77e9167d814
parent73fab93255e7d8bbede4b7f881064dd5b89f93be (diff)
downloadcoinos-server-0c24ae9feedbcc90d88b6dc1be46095fb786dd93.tar.gz
coinos-server-0c24ae9feedbcc90d88b6dc1be46095fb786dd93.zip
pubkeys cache
-rw-r--r--lib/register.ts1
-rw-r--r--routes/nostr.ts42
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);