diff options
| -rw-r--r-- | lib/createLnrpc.js | 2 | ||||
| -rw-r--r-- | package.json | 2 | ||||
| -rw-r--r-- | payments.js | 5 | ||||
| -rw-r--r-- | queryRoutes.js | 12 | ||||
| -rw-r--r-- | sendLiquid.js | 2 | ||||
| -rw-r--r-- | sendPayment.js | 92 | ||||
| -rw-r--r-- | yarn.lock | 4 |
7 files changed, 67 insertions, 52 deletions
diff --git a/lib/createLnrpc.js b/lib/createLnrpc.js index 661440bb..e32f6be3 100644 --- a/lib/createLnrpc.js +++ b/lib/createLnrpc.js @@ -23,7 +23,7 @@ module.exports = async ({ server, tls, macaroon, channelpeers }) => { let fn; if (streaming) { - if (key === "sendPayment") { + if (key === "sendPayment" || key === "sendToRoute") { fn = params => method.call(lnrpc, target.meta, params); } else { fn = params => method.call(lnrpc, params, target.meta); diff --git a/package.json b/package.json index c08f1a2d..d558f398 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "grpc": "^1.23.3", "http-proxy-middleware": "^0.20.0", "jsonwebtoken": "^8.5.1", - "lnrpc": "^0.6.1", + "lnrpc": "^0.6.2", "lodash": "^4.17.13", "mailgun-js": "^0.22.0", "moment": "^2.24.0", diff --git a/payments.js b/payments.js index 9866d244..d34b53f1 100644 --- a/payments.js +++ b/payments.js @@ -10,6 +10,11 @@ module.exports = async (app, auth, addresses, bc, db, emit, seen, payments) => { require("./lightningPayments")(app, db, lna, lnb, emit, payments); app.post( + "/queryRoutes", + auth, + require("./queryRoutes")(app, db, emit, seen, lna, lnb) + ); + app.post( "/sendPayment", auth, require("./sendPayment")(app, db, emit, seen, lna, lnb) diff --git a/queryRoutes.js b/queryRoutes.js new file mode 100644 index 00000000..0bdd76d7 --- /dev/null +++ b/queryRoutes.js @@ -0,0 +1,12 @@ +const bolt11 = require("bolt11"); +const config = require("./config"); + +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); + l(payreq); + const routes = await lna.queryRoutes({ "pub_key": payreq.payeeNodeKey, "amt": payreq.satoshis }); + res.send(routes); +}; diff --git a/sendLiquid.js b/sendLiquid.js index b9261493..1008f014 100644 --- a/sendLiquid.js +++ b/sendLiquid.js @@ -59,7 +59,7 @@ module.exports = (app, db, emit) => async (req, res) => { try { if (config.liquid.walletpass) - await bc.walletPassphrase(config.bitcoin.walletpass, 300); + await bc.walletPassphrase(config.liquid.walletpass, 300); rawtx = (await bc.signRawTransactionWithWallet(hex)).hex; let txid = await bc.sendRawTransaction(rawtx); 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); + } }; @@ -1925,7 +1925,7 @@ __metadata: grpc: ^1.23.3 http-proxy-middleware: ^0.20.0 jsonwebtoken: ^8.5.1 - lnrpc: ^0.6.1 + lnrpc: ^0.6.2 lodash: ^4.17.13 mailgun-js: ^0.22.0 moment: ^2.24.0 @@ -5019,7 +5019,7 @@ fsevents@~2.1.2: languageName: node linkType: hard -"lnrpc@npm:^0.6.1": +"lnrpc@npm:^0.6.2": version: 0.6.2 resolution: "lnrpc@npm:0.6.2" dependencies: |
