@tasenor/common-node 1.9.30 → 1.9.32

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.
Files changed (248) hide show
  1. package/package.json +2 -2
  2. package/dist/migrations/01_init.js +0 -60
  3. package/dist/tasenor-common-node/src/cli.d.ts +0 -81
  4. package/dist/tasenor-common-node/src/cli.js +0 -242
  5. package/dist/tasenor-common-node/src/cli.js.map +0 -1
  6. package/dist/tasenor-common-node/src/commands/account.d.ts +0 -12
  7. package/dist/tasenor-common-node/src/commands/account.js +0 -58
  8. package/dist/tasenor-common-node/src/commands/account.js.map +0 -1
  9. package/dist/tasenor-common-node/src/commands/balance.d.ts +0 -11
  10. package/dist/tasenor-common-node/src/commands/balance.js +0 -117
  11. package/dist/tasenor-common-node/src/commands/balance.js.map +0 -1
  12. package/dist/tasenor-common-node/src/commands/db.d.ts +0 -14
  13. package/dist/tasenor-common-node/src/commands/db.js +0 -69
  14. package/dist/tasenor-common-node/src/commands/db.js.map +0 -1
  15. package/dist/tasenor-common-node/src/commands/entry.d.ts +0 -13
  16. package/dist/tasenor-common-node/src/commands/entry.js +0 -106
  17. package/dist/tasenor-common-node/src/commands/entry.js.map +0 -1
  18. package/dist/tasenor-common-node/src/commands/import.d.ts +0 -17
  19. package/dist/tasenor-common-node/src/commands/import.js +0 -140
  20. package/dist/tasenor-common-node/src/commands/import.js.map +0 -1
  21. package/dist/tasenor-common-node/src/commands/importer.d.ts +0 -13
  22. package/dist/tasenor-common-node/src/commands/importer.js +0 -71
  23. package/dist/tasenor-common-node/src/commands/importer.js.map +0 -1
  24. package/dist/tasenor-common-node/src/commands/index.d.ts +0 -191
  25. package/dist/tasenor-common-node/src/commands/index.js +0 -482
  26. package/dist/tasenor-common-node/src/commands/index.js.map +0 -1
  27. package/dist/tasenor-common-node/src/commands/period.d.ts +0 -12
  28. package/dist/tasenor-common-node/src/commands/period.js +0 -48
  29. package/dist/tasenor-common-node/src/commands/period.js.map +0 -1
  30. package/dist/tasenor-common-node/src/commands/plugin.d.ts +0 -15
  31. package/dist/tasenor-common-node/src/commands/plugin.js +0 -78
  32. package/dist/tasenor-common-node/src/commands/plugin.js.map +0 -1
  33. package/dist/tasenor-common-node/src/commands/report.d.ts +0 -11
  34. package/dist/tasenor-common-node/src/commands/report.js +0 -96
  35. package/dist/tasenor-common-node/src/commands/report.js.map +0 -1
  36. package/dist/tasenor-common-node/src/commands/settings.d.ts +0 -10
  37. package/dist/tasenor-common-node/src/commands/settings.js +0 -64
  38. package/dist/tasenor-common-node/src/commands/settings.js.map +0 -1
  39. package/dist/tasenor-common-node/src/commands/stock.d.ts +0 -8
  40. package/dist/tasenor-common-node/src/commands/stock.js +0 -73
  41. package/dist/tasenor-common-node/src/commands/stock.js.map +0 -1
  42. package/dist/tasenor-common-node/src/commands/tag.d.ts +0 -13
  43. package/dist/tasenor-common-node/src/commands/tag.js +0 -89
  44. package/dist/tasenor-common-node/src/commands/tag.js.map +0 -1
  45. package/dist/tasenor-common-node/src/commands/tx.d.ts +0 -12
  46. package/dist/tasenor-common-node/src/commands/tx.js +0 -81
  47. package/dist/tasenor-common-node/src/commands/tx.js.map +0 -1
  48. package/dist/tasenor-common-node/src/commands/user.d.ts +0 -12
  49. package/dist/tasenor-common-node/src/commands/user.js +0 -52
  50. package/dist/tasenor-common-node/src/commands/user.js.map +0 -1
  51. package/dist/tasenor-common-node/src/database/BookkeeperImporter.d.ts +0 -77
  52. package/dist/tasenor-common-node/src/database/BookkeeperImporter.js +0 -343
  53. package/dist/tasenor-common-node/src/database/BookkeeperImporter.js.map +0 -1
  54. package/dist/tasenor-common-node/src/database/DB.d.ts +0 -51
  55. package/dist/tasenor-common-node/src/database/DB.js +0 -354
  56. package/dist/tasenor-common-node/src/database/DB.js.map +0 -1
  57. package/dist/tasenor-common-node/src/database/index.d.ts +0 -7
  58. package/dist/tasenor-common-node/src/database/index.js +0 -8
  59. package/dist/tasenor-common-node/src/database/index.js.map +0 -1
  60. package/dist/tasenor-common-node/src/doccer.d.ts +0 -29
  61. package/dist/tasenor-common-node/src/doccer.js +0 -30
  62. package/dist/tasenor-common-node/src/doccer.js.map +0 -1
  63. package/dist/tasenor-common-node/src/error.d.ts +0 -30
  64. package/dist/tasenor-common-node/src/error.js +0 -35
  65. package/dist/tasenor-common-node/src/error.js.map +0 -1
  66. package/dist/tasenor-common-node/src/export/Exporter.d.ts +0 -69
  67. package/dist/tasenor-common-node/src/export/Exporter.js +0 -123
  68. package/dist/tasenor-common-node/src/export/Exporter.js.map +0 -1
  69. package/dist/tasenor-common-node/src/export/TasenorExporter.d.ts +0 -55
  70. package/dist/tasenor-common-node/src/export/TasenorExporter.js +0 -135
  71. package/dist/tasenor-common-node/src/export/TasenorExporter.js.map +0 -1
  72. package/dist/tasenor-common-node/src/export/TilitinExporter.d.ts +0 -71
  73. package/dist/tasenor-common-node/src/export/TilitinExporter.js +0 -290
  74. package/dist/tasenor-common-node/src/export/TilitinExporter.js.map +0 -1
  75. package/dist/tasenor-common-node/src/export/index.d.ts +0 -8
  76. package/dist/tasenor-common-node/src/export/index.js +0 -9
  77. package/dist/tasenor-common-node/src/export/index.js.map +0 -1
  78. package/dist/tasenor-common-node/src/import/TextFileProcessHandler.d.ts +0 -104
  79. package/dist/tasenor-common-node/src/import/TextFileProcessHandler.js +0 -354
  80. package/dist/tasenor-common-node/src/import/TextFileProcessHandler.js.map +0 -1
  81. package/dist/tasenor-common-node/src/import/TransactionImportConnector.d.ts +0 -38
  82. package/dist/tasenor-common-node/src/import/TransactionImportConnector.js +0 -27
  83. package/dist/tasenor-common-node/src/import/TransactionImportConnector.js.map +0 -1
  84. package/dist/tasenor-common-node/src/import/TransactionImportHandler.d.ts +0 -173
  85. package/dist/tasenor-common-node/src/import/TransactionImportHandler.js +0 -733
  86. package/dist/tasenor-common-node/src/import/TransactionImportHandler.js.map +0 -1
  87. package/dist/tasenor-common-node/src/import/TransactionRules.d.ts +0 -238
  88. package/dist/tasenor-common-node/src/import/TransactionRules.js +0 -522
  89. package/dist/tasenor-common-node/src/import/TransactionRules.js.map +0 -1
  90. package/dist/tasenor-common-node/src/import/TransactionUI.d.ts +0 -181
  91. package/dist/tasenor-common-node/src/import/TransactionUI.js +0 -482
  92. package/dist/tasenor-common-node/src/import/TransactionUI.js.map +0 -1
  93. package/dist/tasenor-common-node/src/import/TransferAnalyzer.d.ts +0 -324
  94. package/dist/tasenor-common-node/src/import/TransferAnalyzer.js +0 -1379
  95. package/dist/tasenor-common-node/src/import/TransferAnalyzer.js.map +0 -1
  96. package/dist/tasenor-common-node/src/import/index.d.ts +0 -11
  97. package/dist/tasenor-common-node/src/import/index.js +0 -12
  98. package/dist/tasenor-common-node/src/import/index.js.map +0 -1
  99. package/dist/tasenor-common-node/src/index.d.ts +0 -12
  100. package/dist/tasenor-common-node/src/index.js +0 -13
  101. package/dist/tasenor-common-node/src/index.js.map +0 -1
  102. package/dist/tasenor-common-node/src/net/crypto.d.ts +0 -33
  103. package/dist/tasenor-common-node/src/net/crypto.js +0 -63
  104. package/dist/tasenor-common-node/src/net/crypto.js.map +0 -1
  105. package/dist/tasenor-common-node/src/net/git.d.ts +0 -49
  106. package/dist/tasenor-common-node/src/net/git.js +0 -137
  107. package/dist/tasenor-common-node/src/net/git.js.map +0 -1
  108. package/dist/tasenor-common-node/src/net/index.d.ts +0 -10
  109. package/dist/tasenor-common-node/src/net/index.js +0 -11
  110. package/dist/tasenor-common-node/src/net/index.js.map +0 -1
  111. package/dist/tasenor-common-node/src/net/middleware.d.ts +0 -61
  112. package/dist/tasenor-common-node/src/net/middleware.js +0 -220
  113. package/dist/tasenor-common-node/src/net/middleware.js.map +0 -1
  114. package/dist/tasenor-common-node/src/net/tokens.d.ts +0 -50
  115. package/dist/tasenor-common-node/src/net/tokens.js +0 -141
  116. package/dist/tasenor-common-node/src/net/tokens.js.map +0 -1
  117. package/dist/tasenor-common-node/src/net/vault.d.ts +0 -67
  118. package/dist/tasenor-common-node/src/net/vault.js +0 -145
  119. package/dist/tasenor-common-node/src/net/vault.js.map +0 -1
  120. package/dist/tasenor-common-node/src/plugins/BackendPlugin.d.ts +0 -91
  121. package/dist/tasenor-common-node/src/plugins/BackendPlugin.js +0 -165
  122. package/dist/tasenor-common-node/src/plugins/BackendPlugin.js.map +0 -1
  123. package/dist/tasenor-common-node/src/plugins/DataPlugin.d.ts +0 -13
  124. package/dist/tasenor-common-node/src/plugins/DataPlugin.js +0 -26
  125. package/dist/tasenor-common-node/src/plugins/DataPlugin.js.map +0 -1
  126. package/dist/tasenor-common-node/src/plugins/ImportPlugin.d.ts +0 -188
  127. package/dist/tasenor-common-node/src/plugins/ImportPlugin.js +0 -204
  128. package/dist/tasenor-common-node/src/plugins/ImportPlugin.js.map +0 -1
  129. package/dist/tasenor-common-node/src/plugins/ReportPlugin.d.ts +0 -132
  130. package/dist/tasenor-common-node/src/plugins/ReportPlugin.js +0 -393
  131. package/dist/tasenor-common-node/src/plugins/ReportPlugin.js.map +0 -1
  132. package/dist/tasenor-common-node/src/plugins/SchemePlugin.d.ts +0 -34
  133. package/dist/tasenor-common-node/src/plugins/SchemePlugin.js +0 -47
  134. package/dist/tasenor-common-node/src/plugins/SchemePlugin.js.map +0 -1
  135. package/dist/tasenor-common-node/src/plugins/ServicePlugin.d.ts +0 -80
  136. package/dist/tasenor-common-node/src/plugins/ServicePlugin.js +0 -168
  137. package/dist/tasenor-common-node/src/plugins/ServicePlugin.js.map +0 -1
  138. package/dist/tasenor-common-node/src/plugins/ToolPlugin.d.ts +0 -27
  139. package/dist/tasenor-common-node/src/plugins/ToolPlugin.js +0 -37
  140. package/dist/tasenor-common-node/src/plugins/ToolPlugin.js.map +0 -1
  141. package/dist/tasenor-common-node/src/plugins/index.d.ts +0 -13
  142. package/dist/tasenor-common-node/src/plugins/index.js +0 -14
  143. package/dist/tasenor-common-node/src/plugins/index.js.map +0 -1
  144. package/dist/tasenor-common-node/src/plugins/plugins.d.ts +0 -101
  145. package/dist/tasenor-common-node/src/plugins/plugins.js +0 -292
  146. package/dist/tasenor-common-node/src/plugins/plugins.js.map +0 -1
  147. package/dist/tasenor-common-node/src/process/Process.d.ts +0 -108
  148. package/dist/tasenor-common-node/src/process/Process.js +0 -335
  149. package/dist/tasenor-common-node/src/process/Process.js.map +0 -1
  150. package/dist/tasenor-common-node/src/process/ProcessConnector.d.ts +0 -24
  151. package/dist/tasenor-common-node/src/process/ProcessConnector.js +0 -28
  152. package/dist/tasenor-common-node/src/process/ProcessConnector.js.map +0 -1
  153. package/dist/tasenor-common-node/src/process/ProcessFile.d.ts +0 -69
  154. package/dist/tasenor-common-node/src/process/ProcessFile.js +0 -145
  155. package/dist/tasenor-common-node/src/process/ProcessFile.js.map +0 -1
  156. package/dist/tasenor-common-node/src/process/ProcessHandler.d.ts +0 -60
  157. package/dist/tasenor-common-node/src/process/ProcessHandler.js +0 -73
  158. package/dist/tasenor-common-node/src/process/ProcessHandler.js.map +0 -1
  159. package/dist/tasenor-common-node/src/process/ProcessStep.d.ts +0 -52
  160. package/dist/tasenor-common-node/src/process/ProcessStep.js +0 -78
  161. package/dist/tasenor-common-node/src/process/ProcessStep.js.map +0 -1
  162. package/dist/tasenor-common-node/src/process/ProcessingSystem.d.ts +0 -60
  163. package/dist/tasenor-common-node/src/process/ProcessingSystem.js +0 -182
  164. package/dist/tasenor-common-node/src/process/ProcessingSystem.js.map +0 -1
  165. package/dist/tasenor-common-node/src/process/index.d.ts +0 -11
  166. package/dist/tasenor-common-node/src/process/index.js +0 -12
  167. package/dist/tasenor-common-node/src/process/index.js.map +0 -1
  168. package/dist/tasenor-common-node/src/reports/conversions.d.ts +0 -8
  169. package/dist/tasenor-common-node/src/reports/conversions.js +0 -47
  170. package/dist/tasenor-common-node/src/reports/conversions.js.map +0 -1
  171. package/dist/tasenor-common-node/src/reports/index.d.ts +0 -6
  172. package/dist/tasenor-common-node/src/reports/index.js +0 -7
  173. package/dist/tasenor-common-node/src/reports/index.js.map +0 -1
  174. package/dist/tasenor-common-node/src/server/ISPDemoServer.d.ts +0 -43
  175. package/dist/tasenor-common-node/src/server/ISPDemoServer.js +0 -112
  176. package/dist/tasenor-common-node/src/server/ISPDemoServer.js.map +0 -1
  177. package/dist/tasenor-common-node/src/server/api.d.ts +0 -15
  178. package/dist/tasenor-common-node/src/server/api.js +0 -27
  179. package/dist/tasenor-common-node/src/server/api.js.map +0 -1
  180. package/dist/tasenor-common-node/src/server/index.d.ts +0 -7
  181. package/dist/tasenor-common-node/src/server/index.js +0 -8
  182. package/dist/tasenor-common-node/src/server/index.js.map +0 -1
  183. package/dist/tasenor-common-node/src/server/router.d.ts +0 -5
  184. package/dist/tasenor-common-node/src/server/router.js +0 -37
  185. package/dist/tasenor-common-node/src/server/router.js.map +0 -1
  186. package/dist/tasenor-common-node/src/system.d.ts +0 -27
  187. package/dist/tasenor-common-node/src/system.js +0 -95
  188. package/dist/tasenor-common-node/src/system.js.map +0 -1
  189. package/dist/tasenor-common-node/src/testing/ProcessingSystemMock.d.ts +0 -21
  190. package/dist/tasenor-common-node/src/testing/ProcessingSystemMock.js +0 -33
  191. package/dist/tasenor-common-node/src/testing/ProcessingSystemMock.js.map +0 -1
  192. package/dist/tasenor-common-node/src/testing/UnitTestImportConnector.d.ts +0 -24
  193. package/dist/tasenor-common-node/src/testing/UnitTestImportConnector.js +0 -68
  194. package/dist/tasenor-common-node/src/testing/UnitTestImportConnector.js.map +0 -1
  195. package/dist/tasenor-common-node/src/testing/UnitTester.d.ts +0 -64
  196. package/dist/tasenor-common-node/src/testing/UnitTester.js +0 -199
  197. package/dist/tasenor-common-node/src/testing/UnitTester.js.map +0 -1
  198. package/dist/tasenor-common-node/src/testing/index.d.ts +0 -4
  199. package/dist/tasenor-common-node/src/testing/index.js +0 -5
  200. package/dist/tasenor-common-node/src/testing/index.js.map +0 -1
  201. package/dist/tasenor-common-node/src/testing/test-handlers.d.ts +0 -13
  202. package/dist/tasenor-common-node/src/testing/test-handlers.js +0 -44
  203. package/dist/tasenor-common-node/src/testing/test-handlers.js.map +0 -1
  204. package/dist/tasenor-common-node/tests/TransactionRules.spec.d.ts +0 -1
  205. package/dist/tasenor-common-node/tests/TransactionRules.spec.js +0 -64
  206. package/dist/tasenor-common-node/tests/TransactionRules.spec.js.map +0 -1
  207. package/dist/tasenor-common-node/tests/TransferAnalyzer-account-address.spec.d.ts +0 -1
  208. package/dist/tasenor-common-node/tests/TransferAnalyzer-account-address.spec.js +0 -80
  209. package/dist/tasenor-common-node/tests/TransferAnalyzer-account-address.spec.js.map +0 -1
  210. package/dist/tasenor-common-node/tests/TransferAnalyzer-buying-and-selling.spec.d.ts +0 -1
  211. package/dist/tasenor-common-node/tests/TransferAnalyzer-buying-and-selling.spec.js +0 -342
  212. package/dist/tasenor-common-node/tests/TransferAnalyzer-buying-and-selling.spec.js.map +0 -1
  213. package/dist/tasenor-common-node/tests/TransferAnalyzer-loans.spec.d.ts +0 -1
  214. package/dist/tasenor-common-node/tests/TransferAnalyzer-loans.spec.js +0 -174
  215. package/dist/tasenor-common-node/tests/TransferAnalyzer-loans.spec.js.map +0 -1
  216. package/dist/tasenor-common-node/tests/TransferAnalyzer-multiple-null-amounts.spec.d.ts +0 -1
  217. package/dist/tasenor-common-node/tests/TransferAnalyzer-multiple-null-amounts.spec.js +0 -175
  218. package/dist/tasenor-common-node/tests/TransferAnalyzer-multiple-null-amounts.spec.js.map +0 -1
  219. package/dist/tasenor-common-node/tests/password.spec.d.ts +0 -1
  220. package/dist/tasenor-common-node/tests/password.spec.js +0 -8
  221. package/dist/tasenor-common-node/tests/password.spec.js.map +0 -1
  222. package/dist/tasenor-common-node/tests/tokens.spec.d.ts +0 -1
  223. package/dist/tasenor-common-node/tests/tokens.spec.js +0 -49
  224. package/dist/tasenor-common-node/tests/tokens.spec.js.map +0 -1
  225. package/dist/tasenor-common-node/tests/vault.spec.d.ts +0 -1
  226. package/dist/tasenor-common-node/tests/vault.spec.js +0 -19
  227. package/dist/tasenor-common-node/tests/vault.spec.js.map +0 -1
  228. package/dist/tasenor-common-plugins/src/CoinbaseImport/backend/CoinbaseHandler.d.ts +0 -11
  229. package/dist/tasenor-common-plugins/src/CoinbaseImport/backend/CoinbaseHandler.js +0 -30
  230. package/dist/tasenor-common-plugins/src/CoinbaseImport/backend/CoinbaseHandler.js.map +0 -1
  231. package/dist/tasenor-common-plugins/src/IncomeAndExpenses/backend/index.d.ts +0 -5
  232. package/dist/tasenor-common-plugins/src/IncomeAndExpenses/backend/index.js +0 -350
  233. package/dist/tasenor-common-plugins/src/IncomeAndExpenses/backend/index.js.map +0 -1
  234. package/dist/tasenor-common-plugins/src/KrakenImport/backend/KrakenHandler.d.ts +0 -23
  235. package/dist/tasenor-common-plugins/src/KrakenImport/backend/KrakenHandler.js +0 -83
  236. package/dist/tasenor-common-plugins/src/KrakenImport/backend/KrakenHandler.js.map +0 -1
  237. package/dist/tasenor-common-plugins/src/LynxImport/backend/LynxHandler.d.ts +0 -28
  238. package/dist/tasenor-common-plugins/src/LynxImport/backend/LynxHandler.js +0 -340
  239. package/dist/tasenor-common-plugins/src/LynxImport/backend/LynxHandler.js.map +0 -1
  240. package/dist/tasenor-common-plugins/src/NordeaImport/backend/NordeaHandler.d.ts +0 -11
  241. package/dist/tasenor-common-plugins/src/NordeaImport/backend/NordeaHandler.js +0 -39
  242. package/dist/tasenor-common-plugins/src/NordeaImport/backend/NordeaHandler.js.map +0 -1
  243. package/dist/tasenor-common-plugins/src/NordnetImport/backend/NordnetHandler.d.ts +0 -17
  244. package/dist/tasenor-common-plugins/src/NordnetImport/backend/NordnetHandler.js +0 -66
  245. package/dist/tasenor-common-plugins/src/NordnetImport/backend/NordnetHandler.js.map +0 -1
  246. package/dist/tasenor-common-plugins/src/TITOImport/backend/TITOHandler.d.ts +0 -13
  247. package/dist/tasenor-common-plugins/src/TITOImport/backend/TITOHandler.js +0 -241
  248. package/dist/tasenor-common-plugins/src/TITOImport/backend/TITOHandler.js.map +0 -1
