aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2020-07-28 20:16:58 -0700
committerAdam Soltys <[email protected]>2020-07-28 20:25:16 -0700
commitd22869941ec704edd17d1d05038e6139681f97cf (patch)
treecfe600fead05c7e78dec6932c62d42171251eac8
parent72f3bc93357e74b71be0e3f1e621fb556f7fd088 (diff)
downloadcoinos-server-d22869941ec704edd17d1d05038e6139681f97cf.tar.gz
coinos-server-d22869941ec704edd17d1d05038e6139681f97cf.zip
use async handler to catch async errors
-rw-r--r--index.js3
-rw-r--r--package.json1
-rw-r--r--routes/assets.js12
-rw-r--r--routes/bitcoin/fee.js4
-rw-r--r--routes/bitcoin/generate.js4
-rw-r--r--routes/bitcoin/send.js4
-rw-r--r--routes/bitcoin/sweep.js4
-rw-r--r--routes/info.js4
-rw-r--r--routes/invoices.js8
-rw-r--r--routes/lightning/channel.js4
-rw-r--r--routes/lightning/channelRequest.js4
-rw-r--r--routes/lightning/invoice.js4
-rw-r--r--routes/lightning/query.js4
-rw-r--r--routes/lightning/send.js4
-rw-r--r--routes/liquid/fee.js4
-rw-r--r--routes/liquid/generate.js4
-rw-r--r--routes/liquid/send.js4
-rw-r--r--routes/lnurl.js36
-rw-r--r--routes/payments.js4
-rw-r--r--routes/send.js4
-rw-r--r--routes/swaps.js24
-rw-r--r--yarn.lock8
22 files changed, 81 insertions, 71 deletions
diff --git a/index.js b/index.js
index 82ae8db5..4fd03894 100644
--- a/index.js
+++ b/index.js
@@ -5,6 +5,7 @@ const cookieParser = require("cookie-parser");
const cors = require("cors");
const express = require("express");
const { Op } = require("sequelize");
+ah = require("express-async-handler");
l = require("pino")();
config = require("./config");
@@ -63,7 +64,7 @@ app.use((err, req, res, next) => {
if (req.user) details.username = req.user.username;
- l.error("uncaught error", details);
+ l.error("uncaught error", details, err.message);
res.status(500);
res.send("An error occurred");
return res.end();
diff --git a/package.json b/package.json
index 84d270ec..7706443c 100644
--- a/package.json
+++ b/package.json
@@ -25,6 +25,7 @@
"cors": "^2.8.5",
"elementsjs-lib": "https://github.com/asoltys/elementsjs-lib",
"express": "4.17.1",
+ "express-async-handler": "^1.1.4",
"express-session": "^1.16.2",
"grpc": "^1.24.2",
"http-proxy-middleware": "^0.20.0",
diff --git a/routes/assets.js b/routes/assets.js
index 8c39a12f..35177d6c 100644
--- a/routes/assets.js
+++ b/routes/assets.js
@@ -1,7 +1,7 @@
const axios = require("axios");
const crypto = require("crypto");
-app.get("/assets", async (req, res) => {
+app.get("/assets", ah(async (req, res) => {
try {
const { data: assets } = await axios.get(
"https://assets.blockstream.info/"
@@ -21,9 +21,9 @@ app.get("/assets", async (req, res) => {
l.error("error fetching assets", e.message);
res.status(500).send("error fetching assets");
}
-});
+}));
-app.post("/assets", auth, async (req, res) => {
+app.post("/assets", auth, ah(async (req, res) => {
try {
const sha256 = crypto.createHash("sha256");
const { id: user_id } = req.user;
@@ -203,9 +203,9 @@ app.post("/assets", auth, async (req, res) => {
l.error("asset issuance failed", e.message);
res.status(500).send(e.message);
}
-});
+}));
-app.post("/assets/register", auth, async (req, res) => {
+app.post("/assets/register", auth, ah(async (req, res) => {
const { asset } = req.body;
const account = await db.Account.findOne({
where: {
@@ -228,4 +228,4 @@ app.post("/assets/register", auth, async (req, res) => {
l.error("asset registration failed", e.message);
res.status(500).send(e.message);
}
-});
+}));
diff --git a/routes/bitcoin/fee.js b/routes/bitcoin/fee.js
index 8a0db177..220fbae9 100644
--- a/routes/bitcoin/fee.js
+++ b/routes/bitcoin/fee.js
@@ -1,4 +1,4 @@
-module.exports = async (req, res) => {
+module.exports = ah(async (req, res) => {
let { user } = req;
let { address, amount, feeRate } = req.body;
let tx, fee;
@@ -37,4 +37,4 @@ module.exports = async (req, res) => {
l.error("bitcoin fee estimation error", e);
return res.status(500).send(e.message);
}
-};
+});
diff --git a/routes/bitcoin/generate.js b/routes/bitcoin/generate.js
index 8017c8f0..b8706891 100644
--- a/routes/bitcoin/generate.js
+++ b/routes/bitcoin/generate.js
@@ -1,5 +1,5 @@
-module.exports = async (req, res) => {
+module.exports = ah(async (req, res) => {
let address = await bc.getNewAddress();
await bc.generateToAddress(1, address);
res.end();
-}
+});
diff --git a/routes/bitcoin/send.js b/routes/bitcoin/send.js
index fcdcb298..1ce1da54 100644
--- a/routes/bitcoin/send.js
+++ b/routes/bitcoin/send.js
@@ -1,7 +1,7 @@
const bitcoin = require("bitcoinjs-lib");
const reverse = require("buffer-reverse");
-module.exports = async (req, res) => {
+module.exports = ah(async (req, res) => {
let { user } = req;
let { address, memo, tx } = req.body;
let { hex } = tx;
@@ -92,4 +92,4 @@ module.exports = async (req, res) => {
l.error("error sending bitcoin", e.message);
return res.status(500).send(e.message);
}
-};
+});
diff --git a/routes/bitcoin/sweep.js b/routes/bitcoin/sweep.js
index 0d1d63b1..7d596499 100644
--- a/routes/bitcoin/sweep.js
+++ b/routes/bitcoin/sweep.js
@@ -8,7 +8,7 @@ const network = prod
? bitcoin.networks["bitcoin"]
: bitcoin.networks["regtest"];
-module.exports = async (req, res) => {
+module.exports = ah(async (req, res) => {
let ecpair = bitcoin.ECPair.fromWIF(
"cVosbTBiXp7LYSiGVRZfZnrEjpao4X4CUTG7Ze21XM3zFTLPCMvk",
network
@@ -80,4 +80,4 @@ module.exports = async (req, res) => {
if (balance !== amount) total = 0;
res.send({ feeRate, psbt, total });
-};
+});
diff --git a/routes/info.js b/routes/info.js
index 382c37c0..957c6926 100644
--- a/routes/info.js
+++ b/routes/info.js
@@ -1,7 +1,7 @@
const sequelize = require("sequelize");
const { Op } = sequelize;
-app.get("/info", async (req, res) => {
+app.get("/info", ah(async (req, res, next) => {
const { clientVersion } = config;
const accounts = await db.Account.findAll({
attributes: [
@@ -62,4 +62,4 @@ app.get("/info", async (req, res) => {
parseInt(lnwallet);
res.send(info);
-});
+}));
diff --git a/routes/invoices.js b/routes/invoices.js
index a4a6c0da..fdfb39d8 100644
--- a/routes/invoices.js
+++ b/routes/invoices.js
@@ -1,6 +1,6 @@
const { Op } = require("sequelize");
-app.get("/invoice", auth, async (req, res) => {
+app.get("/invoice", auth, ah(async (req, res, next) => {
try {
const invoice = await db.Invoice.findOne({
where: {
@@ -12,9 +12,9 @@ app.get("/invoice", auth, async (req, res) => {
} catch (e) {
l.error("couldn't find invoice", e);
}
-});
+}));
-app.post("/invoice", auth, async (req, res) => {
+app.post("/invoice", auth, ah(async (req, res, next) => {
const { invoice } = req.body;
invoice.user_id = req.user.id;
@@ -47,4 +47,4 @@ app.post("/invoice", auth, async (req, res) => {
res.send(
exists ? await exists.update(invoice) : await db.Invoice.create(invoice)
);
-});
+}));
diff --git a/routes/lightning/channel.js b/routes/lightning/channel.js
index c5ab6a02..b6c4a25f 100644
--- a/routes/lightning/channel.js
+++ b/routes/lightning/channel.js
@@ -1,6 +1,6 @@
const axios = require("axios");
-module.exports = async (req, res) => {
+module.exports = ah(async (req, res) => {
const { params } = req.body;
const [pubkey, host] = params.uri.split("@");
@@ -36,4 +36,4 @@ module.exports = async (req, res) => {
l.error("problem sending channel request", e.message);
return res.status(500).send({ status: "ERROR", reason: e.message });
}
-};
+});
diff --git a/routes/lightning/channelRequest.js b/routes/lightning/channelRequest.js
index 9ba74009..169de654 100644
--- a/routes/lightning/channelRequest.js
+++ b/routes/lightning/channelRequest.js
@@ -1,4 +1,4 @@
-module.exports = async (req, res) => {
+module.exports = ah(async (req, res) => {
let { localAmt, pushAmt } = req.body;
pushAmt = 0;
@@ -17,4 +17,4 @@ module.exports = async (req, res) => {
l.error("problem generating channel request", e.message);
res.status(500).send(e.message);
}
-};
+});
diff --git a/routes/lightning/invoice.js b/routes/lightning/invoice.js
index 2f39bf3f..689c696a 100644
--- a/routes/lightning/invoice.js
+++ b/routes/lightning/invoice.js
@@ -1,4 +1,4 @@
-module.exports = async (req, res) => {
+module.exports = ah(async (req, res) => {
const { amount, memo, tip } = req.body;
l.info("adding lightning invoice", req.user.username, amount, tip);
@@ -15,4 +15,4 @@ module.exports = async (req, res) => {
l.error("problem creating invoice", e.message);
res.status(500).send(e.message);
}
-};
+});
diff --git a/routes/lightning/query.js b/routes/lightning/query.js
index a374f3c5..dc867371 100644
--- a/routes/lightning/query.js
+++ b/routes/lightning/query.js
@@ -1,4 +1,4 @@
-module.exports = async (req, res) => {
+module.exports = ah(async (req, res) => {
const { payreq } = req.body;
const invoice = await db.Invoice.findOne({
@@ -14,4 +14,4 @@ module.exports = async (req, res) => {
if (invoice) emit(req.user.username, "to", invoice.user);
res.end();
-};
+});
diff --git a/routes/lightning/send.js b/routes/lightning/send.js
index be68143e..ad1bea62 100644
--- a/routes/lightning/send.js
+++ b/routes/lightning/send.js
@@ -1,4 +1,4 @@
-module.exports = async (req, res) => {
+module.exports = ah(async (req, res) => {
let { amount, route, memo, payreq } = req.body;
let { user } = req;
@@ -9,4 +9,4 @@ module.exports = async (req, res) => {
res.status(500).send(e.message);
throw new Error(e.message);
}
-};
+});
diff --git a/routes/liquid/fee.js b/routes/liquid/fee.js
index 7817da14..b68c4178 100644
--- a/routes/liquid/fee.js
+++ b/routes/liquid/fee.js
@@ -1,4 +1,4 @@
-module.exports = async (req, res) => {
+module.exports = ah(async (req, res) => {
let { user } = req;
let { address, asset, amount, feeRate } = req.body;
let tx, fee;
@@ -51,4 +51,4 @@ module.exports = async (req, res) => {
l.error("error estimating liquid fee", e.message);
return res.status(500).send(e.message);
}
-};
+});
diff --git a/routes/liquid/generate.js b/routes/liquid/generate.js
index 4e443d75..5bcb1c0a 100644
--- a/routes/liquid/generate.js
+++ b/routes/liquid/generate.js
@@ -1,5 +1,5 @@
-module.exports = async (req, res) => {
+module.exports = ah(async (req, res) => {
let address = await lq.getNewAddress();
await lq.generateToAddress(1, address);
res.end();
-}
+});
diff --git a/routes/liquid/send.js b/routes/liquid/send.js
index a443edf3..5dd7f04e 100644
--- a/routes/liquid/send.js
+++ b/routes/liquid/send.js
@@ -1,6 +1,6 @@
const reverse = require("buffer-reverse");
-module.exports = async (req, res) => {
+module.exports = ah(async (req, res) => {
let { user } = req;
let { address, memo, tx } = req.body;
@@ -120,4 +120,4 @@ module.exports = async (req, res) => {
l.error("problem sending liquid", user.username, e.message);
return res.status(500).send(e.message);
}
-};
+});
diff --git a/routes/lnurl.js b/routes/lnurl.js
index a3701059..d8336709 100644
--- a/routes/lnurl.js
+++ b/routes/lnurl.js
@@ -17,7 +17,7 @@ var optionalAuth = function (req, res, next) {
})(req, res, next);
};
-app.get("/url", async (req, res) => {
+app.get("/url", ah(async (req, res, next) => {
try {
const code = await db.Code.findOne({
where: {
@@ -33,9 +33,9 @@ app.get("/url", async (req, res) => {
} catch (e) {
l.error("couldn't find url", e.message);
}
-});
+}));
-app.get("/withdraw", auth, async (req, res) => {
+app.get("/withdraw", auth, ah(async (req, res, next) => {
const { min, max } = req.query;
try {
const result = await lnurlServer.generateNewUrl("withdrawRequest", {
@@ -51,9 +51,9 @@ app.get("/withdraw", auth, async (req, res) => {
l.error("problem generating withdrawl url", e.message);
res.status(500).send(e.message);
}
-});
+}));
-app.post("/code", async (req, res) => {
+app.post("/code", ah(async (req, res, next) => {
try {
const { encoded } = req.body.lnurl;
const code = await db.Code.create({
@@ -65,9 +65,9 @@ app.post("/code", async (req, res) => {
} catch (e) {
res.status(500).send(e.message);
}
-});
+}));
-app.post("/withdraw", auth, async (req, res) => {
+app.post("/withdraw", auth, ah(async (req, res, next) => {
const { user } = req;
const {
amount: value,
@@ -94,7 +94,7 @@ app.post("/withdraw", auth, async (req, res) => {
l.error("failed to withdraw", e.message);
res.status(500).send(e.message);
}
-});
+}));
const pay = async ({ amount, minSendable, maxSendable }, res, user) => {
minSendable = minSendable || 1000;
@@ -117,7 +117,7 @@ const pay = async ({ amount, minSendable, maxSendable }, res, user) => {
}
};
-app.get("/pay/:username", async (req, res) => {
+app.get("/pay/:username", ah(async (req, res, next) => {
const { username } = req.params;
let user = await db.User.findOne({
where: {
@@ -125,14 +125,14 @@ app.get("/pay/:username", async (req, res) => {
},
});
pay(req.query, res, user);
-});
+}));
-app.get("/pay", auth, async (req, res) => {
+app.get("/pay", auth, ah(async (req, res, next) => {
const { user } = req;
pay(req.query, res, user);
-});
+}));
-app.post("/pay", auth, async (req, res) => {
+app.post("/pay", auth, ah(async (req, res, next) => {
const { user } = req;
const {
amount,
@@ -153,9 +153,9 @@ app.post("/pay", auth, async (req, res) => {
l.error("failed to send payment", e.message);
res.status(500).send(e.message);
}
-});
+}));
-app.get("/login", optionalAuth, async (req, res) => {
+app.get("/login", optionalAuth, ah(async (req, res, next) => {
try {
const result = await lnurlServer.generateNewUrl("login");
@@ -168,9 +168,9 @@ app.get("/login", optionalAuth, async (req, res) => {
l.error("problem generating login url", e.message);
res.status(500).send(e.message);
}
-});
+}));
-app.get("/decode", async (req, res) => {
+app.get("/decode", ah(async (req, res, next) => {
const { text } = req.query;
try {
@@ -196,7 +196,7 @@ app.get("/decode", async (req, res) => {
l.error("problem decoding lnurl", e.message);
res.status(500).send(e.message);
}
-});
+}));
lnurlServer.bindToHook(
"middleware:signedLnurl:afterCheckSignature",
diff --git a/routes/payments.js b/routes/payments.js
index 9122fbaf..e16d6c3d 100644
--- a/routes/payments.js
+++ b/routes/payments.js
@@ -68,7 +68,7 @@ const { join } = require("path");
require("./liquid/receive");
}
- app.get("/payments", auth, async (req, res) => {
+ app.get("/payments", auth, ah(async (req, res, next) => {
let payments = await req.user.getPayments({
where: {
account_id: req.user.account_id
@@ -81,5 +81,5 @@ const { join } = require("path");
});
res.send(payments);
- });
+ }));
})();
diff --git a/routes/send.js b/routes/send.js
index 2fad326d..00943d29 100644
--- a/routes/send.js
+++ b/routes/send.js
@@ -1,6 +1,6 @@
const axios = require("axios");
-module.exports = async (req, res) => {
+module.exports = ah(async (req, res, next) => {
let { amount, asset, memo, username } = req.body;
let { user } = req;
@@ -137,4 +137,4 @@ module.exports = async (req, res) => {
);
return res.status(500).send(e.message);
}
-};
+});
diff --git a/routes/swaps.js b/routes/swaps.js
index 2d9fa5dc..0d88f3bf 100644
--- a/routes/swaps.js
+++ b/routes/swaps.js
@@ -84,7 +84,7 @@ const getInfo = (filename) =>
setTimeout(() => reject(new Error("Liquid swap tool timed out"), proc), timeout);
});
-app.delete("/proposal/:id", auth, async (req, res) => {
+app.delete("/proposal/:id", auth, ah(async (req, res) => {
const { id } = req.params;
await db.Proposal.destroy({
where: {
@@ -93,9 +93,9 @@ app.delete("/proposal/:id", auth, async (req, res) => {
},
});
res.end();
-});
+}));
-app.get("/proposal", auth, async (req, res) => {
+app.get("/proposal", auth, ah(async (req, res) => {
try {
const { user } = req;
const { a1, v1, a2, v2 } = req.query;
@@ -139,9 +139,9 @@ app.get("/proposal", auth, async (req, res) => {
l.error(e.message);
res.status(500).send({ error: e.message });
}
-});
+}));
-app.post("/accept", optionalAuth, async (req, res) => {
+app.post("/accept", optionalAuth, ah(async (req, res) => {
try {
const { id, text } = req.body;
@@ -356,9 +356,9 @@ app.post("/accept", optionalAuth, async (req, res) => {
l.error(e.message);
res.status(500).send(e.message);
}
-});
+}));
-app.post("/acceptance", async (req, res) => {
+app.post("/acceptance", ah(async (req, res) => {
const { acceptance: text } = req.body;
l.info("acceptance received");
@@ -398,7 +398,7 @@ app.post("/acceptance", async (req, res) => {
res.status(500).send({ error: e });
}
});
-});
+}));
checkQueue = async () => {
const ws = app.get("ws");
@@ -506,7 +506,7 @@ const finalize = (filename = "finalized.txt", text) => {
});
};
-app.get("/proposals", optionalAuth, async (req, res) => {
+app.get("/proposals", optionalAuth, ah(async (req, res) => {
try {
if (req.user) {
res.send(await db.Proposal.findAll());
@@ -523,9 +523,9 @@ app.get("/proposals", optionalAuth, async (req, res) => {
} catch (e) {
res.status(500).send(e.message);
}
-});
+}));
-app.post("/publish", auth, async (req, res) => {
+app.post("/publish", auth, ah(async (req, res) => {
try {
const { id } = req.body;
await db.Proposal.update(
@@ -536,7 +536,7 @@ app.post("/publish", auth, async (req, res) => {
} catch (e) {
res.status(500).send(e.message);
}
-});
+}));
const getAccount = async (asset, user) => {
const account = await db.Account.findOne({
diff --git a/yarn.lock b/yarn.lock
index 4e80e257..c1e7194b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1562,6 +1562,7 @@ __metadata:
cors: ^2.8.5
elementsjs-lib: "https://github.com/asoltys/elementsjs-lib"
express: 4.17.1
+ express-async-handler: ^1.1.4
express-session: ^1.16.2
grpc: ^1.24.2
http-proxy-middleware: ^0.20.0
@@ -2559,6 +2560,13 @@ __metadata:
languageName: node
linkType: hard
+"express-async-handler@npm:^1.1.4":
+ version: 1.1.4
+ resolution: "express-async-handler@npm:1.1.4"
+ checksum: 0cc72e8be4d748d40c27b0049653d2143c75ddbce0d3e7d5319db4d1a364f3934cd8eeb77ea3a2919a80e1e5eb9666f3008328fbe70141d4ce0f0e11d368be18
+ languageName: node
+ linkType: hard
+
"express-session@npm:^1.16.2":
version: 1.17.1
resolution: "express-session@npm:1.17.1"