From a487b5a2b80d270771f9932c17d2b6babf0fd49a Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 22 Dec 2022 13:42:00 -0800 Subject: return mock user objects for anon pubkeys --- lib/nostr.js | 21 +++++++++++++++++++-- routes/events.js | 8 ++++++++ routes/users.js | 9 ++++++++- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/lib/nostr.js b/lib/nostr.js index 53c8d7d1..477d2b12 100644 --- a/lib/nostr.js +++ b/lib/nostr.js @@ -18,6 +18,8 @@ let timeout; pool.on("event", async (relay, sub, ev) => { try { if (sub === "live") { + let { pubkey } = ev; + if (Math.abs(Math.floor(Date.now() / 1000) - ev.created_at) > 7200) return; @@ -34,16 +36,31 @@ pool.on("event", async (relay, sub, ev) => { } coinos.send(["EVENT", ev]); - if (ev.kind === 1) broadcast("event", ev); + + ev.user = JSON.parse(await redis.get(`user:${pubkey}`)) || { + username: pubkey.substr(0, 6), + pubkey, + anon: true + }; + + if (ev.kind === 1) { + broadcast("event", ev); + } } } else { let pubkey = sub; clearTimeout(store.timeouts[pubkey]); - store.fetching[pubkey] = true; + ev.user = JSON.parse(await redis.get(`user:${pubkey}`)) || { + username: pubkey.substr(0, 6), + pubkey, + anon: true + }; + await redis.sAdd(pubkey, ev.id); await redis.set(`ev:${ev.id}`, JSON.stringify(ev)); + store.fetching[pubkey] = true; store.timeouts[pubkey] = setTimeout( () => (store.fetching[pubkey] = false), 100 diff --git a/routes/events.js b/routes/events.js index 18abf1d7..07062140 100644 --- a/routes/events.js +++ b/routes/events.js @@ -1,4 +1,5 @@ import app from "$app"; +import db from "$db"; import redis from "$lib/redis"; import { pool } from "$lib/nostr"; import store from "$lib/store"; @@ -13,6 +14,13 @@ app.get("/:pubkey/events", async (req, res) => { 500 ); + let user = await db.User.findOne({ + where: { pubkey } + }); + + if (!user) user = { username: pubkey.substr(0,6), pubkey, anon: true } + await redis.set(`user:${pubkey}`, JSON.stringify(user)); + pool.subscribe(pubkey, { limit: 500, kinds: [1], diff --git a/routes/users.js b/routes/users.js index 82a71549..70186145 100644 --- a/routes/users.js +++ b/routes/users.js @@ -57,7 +57,14 @@ app.get("/users/:username", async (req, res) => { const { username } = req.params; let user = await db.User.findOne({ - attributes: ["username", "banner", "profile", "address", "currency"], + attributes: [ + "username", + "banner", + "profile", + "address", + "currency", + "pubkey" + ], where: Sequelize.where( Sequelize.fn("lower", Sequelize.col("username")), username.toLowerCase() -- cgit v1.2.3