merge move channel change

This commit is contained in:
Alex Bosworth 2022-01-21 21:36:16 -08:00
parent 724dd357d7
commit 788eb14157
No known key found for this signature in database
GPG key ID: E80D2F3F311FD87E
8 changed files with 348 additions and 167 deletions

29
bos
View file

@ -16,7 +16,7 @@ const fiat = importLazy('@alexbosworth/fiat');
const inquirer = importLazy('inquirer');
const lnService = importLazy('ln-service');
const lnSync = importLazy('ln-sync');
const paidServices = importLazy('paid-services')
const paidServices = importLazy('paid-services');
const prog = require('@alexbosworth/caporal');
const commandConstants = require('./commands/constants');
@ -300,14 +300,31 @@ prog
.action((args, options, logger) => {
return new Promise(async (resolve, reject) => {
try {
const authLnd = (await lnd.authenticatedLnd({logger, node: options.node})).lnd
const savedNodes = await lnd.getSavedNodes({lnd: authLnd, logger})
const {lnd} = await lndForNode(logger, options.node);
const saved = await nodes.manageSavedNodes({
logger,
spawn,
ask: (n, cbk) => inquirer.prompt([n]).then(res => cbk(res)),
fs: {
writeFile,
getDirectoryFiles: readdir,
getFile: readFile,
getFileStatus: lstat,
makeDirectory: mkdir,
removeDirectory: rmdir,
removeFile: unlink,
},
is_including_lnd_api: true,
lock_credentials_to: [],
network: (await lnSync.getNetwork({lnd})).network,
});
return paidServices.changeChannelCapacity({
lnd,
logger,
ask: (n, cbk) => inquirer.prompt([n]).then(res => cbk(res)),
lnd: authLnd,
saved_nodes: savedNodes,
nodes: saved.nodes,
},
responses.returnObject({exit, logger, reject, resolve}));
} catch (err) {
@ -963,7 +980,7 @@ prog
.option('--unlock', 'Remove encryption from auth macaroon')
.action((args, options, logger) => {
return new Promise((resolve, reject) => {
return nodes.adjustSavedNodes({
return nodes.manageSavedNodes({
logger,
spawn,
ask: (n, cbk) => inquirer.prompt([n]).then(res => cbk(res)),

View file

@ -1,127 +0,0 @@
const asyncAuto = require('async/auto');
const {returnResult} = require('asyncjs-util');
const {getNetwork} = require('ln-sync');
const {getWalletInfo} = require('ln-service');
const getLnds = require('./get_lnds');
const fs = require('fs');
const {join} = require('path');
const {homedir} = require('os');
const home = '.bos';
const fileName = 'credentials.json';
const path = join(...[homedir(), home]);
const onlineLnds = [];
const savedNodeFolders = [];
module.exports = ({lnd, logger}, cbk) => {
return new Promise((resolve, reject) => {
return asyncAuto({
//Check arguments
validate: cbk => {
if(!lnd) {
return cbk([400, 'ExpectedLndForGettingSavedNodes']);
}
if(!logger) {
return cbk([400, 'ExpectedLoggerForGettingSavedNodes']);
}
return cbk();
},
//Get network of current lnd object
getCurrentNetwork: ['validate', ({}, cbk) => {
return getNetwork({lnd}, cbk);
}],
//Get public key of current lnd object
getPublicKey: ['validate', ({}, cbk) => {
return getWalletInfo({lnd}, cbk);
}],
//Get list of saved node folders
getSavedNodeFolders: ['validate', async ({}) => {
//Read all files in .bos dir and check if its a directory
try {
const directories = (path) => {
return fs.readdirSync(path).filter(function (file) {
return fs.statSync(path+'/'+file).isDirectory();
});
}
const getDirectories = directories(path);
//check if credentials.json file exists in each folder to know if its a saved node
getDirectories.forEach(directory => {
const filePath = join(...[homedir(), home, directory, fileName]);
if(fs.existsSync(filePath)) {
savedNodeFolders.push(directory);
}
});
return {nodes: savedNodeFolders};
} catch (err) {
logger.error({error: err});
}
}],
//Get lnd objects for each saved node
getLnds: ['getSavedNodeFolders', async ({getSavedNodeFolders}) => {
if(!getSavedNodeFolders || !getSavedNodeFolders.nodes || !getSavedNodeFolders.nodes.length) {
return;
}
try {
const {nodes} = getSavedNodeFolders;
const lnds = await getLnds({logger, nodes});
return lnds;
} catch (err) {
logger.error({error: err});
}
}],
//Get the lnds that are online
getOnlineLnds: [
'getLnds',
'getCurrentNetwork',
'getPublicKey',
async ({getLnds, getCurrentNetwork, getPublicKey}) => {
if(!getLnds || !getLnds.lnds || !getLnds.lnds.length) {
return;
}
const {lnds} = getLnds;
//Match the network of current lnd object with list of objects
for(let i=0; i< lnds.length; i++) {
try {
const {network} = await getNetwork({lnd: lnds[i]});
if(getCurrentNetwork.network === network) {
const {alias, public_key} = await getWalletInfo({lnd: lnds[i]});
//remove the current lnd object from the list of objects
if(public_key !== getPublicKey.public_key) {
onlineLnds.push({alias: alias, public_key: public_key, lnd: lnds[i]});
}
}
} catch(err) {
}
}
return onlineLnds;
}],
},
returnResult({reject, resolve, of: 'getOnlineLnds'}, cbk));
})
}

View file

@ -4,7 +4,6 @@ const gateway = require('./gateway');
const getCertValidityDays = require('./get_cert_validity_days');
const getCredentials = require('./get_credentials');
const getLnds = require('./get_lnds');
const getSavedNodes = require('./get_saved_nodes');
const lndCredentials = require('./lnd_credentials');
module.exports = {
@ -14,6 +13,5 @@ module.exports = {
getCertValidityDays,
getCredentials,
getLnds,
getSavedNodes,
lndCredentials,
};

View file

@ -5,6 +5,7 @@ const asyncAuto = require('async/auto');
const asyncFilter = require('async/filter');
const asyncMap = require('async/map');
const {authenticatedLndGrpc} = require('ln-service');
const {getNetwork} = require('ln-sync');
const {getWalletInfo} = require('ln-service');
const {returnResult} = require('asyncjs-util');
@ -19,17 +20,20 @@ const {home} = require('./constants');
getFile: <Read File Contents Function> (path, cbk) => {}
getFileStatus: <File Status Function> (path, cbk) => {}
}
[network]: <Required Network Name String>
}
@returns via cbk or Promise
{
nodes: [{
[is_online]: <Node is Online Bool>
lnd: <Authenticated LND API Object>
node_name: <Node Name String>
public_key: <Node Identity Public Key Hex String>
}]
}
*/
module.exports = ({fs}, cbk) => {
module.exports = ({fs, network}, cbk) => {
return new Promise((resolve, reject) => {
return asyncAuto({
// Check arguments
@ -121,16 +125,39 @@ module.exports = ({fs}, cbk) => {
}
return cbk(null, {
node_name: node,
lnd,
is_online: res.is_synced_to_chain,
node_name: node,
public_key: res.public_key,
});
});
},
cbk);
}],
// Filter out nodes not on the specified network
filter: ['getNodes', ({getNodes}, cbk) => {
// Exit early when no network is specified
if (!network) {
return cbk(null, getNodes);
}
const nodes = getNodes.filter(n => !!n.is_online);
return asyncFilter(nodes, ({lnd}, cbk) => {
return getNetwork({lnd}, (err, res) => {
if (!!err) {
return cbk(err);
}
return cbk(null, res.network === network);
});
},
cbk);
}],
// Final list of nodes
nodes: ['getNodes', ({getNodes}, cbk) => cbk(null, {nodes: getNodes})],
nodes: ['filter', ({filter}, cbk) => cbk(null, {nodes: filter})],
},
returnResult({reject, resolve, of: 'nodes'}, cbk));
});

View file

@ -1,11 +1,11 @@
const adjustSavedNodes = require('./adjust_saved_nodes');
const adjustTags = require('./adjust_tags');
const getSavedCredentials = require('./get_saved_credentials');
const getSavedNodes = require('./get_saved_nodes');
const manageSavedNodes = require('./manage_saved_nodes');
module.exports = {
adjustSavedNodes,
adjustTags,
getSavedCredentials,
getSavedNodes,
manageSavedNodes,
};

View file

@ -29,11 +29,13 @@ const {isArray} = Array;
removeFile: <Remove File Function> (path, cbk) => {}
writeFile: <Write File Contents Function> (path, contents, cbk) => {}
}
[is_including_lnd_api]: <Include Node LND API Object Bool>
[is_registering]: <Add Node Credentials Bool>
[is_removing]: <Remove Node Credentials Bool>
[is_unlocking]: <Change Credentials To Decrypted Copy Bool>
lock_credentials_to: [<Encrypt Macaroon to GPG Key With Id String>]
logger: <Winston Logger Object>
[network]: <Return Nodes On Specified Network String>
[node]: <Node Name String>
spawn: <Spawn Function>
}
@ -42,8 +44,9 @@ const {isArray} = Array;
{
nodes: [{
[is_online]: <Node is Online Bool>
[encrypted_to]: [<Encrypted To GPG Id String>]
[lnd]: <Authenticated LND API Object>
node_name: <Node Name String>
public_key: <Node Identity Public Key Hex String>
}]
}
*/
@ -149,7 +152,9 @@ module.exports = (args, cbk) => {
}],
// Get existing set of nodes
getNodes: ['remove', ({}, cbk) => getSavedNodes({fs: args.fs}, cbk)],
getNodes: ['remove', ({}, cbk) => {
return getSavedNodes({fs: args.fs, network: args.network}, cbk);
}],
// Encrypt macaroons
lock: ['getNodes', ({getNodes}, cbk) => {
@ -189,10 +194,26 @@ module.exports = (args, cbk) => {
}],
// Get saved nodes
getSaved: ['lock', 'unlock', ({}, cbk) => {
return getSavedNodes({fs: args.fs}, cbk);
getSaved: ['getNodes', 'lock', 'unlock', ({getNodes}, cbk) => {
if (!args.is_registering && !args.is_removing && !args.is_unlocking) {
return cbk(null, getNodes);
}
return getSavedNodes({fs: args.fs, network: args.network}, cbk);
}],
// Final set of saved nodes
nodes: ['getSaved', ({getSaved}, cbk) => {
const nodes = getSaved.nodes.map(node => ({
is_online: node.is_online,
lnd: !!args.is_including_lnd_api ? node.lnd : undefined,
node_name: node.node_name,
public_key: node.public_key,
}));
return cbk(null, {nodes});
}],
},
returnResult({reject, resolve, of: 'getSaved'}, cbk));
returnResult({reject, resolve, of: 'nodes'}, cbk));
});
};

287
package-lock.json generated
View file

@ -38,7 +38,7 @@
"ln-sync": "3.7.0",
"ln-telegram": "3.8.0",
"moment": "2.29.1",
"paid-services": "3.10.0",
"paid-services": "3.11.0",
"probing": "2.0.2",
"psbt": "1.1.10",
"qrcode-terminal": "0.12.0",
@ -3646,9 +3646,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001300",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001300.tgz",
"integrity": "sha512-cVjiJHWGcNlJi8TZVKNMnvMid3Z3TTdDHmLDzlOdIiZq138Exvo0G+G0wTdVYolxKb4AYwC+38pxodiInVtJSA==",
"version": "1.0.30001301",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz",
"integrity": "sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA==",
"dev": true,
"funding": {
"type": "opencollective",
@ -4278,9 +4278,9 @@
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"node_modules/electron-to-chromium": {
"version": "1.4.49",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.49.tgz",
"integrity": "sha512-k/0t1TRfonHIp8TJKfjBu2cKj8MqYTiEpOhci+q7CVEE5xnCQnx1pTa+V8b/sdhe4S3PR4p4iceEQWhGrKQORQ==",
"version": "1.4.51",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.51.tgz",
"integrity": "sha512-JNEmcYl3mk1tGQmy0EvL5eik/CKSBuzAyGP0QFdG6LIgxQe3II0BL1m2zKc2MZMf3uGqHWE1TFddJML0RpjSHQ==",
"dev": true
},
"node_modules/elliptic": {
@ -7020,6 +7020,23 @@
"node": ">=12.20"
}
},
"node_modules/ln-telegram/node_modules/paid-services": {
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/paid-services/-/paid-services-3.10.0.tgz",
"integrity": "sha512-Uxq9yk+SFG9bVDDgVce5kQ0OXuTZ/jqk4V27rqPX6EnEMIQOHmf/zNRpsGBowUDUBOdstGYdyZQ4avp7w2Q92w==",
"dependencies": {
"async": "3.2.3",
"asyncjs-util": "1.2.8",
"bolt01": "1.2.3",
"bolt07": "1.8.0",
"invoices": "2.0.3",
"ln-service": "53.5.0",
"ln-sync": "3.7.0"
},
"engines": {
"node": ">=12.20"
}
},
"node_modules/locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
@ -7905,22 +7922,142 @@
}
},
"node_modules/paid-services": {
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/paid-services/-/paid-services-3.10.0.tgz",
"integrity": "sha512-Uxq9yk+SFG9bVDDgVce5kQ0OXuTZ/jqk4V27rqPX6EnEMIQOHmf/zNRpsGBowUDUBOdstGYdyZQ4avp7w2Q92w==",
"version": "3.11.0",
"resolved": "https://registry.npmjs.org/paid-services/-/paid-services-3.11.0.tgz",
"integrity": "sha512-G0Enb7xcOpZlOmoK7h7Anym0nFG+t7JPMoTie5HoeUfwfm/mtNfUXyJvtom930Dg9l/g/rVk5CbivwzSS8ccUw==",
"dependencies": {
"async": "3.2.3",
"asyncjs-util": "1.2.8",
"bolt01": "1.2.3",
"bolt07": "1.8.0",
"invoices": "2.0.3",
"ln-service": "53.5.0",
"ln-service": "53.5.1",
"ln-sync": "3.7.0"
},
"engines": {
"node": ">=12.20"
}
},
"node_modules/paid-services/node_modules/@grpc/grpc-js": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.5.3.tgz",
"integrity": "sha512-q0xgaZ3ymUM+ZOhe1hdocVSdKHCnJ6llLSXcP+MqMXMyYPUZ3mzQOCxZ3Zkg+QZ7sZ950sn7hvueQrIJZumPZg==",
"dependencies": {
"@grpc/proto-loader": "^0.6.4",
"@types/node": ">=12.12.47"
},
"engines": {
"node": "^8.13.0 || >=10.10.0"
}
},
"node_modules/paid-services/node_modules/@grpc/proto-loader": {
"version": "0.6.9",
"resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz",
"integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==",
"dependencies": {
"@types/long": "^4.0.1",
"lodash.camelcase": "^4.3.0",
"long": "^4.0.0",
"protobufjs": "^6.10.0",
"yargs": "^16.2.0"
},
"bin": {
"proto-loader-gen-types": "build/bin/proto-loader-gen-types.js"
},
"engines": {
"node": ">=6"
}
},
"node_modules/paid-services/node_modules/lightning": {
"version": "5.3.4",
"resolved": "https://registry.npmjs.org/lightning/-/lightning-5.3.4.tgz",
"integrity": "sha512-zUHlFFSS+KJhndoZkjkXPWpvlXAgYGWS2SxzXpiiwnXZKCNmT+IkQFQmp2oIpbF7K93oqlpxgafZMZDeReX5pQ==",
"dependencies": {
"@grpc/grpc-js": "1.5.3",
"@grpc/proto-loader": "0.6.9",
"@types/express": "4.17.13",
"@types/node": "17.0.10",
"@types/request": "2.48.8",
"@types/ws": "8.2.2",
"async": "3.2.3",
"asyncjs-util": "1.2.8",
"bitcoinjs-lib": "6.0.1",
"bn.js": "5.2.0",
"body-parser": "1.19.1",
"bolt07": "1.8.0",
"bolt09": "0.2.1",
"cbor": "8.1.0",
"express": "4.17.2",
"invoices": "2.0.3",
"psbt": "1.1.10",
"type-fest": "2.10.0"
},
"engines": {
"node": ">=12.20"
}
},
"node_modules/paid-services/node_modules/ln-service": {
"version": "53.5.1",
"resolved": "https://registry.npmjs.org/ln-service/-/ln-service-53.5.1.tgz",
"integrity": "sha512-EXLhYeu1qvhk+yzuH6qBZyGvqBPWT71FnmsbOxKjWofW6SGQBbJuNru6Ub2NIMhJnXqD7qvMvswZ54ho/oPvGQ==",
"dependencies": {
"bolt07": "1.8.0",
"cors": "2.8.5",
"express": "4.17.2",
"invoices": "2.0.3",
"lightning": "5.3.4",
"macaroon": "3.0.4",
"morgan": "1.10.0",
"ws": "8.4.2"
},
"engines": {
"node": ">=12.20"
}
},
"node_modules/paid-services/node_modules/type-fest": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.10.0.tgz",
"integrity": "sha512-u2yreDMllFI3VCpWt0rKrGs/E2LO0YHBwiiOIj+ilQh9+ALMaa4lNBSdoDvuHN3cbKcYk9L1BXP49x9RT+o/SA==",
"engines": {
"node": ">=12.20"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/paid-services/node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"engines": {
"node": ">=10"
}
},
"node_modules/paid-services/node_modules/yargs": {
"version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"dependencies": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
"string-width": "^4.2.0",
"y18n": "^5.0.5",
"yargs-parser": "^20.2.2"
},
"engines": {
"node": ">=10"
}
},
"node_modules/paid-services/node_modules/yargs-parser": {
"version": "20.2.9",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
"integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
"engines": {
"node": ">=10"
}
},
"node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@ -12599,9 +12736,9 @@
"dev": true
},
"caniuse-lite": {
"version": "1.0.30001300",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001300.tgz",
"integrity": "sha512-cVjiJHWGcNlJi8TZVKNMnvMid3Z3TTdDHmLDzlOdIiZq138Exvo0G+G0wTdVYolxKb4AYwC+38pxodiInVtJSA==",
"version": "1.0.30001301",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz",
"integrity": "sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA==",
"dev": true
},
"cbor": {
@ -13102,9 +13239,9 @@
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"electron-to-chromium": {
"version": "1.4.49",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.49.tgz",
"integrity": "sha512-k/0t1TRfonHIp8TJKfjBu2cKj8MqYTiEpOhci+q7CVEE5xnCQnx1pTa+V8b/sdhe4S3PR4p4iceEQWhGrKQORQ==",
"version": "1.4.51",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.51.tgz",
"integrity": "sha512-JNEmcYl3mk1tGQmy0EvL5eik/CKSBuzAyGP0QFdG6LIgxQe3II0BL1m2zKc2MZMf3uGqHWE1TFddJML0RpjSHQ==",
"dev": true
},
"elliptic": {
@ -15254,6 +15391,22 @@
"luxon": "2.3.0",
"paid-services": "3.10.0",
"table": "6.8.0"
},
"dependencies": {
"paid-services": {
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/paid-services/-/paid-services-3.10.0.tgz",
"integrity": "sha512-Uxq9yk+SFG9bVDDgVce5kQ0OXuTZ/jqk4V27rqPX6EnEMIQOHmf/zNRpsGBowUDUBOdstGYdyZQ4avp7w2Q92w==",
"requires": {
"async": "3.2.3",
"asyncjs-util": "1.2.8",
"bolt01": "1.2.3",
"bolt07": "1.8.0",
"invoices": "2.0.3",
"ln-service": "53.5.0",
"ln-sync": "3.7.0"
}
}
}
},
"locate-path": {
@ -15931,17 +16084,109 @@
}
},
"paid-services": {
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/paid-services/-/paid-services-3.10.0.tgz",
"integrity": "sha512-Uxq9yk+SFG9bVDDgVce5kQ0OXuTZ/jqk4V27rqPX6EnEMIQOHmf/zNRpsGBowUDUBOdstGYdyZQ4avp7w2Q92w==",
"version": "3.11.0",
"resolved": "https://registry.npmjs.org/paid-services/-/paid-services-3.11.0.tgz",
"integrity": "sha512-G0Enb7xcOpZlOmoK7h7Anym0nFG+t7JPMoTie5HoeUfwfm/mtNfUXyJvtom930Dg9l/g/rVk5CbivwzSS8ccUw==",
"requires": {
"async": "3.2.3",
"asyncjs-util": "1.2.8",
"bolt01": "1.2.3",
"bolt07": "1.8.0",
"invoices": "2.0.3",
"ln-service": "53.5.0",
"ln-service": "53.5.1",
"ln-sync": "3.7.0"
},
"dependencies": {
"@grpc/grpc-js": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.5.3.tgz",
"integrity": "sha512-q0xgaZ3ymUM+ZOhe1hdocVSdKHCnJ6llLSXcP+MqMXMyYPUZ3mzQOCxZ3Zkg+QZ7sZ950sn7hvueQrIJZumPZg==",
"requires": {
"@grpc/proto-loader": "^0.6.4",
"@types/node": ">=12.12.47"
}
},
"@grpc/proto-loader": {
"version": "0.6.9",
"resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz",
"integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==",
"requires": {
"@types/long": "^4.0.1",
"lodash.camelcase": "^4.3.0",
"long": "^4.0.0",
"protobufjs": "^6.10.0",
"yargs": "^16.2.0"
}
},
"lightning": {
"version": "5.3.4",
"resolved": "https://registry.npmjs.org/lightning/-/lightning-5.3.4.tgz",
"integrity": "sha512-zUHlFFSS+KJhndoZkjkXPWpvlXAgYGWS2SxzXpiiwnXZKCNmT+IkQFQmp2oIpbF7K93oqlpxgafZMZDeReX5pQ==",
"requires": {
"@grpc/grpc-js": "1.5.3",
"@grpc/proto-loader": "0.6.9",
"@types/express": "4.17.13",
"@types/node": "17.0.10",
"@types/request": "2.48.8",
"@types/ws": "8.2.2",
"async": "3.2.3",
"asyncjs-util": "1.2.8",
"bitcoinjs-lib": "6.0.1",
"bn.js": "5.2.0",
"body-parser": "1.19.1",
"bolt07": "1.8.0",
"bolt09": "0.2.1",
"cbor": "8.1.0",
"express": "4.17.2",
"invoices": "2.0.3",
"psbt": "1.1.10",
"type-fest": "2.10.0"
}
},
"ln-service": {
"version": "53.5.1",
"resolved": "https://registry.npmjs.org/ln-service/-/ln-service-53.5.1.tgz",
"integrity": "sha512-EXLhYeu1qvhk+yzuH6qBZyGvqBPWT71FnmsbOxKjWofW6SGQBbJuNru6Ub2NIMhJnXqD7qvMvswZ54ho/oPvGQ==",
"requires": {
"bolt07": "1.8.0",
"cors": "2.8.5",
"express": "4.17.2",
"invoices": "2.0.3",
"lightning": "5.3.4",
"macaroon": "3.0.4",
"morgan": "1.10.0",
"ws": "8.4.2"
}
},
"type-fest": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.10.0.tgz",
"integrity": "sha512-u2yreDMllFI3VCpWt0rKrGs/E2LO0YHBwiiOIj+ilQh9+ALMaa4lNBSdoDvuHN3cbKcYk9L1BXP49x9RT+o/SA=="
},
"y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
},
"yargs": {
"version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"requires": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
"string-width": "^4.2.0",
"y18n": "^5.0.5",
"yargs-parser": "^20.2.2"
}
},
"yargs-parser": {
"version": "20.2.9",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
"integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
}
}
},
"parseurl": {

View file

@ -39,7 +39,7 @@
"ln-sync": "3.7.0",
"ln-telegram": "3.8.0",
"moment": "2.29.1",
"paid-services": "3.10.0",
"paid-services": "3.11.0",
"probing": "2.0.2",
"psbt": "1.1.10",
"qrcode-terminal": "0.12.0",