58 lines
1.8 KiB
JavaScript
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
|
|
},
|
|
{})
|
|
}
|
|
}
|