@tasenor/common-plugins 1.9.32 → 1.9.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +4 -0
- package/.turbo/turbo-ci.log +3 -7
- package/data/PluginIndex.mjs +27 -0
- package/dist/CoinAPI/backend/index.d.ts +22 -0
- package/dist/CoinAPI/backend/index.js +91 -0
- package/dist/CoinAPI/backend/index.js.map +1 -0
- package/dist/CoinbaseImport/backend/CoinbaseHandler.d.ts +12 -0
- package/dist/CoinbaseImport/backend/CoinbaseHandler.js +33 -0
- package/dist/CoinbaseImport/backend/CoinbaseHandler.js.map +1 -0
- package/dist/CoinbaseImport/backend/index.d.ts +5 -0
- package/dist/CoinbaseImport/backend/index.js +18 -0
- package/dist/CoinbaseImport/backend/index.js.map +1 -0
- package/dist/DocumentCleaner/ui/index.d.ts +43 -0
- package/dist/DocumentCleaner/ui/index.js +139 -0
- package/dist/DocumentCleaner/ui/index.js.map +1 -0
- package/dist/Euro/ui/index.d.ts +15 -0
- package/dist/Euro/ui/index.js +22 -0
- package/dist/Euro/ui/index.js.map +1 -0
- package/dist/Finnish/ui/finnish.json +341 -0
- package/dist/Finnish/ui/index.d.ts +17 -0
- package/dist/Finnish/ui/index.js +47 -0
- package/dist/Finnish/ui/index.js.map +1 -0
- package/dist/FinnishBalanceSheetReport/backend/index.d.ts +18 -0
- package/dist/FinnishBalanceSheetReport/backend/index.js +96 -0
- package/dist/FinnishBalanceSheetReport/backend/index.js.map +1 -0
- package/dist/FinnishBalanceSheetReportInvestment/backend/index.d.ts +18 -0
- package/dist/FinnishBalanceSheetReportInvestment/backend/index.js +96 -0
- package/dist/FinnishBalanceSheetReportInvestment/backend/index.js.map +1 -0
- package/dist/FinnishBalanceSheetReportLite/backend/index.d.ts +19 -0
- package/dist/FinnishBalanceSheetReportLite/backend/index.js +109 -0
- package/dist/FinnishBalanceSheetReportLite/backend/index.js.map +1 -0
- package/dist/FinnishIncomeStatementReport/backend/index.d.ts +26 -0
- package/dist/FinnishIncomeStatementReport/backend/index.js +190 -0
- package/dist/FinnishIncomeStatementReport/backend/index.js.map +1 -0
- package/dist/FinnishIncomeStatementReportInvestment/backend/index.d.ts +26 -0
- package/dist/FinnishIncomeStatementReportInvestment/backend/index.js +190 -0
- package/dist/FinnishIncomeStatementReportInvestment/backend/index.js.map +1 -0
- package/dist/FinnishIncomeStatementReportLite/backend/index.d.ts +26 -0
- package/dist/FinnishIncomeStatementReportLite/backend/index.js +188 -0
- package/dist/FinnishIncomeStatementReportLite/backend/index.js.map +1 -0
- package/dist/FinnishInvestmentCompany/backend/index.d.ts +10 -0
- package/dist/FinnishInvestmentCompany/backend/index.js +36 -0
- package/dist/FinnishInvestmentCompany/backend/index.js.map +1 -0
- package/dist/FinnishInvestmentCompany/ui/index.d.ts +16 -0
- package/dist/FinnishInvestmentCompany/ui/index.js +22 -0
- package/dist/FinnishInvestmentCompany/ui/index.js.map +1 -0
- package/dist/FinnishLimitedCompanyComplete/backend/index.d.ts +10 -0
- package/dist/FinnishLimitedCompanyComplete/backend/index.js +36 -0
- package/dist/FinnishLimitedCompanyComplete/backend/index.js.map +1 -0
- package/dist/FinnishLimitedCompanyComplete/ui/index.d.ts +16 -0
- package/dist/FinnishLimitedCompanyComplete/ui/index.js +22 -0
- package/dist/FinnishLimitedCompanyComplete/ui/index.js.map +1 -0
- package/dist/FinnishLimitedCompanyLite/backend/index.d.ts +10 -0
- package/dist/FinnishLimitedCompanyLite/backend/index.js +43 -0
- package/dist/FinnishLimitedCompanyLite/backend/index.js.map +1 -0
- package/dist/FinnishLimitedCompanyLite/ui/index.d.ts +16 -0
- package/dist/FinnishLimitedCompanyLite/ui/index.js +24 -0
- package/dist/FinnishLimitedCompanyLite/ui/index.js.map +1 -0
- package/dist/GitBackup/backend/index.d.ts +26 -0
- package/dist/GitBackup/backend/index.js +91 -0
- package/dist/GitBackup/backend/index.js.map +1 -0
- package/dist/GitBackup/ui/index.d.ts +44 -0
- package/dist/GitBackup/ui/index.js +114 -0
- package/dist/GitBackup/ui/index.js.map +1 -0
- package/dist/IncomeAndExpenses/backend/index.d.ts +5 -0
- package/dist/IncomeAndExpenses/backend/index.js +350 -0
- package/dist/IncomeAndExpenses/backend/index.js.map +1 -0
- package/dist/JournalReport/backend/index.d.ts +15 -0
- package/dist/JournalReport/backend/index.js +143 -0
- package/dist/JournalReport/backend/index.js.map +1 -0
- package/dist/KrakenImport/backend/KrakenHandler.d.ts +24 -0
- package/dist/KrakenImport/backend/KrakenHandler.js +86 -0
- package/dist/KrakenImport/backend/KrakenHandler.js.map +1 -0
- package/dist/KrakenImport/backend/index.d.ts +5 -0
- package/dist/KrakenImport/backend/index.js +18 -0
- package/dist/KrakenImport/backend/index.js.map +1 -0
- package/dist/LedgerReport/backend/index.d.ts +15 -0
- package/dist/LedgerReport/backend/index.js +150 -0
- package/dist/LedgerReport/backend/index.js.map +1 -0
- package/dist/LynxImport/backend/LynxHandler.d.ts +29 -0
- package/dist/LynxImport/backend/LynxHandler.js +343 -0
- package/dist/LynxImport/backend/LynxHandler.js.map +1 -0
- package/dist/LynxImport/backend/index.d.ts +5 -0
- package/dist/LynxImport/backend/index.js +18 -0
- package/dist/LynxImport/backend/index.js.map +1 -0
- package/dist/NordeaImport/backend/NordeaHandler.d.ts +12 -0
- package/dist/NordeaImport/backend/NordeaHandler.js +42 -0
- package/dist/NordeaImport/backend/NordeaHandler.js.map +1 -0
- package/dist/NordeaImport/backend/index.d.ts +5 -0
- package/dist/NordeaImport/backend/index.js +18 -0
- package/dist/NordeaImport/backend/index.js.map +1 -0
- package/dist/NordnetImport/backend/NordnetHandler.d.ts +18 -0
- package/dist/NordnetImport/backend/NordnetHandler.js +69 -0
- package/dist/NordnetImport/backend/NordnetHandler.js.map +1 -0
- package/dist/NordnetImport/backend/index.d.ts +5 -0
- package/dist/NordnetImport/backend/index.js +18 -0
- package/dist/NordnetImport/backend/index.js.map +1 -0
- package/dist/Rand/ui/index.d.ts +15 -0
- package/dist/Rand/ui/index.js +22 -0
- package/dist/Rand/ui/index.js.map +1 -0
- package/dist/RapidAPI/backend/index.d.ts +22 -0
- package/dist/RapidAPI/backend/index.js +119 -0
- package/dist/RapidAPI/backend/index.js.map +1 -0
- package/dist/TITOImport/backend/TITOHandler.d.ts +14 -0
- package/dist/TITOImport/backend/TITOHandler.js +244 -0
- package/dist/TITOImport/backend/TITOHandler.js.map +1 -0
- package/dist/TITOImport/backend/index.d.ts +5 -0
- package/dist/TITOImport/backend/index.js +18 -0
- package/dist/TITOImport/backend/index.js.map +1 -0
- package/dist/TagEditor/ui/index.d.ts +31 -0
- package/dist/TagEditor/ui/index.js +349 -0
- package/dist/TagEditor/ui/index.js.map +1 -0
- package/dist/USDollar/ui/index.d.ts +15 -0
- package/dist/USDollar/ui/index.js +22 -0
- package/dist/USDollar/ui/index.js.map +1 -0
- package/dist/VAT/ui/index.d.ts +69 -0
- package/dist/VAT/ui/index.js +509 -0
- package/dist/VAT/ui/index.js.map +1 -0
- package/dist/VATFinland/backend/index.d.ts +5 -0
- package/dist/VATFinland/backend/index.js +17 -0
- package/dist/VATFinland/backend/index.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/package.json +8 -5
- package/src/CoinbaseImport/backend/CoinbaseHandler.ts +5 -1
- package/src/KrakenImport/backend/KrakenHandler.ts +5 -1
- package/src/LynxImport/backend/LynxHandler.ts +5 -1
- package/src/NordeaImport/backend/NordeaHandler.ts +5 -1
- package/src/NordnetImport/backend/NordnetHandler.ts +5 -1
- package/src/TITOImport/backend/TITOHandler.ts +5 -1
- package/src/index.ts +28 -0
package/.turbo/turbo-ci.log
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
> @tasenor/common-plugins@1.9.
|
|
3
|
-
> pnpm run lint
|
|
2
|
+
> @tasenor/common-plugins@1.9.33 ci /home/wigy/project/tasenor-qa/tasenor-bookkeeper/packages/tasenor-common-plugins
|
|
3
|
+
> pnpm run lint
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @tasenor/common-plugins@1.9.
|
|
6
|
+
> @tasenor/common-plugins@1.9.33 lint /home/wigy/project/tasenor-qa/tasenor-bookkeeper/packages/tasenor-common-plugins
|
|
7
7
|
> eslint 'src/**/*.{ts,tsx}' 'data/**/*.mjs'
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
> @tasenor/common-plugins@1.9.30 build /home/wigy/project/tasenor-qa/tasenor-bookkeeper/packages/tasenor-common-plugins
|
|
11
|
-
> rm -fr dist && tsc
|
|
12
|
-
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import glob from 'glob'
|
|
3
|
+
import fs from 'fs'
|
|
4
|
+
import path from 'path'
|
|
5
|
+
import * as url from 'url'
|
|
6
|
+
|
|
7
|
+
const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
|
|
8
|
+
const dir = path.join(__dirname, '..', 'src')
|
|
9
|
+
|
|
10
|
+
let txt = ''
|
|
11
|
+
for (const pathName of glob.sync(dir + '/*')) {
|
|
12
|
+
const module = path.basename(pathName)
|
|
13
|
+
if (fs.existsSync(path.join(pathName, 'backend'))) {
|
|
14
|
+
txt += `export { default as ${module}Backend } from './${module}/backend'\n`
|
|
15
|
+
}
|
|
16
|
+
if (fs.existsSync(path.join(pathName, 'backend', `${module.replace(/Import$/, '')}Handler.ts`))) {
|
|
17
|
+
txt += `export { ${module.replace(/Import$/, '')}Handler } from './${module}/backend/${module.replace(/Import$/, '')}Handler'\n`
|
|
18
|
+
}
|
|
19
|
+
// TODO: Currently tasenor-testing package does not compile tests, if this is included.
|
|
20
|
+
// if (fs.existsSync(path.join(pathName, 'ui'))) {
|
|
21
|
+
// txt += `export { default as ${module}UI } from './${module}/ui'\n`
|
|
22
|
+
// }
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const indexPath = path.join(dir, 'index.ts')
|
|
26
|
+
fs.writeFileSync(indexPath, txt)
|
|
27
|
+
console.log(new Date(), `Saved plugin index to ${indexPath}`)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ServicePlugin } from '@tasenor/common-node';
|
|
2
|
+
import { TasenorElement } from '@tasenor/common';
|
|
3
|
+
/**
|
|
4
|
+
* Service: historical-crypto-rate
|
|
5
|
+
*
|
|
6
|
+
* Query:
|
|
7
|
+
* - *from* A crypto asset code to convert from.
|
|
8
|
+
* - *to* A currency code to convert to.
|
|
9
|
+
* - *date* A timestamp when rating is wanted.
|
|
10
|
+
*
|
|
11
|
+
* Response:
|
|
12
|
+
* {
|
|
13
|
+
* status: 200,
|
|
14
|
+
* rate: 0.88123123
|
|
15
|
+
* }
|
|
16
|
+
*/
|
|
17
|
+
declare class CoinAPI extends ServicePlugin {
|
|
18
|
+
constructor();
|
|
19
|
+
query(db: any, settings: any, service: any, query: any): Promise<any>;
|
|
20
|
+
getSettings(): TasenorElement;
|
|
21
|
+
}
|
|
22
|
+
export default CoinAPI;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { ServicePlugin } from '@tasenor/common-node';
|
|
2
|
+
/**
|
|
3
|
+
* Service: historical-crypto-rate
|
|
4
|
+
*
|
|
5
|
+
* Query:
|
|
6
|
+
* - *from* A crypto asset code to convert from.
|
|
7
|
+
* - *to* A currency code to convert to.
|
|
8
|
+
* - *date* A timestamp when rating is wanted.
|
|
9
|
+
*
|
|
10
|
+
* Response:
|
|
11
|
+
* {
|
|
12
|
+
* status: 200,
|
|
13
|
+
* rate: 0.88123123
|
|
14
|
+
* }
|
|
15
|
+
*/
|
|
16
|
+
class CoinAPI extends ServicePlugin {
|
|
17
|
+
constructor() {
|
|
18
|
+
super('historical-crypto-rate');
|
|
19
|
+
this.code = 'CoinAPI';
|
|
20
|
+
this.title = 'Coin API Service';
|
|
21
|
+
this.version = '1.0.5';
|
|
22
|
+
this.icon = '<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><g><rect fill="none" height="24" width="24"/></g><g><path d="M12.89,11.1c-1.78-0.59-2.64-0.96-2.64-1.9c0-1.02,1.11-1.39,1.81-1.39c1.31,0,1.79,0.99,1.9,1.34l1.58-0.67 C15.39,8.03,14.72,6.56,13,6.24V5h-2v1.26C8.52,6.82,8.51,9.12,8.51,9.22c0,2.27,2.25,2.91,3.35,3.31 c1.58,0.56,2.28,1.07,2.28,2.03c0,1.13-1.05,1.61-1.98,1.61c-1.82,0-2.34-1.87-2.4-2.09L8.1,14.75c0.63,2.19,2.28,2.78,2.9,2.96V19 h2v-1.24c0.4-0.09,2.9-0.59,2.9-3.22C15.9,13.15,15.29,11.93,12.89,11.1z M3,21H1v-6h6v2l-2.48,0c1.61,2.41,4.36,4,7.48,4 c4.97,0,9-4.03,9-9h2c0,6.08-4.92,11-11,11c-3.72,0-7.01-1.85-9-4.67L3,21z M1,12C1,5.92,5.92,1,12,1c3.72,0,7.01,1.85,9,4.67L21,3 h2v6h-6V7l2.48,0C17.87,4.59,15.12,3,12,3c-4.97,0-9,4.03-9,9H1z"/></g></svg>';
|
|
23
|
+
this.releaseDate = '2022-05-13';
|
|
24
|
+
this.use = 'backend';
|
|
25
|
+
this.type = 'service';
|
|
26
|
+
this.description = 'This service provides historical rates from https://coinapi.io/. Currently it has a service `historical-crypto-rate`, which can be used to fetch historical crypto currency rates.';
|
|
27
|
+
this.languages = {
|
|
28
|
+
en: {
|
|
29
|
+
'label-apiKey': 'Your API key to use',
|
|
30
|
+
},
|
|
31
|
+
fi: {
|
|
32
|
+
'label-apiKey': 'API key eli avain',
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
async query(db, settings, service, query) {
|
|
37
|
+
const apiKey = settings.apiKey;
|
|
38
|
+
if (!apiKey) {
|
|
39
|
+
return {
|
|
40
|
+
status: 400,
|
|
41
|
+
message: 'Setting apiKey is not set.'
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
if (!query.date) {
|
|
45
|
+
return {
|
|
46
|
+
status: 400,
|
|
47
|
+
message: 'Query parameter `date` is not set.'
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (!query.from) {
|
|
51
|
+
return {
|
|
52
|
+
status: 400,
|
|
53
|
+
message: 'Query parameter `from` is not set.'
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
if (!query.to) {
|
|
57
|
+
return {
|
|
58
|
+
status: 400,
|
|
59
|
+
message: 'Query parameter `to` is not set.'
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
const date = new Date(query.date);
|
|
63
|
+
const res = await this.cachedRequest(db, service, 'GET', `https://rest.coinapi.io/v1/exchangerate/${query.from}/${query.to}`, {
|
|
64
|
+
time: date.toISOString()
|
|
65
|
+
}, {
|
|
66
|
+
'X-CoinAPI-Key': apiKey,
|
|
67
|
+
});
|
|
68
|
+
return res.status === 200 ? { status: 200, rate: res.data.rate } : res;
|
|
69
|
+
}
|
|
70
|
+
getSettings() {
|
|
71
|
+
return {
|
|
72
|
+
type: 'flat',
|
|
73
|
+
elements: [
|
|
74
|
+
{
|
|
75
|
+
type: 'text',
|
|
76
|
+
name: 'apiKey',
|
|
77
|
+
actions: {}
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
type: 'button',
|
|
81
|
+
label: 'Save',
|
|
82
|
+
actions: {
|
|
83
|
+
onClick: { type: 'saveSettings', backend: true, plugin: 'CoinAPI' }
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export default CoinAPI;
|
|
91
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/CoinAPI/backend/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAGpD;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAQ,SAAQ,aAAa;IAEjC;QACE,KAAK,CAAC,wBAAwB,CAAC,CAAA;QAE/B,IAAI,CAAC,IAAI,GAAG,SAAuB,CAAA;QACnC,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAA;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAkB,CAAA;QACjC,IAAI,CAAC,IAAI,GAAG,i1BAAi1B,CAAA;QAC71B,IAAI,CAAC,WAAW,GAAG,YAAY,CAAA;QAC/B,IAAI,CAAC,GAAG,GAAG,SAAS,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;QACrB,IAAI,CAAC,WAAW,GAAG,oLAAoL,CAAA;QAEvM,IAAI,CAAC,SAAS,GAAG;YACf,EAAE,EAAE;gBACF,cAAc,EAAE,qBAAqB;aACtC;YACD,EAAE,EAAE;gBACF,cAAc,EAAE,mBAAmB;aACpC;SACF,CAAA;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK;QACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;QAC9B,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;gBACL,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,4BAA4B;aACtC,CAAA;SACF;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YACf,OAAO;gBACL,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,oCAAoC;aAC9C,CAAA;SACF;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YACf,OAAO;gBACL,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,oCAAoC;aAC9C,CAAA;SACF;QACD,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;YACb,OAAO;gBACL,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,kCAAkC;aAC5C,CAAA;SACF;QACD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACjC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAClC,EAAE,EACF,OAAO,EACP,KAAK,EAAE,2CAA2C,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,EAC1E;YACE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;SACzB,EAAE;YACD,eAAe,EAAE,MAAM;SACxB,CAAC,CAAA;QACJ,OAAO,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;IACxE,CAAC;IAED,WAAW;QACT,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;iBACZ;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE;wBACP,OAAO,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAuB,EAAE;qBAClF;iBACF;aACF;SACF,CAAA;IACH,CAAC;CACF;AAED,eAAe,OAAO,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { DirectoryPath, NO_SEGMENT, SegmentId, TextFileLine } from '@tasenor/common';
|
|
2
|
+
import { ProcessFile, TransactionImportHandler } from '@tasenor/common-node';
|
|
3
|
+
/**
|
|
4
|
+
* Import implementation for Coinbase CSV format.
|
|
5
|
+
*/
|
|
6
|
+
export declare class CoinbaseHandler extends TransactionImportHandler {
|
|
7
|
+
constructor();
|
|
8
|
+
get path(): DirectoryPath;
|
|
9
|
+
canHandle(file: ProcessFile): boolean;
|
|
10
|
+
segmentId(line: TextFileLine): SegmentId | typeof NO_SEGMENT;
|
|
11
|
+
time(line: TextFileLine): Date | undefined;
|
|
12
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { TransactionImportHandler } from '@tasenor/common-node';
|
|
2
|
+
/**
|
|
3
|
+
* Import implementation for Coinbase CSV format.
|
|
4
|
+
*/
|
|
5
|
+
export class CoinbaseHandler extends TransactionImportHandler {
|
|
6
|
+
constructor() {
|
|
7
|
+
super('CoinbaseImport');
|
|
8
|
+
this.importOptions = {
|
|
9
|
+
parser: 'csv',
|
|
10
|
+
numericFields: ['amount', 'balance'],
|
|
11
|
+
requiredFields: [],
|
|
12
|
+
textField: 'type',
|
|
13
|
+
totalAmountField: 'amount',
|
|
14
|
+
csv: { useFirstLineHeadings: true }
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
get path() {
|
|
18
|
+
return __dirname;
|
|
19
|
+
}
|
|
20
|
+
canHandle(file) {
|
|
21
|
+
return file.firstLineMatch(/^(portfolio,)?type,time,amount,balance,amount.balance unit,transfer id,trade id,order id/);
|
|
22
|
+
}
|
|
23
|
+
segmentId(line) {
|
|
24
|
+
if (['deposit', 'withdrawal'].includes(line.columns.type)) {
|
|
25
|
+
return line.columns['transfer id'];
|
|
26
|
+
}
|
|
27
|
+
return line.columns['trade id'];
|
|
28
|
+
}
|
|
29
|
+
time(line) {
|
|
30
|
+
return line.columns.time ? new Date(line.columns.time) : undefined;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=CoinbaseHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CoinbaseHandler.js","sourceRoot":"","sources":["../../../src/CoinbaseImport/backend/CoinbaseHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAE5E;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,wBAAwB;IAE3D;QACE,KAAK,CAAC,gBAAgB,CAAC,CAAA;QACvB,IAAI,CAAC,aAAa,GAAG;YACnB,MAAM,EAAE,KAAK;YACb,aAAa,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;YACpC,cAAc,EAAE,EAAE;YAClB,SAAS,EAAE,MAAM;YACjB,gBAAgB,EAAE,QAAQ;YAC1B,GAAG,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE;SACpC,CAAA;IACH,CAAC;IAED,IAAI,IAAI;QACN,OAAO,SAA0B,CAAA;IACnC,CAAC;IAED,SAAS,CAAC,IAAiB;QACzB,OAAO,IAAI,CAAC,cAAc,CAAC,0FAA0F,CAAC,CAAA;IACxH,CAAC;IAED,SAAS,CAAC,IAAkB;QAC1B,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACzD,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;SACnC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACjC,CAAC;IAED,IAAI,CAAC,IAAkB;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACpE,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ImportPlugin } from '@tasenor/common-node';
|
|
2
|
+
import { CoinbaseHandler } from './CoinbaseHandler';
|
|
3
|
+
class CoinbaseImportPlugin extends ImportPlugin {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(new CoinbaseHandler());
|
|
6
|
+
this.code = 'CoinbaseImport';
|
|
7
|
+
this.title = 'Import for Coinbase';
|
|
8
|
+
this.version = '1.0.21';
|
|
9
|
+
this.icon = '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M5 6.99h3V14h2V6.99h3L9 3zM14 10v7.01h-3L15 21l4-3.99h-3V10z"/></svg>';
|
|
10
|
+
this.releaseDate = '2022-10-24';
|
|
11
|
+
this.use = 'backend';
|
|
12
|
+
this.type = 'import';
|
|
13
|
+
this.description = 'Import plugin for importing transaction data in CSV format provided by Coinbase crypto exchange.';
|
|
14
|
+
this.languages = this.getLanguages();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export default CoinbaseImportPlugin;
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/CoinbaseImport/backend/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,oBAAqB,SAAQ,YAAY;IAE7C;QACE,KAAK,CAAC,IAAI,eAAe,EAAE,CAAC,CAAA;QAE5B,IAAI,CAAC,IAAI,GAAG,gBAA8B,CAAA;QAC1C,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAA;QAClC,IAAI,CAAC,OAAO,GAAG,QAAmB,CAAA;QAClC,IAAI,CAAC,IAAI,GAAG,6NAA6N,CAAA;QACzO,IAAI,CAAC,WAAW,GAAG,YAAY,CAAA;QAC/B,IAAI,CAAC,GAAG,GAAG,SAAS,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAA;QACpB,IAAI,CAAC,WAAW,GAAG,kGAAkG,CAAA;QAErH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;IACtC,CAAC;CAEF;AAED,eAAe,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { ToolPlugin } from '@tasenor/common-ui';
|
|
3
|
+
import { ShortDate, ID } from '@tasenor/common';
|
|
4
|
+
declare class DocumentCleaner extends ToolPlugin {
|
|
5
|
+
static code: string;
|
|
6
|
+
static title: string;
|
|
7
|
+
static version: string;
|
|
8
|
+
static icon: string;
|
|
9
|
+
static releaseDate: string;
|
|
10
|
+
static use: string;
|
|
11
|
+
static type: string;
|
|
12
|
+
static description: string;
|
|
13
|
+
constructor();
|
|
14
|
+
toolMenu(): {
|
|
15
|
+
title: string;
|
|
16
|
+
disabled: boolean;
|
|
17
|
+
}[];
|
|
18
|
+
toolTitle(): string;
|
|
19
|
+
/**
|
|
20
|
+
* Gather a list of documents having no entries.
|
|
21
|
+
*/
|
|
22
|
+
emptyDocuments(period: any): unknown[];
|
|
23
|
+
/**
|
|
24
|
+
* Gather change proposals for incorrectly numbered documents.
|
|
25
|
+
*/
|
|
26
|
+
incorrectlyNumberedDocuments(period: any): {
|
|
27
|
+
id?: ID | undefined;
|
|
28
|
+
date: ShortDate;
|
|
29
|
+
number?: number | undefined;
|
|
30
|
+
newNumber: number;
|
|
31
|
+
}[];
|
|
32
|
+
toolTopPanel(): JSX.Element;
|
|
33
|
+
toolMainPanel(): JSX.Element;
|
|
34
|
+
/**
|
|
35
|
+
* Renumber documents of the period.
|
|
36
|
+
*/
|
|
37
|
+
renumberDocuments(): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Delete all documents without entries.
|
|
40
|
+
*/
|
|
41
|
+
dropEmptyDocuments(): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
export default DocumentCleaner;
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// eslint-disable-next-line no-use-before-define
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Title, Localize, SubPanel, IconButton, ToolPlugin } from '@tasenor/common-ui';
|
|
4
|
+
import { runInAction } from 'mobx';
|
|
5
|
+
import { Trans } from 'react-i18next';
|
|
6
|
+
import { Typography } from '@mui/material';
|
|
7
|
+
class DocumentCleaner extends ToolPlugin {
|
|
8
|
+
static code = 'DocumentCleaner';
|
|
9
|
+
static title = 'Document Cleaner';
|
|
10
|
+
static version = '1.0.18';
|
|
11
|
+
static icon = '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M5 10h6v8H5z" opacity=".3"/><path d="M15 16h4v2h-4zm0-8h7v2h-7zm0 4h6v2h-6zM3 18c0 1.1.9 2 2 2h6c1.1 0 2-.9 2-2V8H3v10zm2-8h6v8H5v-8zm5-6H6L5 5H2v2h12V5h-3z"/></svg>';
|
|
12
|
+
static releaseDate = '2022-04-09';
|
|
13
|
+
static use = 'ui';
|
|
14
|
+
static type = 'tool';
|
|
15
|
+
static description = 'Tools for renumbering documents by their date. You can also remove all documents that have no entries.';
|
|
16
|
+
constructor() {
|
|
17
|
+
super();
|
|
18
|
+
this.languages = {
|
|
19
|
+
fi: {
|
|
20
|
+
'Document Cleaner': 'Tositteiden Siivous',
|
|
21
|
+
'All documents are correctly numbered.': 'Kaikki tositteet on numeroitu oikein.',
|
|
22
|
+
'Document Cleaning': 'Tositteiden siivous',
|
|
23
|
+
'Documents that need renumbering': 'Uudelleennumerointia vaativat tositteet',
|
|
24
|
+
'Documents having no entries': 'Tyhjät tositteet',
|
|
25
|
+
'No empty documents.': 'Ei tyhjiä tositteita',
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
toolMenu() {
|
|
30
|
+
return [{ title: 'Document Cleaning', disabled: !this.store || !this.store.periodId }];
|
|
31
|
+
}
|
|
32
|
+
toolTitle() {
|
|
33
|
+
return 'Document Cleaning';
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Gather a list of documents having no entries.
|
|
37
|
+
*/
|
|
38
|
+
emptyDocuments(period) {
|
|
39
|
+
return Object.values(period.documents).filter((doc) => doc.entries && doc.entries.length === 0 && doc.number);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Gather change proposals for incorrectly numbered documents.
|
|
43
|
+
*/
|
|
44
|
+
incorrectlyNumberedDocuments(period) {
|
|
45
|
+
let next = 0;
|
|
46
|
+
const changed = [];
|
|
47
|
+
const docs = Object.values(period.documents).sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime() || (a.number || 0) - (b.number || 0));
|
|
48
|
+
docs.forEach((doc) => {
|
|
49
|
+
if (doc.number !== next) {
|
|
50
|
+
changed.push({
|
|
51
|
+
id: doc.id,
|
|
52
|
+
date: doc.date,
|
|
53
|
+
number: doc.number,
|
|
54
|
+
newNumber: next
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
next++;
|
|
58
|
+
});
|
|
59
|
+
return changed;
|
|
60
|
+
}
|
|
61
|
+
toolTopPanel() {
|
|
62
|
+
const { store } = this;
|
|
63
|
+
if (!store || !store.period) {
|
|
64
|
+
return React.createElement(React.Fragment, null);
|
|
65
|
+
}
|
|
66
|
+
const toRenumber = store.period && !store.period.locked ? this.incorrectlyNumberedDocuments(store.period) : [];
|
|
67
|
+
const toDelete = store.period && !store.period.locked ? this.emptyDocuments(store.period) : [];
|
|
68
|
+
return (React.createElement(React.Fragment, null,
|
|
69
|
+
React.createElement(IconButton, { id: "Renumber Documents", key: "button-renumber", disabled: !toRenumber.length, onClick: () => this.renumberDocuments(), title: "sort-documents", icon: "sort-up" }),
|
|
70
|
+
React.createElement(IconButton, { id: "Drop Empty Documents", key: "button-clean", disabled: !toDelete.length, onClick: () => this.dropEmptyDocuments(), title: "drop-empty-documents", icon: "trash" })));
|
|
71
|
+
}
|
|
72
|
+
toolMainPanel() {
|
|
73
|
+
const { store } = this;
|
|
74
|
+
if (!store || !store.period) {
|
|
75
|
+
return React.createElement(React.Fragment, null);
|
|
76
|
+
}
|
|
77
|
+
const toRenumber = this.incorrectlyNumberedDocuments(store.period);
|
|
78
|
+
const toDelete = this.emptyDocuments(store.period);
|
|
79
|
+
return (React.createElement("div", null,
|
|
80
|
+
React.createElement(Title, null,
|
|
81
|
+
React.createElement(Trans, null, "Documents that need renumbering")),
|
|
82
|
+
React.createElement(SubPanel, { className: "NeedRenumbering" },
|
|
83
|
+
React.createElement("div", { style: { display: 'grid', gridTemplateColumns: 'repeat(5, 1fr)', marginBottom: '1rem', padding: '1rem' } }, toRenumber.length
|
|
84
|
+
? toRenumber.map((c) => React.createElement("div", { key: c.id },
|
|
85
|
+
React.createElement(Typography, { color: "primary" },
|
|
86
|
+
React.createElement(Localize, { date: c.date }),
|
|
87
|
+
"\u00A0 #",
|
|
88
|
+
c.number,
|
|
89
|
+
" ",
|
|
90
|
+
'->',
|
|
91
|
+
" #",
|
|
92
|
+
c.newNumber)))
|
|
93
|
+
: React.createElement(Trans, null, "All documents are correctly numbered."))),
|
|
94
|
+
React.createElement(Title, null,
|
|
95
|
+
React.createElement(Trans, null, "Documents having no entries")),
|
|
96
|
+
React.createElement(SubPanel, { className: "EmptyDocuments" },
|
|
97
|
+
React.createElement("div", { style: { display: 'grid', gridTemplateColumns: 'repeat(7, 1fr)', marginBottom: '1rem', padding: '1rem' } }, toDelete.length
|
|
98
|
+
? toDelete.map((d) => React.createElement("div", { key: d.id },
|
|
99
|
+
React.createElement(Typography, { color: "primary" },
|
|
100
|
+
React.createElement(Localize, { date: d.date }),
|
|
101
|
+
"\u00A0 #",
|
|
102
|
+
d.number)))
|
|
103
|
+
: React.createElement(Trans, null, "No empty documents.")))));
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Renumber documents of the period.
|
|
107
|
+
*/
|
|
108
|
+
async renumberDocuments() {
|
|
109
|
+
const { store } = this;
|
|
110
|
+
if (!store || !store.period) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const toRenumber = this.incorrectlyNumberedDocuments(store.period);
|
|
114
|
+
for (const change of toRenumber) {
|
|
115
|
+
if (change.id) {
|
|
116
|
+
const doc = store.period.getDocument(change.id);
|
|
117
|
+
runInAction(() => (doc.number = change.newNumber));
|
|
118
|
+
await doc.save();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Delete all documents without entries.
|
|
124
|
+
*/
|
|
125
|
+
async dropEmptyDocuments() {
|
|
126
|
+
const { store } = this;
|
|
127
|
+
if (!store || !store.period) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
runInAction(async () => {
|
|
131
|
+
const toDrop = this.emptyDocuments(store.period);
|
|
132
|
+
for (const doc of toDrop) {
|
|
133
|
+
await doc.delete();
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
export default DocumentCleaner;
|
|
139
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/DocumentCleaner/ui/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { CurrencyPlugin } from '@tasenor/common-ui';
|
|
2
|
+
declare class Euro extends CurrencyPlugin {
|
|
3
|
+
static code: string;
|
|
4
|
+
static title: string;
|
|
5
|
+
static version: string;
|
|
6
|
+
static icon: string;
|
|
7
|
+
static releaseDate: string;
|
|
8
|
+
static use: string;
|
|
9
|
+
static type: string;
|
|
10
|
+
static description: string;
|
|
11
|
+
getCurrencySymbol(): string;
|
|
12
|
+
getCurrencyCode(): string;
|
|
13
|
+
money2str(cents: any, signed?: boolean): string;
|
|
14
|
+
}
|
|
15
|
+
export default Euro;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { CurrencyPlugin } from '@tasenor/common-ui';
|
|
2
|
+
class Euro extends CurrencyPlugin {
|
|
3
|
+
static code = 'Euro';
|
|
4
|
+
static title = 'Currency Euro';
|
|
5
|
+
static version = '1.0.11';
|
|
6
|
+
static icon = '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M15 18.5c-2.51 0-4.68-1.42-5.76-3.5H15v-2H8.58c-.05-.33-.08-.66-.08-1s.03-.67.08-1H15V9H9.24C10.32 6.92 12.5 5.5 15 5.5c1.61 0 3.09.59 4.23 1.57L21 5.3C19.41 3.87 17.3 3 15 3c-3.92 0-7.24 2.51-8.48 6H3v2h3.06c-.04.33-.06.66-.06 1s.02.67.06 1H3v2h3.52c1.24 3.49 4.56 6 8.48 6 2.31 0 4.41-.87 6-2.3l-1.78-1.77c-1.13.98-2.6 1.57-4.22 1.57z"/></svg>';
|
|
7
|
+
static releaseDate = '2022-03-11';
|
|
8
|
+
static use = 'ui';
|
|
9
|
+
static type = 'currency';
|
|
10
|
+
static description = 'Support for euro currency.';
|
|
11
|
+
getCurrencySymbol() {
|
|
12
|
+
return '€';
|
|
13
|
+
}
|
|
14
|
+
getCurrencyCode() {
|
|
15
|
+
return 'EUR';
|
|
16
|
+
}
|
|
17
|
+
money2str(cents, signed = false) {
|
|
18
|
+
return this.makeMoney(cents, 100, 2, signed && cents >= 0 ? '+' : '', ' ', ',', '€');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export default Euro;
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Euro/ui/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD,MAAM,IAAK,SAAQ,cAAc;IAE/B,MAAM,CAAC,IAAI,GAAG,MAAM,CAAA;IACpB,MAAM,CAAC,KAAK,GAAG,eAAe,CAAA;IAC9B,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAA;IACzB,MAAM,CAAC,IAAI,GAAG,ifAAif,CAAA;IAC/f,MAAM,CAAC,WAAW,GAAG,YAAY,CAAA;IACjC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAA;IACjB,MAAM,CAAC,IAAI,GAAG,UAAU,CAAA;IACxB,MAAM,CAAC,WAAW,GAAG,4BAA4B,CAAA;IAEjD,iBAAiB;QACf,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,eAAe;QACb,OAAO,KAAK,CAAA;IACd,CAAC;IAED,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IACtF,CAAC;;AAGH,eAAe,IAAI,CAAA"}
|