docs/grpc/javascript: updated docs to include macaroon and cipher suites
This commit is contained in:
1 parent
21b6c62bf9
commit
3c73329912
1 file changed
+66
@@ -20,6 +20,7 @@ sources](https://github.com/lightningnetwork/lnd/blob/master/lnrpc/rpc.proto).
|
|||||||
|
|
||||||
In order for the auto-generated code to compile successfully, you'll need to
|
In order for the auto-generated code to compile successfully, you'll need to
|
||||||
comment out the following line:
|
comment out the following line:
|
||||||
|
|
||||||
```
|
```
|
||||||
//import "google/api/annotations.proto";
|
//import "google/api/annotations.proto";
|
||||||
```
|
```
|
||||||
@@ -33,6 +34,11 @@ Every time you work with Javascript gRPC, you will have to import `grpc`, load
|
|||||||
var grpc = require('grpc');
|
var grpc = require('grpc');
|
||||||
var fs = require("fs");
|
var fs = require("fs");
|
||||||
|
|
||||||
|
// Due to updated ECDSA generated tls.cert we need to let gprc know that
|
||||||
|
// we need to use that cipher suite otherwise there will be a handhsake
|
||||||
|
// error when we communicate with the lnd rpc server.
|
||||||
|
process.env.GRPC_SSL_CIPHER_SUITES = 'HIGH+ECDSA'
|
||||||
|
|
||||||
// Lnd cert is at ~/.lnd/tls.cert on Linux and
|
// Lnd cert is at ~/.lnd/tls.cert on Linux and
|
||||||
// ~/Library/Application Support/Lnd/tls.cert on Mac
|
// ~/Library/Application Support/Lnd/tls.cert on Mac
|
||||||
var lndCert = fs.readFileSync("~/.lnd/tls.cert");
|
var lndCert = fs.readFileSync("~/.lnd/tls.cert");
|
||||||
@@ -157,6 +163,66 @@ async.series(payment_senders, function() {
|
|||||||
```
|
```
|
||||||
This example will send a payment of 100 satoshis every 2 seconds.
|
This example will send a payment of 100 satoshis every 2 seconds.
|
||||||
|
|
||||||
|
|
||||||
|
#### Using Macaroons
|
||||||
|
|
||||||
|
To authenticate using macaroons you need to include the macaroon in the metadata of the request.
|
||||||
|
|
||||||
|
```js
|
||||||
|
var fs = require('fs');
|
||||||
|
var grpc = require('grpc');
|
||||||
|
|
||||||
|
process.env.GRPC_SSL_CIPHER_SUITES = 'HIGH+ECDSA'
|
||||||
|
|
||||||
|
// Lnd admin macaroon is at ~/.lnd/admin.macaroon on Linux and
|
||||||
|
// ~/Library/Application Support/Lnd/admin.macaroon on Mac
|
||||||
|
var m = fs.readFileSync('~/.lnd/admin.macaroon');
|
||||||
|
var macaroon = m.toString('hex');
|
||||||
|
var meta = new grpc.Metadata().add('macaroon', macaroon);
|
||||||
|
|
||||||
|
var lnrpcDescriptor = grpc.load("rpc.proto");
|
||||||
|
var lnrpc = lnrpcDescriptor.lnrpc;
|
||||||
|
var client = new lnrpc.Lightning('some.address:10009', grpc.credentials.createInsecure());
|
||||||
|
|
||||||
|
client.getInfo({}, meta);
|
||||||
|
```
|
||||||
|
|
||||||
|
However, this can get tiresome to do for each request, so to avoid explicitly including the macaroon we can update the credentials to include it automatically.
|
||||||
|
|
||||||
|
```js
|
||||||
|
var fs = require('fs');
|
||||||
|
var grpc = require('grpc');
|
||||||
|
|
||||||
|
process.env.GRPC_SSL_CIPHER_SUITES = 'HIGH+ECDSA'
|
||||||
|
|
||||||
|
// Lnd admin macaroon is at ~/.lnd/admin.macaroon on Linux and
|
||||||
|
// ~/Library/Application Support/Lnd/admin.macaroon on Mac
|
||||||
|
var m = fs.readFileSync('~/.lnd/admin.macaroon');
|
||||||
|
var macaroon = m.toString('hex');
|
||||||
|
|
||||||
|
// build meta data credentials
|
||||||
|
var metadata = new grpc.Metadata().add('macaroon', macaroon)
|
||||||
|
var macaroonCreds = grpc.credentials.createFromMetadataGenerator((_args, callback) => {
|
||||||
|
callback(null, metadata);
|
||||||
|
});
|
||||||
|
|
||||||
|
// build ssl credentials using the cert the same as before
|
||||||
|
var lndCert = fs.readFileSync("~/.lnd/tls.cert");
|
||||||
|
var sslCreds = grpc.credentials.createSsl(lndCert);
|
||||||
|
|
||||||
|
// combine the cert credentials and the macaroon auth credentials
|
||||||
|
// such that every call is properly encrypted and authenticated
|
||||||
|
var credentials = grpc.credentials.combineChannelCredentials(sslCreds, macaroonCreds);
|
||||||
|
|
||||||
|
// Pass the crendentials when creating a channel
|
||||||
|
var lnrpcDescriptor = grpc.load("rpc.proto");
|
||||||
|
var lnrpc = lnrpcDescriptor.lnrpc;
|
||||||
|
var client = new lnrpc.Lightning('some.address:10009', credentials);
|
||||||
|
|
||||||
|
client.getInfo({}, (err, res) => { ... });
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
### Conclusion
|
### Conclusion
|
||||||
|
|
||||||
With the above, you should have all the `lnd` related `gRPC` dependencies
|
With the above, you should have all the `lnd` related `gRPC` dependencies
|
||||||
|
|||||||
Reference in new issue
Block a user