aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2024-09-03 14:35:07 -0700
committerAdam Soltys <[email protected]>2024-09-03 14:35:07 -0700
commit9a6f65bed50345382e1af6b61b7e02de4dd61825 (patch)
tree25dc84a51db352d34ab96e8e88619e710961fa7b /lib
parent581dc3b5b16e3dd1823bbf95357e5e8c49b0c5e0 (diff)
downloadcoinos-server-9a6f65bed50345382e1af6b61b7e02de4dd61825.tar.gz
coinos-server-9a6f65bed50345382e1af6b61b7e02de4dd61825.zip
cashu dev branch
Diffstat (limited to 'lib')
-rw-r--r--lib/nostr.ts145
1 files changed, 72 insertions, 73 deletions
diff --git a/lib/nostr.ts b/lib/nostr.ts
index ccfb4e54..172e3ce0 100644
--- a/lib/nostr.ts
+++ b/lib/nostr.ts
@@ -1,11 +1,10 @@
import config from "$config";
import { l } from "$lib/logging";
import { Relay, RelayPool, calculateId, signId, getPublicKey } from "nostr";
-import { broadcast, emit } from "$lib/sockets";
-import store from "$lib/store";
import { g, s, db } from "$lib/db";
-import { fail, nada, wait } from "$lib/utils";
+import { fail, wait } from "$lib/utils";
import { nip19 } from "nostr-tools";
+import { emit } from "$lib/sockets";
export const COINOS_PUBKEY = getPublicKey(nip19.decode(config.nostrKey).data);
export let coinos;
@@ -13,91 +12,91 @@ export let pool;
export let fillPool = () => {
try {
- pool = RelayPool(config.relays);
- pool.on("open", (relay) => {
- if (relay.url.includes(config.nostr)) coinos = relay;
- relay.subscribe("live", { limit: 1 });
- });
+ pool = RelayPool(config.relays);
+ pool.on("open", (relay) => {
+ if (relay.url.includes(config.nostr)) coinos = relay;
+ // relay.subscribe("live", { limit: 1 });
+ });
- pool.on("event", async (relay, sub, ev) => {
- if (!coinos) return;
- if (timeouts[sub]) timeouts[sub].extend(ev);
- try {
- let content;
+ pool.on("event", async (_, sub, ev) => {
+ if (!coinos && coinos.ws.readyState !== WebSocket.OPEN) return;
+ if (timeouts[sub]) timeouts[sub].extend(ev);
try {
- content = JSON.parse(ev.content);
- } catch (e) {
- content = ev.content;
- }
+ let content;
+ try {
+ content = JSON.parse(ev.content);
+ } catch (e) {
+ content = ev.content;
+ }
- if (sub === "live") {
- let { pubkey } = ev;
+ if (sub === "live") {
+ let { pubkey } = ev;
- if (Math.abs(Math.floor(Date.now() / 1000) - ev.created_at) > 7200)
- return;
+ if (Math.abs(Math.floor(Date.now() / 1000) - ev.created_at) > 7200)
+ return;
- if (seen.includes(ev.id)) return;
- seen.push(ev.id);
- seen.length > 1000 && seen.shift();
+ if (seen.includes(ev.id)) return;
+ seen.push(ev.id);
+ seen.length > 1000 && seen.shift();
- if (coinos && ev.kind < 5) {
- // coinos.send(["EVENT", ev]);
- ev.user = await getUser(pubkey);
- // broadcast("event", ev);
+ if (coinos && ev.kind < 5) {
+ // coinos.send(["EVENT", ev]);
+ ev.user = await getUser(pubkey);
+ // broadcast("event", ev);
- if (ev.kind === 4) {
- let uid = await g(`user:${ev.tags[0][1]}`);
- if (uid) ev.recipient = await g(`user:${uid}`);
- ev.author = ev.user;
- emit(uid, "event", ev);
+ if (ev.kind === 4) {
+ let uid = await g(`user:${ev.tags[0][1]}`);
+ if (uid) ev.recipient = await g(`user:${uid}`);
+ ev.author = ev.user;
+ emit(uid, "event", ev);
+ }
}
- }
- } else if (sub.includes("profile")) {
- let { pubkey } = ev;
- let user = await getUser(pubkey);
+ } else if (sub.includes("profile")) {
+ let { pubkey } = ev;
+ let user = await getUser(pubkey);
- if (user.updated > ev.created_at) return;
+ if (user.updated > ev.created_at) return;
- if (content.name && user.username === pubkey.substr(0, 6))
- user.username = content.name;
+ if (content.name && user.username === pubkey.substr(0, 6))
+ user.username = content.name;
- delete content.name;
+ delete content.name;
- user = {
- ...user,
- ...content,
- updated: ev.created_at,
- };
+ user = {
+ ...user,
+ ...content,
+ updated: ev.created_at,
+ };
- await s(`user:${pubkey}`, JSON.stringify(user));
- } else if (sub.includes("messages")) {
- let pubkey = sub.split(":")[0];
- await db.sAdd(`${pubkey}:messages`, ev.id);
- await s(`ev:${ev.id}`, ev);
- } else if (sub.includes("follows")) {
- let pubkey = sub.split(":")[0];
- await s(`${pubkey}:follows`, ev.tags);
- for (let f of ev.tags) {
- let [_, followPubkey] = f;
- await db.sAdd(`${followPubkey}:followers`, pubkey);
+ await s(`user:${pubkey}`, JSON.stringify(user));
+ } else if (sub.includes("messages")) {
+ let pubkey = sub.split(":")[0];
+ await db.sAdd(`${pubkey}:messages`, ev.id);
+ await s(`ev:${ev.id}`, ev);
+ } else if (sub.includes("follows")) {
+ let pubkey = sub.split(":")[0];
+ await s(`${pubkey}:follows`, ev.tags);
+ for (let f of ev.tags) {
+ let [_, followPubkey] = f;
+ await db.sAdd(`${followPubkey}:followers`, pubkey);
+ }
+ coinos.send(ev);
+ } else if (sub.includes("followers")) {
+ let followed = sub.split(":")[0];
+ let { pubkey } = ev;
+ await db.sAdd(`${followed}:followers`, pubkey);
+ coinos.send(ev);
+ } else if (sub.includes("notes")) {
+ let pubkey = sub.split(":")[0];
+ await db.sAdd(pubkey, ev.id);
+ await s(`ev:${ev.id}`, ev);
}
- coinos.send(ev);
- } else if (sub.includes("followers")) {
- let followed = sub.split(":")[0];
- let { pubkey } = ev;
- await db.sAdd(`${followed}:followers`, pubkey);
- coinos.send(ev);
- } else if (sub.includes("notes")) {
- let pubkey = sub.split(":")[0];
- await db.sAdd(pubkey, ev.id);
- await s(`ev:${ev.id}`, ev);
+ } catch (e) {
+ console.log(e);
}
- } catch (e) {
- console.log(e);
- }
- });
- } catch(e) {
- console.log("POOL", e)
+ });
+ } catch (e) {
+ console.log("POOL", e);
}
};