aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--index.js2
-rw-r--r--lib/nostr.js10
-rw-r--r--routes/nostr.js31
-rw-r--r--routes/payments.js30
-rw-r--r--routes/users.js2
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) {