aboutsummaryrefslogtreecommitdiffstats
path: root/lib/nostr.ts
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2024-10-10 16:05:15 -0700
committerAdam Soltys <[email protected]>2024-10-10 16:05:15 -0700
commit17656bfe7346bfb1c948e3c82d9960b5a795621f (patch)
tree923a715595296fa959bd84ae13e7495ce448254e /lib/nostr.ts
parent0de0e3ba3719333f3884aeff26992adf1688c6ec (diff)
downloadcoinos-server-17656bfe7346bfb1c948e3c82d9960b5a795621f.tar.gz
coinos-server-17656bfe7346bfb1c948e3c82d9960b5a795621f.zip
follow counts
Diffstat (limited to 'lib/nostr.ts')
-rw-r--r--lib/nostr.ts40
1 files changed, 32 insertions, 8 deletions
diff --git a/lib/nostr.ts b/lib/nostr.ts
index 234312df..10817c71 100644
--- a/lib/nostr.ts
+++ b/lib/nostr.ts
@@ -146,15 +146,39 @@ export let anon = (pubkey) => ({
});
export let getCount = async (pubkey) => {
- let filter: any = { kinds: [3], "#p": [pubkey] };
- let ev = await pool.get([config.nostr], filter, opts);
let created_at;
+ let filter: any = { kinds: [3], authors: [pubkey] };
+ let ev = await pool.get([config.nostr], filter, opts);
+
+ if (!ev) {
+ let { relays } = config;
+ ({ write: relays } = await getRelays(pubkey));
+
+ filter = { kinds: [3], authors: [pubkey] };
+ ev = await pool.get(relays, filter, opts);
+ send(ev);
+ }
+
+ if (ev) ({ created_at } = ev);
+
+ let follows = 0;
+ let cache = await g(`${pubkey}:follows:n`);
+ if (cache && cache.t >= created_at) ({ follows } = cache);
+ else {
+ follows = ev.tags
+ .map((t) => t[0] === "p" && t[1])
+ .filter((p) => p && p.length === 64).length;
+ await s(`${pubkey}:follows:n`, { follows, t: created_at });
+ }
+
+ filter = { kinds: [3], "#p": [pubkey] };
+ ev = await pool.get([config.nostr], filter, opts);
if (ev) ({ created_at } = ev);
- let count = 0;
- let cache = await g(`${pubkey}:followers:n`);
+ let followers = 0;
+ cache = await g(`${pubkey}:followers:n`);
- if (cache && cache.t >= created_at) ({ count } = cache);
+ if (cache && cache.t >= created_at) ({ followers } = cache);
else {
let filter: any = { cache: ["user_infos", { pubkeys: [pubkey] }] };
let infos = await pool.querySync([config.cache], filter, opts);
@@ -163,10 +187,10 @@ export let getCount = async (pubkey) => {
let counts = {};
if (f) {
counts = JSON.parse(f.content);
- count = counts[pubkey];
- await s(`${pubkey}:count`, { count, t: created_at });
+ followers = counts[pubkey];
+ await s(`${pubkey}:followers:n`, { followers, t: created_at });
}
}
- return count;
+ return { follows, followers };
};