diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a87ed0..0f794de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Versions +## 13.5.0 + +- `accounting`: Add `--date` to allow for precision of accounting within month + ## 13.4.0 - `rebalance`: Add `--avoid-high-fee-routes` to ignore routes over max fee rate diff --git a/balances/get_accounting_report.js b/balances/get_accounting_report.js index aa62560..9f21470 100644 --- a/balances/get_accounting_report.js +++ b/balances/get_accounting_report.js @@ -24,6 +24,7 @@ const summaryHeadings = ['Total', 'Asset', 'Report Date', 'Total Fiat']; { category: [currency]: + [date]: [fiat]: [is_csv]: [is_fiat_disabled]: @@ -50,6 +51,10 @@ module.exports = (args, cbk) => { return cbk([400, 'ExpectedKnownAccountingRecordsCategory']); } + if (!!args.date && !args.month) { + return cbk([400, 'ExpectedMonthForDateToGetAccountingReport']); + } + if (!args.lnd) { return cbk([400, 'ExpectedAuthenticatedLndToGetAccountingReport']); } @@ -64,7 +69,11 @@ module.exports = (args, cbk) => { // Get date range dateRange: ['validate', ({}, cbk) => { try { - return cbk(null, rangeForDate({month: args.month, year: args.year})); + return cbk(null, rangeForDate({ + date: args.date, + month: args.month, + year: args.year, + })); } catch (err) { return cbk([400, err.message]); } diff --git a/balances/range_for_date.js b/balances/range_for_date.js index b00bc4c..fa7e128 100644 --- a/balances/range_for_date.js +++ b/balances/range_for_date.js @@ -7,6 +7,7 @@ const {notFoundIndex} = require('./constants'); /** Get a before and after range { + [date]: [month]: [year]: } @@ -20,8 +21,8 @@ const {notFoundIndex} = require('./constants'); [before]: } */ -module.exports = ({month, year}) => { - if (!year && !month) { +module.exports = ({date, month, year}) => { + if (!date && !year && !month) { return {}; } @@ -45,7 +46,13 @@ module.exports = ({month, year}) => { [after, end].forEach(n => n.month(month)); } - if (!!month) { + if (!!date) { + [after, end].forEach(n => n.date(date)); + } + + if (!!date) { + end.add([date].length, 'day'); + } else if (!!month) { end.add([month].length, 'months'); } else { end.add([after].length, 'years'); diff --git a/bos b/bos index 1bd191d..512e206 100755 --- a/bos +++ b/bos @@ -70,6 +70,7 @@ prog .help(`Rate providers: ${rateProviders.join(', ')}`) .help('Privacy note: this requests tx related data from third parties') .option('--csv', 'Output a CSV') + .option('--date ', 'Show only records for specific date') .option('--disable-fiat', 'Avoid looking up fiat conversions for records') .option('--month ', 'Show only records for specific month', months) .option('--node ', 'Get details from named node') @@ -82,6 +83,7 @@ prog try { return balances.getAccountingReport({ category: args.category, + date: options.date, is_csv: !!options.csv, is_fiat_disabled: options.disableFiat, lnd: (await lnd.authenticatedLnd({logger, node: options.node})).lnd, diff --git a/package-lock.json b/package-lock.json index 962314d..83c63e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "balanceofsatoshis", - "version": "13.4.0", + "version": "13.5.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "balanceofsatoshis", - "version": "13.4.0", + "version": "13.5.0", "license": "MIT", "dependencies": { "@alexbosworth/caporal": "1.4.4", @@ -26,7 +26,7 @@ "cbor": "8.1.0", "colorette": "2.0.19", "crypto-js": "4.1.1", - "csv-parse": "5.3.1", + "csv-parse": "5.3.2", "ecpair": "2.1.0", "goldengate": "11.4.0", "grammy": "1.12.0", @@ -2306,9 +2306,9 @@ "dev": true }, "node_modules/@babel/generator": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.2.tgz", - "integrity": "sha512-SD75PMIK6i9H8G/tfGvB4KKl4Nw6Ssos9nGgYwxbgyTP0iX/Z55DveoH86rmUB/YHTQQ+ZC0F7xxaY8l2OF44Q==", + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", + "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", "dev": true, "dependencies": { "@babel/types": "^7.20.2", @@ -2496,9 +2496,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.2.tgz", - "integrity": "sha512-afk318kh2uKbo7BEj2QtEi8HVCGrwHUffrYDy7dgVcSa2j9lY3LDjPzcyGdpX7xgm35aWqvciZJ4WKmdF/SxYg==", + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", + "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -2604,9 +2604,9 @@ } }, "node_modules/@grammyjs/types": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@grammyjs/types/-/types-2.10.0.tgz", - "integrity": "sha512-3w5z6UUgbFldLa1N5GP09BTiFZLDNaq2xFxPVtKeaIuKg2WY7mDDgraDE2CfSxl79RnNWMp4WNKX21E9Z6mtMg==" + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@grammyjs/types/-/types-2.10.2.tgz", + "integrity": "sha512-YhOQEkl4KwZvHH2BSvSkN27R5s5MGVLnK8W3bh8h3OMwA1ZlrqNPsnTyvenrmv6sKk62CZlDlFJpPb3MFUWXUA==" }, "node_modules/@grpc/grpc-js": { "version": "1.7.0", @@ -3595,9 +3595,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001430", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001430.tgz", - "integrity": "sha512-IB1BXTZKPDVPM7cnV4iaKaHxckvdr/3xtctB3f7Hmenx3qYBhGtTZ//7EllK66aKXW98Lx0+7Yr0kxBtIt3tzg==", + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", "dev": true, "funding": [ { @@ -4052,9 +4052,9 @@ "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" }, "node_modules/csv-parse": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.3.1.tgz", - "integrity": "sha512-R4Hv6eGJNzgcKdThZ6XORbSQ873HVcNke74QIq+LbwpT90LaZ8Xzl7KKiuIP16xq/P7ofzRt0h7S0xm+fVScsw==" + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.3.2.tgz", + "integrity": "sha512-3jQ/JMs+voKxr4vwpmElS1d37J0o6rQdQyEKoPyA9HG8fYczpLaBJnmp5ykvkXL8ZeEGVP0qwLU645BZVykXKw==" }, "node_modules/debug": { "version": "2.6.9", @@ -5780,9 +5780,9 @@ } }, "node_modules/libtap/node_modules/tap-parser": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-11.0.1.tgz", - "integrity": "sha512-5ow0oyFOnXVSALYdidMX94u0GEjIlgc/BPFYLx0yRh9hb8+cFGNJqJzDJlUqbLOwx8+NBrIbxCWkIQi7555c0w==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-11.0.2.tgz", + "integrity": "sha512-6qGlC956rcORw+fg7Fv1iCRAY8/bU9UabUAhs3mXRH6eRmVZcNPLheSXCYaVaYeSwx5xa/1HXZb1537YSvwDZg==", "dev": true, "dependencies": { "events-to-array": "^1.0.1", @@ -8374,9 +8374,9 @@ } }, "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "dependencies": { "escape-string-regexp": "^2.0.0" @@ -8772,9 +8772,9 @@ "dev": true }, "node_modules/tap-mocha-reporter/node_modules/tap-parser": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-11.0.1.tgz", - "integrity": "sha512-5ow0oyFOnXVSALYdidMX94u0GEjIlgc/BPFYLx0yRh9hb8+cFGNJqJzDJlUqbLOwx8+NBrIbxCWkIQi7555c0w==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-11.0.2.tgz", + "integrity": "sha512-6qGlC956rcORw+fg7Fv1iCRAY8/bU9UabUAhs3mXRH6eRmVZcNPLheSXCYaVaYeSwx5xa/1HXZb1537YSvwDZg==", "dev": true, "dependencies": { "events-to-array": "^1.0.1", @@ -8789,12 +8789,12 @@ } }, "node_modules/tap-yaml": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz", - "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.2.tgz", + "integrity": "sha512-GegASpuqBnRNdT1U+yuUPZ8rEU64pL35WPBpCISWwff4dErS2/438barz7WFJl4Nzh3Y05tfPidZnH+GaV1wMg==", "dev": true, "dependencies": { - "yaml": "^1.5.0" + "yaml": "^1.10.2" } }, "node_modules/tar-fs": { @@ -10990,9 +10990,9 @@ } }, "@babel/generator": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.2.tgz", - "integrity": "sha512-SD75PMIK6i9H8G/tfGvB4KKl4Nw6Ssos9nGgYwxbgyTP0iX/Z55DveoH86rmUB/YHTQQ+ZC0F7xxaY8l2OF44Q==", + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", + "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", "dev": true, "requires": { "@babel/types": "^7.20.2", @@ -11134,9 +11134,9 @@ } }, "@babel/parser": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.2.tgz", - "integrity": "sha512-afk318kh2uKbo7BEj2QtEi8HVCGrwHUffrYDy7dgVcSa2j9lY3LDjPzcyGdpX7xgm35aWqvciZJ4WKmdF/SxYg==", + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", + "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", "dev": true }, "@babel/template": { @@ -11218,9 +11218,9 @@ } }, "@grammyjs/types": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@grammyjs/types/-/types-2.10.0.tgz", - "integrity": "sha512-3w5z6UUgbFldLa1N5GP09BTiFZLDNaq2xFxPVtKeaIuKg2WY7mDDgraDE2CfSxl79RnNWMp4WNKX21E9Z6mtMg==" + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@grammyjs/types/-/types-2.10.2.tgz", + "integrity": "sha512-YhOQEkl4KwZvHH2BSvSkN27R5s5MGVLnK8W3bh8h3OMwA1ZlrqNPsnTyvenrmv6sKk62CZlDlFJpPb3MFUWXUA==" }, "@grpc/grpc-js": { "version": "1.7.0", @@ -12028,9 +12028,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001430", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001430.tgz", - "integrity": "sha512-IB1BXTZKPDVPM7cnV4iaKaHxckvdr/3xtctB3f7Hmenx3qYBhGtTZ//7EllK66aKXW98Lx0+7Yr0kxBtIt3tzg==", + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", "dev": true }, "cbor": { @@ -12383,9 +12383,9 @@ "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" }, "csv-parse": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.3.1.tgz", - "integrity": "sha512-R4Hv6eGJNzgcKdThZ6XORbSQ873HVcNke74QIq+LbwpT90LaZ8Xzl7KKiuIP16xq/P7ofzRt0h7S0xm+fVScsw==" + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.3.2.tgz", + "integrity": "sha512-3jQ/JMs+voKxr4vwpmElS1d37J0o6rQdQyEKoPyA9HG8fYczpLaBJnmp5ykvkXL8ZeEGVP0qwLU645BZVykXKw==" }, "debug": { "version": "2.6.9", @@ -13710,9 +13710,9 @@ }, "dependencies": { "tap-parser": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-11.0.1.tgz", - "integrity": "sha512-5ow0oyFOnXVSALYdidMX94u0GEjIlgc/BPFYLx0yRh9hb8+cFGNJqJzDJlUqbLOwx8+NBrIbxCWkIQi7555c0w==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-11.0.2.tgz", + "integrity": "sha512-6qGlC956rcORw+fg7Fv1iCRAY8/bU9UabUAhs3mXRH6eRmVZcNPLheSXCYaVaYeSwx5xa/1HXZb1537YSvwDZg==", "dev": true, "requires": { "events-to-array": "^1.0.1", @@ -15694,9 +15694,9 @@ "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==" }, "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "requires": { "escape-string-regexp": "^2.0.0" @@ -15999,9 +15999,9 @@ "dev": true }, "tap-parser": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-11.0.1.tgz", - "integrity": "sha512-5ow0oyFOnXVSALYdidMX94u0GEjIlgc/BPFYLx0yRh9hb8+cFGNJqJzDJlUqbLOwx8+NBrIbxCWkIQi7555c0w==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-11.0.2.tgz", + "integrity": "sha512-6qGlC956rcORw+fg7Fv1iCRAY8/bU9UabUAhs3mXRH6eRmVZcNPLheSXCYaVaYeSwx5xa/1HXZb1537YSvwDZg==", "dev": true, "requires": { "events-to-array": "^1.0.1", @@ -16012,12 +16012,12 @@ } }, "tap-yaml": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz", - "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.2.tgz", + "integrity": "sha512-GegASpuqBnRNdT1U+yuUPZ8rEU64pL35WPBpCISWwff4dErS2/438barz7WFJl4Nzh3Y05tfPidZnH+GaV1wMg==", "dev": true, "requires": { - "yaml": "^1.5.0" + "yaml": "^1.10.2" } }, "tar-fs": { diff --git a/package.json b/package.json index f6020ba..8c3d3ac 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "cbor": "8.1.0", "colorette": "2.0.19", "crypto-js": "4.1.1", - "csv-parse": "5.3.1", + "csv-parse": "5.3.2", "ecpair": "2.1.0", "goldengate": "11.4.0", "grammy": "1.12.0", @@ -83,5 +83,5 @@ "postpublish": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t alexbosworth/balanceofsatoshis --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": "13.4.0" + "version": "13.5.0" }