@tasenor/common-node 1.9.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +4 -0
- package/LICENSE +21 -0
- package/dist/tasenor-common-node/src/cli.d.ts +81 -0
- package/dist/tasenor-common-node/src/cli.js +242 -0
- package/dist/tasenor-common-node/src/cli.js.map +1 -0
- package/dist/tasenor-common-node/src/commands/account.d.ts +12 -0
- package/dist/tasenor-common-node/src/commands/account.js +58 -0
- package/dist/tasenor-common-node/src/commands/account.js.map +1 -0
- package/dist/tasenor-common-node/src/commands/balance.d.ts +11 -0
- package/dist/tasenor-common-node/src/commands/balance.js +117 -0
- package/dist/tasenor-common-node/src/commands/balance.js.map +1 -0
- package/dist/tasenor-common-node/src/commands/db.d.ts +14 -0
- package/dist/tasenor-common-node/src/commands/db.js +69 -0
- package/dist/tasenor-common-node/src/commands/db.js.map +1 -0
- package/dist/tasenor-common-node/src/commands/entry.d.ts +13 -0
- package/dist/tasenor-common-node/src/commands/entry.js +106 -0
- package/dist/tasenor-common-node/src/commands/entry.js.map +1 -0
- package/dist/tasenor-common-node/src/commands/import.d.ts +17 -0
- package/dist/tasenor-common-node/src/commands/import.js +140 -0
- package/dist/tasenor-common-node/src/commands/import.js.map +1 -0
- package/dist/tasenor-common-node/src/commands/importer.d.ts +13 -0
- package/dist/tasenor-common-node/src/commands/importer.js +71 -0
- package/dist/tasenor-common-node/src/commands/importer.js.map +1 -0
- package/dist/tasenor-common-node/src/commands/index.d.ts +191 -0
- package/dist/tasenor-common-node/src/commands/index.js +482 -0
- package/dist/tasenor-common-node/src/commands/index.js.map +1 -0
- package/dist/tasenor-common-node/src/commands/period.d.ts +12 -0
- package/dist/tasenor-common-node/src/commands/period.js +48 -0
- package/dist/tasenor-common-node/src/commands/period.js.map +1 -0
- package/dist/tasenor-common-node/src/commands/plugin.d.ts +15 -0
- package/dist/tasenor-common-node/src/commands/plugin.js +78 -0
- package/dist/tasenor-common-node/src/commands/plugin.js.map +1 -0
- package/dist/tasenor-common-node/src/commands/report.d.ts +11 -0
- package/dist/tasenor-common-node/src/commands/report.js +96 -0
- package/dist/tasenor-common-node/src/commands/report.js.map +1 -0
- package/dist/tasenor-common-node/src/commands/settings.d.ts +10 -0
- package/dist/tasenor-common-node/src/commands/settings.js +64 -0
- package/dist/tasenor-common-node/src/commands/settings.js.map +1 -0
- package/dist/tasenor-common-node/src/commands/stock.d.ts +8 -0
- package/dist/tasenor-common-node/src/commands/stock.js +73 -0
- package/dist/tasenor-common-node/src/commands/stock.js.map +1 -0
- package/dist/tasenor-common-node/src/commands/tag.d.ts +13 -0
- package/dist/tasenor-common-node/src/commands/tag.js +89 -0
- package/dist/tasenor-common-node/src/commands/tag.js.map +1 -0
- package/dist/tasenor-common-node/src/commands/tx.d.ts +12 -0
- package/dist/tasenor-common-node/src/commands/tx.js +81 -0
- package/dist/tasenor-common-node/src/commands/tx.js.map +1 -0
- package/dist/tasenor-common-node/src/commands/user.d.ts +12 -0
- package/dist/tasenor-common-node/src/commands/user.js +52 -0
- package/dist/tasenor-common-node/src/commands/user.js.map +1 -0
- package/dist/tasenor-common-node/src/database/BookkeeperImporter.d.ts +77 -0
- package/dist/tasenor-common-node/src/database/BookkeeperImporter.js +343 -0
- package/dist/tasenor-common-node/src/database/BookkeeperImporter.js.map +1 -0
- package/dist/tasenor-common-node/src/database/DB.d.ts +51 -0
- package/dist/tasenor-common-node/src/database/DB.js +354 -0
- package/dist/tasenor-common-node/src/database/DB.js.map +1 -0
- package/dist/tasenor-common-node/src/database/index.d.ts +7 -0
- package/dist/tasenor-common-node/src/database/index.js +8 -0
- package/dist/tasenor-common-node/src/database/index.js.map +1 -0
- package/dist/tasenor-common-node/src/doccer.d.ts +29 -0
- package/dist/tasenor-common-node/src/doccer.js +30 -0
- package/dist/tasenor-common-node/src/doccer.js.map +1 -0
- package/dist/tasenor-common-node/src/error.d.ts +30 -0
- package/dist/tasenor-common-node/src/error.js +35 -0
- package/dist/tasenor-common-node/src/error.js.map +1 -0
- package/dist/tasenor-common-node/src/export/Exporter.d.ts +69 -0
- package/dist/tasenor-common-node/src/export/Exporter.js +123 -0
- package/dist/tasenor-common-node/src/export/Exporter.js.map +1 -0
- package/dist/tasenor-common-node/src/export/TasenorExporter.d.ts +55 -0
- package/dist/tasenor-common-node/src/export/TasenorExporter.js +135 -0
- package/dist/tasenor-common-node/src/export/TasenorExporter.js.map +1 -0
- package/dist/tasenor-common-node/src/export/TilitinExporter.d.ts +71 -0
- package/dist/tasenor-common-node/src/export/TilitinExporter.js +290 -0
- package/dist/tasenor-common-node/src/export/TilitinExporter.js.map +1 -0
- package/dist/tasenor-common-node/src/export/index.d.ts +8 -0
- package/dist/tasenor-common-node/src/export/index.js +9 -0
- package/dist/tasenor-common-node/src/export/index.js.map +1 -0
- package/dist/tasenor-common-node/src/import/TextFileProcessHandler.d.ts +104 -0
- package/dist/tasenor-common-node/src/import/TextFileProcessHandler.js +354 -0
- package/dist/tasenor-common-node/src/import/TextFileProcessHandler.js.map +1 -0
- package/dist/tasenor-common-node/src/import/TransactionImportConnector.d.ts +38 -0
- package/dist/tasenor-common-node/src/import/TransactionImportConnector.js +27 -0
- package/dist/tasenor-common-node/src/import/TransactionImportConnector.js.map +1 -0
- package/dist/tasenor-common-node/src/import/TransactionImportHandler.d.ts +173 -0
- package/dist/tasenor-common-node/src/import/TransactionImportHandler.js +733 -0
- package/dist/tasenor-common-node/src/import/TransactionImportHandler.js.map +1 -0
- package/dist/tasenor-common-node/src/import/TransactionRules.d.ts +238 -0
- package/dist/tasenor-common-node/src/import/TransactionRules.js +522 -0
- package/dist/tasenor-common-node/src/import/TransactionRules.js.map +1 -0
- package/dist/tasenor-common-node/src/import/TransactionUI.d.ts +181 -0
- package/dist/tasenor-common-node/src/import/TransactionUI.js +482 -0
- package/dist/tasenor-common-node/src/import/TransactionUI.js.map +1 -0
- package/dist/tasenor-common-node/src/import/TransferAnalyzer.d.ts +324 -0
- package/dist/tasenor-common-node/src/import/TransferAnalyzer.js +1379 -0
- package/dist/tasenor-common-node/src/import/TransferAnalyzer.js.map +1 -0
- package/dist/tasenor-common-node/src/import/index.d.ts +11 -0
- package/dist/tasenor-common-node/src/import/index.js +12 -0
- package/dist/tasenor-common-node/src/import/index.js.map +1 -0
- package/dist/tasenor-common-node/src/index.d.ts +12 -0
- package/dist/tasenor-common-node/src/index.js +13 -0
- package/dist/tasenor-common-node/src/index.js.map +1 -0
- package/dist/tasenor-common-node/src/net/crypto.d.ts +33 -0
- package/dist/tasenor-common-node/src/net/crypto.js +63 -0
- package/dist/tasenor-common-node/src/net/crypto.js.map +1 -0
- package/dist/tasenor-common-node/src/net/git.d.ts +49 -0
- package/dist/tasenor-common-node/src/net/git.js +137 -0
- package/dist/tasenor-common-node/src/net/git.js.map +1 -0
- package/dist/tasenor-common-node/src/net/index.d.ts +10 -0
- package/dist/tasenor-common-node/src/net/index.js +11 -0
- package/dist/tasenor-common-node/src/net/index.js.map +1 -0
- package/dist/tasenor-common-node/src/net/middleware.d.ts +61 -0
- package/dist/tasenor-common-node/src/net/middleware.js +220 -0
- package/dist/tasenor-common-node/src/net/middleware.js.map +1 -0
- package/dist/tasenor-common-node/src/net/tokens.d.ts +50 -0
- package/dist/tasenor-common-node/src/net/tokens.js +141 -0
- package/dist/tasenor-common-node/src/net/tokens.js.map +1 -0
- package/dist/tasenor-common-node/src/net/vault.d.ts +67 -0
- package/dist/tasenor-common-node/src/net/vault.js +145 -0
- package/dist/tasenor-common-node/src/net/vault.js.map +1 -0
- package/dist/tasenor-common-node/src/plugins/BackendPlugin.d.ts +91 -0
- package/dist/tasenor-common-node/src/plugins/BackendPlugin.js +165 -0
- package/dist/tasenor-common-node/src/plugins/BackendPlugin.js.map +1 -0
- package/dist/tasenor-common-node/src/plugins/DataPlugin.d.ts +13 -0
- package/dist/tasenor-common-node/src/plugins/DataPlugin.js +26 -0
- package/dist/tasenor-common-node/src/plugins/DataPlugin.js.map +1 -0
- package/dist/tasenor-common-node/src/plugins/ImportPlugin.d.ts +188 -0
- package/dist/tasenor-common-node/src/plugins/ImportPlugin.js +204 -0
- package/dist/tasenor-common-node/src/plugins/ImportPlugin.js.map +1 -0
- package/dist/tasenor-common-node/src/plugins/ReportPlugin.d.ts +132 -0
- package/dist/tasenor-common-node/src/plugins/ReportPlugin.js +393 -0
- package/dist/tasenor-common-node/src/plugins/ReportPlugin.js.map +1 -0
- package/dist/tasenor-common-node/src/plugins/SchemePlugin.d.ts +34 -0
- package/dist/tasenor-common-node/src/plugins/SchemePlugin.js +47 -0
- package/dist/tasenor-common-node/src/plugins/SchemePlugin.js.map +1 -0
- package/dist/tasenor-common-node/src/plugins/ServicePlugin.d.ts +80 -0
- package/dist/tasenor-common-node/src/plugins/ServicePlugin.js +168 -0
- package/dist/tasenor-common-node/src/plugins/ServicePlugin.js.map +1 -0
- package/dist/tasenor-common-node/src/plugins/ToolPlugin.d.ts +27 -0
- package/dist/tasenor-common-node/src/plugins/ToolPlugin.js +37 -0
- package/dist/tasenor-common-node/src/plugins/ToolPlugin.js.map +1 -0
- package/dist/tasenor-common-node/src/plugins/index.d.ts +13 -0
- package/dist/tasenor-common-node/src/plugins/index.js +14 -0
- package/dist/tasenor-common-node/src/plugins/index.js.map +1 -0
- package/dist/tasenor-common-node/src/plugins/plugins.d.ts +101 -0
- package/dist/tasenor-common-node/src/plugins/plugins.js +292 -0
- package/dist/tasenor-common-node/src/plugins/plugins.js.map +1 -0
- package/dist/tasenor-common-node/src/process/Process.d.ts +108 -0
- package/dist/tasenor-common-node/src/process/Process.js +335 -0
- package/dist/tasenor-common-node/src/process/Process.js.map +1 -0
- package/dist/tasenor-common-node/src/process/ProcessConnector.d.ts +24 -0
- package/dist/tasenor-common-node/src/process/ProcessConnector.js +28 -0
- package/dist/tasenor-common-node/src/process/ProcessConnector.js.map +1 -0
- package/dist/tasenor-common-node/src/process/ProcessFile.d.ts +69 -0
- package/dist/tasenor-common-node/src/process/ProcessFile.js +145 -0
- package/dist/tasenor-common-node/src/process/ProcessFile.js.map +1 -0
- package/dist/tasenor-common-node/src/process/ProcessHandler.d.ts +60 -0
- package/dist/tasenor-common-node/src/process/ProcessHandler.js +73 -0
- package/dist/tasenor-common-node/src/process/ProcessHandler.js.map +1 -0
- package/dist/tasenor-common-node/src/process/ProcessStep.d.ts +52 -0
- package/dist/tasenor-common-node/src/process/ProcessStep.js +78 -0
- package/dist/tasenor-common-node/src/process/ProcessStep.js.map +1 -0
- package/dist/tasenor-common-node/src/process/ProcessingSystem.d.ts +60 -0
- package/dist/tasenor-common-node/src/process/ProcessingSystem.js +182 -0
- package/dist/tasenor-common-node/src/process/ProcessingSystem.js.map +1 -0
- package/dist/tasenor-common-node/src/process/index.d.ts +11 -0
- package/dist/tasenor-common-node/src/process/index.js +12 -0
- package/dist/tasenor-common-node/src/process/index.js.map +1 -0
- package/dist/tasenor-common-node/src/reports/conversions.d.ts +8 -0
- package/dist/tasenor-common-node/src/reports/conversions.js +47 -0
- package/dist/tasenor-common-node/src/reports/conversions.js.map +1 -0
- package/dist/tasenor-common-node/src/reports/index.d.ts +6 -0
- package/dist/tasenor-common-node/src/reports/index.js +7 -0
- package/dist/tasenor-common-node/src/reports/index.js.map +1 -0
- package/dist/tasenor-common-node/src/server/ISPDemoServer.d.ts +43 -0
- package/dist/tasenor-common-node/src/server/ISPDemoServer.js +112 -0
- package/dist/tasenor-common-node/src/server/ISPDemoServer.js.map +1 -0
- package/dist/tasenor-common-node/src/server/api.d.ts +15 -0
- package/dist/tasenor-common-node/src/server/api.js +27 -0
- package/dist/tasenor-common-node/src/server/api.js.map +1 -0
- package/dist/tasenor-common-node/src/server/index.d.ts +7 -0
- package/dist/tasenor-common-node/src/server/index.js +8 -0
- package/dist/tasenor-common-node/src/server/index.js.map +1 -0
- package/dist/tasenor-common-node/src/server/router.d.ts +5 -0
- package/dist/tasenor-common-node/src/server/router.js +37 -0
- package/dist/tasenor-common-node/src/server/router.js.map +1 -0
- package/dist/tasenor-common-node/src/system.d.ts +27 -0
- package/dist/tasenor-common-node/src/system.js +95 -0
- package/dist/tasenor-common-node/src/system.js.map +1 -0
- package/dist/tasenor-common-node/src/testing/ProcessingSystemMock.d.ts +21 -0
- package/dist/tasenor-common-node/src/testing/ProcessingSystemMock.js +33 -0
- package/dist/tasenor-common-node/src/testing/ProcessingSystemMock.js.map +1 -0
- package/dist/tasenor-common-node/src/testing/UnitTestImportConnector.d.ts +24 -0
- package/dist/tasenor-common-node/src/testing/UnitTestImportConnector.js +68 -0
- package/dist/tasenor-common-node/src/testing/UnitTestImportConnector.js.map +1 -0
- package/dist/tasenor-common-node/src/testing/UnitTester.d.ts +64 -0
- package/dist/tasenor-common-node/src/testing/UnitTester.js +199 -0
- package/dist/tasenor-common-node/src/testing/UnitTester.js.map +1 -0
- package/dist/tasenor-common-node/src/testing/index.d.ts +4 -0
- package/dist/tasenor-common-node/src/testing/index.js +5 -0
- package/dist/tasenor-common-node/src/testing/index.js.map +1 -0
- package/dist/tasenor-common-node/src/testing/test-handlers.d.ts +13 -0
- package/dist/tasenor-common-node/src/testing/test-handlers.js +52 -0
- package/dist/tasenor-common-node/src/testing/test-handlers.js.map +1 -0
- package/dist/tasenor-common-node/tests/TransactionRules.spec.d.ts +1 -0
- package/dist/tasenor-common-node/tests/TransactionRules.spec.js +64 -0
- package/dist/tasenor-common-node/tests/TransactionRules.spec.js.map +1 -0
- package/dist/tasenor-common-node/tests/TransferAnalyzer-account-address.spec.d.ts +1 -0
- package/dist/tasenor-common-node/tests/TransferAnalyzer-account-address.spec.js +80 -0
- package/dist/tasenor-common-node/tests/TransferAnalyzer-account-address.spec.js.map +1 -0
- package/dist/tasenor-common-node/tests/TransferAnalyzer-buying-and-selling.spec.d.ts +1 -0
- package/dist/tasenor-common-node/tests/TransferAnalyzer-buying-and-selling.spec.js +342 -0
- package/dist/tasenor-common-node/tests/TransferAnalyzer-buying-and-selling.spec.js.map +1 -0
- package/dist/tasenor-common-node/tests/TransferAnalyzer-loans.spec.d.ts +1 -0
- package/dist/tasenor-common-node/tests/TransferAnalyzer-loans.spec.js +174 -0
- package/dist/tasenor-common-node/tests/TransferAnalyzer-loans.spec.js.map +1 -0
- package/dist/tasenor-common-node/tests/TransferAnalyzer-multiple-null-amounts.spec.d.ts +1 -0
- package/dist/tasenor-common-node/tests/TransferAnalyzer-multiple-null-amounts.spec.js +175 -0
- package/dist/tasenor-common-node/tests/TransferAnalyzer-multiple-null-amounts.spec.js.map +1 -0
- package/dist/tasenor-common-node/tests/password.spec.d.ts +1 -0
- package/dist/tasenor-common-node/tests/password.spec.js +8 -0
- package/dist/tasenor-common-node/tests/password.spec.js.map +1 -0
- package/dist/tasenor-common-node/tests/tokens.spec.d.ts +1 -0
- package/dist/tasenor-common-node/tests/tokens.spec.js +49 -0
- package/dist/tasenor-common-node/tests/tokens.spec.js.map +1 -0
- package/dist/tasenor-common-node/tests/vault.spec.d.ts +1 -0
- package/dist/tasenor-common-node/tests/vault.spec.js +19 -0
- package/dist/tasenor-common-node/tests/vault.spec.js.map +1 -0
- package/dist/tasenor-common-plugins/src/CoinbaseImport/backend/CoinbaseHandler.d.ts +11 -0
- package/dist/tasenor-common-plugins/src/CoinbaseImport/backend/CoinbaseHandler.js +30 -0
- package/dist/tasenor-common-plugins/src/CoinbaseImport/backend/CoinbaseHandler.js.map +1 -0
- package/dist/tasenor-common-plugins/src/IncomeAndExpenses/backend/index.d.ts +5 -0
- package/dist/tasenor-common-plugins/src/IncomeAndExpenses/backend/index.js +350 -0
- package/dist/tasenor-common-plugins/src/IncomeAndExpenses/backend/index.js.map +1 -0
- package/dist/tasenor-common-plugins/src/KrakenImport/backend/KrakenHandler.d.ts +23 -0
- package/dist/tasenor-common-plugins/src/KrakenImport/backend/KrakenHandler.js +83 -0
- package/dist/tasenor-common-plugins/src/KrakenImport/backend/KrakenHandler.js.map +1 -0
- package/dist/tasenor-common-plugins/src/LynxImport/backend/LynxHandler.d.ts +28 -0
- package/dist/tasenor-common-plugins/src/LynxImport/backend/LynxHandler.js +340 -0
- package/dist/tasenor-common-plugins/src/LynxImport/backend/LynxHandler.js.map +1 -0
- package/dist/tasenor-common-plugins/src/NordeaImport/backend/NordeaHandler.d.ts +11 -0
- package/dist/tasenor-common-plugins/src/NordeaImport/backend/NordeaHandler.js +39 -0
- package/dist/tasenor-common-plugins/src/NordeaImport/backend/NordeaHandler.js.map +1 -0
- package/dist/tasenor-common-plugins/src/NordnetImport/backend/NordnetHandler.d.ts +17 -0
- package/dist/tasenor-common-plugins/src/NordnetImport/backend/NordnetHandler.js +66 -0
- package/dist/tasenor-common-plugins/src/NordnetImport/backend/NordnetHandler.js.map +1 -0
- package/dist/tasenor-common-plugins/src/TITOImport/backend/TITOHandler.d.ts +13 -0
- package/dist/tasenor-common-plugins/src/TITOImport/backend/TITOHandler.js +241 -0
- package/dist/tasenor-common-plugins/src/TITOImport/backend/TITOHandler.js.map +1 -0
- package/jest.config.js +1 -0
- package/package.json +62 -0
- package/src/cli.ts +267 -0
- package/src/commands/account.ts +69 -0
- package/src/commands/balance.ts +131 -0
- package/src/commands/db.ts +84 -0
- package/src/commands/entry.ts +117 -0
- package/src/commands/import.ts +160 -0
- package/src/commands/importer.ts +84 -0
- package/src/commands/index.ts +534 -0
- package/src/commands/period.ts +59 -0
- package/src/commands/plugin.ts +95 -0
- package/src/commands/report.ts +113 -0
- package/src/commands/settings.ts +75 -0
- package/src/commands/stock.ts +80 -0
- package/src/commands/tag.ts +102 -0
- package/src/commands/tx.ts +93 -0
- package/src/commands/user.ts +65 -0
- package/src/database/BookkeeperImporter.ts +358 -0
- package/src/database/DB.ts +396 -0
- package/src/database/index.ts +7 -0
- package/src/doccer.ts +29 -0
- package/src/error.ts +32 -0
- package/src/export/Exporter.ts +136 -0
- package/src/export/TasenorExporter.ts +144 -0
- package/src/export/TilitinExporter.ts +302 -0
- package/src/export/index.ts +8 -0
- package/src/import/TextFileProcessHandler.ts +384 -0
- package/src/import/TransactionImportConnector.ts +65 -0
- package/src/import/TransactionImportHandler.ts +819 -0
- package/src/import/TransactionRules.ts +570 -0
- package/src/import/TransactionUI.ts +520 -0
- package/src/import/TransferAnalyzer.ts +1450 -0
- package/src/import/index.ts +11 -0
- package/src/index.ts +12 -0
- package/src/net/crypto.ts +69 -0
- package/src/net/git.ts +151 -0
- package/src/net/index.ts +10 -0
- package/src/net/middleware.ts +261 -0
- package/src/net/tokens.ts +140 -0
- package/src/net/vault.ts +161 -0
- package/src/plugins/BackendPlugin.ts +188 -0
- package/src/plugins/DataPlugin.ts +29 -0
- package/src/plugins/ImportPlugin.ts +211 -0
- package/src/plugins/ReportPlugin.ts +443 -0
- package/src/plugins/SchemePlugin.ts +56 -0
- package/src/plugins/ServicePlugin.ts +188 -0
- package/src/plugins/ToolPlugin.ts +44 -0
- package/src/plugins/index.ts +13 -0
- package/src/plugins/plugins.ts +345 -0
- package/src/process/Process.ts +368 -0
- package/src/process/ProcessConnector.ts +45 -0
- package/src/process/ProcessFile.ts +169 -0
- package/src/process/ProcessHandler.ts +94 -0
- package/src/process/ProcessStep.ts +100 -0
- package/src/process/ProcessingSystem.ts +202 -0
- package/src/process/index.ts +11 -0
- package/src/reports/conversions.ts +52 -0
- package/src/reports/index.ts +6 -0
- package/src/server/ISPDemoServer.ts +122 -0
- package/src/server/api.ts +37 -0
- package/src/server/index.ts +7 -0
- package/src/server/router.ts +60 -0
- package/src/system.ts +96 -0
- package/src/testing/ProcessingSystemMock.ts +45 -0
- package/src/testing/UnitTestImportConnector.ts +86 -0
- package/src/testing/UnitTester.ts +231 -0
- package/src/testing/index.ts +4 -0
- package/src/testing/test-handlers.ts +55 -0
- package/tests/TransactionRules.spec.ts +73 -0
- package/tests/TransferAnalyzer-account-address.spec.ts +87 -0
- package/tests/TransferAnalyzer-buying-and-selling.spec.ts +354 -0
- package/tests/TransferAnalyzer-loans.spec.ts +197 -0
- package/tests/TransferAnalyzer-multiple-null-amounts.spec.ts +181 -0
- package/tests/password.spec.ts +8 -0
- package/tests/tokens.spec.ts +52 -0
- package/tests/vault.spec.ts +20 -0
- package/tsconfig.json +13 -0
package/.eslintrc.js
ADDED
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 Tommi Ronkainen
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import * as FormData from 'form-data';
|
|
2
|
+
import { HttpMethod, Url, Value, TokenPair, Token, HttpResponse } from '@dataplug/tasenor-common';
|
|
3
|
+
import { Command, CommandArgumentDefault, CommandArguments } from './commands';
|
|
4
|
+
/**
|
|
5
|
+
* Ask a question on the console and return answer.
|
|
6
|
+
* @param question
|
|
7
|
+
* @returns
|
|
8
|
+
*/
|
|
9
|
+
declare function ask(question: string): Promise<string>;
|
|
10
|
+
/**
|
|
11
|
+
* Exit hook that needs to be called if used functions in this library.
|
|
12
|
+
*/
|
|
13
|
+
declare function exit(): void;
|
|
14
|
+
/**
|
|
15
|
+
* An interface for accessing API.
|
|
16
|
+
*/
|
|
17
|
+
export declare class CLIRunner {
|
|
18
|
+
user: string;
|
|
19
|
+
password: string;
|
|
20
|
+
api: Url;
|
|
21
|
+
uiApi: Url;
|
|
22
|
+
token: Token;
|
|
23
|
+
commands: Record<string, Command>;
|
|
24
|
+
originalArgs: string[];
|
|
25
|
+
args: CommandArguments;
|
|
26
|
+
/**
|
|
27
|
+
* Execute HTTP request.
|
|
28
|
+
* @param method
|
|
29
|
+
* @param url
|
|
30
|
+
* @returns
|
|
31
|
+
*/
|
|
32
|
+
request(method: HttpMethod, url: string, data: Value | undefined | FormData): Promise<HttpResponse>;
|
|
33
|
+
/**
|
|
34
|
+
* Execute HTTP request against UI API.
|
|
35
|
+
* @param method
|
|
36
|
+
* @param url
|
|
37
|
+
* @returns
|
|
38
|
+
*/
|
|
39
|
+
requestUi(method: HttpMethod, url: string, data: Value | undefined | FormData): Promise<HttpResponse>;
|
|
40
|
+
/**
|
|
41
|
+
* Execute request with optional retries.
|
|
42
|
+
* @param caller
|
|
43
|
+
* @param fullUrl
|
|
44
|
+
* @param data
|
|
45
|
+
* @returns
|
|
46
|
+
*/
|
|
47
|
+
doRequest(caller: any, fullUrl: any, data: any): Promise<import("@dataplug/tasenor-common").HttpSuccessResponse<Value>>;
|
|
48
|
+
/**
|
|
49
|
+
* Log in if we don't have access token yet.
|
|
50
|
+
*/
|
|
51
|
+
login(): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Set up the API.
|
|
54
|
+
* @param tokens
|
|
55
|
+
*/
|
|
56
|
+
configureApi(api: Url, tokens?: TokenPair | undefined): void;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* A class implementing dynamic collection of commands that are automatically looked up when called.
|
|
60
|
+
*/
|
|
61
|
+
export declare class CLI extends CLIRunner {
|
|
62
|
+
/**
|
|
63
|
+
* Scan commands and instantiate them to the collection.
|
|
64
|
+
* @param paths
|
|
65
|
+
*/
|
|
66
|
+
constructor();
|
|
67
|
+
/**
|
|
68
|
+
* Insert defaults for the arguments.
|
|
69
|
+
* @param args
|
|
70
|
+
*/
|
|
71
|
+
addDefaults(defaults: CommandArgumentDefault[]): void;
|
|
72
|
+
/**
|
|
73
|
+
* Parse and execute the command.
|
|
74
|
+
*/
|
|
75
|
+
run(defaults?: CommandArgumentDefault[], explicitArgs?: string[]): Promise<void>;
|
|
76
|
+
}
|
|
77
|
+
export declare const cli: {
|
|
78
|
+
ask: typeof ask;
|
|
79
|
+
exit: typeof exit;
|
|
80
|
+
};
|
|
81
|
+
export {};
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/* eslint-disable camelcase */
|
|
2
|
+
/**
|
|
3
|
+
* Command line interface utilities.
|
|
4
|
+
*
|
|
5
|
+
* @module tasenor-common-node/src/cli
|
|
6
|
+
*/
|
|
7
|
+
import * as readline from 'readline';
|
|
8
|
+
import { ArgumentParser } from 'argparse';
|
|
9
|
+
import { net, log, mute, waitPromise, note } from '@dataplug/tasenor-common';
|
|
10
|
+
import clone from 'clone';
|
|
11
|
+
import DbCommand from './commands/db';
|
|
12
|
+
import AccountCommand from './commands/account';
|
|
13
|
+
import BalanceCommand from './commands/balance';
|
|
14
|
+
import EntryCommand from './commands/entry';
|
|
15
|
+
import ImportCommand from './commands/import';
|
|
16
|
+
import PeriodCommand from './commands/period';
|
|
17
|
+
import ImporterCommand from './commands/importer';
|
|
18
|
+
import PluginCommand from './commands/plugin';
|
|
19
|
+
import ReportCommand from './commands/report';
|
|
20
|
+
import SettingsCommand from './commands/settings';
|
|
21
|
+
import StockCommand from './commands/stock';
|
|
22
|
+
import TagCommand from './commands/tag';
|
|
23
|
+
import TxCommand from './commands/tx';
|
|
24
|
+
import UserCommand from './commands/user';
|
|
25
|
+
let readlineInterface;
|
|
26
|
+
/**
|
|
27
|
+
* Ask a question on the console and return answer.
|
|
28
|
+
* @param question
|
|
29
|
+
* @returns
|
|
30
|
+
*/
|
|
31
|
+
function ask(question) {
|
|
32
|
+
if (!readlineInterface) {
|
|
33
|
+
readlineInterface = readline.createInterface({
|
|
34
|
+
input: process.stdin,
|
|
35
|
+
output: process.stdout
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
return new Promise((resolve) => {
|
|
39
|
+
readlineInterface.question(question ? `${question} ` : '>', (text) => { resolve(text); });
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Exit hook that needs to be called if used functions in this library.
|
|
44
|
+
*/
|
|
45
|
+
function exit() {
|
|
46
|
+
if (readlineInterface)
|
|
47
|
+
readlineInterface.close();
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* An interface for accessing API.
|
|
51
|
+
*/
|
|
52
|
+
export class CLIRunner {
|
|
53
|
+
user;
|
|
54
|
+
password;
|
|
55
|
+
api;
|
|
56
|
+
uiApi;
|
|
57
|
+
token;
|
|
58
|
+
commands;
|
|
59
|
+
originalArgs;
|
|
60
|
+
args;
|
|
61
|
+
/**
|
|
62
|
+
* Execute HTTP request.
|
|
63
|
+
* @param method
|
|
64
|
+
* @param url
|
|
65
|
+
* @returns
|
|
66
|
+
*/
|
|
67
|
+
async request(method, url, data) {
|
|
68
|
+
const caller = net[method];
|
|
69
|
+
const fullUrl = url.startsWith('/') ? `${this.api}${url}` : `${this.api}/${url}`;
|
|
70
|
+
return this.doRequest(caller, fullUrl, data);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Execute HTTP request against UI API.
|
|
74
|
+
* @param method
|
|
75
|
+
* @param url
|
|
76
|
+
* @returns
|
|
77
|
+
*/
|
|
78
|
+
async requestUi(method, url, data) {
|
|
79
|
+
const caller = net[method];
|
|
80
|
+
const fullUrl = url.startsWith('/') ? `${this.uiApi}${url}` : `${this.uiApi}/${url}`;
|
|
81
|
+
return this.doRequest(caller, fullUrl, data);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Execute request with optional retries.
|
|
85
|
+
* @param caller
|
|
86
|
+
* @param fullUrl
|
|
87
|
+
* @param data
|
|
88
|
+
* @returns
|
|
89
|
+
*/
|
|
90
|
+
async doRequest(caller, fullUrl, data) {
|
|
91
|
+
let result = null;
|
|
92
|
+
let error;
|
|
93
|
+
const max = this.args.retry || 0;
|
|
94
|
+
for (let i = -1; i < max; i++) {
|
|
95
|
+
try {
|
|
96
|
+
result = await caller(fullUrl, data);
|
|
97
|
+
if (result && result.success) {
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
error = new Error(JSON.stringify(result));
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
error = err;
|
|
104
|
+
}
|
|
105
|
+
const delay = (i + 1) * 5;
|
|
106
|
+
note(`Waiting for ${delay} seconds`);
|
|
107
|
+
await waitPromise(delay * 1000);
|
|
108
|
+
}
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Log in if we don't have access token yet.
|
|
113
|
+
*/
|
|
114
|
+
async login() {
|
|
115
|
+
if (this.token)
|
|
116
|
+
return;
|
|
117
|
+
log(`Logging in to ${this.api} as ${this.user}`);
|
|
118
|
+
const resp = await this.request('POST', '/auth', { user: this.user, password: this.password });
|
|
119
|
+
if (resp.success && resp.data && resp.data instanceof Object) {
|
|
120
|
+
if ('token' in resp.data && 'refresh' in resp.data) {
|
|
121
|
+
const { token, refresh } = resp.data;
|
|
122
|
+
this.configureApi(this.api, { token, refresh });
|
|
123
|
+
this.configureApi(this.uiApi, { token, refresh });
|
|
124
|
+
this.token = token;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Set up the API.
|
|
130
|
+
* @param tokens
|
|
131
|
+
*/
|
|
132
|
+
configureApi(api, tokens = undefined) {
|
|
133
|
+
net.configure({ sites: { [api]: {} } });
|
|
134
|
+
if (tokens) {
|
|
135
|
+
net.setConf(api, 'token', tokens.token);
|
|
136
|
+
net.setConf(api, 'refreshToken', tokens.refresh);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* A class implementing dynamic collection of commands that are automatically looked up when called.
|
|
142
|
+
*/
|
|
143
|
+
export class CLI extends CLIRunner {
|
|
144
|
+
/**
|
|
145
|
+
* Scan commands and instantiate them to the collection.
|
|
146
|
+
* @param paths
|
|
147
|
+
*/
|
|
148
|
+
constructor() {
|
|
149
|
+
super();
|
|
150
|
+
this.commands = {
|
|
151
|
+
account: new AccountCommand(this),
|
|
152
|
+
db: new DbCommand(this),
|
|
153
|
+
balance: new BalanceCommand(this),
|
|
154
|
+
entry: new EntryCommand(this),
|
|
155
|
+
import: new ImportCommand(this),
|
|
156
|
+
importer: new ImporterCommand(this),
|
|
157
|
+
period: new PeriodCommand(this),
|
|
158
|
+
plugin: new PluginCommand(this),
|
|
159
|
+
report: new ReportCommand(this),
|
|
160
|
+
settings: new SettingsCommand(this),
|
|
161
|
+
stock: new StockCommand(this),
|
|
162
|
+
tag: new TagCommand(this),
|
|
163
|
+
tx: new TxCommand(this),
|
|
164
|
+
user: new UserCommand(this)
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Insert defaults for the arguments.
|
|
169
|
+
* @param args
|
|
170
|
+
*/
|
|
171
|
+
addDefaults(defaults) {
|
|
172
|
+
for (const def of defaults) {
|
|
173
|
+
const { name, envName, defaultValue } = def;
|
|
174
|
+
if (this.args[name] === undefined) {
|
|
175
|
+
this.args[name] = process.env[envName] || defaultValue;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Parse and execute the command.
|
|
181
|
+
*/
|
|
182
|
+
async run(defaults = [], explicitArgs = []) {
|
|
183
|
+
// Helper to extract arguments.
|
|
184
|
+
const pop = (args, name) => {
|
|
185
|
+
const ret = args[name];
|
|
186
|
+
delete args[name];
|
|
187
|
+
if (!ret)
|
|
188
|
+
return '';
|
|
189
|
+
return typeof ret === 'string' ? ret : ret[0];
|
|
190
|
+
};
|
|
191
|
+
const parser = new ArgumentParser({
|
|
192
|
+
description: 'Tasenor command line tool'
|
|
193
|
+
});
|
|
194
|
+
parser.add_argument('command', { help: 'Command handling the operation', choices: Object.keys(this.commands) });
|
|
195
|
+
parser.add_argument('--debug', '-d', { help: 'If set, show logs for requests etc', action: 'store_true', required: false });
|
|
196
|
+
parser.add_argument('--json', { help: 'If set, show output as JSON', action: 'store_true', required: false });
|
|
197
|
+
parser.add_argument('--verbose', '-v', { help: 'If set, show more comprehensive output', action: 'store_true', required: false });
|
|
198
|
+
parser.add_argument('--user', { help: 'User email for logging in (use USERNAME env by default)', type: String, required: false });
|
|
199
|
+
parser.add_argument('--password', { help: 'User password for logging in (use PASSWORD env by default)', type: String, required: false });
|
|
200
|
+
parser.add_argument('--api', { help: 'The server base URL providing Bookkeeper API (use API env by default)', type: String, required: false });
|
|
201
|
+
parser.add_argument('--ui-api', { help: 'The server base URL providing Bookkeeper UI API (use UI_API env by default)', type: String, required: false });
|
|
202
|
+
parser.add_argument('--retry', { help: 'If given, retry this many times if network call fails', type: Number, required: false });
|
|
203
|
+
// Set up args.
|
|
204
|
+
this.originalArgs = explicitArgs.length ? clone(explicitArgs) : clone(process.argv.splice(2));
|
|
205
|
+
// Find the command and add its arguments.
|
|
206
|
+
let cmd;
|
|
207
|
+
for (let i = 0; i < this.originalArgs.length; i++) {
|
|
208
|
+
if (this.commands[this.originalArgs[i]]) {
|
|
209
|
+
cmd = this.commands[this.originalArgs[i]];
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (cmd) {
|
|
214
|
+
cmd.addArguments(parser);
|
|
215
|
+
}
|
|
216
|
+
// Collect and fix arguments.
|
|
217
|
+
this.args = parser.parse_args(this.originalArgs);
|
|
218
|
+
cmd?.setArgs(this.args);
|
|
219
|
+
this.addDefaults(defaults);
|
|
220
|
+
this.user = pop(this.args, 'user');
|
|
221
|
+
this.password = pop(this.args, 'password');
|
|
222
|
+
this.api = pop(this.args, 'api');
|
|
223
|
+
this.uiApi = pop(this.args, 'ui_api');
|
|
224
|
+
delete this.args.command;
|
|
225
|
+
if (!this.args.debug) {
|
|
226
|
+
mute();
|
|
227
|
+
}
|
|
228
|
+
// Configure net APIs.
|
|
229
|
+
if (this.api) {
|
|
230
|
+
this.configureApi(this.api);
|
|
231
|
+
}
|
|
232
|
+
if (this.uiApi) {
|
|
233
|
+
this.configureApi(this.uiApi);
|
|
234
|
+
}
|
|
235
|
+
cmd && await cmd.run();
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
export const cli = {
|
|
239
|
+
ask,
|
|
240
|
+
exit
|
|
241
|
+
};
|
|
242
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AccountModelData } from '@dataplug/tasenor-common';
|
|
2
|
+
import { Command } from '.';
|
|
3
|
+
import { ArgumentParser } from 'argparse';
|
|
4
|
+
declare class AccountCommand extends Command {
|
|
5
|
+
addArguments(parser: ArgumentParser): void;
|
|
6
|
+
ls(): Promise<void>;
|
|
7
|
+
print(data: AccountModelData[]): void;
|
|
8
|
+
rm(): Promise<void>;
|
|
9
|
+
create(): Promise<void>;
|
|
10
|
+
run(): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export default AccountCommand;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/* eslint-disable camelcase */
|
|
2
|
+
import { log } from '@dataplug/tasenor-common';
|
|
3
|
+
import { Command } from '.';
|
|
4
|
+
class AccountCommand extends Command {
|
|
5
|
+
addArguments(parser) {
|
|
6
|
+
const sub = parser.add_subparsers();
|
|
7
|
+
const ls = sub.add_parser('ls', { help: 'List all accounts' });
|
|
8
|
+
ls.set_defaults({ subCommand: 'ls' });
|
|
9
|
+
ls.add_argument('db', { help: 'Name of the database' });
|
|
10
|
+
const rm = sub.add_parser('rm', { help: 'Delete an account' });
|
|
11
|
+
rm.set_defaults({ subCommand: 'rm' });
|
|
12
|
+
rm.add_argument('db', { help: 'Name of the database' });
|
|
13
|
+
rm.add_argument('id', { help: 'ID of the account' });
|
|
14
|
+
const create = sub.add_parser('create', { help: 'Create an account' });
|
|
15
|
+
create.set_defaults({ subCommand: 'create' });
|
|
16
|
+
create.add_argument('db', { help: 'Name of the database' });
|
|
17
|
+
create.add_argument('language', { help: 'Account language' });
|
|
18
|
+
create.add_argument('currency', { help: 'Account currency' });
|
|
19
|
+
create.add_argument('type', { help: 'Account type' });
|
|
20
|
+
create.add_argument('number', { help: 'Account number' });
|
|
21
|
+
create.add_argument('name', { help: 'Account name' });
|
|
22
|
+
create.add_argument('data', { help: 'Additional account data in JSON format', nargs: '?' });
|
|
23
|
+
}
|
|
24
|
+
async ls() {
|
|
25
|
+
const { db } = this.args;
|
|
26
|
+
const resp = await this.get(`/db/${db}/account`);
|
|
27
|
+
this.out('account', resp);
|
|
28
|
+
}
|
|
29
|
+
print(data) {
|
|
30
|
+
for (const account of data.sort((a, b) => (a.id || 0) - (b.id || 0))) {
|
|
31
|
+
const { id, number, name, type, language, currency, data } = account;
|
|
32
|
+
console.log(`#${id} [${language} ${currency} ${type}] ${number} ${name} ${Object.keys(data).length ? JSON.stringify(data) : ''}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async rm() {
|
|
36
|
+
const { db, id } = this.args;
|
|
37
|
+
await this.delete(`/db/${db}/account/${id}`);
|
|
38
|
+
log(`Account ${id} deleted successfully.`);
|
|
39
|
+
}
|
|
40
|
+
async create() {
|
|
41
|
+
const { db, number, name, type, language, currency, data } = this.args;
|
|
42
|
+
const params = {
|
|
43
|
+
number,
|
|
44
|
+
name,
|
|
45
|
+
type,
|
|
46
|
+
language,
|
|
47
|
+
currency,
|
|
48
|
+
data: data ? await this.jsonData(data) : {}
|
|
49
|
+
};
|
|
50
|
+
await this.post(`/db/${db}/account`, params);
|
|
51
|
+
log(`Account ${number} ${name} created successfully.`);
|
|
52
|
+
}
|
|
53
|
+
async run() {
|
|
54
|
+
await this.runBy('subCommand');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export default AccountCommand;
|
|
58
|
+
//# sourceMappingURL=account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../../src/commands/account.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Command } from '.';
|
|
2
|
+
import { ArgumentParser } from 'argparse';
|
|
3
|
+
import { AccountNumber } from '@dataplug/tasenor-common';
|
|
4
|
+
declare class BalanceCommand extends Command {
|
|
5
|
+
addArguments(parser: ArgumentParser): void;
|
|
6
|
+
ls(): Promise<void>;
|
|
7
|
+
print(data: Record<AccountNumber, number>): void;
|
|
8
|
+
create(): Promise<void>;
|
|
9
|
+
run(): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export default BalanceCommand;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/* eslint-disable camelcase */
|
|
2
|
+
import { sprintf } from 'sprintf-js';
|
|
3
|
+
import { Command } from '.';
|
|
4
|
+
import { log, warning } from '@dataplug/tasenor-common';
|
|
5
|
+
import clone from 'clone';
|
|
6
|
+
class BalanceCommand extends Command {
|
|
7
|
+
addArguments(parser) {
|
|
8
|
+
const sub = parser.add_subparsers();
|
|
9
|
+
const ls = sub.add_parser('ls', { help: 'List account balances' });
|
|
10
|
+
ls.set_defaults({ subCommand: 'ls' });
|
|
11
|
+
ls.add_argument('db', { help: 'Name of the database' });
|
|
12
|
+
ls.add_argument('period', { help: 'Period year, date or ID' });
|
|
13
|
+
const create = sub.add_parser('create', { help: 'Initialize account balances' });
|
|
14
|
+
create.set_defaults({ subCommand: 'create' });
|
|
15
|
+
create.add_argument('--force', '-f', { action: 'store_true', help: 'If given, allow invalid entries to be created', required: false });
|
|
16
|
+
create.add_argument('--map', { help: 'Remap account numbers using JSON or @filepath mapping', required: false });
|
|
17
|
+
create.add_argument('--stock', { nargs: '*', help: 'Define initial stock using JSON or @filepath mapping', required: false });
|
|
18
|
+
create.add_argument('--text', { help: 'A description for the transaction', required: false });
|
|
19
|
+
create.add_argument('db', { help: 'Name of the database' });
|
|
20
|
+
create.add_argument('data', { help: 'A JSON data or @filepath for balances' });
|
|
21
|
+
}
|
|
22
|
+
async ls() {
|
|
23
|
+
const { db, period, verbose } = this.args;
|
|
24
|
+
const periodId = await this.periodId(db, period);
|
|
25
|
+
const resp = await this.get(`/db/${db}/period/${periodId}`);
|
|
26
|
+
await this.readAccounts(db);
|
|
27
|
+
if (!verbose && resp.balances) {
|
|
28
|
+
this.out('balance', resp.balances.reduce((prev, cur) => ({ ...prev, [cur.number]: cur.total }), {}));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
this.out('balance', resp);
|
|
32
|
+
}
|
|
33
|
+
print(data) {
|
|
34
|
+
Object.keys(data).sort().forEach(number => {
|
|
35
|
+
console.log(number, this.accounts[number].name, '\t', sprintf('%.2f', data[number] / 100));
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
async create() {
|
|
39
|
+
const { db, data, map, stock, text, force } = this.args;
|
|
40
|
+
if (!db) {
|
|
41
|
+
throw new Error(`Invalid database argument ${JSON.stringify(db)}`);
|
|
42
|
+
}
|
|
43
|
+
const dataArg = await this.jsonData(data);
|
|
44
|
+
const mapArg = (map ? await this.jsonData(map) : {});
|
|
45
|
+
const period = await this.singlePeriod(db);
|
|
46
|
+
const stockArg = await this.jsonData(stock);
|
|
47
|
+
// Check if the DB is clean.
|
|
48
|
+
const docs = await this.get(`/db/${db}/document`);
|
|
49
|
+
if (docs.filter(d => d.number !== 0).length && !force) {
|
|
50
|
+
throw new Error('There are already non-initial transactions in the database and cannot be initialized anymore.');
|
|
51
|
+
}
|
|
52
|
+
// Ensure zero balance.
|
|
53
|
+
const sum = Object.values(dataArg).reduce((prev, cur) => prev + cur, 0);
|
|
54
|
+
if (sum) {
|
|
55
|
+
if (force) {
|
|
56
|
+
warning(`Initial balance total must be zero. Got ${sum} from ${JSON.stringify(dataArg)}.`);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
throw new Error(`Initial balance total must be zero. Got ${sum} from ${JSON.stringify(dataArg)}.`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Ensure all accounts are valid.
|
|
63
|
+
for (const account of Object.keys(dataArg)) {
|
|
64
|
+
// Zero balance accounts not needed.
|
|
65
|
+
if (!dataArg[account]) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
await this.accountId(db, mapArg[account] || account);
|
|
69
|
+
}
|
|
70
|
+
// Create initial doc.
|
|
71
|
+
const document = (docs.length > 0)
|
|
72
|
+
? docs[0]
|
|
73
|
+
: await this.post(`/db/${db}/document`, {
|
|
74
|
+
period_id: period.id,
|
|
75
|
+
date: this.date(period.start_date),
|
|
76
|
+
number: 0
|
|
77
|
+
});
|
|
78
|
+
log(`Created a document #${document.id} on ${period.start_date}.`);
|
|
79
|
+
// Create entries.
|
|
80
|
+
const description = this.str(text) || 'Initial balance';
|
|
81
|
+
for (const account of Object.keys(dataArg)) {
|
|
82
|
+
const destAccount = mapArg[account] || account;
|
|
83
|
+
// Skip zeroes.
|
|
84
|
+
if (!dataArg[account]) {
|
|
85
|
+
log(`Skipping an entry ${destAccount} ${description} ${sprintf('%.2f', 0)}.`);
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const entry = {
|
|
89
|
+
document_id: document.id,
|
|
90
|
+
account_id: await this.accountId(db, destAccount),
|
|
91
|
+
debit: dataArg[account] >= 0 ? 1 : 0,
|
|
92
|
+
amount: Math.abs(dataArg[account]),
|
|
93
|
+
description
|
|
94
|
+
};
|
|
95
|
+
// Add stock if given.
|
|
96
|
+
if (stockArg[destAccount]) {
|
|
97
|
+
entry.data = {
|
|
98
|
+
stock: {
|
|
99
|
+
set: clone(stockArg[destAccount])
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
delete stockArg[destAccount];
|
|
103
|
+
}
|
|
104
|
+
// Add data if known.
|
|
105
|
+
const out = await this.post(`/db/${db}/entry`, entry);
|
|
106
|
+
log(`Created an entry #${out.id} for ${destAccount} ${description} ${sprintf('%.2f', dataArg[account] / 100)}${entry.data ? ' ' + JSON.stringify(entry.data) : ''}.`);
|
|
107
|
+
}
|
|
108
|
+
if (Object.keys(stockArg).length) {
|
|
109
|
+
throw new Error(`Unused initial stocks for accounts ${Object.keys(stockArg).join(', ')}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async run() {
|
|
113
|
+
await this.runBy('subCommand');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
export default BalanceCommand;
|
|
117
|
+
//# sourceMappingURL=balance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"balance.js","sourceRoot":"","sources":["../../../../src/commands/balance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { DatabaseModelData } from '@dataplug/tasenor-common';
|
|
2
|
+
import { ArgumentParser } from 'argparse';
|
|
3
|
+
import { Command } from '.';
|
|
4
|
+
declare class DbCommand extends Command {
|
|
5
|
+
addArguments(parser: ArgumentParser): void;
|
|
6
|
+
ls(): Promise<void>;
|
|
7
|
+
print(data: DatabaseModelData[]): void;
|
|
8
|
+
rm(): Promise<void>;
|
|
9
|
+
create(): Promise<void>;
|
|
10
|
+
upload(): Promise<void>;
|
|
11
|
+
download(): Promise<void>;
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export default DbCommand;
|