From 9fb58c7b2765646f95139c89e7339114a46a9948 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 12 Feb 2020 10:08:26 -0800 Subject: 2fa --- yarn.lock | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) (limited to 'yarn.lock') diff --git a/yarn.lock b/yarn.lock index 3f09bd9a..f67af1b9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -161,6 +161,54 @@ __metadata: languageName: node linkType: hard +"@otplib/core@npm:^12.0.1": + version: 12.0.1 + resolution: "@otplib/core@npm:12.0.1" + checksum: 3a73c409dc4e9a3dbb8d1e4bd3cb438883c0c7f287c8a7485ef558b47e8e72af18e23e4817d085b9f5e40ce970d7b0ce11ae5524692927c964c80ce399840480 + languageName: node + linkType: hard + +"@otplib/plugin-crypto@npm:^12.0.1": + version: 12.0.1 + resolution: "@otplib/plugin-crypto@npm:12.0.1" + dependencies: + "@otplib/core": ^12.0.1 + checksum: f83458ed5a4ac91118d7bc113385d0ab296c7b97e243903a887f2097c1b03421e5f670be60f808d96a9934f3a0049aceb2af02f71e54d5f22f065000b841a0c6 + languageName: node + linkType: hard + +"@otplib/plugin-thirty-two@npm:^12.0.1": + version: 12.0.1 + resolution: "@otplib/plugin-thirty-two@npm:12.0.1" + dependencies: + "@otplib/core": ^12.0.1 + thirty-two: ^1.0.2 + checksum: 4deec8586480f880239a087f6f6599eb4425abdda184e383112f97993bb5961943fdb435fbea086b1f9d1116768ec0c2fb6df9e8a0dbb854b7c0765dbbdcd9fe + languageName: node + linkType: hard + +"@otplib/preset-default@npm:^12.0.1": + version: 12.0.1 + resolution: "@otplib/preset-default@npm:12.0.1" + dependencies: + "@otplib/core": ^12.0.1 + "@otplib/plugin-crypto": ^12.0.1 + "@otplib/plugin-thirty-two": ^12.0.1 + checksum: 32b214c0f750c793147f1e988093959aef8eded36c9d7df2c2c7ff4e4fb54de85b76b5ff28ee8ee39b1572c933d205c081a3c8f2df192199813b3572e61a7305 + languageName: node + linkType: hard + +"@otplib/preset-v11@npm:^12.0.1": + version: 12.0.1 + resolution: "@otplib/preset-v11@npm:12.0.1" + dependencies: + "@otplib/core": ^12.0.1 + "@otplib/plugin-crypto": ^12.0.1 + "@otplib/plugin-thirty-two": ^12.0.1 + checksum: 89366b1c52a8de2a1cd434c9fd534d97fcde0b103f92d15ff3cf37ed1d3579746b7b4b70efe398aa532ab44e15daa008d471f90f8b4de04f8cba81c05dfda7de + languageName: node + linkType: hard + "@pm2/agent-node@npm:^1.1.10": version: 1.1.10 resolution: "@pm2/agent-node@npm:1.1.10" @@ -1885,6 +1933,7 @@ __metadata: mysql: ^2.17.1 mysql2: ^1.6.5 nodemon: ^2.0.2 + otplib: ^12.0.1 passport: 0.4.0 passport-jwt: ^4.0.0 passport-local: 1.0.0 @@ -6070,6 +6119,17 @@ fsevents@~2.1.2: languageName: node linkType: hard +"otplib@npm:^12.0.1": + version: 12.0.1 + resolution: "otplib@npm:12.0.1" + dependencies: + "@otplib/core": ^12.0.1 + "@otplib/preset-default": ^12.0.1 + "@otplib/preset-v11": ^12.0.1 + checksum: 93b006b69d7c51fa1e8d6e7a661c1208aa9410be10274a8eb81dcd1d2b1b08c3b9f1e2ef4e10d2a4ad4ef3a8f3e43da4830d21d674161a4fa43ac9e23594c437 + languageName: node + linkType: hard + "p-cancelable@npm:^0.3.0": version: 0.3.0 resolution: "p-cancelable@npm:0.3.0" @@ -8350,6 +8410,13 @@ fsevents@~2.1.2: languageName: node linkType: hard +"thirty-two@npm:^1.0.2": + version: 1.0.2 + resolution: "thirty-two@npm:1.0.2" + checksum: 573755c8a09da50666b4354fe6b6f8624cf2bfcf2c71ffbed531b6d73b988e1907be792ef23664749144978620ddb7026a158fc1c72d3eee4545b422dfc4e814 + languageName: node + linkType: hard + "through@npm:^2.3.8": version: 2.3.8 resolution: "through@npm:2.3.8" -- cgit v1.2.3 From 24cc1b02b768b21ff013b52cb5b4e9e4a3fe4a22 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 28 Feb 2020 10:54:01 -0800 Subject: query routes and send to route --- lib/createLnrpc.js | 2 +- package.json | 2 +- payments.js | 5 +++ queryRoutes.js | 12 ++++++ sendLiquid.js | 2 +- sendPayment.js | 110 ++++++++++++++++++++++++++--------------------------- yarn.lock | 4 +- 7 files changed, 76 insertions(+), 61 deletions(-) create mode 100644 queryRoutes.js (limited to 'yarn.lock') 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 @@ -9,6 +9,11 @@ module.exports = async (app, auth, addresses, bc, db, emit, seen, payments) => { require("./liquidPayments")(app, db, addresses, payments, emit); require("./lightningPayments")(app, db, lna, lnb, emit, payments); + app.post( + "/queryRoutes", + auth, + require("./queryRoutes")(app, db, emit, seen, lna, lnb) + ); app.post( "/sendPayment", auth, 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; - - user.balance -= total - payreq.satoshis; - - await db.transaction(async transaction => { - await user.save({ transaction }); - - 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 } - ); - - emit(user.username, "payment", payment); - emit(user.username, "user", user); - - if (payreq.payeeNodeKey === config.lnb.id) { - let invoice = await lna.addInvoice({ value: payreq.satoshis }); - let payback = lnb.sendPayment(lnb.meta, {}); - - /* eslint-disable-next-line */ - let { payment_request } = invoice; - /* eslint-disable-next-line */ - payback.write({ payment_request }); - } - - seen.push(hash); - res.send(payment); - }); - } - }); - - stream.on("error", e => { - let msg = e.message; - - res.status(500).send(msg); - }); + 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 + }); + + 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; + + user.balance -= total - payreq.satoshis; + + await db.transaction(async transaction => { + await user.save({ transaction }); + + 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 } + ); + + emit(user.username, "payment", payment); + emit(user.username, "user", user); + + if (payreq.payeeNodeKey === config.lnb.id) { + let invoice = await lna.addInvoice({ value: payreq.satoshis }); + let payback = lnb.sendPayment(lnb.meta, {}); + + /* eslint-disable-next-line */ + let { payment_request } = invoice; + /* eslint-disable-next-line */ + payback.write({ payment_request }); + } + + seen.push(hash); + res.send(payment); + }); + } catch (e) { + l(e); + return res.status(500).send(e); + } }; diff --git a/yarn.lock b/yarn.lock index f67af1b9..d2c1ce3a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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: -- cgit v1.2.3