@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,393 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ import fs from 'fs';
3
+ import { data2csv } from '..';
4
+ import dayjs from 'dayjs';
5
+ import quarterOfYear from 'dayjs/plugin/quarterOfYear';
6
+ import { BackendPlugin } from './BackendPlugin';
7
+ dayjs.extend(quarterOfYear);
8
+ /**
9
+ * A plugin providing one or more reports.
10
+ */
11
+ export class ReportPlugin extends BackendPlugin {
12
+ formats;
13
+ // Is set, allow this report only on DBs having those accounting schemes.
14
+ schemes;
15
+ constructor(...formats) {
16
+ super();
17
+ this.formats = formats;
18
+ this.schemes = undefined;
19
+ }
20
+ /**
21
+ * Read in report struture file.
22
+ */
23
+ getReportStructure(id, lang) {
24
+ const path = this.filePath(`${id}-${lang}.tsv`);
25
+ if (fs.existsSync(path)) {
26
+ return fs.readFileSync(path).toString('utf-8');
27
+ }
28
+ }
29
+ /**
30
+ * Get the list of supported languages.
31
+ */
32
+ getLanguages() {
33
+ return [];
34
+ }
35
+ /**
36
+ * Check if the given report is provided by this plugin.
37
+ * @param id
38
+ */
39
+ hasReport(id) {
40
+ return this.formats.includes(id);
41
+ }
42
+ /**
43
+ * Get the list of report IDs.
44
+ */
45
+ getFormats(scheme = undefined) {
46
+ if (this.schemes === undefined || scheme === undefined || this.schemes.has(scheme)) {
47
+ return this.formats;
48
+ }
49
+ return [];
50
+ }
51
+ /**
52
+ * Return UI option definitions for the given report.
53
+ * @param id
54
+ */
55
+ getReportOptions(id) {
56
+ return {};
57
+ }
58
+ /**
59
+ * Convert time stamp or Date to date string YYYY-MM-DD.
60
+ * @param {Number} timestamp
61
+ */
62
+ time2str(timestamp) {
63
+ if (timestamp === null) {
64
+ return null;
65
+ }
66
+ if (timestamp instanceof Date) {
67
+ timestamp = timestamp.toISOString();
68
+ }
69
+ return timestamp.substr(0, 10);
70
+ }
71
+ /**
72
+ * Construct rendering information from report flags
73
+ * @param flags
74
+ * @returns
75
+ */
76
+ flags2item(flags) {
77
+ const item = {};
78
+ flags.forEach(flag => {
79
+ if (flag) {
80
+ switch (flag) {
81
+ case 'NEW_PAGE':
82
+ break;
83
+ case 'BREAK':
84
+ item.break = true;
85
+ break;
86
+ case 'BOLD':
87
+ item.bold = true;
88
+ break;
89
+ case 'ITALIC':
90
+ item.italic = true;
91
+ break;
92
+ case 'DETAILS':
93
+ item.accountDetails = true;
94
+ break;
95
+ case 'HIDE_TOTAL':
96
+ item.hideTotal = true;
97
+ break;
98
+ case 'REQUIRED':
99
+ item.required = true;
100
+ break;
101
+ default:
102
+ throw new Error(`Cannot recognize report format flag '${flag}'.`);
103
+ }
104
+ }
105
+ });
106
+ return item;
107
+ }
108
+ /**
109
+ * Construct column definitions for the report.
110
+ * @param id
111
+ * @param entries
112
+ * @param options
113
+ */
114
+ async getColumns(id, entries, options, settings) {
115
+ if (!options.periods) {
116
+ throw new Error(`Need periods to define columns ${JSON.stringify(options)}`);
117
+ }
118
+ const columns = options.periods.map((period) => {
119
+ return {
120
+ type: 'numeric',
121
+ name: 'period' + period.id,
122
+ title: this.columnTitle(id, period, options)
123
+ };
124
+ });
125
+ columns.unshift({
126
+ name: 'title',
127
+ title: '',
128
+ type: 'name'
129
+ });
130
+ return columns;
131
+ }
132
+ /**
133
+ * Construct a title for a column.
134
+ * @param id
135
+ * @param period
136
+ * @param options
137
+ */
138
+ columnTitle(id, period, options) {
139
+ throw new Error(`Report plugin ${this.constructor.name} does not implement columnTitle().`);
140
+ }
141
+ /**
142
+ * Force some options, if needed.
143
+ * @returns
144
+ */
145
+ forceOptions(options) {
146
+ return {
147
+ negateAssetAndProfit: false,
148
+ addPreviousPeriod: false // A flag to define if the previous period should be displayed for comparison.
149
+ };
150
+ }
151
+ /**
152
+ * Construct a SQL for the report query.
153
+ * @param db
154
+ * @param options
155
+ * @returns A knex query prepared.
156
+ */
157
+ async constructSqlQuery(db, options, settings) {
158
+ // Construct value negator.
159
+ let negateSql = '(CASE debit WHEN true THEN 1 ELSE -1 END)';
160
+ if (options.negateAssetAndProfit) {
161
+ negateSql += " * (CASE WHEN account.type IN ('ASSET', 'PROFIT') THEN 1 ELSE -1 END)";
162
+ }
163
+ // Find periods.
164
+ const periodIds = [options.periodId];
165
+ if (options.addPreviousPeriod) {
166
+ const recentPeriods = await db.select('*').from('period').where('id', '<=', options.periodId).orderBy('end_date', 'desc').limit(2);
167
+ if (recentPeriods.length > 1) {
168
+ periodIds.push(recentPeriods[1].id);
169
+ }
170
+ options.periods = recentPeriods; // Save periods for further reference.
171
+ }
172
+ // Build a query basics.
173
+ let sqlQuery = db.select('document.period_id AS periodId', 'document.number AS documentId', 'document.date', 'account.name', 'account.type', 'account.number', db.raw(`CAST(ROUND(${negateSql} * entry.amount * 100) AS BIGINT) AS amount`), 'entry.description')
174
+ .from('entry')
175
+ .leftJoin('account', 'account.id', 'entry.account_id')
176
+ .leftJoin('document', 'document.id', 'entry.document_id')
177
+ .whereIn('document.period_id', periodIds);
178
+ // Limit by account, if given.
179
+ if (options.accountId) {
180
+ sqlQuery = sqlQuery.andWhere('account.id', '=', options.accountId);
181
+ }
182
+ // Tune ordering.
183
+ sqlQuery = (sqlQuery
184
+ .orderBy('document.date')
185
+ .orderBy('document.number')
186
+ .orderBy('document.id')
187
+ .orderBy('entry.row_number'));
188
+ return sqlQuery;
189
+ }
190
+ /**
191
+ * Construct a report data for the report.
192
+ * @param db
193
+ * @param id
194
+ * @param options
195
+ *
196
+ * Resulting entries on data is an array of objects containing:
197
+ * * `tab` Zero originating indentation number.
198
+ * * `error` If true, this row has an error.
199
+ * * `required` If true, this is always shown.
200
+ * * `hideTotal` if true, do not show total.
201
+ * * `bold` if true, show in bold.
202
+ * * `italic` if true, show in italic.
203
+ * * `bigger` if true, show in bigger font.
204
+ * * `fullWidth` if set, the content in column index defined here is expanded to cover all columns.
205
+ * * `useRemainingColumns` if set, extend this column index to use all the rest columns in the row.
206
+ * * `accountDetails` if true, after this are summarized accounts under this entry.
207
+ * * `isAccount` if true, this is an account entry.
208
+ * * `needLocalization` if set, value should be localized, i.e. translated via Localization component in ui.
209
+ * * `name` Title of the entry.
210
+ * * `number` Account number if the entry is an account.
211
+ * * `amounts` An object with entry for each column mapping name of the columnt to the value to display.
212
+ */
213
+ async renderReport(db, id, options = {}) {
214
+ // Add report forced options.
215
+ Object.assign(options, this.forceOptions(options));
216
+ // Collect settings.
217
+ const settings = (await db('settings').where('name', 'like', `${this.code}.%`).orWhere({ name: 'companyName' }).orWhere({ name: 'companyCode' })).reduce((prev, cur) => ({ ...prev, [cur.name]: cur.value }), {});
218
+ // Find tags.
219
+ const settingName = `${this.code}.tagTypes`;
220
+ if (options.byTags && settings[settingName]) {
221
+ const tags = await db('tags').select('id', 'tag', 'name', 'type', 'order').from('tags').whereIn('type', settings[settingName]).orderBy('order');
222
+ settings.tags = tags;
223
+ }
224
+ else {
225
+ settings.tags = [];
226
+ }
227
+ // Find the formatting text description, if it exist.
228
+ options.format = this.getReportStructure(id, options.lang || 'en');
229
+ // Prepare query.
230
+ const q = await this.constructSqlQuery(db, options, settings);
231
+ let entries = await q;
232
+ // Process big ints.
233
+ for (const entry of entries) {
234
+ entry.amount = parseInt(entry.amount);
235
+ }
236
+ // Apply query filtering.
237
+ entries = this.doFiltering(id, entries, options, settings);
238
+ // We have now relevant entries collected. Use plugin features next.
239
+ const columns = await this.getColumns(id, entries, options, settings);
240
+ let data = this.preProcess(id, entries, options, settings, columns);
241
+ data = this.postProcess(id, data, options, settings, columns);
242
+ const report = {
243
+ format: id,
244
+ columns,
245
+ meta: {
246
+ businessName: settings.companyName,
247
+ businessId: settings.companyCode
248
+ },
249
+ data
250
+ };
251
+ // Do the final conversion, if necessary.
252
+ if (options.csv) {
253
+ return data2csv(report, options);
254
+ }
255
+ return report;
256
+ }
257
+ /**
258
+ * Filter out entries not matching to the report selected parameters.
259
+ * @param id
260
+ * @param entries
261
+ * @param options
262
+ * @param settings
263
+ */
264
+ doFiltering(id, entries, options, settings) {
265
+ let filter = (entry) => true;
266
+ if (options.quarter1) {
267
+ filter = (entry) => dayjs(entry.date).quarter() <= 1;
268
+ }
269
+ if (options.quarter2) {
270
+ filter = (entry) => dayjs(entry.date).quarter() <= 2;
271
+ }
272
+ if (options.quarter3) {
273
+ filter = (entry) => dayjs(entry.date).quarter() <= 3;
274
+ }
275
+ return entries.filter(filter);
276
+ }
277
+ /**
278
+ * This function converts the list of relevant entries to the column report data.
279
+ * @param id
280
+ * @param entries
281
+ * @param options
282
+ * @param columns
283
+ */
284
+ preProcess(id, entries, options, settings, columns) {
285
+ throw new Error(`Report plugin ${this.constructor.name} does not implement preProcess().`);
286
+ }
287
+ /**
288
+ * Do post processing for report data before sending it.
289
+ * @param id Report type.
290
+ * @param data Calculated report data
291
+ * @param options Report options.
292
+ * @param settings System settings.
293
+ * @param columns Column definitions.
294
+ * @returns
295
+ */
296
+ postProcess(id, data, options, settings, columns) {
297
+ return data;
298
+ }
299
+ /**
300
+ * A helper to combine final report from pre-processed material for reports using text description.
301
+ * @param accountNumbers A set of all account numbers found.
302
+ * @param accountNames A mapping from account numbers to their names.
303
+ * @param columnNames A list of column names.
304
+ * @param format A text description of the report.
305
+ * @param totals A mapping from account numbers their total balance.
306
+ * @returns
307
+ */
308
+ parseAndCombineReport(accountNumbers, accountNames, columns, format, totals) {
309
+ const columnNames = columns.filter((col) => col.type === 'numeric').map((col) => col.name);
310
+ // Parse report and construct format.
311
+ const allAccounts = Array.from(accountNumbers).sort();
312
+ const ret = [];
313
+ format.split('\n').forEach((line) => {
314
+ if (/^#/.test(line)) {
315
+ return;
316
+ }
317
+ let [numbers, text, flags] = line.split('\t');
318
+ numbers = numbers.split(' ');
319
+ flags = flags ? new Set(flags.trim().split(/\s+/)) : new Set();
320
+ const tab = text ? text.replace(/^(_*).*/, '$1').length : 0;
321
+ text = text ? text.replace(/^_+/, '') : '';
322
+ if (flags.has('NEW_PAGE')) {
323
+ ret.push({ pageBreak: true });
324
+ return;
325
+ }
326
+ if (flags.has('BREAK')) {
327
+ ret.push({ paragraphBreak: true });
328
+ return;
329
+ }
330
+ // Split the line and reset variables.
331
+ const amounts = {};
332
+ columnNames.forEach((column) => (amounts[column] = null));
333
+ let unused = true;
334
+ const item = { tab, ...this.flags2item(flags) };
335
+ // Collect all totals inside any of the account number ranges.
336
+ for (let i = 0; i < numbers.length; i++) {
337
+ const parts = numbers[i].split('-');
338
+ const from = parts[0];
339
+ const to = parts[1];
340
+ columnNames.forEach((column) => {
341
+ allAccounts.forEach((number) => {
342
+ if (number >= from && number < to) {
343
+ unused = false;
344
+ if (totals[column][number] !== undefined) {
345
+ amounts[column] += totals[column][number];
346
+ }
347
+ }
348
+ });
349
+ });
350
+ }
351
+ // If we actually show details we can skip this entry and fill details below.
352
+ if (!item.accountDetails) {
353
+ if (item.required || !unused) {
354
+ item.name = text;
355
+ item.amounts = amounts;
356
+ ret.push(item);
357
+ }
358
+ }
359
+ // Fill in account details for the entries wanting it.
360
+ if (item.accountDetails) {
361
+ for (let i = 0; i < numbers.length; i++) {
362
+ const parts = numbers[i].split('-');
363
+ const from = parts[0];
364
+ const to = parts[1];
365
+ allAccounts.forEach((number) => {
366
+ if (number >= from && number < to) {
367
+ const item = { tab, ...this.flags2item(flags) };
368
+ item.isAccount = true;
369
+ delete item.accountDetails;
370
+ item.name = accountNames[number];
371
+ item.number = number;
372
+ item.amounts = {};
373
+ columnNames.forEach((column) => {
374
+ if (!item.amounts) {
375
+ item.amounts = {};
376
+ }
377
+ if (totals[column][number] === undefined) {
378
+ item.amounts[column] = null;
379
+ }
380
+ else {
381
+ item.amounts[column] = totals[column][number] + 0;
382
+ }
383
+ });
384
+ ret.push(item);
385
+ }
386
+ });
387
+ }
388
+ }
389
+ });
390
+ return ret;
391
+ }
392
+ }
393
+ //# sourceMappingURL=ReportPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportPlugin.js","sourceRoot":"","sources":["../../../../src/plugins/ReportPlugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { Currency, Language, SchemeName, TsvFilePath } from '@dataplug/tasenor-common';
2
+ import { BackendPlugin } from './BackendPlugin';
3
+ /**
4
+ * A plugin providing one or more accounting schemes.
5
+ */
6
+ export declare class SchemePlugin extends BackendPlugin {
7
+ private schemes;
8
+ constructor(...schemes: SchemeName[]);
9
+ /**
10
+ * Check if this plugin has the given scheme.
11
+ * @param code
12
+ * @returns
13
+ */
14
+ hasScheme(code: any): boolean;
15
+ /**
16
+ * Get the paths to the accounting scheme .tsv files by its code name.
17
+ * @param code
18
+ */
19
+ getSchemePaths(code: any, languae: any): TsvFilePath[];
20
+ /**
21
+ * Get the default settings for the new database.
22
+ * @param code
23
+ * @returns
24
+ */
25
+ getSchemeDefaults(code: any): Record<string, unknown>;
26
+ /**
27
+ * Supported currencies.
28
+ */
29
+ supportedCurrencies(): Currency[];
30
+ /**
31
+ * Supported languages.
32
+ */
33
+ supportedLanguages(): Language[];
34
+ }
@@ -0,0 +1,47 @@
1
+ import { BackendPlugin } from './BackendPlugin';
2
+ /**
3
+ * A plugin providing one or more accounting schemes.
4
+ */
5
+ export class SchemePlugin extends BackendPlugin {
6
+ schemes;
7
+ constructor(...schemes) {
8
+ super();
9
+ this.schemes = new Set(schemes);
10
+ }
11
+ /**
12
+ * Check if this plugin has the given scheme.
13
+ * @param code
14
+ * @returns
15
+ */
16
+ hasScheme(code) {
17
+ return this.schemes.has(code);
18
+ }
19
+ /**
20
+ * Get the paths to the accounting scheme .tsv files by its code name.
21
+ * @param code
22
+ */
23
+ getSchemePaths(code, languae) {
24
+ throw new Error(`A class ${this.constructor.name} does not implement getScheme().`);
25
+ }
26
+ /**
27
+ * Get the default settings for the new database.
28
+ * @param code
29
+ * @returns
30
+ */
31
+ getSchemeDefaults(code) {
32
+ return {};
33
+ }
34
+ /**
35
+ * Supported currencies.
36
+ */
37
+ supportedCurrencies() {
38
+ return [];
39
+ }
40
+ /**
41
+ * Supported languages.
42
+ */
43
+ supportedLanguages() {
44
+ return [];
45
+ }
46
+ }
47
+ //# sourceMappingURL=SchemePlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemePlugin.js","sourceRoot":"","sources":["../../../../src/plugins/SchemePlugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,aAAa;IAErC,OAAO,CAAiB;IAEhC,YAAY,GAAG,OAAqB;QAClC,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;IACjC,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,IAAI;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,OAAO;QAC1B,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,IAAI,kCAAkC,CAAC,CAAA;IACrF,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,IAAI;QACpB,OAAO,EAAE,CAAA;IACX,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,EAAE,CAAA;IACX,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,EAAE,CAAA;IACX,CAAC;CACF"}
@@ -0,0 +1,80 @@
1
+ import { PluginService, PluginServiceResponse } from '@dataplug/tasenor-common';
2
+ import { BackendPlugin } from './BackendPlugin';
3
+ import { KnexDatabase } from '..';
4
+ export type ServicePluginRequestOptions = {
5
+ rateLimitDelay?: number;
6
+ };
7
+ /**
8
+ * An API end point provider.
9
+ */
10
+ export declare class ServicePlugin extends BackendPlugin {
11
+ private services;
12
+ constructor(...services: any[]);
13
+ getServices(): PluginService[];
14
+ /**
15
+ * A query executor called by the back end for API request.
16
+ * @param best The currently best solution found.
17
+ * @param db Knex database.
18
+ * @param service Name of the service to called.
19
+ * @param query Query parameters.
20
+ * This calls the actual query function, handles errors and finally modifies `best` if found a solution.
21
+ */
22
+ executeQuery(best: unknown, db: KnexDatabase, service: PluginService, query: Record<string, unknown>): Promise<void>;
23
+ /**
24
+ * Perform the actual query.
25
+ *
26
+ * @param db Knex database.
27
+ * @param service Name of the service to called.
28
+ * @param query Query parameters.
29
+ */
30
+ query(db: KnexDatabase, settings: Record<string, unknown>, service: PluginService, query: unknown): Promise<void>;
31
+ /**
32
+ * Combine result of the service query.
33
+ *
34
+ * @param old Currently found solution.
35
+ * @param latest The solution given by this plugin.
36
+ *
37
+ * By default, any 2xx status result will override the current result.
38
+ * Any error result will override initial 404 result.
39
+ * Otherwise the latest is ignored.
40
+ */
41
+ addResult(old: any, latest: any): void;
42
+ /**
43
+ * Check if the current solution is sufficient.
44
+ * By default, any status 2xx is sufficient.
45
+ */
46
+ isAdequate(solution: any): boolean;
47
+ /**
48
+ * Execute query to the third party service,
49
+ * @param service
50
+ * @param method
51
+ * @param url
52
+ * @param params
53
+ * @returns Result body.
54
+ */
55
+ request(service: any, method: any, url: any, params: any, headers?: {}): Promise<PluginServiceResponse>;
56
+ /**
57
+ * Pick meaningful keys unique from the headers for using as a key, whe storing result to teh cache.
58
+ * @param service
59
+ * @param header
60
+ * By default, no header is used as cache key.
61
+ */
62
+ cacheHeadersKey(service: any, header: any): {};
63
+ /**
64
+ * Pick meaningful keys unique from the query parameters for using as a key, whe storing result to teh cache.
65
+ * @param service
66
+ * @param params
67
+ * By default, all parameters are used as cache key.
68
+ */
69
+ cacheParamsKey(service: any, params: any): any;
70
+ /**
71
+ * Execute query to the third party service,
72
+ * @param db
73
+ * @param service
74
+ * @param method
75
+ * @param url
76
+ * @param params
77
+ * @returns Result body.
78
+ */
79
+ cachedRequest(db: KnexDatabase | null, service: any, method: any, url: any, params: any, headers?: {}, options?: ServicePluginRequestOptions): Promise<any>;
80
+ }