@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.
Files changed (326) hide show
  1. package/.eslintrc.js +4 -0
  2. package/LICENSE +21 -0
  3. package/dist/tasenor-common-node/src/cli.d.ts +81 -0
  4. package/dist/tasenor-common-node/src/cli.js +242 -0
  5. package/dist/tasenor-common-node/src/cli.js.map +1 -0
  6. package/dist/tasenor-common-node/src/commands/account.d.ts +12 -0
  7. package/dist/tasenor-common-node/src/commands/account.js +58 -0
  8. package/dist/tasenor-common-node/src/commands/account.js.map +1 -0
  9. package/dist/tasenor-common-node/src/commands/balance.d.ts +11 -0
  10. package/dist/tasenor-common-node/src/commands/balance.js +117 -0
  11. package/dist/tasenor-common-node/src/commands/balance.js.map +1 -0
  12. package/dist/tasenor-common-node/src/commands/db.d.ts +14 -0
  13. package/dist/tasenor-common-node/src/commands/db.js +69 -0
  14. package/dist/tasenor-common-node/src/commands/db.js.map +1 -0
  15. package/dist/tasenor-common-node/src/commands/entry.d.ts +13 -0
  16. package/dist/tasenor-common-node/src/commands/entry.js +106 -0
  17. package/dist/tasenor-common-node/src/commands/entry.js.map +1 -0
  18. package/dist/tasenor-common-node/src/commands/import.d.ts +17 -0
  19. package/dist/tasenor-common-node/src/commands/import.js +140 -0
  20. package/dist/tasenor-common-node/src/commands/import.js.map +1 -0
  21. package/dist/tasenor-common-node/src/commands/importer.d.ts +13 -0
  22. package/dist/tasenor-common-node/src/commands/importer.js +71 -0
  23. package/dist/tasenor-common-node/src/commands/importer.js.map +1 -0
  24. package/dist/tasenor-common-node/src/commands/index.d.ts +191 -0
  25. package/dist/tasenor-common-node/src/commands/index.js +482 -0
  26. package/dist/tasenor-common-node/src/commands/index.js.map +1 -0
  27. package/dist/tasenor-common-node/src/commands/period.d.ts +12 -0
  28. package/dist/tasenor-common-node/src/commands/period.js +48 -0
  29. package/dist/tasenor-common-node/src/commands/period.js.map +1 -0
  30. package/dist/tasenor-common-node/src/commands/plugin.d.ts +15 -0
  31. package/dist/tasenor-common-node/src/commands/plugin.js +78 -0
  32. package/dist/tasenor-common-node/src/commands/plugin.js.map +1 -0
  33. package/dist/tasenor-common-node/src/commands/report.d.ts +11 -0
  34. package/dist/tasenor-common-node/src/commands/report.js +96 -0
  35. package/dist/tasenor-common-node/src/commands/report.js.map +1 -0
  36. package/dist/tasenor-common-node/src/commands/settings.d.ts +10 -0
  37. package/dist/tasenor-common-node/src/commands/settings.js +64 -0
  38. package/dist/tasenor-common-node/src/commands/settings.js.map +1 -0
  39. package/dist/tasenor-common-node/src/commands/stock.d.ts +8 -0
  40. package/dist/tasenor-common-node/src/commands/stock.js +73 -0
  41. package/dist/tasenor-common-node/src/commands/stock.js.map +1 -0
  42. package/dist/tasenor-common-node/src/commands/tag.d.ts +13 -0
  43. package/dist/tasenor-common-node/src/commands/tag.js +89 -0
  44. package/dist/tasenor-common-node/src/commands/tag.js.map +1 -0
  45. package/dist/tasenor-common-node/src/commands/tx.d.ts +12 -0
  46. package/dist/tasenor-common-node/src/commands/tx.js +81 -0
  47. package/dist/tasenor-common-node/src/commands/tx.js.map +1 -0
  48. package/dist/tasenor-common-node/src/commands/user.d.ts +12 -0
  49. package/dist/tasenor-common-node/src/commands/user.js +52 -0
  50. package/dist/tasenor-common-node/src/commands/user.js.map +1 -0
  51. package/dist/tasenor-common-node/src/database/BookkeeperImporter.d.ts +77 -0
  52. package/dist/tasenor-common-node/src/database/BookkeeperImporter.js +343 -0
  53. package/dist/tasenor-common-node/src/database/BookkeeperImporter.js.map +1 -0
  54. package/dist/tasenor-common-node/src/database/DB.d.ts +51 -0
  55. package/dist/tasenor-common-node/src/database/DB.js +354 -0
  56. package/dist/tasenor-common-node/src/database/DB.js.map +1 -0
  57. package/dist/tasenor-common-node/src/database/index.d.ts +7 -0
  58. package/dist/tasenor-common-node/src/database/index.js +8 -0
  59. package/dist/tasenor-common-node/src/database/index.js.map +1 -0
  60. package/dist/tasenor-common-node/src/doccer.d.ts +29 -0
  61. package/dist/tasenor-common-node/src/doccer.js +30 -0
  62. package/dist/tasenor-common-node/src/doccer.js.map +1 -0
  63. package/dist/tasenor-common-node/src/error.d.ts +30 -0
  64. package/dist/tasenor-common-node/src/error.js +35 -0
  65. package/dist/tasenor-common-node/src/error.js.map +1 -0
  66. package/dist/tasenor-common-node/src/export/Exporter.d.ts +69 -0
  67. package/dist/tasenor-common-node/src/export/Exporter.js +123 -0
  68. package/dist/tasenor-common-node/src/export/Exporter.js.map +1 -0
  69. package/dist/tasenor-common-node/src/export/TasenorExporter.d.ts +55 -0
  70. package/dist/tasenor-common-node/src/export/TasenorExporter.js +135 -0
  71. package/dist/tasenor-common-node/src/export/TasenorExporter.js.map +1 -0
  72. package/dist/tasenor-common-node/src/export/TilitinExporter.d.ts +71 -0
  73. package/dist/tasenor-common-node/src/export/TilitinExporter.js +290 -0
  74. package/dist/tasenor-common-node/src/export/TilitinExporter.js.map +1 -0
  75. package/dist/tasenor-common-node/src/export/index.d.ts +8 -0
  76. package/dist/tasenor-common-node/src/export/index.js +9 -0
  77. package/dist/tasenor-common-node/src/export/index.js.map +1 -0
  78. package/dist/tasenor-common-node/src/import/TextFileProcessHandler.d.ts +104 -0
  79. package/dist/tasenor-common-node/src/import/TextFileProcessHandler.js +354 -0
  80. package/dist/tasenor-common-node/src/import/TextFileProcessHandler.js.map +1 -0
  81. package/dist/tasenor-common-node/src/import/TransactionImportConnector.d.ts +38 -0
  82. package/dist/tasenor-common-node/src/import/TransactionImportConnector.js +27 -0
  83. package/dist/tasenor-common-node/src/import/TransactionImportConnector.js.map +1 -0
  84. package/dist/tasenor-common-node/src/import/TransactionImportHandler.d.ts +173 -0
  85. package/dist/tasenor-common-node/src/import/TransactionImportHandler.js +733 -0
  86. package/dist/tasenor-common-node/src/import/TransactionImportHandler.js.map +1 -0
  87. package/dist/tasenor-common-node/src/import/TransactionRules.d.ts +238 -0
  88. package/dist/tasenor-common-node/src/import/TransactionRules.js +522 -0
  89. package/dist/tasenor-common-node/src/import/TransactionRules.js.map +1 -0
  90. package/dist/tasenor-common-node/src/import/TransactionUI.d.ts +181 -0
  91. package/dist/tasenor-common-node/src/import/TransactionUI.js +482 -0
  92. package/dist/tasenor-common-node/src/import/TransactionUI.js.map +1 -0
  93. package/dist/tasenor-common-node/src/import/TransferAnalyzer.d.ts +324 -0
  94. package/dist/tasenor-common-node/src/import/TransferAnalyzer.js +1379 -0
  95. package/dist/tasenor-common-node/src/import/TransferAnalyzer.js.map +1 -0
  96. package/dist/tasenor-common-node/src/import/index.d.ts +11 -0
  97. package/dist/tasenor-common-node/src/import/index.js +12 -0
  98. package/dist/tasenor-common-node/src/import/index.js.map +1 -0
  99. package/dist/tasenor-common-node/src/index.d.ts +12 -0
  100. package/dist/tasenor-common-node/src/index.js +13 -0
  101. package/dist/tasenor-common-node/src/index.js.map +1 -0
  102. package/dist/tasenor-common-node/src/net/crypto.d.ts +33 -0
  103. package/dist/tasenor-common-node/src/net/crypto.js +63 -0
  104. package/dist/tasenor-common-node/src/net/crypto.js.map +1 -0
  105. package/dist/tasenor-common-node/src/net/git.d.ts +49 -0
  106. package/dist/tasenor-common-node/src/net/git.js +137 -0
  107. package/dist/tasenor-common-node/src/net/git.js.map +1 -0
  108. package/dist/tasenor-common-node/src/net/index.d.ts +10 -0
  109. package/dist/tasenor-common-node/src/net/index.js +11 -0
  110. package/dist/tasenor-common-node/src/net/index.js.map +1 -0
  111. package/dist/tasenor-common-node/src/net/middleware.d.ts +61 -0
  112. package/dist/tasenor-common-node/src/net/middleware.js +220 -0
  113. package/dist/tasenor-common-node/src/net/middleware.js.map +1 -0
  114. package/dist/tasenor-common-node/src/net/tokens.d.ts +50 -0
  115. package/dist/tasenor-common-node/src/net/tokens.js +141 -0
  116. package/dist/tasenor-common-node/src/net/tokens.js.map +1 -0
  117. package/dist/tasenor-common-node/src/net/vault.d.ts +67 -0
  118. package/dist/tasenor-common-node/src/net/vault.js +145 -0
  119. package/dist/tasenor-common-node/src/net/vault.js.map +1 -0
  120. package/dist/tasenor-common-node/src/plugins/BackendPlugin.d.ts +91 -0
  121. package/dist/tasenor-common-node/src/plugins/BackendPlugin.js +165 -0
  122. package/dist/tasenor-common-node/src/plugins/BackendPlugin.js.map +1 -0
  123. package/dist/tasenor-common-node/src/plugins/DataPlugin.d.ts +13 -0
  124. package/dist/tasenor-common-node/src/plugins/DataPlugin.js +26 -0
  125. package/dist/tasenor-common-node/src/plugins/DataPlugin.js.map +1 -0
  126. package/dist/tasenor-common-node/src/plugins/ImportPlugin.d.ts +188 -0
  127. package/dist/tasenor-common-node/src/plugins/ImportPlugin.js +204 -0
  128. package/dist/tasenor-common-node/src/plugins/ImportPlugin.js.map +1 -0
  129. package/dist/tasenor-common-node/src/plugins/ReportPlugin.d.ts +132 -0
  130. package/dist/tasenor-common-node/src/plugins/ReportPlugin.js +393 -0
  131. package/dist/tasenor-common-node/src/plugins/ReportPlugin.js.map +1 -0
  132. package/dist/tasenor-common-node/src/plugins/SchemePlugin.d.ts +34 -0
  133. package/dist/tasenor-common-node/src/plugins/SchemePlugin.js +47 -0
  134. package/dist/tasenor-common-node/src/plugins/SchemePlugin.js.map +1 -0
  135. package/dist/tasenor-common-node/src/plugins/ServicePlugin.d.ts +80 -0
  136. package/dist/tasenor-common-node/src/plugins/ServicePlugin.js +168 -0
  137. package/dist/tasenor-common-node/src/plugins/ServicePlugin.js.map +1 -0
  138. package/dist/tasenor-common-node/src/plugins/ToolPlugin.d.ts +27 -0
  139. package/dist/tasenor-common-node/src/plugins/ToolPlugin.js +37 -0
  140. package/dist/tasenor-common-node/src/plugins/ToolPlugin.js.map +1 -0
  141. package/dist/tasenor-common-node/src/plugins/index.d.ts +13 -0
  142. package/dist/tasenor-common-node/src/plugins/index.js +14 -0
  143. package/dist/tasenor-common-node/src/plugins/index.js.map +1 -0
  144. package/dist/tasenor-common-node/src/plugins/plugins.d.ts +101 -0
  145. package/dist/tasenor-common-node/src/plugins/plugins.js +292 -0
  146. package/dist/tasenor-common-node/src/plugins/plugins.js.map +1 -0
  147. package/dist/tasenor-common-node/src/process/Process.d.ts +108 -0
  148. package/dist/tasenor-common-node/src/process/Process.js +335 -0
  149. package/dist/tasenor-common-node/src/process/Process.js.map +1 -0
  150. package/dist/tasenor-common-node/src/process/ProcessConnector.d.ts +24 -0
  151. package/dist/tasenor-common-node/src/process/ProcessConnector.js +28 -0
  152. package/dist/tasenor-common-node/src/process/ProcessConnector.js.map +1 -0
  153. package/dist/tasenor-common-node/src/process/ProcessFile.d.ts +69 -0
  154. package/dist/tasenor-common-node/src/process/ProcessFile.js +145 -0
  155. package/dist/tasenor-common-node/src/process/ProcessFile.js.map +1 -0
  156. package/dist/tasenor-common-node/src/process/ProcessHandler.d.ts +60 -0
  157. package/dist/tasenor-common-node/src/process/ProcessHandler.js +73 -0
  158. package/dist/tasenor-common-node/src/process/ProcessHandler.js.map +1 -0
  159. package/dist/tasenor-common-node/src/process/ProcessStep.d.ts +52 -0
  160. package/dist/tasenor-common-node/src/process/ProcessStep.js +78 -0
  161. package/dist/tasenor-common-node/src/process/ProcessStep.js.map +1 -0
  162. package/dist/tasenor-common-node/src/process/ProcessingSystem.d.ts +60 -0
  163. package/dist/tasenor-common-node/src/process/ProcessingSystem.js +182 -0
  164. package/dist/tasenor-common-node/src/process/ProcessingSystem.js.map +1 -0
  165. package/dist/tasenor-common-node/src/process/index.d.ts +11 -0
  166. package/dist/tasenor-common-node/src/process/index.js +12 -0
  167. package/dist/tasenor-common-node/src/process/index.js.map +1 -0
  168. package/dist/tasenor-common-node/src/reports/conversions.d.ts +8 -0
  169. package/dist/tasenor-common-node/src/reports/conversions.js +47 -0
  170. package/dist/tasenor-common-node/src/reports/conversions.js.map +1 -0
  171. package/dist/tasenor-common-node/src/reports/index.d.ts +6 -0
  172. package/dist/tasenor-common-node/src/reports/index.js +7 -0
  173. package/dist/tasenor-common-node/src/reports/index.js.map +1 -0
  174. package/dist/tasenor-common-node/src/server/ISPDemoServer.d.ts +43 -0
  175. package/dist/tasenor-common-node/src/server/ISPDemoServer.js +112 -0
  176. package/dist/tasenor-common-node/src/server/ISPDemoServer.js.map +1 -0
  177. package/dist/tasenor-common-node/src/server/api.d.ts +15 -0
  178. package/dist/tasenor-common-node/src/server/api.js +27 -0
  179. package/dist/tasenor-common-node/src/server/api.js.map +1 -0
  180. package/dist/tasenor-common-node/src/server/index.d.ts +7 -0
  181. package/dist/tasenor-common-node/src/server/index.js +8 -0
  182. package/dist/tasenor-common-node/src/server/index.js.map +1 -0
  183. package/dist/tasenor-common-node/src/server/router.d.ts +5 -0
  184. package/dist/tasenor-common-node/src/server/router.js +37 -0
  185. package/dist/tasenor-common-node/src/server/router.js.map +1 -0
  186. package/dist/tasenor-common-node/src/system.d.ts +27 -0
  187. package/dist/tasenor-common-node/src/system.js +95 -0
  188. package/dist/tasenor-common-node/src/system.js.map +1 -0
  189. package/dist/tasenor-common-node/src/testing/ProcessingSystemMock.d.ts +21 -0
  190. package/dist/tasenor-common-node/src/testing/ProcessingSystemMock.js +33 -0
  191. package/dist/tasenor-common-node/src/testing/ProcessingSystemMock.js.map +1 -0
  192. package/dist/tasenor-common-node/src/testing/UnitTestImportConnector.d.ts +24 -0
  193. package/dist/tasenor-common-node/src/testing/UnitTestImportConnector.js +68 -0
  194. package/dist/tasenor-common-node/src/testing/UnitTestImportConnector.js.map +1 -0
  195. package/dist/tasenor-common-node/src/testing/UnitTester.d.ts +64 -0
  196. package/dist/tasenor-common-node/src/testing/UnitTester.js +199 -0
  197. package/dist/tasenor-common-node/src/testing/UnitTester.js.map +1 -0
  198. package/dist/tasenor-common-node/src/testing/index.d.ts +4 -0
  199. package/dist/tasenor-common-node/src/testing/index.js +5 -0
  200. package/dist/tasenor-common-node/src/testing/index.js.map +1 -0
  201. package/dist/tasenor-common-node/src/testing/test-handlers.d.ts +13 -0
  202. package/dist/tasenor-common-node/src/testing/test-handlers.js +52 -0
  203. package/dist/tasenor-common-node/src/testing/test-handlers.js.map +1 -0
  204. package/dist/tasenor-common-node/tests/TransactionRules.spec.d.ts +1 -0
  205. package/dist/tasenor-common-node/tests/TransactionRules.spec.js +64 -0
  206. package/dist/tasenor-common-node/tests/TransactionRules.spec.js.map +1 -0
  207. package/dist/tasenor-common-node/tests/TransferAnalyzer-account-address.spec.d.ts +1 -0
  208. package/dist/tasenor-common-node/tests/TransferAnalyzer-account-address.spec.js +80 -0
  209. package/dist/tasenor-common-node/tests/TransferAnalyzer-account-address.spec.js.map +1 -0
  210. package/dist/tasenor-common-node/tests/TransferAnalyzer-buying-and-selling.spec.d.ts +1 -0
  211. package/dist/tasenor-common-node/tests/TransferAnalyzer-buying-and-selling.spec.js +342 -0
  212. package/dist/tasenor-common-node/tests/TransferAnalyzer-buying-and-selling.spec.js.map +1 -0
  213. package/dist/tasenor-common-node/tests/TransferAnalyzer-loans.spec.d.ts +1 -0
  214. package/dist/tasenor-common-node/tests/TransferAnalyzer-loans.spec.js +174 -0
  215. package/dist/tasenor-common-node/tests/TransferAnalyzer-loans.spec.js.map +1 -0
  216. package/dist/tasenor-common-node/tests/TransferAnalyzer-multiple-null-amounts.spec.d.ts +1 -0
  217. package/dist/tasenor-common-node/tests/TransferAnalyzer-multiple-null-amounts.spec.js +175 -0
  218. package/dist/tasenor-common-node/tests/TransferAnalyzer-multiple-null-amounts.spec.js.map +1 -0
  219. package/dist/tasenor-common-node/tests/password.spec.d.ts +1 -0
  220. package/dist/tasenor-common-node/tests/password.spec.js +8 -0
  221. package/dist/tasenor-common-node/tests/password.spec.js.map +1 -0
  222. package/dist/tasenor-common-node/tests/tokens.spec.d.ts +1 -0
  223. package/dist/tasenor-common-node/tests/tokens.spec.js +49 -0
  224. package/dist/tasenor-common-node/tests/tokens.spec.js.map +1 -0
  225. package/dist/tasenor-common-node/tests/vault.spec.d.ts +1 -0
  226. package/dist/tasenor-common-node/tests/vault.spec.js +19 -0
  227. package/dist/tasenor-common-node/tests/vault.spec.js.map +1 -0
  228. package/dist/tasenor-common-plugins/src/CoinbaseImport/backend/CoinbaseHandler.d.ts +11 -0
  229. package/dist/tasenor-common-plugins/src/CoinbaseImport/backend/CoinbaseHandler.js +30 -0
  230. package/dist/tasenor-common-plugins/src/CoinbaseImport/backend/CoinbaseHandler.js.map +1 -0
  231. package/dist/tasenor-common-plugins/src/IncomeAndExpenses/backend/index.d.ts +5 -0
  232. package/dist/tasenor-common-plugins/src/IncomeAndExpenses/backend/index.js +350 -0
  233. package/dist/tasenor-common-plugins/src/IncomeAndExpenses/backend/index.js.map +1 -0
  234. package/dist/tasenor-common-plugins/src/KrakenImport/backend/KrakenHandler.d.ts +23 -0
  235. package/dist/tasenor-common-plugins/src/KrakenImport/backend/KrakenHandler.js +83 -0
  236. package/dist/tasenor-common-plugins/src/KrakenImport/backend/KrakenHandler.js.map +1 -0
  237. package/dist/tasenor-common-plugins/src/LynxImport/backend/LynxHandler.d.ts +28 -0
  238. package/dist/tasenor-common-plugins/src/LynxImport/backend/LynxHandler.js +340 -0
  239. package/dist/tasenor-common-plugins/src/LynxImport/backend/LynxHandler.js.map +1 -0
  240. package/dist/tasenor-common-plugins/src/NordeaImport/backend/NordeaHandler.d.ts +11 -0
  241. package/dist/tasenor-common-plugins/src/NordeaImport/backend/NordeaHandler.js +39 -0
  242. package/dist/tasenor-common-plugins/src/NordeaImport/backend/NordeaHandler.js.map +1 -0
  243. package/dist/tasenor-common-plugins/src/NordnetImport/backend/NordnetHandler.d.ts +17 -0
  244. package/dist/tasenor-common-plugins/src/NordnetImport/backend/NordnetHandler.js +66 -0
  245. package/dist/tasenor-common-plugins/src/NordnetImport/backend/NordnetHandler.js.map +1 -0
  246. package/dist/tasenor-common-plugins/src/TITOImport/backend/TITOHandler.d.ts +13 -0
  247. package/dist/tasenor-common-plugins/src/TITOImport/backend/TITOHandler.js +241 -0
  248. package/dist/tasenor-common-plugins/src/TITOImport/backend/TITOHandler.js.map +1 -0
  249. package/jest.config.js +1 -0
  250. package/package.json +62 -0
  251. package/src/cli.ts +267 -0
  252. package/src/commands/account.ts +69 -0
  253. package/src/commands/balance.ts +131 -0
  254. package/src/commands/db.ts +84 -0
  255. package/src/commands/entry.ts +117 -0
  256. package/src/commands/import.ts +160 -0
  257. package/src/commands/importer.ts +84 -0
  258. package/src/commands/index.ts +534 -0
  259. package/src/commands/period.ts +59 -0
  260. package/src/commands/plugin.ts +95 -0
  261. package/src/commands/report.ts +113 -0
  262. package/src/commands/settings.ts +75 -0
  263. package/src/commands/stock.ts +80 -0
  264. package/src/commands/tag.ts +102 -0
  265. package/src/commands/tx.ts +93 -0
  266. package/src/commands/user.ts +65 -0
  267. package/src/database/BookkeeperImporter.ts +358 -0
  268. package/src/database/DB.ts +396 -0
  269. package/src/database/index.ts +7 -0
  270. package/src/doccer.ts +29 -0
  271. package/src/error.ts +32 -0
  272. package/src/export/Exporter.ts +136 -0
  273. package/src/export/TasenorExporter.ts +144 -0
  274. package/src/export/TilitinExporter.ts +302 -0
  275. package/src/export/index.ts +8 -0
  276. package/src/import/TextFileProcessHandler.ts +384 -0
  277. package/src/import/TransactionImportConnector.ts +65 -0
  278. package/src/import/TransactionImportHandler.ts +819 -0
  279. package/src/import/TransactionRules.ts +570 -0
  280. package/src/import/TransactionUI.ts +520 -0
  281. package/src/import/TransferAnalyzer.ts +1450 -0
  282. package/src/import/index.ts +11 -0
  283. package/src/index.ts +12 -0
  284. package/src/net/crypto.ts +69 -0
  285. package/src/net/git.ts +151 -0
  286. package/src/net/index.ts +10 -0
  287. package/src/net/middleware.ts +261 -0
  288. package/src/net/tokens.ts +140 -0
  289. package/src/net/vault.ts +161 -0
  290. package/src/plugins/BackendPlugin.ts +188 -0
  291. package/src/plugins/DataPlugin.ts +29 -0
  292. package/src/plugins/ImportPlugin.ts +211 -0
  293. package/src/plugins/ReportPlugin.ts +443 -0
  294. package/src/plugins/SchemePlugin.ts +56 -0
  295. package/src/plugins/ServicePlugin.ts +188 -0
  296. package/src/plugins/ToolPlugin.ts +44 -0
  297. package/src/plugins/index.ts +13 -0
  298. package/src/plugins/plugins.ts +345 -0
  299. package/src/process/Process.ts +368 -0
  300. package/src/process/ProcessConnector.ts +45 -0
  301. package/src/process/ProcessFile.ts +169 -0
  302. package/src/process/ProcessHandler.ts +94 -0
  303. package/src/process/ProcessStep.ts +100 -0
  304. package/src/process/ProcessingSystem.ts +202 -0
  305. package/src/process/index.ts +11 -0
  306. package/src/reports/conversions.ts +52 -0
  307. package/src/reports/index.ts +6 -0
  308. package/src/server/ISPDemoServer.ts +122 -0
  309. package/src/server/api.ts +37 -0
  310. package/src/server/index.ts +7 -0
  311. package/src/server/router.ts +60 -0
  312. package/src/system.ts +96 -0
  313. package/src/testing/ProcessingSystemMock.ts +45 -0
  314. package/src/testing/UnitTestImportConnector.ts +86 -0
  315. package/src/testing/UnitTester.ts +231 -0
  316. package/src/testing/index.ts +4 -0
  317. package/src/testing/test-handlers.ts +55 -0
  318. package/tests/TransactionRules.spec.ts +73 -0
  319. package/tests/TransferAnalyzer-account-address.spec.ts +87 -0
  320. package/tests/TransferAnalyzer-buying-and-selling.spec.ts +354 -0
  321. package/tests/TransferAnalyzer-loans.spec.ts +197 -0
  322. package/tests/TransferAnalyzer-multiple-null-amounts.spec.ts +181 -0
  323. package/tests/password.spec.ts +8 -0
  324. package/tests/tokens.spec.ts +52 -0
  325. package/tests/vault.spec.ts +20 -0
  326. package/tsconfig.json +13 -0
