diff options
| author | Adam Soltys <[email protected]> | 2021-08-03 02:16:30 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2021-08-03 02:57:31 -0700 |
| commit | cfa93d65f113b4eed50cc88be76eeefa04a900eb (patch) | |
| tree | 169dd69bcab545385811560052a41fe85d9b514b | |
| parent | 680e82f7d7654db345b6242bfe5b1fb6804ea4ec (diff) | |
| download | coinos-server-cfa93d65f113b4eed50cc88be76eeefa04a900eb.tar.gz coinos-server-cfa93d65f113b4eed50cc88be76eeefa04a900eb.zip | |
re-enable lnd support
| -rw-r--r-- | lib/lnd.js | 36 | ||||
| -rw-r--r-- | package.json | 1 | ||||
| -rw-r--r-- | routes/payments.js | 2 | ||||
| -rw-r--r-- | yarn.lock | 14 |
4 files changed, 51 insertions, 2 deletions
diff --git a/lib/lnd.js b/lib/lnd.js new file mode 100644 index 00000000..c6caf3be --- /dev/null +++ b/lib/lnd.js @@ -0,0 +1,36 @@ +const fs = require('fs'); +const path = require('path'); +const grpc = require('@grpc/grpc-js'); +const protoLoader = require('@grpc/proto-loader'); +const { promisify } = require('util'); + + +module.exports = ({ tls, macaroon, server }) => { + const packageDefinition = protoLoader.loadSync('config/rpc.proto', { + keepCase: true, + longs: String, + enums: String, + defaults: true, + oneofs: true + }); + const lnrpc = grpc.loadPackageDefinition(packageDefinition).lnrpc; + process.env.GRPC_SSL_CIPHER_SUITES = 'HIGH+ECDSA' + const lndCert = fs.readFileSync(tls); + const sslCreds = grpc.credentials.createSsl(lndCert); + const macaroonCreds = grpc.credentials.createFromMetadataGenerator(function(args, callback) { + const macaroonFile = fs.readFileSync(macaroon).toString('hex'); + const metadata = new grpc.Metadata() + metadata.add('macaroon', macaroonFile); + callback(null, metadata); + }); + const creds = grpc.credentials.combineChannelCredentials(sslCreds, macaroonCreds); + const lnd = new lnrpc.Lightning(server, creds); + + return new Proxy(lnd, { + get(target, key) { + const method = target[key]; + if (typeof method === 'function' && !key.startsWith('sub')) return promisify(method); + return target[key]; + }, + }); +} diff --git a/package.json b/package.json index d1d126bd..909ce5de 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "dependencies": { "@asoltys/bitcoin-core": "^3.0.7", "@asoltys/liquidjs-lib": "^5.1.38", + "@grpc/grpc-js": "^1.3.6", "@grpc/proto-loader": "^0.5.3", "async-mutex": "^0.2.4", "axios": "^0.21.1", diff --git a/routes/payments.js b/routes/payments.js index a749e333..a171b92f 100644 --- a/routes/payments.js +++ b/routes/payments.js @@ -96,7 +96,7 @@ ah(async () => { if (config.lna.clightning) { lna = require("clightning-client")(config.lna.dir); } else { - throw new Error("lnd not supported"); + lna = lnd(config.lna); } app.post("/lightning/channel", require("./lightning/channel")); @@ -70,6 +70,13 @@ "@types/node" "^13.9.2" long "^4.0.0" +"@grpc/grpc-js@^1.3.6": + version "1.3.6" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.3.6.tgz#6e2d17610c2c8df0f6ceab0e1968f563df74b173" + integrity sha512-v7+LQFbqZKmd/Tvf5/j1Xlbq6jXL/4d+gUtm2TNX4QiEC3ELWADmGr2dGlUyLl6aKTuYfsN72vAsO5zmavYkEg== + dependencies: + "@types/node" ">=12.12.47" + "@grpc/proto-loader@^0.5.3": version "0.5.6" resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.5.6.tgz#1dea4b8a6412b05e2d58514d507137b63a52a98d" @@ -320,6 +327,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a" integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ== +"@types/node@>=12.12.47": + version "16.4.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.4.10.tgz#e57e2a54fc6da58da94b3571b1cb456d39f88597" + integrity sha512-TmVHsm43br64js9BqHWqiDZA+xMtbUpI1MBIA0EyiBmoV9pcEYFOSdj5fr6enZNfh4fChh+AGOLIzGwJnkshyQ== + "@types/node@^13.9.2": version "13.13.52" resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.52.tgz#03c13be70b9031baaed79481c0c0cfb0045e53f7" @@ -644,7 +656,7 @@ bip174@^2.0.1: resolved "https://registry.yarnpkg.com/bip174/-/bip174-2.0.1.tgz#39cf8ca99e50ce538fb762589832f4481d07c254" integrity sha512-i3X26uKJOkDTAalYAp0Er+qGMDhrbbh2o93/xiPyAN2s25KrClSpe3VXo/7mNJoqA5qfko8rLS2l3RWZgYmjKQ== -"bip174@github:vulpemventures/bip174": +bip174@vulpemventures/bip174.git: version "1.0.3" resolved "https://codeload.github.com/vulpemventures/bip174/tar.gz/b6d0ffe54e0dfa72e971b68372f89b25f7602502" |
