lightning
Version:
Lightning Network client library
69 lines (55 loc) • 1.76 kB
JavaScript
const asyncAuto = require('async/auto');
const {returnResult} = require('asyncjs-util');
const {getPublicKey} = require('./../address');
const getWalletInfo = require('./get_wallet_info');
const family = 6;
const index = 0;
/** Lookup the identity key for a node
LND with `walletrpc` build tag and `address:read` permission is suggested
Otherwise, `info:read` permission is required
{
lnd: <Authenticated LND API Object>
}
@returns via cbk or Promise
{
public_key: <Node Identity Public Key Hex String>
}
*/
module.exports = ({lnd}, cbk) => {
return new Promise((resolve, reject) => {
return asyncAuto({
// Check arguments
validate: cbk => {
if (!lnd) {
return cbk([400, 'ExpectedAuthenticatedLndToGetIdentityKey']);
}
return cbk();
},
// Derive identity key
derive: ['validate', ({}, cbk) => {
return getPublicKey({family, index, lnd}, (err, res) => {
// Ignore errors getting the public key through derivation
if (!!err) {
return cbk(null, {});
}
return cbk(null, {public_key: res.public_key});
});
}],
// Get all node info if necessary
getInfo: ['derive', ({derive}, cbk) => {
// Exit early when the public key was already derived
if (!!derive.public_key) {
return cbk();
}
return getWalletInfo({lnd}, cbk);
}],
// The final identity of the backing LND node
identity: ['derive', 'getInfo', ({derive, getInfo}, cbk) => {
return cbk(null, {
public_key: derive.public_key || getInfo.public_key,
});
}],
},
returnResult({reject, resolve, of: 'identity'}, cbk));
});
};