From 12bf0c93d17d191a7bb58cfa72f9f94ee2c4d2af Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 15 Feb 2023 19:58:29 -0800 Subject: messages endpoint --- .gitignore | 1 + index.js | 2 ++ lib/nostr.js | 10 +++++++--- routes/nostr.js | 31 +++++++++++++++++++++++++++++++ routes/payments.js | 30 ++++++++++++++++++++++++++++++ routes/users.js | 2 +- 6 files changed, 72 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 1a6529fe..a29190de 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ node_modules/ data config.js compose.yml +.env diff --git a/index.js b/index.js index 51866cda..8189144d 100644 --- a/index.js +++ b/index.js @@ -37,6 +37,7 @@ app.get("/nostr.json", nostr.identities); app.get("/:pubkey/followers", nostr.followers); app.get("/:pubkey/follows", nostr.follows); app.get("/:pubkey/notes", nostr.notes); +app.get("/:a/:b/:since/messages", nostr.messages); app.get("/event/:id", nostr.event); app.post("/event", nostr.broadcast); @@ -52,6 +53,7 @@ app.get("/payments/:hash", auth, payments.get); app.post("/parse", payments.parse); app.get("/pot/:name", payments.pot); app.post("/take", auth, payments.take); +app.post("/buy", auth, payments.buy); app.get("/encode", lnurl.encode); app.get("/decode", lnurl.decode); diff --git a/lib/nostr.js b/lib/nostr.js index b6f5f50d..fdea9d62 100644 --- a/lib/nostr.js +++ b/lib/nostr.js @@ -60,6 +60,10 @@ export let fillPool = () => { await s(`user:${pubkey}`, JSON.stringify(user)); coinos.send(ev); + } 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); @@ -76,7 +80,7 @@ export let fillPool = () => { } else if (sub.includes("notes")) { let pubkey = sub.split(":")[0]; await db.sAdd(pubkey, ev.id); - await s(`ev:${ev.id}`, JSON.stringify(ev)); + await s(`ev:${ev.id}`, ev); } } catch (e) { console.log(e); @@ -96,8 +100,8 @@ export let q = async ( let start = Date.now(); let seen = []; let rejected; - query.since = await g(`since:${sub}`); - if (now() - query.since < since) return r(); + // query.since = await g(`since:${sub}`); + // if (now() - query.since < since) return r(); let done = { [sub]: [] }; diff --git a/routes/nostr.js b/routes/nostr.js index 53ad4c29..ad9f55aa 100644 --- a/routes/nostr.js +++ b/routes/nostr.js @@ -49,6 +49,37 @@ export default { res.send(events.map(e => ({ ...e, user }))); }, + async messages({ params: { pubkey, since = 0 } }, res) { + let params = { + kinds: [4], + authors: [pubkey] + }; + + let opts = { since }; + + await q(`${pubkey}:messages`, params, opts).catch(nada); + + params = { + kinds: [4], + "#p": [pubkey] + }; + + await q(`${pubkey}:messages`, params, opts).catch(nada); + + let messages = await db.sMembers(`${pubkey}:messages`); + messages = await Promise.all( + messages.map(async id => { + let m = await g(`ev:${id}`); + let k = m.pubkey === pubkey ? m.tags[0].p : m.pubkey; + let uid = await g(`user:${k}`); + m.user = await g(`user:${uid}`); + return m; + }) + ); + + res.send(messages); + }, + async broadcast(req, res) { let { event } = req.body; pool.send(["EVENT", event]); diff --git a/routes/payments.js b/routes/payments.js index 60e3bdd2..6619c031 100644 --- a/routes/payments.js +++ b/routes/payments.js @@ -253,4 +253,34 @@ export default { res.send({ txid }); }, + + async buy({ body: { amount, number, month, year, cvc } }, res) { + let stripe = "https://api.stripe.com/v1"; + let { STRIPE: username } = process.env; + + let { id: source } = await got.post(`${stripe}/tokens`, { + form: { + "card[number]": number, + "card[exp_month]": month, + "card[exp_year]": year, + "card[cvc]": cvc + }, + username + }); + + let { status } = await got.post(`${stripe}/charges`, { + form: { + amount, + currency: "cad", + source, + description: "starter coupon" + }, + username + }); + + if (status !== "succeeded") + throw error(500, { message: "Card payment failed" }); + + res.send(status); + } }; diff --git a/routes/users.js b/routes/users.js index c6fb848d..c48c7599 100644 --- a/routes/users.js +++ b/routes/users.js @@ -171,7 +171,7 @@ export default { ]; for (let a of attributes) { - if (body[a]) user[a] = body[a]; + if (typeof body[a] !== "undefined") user[a] = body[a]; } if (password && password === confirm) { -- cgit v1.2.3