add json output option

This commit is contained in:
Alex Bosworth 2023-05-16 13:39:41 -07:00
parent c859f77e39
commit d66452a184
No known key found for this signature in database
GPG key ID: E80D2F3F311FD87E
7 changed files with 120 additions and 33 deletions

View file

@ -1,5 +1,9 @@
# Versions
## 15.8.0
- `call`: Add `--json` option to write the raw JSON to the console
## 15.7.2
- `telegram`: Ignore re-received chain txs where only the locktime is changed

5
bos
View file

@ -231,11 +231,14 @@ prog
.command('call', 'Make a raw API call and to get a raw API response')
.help('If you do not specify a method it will list the supported methods')
.argument('[method]', 'Method to call')
.option('--json', 'Output raw JSON as the output')
.option('--node <node_name>', 'Saved node to use for call')
.option('--param <param>', 'query encoded name=value', REPEATABLE)
.action((args, options, logger) => {
return new Promise(async (resolve, reject) => {
try {
const r = options.json ? responses.returnJson : responses.returnObject;
return commands.callRawApi({
logger,
ask: await commands.interrogate({}),
@ -243,7 +246,7 @@ prog
method: args.method,
params: flatten([options.param].filter(n => !!n)),
},
responses.returnObject({logger, reject, resolve}));
r({logger, reject, resolve}));
} catch (err) {
return logger.error({err}) && reject();
}

56
package-lock.json generated
View file

@ -1,15 +1,15 @@
{
"name": "balanceofsatoshis",
"version": "15.7.2",
"version": "15.8.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "balanceofsatoshis",
"version": "15.7.2",
"version": "15.8.0",
"license": "MIT",
"dependencies": {
"@alexbosworth/blockchain": "1.1.0",
"@alexbosworth/blockchain": "1.2.0",
"@alexbosworth/caporal": "1.4.4",
"@alexbosworth/fiat": "1.0.4",
"@alexbosworth/html2unicode": "1.1.5",
@ -33,7 +33,7 @@
"grammy": "1.16.0",
"hot-formula-parser": "4.0.0",
"import-lazy": "4.0.0",
"ini": "4.1.0",
"ini": "4.1.1",
"inquirer": "9.2.3",
"ln-accounting": "7.0.1",
"ln-service": "56.3.1",
@ -65,9 +65,9 @@
}
},
"node_modules/@alexbosworth/blockchain": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@alexbosworth/blockchain/-/blockchain-1.1.0.tgz",
"integrity": "sha512-EIAbKQLdQAlqgz5F2NWlSY8tK16p3NU5jkFNLHrMGCko97PPz+u8PU41yHLSo5PcLTVzZvllnKZKI0DWSppnyw==",
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@alexbosworth/blockchain/-/blockchain-1.2.0.tgz",
"integrity": "sha512-vsrRjOKuP9yO6T+LgqYkoz+ewglhJ5uLDe1W4x2VnZE6EFHVofVMzb5OHCvgIi7qpXl2Yml0Wwa8z+nHw0YOWQ==",
"engines": {
"node": ">=16"
}
@ -2936,9 +2936,9 @@
"integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="
},
"node_modules/@types/node": {
"version": "20.1.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.1.4.tgz",
"integrity": "sha512-At4pvmIOki8yuwLtd7BNHl3CiWNbtclUbNtScGx4OHfBd4/oWoJC8KRCIxXwkdndzhxOsPXihrsOoydxBjlE9Q=="
"version": "20.1.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.1.7.tgz",
"integrity": "sha512-WCuw/o4GSwDGMoonES8rcvwsig77dGCMbZDrZr2x4ZZiNW4P/gcoZXe/0twgtobcTkmg9TuKflxYL/DuwDyJzg=="
},
"node_modules/@types/qs": {
"version": "6.9.7",
@ -4251,9 +4251,9 @@
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
"node_modules/electron-to-chromium": {
"version": "1.4.394",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.394.tgz",
"integrity": "sha512-0IbC2cfr8w5LxTz+nmn2cJTGafsK9iauV2r5A5scfzyovqLrxuLoxOHE5OBobP3oVIggJT+0JfKnw9sm87c8Hw==",
"version": "1.4.397",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.397.tgz",
"integrity": "sha512-jwnPxhh350Q/aMatQia31KAIQdhEsYS0fFZ0BQQlN9tfvOEwShu6ZNwI4kL/xBabjcB/nTy6lSt17kNIluJZ8Q==",
"dev": true
},
"node_modules/elliptic": {
@ -5256,9 +5256,9 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"node_modules/ini": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ini/-/ini-4.1.0.tgz",
"integrity": "sha512-HLR38RSF2iulAzc3I/sma4CoYxQP844rPYCNfzGDOHqa/YqVlwuuZgBx6M50/X8dKgzk0cm1qRg3+47mK2N+cQ==",
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz",
"integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==",
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
@ -9481,9 +9481,9 @@
},
"dependencies": {
"@alexbosworth/blockchain": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@alexbosworth/blockchain/-/blockchain-1.1.0.tgz",
"integrity": "sha512-EIAbKQLdQAlqgz5F2NWlSY8tK16p3NU5jkFNLHrMGCko97PPz+u8PU41yHLSo5PcLTVzZvllnKZKI0DWSppnyw=="
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@alexbosworth/blockchain/-/blockchain-1.2.0.tgz",
"integrity": "sha512-vsrRjOKuP9yO6T+LgqYkoz+ewglhJ5uLDe1W4x2VnZE6EFHVofVMzb5OHCvgIi7qpXl2Yml0Wwa8z+nHw0YOWQ=="
},
"@alexbosworth/caporal": {
"version": "1.4.4",
@ -11499,9 +11499,9 @@
"integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="
},
"@types/node": {
"version": "20.1.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.1.4.tgz",
"integrity": "sha512-At4pvmIOki8yuwLtd7BNHl3CiWNbtclUbNtScGx4OHfBd4/oWoJC8KRCIxXwkdndzhxOsPXihrsOoydxBjlE9Q=="
"version": "20.1.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.1.7.tgz",
"integrity": "sha512-WCuw/o4GSwDGMoonES8rcvwsig77dGCMbZDrZr2x4ZZiNW4P/gcoZXe/0twgtobcTkmg9TuKflxYL/DuwDyJzg=="
},
"@types/qs": {
"version": "6.9.7",
@ -12537,9 +12537,9 @@
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
"electron-to-chromium": {
"version": "1.4.394",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.394.tgz",
"integrity": "sha512-0IbC2cfr8w5LxTz+nmn2cJTGafsK9iauV2r5A5scfzyovqLrxuLoxOHE5OBobP3oVIggJT+0JfKnw9sm87c8Hw==",
"version": "1.4.397",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.397.tgz",
"integrity": "sha512-jwnPxhh350Q/aMatQia31KAIQdhEsYS0fFZ0BQQlN9tfvOEwShu6ZNwI4kL/xBabjcB/nTy6lSt17kNIluJZ8Q==",
"dev": true
},
"elliptic": {
@ -13319,9 +13319,9 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"ini": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ini/-/ini-4.1.0.tgz",
"integrity": "sha512-HLR38RSF2iulAzc3I/sma4CoYxQP844rPYCNfzGDOHqa/YqVlwuuZgBx6M50/X8dKgzk0cm1qRg3+47mK2N+cQ=="
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz",
"integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g=="
},
"inquirer": {
"version": "9.2.3",

View file

@ -10,7 +10,7 @@
"url": "https://github.com/alexbosworth/balanceofsatoshis/issues"
},
"dependencies": {
"@alexbosworth/blockchain": "1.1.0",
"@alexbosworth/blockchain": "1.2.0",
"@alexbosworth/caporal": "1.4.4",
"@alexbosworth/fiat": "1.0.4",
"@alexbosworth/html2unicode": "1.1.5",
@ -34,7 +34,7 @@
"grammy": "1.16.0",
"hot-formula-parser": "4.0.0",
"import-lazy": "4.0.0",
"ini": "4.1.0",
"ini": "4.1.1",
"inquirer": "9.2.3",
"ln-accounting": "7.0.1",
"ln-service": "56.3.1",
@ -84,5 +84,5 @@
"postpublish": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t alexbosworth/balanceofsatoshis -t alexbosworth/balanceofsatoshis:$npm_package_version --push .",
"test": "tap --branches=1 --functions=1 --lines=1 --statements=1 -t 60 test/arrays/*.js test/balances/*.js test/chain/*.js test/display/*.js test/encryption/*.js test/lnd/*.js test/network/*.js test/nodes/*.js test/peers/*.js test/responses/*.js test/routing/*.js test/services/*.js test/swaps/*.js test/tags/*.js test/telegram/*.js test/wallets/*.js"
},
"version": "15.7.2"
"version": "15.8.0"
}

View file

@ -1,6 +1,13 @@
const returnChart = require('./return_chart');
const returnJson = require('./return_json');
const returnNumber = require('./return_number');
const returnObject = require('./return_object');
const returnOutput = require('./return_output');
module.exports = {returnChart, returnNumber, returnObject, returnOutput};
module.exports = {
returnChart,
returnJson,
returnNumber,
returnObject,
returnOutput,
};

30
responses/return_json.js Normal file
View file

@ -0,0 +1,30 @@
const {stringify} = JSON;
const spacer = ' ';
/** Return an output result to a logger in a promise
{
logger: {
error: <Log Error Function>
info: <Log Info Function>
}
reject: <Reject Function>
resolve: <Resolve Function>
}
@returns
<Standard Callback Function> (err, res) => {}
*/
module.exports = ({logger, reject, resolve}) => {
return (err, res) => {
if (!!err) {
logger.error(err);
return reject();
}
logger.info(stringify(res, null, spacer));
return resolve();
};
};

View file

@ -0,0 +1,43 @@
const {test} = require('@alexbosworth/tap');
const {returnJson} = require('./../../responses');
const tests = [
{
description: 'Error returns an error',
error: 'error',
},
{
args: [],
description: 'Output returns output',
expected: '[]',
},
];
tests.forEach(({args, description, error, expected}) => {
return test(description, ({end, equal, throws}) => {
if (!!error) {
let err;
return returnJson({
logger: {error: n => err = n},
reject: () => {
equal(err, error, 'Error as expected');
return end();
},
})(error);
}
let output;
return returnJson({
logger: {info: n => output = n},
resolve: () => {
equal(output, expected, 'Got expected output');
return end();
},
})(null, args);
});
});