const bolt11 = require("bolt11"); module.exports = (app, db, lna, lnb) => async (req, res) => { let { payuser, amount } = req.body; let user = await db.User.findOne({ where: { username: payuser } }); if (!user) { return res.status(500).send("Couldn't find the user you're trying to pay"); } let err = m => res.status(500).send(m); let invoice; try { invoice = await lnb.addInvoice({ value: amount }); } catch (e) { return err(e.message); } let hash = invoice.payment_request; await db.Payment.create({ user_id: user.id, hash, amount, rate: app.get("rates")[req.user.currency], currency: req.user.currency, tip: 0, confirmed: true, received: false, asset: 'LNBTC', }); req.url = "/sendPayment"; let payreq = bolt11.decode(hash); const { routes } = await lna.queryRoutes({ "pub_key": payreq.payeeNodeKey, "amt": payreq.satoshis }); if (routes.length) req.body.route = routes[0]; else return res.status(500).send("No route available"); req.body.payreq = hash; return app._router.handle(req, res); };