aboutsummaryrefslogtreecommitdiffstats
path: root/lib
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
parent6f7ad86583ee4e9e359829b55cb041d014902e07 (diff)
downloadcoinos-server-e3266ddecd825b8716df7dc418246441d4dcb0f7.tar.gz
coinos-server-e3266ddecd825b8716df7dc418246441d4dcb0f7.zip
background nostr fetching
Diffstat (limited to 'lib')
-rw-r--r--lib/nostr.js21
-rw-r--r--lib/sockets.js7
-rw-r--r--lib/utils.js7
-rw-r--r--lib/whitelist.js4
4 files changed, 27 insertions, 12 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) {
diff --git a/lib/sockets.js b/lib/sockets.js
index 3bd0c2c2..82cf3f51 100644
--- a/lib/sockets.js
+++ b/lib/sockets.js
@@ -85,6 +85,7 @@ app.register(async function(app) {
break;
case "login":
+ let user;
let token = data;
if (lastSeen[token] > subtractSeconds(5)) return;
lastSeen[token] = new Date();
@@ -92,7 +93,9 @@ app.register(async function(app) {
try {
if (!token || token === "null" || !jwt.decode(token))
return ws.close(code, `bad token ${token}`);
- const { username, uuid } = jwt.decode(token);
+ let { username, uuid } = jwt.decode(token);
+ if (uuid) user = await getUser(uuid);
+ username = user.username;
if (!(username || uuid)) throw new Error("Invalid JWT token");
if (!store.sockets[username]) store.sockets[username] = {};
@@ -110,7 +113,7 @@ app.register(async function(app) {
store.sockets[username][id] = ws;
names[id] = username;
- let user = await getUser(username);
+ if (!user) user = await getUser(username);
let { haspin } = user;
diff --git a/lib/utils.js b/lib/utils.js
index 748b2a74..95ee5fb1 100644
--- a/lib/utils.js
+++ b/lib/utils.js
@@ -11,6 +11,8 @@ import ln from "$lib/ln";
const { Op } = sequelize;
+export const nada = () => {};
+
export const sleep = n => new Promise(r => setTimeout(r, n));
export const wait = async (f, s = 300, n = 50) => {
let i = 0;
@@ -33,7 +35,10 @@ export const getUser = async (username, transaction) => {
}
],
where: {
- username: { [Op.or]: [username, username.replace(/ /g, "")] }
+ [Op.or]: {
+ username: { [Op.or]: [username, username.replace(/ /g, "")] },
+ uuid: { [Op.or]: [username, username.replace(/ /g, "")] }
+ }
}
};
diff --git a/lib/whitelist.js b/lib/whitelist.js
index 4e4dc14e..96db6cdc 100644
--- a/lib/whitelist.js
+++ b/lib/whitelist.js
@@ -8,6 +8,7 @@ export default [
"cipher",
"currencies",
"currency",
+ "display",
"email",
"fiat",
"follows",
@@ -18,8 +19,9 @@ export default [
"keys",
"locktime",
"payments",
- "pubkey",
"profile",
+ "prompt",
+ "pubkey",
"salt",
"seed",
"symbol",