aboutsummaryrefslogtreecommitdiffstats
path: root/lib/nostr.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2023-01-06 17:31:22 -0800
committerAdam Soltys <[email protected]>2023-01-06 17:31:22 -0800
commite3266ddecd825b8716df7dc418246441d4dcb0f7 (patch)
tree650dac95a42a09627f33fb3f3e76e6e0a0e23b9f /lib/nostr.js
parent6f7ad86583ee4e9e359829b55cb041d014902e07 (diff)
downloadcoinos-server-e3266ddecd825b8716df7dc418246441d4dcb0f7.tar.gz
coinos-server-e3266ddecd825b8716df7dc418246441d4dcb0f7.zip
background nostr fetching
Diffstat (limited to 'lib/nostr.js')
-rw-r--r--lib/nostr.js21
1 files changed, 13 insertions, 8 deletions
diff --git a/lib/nostr.js b/lib/nostr.js
index 4730883f..4ee5cb13 100644
--- a/lib/nostr.js
+++ b/lib/nostr.js
@@ -25,20 +25,24 @@ export let coinos;
let now = () => Math.round(Date.now() / 1000);
let timeouts = {};
-export let q = async (sub, query, timeout = 20000) =>
+export let q = async (sub, query, timeout = 20000, since = 3600, eager = 200) =>
new Promise(async (r, j) => {
let start = Date.now();
let seen = [];
let rejected;
query.since = await redis.get(`since:${sub}`);
- if (now() - query.since < 3600) return r();
+ if (now() - query.since < since) return r();
let done = { [sub]: [] };
let check = s => {
let elapsed = Date.now() - start;
if (rejected) return true;
- if (done[s].length === pool.relays.length || elapsed > 200) {
+ if (
+ done[s] &&
+ (done[s].length === pool.relays.length ||
+ (done[s].length && elapsed > eager))
+ ) {
r();
if (timeouts[s]) timeouts[s].clear();
return true;
@@ -78,7 +82,7 @@ export let q = async (sub, query, timeout = 20000) =>
});
try {
- await wait(() => check(sub));
+ await wait(() => check(sub), 100, 200);
} catch (e) {
console.log(e);
}
@@ -137,6 +141,7 @@ pool.on("event", async (relay, sub, ev) => {
await redis.set(`user:${pubkey}`, JSON.stringify(user));
await redis.set(`user:${user.username}`, JSON.stringify(user));
+ coinos.send(ev);
} else if (sub.includes("follows")) {
let pubkey = sub.split(":")[0];
await redis.set(`${pubkey}:follows`, JSON.stringify(ev.tags));
@@ -144,14 +149,14 @@ pool.on("event", async (relay, sub, ev) => {
let [_, followPubkey] = f;
await redis.sAdd(`${followPubkey}:followers`, pubkey);
}
+ coinos.send(ev);
} else if (sub.includes("followers")) {
let followed = sub.split(":")[0];
let { pubkey } = ev;
await redis.sAdd(`${followed}:followers`, pubkey);
- } else {
- if (!relay.url.includes("coinos")) return;
-
- let pubkey = sub;
+ coinos.send(ev);
+ } else if (sub.includes("notes")) {
+ let pubkey = sub.split(":")[0];
ev.user = await getUser(pubkey);
if (!ev.user.updated) {