@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,144 @@
1
+ import { Bookkeeper, BookkeeperConfig, DirectoryPath, log, ParsedTsvFileData, TarFilePath, Url } from '@dataplug/tasenor-common'
2
+ import { DB, KnexDatabase } from '../database'
3
+ import { Exporter } from './Exporter'
4
+ import knex from 'knex'
5
+ import dot from 'dot-object'
6
+ import path from 'path'
7
+ import fs from 'fs'
8
+
9
+ /**
10
+ * Export Tasenor database.
11
+ */
12
+ export class TasenorExporter extends Exporter {
13
+
14
+ /**
15
+ * Read configuration information from database and construct compiled configuration.
16
+ * @param db Knex connection to use.
17
+ * @returns
18
+ */
19
+ async getConfig(db: KnexDatabase): Promise<BookkeeperConfig> {
20
+ const conf: BookkeeperConfig = Bookkeeper.createConfig()
21
+ const settings = {}
22
+ for (const setting of await db('settings').select('*')) {
23
+ settings[setting.name] = setting.value
24
+ }
25
+ Object.assign(conf, dot.object(settings))
26
+ return conf
27
+ }
28
+
29
+ /**
30
+ * Read all accounts from the database and generate TSV-data.
31
+ * @param db Knex connection to use.
32
+ * @returns
33
+ */
34
+ async getAccounts(db: KnexDatabase): Promise<ParsedTsvFileData> {
35
+ const headings = {}
36
+ for (const heading of await db('heading').select('*').orderBy('level')) {
37
+ headings[heading.number] = headings[heading.number] || []
38
+ let tab = ''
39
+ for (let i = 0; i < heading.level; i++) {
40
+ tab += '_'
41
+ }
42
+ heading.text = tab + heading.text
43
+ headings[heading.number].push(heading)
44
+ }
45
+
46
+ const lines = [['# number / title', 'text', 'type', 'code', 'data']]
47
+ for (const account of await db('account').select('*').orderBy('number')) {
48
+ if (headings[account.number]) {
49
+ for (const heading of headings[account.number]) {
50
+ lines.push([heading.text, '', '', '', '', ''])
51
+ }
52
+ }
53
+ const code = account.data.code || ''
54
+ delete account.data.code
55
+ lines.push([account.number, account.name, account.type, code, JSON.stringify(account.data)])
56
+ }
57
+ log(`Found ${lines.length} lines of data for headings and accounts.`)
58
+
59
+ return lines
60
+ }
61
+
62
+ /**
63
+ * Read all periods from the database and generate TSV-data.
64
+ * @param db Knex connection to use.
65
+ * @returns
66
+ */
67
+ async getPeriods(db: KnexDatabase): Promise<ParsedTsvFileData> {
68
+ const lines = [['# start', 'end', 'flags']]
69
+ for (const period of await db('period').select('*').orderBy('start_date')) {
70
+ lines.push([period.start_date, period.end_date, period.locked ? 'LOCKED' : ''])
71
+ }
72
+ log(`Found ${lines.length} lines of data for periods.`)
73
+ return lines
74
+ }
75
+
76
+ /**
77
+ * Read all entries and documents from the database and generate TSV-data.
78
+ * @param db Knex connection to use.
79
+ * @returns
80
+ */
81
+ async getEntries(db: KnexDatabase): Promise<ParsedTsvFileData> {
82
+ const lines = [['# number', 'date / account', 'amount', 'text', 'data']]
83
+ let n = 1
84
+ for (const period of await db('period').select('*').orderBy('start_date')) {
85
+ lines.push([`Period ${n}`, '', '', '', ''])
86
+ for (const doc of await db('document').select('*').where({ period_id: period.id }).orderBy('period_id', 'number')) {
87
+ lines.push([doc.number, doc.date, '', '', ''])
88
+ for (const entry of await db('entry').join('account', 'entry.account_id', 'account.id').select('entry.*', 'account.number').where({ document_id: doc.id }).orderBy('row_number')) {
89
+ lines.push(['', entry.number, entry.debit ? entry.amount : -entry.amount, entry.description, JSON.stringify(entry.data)])
90
+ }
91
+ }
92
+ n++
93
+ }
94
+ log(`Found ${lines.length} lines of data for documents and entries.`)
95
+ return lines
96
+ }
97
+
98
+ /**
99
+ * Read all tags from the database and generate TSV-data.
100
+ * @param db Knex connection to use.
101
+ * @param out Directory to write image files.
102
+ * @returns
103
+ */
104
+ async getTags(db: KnexDatabase, out: DirectoryPath): Promise<ParsedTsvFileData> {
105
+ const lines = [['# tag', 'name', 'mime', 'picture', 'type', 'order']]
106
+ const picDir = path.join(out, 'pictures')
107
+ if (!fs.existsSync(picDir)) {
108
+ fs.mkdirSync(picDir)
109
+ }
110
+ for (const tag of await db('tags').select('*').orderBy('order')) {
111
+ const ext = tag.mime.split('/')[1]
112
+ const file = `${tag.type}-${tag.order}.${ext}`
113
+ fs.writeFileSync(path.join(picDir, file), tag.picture)
114
+ lines.push([tag.tag, tag.name, tag.mime, path.join('pictures', file), tag.type, tag.order])
115
+ }
116
+ log(`Found ${lines.length} lines of data for tags.`)
117
+ return lines
118
+ }
119
+
120
+ /**
121
+ * Run the full backup for the given database.
122
+ * @param dbUrl Database URL.
123
+ * @param out Directory to save backup.
124
+ * @param destPath Destionation file name if given.
125
+ * @returns Path to the tar-package.
126
+ */
127
+ async run(dbUrl: Url, out: DirectoryPath, destPath: DirectoryPath | undefined = undefined): Promise<TarFilePath> {
128
+ const db = DB.getKnexConfig(dbUrl)
129
+ const conf = await this.dump(knex(db), out)
130
+ return this.makeTar(conf, out, destPath)
131
+ }
132
+
133
+ /**
134
+ * Run the full backup for the given database.
135
+ * @param db Knex database.
136
+ * @param out Directory to save backup.
137
+ * @param destPath Destionation file name if given.
138
+ * @returns Path to the tar-package.
139
+ */
140
+ async runDb(db: KnexDatabase, out: DirectoryPath, destPath: DirectoryPath | undefined = undefined): Promise<TarFilePath> {
141
+ const conf = await this.dump(db, out)
142
+ return this.makeTar(conf, out, destPath)
143
+ }
144
+ }
@@ -0,0 +1,302 @@
1
+ import knex from 'knex'
2
+ import dayjs from 'dayjs'
3
+ import utc from 'dayjs/plugin/utc'
4
+ import path from 'path'
5
+ import fs from 'fs'
6
+ import { KnexDatabase } from '..'
7
+ import { log, Bookkeeper, AccountType, ParsedTsvFileData, ShortDate, Timestamp, BookkeeperConfig, DirectoryPath, ReportFormat, TarFilePath, SqliteDbPath, Version, AccountNumber } from '@dataplug/tasenor-common'
8
+ import { Exporter } from './Exporter'
9
+
10
+ dayjs.extend(utc)
11
+
12
+ const VAT_IGNORE = 1
13
+ const VAT_RECONCILED = 2
14
+ const ACCOUNT_TYPES = Object.keys(AccountType)
15
+
16
+ // Helpers to convert nasty dates from original format.
17
+ function dateFromDb(date: Timestamp): ShortDate {
18
+ const str = dayjs.utc(date).add(2, 'hours').format('YYYY-MM-DD')
19
+ return str
20
+ }
21
+
22
+ /**
23
+ * A class implementing conversion from old legacy Tilitin Sqlite-format to Tasenor format.
24
+ */
25
+ export class TilitinExporter extends Exporter {
26
+
27
+ /**
28
+ * Construct Knex configuration for the given file.
29
+ * @param path Path to the Sqlite-file.
30
+ * @returns Instantiated Knex database connection.
31
+ */
32
+ database(path): KnexDatabase {
33
+ return knex({
34
+ client: 'sqlite3',
35
+ connection: {
36
+ filename: path
37
+ },
38
+ useNullAsDefault: true
39
+ })
40
+ }
41
+
42
+ /**
43
+ * Read all accounts from the database and generate TSV-data.
44
+ * @param db Knex connection to use.
45
+ * @returns
46
+ */
47
+ async getAccounts(db: KnexDatabase): Promise<ParsedTsvFileData> {
48
+ const headings = {}
49
+ for (const heading of await db('coa_heading').select('*').orderBy('level')) {
50
+ headings[heading.number] = headings[heading.number] || []
51
+ let tab = ''
52
+ for (let i = 0; i < heading.level; i++) {
53
+ tab += '_'
54
+ }
55
+ heading.text = tab + heading.text
56
+ headings[heading.number].push(heading)
57
+ }
58
+ const lines = [['# number / title', 'text', 'type', 'code', 'data']]
59
+ for (const account of await db('account').select('*').orderBy('number')) {
60
+ if (headings[account.number]) {
61
+ for (const heading of headings[account.number]) {
62
+ lines.push([heading.text, '', '', '', '', ''])
63
+ }
64
+ }
65
+ const data: Record<string, unknown> = {}
66
+ if (account.flags) {
67
+ data.favourite = true
68
+ }
69
+ lines.push([account.number, account.name, ACCOUNT_TYPES[account.type], account.vat_percentage || '', JSON.stringify(data)])
70
+ }
71
+ log(`Found ${lines.length} lines of data for headings and accounts.`)
72
+ return lines
73
+ }
74
+
75
+ /**
76
+ * Read all periods from the database and generate TSV-data.
77
+ * @param db Knex connection to use.
78
+ * @returns
79
+ */
80
+ async getPeriods(db: KnexDatabase): Promise<ParsedTsvFileData> {
81
+ const lines = [['# start', 'end', 'flags']]
82
+ for (const period of await db('period').select('*').orderBy('start_date')) {
83
+ lines.push([dateFromDb(period.start_date), dateFromDb(period.end_date), period.locked ? 'LOCKED' : ''])
84
+ }
85
+ log(`Found ${lines.length} lines of data for periods.`)
86
+ return lines
87
+ }
88
+
89
+ /**
90
+ * Read all entries and documents from the database and generate TSV-data.
91
+ * @param db Knex connection to use.
92
+ * @returns
93
+ */
94
+ async getEntries(db: KnexDatabase): Promise<ParsedTsvFileData> {
95
+ const lines = [['# number', 'date / account', 'amount', 'text', 'data']]
96
+ let n = 1
97
+ for (const period of await db('period').select('*').orderBy('start_date')) {
98
+ lines.push([`Period ${n}`, '', '', '', ''])
99
+ for (const doc of await db('document').select('*').where({ period_id: period.id }).orderBy('period_id', 'number')) {
100
+ lines.push([doc.number, dateFromDb(doc.date), '', '', ''])
101
+ for (const entry of await db('entry').join('account', 'entry.account_id', 'account.id').select('entry.*', 'account.number').where({ document_id: doc.id }).orderBy('row_number')) {
102
+
103
+ const data: Record<string, unknown> = {}
104
+ if (entry.flags & VAT_IGNORE) {
105
+ data.VAT = { ignore: true }
106
+ }
107
+ if (entry.flags & VAT_RECONCILED) {
108
+ data.VAT = { ...(data.VAT || {}), reconciled: true }
109
+ }
110
+
111
+ lines.push(['', entry.number, entry.debit ? entry.amount : -entry.amount, entry.description, JSON.stringify(data)])
112
+ }
113
+ }
114
+ n++
115
+ }
116
+ log(`Found ${lines.length} lines of data for documents and entries.`)
117
+ return lines
118
+ }
119
+
120
+ /**
121
+ * Check if the given table exist.
122
+ * @param db
123
+ */
124
+ async hasTable(db: KnexDatabase, table: string): Promise<boolean> {
125
+ let hasTable = true
126
+ try {
127
+ await db(table).select('*').limit(1)
128
+ } catch (err) {
129
+ hasTable = false
130
+ }
131
+ return hasTable
132
+ }
133
+
134
+ /**
135
+ * Read configuration information from database and construct compiled configuration.
136
+ * @param db Knex connection to use.
137
+ * @returns
138
+ */
139
+ async getConfig(db: KnexDatabase): Promise<BookkeeperConfig> {
140
+ const conf: BookkeeperConfig = Bookkeeper.createConfig()
141
+ conf.language = 'fi'
142
+ conf.currency = 'EUR'
143
+ conf.scheme = 'FinnishLimitedCompanyComplete'
144
+ conf.schemeVersion = '1.0.0' as Version
145
+
146
+ // Add VAT config if we have correct accounts.
147
+ if (await db('account').select('*').where({ number: '29391' }).first()) {
148
+ conf.VAT = {
149
+ salesAccount: '29391' as AccountNumber,
150
+ purchasesAccount: '29392' as AccountNumber,
151
+ receivableAccount: '1763' as AccountNumber,
152
+ payableAccount: '2939' as AccountNumber,
153
+ delayedReceivableAccount: '1845' as AccountNumber,
154
+ delayedPayableAccount: '2977' as AccountNumber,
155
+ statementTagTypes: []
156
+ }
157
+ }
158
+
159
+ for (const setting of await db('settings').select('name', 'business_id')) {
160
+ conf.companyName = setting.name
161
+ conf.companyCode = setting.business_id
162
+ }
163
+ if (await this.hasTable(db, 'fyffe_settings')) {
164
+ for (const setting of await db('fyffe_settings').select('*')) {
165
+ switch (setting.name) {
166
+ case 'income-statement-tag-types':
167
+ conf.FinnishIncomeStatementReport = { tagTypes: JSON.parse(setting.value) }
168
+ break
169
+ default:
170
+ throw new Error(`Unable to parse setting '${setting.name}'`)
171
+ }
172
+ }
173
+ }
174
+ if (conf.VAT && conf.VAT.statementTagTypes && !conf.FinnishIncomeStatementReport) {
175
+ conf.FinnishIncomeStatementReport = {
176
+ tagTypes: conf.VAT.statementTagTypes
177
+ }
178
+ }
179
+
180
+ return conf
181
+ }
182
+
183
+ /**
184
+ * Read all tags from the database and generate TSV-data.
185
+ * @param db Knex connection to use.
186
+ * @param out Directory to write image files.
187
+ * @returns
188
+ */
189
+ async getTags(db: KnexDatabase, out: DirectoryPath): Promise<ParsedTsvFileData> {
190
+ const lines = [['# tag', 'name', 'mime', 'picture', 'type', 'order']]
191
+ const picDir = path.join(out, 'pictures')
192
+ if (!fs.existsSync(picDir)) {
193
+ fs.mkdirSync(picDir)
194
+ }
195
+ if (await this.hasTable(db, 'tags')) {
196
+ for (const tag of await db('tags').select('*').orderBy('order')) {
197
+ const ext = tag.mime.split('/')[1]
198
+ const file = `${tag.type}-${tag.order}.${ext}`
199
+ fs.writeFileSync(path.join(picDir, file), tag.picture)
200
+ lines.push([tag.tag, tag.name, tag.mime, path.join('pictures', file), tag.type, tag.order])
201
+ }
202
+ }
203
+ log(`Found ${lines.length} lines of data for tags.`)
204
+ return lines
205
+ }
206
+
207
+ /**
208
+ * Read all report formats from the database and generate mapping from report IDs to report format.
209
+ * @param db Knex connection to use.
210
+ * @returns
211
+ */
212
+ async getReports(db: KnexDatabase): Promise<{ [key: string]: ReportFormat }> {
213
+ const reports = {}
214
+ for (const report of await db('report_structure').select('*')) {
215
+ reports[report.id] = report.data
216
+ }
217
+ log(`Found reports ${Object.keys(reports)}.`)
218
+ return reports
219
+ }
220
+
221
+ /**
222
+ * Convert old report format to new.
223
+ * @param report
224
+ */
225
+ convertReport(report: ReportFormat): ParsedTsvFileData {
226
+ const lines: [string, string, string][] = [['# accounts', 'title', 'flags']]
227
+ for (const line of report.trim().split('\n')) {
228
+ let entries: [string, string, string[]]
229
+ if (line === '') continue
230
+ if (line === '-') {
231
+ entries = ['', '', ['BREAK']]
232
+ } else if (line === '--') {
233
+ entries = ['', '', ['NEW_PAGE']]
234
+ } else {
235
+ const parts = line.split(';')
236
+ const code = parts[0]
237
+ let tab = ''
238
+ for (let i = 0; i < parseInt(code[2]); i++) {
239
+ tab += '_'
240
+ }
241
+ let flags: string[] = []
242
+ switch (code[0]) {
243
+ case 'H':
244
+ flags = ['HIDE_TOTAL', 'REQUIRED']
245
+ break
246
+ case 'G':
247
+ flags = ['HIDE_TOTAL']
248
+ break
249
+ case 'S':
250
+ flags = ['REQUIRED']
251
+ break
252
+ case 'D':
253
+ flags = ['DETAILS']
254
+ break
255
+ case 'T':
256
+ break
257
+ default:
258
+ throw new Error(`Cannot parse letter ${code[0]} in report code ${code} of line ${line}.`)
259
+ }
260
+ switch (code[1]) {
261
+ case 'B':
262
+ flags.push('BOLD')
263
+ break
264
+ case 'I':
265
+ flags.push('ITALIC')
266
+ break
267
+ case 'P':
268
+ break
269
+ default:
270
+ throw new Error(`Cannot parse letter ${code[1]} in report code ${code} of line ${line}.`)
271
+ }
272
+ if (parts.length === 4) {
273
+ entries = [`${parts[1]}-${parts[2]}`, tab + parts[3], flags]
274
+ } else if (parts.length === 6) {
275
+ entries = [`${parts[1]}-${parts[2]} ${parts[3]}-${parts[4]}`, tab + parts[5], flags]
276
+ } else if (parts.length === 8) {
277
+ entries = [`${parts[1]}-${parts[2]} ${parts[3]}-${parts[4]} ${parts[5]}-${parts[6]}`, tab + parts[7], flags]
278
+ } else {
279
+ throw new Error(`Unable to parse line ${line} since there are ${parts.length} parts.`)
280
+ }
281
+ }
282
+ lines.push([entries[0], entries[1], entries[2].join(' ')])
283
+ }
284
+ return lines
285
+ }
286
+
287
+ /**
288
+ * Run the full backup for the given legacy database.
289
+ * @param sqlite Path to the Sqlite database to create backup for.
290
+ * @param out Directory to save backup.
291
+ * @param destPath Destionation file name if given.
292
+ * @returns Path to the tar-package.
293
+ */
294
+ async run(sqlite: SqliteDbPath, out: DirectoryPath, destPath: DirectoryPath | undefined): Promise<TarFilePath> {
295
+ if (!fs.existsSync(sqlite)) {
296
+ throw new Error(`Database ${out} does not exist.`)
297
+ }
298
+ const db = this.database(sqlite)
299
+ const conf = await this.dump(db, out)
300
+ return this.makeTar(conf, out, destPath)
301
+ }
302
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Data export from Tasenor and some other legacy systems.
3
+ *
4
+ * @module tasenor-common-node/src/export
5
+ */
6
+ export * from './Exporter'
7
+ export * from './TilitinExporter'
8
+ export * from './TasenorExporter'