andreashuber69/lightning-node-operator

View on GitHub
src/lightning/connectLnd.ts

Summary

Maintainability
A
0 mins
Test Coverage
// https://github.com/andreashuber69/lightning-node-operator/develop/README.md
import { readFile, writeFile } from "node:fs/promises";
import type { Interface } from "node:readline/promises";
import { createInterface } from "node:readline/promises";
import { authenticatedLndGrpc, getIdentity } from "lightning";

const getContents = async (name: string, readLineInterface: Interface) => {
    try {
        return await readFile(name, { encoding: "utf8" });
    } catch (error: unknown) {
        if (!(error instanceof Error)) {
            throw error;
        }

        const contents = await readLineInterface.question(`${name}: `);
        await writeFile(name, contents, { encoding: "utf8" });
        return contents;
    }
};

const getAuthData = async () => {
    const { stdin: input, stdout: output } = process;
    const readlineInterface = createInterface({ input, output });

    try {
        return {
            socket: `${await getContents("host", readlineInterface)}:10009`,
            cert: await getContents("tls.cert", readlineInterface),
            macaroon: await getContents("admin.macaroon", readlineInterface),
        };
    } finally {
        readlineInterface.close();
    }
};

export const connectLnd = async () => {
    const result = authenticatedLndGrpc(await getAuthData());
    await getIdentity(result);
    return result;
};