diff options
| author | Adam Soltys <[email protected]> | 2020-07-28 20:16:58 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2020-07-28 20:25:16 -0700 |
| commit | d22869941ec704edd17d1d05038e6139681f97cf (patch) | |
| tree | cfe600fead05c7e78dec6932c62d42171251eac8 | |
| parent | 72f3bc93357e74b71be0e3f1e621fb556f7fd088 (diff) | |
| download | coinos-server-d22869941ec704edd17d1d05038e6139681f97cf.tar.gz coinos-server-d22869941ec704edd17d1d05038e6139681f97cf.zip | |
use async handler to catch async errors
| -rw-r--r-- | index.js | 3 | ||||
| -rw-r--r-- | package.json | 1 | ||||
| -rw-r--r-- | routes/assets.js | 12 | ||||
| -rw-r--r-- | routes/bitcoin/fee.js | 4 | ||||
| -rw-r--r-- | routes/bitcoin/generate.js | 4 | ||||
| -rw-r--r-- | routes/bitcoin/send.js | 4 | ||||
| -rw-r--r-- | routes/bitcoin/sweep.js | 4 | ||||
| -rw-r--r-- | routes/info.js | 4 | ||||
| -rw-r--r-- | routes/invoices.js | 8 | ||||
| -rw-r--r-- | routes/lightning/channel.js | 4 | ||||
| -rw-r--r-- | routes/lightning/channelRequest.js | 4 | ||||
| -rw-r--r-- | routes/lightning/invoice.js | 4 | ||||
| -rw-r--r-- | routes/lightning/query.js | 4 | ||||
| -rw-r--r-- | routes/lightning/send.js | 4 | ||||
| -rw-r--r-- | routes/liquid/fee.js | 4 | ||||
| -rw-r--r-- | routes/liquid/generate.js | 4 | ||||
| -rw-r--r-- | routes/liquid/send.js | 4 | ||||
| -rw-r--r-- | routes/lnurl.js | 36 | ||||
| -rw-r--r-- | routes/payments.js | 4 | ||||
| -rw-r--r-- | routes/send.js | 4 | ||||
| -rw-r--r-- | routes/swaps.js | 24 | ||||
| -rw-r--r-- | yarn.lock | 8 |
22 files changed, 81 insertions, 71 deletions
@@ -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({ @@ -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" |