@@ -0,0 +1,113 @@
1
+ /* eslint-disable camelcase */
2
+ import { sprintf } from 'sprintf-js'
3
+ import { Command } from '.'
4
+ import { ArgumentParser } from 'argparse'
5
+ import { Report, ReportColumnDefinition } from '@dataplug/tasenor-common'
6
+
7
+ class ReportCommand extends Command {
8
+
9
+ addArguments(parser: ArgumentParser): void {
10
+ const sub = parser.add_subparsers()
11
+
12
+ const ls = sub.add_parser('ls', { help: 'List of reports' })
13
+ ls.set_defaults({ subCommand: 'ls' })
14
+ ls.add_argument('db', { help: 'Name of the database' })
15
+
16
+ const view = sub.add_parser('view', { help: 'Show a report' })
17
+ view.set_defaults({ subCommand: 'view' })
18
+ view.add_argument('db', { help: 'Name of the database' })
19
+ view.add_argument('report', { help: 'Name of the report' })
20
+ view.add_argument('period', { help: 'Period year, date or ID' })
21
+ view.add_argument('options', { nargs: '*', help: 'Additinal report options for query as `key=value`' })
22
+ }
23
+
24
+ async ls() {
25
+ const { db } = this.args
26
+ const resp = await this.get(`/db/${db}/report`)
27
+ this.out('report', resp)
28
+ }
29
+
30
+ async view() {
31
+ const { db, period, report, options } = this.args
32
+ let query = ''
33
+ if (options?.length) {
34
+ query = '?' + (options as string[]).join('&')
35
+ }
36
+ const periodId = await this.periodId(db, period)
37
+ const resp = await this.get(`/db/${db}/report/${report}/${periodId}${query}`)
38
+ this.out('report', resp)
39
+ }
40
+
41
+ print(data: Record<string, unknown> | Report) {
42
+ if ('options' in data) {
43
+ Object.keys(data.options as Record<string, unknown>).forEach((opt) => console.log(opt))
44
+ return
45
+ }
46
+ if ('data' in data) {
47
+ const report = data as Report
48
+
49
+ // Header.
50
+ console.log()
51
+ console.log(report.format)
52
+ console.log()
53
+
54
+ // Meta data.
55
+ if ('meta' in data) {
56
+ Object.keys(report.meta as Record<string, unknown>).forEach((meta) => console.log(`${meta}: ${(report.meta as Record<string, unknown>)[meta]}`))
57
+ console.log()
58
+ }
59
+
60
+ // Collect data to tables.
61
+ const lines: string[][] = []
62
+ const columns: ReportColumnDefinition[] = (data as Report).columns || []
63
+
64
+ // Set up title line.
65
+ let line: string[] = []
66
+ for (const column of columns) {
67
+ line.push(column.title)
68
+ }
69
+ lines.push(line)
70
+
71
+ // Render each report line.
72
+ for (const item of report.data) {
73
+ line = []
74
+ for (const column of columns) {
75
+ const text = {
76
+ id: () => item.id,
77
+ name: () => item.name,
78
+ numeric: () => item.amounts && item.amounts[column.name] !== undefined && sprintf('%.2f', (item.amounts[column.name] || 0) / 100)
79
+ }[column.type]()
80
+ line.push(text || '')
81
+ }
82
+ lines.push(line)
83
+ }
84
+
85
+ // Find the longest line per column.
86
+ const spaces: string[] = columns.map(() => '')
87
+ for (let i = 0; i < lines.length; i++) {
88
+ for (let j = 0; j < columns.length; j++) {
89
+ if (lines[i][j].length > spaces[j].length) {
90
+ spaces[j] = lines[i][j].replace(/./g, ' ')
91
+ }
92
+ }
93
+ }
94
+
95
+ // Display.
96
+ for (let i = 0; i < lines.length; i++) {
97
+ let str = ''
98
+ for (let j = 0; j < columns.length; j++) {
99
+ str += (lines[i][j] + spaces[j] + ' ').substr(0, spaces[j].length + 1)
100
+ }
101
+ console.log(str)
102
+ }
103
+ return
104
+ }
105
+ throw new Error('Default output not implented.')
106
+ }
107
+
108
+ async run() {
109
+ await this.runBy('subCommand')
110
+ }
111
+ }
112
+
113
+ export default ReportCommand
@@ -0,0 +1,75 @@
1
+ /* eslint-disable camelcase */
2
+ import { Command } from '.'
3
+ import { ArgumentParser } from 'argparse'
4
+ import { log, needHiding } from '@dataplug/tasenor-common'
5
+
6
+ class SettingsCommand extends Command {
7
+
8
+ addArguments(parser: ArgumentParser): void {
9
+ const sub = parser.add_subparsers()
10
+
11
+ const ls = sub.add_parser('ls', { help: 'List all settings' })
12
+ ls.set_defaults({ subCommand: 'ls' })
13
+ ls.add_argument('--all', '-a', { help: 'Show all UI configurations and other extras.', action: 'store_true', required: false })
14
+ ls.add_argument('db', { help: 'Name of the database', nargs: '?' })
15
+
16
+ const set = sub.add_parser('set', { help: 'Change a settings' })
17
+ set.set_defaults({ subCommand: 'set' })
18
+ set.add_argument('dest', { help: 'Name of the database, name of the plugin or `system`' })
19
+ set.add_argument('key', { help: 'Name of the setting' })
20
+ set.add_argument('value', { help: 'New value for the setting' })
21
+ }
22
+
23
+ async ls() {
24
+ const { db, all } = this.args
25
+ const resp = db ? await this.get(`/db/${db}/settings`) : null
26
+ const resp2 = await this.get('/system/settings')
27
+ const resp3: Record<string, Record<string, unknown>> = await this.get('/system/settings/plugins')
28
+ const pluginSettings = {}
29
+
30
+ Object.keys(resp3).forEach(plugin => {
31
+ pluginSettings[plugin] = all ? resp3[plugin] : resp3[plugin].settings
32
+ })
33
+
34
+ this.out('settings', db
35
+ ? {
36
+ db: resp,
37
+ system: resp2,
38
+ plugin: pluginSettings
39
+ }
40
+ : {
41
+ system: resp2,
42
+ plugins: pluginSettings
43
+ })
44
+ }
45
+
46
+ print(data): void {
47
+ console.dir(data, { depth: null })
48
+ }
49
+
50
+ async set() {
51
+ const { dest, key, value } = this.args
52
+ const valueArg = await this.value(value)
53
+ const keyArg = this.str(key)
54
+ const destArg = this.str(dest)
55
+ if (destArg === 'system') {
56
+ log(`Setting system variable ${keyArg} to ${JSON.stringify(valueArg)}.`)
57
+ await this.patch('/system/settings', { [keyArg]: valueArg })
58
+ return
59
+ }
60
+ const resp: Record<string, unknown> = await this.get('/system/settings/plugins')
61
+ if (destArg in resp) {
62
+ log(`Setting plugin ${destArg} setting ${keyArg} to ${needHiding(keyArg) ? '*******' : JSON.stringify(valueArg)}.`)
63
+ await this.patch('/system/settings/plugins', { [`${destArg}.${keyArg}`]: valueArg })
64
+ return
65
+ }
66
+ log(`Setting database ${destArg} setting ${keyArg} to ${JSON.stringify(valueArg)}.`)
67
+ await this.patch(`/db/${destArg}/settings`, { [keyArg]: valueArg })
68
+ }
69
+
70
+ async run() {
71
+ await this.runBy('subCommand')
72
+ }
73
+ }
74
+
75
+ export default SettingsCommand
@@ -0,0 +1,80 @@
1
+ /* eslint-disable camelcase */
2
+ import { sprintf } from 'sprintf-js'
3
+ import { Command } from '.'
4
+ import { ArgumentParser } from 'argparse'
5
+ import { AccountNumber, Asset, DocumentModelData, EntryModelData, log, PeriodModelData, StockValueData } from '@dataplug/tasenor-common'
6
+
7
+ class StockCommand extends Command {
8
+
9
+ addArguments(parser: ArgumentParser): void {
10
+ const sub = parser.add_subparsers()
11
+
12
+ const create = sub.add_parser('create', { help: 'Create initial stock' })
13
+ create.set_defaults({ subCommand: 'create' })
14
+ create.add_argument('db', { help: 'Name of the database' })
15
+ create.add_argument('data', { help: 'A JSON data or @filepath for initial stock data' })
16
+ }
17
+
18
+ async create() {
19
+ const { db, data } = this.args
20
+ if (!db) {
21
+ throw new Error(`Invalid database argument ${JSON.stringify(db)}`)
22
+ }
23
+ const dataArg: Record<AccountNumber, Partial<Record<Asset, StockValueData>>> = await this.jsonData(data) as Record<AccountNumber, Partial<Record<Asset, StockValueData>>>
24
+ const period: PeriodModelData = await this.singlePeriod(db)
25
+ const docs: DocumentModelData[] = await this.get(`/db/${db}/document?period=${period.id}&entries`)
26
+ const zeroTx = docs.filter(doc => doc.number === 0)
27
+ if (!zeroTx.length) {
28
+ throw new Error('Cannot set stock unless there is 0-transaction for initial balances defined.')
29
+ }
30
+ if (!zeroTx[0].entries) {
31
+ throw new Error('Cannot set stock unless there are entries in 0-transaction for initial balances.')
32
+ }
33
+ // Get map of indexes in entry list for existing accounts.
34
+ const entryIndex: Record<number, number> = {}
35
+ let i = 0
36
+ for (const entry of zeroTx[0].entries) {
37
+ if (entry.account_id) {
38
+ entryIndex[entry.account_id] = i++
39
+ }
40
+ }
41
+ // Prepare and create missing entries for stock data upates.
42
+ for (const account of Object.keys(dataArg)) {
43
+ const accountId = await this.accountId(db, account)
44
+ if (accountId && !entryIndex[accountId]) {
45
+ const newEntry: EntryModelData = await this.post(`/db/${db}/entry`, {
46
+ document_id: zeroTx[0].id,
47
+ account_id: accountId,
48
+ debit: 1,
49
+ amount: 0,
50
+ description: zeroTx[0].entries[0].description
51
+ })
52
+ log(`Created an entry #${newEntry.id} for ${account} ${zeroTx[0].entries[0].description} ${sprintf('%.2f', 0)}.`)
53
+
54
+ zeroTx[0].entries.push(newEntry)
55
+ entryIndex[accountId] = zeroTx[0].entries.length - 1
56
+ }
57
+ }
58
+ // Update stock data.
59
+ for (const account of Object.keys(dataArg)) {
60
+ const accountId = await this.accountId(db, account)
61
+ if (accountId) {
62
+ const entry = zeroTx[0].entries[entryIndex[accountId]]
63
+ entry.data = entry.data || {}
64
+ Object.assign(entry.data, {
65
+ stock: {
66
+ set: dataArg[account]
67
+ }
68
+ })
69
+ await this.patch(`/db/${db}/entry/${entry.id}`, { data: entry.data })
70
+ log(`Updated initial stock data for entry #${entry.id}.`)
71
+ }
72
+ }
73
+ }
74
+
75
+ async run() {
76
+ await this.runBy('subCommand')
77
+ }
78
+ }
79
+
80
+ export default StockCommand
@@ -0,0 +1,102 @@
1
+ /* eslint-disable camelcase */
2
+ import fs from 'fs'
3
+ import mimeTypes from 'mime-types'
4
+ import { log, TagModelData } from '@dataplug/tasenor-common'
5
+ import { Command } from '.'
6
+ import { ArgumentParser } from 'argparse'
7
+
8
+ class TagCommand extends Command {
9
+
10
+ addArguments(parser: ArgumentParser): void {
11
+ const sub = parser.add_subparsers()
12
+
13
+ const ls = sub.add_parser('ls', { help: 'List all tags' })
14
+ ls.set_defaults({ subCommand: 'ls' })
15
+ ls.add_argument('db', { help: 'Name of the database' })
16
+ ls.add_argument('--tags-only', { help: 'Show only tags', action: 'store_true', required: false })
17
+
18
+ const download = sub.add_parser('download', { help: 'Download a tag image' })
19
+ download.set_defaults({ subCommand: 'download' })
20
+ download.add_argument('db', { help: 'Name of the database' })
21
+ download.add_argument('tag', { help: 'Name of the tag' })
22
+
23
+ const rm = sub.add_parser('rm', { help: 'Delete a tag' })
24
+ rm.set_defaults({ subCommand: 'rm' })
25
+ rm.add_argument('db', { help: 'Name of the database' })
26
+ rm.add_argument('id', { help: 'ID of the tag' })
27
+
28
+ const create = sub.add_parser('create', { help: 'Create a tag' })
29
+ create.set_defaults({ subCommand: 'create' })
30
+ create.add_argument('db', { help: 'Name of the database' })
31
+ create.add_argument('tag', { help: 'Tag itself' })
32
+ create.add_argument('name', { help: 'Description' })
33
+ create.add_argument('type', { help: 'Group name of the tag' })
34
+ create.add_argument('path', { help: 'Path to the file' })
35
+ create.add_argument('order', { help: 'Ordering number for the tag', nargs: '?' })
36
+ }
37
+
38
+ async ls() {
39
+ const { db, tags_only } = this.args
40
+ const resp: TagModelData[] = await this.get(`/db/${db}/tags`)
41
+ if (tags_only) {
42
+ for (const tag of resp.map(t => t.tag)) {
43
+ console.log(tag)
44
+ }
45
+ } else {
46
+ this.out('tag', resp)
47
+ }
48
+ }
49
+
50
+ print(data: TagModelData[]): void {
51
+ for (const line of data.sort((a, b) => (a.id || 0) - (b.id || 0))) {
52
+ const { id, tag, name, mime, type, order } = line
53
+ console.log(`#${id} ${tag}\t${name}\t${mime}\t${type}\t${order}`)
54
+ }
55
+ }
56
+
57
+ async rm() {
58
+ const { db, id } = this.args
59
+ await this.delete(`/db/${db}/tags/${id}`)
60
+ log(`Tag ${id} deleted successfully.`)
61
+ }
62
+
63
+ async download() {
64
+ const { db, tag } = this.args
65
+ const tagArg = await this.tag(db, tag)
66
+ const name = `${tagArg.tag}.${(tagArg.mime || '/bin').split('/')[1]}`
67
+ const data = Buffer.from(tagArg.picture || '', 'base64')
68
+ fs.writeFileSync(name, data)
69
+ log(`Saved a tag to file ${name}.`)
70
+ }
71
+
72
+ async create() {
73
+ const { db, tag, name, path, type } = this.args
74
+ if (!path || !fs.existsSync(this.str(path))) {
75
+ throw new Error(`File path ${path} does not exist.`)
76
+ }
77
+ const mime = mimeTypes.lookup(path)
78
+ let order = this.num(this.args.order)
79
+ if (!order) {
80
+ const maxNumber: Record<string, number> = {}
81
+ const old: TagModelData[] = await this.get(`/db/${db}/tags`)
82
+ for (const tag of old) {
83
+ if (!tag.type) {
84
+ continue
85
+ }
86
+ maxNumber[tag.type] = Math.max(maxNumber[tag.type] || 0, tag.order)
87
+ }
88
+ order = (maxNumber[this.str(type)] || 0) + 1
89
+ }
90
+ const picture = fs.readFileSync(this.str(path)).toString('base64')
91
+
92
+ const params = { tag, name, mime, type, order, picture }
93
+ await this.post(`/db/${db}/tags`, params)
94
+ log(`Tag ${tag} created successfully.`)
95
+ }
96
+
97
+ async run() {
98
+ await this.runBy('subCommand')
99
+ }
100
+ }
101
+
102
+ export default TagCommand
@@ -0,0 +1,93 @@
1
+ /* eslint-disable camelcase */
2
+ import { sprintf } from 'sprintf-js'
3
+ import { Command } from '.'
4
+ import { ArgumentParser } from 'argparse'
5
+ import { DocumentModelData, EntryModelData, log } from '@dataplug/tasenor-common'
6
+
7
+ class TxCommand extends Command {
8
+
9
+ addArguments(parser: ArgumentParser): void {
10
+ const sub = parser.add_subparsers()
11
+
12
+ const ls = sub.add_parser('ls', { help: 'List all transactions' })
13
+ ls.set_defaults({ subCommand: 'ls' })
14
+ ls.add_argument('db', { help: 'Name of the database' })
15
+ ls.add_argument('period', { help: 'Period year, date or ID' })
16
+
17
+ const rm = sub.add_parser('rm', { help: 'Delete a transaction' })
18
+ rm.set_defaults({ subCommand: 'rm' })
19
+ rm.add_argument('db', { help: 'Name of the database' })
20
+ rm.add_argument('id', { help: 'ID of the transaction' })
21
+
22
+ const create = sub.add_parser('create', { help: 'Create a transaction' })
23
+ create.set_defaults({ subCommand: 'create' })
24
+ create.add_argument('--force', { help: 'Allow invalid transactions.', action: 'store_true', required: false })
25
+ create.add_argument('--data', { help: 'Define additional data field for all entries as JSON.', required: false })
26
+ create.add_argument('db', { help: 'Name of the database' })
27
+ create.add_argument('date', { help: 'The transaction date' })
28
+ create.add_argument('entry', { nargs: '+', help: 'A transaction line as string, e.g "1234 Description +12,00" or "1234 Description +12,00 {<data>}"' })
29
+ }
30
+
31
+ async ls() {
32
+ const { db, period } = this.args
33
+ const periodId = await this.periodId(db, period)
34
+ const resp = await this.get(`/db/${db}/document?period=${periodId}&entries`)
35
+ await this.readAccounts(db)
36
+ this.out('document', resp)
37
+ }
38
+
39
+ print(data: DocumentModelData[]): void {
40
+ for (const doc of data.sort((a, b) => (a.number || 0) - (b.number || 0))) {
41
+ const { number, date } = doc
42
+ console.log(`#${number} ${date}`)
43
+ if (doc.entries) {
44
+ for (const entry of doc.entries) {
45
+ console.log(' ', this.accountsById[entry.account_id || -1].number, sprintf('%.2f', entry.debit ? entry.amount / 100 : entry.amount / -100), entry.description)
46
+ }
47
+ }
48
+ }
49
+ }
50
+
51
+ async rm() {
52
+ const { db, id } = this.args
53
+ await this.delete(`/db/${db}/document/${id}`)
54
+ log(`Document ${id} deleted successfully.`)
55
+ }
56
+
57
+ async create() {
58
+ const { db, date, data, entry, force } = this.args
59
+ if (!db) {
60
+ throw new Error(`Invalid database argument ${JSON.stringify(db)}`)
61
+ }
62
+ const periodId = await this.periodId(db, date)
63
+ let entries = await this.entries(db, entry)
64
+ if (data) {
65
+ const extras = await this.jsonData(data)
66
+ entries = entries.map(e => ({ ...e, data: extras }))
67
+ }
68
+ const sum = entries.reduce((prev, cur) => prev + cur.amount, 0)
69
+ if (sum && !force) {
70
+ throw new Error(`Transaction total must be zero. Got ${sum} from ${JSON.stringify(entries)}.`)
71
+ }
72
+
73
+ const document: DocumentModelData = await this.post(`/db/${db}/document`, { period_id: periodId, date: this.date(date) })
74
+ log(`Created a document #${document.id} on ${date}.`)
75
+ for (const e of entries) {
76
+ const out: EntryModelData = await this.post(`/db/${db}/entry`, {
77
+ document_id: document.id,
78
+ account_id: e.account_id,
79
+ debit: e.amount > 0,
80
+ amount: Math.abs(e.amount),
81
+ description: e.description,
82
+ data: e.data
83
+ })
84
+ log(`Created an entry #${out.id} for ${e.number} ${e.description} ${sprintf('%.2f', e.amount / 100)}${e.data ? ' ' + JSON.stringify(e.data) : ''}.`)
85
+ }
86
+ }
87
+
88
+ async run() {
89
+ await this.runBy('subCommand')
90
+ }
91
+ }
92
+
93
+ export default TxCommand
@@ -0,0 +1,65 @@
1
+ import { log } from '@dataplug/tasenor-common'
2
+ import { Command } from '.'
3
+ import { ArgumentParser } from 'argparse'
4
+
5
+ class UserCommand extends Command {
6
+
7
+ addArguments(parser: ArgumentParser): void {
8
+ const sub = parser.add_subparsers()
9
+
10
+ const ls = sub.add_parser('ls', { help: 'List all users' })
11
+ ls.set_defaults({ subCommand: 'ls' })
12
+
13
+ const rm = sub.add_parser('rm', { help: 'Delete a user' })
14
+ rm.set_defaults({ subCommand: 'rm' })
15
+ rm.add_argument('email', { help: 'Email address of the user' })
16
+
17
+ const create = sub.add_parser('create', { help: 'Create a user' })
18
+ create.set_defaults({ subCommand: 'create' })
19
+ create.add_argument('name', { help: 'Full name of the user' })
20
+ create.add_argument('passwd', { help: 'Initial password for the user' })
21
+ create.add_argument('email', { help: 'Email address of the user' })
22
+
23
+ const add = sub.add_parser('add', { help: 'Add a user to the database' })
24
+ add.set_defaults({ subCommand: 'add' })
25
+ add.add_argument('email', { help: 'Email address of the user' })
26
+ add.add_argument('db', { help: 'Name of the database' })
27
+ }
28
+
29
+ async ls() {
30
+ const resp = await this.get('/admin/user')
31
+ this.out('user', resp)
32
+ }
33
+
34
+ print(data): void {
35
+ for (const user of data.sort((a, b) => (a.id || 0) - (b.id || 0))) {
36
+ const { id, name, email, config } = user
37
+ console.log(`#${id} ${name} ${email} ${JSON.stringify(config)}`)
38
+ }
39
+ }
40
+
41
+ async rm() {
42
+ const { email } = this.args
43
+ await this.delete(`/admin/user/${email}`)
44
+ log(`User ${email} deleted successfully.`)
45
+ }
46
+
47
+ async create() {
48
+ const { name, passwd, email } = this.args
49
+ const params = { name, password: passwd, email }
50
+ await this.post('/admin/user', params)
51
+ log(`User ${name} created successfully.`)
52
+ }
53
+
54
+ async add() {
55
+ const { email, db } = this.args
56
+ log(`Adding user ${email} to database ${db}`)
57
+ await this.post(`/admin/user/${email}/databases`, { database: this.str(db) })
58
+ }
59
+
60
+ async run() {
61
+ await this.runBy('subCommand')
62
+ }
63
+ }
64
+
65
+ export default UserCommand