@@ -1,191 +0,0 @@
1
- import { AccountModelData, AccountNumber, ImporterModelData, TasenorPlugin, FilePath, PeriodModelData, ShortDate, TagModelData, ID } from '@tasenor/common';
2
- import { ArgumentParser } from 'argparse';
3
- import FormData from 'form-data';
4
- export type CommandArgument = string | null | undefined | string[];
5
- /**
6
- * Argument container type for commands.
7
- */
8
- export type CommandArguments = Record<string, CommandArgument>;
9
- /**
10
- * Definition of argument name, corresponding environment variable and default value.
11
- */
12
- export type CommandArgumentDefault = {
13
- name: string;
14
- envName: string;
15
- defaultValue: string;
16
- };
17
- /**
18
- * Data for creating entries.
19
- */
20
- export type CommandEntryData = {
21
- account_id: ID;
22
- number?: AccountNumber;
23
- amount: number;
24
- description: string;
25
- data?: Record<string, unknown>;
26
- };
27
- /**
28
- * A command implementation base class.
29
- */
30
- export declare class Command {
31
- protected cli: any;
32
- protected accounts: Record<AccountNumber, AccountModelData>;
33
- protected accountsById: Record<number, AccountModelData>;
34
- protected plugins: TasenorPlugin[];
35
- protected importers: ImporterModelData[];
36
- protected args: CommandArguments;
37
- constructor(cli: any);
38
- get verbose(): boolean;
39
- get debug(): boolean;
40
- /**
41
- * Add command specific arguments.
42
- * @param parser
43
- */
44
- addArguments(parser: ArgumentParser): void;
45
- /**
46
- * Set command arguments.
47
- * @param args
48
- */
49
- setArgs(args: CommandArguments): void;
50
- /**
51
- * Default output.
52
- * @param data
53
- */
54
- print(data: unknown): void;
55
- /**
56
- * Print out data structure according to the selected options.
57
- * @param data
58
- */
59
- out(prefix: any, data: any): void;
60
- /**
61
- * Entry point for running the command.
62
- * @param args
63
- */
64
- run(): Promise<void>;
65
- /**
66
- * Construct a form data instance for a file.
67
- * @param filePath
68
- * @returns
69
- */
70
- formForFile(filePath: FilePath): FormData;
71
- /**
72
- * Call the GET API.
73
- * @param api
74
- */
75
- get<T>(api: string): Promise<T>;
76
- /**
77
- * Call the GET UI API.
78
- * @param api
79
- */
80
- getUi<T>(api: string): Promise<T>;
81
- /**
82
- * Call the DELETE API.
83
- * @param api
84
- */
85
- delete<T>(api: string): Promise<T>;
86
- /**
87
- * Call the DELETE API.
88
- * @param api
89
- */
90
- deleteUi<T>(api: string, args?: Record<string, unknown> | undefined): Promise<T>;
91
- /**
92
- * Call the PATCH API.
93
- * @param api
94
- */
95
- patch<T>(api: string, data: FormData | Record<string, unknown>): Promise<T>;
96
- /**
97
- * Call the POST API.
98
- * @param api
99
- */
100
- post<T>(api: string, data: FormData | Record<string, unknown>): Promise<T>;
101
- /**
102
- * Call the POST UI API.
103
- * @param api
104
- */
105
- postUi<T>(api: string, data: FormData | Record<string, unknown>): Promise<T>;
106
- /**
107
- * An alternative POST call to upload file, when its path is known.
108
- * @param api
109
- * @param filePath
110
- * @returns
111
- */
112
- postUpload<T>(api: string, filePath: FilePath): Promise<T>;
113
- /**
114
- * Download URL to a file.
115
- */
116
- getDownload(api: string, filePath: FilePath): Promise<void>;
117
- /**
118
- * Execute member function based on the given argument.
119
- */
120
- runBy(op: string): Promise<void>;
121
- /**
122
- * Ensure string argument.
123
- * @param arg
124
- */
125
- str(arg: CommandArgument): string;
126
- /**
127
- * Ensure numeric argument.
128
- * @param arg
129
- */
130
- num(arg: CommandArgument): number;
131
- /**
132
- * Convert year, date or number to period ID.
133
- * @param arg
134
- */
135
- periodId(db: CommandArgument, periodArg: CommandArgument): Promise<ID>;
136
- /**
137
- * Ensure that there is only one period in the DB and return its ID.
138
- * @param dbArg
139
- * @returns
140
- */
141
- singlePeriod(dbArg: CommandArgument): Promise<PeriodModelData>;
142
- /**
143
- * Read in accounts if not yet read.
144
- */
145
- readAccounts(dbArg: CommandArgument): Promise<void>;
146
- /**
147
- * Verify that the given number is valid account and return its ID.
148
- * @param dbArg
149
- * @param accountArg
150
- */
151
- accountId(dbArg: CommandArgument, accountArg: CommandArgument): Promise<ID>;
152
- /**
153
- * Verify that argument is one or more entry descriptions.
154
- * @param entryArg
155
- */
156
- entries(dbArg: CommandArgument, entryArg: CommandArgument): Promise<CommandEntryData[]>;
157
- /**
158
- * Verify that the argument is proper date.
159
- * @param date
160
- */
161
- date(dateArg: CommandArgument): ShortDate;
162
- /**
163
- * Heuristically parse string to JSON value or string if not parseable.
164
- * @param value
165
- */
166
- value(value: CommandArgument): unknown;
167
- /**
168
- * Parse either direct JSON data argument or read in file, if string starts with `@`.
169
- * @param data
170
- */
171
- jsonData(dataArg: CommandArgument): Promise<Record<string, unknown>>;
172
- /**
173
- * Read in plugin data if not yet read and return info about the plugin.
174
- * @param pluginArg
175
- */
176
- plugin(pluginArg: CommandArgument): Promise<TasenorPlugin | TasenorPlugin[]>;
177
- /**
178
- * Get the importer.
179
- * @param nameArg
180
- */
181
- importer(dbArg: CommandArgument, nameArg: CommandArgument): Promise<ImporterModelData>;
182
- /**
183
- * Find the named tag or throw an error.
184
- * @param name
185
- */
186
- tag(db: CommandArgument, name: CommandArgument): Promise<TagModelData>;
187
- /**
188
- * Show help.
189
- */
190
- help(): void;
191
- }
@@ -1,482 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import FormData from 'form-data';
4
- import axios from 'axios';
5
- /**
6
- * A command implementation base class.
7
- */
8
- export class Command {
9
- cli;
10
- accounts;
11
- accountsById;
12
- plugins;
13
- importers;
14
- args;
15
- constructor(cli) {
16
- this.cli = cli;
17
- }
18
- get verbose() {
19
- return !!this.args.verbose;
20
- }
21
- get debug() {
22
- return !!this.args.debug;
23
- }
24
- /**
25
- * Add command specific arguments.
26
- * @param parser
27
- */
28
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
29
- addArguments(parser) {
30
- // Command subclass implements.
31
- }
32
- /**
33
- * Set command arguments.
34
- * @param args
35
- */
36
- setArgs(args) {
37
- this.args = args;
38
- }
39
- /**
40
- * Default output.
41
- * @param data
42
- */
43
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
44
- print(data) {
45
- throw new Error(`Class ${this.constructor.name} does not implement print().`);
46
- }
47
- /**
48
- * Print out data structure according to the selected options.
49
- * @param data
50
- */
51
- out(prefix, data) {
52
- if (this.args.json) {
53
- console.log(JSON.stringify(data, null, 2));
54
- }
55
- else {
56
- if (!this.verbose) {
57
- try {
58
- this.print(data);
59
- return;
60
- }
61
- catch (err) {
62
- // If not implemented, do default verbose output.
63
- if (!/does not implement print/.test(`${err}`)) {
64
- throw err;
65
- }
66
- }
67
- }
68
- const print = (prefix, obj) => {
69
- if (typeof obj === 'object') {
70
- if (obj === null) {
71
- console.log(`${prefix} = null`);
72
- }
73
- else if (obj instanceof Array) {
74
- for (let i = 0; i < obj.length; i++) {
75
- console.log(`${prefix}[${i}]`);
76
- print(` ${prefix}[${i}]`, obj[i]);
77
- }
78
- }
79
- else {
80
- for (const key of Object.keys(obj)) {
81
- print(` ${prefix}.${key}`, obj[key]);
82
- }
83
- }
84
- }
85
- else {
86
- console.log(`${prefix} =`, obj);
87
- }
88
- };
89
- print(prefix, data);
90
- }
91
- }
92
- /**
93
- * Entry point for running the command.
94
- * @param args
95
- */
96
- async run() {
97
- throw new Error(`A command ${this.constructor.name} does not implement run().`);
98
- }
99
- /**
100
- * Construct a form data instance for a file.
101
- * @param filePath
102
- * @returns
103
- */
104
- formForFile(filePath) {
105
- const form = new FormData();
106
- const buf = fs.readFileSync(filePath);
107
- form.append('file', buf, path.basename(filePath));
108
- return form;
109
- }
110
- /**
111
- * Call the GET API.
112
- * @param api
113
- */
114
- async get(api) {
115
- await this.cli.login();
116
- const resp = await this.cli.request('GET', api);
117
- if (!resp.success) {
118
- throw new Error(`Call to GET ${api} failed: ${JSON.stringify(resp)}`);
119
- }
120
- return resp.data;
121
- }
122
- /**
123
- * Call the GET UI API.
124
- * @param api
125
- */
126
- async getUi(api) {
127
- await this.cli.login();
128
- const resp = await this.cli.requestUi('GET', api);
129
- if (!resp.success) {
130
- throw new Error(`Call to GET UI ${api} failed: ${JSON.stringify(resp)}`);
131
- }
132
- return resp.data;
133
- }
134
- /**
135
- * Call the DELETE API.
136
- * @param api
137
- */
138
- async delete(api) {
139
- await this.cli.login();
140
- const resp = await this.cli.request('DELETE', api);
141
- if (!resp.success) {
142
- throw new Error(`Call to DELETE ${api} failed: ${JSON.stringify(resp)}`);
143
- }
144
- return resp.data;
145
- }
146
- /**
147
- * Call the DELETE API.
148
- * @param api
149
- */
150
- async deleteUi(api, args = undefined) {
151
- await this.cli.login();
152
- const resp = await this.cli.requestUi('DELETE', api, args);
153
- if (!resp.success) {
154
- throw new Error(`Call to DELETE UI ${api} failed: ${JSON.stringify(resp)}`);
155
- }
156
- return resp.data;
157
- }
158
- /**
159
- * Call the PATCH API.
160
- * @param api
161
- */
162
- async patch(api, data) {
163
- await this.cli.login();
164
- const resp = await this.cli.request('PATCH', api, data);
165
- if (!resp.success) {
166
- throw new Error(`Call to PATCH ${api} failed: ${JSON.stringify(resp)}`);
167
- }
168
- return resp.data;
169
- }
170
- /**
171
- * Call the POST API.
172
- * @param api
173
- */
174
- async post(api, data) {
175
- await this.cli.login();
176
- const resp = await this.cli.request('POST', api, data);
177
- if (!resp.success) {
178
- throw new Error(`Call to POST ${api} failed: ${JSON.stringify(resp)}`);
179
- }
180
- return resp.data;
181
- }
182
- /**
183
- * Call the POST UI API.
184
- * @param api
185
- */
186
- async postUi(api, data) {
187
- await this.cli.login();
188
- const resp = await this.cli.requestUi('POST', api, data);
189
- if (!resp.success) {
190
- throw new Error(`Call to POST UI ${api} failed: ${JSON.stringify(resp)}`);
191
- }
192
- return resp.data;
193
- }
194
- /**
195
- * An alternative POST call to upload file, when its path is known.
196
- * @param api
197
- * @param filePath
198
- * @returns
199
- */
200
- async postUpload(api, filePath) {
201
- const form = this.formForFile(filePath);
202
- return this.post(api, form);
203
- }
204
- /**
205
- * Download URL to a file.
206
- */
207
- async getDownload(api, filePath) {
208
- await this.cli.login();
209
- const resp = await axios({
210
- url: `${this.cli.api}${api}`,
211
- method: 'GET',
212
- responseType: 'arraybuffer',
213
- headers: {
214
- Authorization: `Bearer ${this.cli.token}`
215
- }
216
- });
217
- fs.writeFileSync(filePath, resp.data);
218
- }
219
- /**
220
- * Execute member function based on the given argument.
221
- */
222
- async runBy(op) {
223
- const cmd = this.args[op];
224
- if (!cmd) {
225
- this.help();
226
- return;
227
- }
228
- if (typeof cmd !== 'string') {
229
- throw new Error(`Invalid operation argument ${JSON.stringify(cmd)}.`);
230
- }
231
- if (!this[cmd]) {
232
- console.log(this[cmd]);
233
- throw new Error(`There is no member function '${cmd}' in command class '${this.constructor.name}'.`);
234
- }
235
- await this[cmd]();
236
- }
237
- /**
238
- * Ensure string argument.
239
- * @param arg
240
- */
241
- str(arg) {
242
- if (arg === null || arg === undefined) {
243
- return '';
244
- }
245
- if (typeof arg === 'string') {
246
- return arg;
247
- }
248
- return arg[0];
249
- }
250
- /**
251
- * Ensure numeric argument.
252
- * @param arg
253
- */
254
- num(arg) {
255
- if (arg === null || arg === undefined) {
256
- return 0;
257
- }
258
- return parseFloat(this.str(arg));
259
- }
260
- /**
261
- * Convert year, date or number to period ID.
262
- * @param arg
263
- */
264
- async periodId(db, periodArg) {
265
- if (!db) {
266
- throw new Error(`Invalid database argument ${JSON.stringify(db)}`);
267
- }
268
- const period = this.str(periodArg);
269
- if (!period) {
270
- throw new Error(`Invalid period argument ${JSON.stringify(period)}`);
271
- }
272
- let periods = await this.get(`/db/${db}/period`);
273
- if (/^\d{4}$/.test(period)) {
274
- const date = `${period}-06-15`;
275
- periods = periods.filter(p => p.start_date <= date && date <= p.end_date);
276
- }
277
- else if (/^\d{4}-\d{2}-\d{2}$/.test(period)) {
278
- periods = periods.filter(p => p.start_date <= period && period <= p.end_date);
279
- }
280
- else if (/^\d+$/.test(period)) {
281
- const id = parseInt(period);
282
- periods = periods.filter(p => p.id === id);
283
- }
284
- else {
285
- throw new Error(`Invalid period argument ${JSON.stringify(period)}`);
286
- }
287
- if (periods.length > 1) {
288
- throw new Error(`Too many periods match to ${JSON.stringify(period)}`);
289
- }
290
- if (!periods.length) {
291
- throw new Error(`No periods found matching ${JSON.stringify(period)}`);
292
- }
293
- return periods[0].id;
294
- }
295
- /**
296
- * Ensure that there is only one period in the DB and return its ID.
297
- * @param dbArg
298
- * @returns
299
- */
300
- async singlePeriod(dbArg) {
301
- const period = await this.get(`/db/${this.str(dbArg)}/period`);
302
- if (period.length < 1) {
303
- throw new Error('There are no periods in the database.');
304
- }
305
- if (period.length > 1) {
306
- throw new Error('There are too many periods in the database to set initial balance.');
307
- }
308
- return period[0];
309
- }
310
- /**
311
- * Read in accounts if not yet read.
312
- */
313
- async readAccounts(dbArg) {
314
- if (!this.accounts) {
315
- this.accounts = {};
316
- this.accountsById = {};
317
- const accounts = await this.get(`/db/${this.str(dbArg)}/account`);
318
- for (const account of accounts) {
319
- this.accounts[account.number] = account;
320
- this.accountsById[account.id || 0] = account;
321
- }
322
- }
323
- }
324
- /**
325
- * Verify that the given number is valid account and return its ID.
326
- * @param dbArg
327
- * @param accountArg
328
- */
329
- async accountId(dbArg, accountArg) {
330
- await this.readAccounts(dbArg);
331
- const num = this.str(accountArg);
332
- if (!this.accounts[num]) {
333
- throw new Error(`No account found matching ${JSON.stringify(accountArg)}`);
334
- }
335
- return this.accounts[num].id;
336
- }
337
- /**
338
- * Verify that argument is one or more entry descriptions.
339
- * @param entryArg
340
- */
341
- async entries(dbArg, entryArg) {
342
- if (!entryArg) {
343
- throw new Error(`Invalid entry argument ${JSON.stringify(entryArg)}.`);
344
- }
345
- const entry = typeof entryArg === 'string' ? [entryArg] : entryArg;
346
- const ret = [];
347
- for (const e of entry) {
348
- const match = /^\s*(\d+)\s+(.+?)\s+([-+]?\d+([,.]\d+)?)(\s+\{.*\})?$/.exec(e);
349
- if (!match) {
350
- throw new Error(`Invalid transaction line ${JSON.stringify(e)}`);
351
- }
352
- const amount = Math.round(parseFloat(match[3].replace(',', '.')) * 100);
353
- let data;
354
- if (match[5]) {
355
- try {
356
- data = JSON.parse(match[5]);
357
- }
358
- catch (e) {
359
- throw new Error(`Parsing JSON '${match[5]}' failed.`);
360
- }
361
- }
362
- ret.push({
363
- account_id: await this.accountId(dbArg, match[1]),
364
- number: match[1],
365
- amount,
366
- description: match[2],
367
- data
368
- });
369
- }
370
- return ret;
371
- }
372
- /**
373
- * Verify that the argument is proper date.
374
- * @param date
375
- */
376
- date(dateArg) {
377
- const date = this.str(dateArg);
378
- if (!date || !/^\d{4}-\d{2}-\d{2}$/.test(date)) {
379
- throw new Error(`Invalid date argument ${JSON.stringify(dateArg)}`);
380
- }
381
- return date;
382
- }
383
- /**
384
- * Heuristically parse string to JSON value or string if not parseable.
385
- * @param value
386
- */
387
- value(value) {
388
- value = this.str(value);
389
- try {
390
- return JSON.parse(value);
391
- }
392
- catch (err) {
393
- return value;
394
- }
395
- }
396
- /**
397
- * Parse either direct JSON data argument or read in file, if string starts with `@`.
398
- * @param data
399
- */
400
- async jsonData(dataArg) {
401
- if (dataArg instanceof Array) {
402
- const ret = {};
403
- for (const data of dataArg) {
404
- Object.assign(ret, await this.jsonData(data));
405
- }
406
- return ret;
407
- }
408
- if (!dataArg || typeof dataArg !== 'string') {
409
- throw new Error(`Invalid JSON data argument ${JSON.stringify(dataArg)}.`);
410
- }
411
- let data;
412
- if (dataArg[0] === '@') {
413
- data = fs.readFileSync(dataArg.substring(1)).toString('utf-8');
414
- }
415
- else {
416
- data = dataArg;
417
- }
418
- try {
419
- return JSON.parse(data);
420
- }
421
- catch (err) {
422
- throw new Error(`Failed to parse JSON ${data.substr(0, 1000)}.`);
423
- }
424
- }
425
- /**
426
- * Read in plugin data if not yet read and return info about the plugin.
427
- * @param pluginArg
428
- */
429
- async plugin(pluginArg) {
430
- if (!this.plugins) {
431
- this.plugins = await this.getUi('/internal/plugins');
432
- }
433
- if (pluginArg instanceof Array) {
434
- const result = [];
435
- for (const plugin of pluginArg) {
436
- result.push(await this.plugin(plugin));
437
- }
438
- return result;
439
- }
440
- const code = this.str(pluginArg);
441
- const plugin = this.plugins.filter(p => p.code === code);
442
- if (!plugin.length) {
443
- throw new Error(`Cannot find plugin '${code}'.`);
444
- }
445
- return plugin[0];
446
- }
447
- /**
448
- * Get the importer.
449
- * @param nameArg
450
- */
451
- async importer(dbArg, nameArg) {
452
- if (!this.importers) {
453
- this.importers = await this.get(`/db/${this.str(dbArg)}/importer`);
454
- }
455
- const name = this.str(nameArg);
456
- const importer = this.importers.filter(p => p.name === name);
457
- if (!importer.length) {
458
- throw new Error(`Cannot find importer '${name}'.`);
459
- }
460
- return importer[0];
461
- }
462
- /**
463
- * Find the named tag or throw an error.
464
- * @param name
465
- */
466
- async tag(db, name) {
467
- const resp = await this.get(`/db/${db}/tags`);
468
- const match = resp.filter(tag => tag.tag === name);
469
- if (!match.length) {
470
- throw new Error(`Cannot find a tag '${name}.`);
471
- }
472
- return match[0];
473
- }
474
- /**
475
- * Show help.
476
- */
477
- help() {
478
- const args = this.cli.originalArgs.concat(['-h']);
479
- this.cli.run([], args);
480
- }
481
- }
482
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/index.ts"],"names":[],"mappings":"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"}