aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--lib/persist.js18
-rw-r--r--monster.json1
-rw-r--r--nodemon.json3
-rw-r--r--routes/lnurl.js36
-rw-r--r--routes/send.js2
6 files changed, 54 insertions, 7 deletions
diff --git a/.gitignore b/.gitignore
index f23b1deb..f0e7cbfe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@ swaps
exceptions
fx
uploads
+data
diff --git a/lib/persist.js b/lib/persist.js
new file mode 100644
index 00000000..24d00693
--- /dev/null
+++ b/lib/persist.js
@@ -0,0 +1,18 @@
+fs = require("fs");
+
+module.exports = (path, initial = {}) => {
+ try {
+ return require("../" + path);
+ } catch {
+ return new Proxy(initial, {
+ set(obj, prop, value) {
+ fs.writeFileSync(
+ path,
+ JSON.stringify({ ...obj, [prop]: value }, null, 2),
+ "utf-8"
+ );
+ return Reflect.set(...arguments);
+ }
+ });
+ }
+};
diff --git a/monster.json b/monster.json
new file mode 100644
index 00000000..013a76cb
--- /dev/null
+++ b/monster.json
@@ -0,0 +1 @@
+{"eyeCount":2,"googledumb":6} \ No newline at end of file
diff --git a/nodemon.json b/nodemon.json
new file mode 100644
index 00000000..44ce3e3b
--- /dev/null
+++ b/nodemon.json
@@ -0,0 +1,3 @@
+{
+ "ignore": ["data/*"]
+}
diff --git a/routes/lnurl.js b/routes/lnurl.js
index 04cadc13..f47cf6f4 100644
--- a/routes/lnurl.js
+++ b/routes/lnurl.js
@@ -2,11 +2,12 @@ const axios = require("axios");
const lnurl = require("lnurl");
const jwt = require("jsonwebtoken");
const qs = require("query-string");
+const persist = require("../lib/persist");
-logins = {};
-recipients = {};
-payments = {};
-withdrawals = {};
+logins = persist('data/logins.json');
+recipients = persist('data/recipients.json');
+payments = persist('data/payments.json');
+withdrawals = persist('data/withdrawals.json');
lnurlServer = lnurl.createServer(config.lnurl);
@@ -166,15 +167,36 @@ app.post(
params: { callback, k1 }
} = req.body;
- const url = `${callback}${callback.includes('?') ? '&' : '?'}amount=${amount * 1000}${comment ? '&comment=' + comment : ''}`;
+ let url = `${callback}${callback.includes("?") ? "&" : "?"}amount=${amount *
+ 1000}${comment ? "&comment=" + comment : ""}`;
+ console.log(url);
try {
const parts = callback.split("/");
const secret = parts[parts.length - 1];
payments[secret] = user;
- const result = (await axios.get(url)).data;
- res.send(await send(amount, "", result.pr, user));
+ if (recipients[secret]) {
+ url = `${req.protocol}://${req.get("host")}/api/send`;
+ const { data } = await axios.post(
+ url,
+ {
+ amount,
+ memo: comment,
+ username: recipients[secret].username
+ },
+ {
+ headers: {
+ Authorization: req.get("Authorization")
+ }
+ }
+ );
+
+ res.send(data);
+ } else {
+ const { data } = await axios.get(url);
+ res.send(await send(amount, "", data.pr, user));
+ }
} catch (e) {
l.error("failed to send payment", e.message);
res.status(500).send(e.message);
diff --git a/routes/send.js b/routes/send.js
index ab67bfaa..78c6d9b7 100644
--- a/routes/send.js
+++ b/routes/send.js
@@ -5,6 +5,8 @@ module.exports = ah(async (req, res, next) => {
let { amount, asset, memo, username } = req.body;
let { user } = req;
+ if (!asset) asset = config.liquid.btcasset;
+
if (!amount || amount < 0)
return res.status(500).send("Amount must be greater than zero");