balanceofsatoshis
Version:
Lightning balance CLI
51 lines (39 loc) • 1.52 kB
JavaScript
const asyncAuto = require('async/auto');
const {returnResult} = require('asyncjs-util');
const {certExpiration} = require('./../encryption');
const {pemAsDer} = require('./../encryption');
const lndCredentials = require('./lnd_credentials');
const base64AsString = base64 => Buffer.from(base64, 'base64').toString();
const bufferAsHex = buffer => buffer.toString('hex');
const msPerDay = 1000 * 60 * 60 * 24;
const {now} = Date;
const {round} = Math;
/** Get the number of days a node's cert is still valid
{
[below]: <Days Above Watermark Number>
[logger]: <Winston Logger Object>
[node]: <Saved Node Name String>
}
@returns via cbk or Promise
{
days: <Days Valid Number>
}
*/
module.exports = ({below, logger, node}, cbk) => {
return new Promise((resolve, reject) => {
return asyncAuto({
// Get the cert
getCredentials: cbk => lndCredentials({logger, node}, cbk),
// Determine the number of days remaining for the cert to be valid
certValidity: ['getCredentials', ({getCredentials}, cbk) => {
const pem = base64AsString(getCredentials.cert);
const cert = bufferAsHex(pemAsDer({pem}).der);
const expiryDate = new Date(certExpiration({cert}).expires_at);
const valid = round((expiryDate - new Date()) / msPerDay);
const days = !below ? valid : (valid < below ? below - valid : 0);
return cbk(null, {days: round(days)});
}],
},
returnResult({reject, resolve, of: 'certValidity'}, cbk));
});
};