aboutsummaryrefslogtreecommitdiffstats
path: root/sendPayment.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2020-02-28 10:54:01 -0800
committerAdam Soltys <[email protected]>2020-02-28 10:54:01 -0800
commit24cc1b02b768b21ff013b52cb5b4e9e4a3fe4a22 (patch)
tree994cc84a61a11402ad909c96417f7ff304074f69 /sendPayment.js
parent453856c0ae0124a3735b0204fd0a58f31bca8a0b (diff)
downloadcoinos-server-24cc1b02b768b21ff013b52cb5b4e9e4a3fe4a22.tar.gz
coinos-server-24cc1b02b768b21ff013b52cb5b4e9e4a3fe4a22.zip
query routes and send to route
Diffstat (limited to 'sendPayment.js')
-rw-r--r--sendPayment.js92
1 files changed, 45 insertions, 47 deletions
diff --git a/sendPayment.js b/sendPayment.js
index ff5b9609..1bc8b99a 100644
--- a/sendPayment.js
+++ b/sendPayment.js
@@ -6,6 +6,7 @@ const l = console.log;
module.exports = (app, db, emit, seen, lna, lnb) => async (req, res) => {
let hash = req.body.payreq;
let payreq = bolt11.decode(hash);
+ let { route } = req.body;
let { user } = req;
l("sending lightning", user.username, payreq.satoshis);
@@ -36,60 +37,57 @@ module.exports = (app, db, emit, seen, lna, lnb) => async (req, res) => {
return res.status(500).send("Not enough satoshis");
}
- const stream = lna.sendPayment(lna.meta, {});
- stream.write({ payment_request: req.body.payreq });
-
- stream.on("data", async m => {
- if (m.payment_error) {
- res.status(500).send(m.payment_error);
- } else {
- if (seen.includes(m.payment_preimage)) return;
- seen.push(m.payment_preimage);
-
- let total = parseInt(m.payment_route.total_amt);
- let fee = m.payment_route.total_fees;
+ let m;
+ try {
+ let paymentHash = payreq.tags.find(t => t.tagName === 'payment_hash').data;
+ m = await lna.sendToRouteSync({
+ "payment_hash": Buffer.from(paymentHash, 'hex'),
+ route
+ });
- user.balance -= total - payreq.satoshis;
+ if (seen.includes(m.payment_preimage)) return;
+ seen.push(m.payment_preimage);
- await db.transaction(async transaction => {
- await user.save({ transaction });
+ let total = parseInt(m.payment_route.total_amt);
+ let fee = m.payment_route.total_fees;
- const payment = await db.Payment.create(
- {
- amount: -total,
- fee,
- user_id: user.id,
- hash,
- rate: app.get("rates")[user.currency],
- currency: user.currency,
- confirmed: true,
- asset: 'LNBTC',
- },
- { transaction }
- );
+ user.balance -= total - payreq.satoshis;
- emit(user.username, "payment", payment);
- emit(user.username, "user", user);
+ await db.transaction(async transaction => {
+ await user.save({ transaction });
- if (payreq.payeeNodeKey === config.lnb.id) {
- let invoice = await lna.addInvoice({ value: payreq.satoshis });
- let payback = lnb.sendPayment(lnb.meta, {});
+ const payment = await db.Payment.create(
+ {
+ amount: -total,
+ fee,
+ user_id: user.id,
+ hash,
+ rate: app.get("rates")[user.currency],
+ currency: user.currency,
+ confirmed: true,
+ asset: 'LNBTC',
+ },
+ { transaction }
+ );
- /* eslint-disable-next-line */
- let { payment_request } = invoice;
- /* eslint-disable-next-line */
- payback.write({ payment_request });
- }
+ emit(user.username, "payment", payment);
+ emit(user.username, "user", user);
- seen.push(hash);
- res.send(payment);
- });
- }
- });
+ if (payreq.payeeNodeKey === config.lnb.id) {
+ let invoice = await lna.addInvoice({ value: payreq.satoshis });
+ let payback = lnb.sendPayment(lnb.meta, {});
- stream.on("error", e => {
- let msg = e.message;
+ /* eslint-disable-next-line */
+ let { payment_request } = invoice;
+ /* eslint-disable-next-line */
+ payback.write({ payment_request });
+ }
- res.status(500).send(msg);
- });
+ seen.push(hash);
+ res.send(payment);
+ });
+ } catch (e) {
+ l(e);
+ return res.status(500).send(e);
+ }
};