diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c20a18..50c17e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/bos b/bos index c215d9a..6982112 100755 --- a/bos +++ b/bos @@ -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 ', 'Saved node to use for call') .option('--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(); } diff --git a/package-lock.json b/package-lock.json index 82d1b09..eae5d7a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", diff --git a/package.json b/package.json index 8f8b4f2..d908bac 100644 --- a/package.json +++ b/package.json @@ -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" } diff --git a/responses/index.js b/responses/index.js index 804eca2..0c32a6d 100644 --- a/responses/index.js +++ b/responses/index.js @@ -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, +}; diff --git a/responses/return_json.js b/responses/return_json.js new file mode 100644 index 0000000..2022982 --- /dev/null +++ b/responses/return_json.js @@ -0,0 +1,30 @@ +const {stringify} = JSON; +const spacer = ' '; + +/** Return an output result to a logger in a promise + + { + logger: { + error: + info: + } + reject: + resolve: + } + + @returns + (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(); + }; +}; diff --git a/test/responses/test_return_json.js b/test/responses/test_return_json.js new file mode 100644 index 0000000..e04d093 --- /dev/null +++ b/test/responses/test_return_json.js @@ -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); + }); +});