stacker.news/lib/lnd.js

58 lines
1.8 KiB
JavaScript

// fork of https://github.com/alexbosworth/lightning/blob/master/lnd_grpc/authenticated_lnd_grpc.js
// that allows to enable or disable proxy
import { join } from 'path'
import apiForProto from 'lightning/lnd_grpc/api_for_proto'
import { defaultSocket, grpcSslCipherSuites, packageTypes, protoFiles, protosDir, serviceTypes } from 'lightning/grpc/index'
import grpcCredentials from 'lightning/lnd_grpc/grpc_credentials'
import { existsSync } from 'fs'
const { GRPC_SSL_CIPHER_SUITES } = process.env
const { keys } = Object
export function authenticatedLndGrpc ({ cert, macaroon, path, socket }, withProxy) {
const lightningModulePath = process.env.LIGHTNING_MODULE_PATH || require.resolve('lightning')
const pathForProto = proto => {
const path = join(lightningModulePath, protosDir, proto)
// check if path exists
if (!existsSync(path)) {
throw new Error(`Proto file not found: ${path}`)
}
return path
}
const { credentials } = grpcCredentials({ cert, macaroon })
const lndSocket = socket || defaultSocket
if (!!cert && GRPC_SSL_CIPHER_SUITES !== grpcSslCipherSuites) {
process.env.GRPC_SSL_CIPHER_SUITES = grpcSslCipherSuites
}
const params = {
'grpc.max_receive_message_length': -1,
'grpc.max_send_message_length': -1,
'grpc.enable_http_proxy': withProxy ? 1 : 0
}
// Assemble different services from their proto files
return {
lnd: keys(serviceTypes).reduce((services, type) => {
const service = serviceTypes[type]
const file = protoFiles[service]
services[type] = apiForProto({
credentials,
params,
service,
path: path ? join(path, file) : pathForProto(file),
socket: lndSocket,
type: packageTypes[service]
})
return services
},
{})
}
}