@tasenor/common-node 1.9.32 → 1.9.33
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/dist/migrations/01_init.js +60 -0
- package/dist/src/cli.d.ts +81 -0
- package/dist/src/cli.js +242 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/account.d.ts +12 -0
- package/dist/src/commands/account.js +58 -0
- package/dist/src/commands/account.js.map +1 -0
- package/dist/src/commands/balance.d.ts +11 -0
- package/dist/src/commands/balance.js +117 -0
- package/dist/src/commands/balance.js.map +1 -0
- package/dist/src/commands/db.d.ts +14 -0
- package/dist/src/commands/db.js +69 -0
- package/dist/src/commands/db.js.map +1 -0
- package/dist/src/commands/entry.d.ts +13 -0
- package/dist/src/commands/entry.js +106 -0
- package/dist/src/commands/entry.js.map +1 -0
- package/dist/src/commands/import.d.ts +17 -0
- package/dist/src/commands/import.js +140 -0
- package/dist/src/commands/import.js.map +1 -0
- package/dist/src/commands/importer.d.ts +13 -0
- package/dist/src/commands/importer.js +71 -0
- package/dist/src/commands/importer.js.map +1 -0
- package/dist/src/commands/index.d.ts +191 -0
- package/dist/src/commands/index.js +482 -0
- package/dist/src/commands/index.js.map +1 -0
- package/dist/src/commands/period.d.ts +12 -0
- package/dist/src/commands/period.js +48 -0
- package/dist/src/commands/period.js.map +1 -0
- package/dist/src/commands/plugin.d.ts +15 -0
- package/dist/src/commands/plugin.js +78 -0
- package/dist/src/commands/plugin.js.map +1 -0
- package/dist/src/commands/report.d.ts +11 -0
- package/dist/src/commands/report.js +96 -0
- package/dist/src/commands/report.js.map +1 -0
- package/dist/src/commands/settings.d.ts +10 -0
- package/dist/src/commands/settings.js +64 -0
- package/dist/src/commands/settings.js.map +1 -0
- package/dist/src/commands/stock.d.ts +8 -0
- package/dist/src/commands/stock.js +73 -0
- package/dist/src/commands/stock.js.map +1 -0
- package/dist/src/commands/tag.d.ts +13 -0
- package/dist/src/commands/tag.js +89 -0
- package/dist/src/commands/tag.js.map +1 -0
- package/dist/src/commands/tx.d.ts +12 -0
- package/dist/src/commands/tx.js +81 -0
- package/dist/src/commands/tx.js.map +1 -0
- package/dist/src/commands/user.d.ts +12 -0
- package/dist/src/commands/user.js +52 -0
- package/dist/src/commands/user.js.map +1 -0
- package/dist/src/database/BookkeeperImporter.d.ts +77 -0
- package/dist/src/database/BookkeeperImporter.js +343 -0
- package/dist/src/database/BookkeeperImporter.js.map +1 -0
- package/dist/src/database/DB.d.ts +51 -0
- package/dist/src/database/DB.js +354 -0
- package/dist/src/database/DB.js.map +1 -0
- package/dist/src/database/index.d.ts +7 -0
- package/dist/src/database/index.js +8 -0
- package/dist/src/database/index.js.map +1 -0
- package/dist/src/doccer.d.ts +29 -0
- package/dist/src/doccer.js +30 -0
- package/dist/src/doccer.js.map +1 -0
- package/dist/src/error.d.ts +30 -0
- package/dist/src/error.js +35 -0
- package/dist/src/error.js.map +1 -0
- package/dist/src/export/Exporter.d.ts +69 -0
- package/dist/src/export/Exporter.js +123 -0
- package/dist/src/export/Exporter.js.map +1 -0
- package/dist/src/export/TasenorExporter.d.ts +55 -0
- package/dist/src/export/TasenorExporter.js +135 -0
- package/dist/src/export/TasenorExporter.js.map +1 -0
- package/dist/src/export/TilitinExporter.d.ts +71 -0
- package/dist/src/export/TilitinExporter.js +290 -0
- package/dist/src/export/TilitinExporter.js.map +1 -0
- package/dist/src/export/index.d.ts +8 -0
- package/dist/src/export/index.js +9 -0
- package/dist/src/export/index.js.map +1 -0
- package/dist/src/import/TextFileProcessHandler.d.ts +104 -0
- package/dist/src/import/TextFileProcessHandler.js +354 -0
- package/dist/src/import/TextFileProcessHandler.js.map +1 -0
- package/dist/src/import/TransactionImportConnector.d.ts +38 -0
- package/dist/src/import/TransactionImportConnector.js +27 -0
- package/dist/src/import/TransactionImportConnector.js.map +1 -0
- package/dist/src/import/TransactionImportHandler.d.ts +173 -0
- package/dist/src/import/TransactionImportHandler.js +733 -0
- package/dist/src/import/TransactionImportHandler.js.map +1 -0
- package/dist/src/import/TransactionRules.d.ts +238 -0
- package/dist/src/import/TransactionRules.js +522 -0
- package/dist/src/import/TransactionRules.js.map +1 -0
- package/dist/src/import/TransactionUI.d.ts +181 -0
- package/dist/src/import/TransactionUI.js +482 -0
- package/dist/src/import/TransactionUI.js.map +1 -0
- package/dist/src/import/TransferAnalyzer.d.ts +324 -0
- package/dist/src/import/TransferAnalyzer.js +1379 -0
- package/dist/src/import/TransferAnalyzer.js.map +1 -0
- package/dist/src/import/index.d.ts +11 -0
- package/dist/src/import/index.js +12 -0
- package/dist/src/import/index.js.map +1 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/net/crypto.d.ts +33 -0
- package/dist/src/net/crypto.js +63 -0
- package/dist/src/net/crypto.js.map +1 -0
- package/dist/src/net/git.d.ts +49 -0
- package/dist/src/net/git.js +137 -0
- package/dist/src/net/git.js.map +1 -0
- package/dist/src/net/index.d.ts +10 -0
- package/dist/src/net/index.js +11 -0
- package/dist/src/net/index.js.map +1 -0
- package/dist/src/net/middleware.d.ts +61 -0
- package/dist/src/net/middleware.js +220 -0
- package/dist/src/net/middleware.js.map +1 -0
- package/dist/src/net/tokens.d.ts +50 -0
- package/dist/src/net/tokens.js +141 -0
- package/dist/src/net/tokens.js.map +1 -0
- package/dist/src/net/vault.d.ts +67 -0
- package/dist/src/net/vault.js +145 -0
- package/dist/src/net/vault.js.map +1 -0
- package/dist/src/plugins/BackendPlugin.d.ts +91 -0
- package/dist/src/plugins/BackendPlugin.js +165 -0
- package/dist/src/plugins/BackendPlugin.js.map +1 -0
- package/dist/src/plugins/DataPlugin.d.ts +13 -0
- package/dist/src/plugins/DataPlugin.js +26 -0
- package/dist/src/plugins/DataPlugin.js.map +1 -0
- package/dist/src/plugins/ImportPlugin.d.ts +188 -0
- package/dist/src/plugins/ImportPlugin.js +204 -0
- package/dist/src/plugins/ImportPlugin.js.map +1 -0
- package/dist/src/plugins/ReportPlugin.d.ts +132 -0
- package/dist/src/plugins/ReportPlugin.js +393 -0
- package/dist/src/plugins/ReportPlugin.js.map +1 -0
- package/dist/src/plugins/SchemePlugin.d.ts +34 -0
- package/dist/src/plugins/SchemePlugin.js +47 -0
- package/dist/src/plugins/SchemePlugin.js.map +1 -0
- package/dist/src/plugins/ServicePlugin.d.ts +80 -0
- package/dist/src/plugins/ServicePlugin.js +168 -0
- package/dist/src/plugins/ServicePlugin.js.map +1 -0
- package/dist/src/plugins/ToolPlugin.d.ts +27 -0
- package/dist/src/plugins/ToolPlugin.js +37 -0
- package/dist/src/plugins/ToolPlugin.js.map +1 -0
- package/dist/src/plugins/index.d.ts +13 -0
- package/dist/src/plugins/index.js +14 -0
- package/dist/src/plugins/index.js.map +1 -0
- package/dist/src/plugins/plugins.d.ts +101 -0
- package/dist/src/plugins/plugins.js +292 -0
- package/dist/src/plugins/plugins.js.map +1 -0
- package/dist/src/process/Process.d.ts +108 -0
- package/dist/src/process/Process.js +335 -0
- package/dist/src/process/Process.js.map +1 -0
- package/dist/src/process/ProcessConnector.d.ts +24 -0
- package/dist/src/process/ProcessConnector.js +28 -0
- package/dist/src/process/ProcessConnector.js.map +1 -0
- package/dist/src/process/ProcessFile.d.ts +69 -0
- package/dist/src/process/ProcessFile.js +145 -0
- package/dist/src/process/ProcessFile.js.map +1 -0
- package/dist/src/process/ProcessHandler.d.ts +60 -0
- package/dist/src/process/ProcessHandler.js +73 -0
- package/dist/src/process/ProcessHandler.js.map +1 -0
- package/dist/src/process/ProcessStep.d.ts +52 -0
- package/dist/src/process/ProcessStep.js +78 -0
- package/dist/src/process/ProcessStep.js.map +1 -0
- package/dist/src/process/ProcessingSystem.d.ts +60 -0
- package/dist/src/process/ProcessingSystem.js +182 -0
- package/dist/src/process/ProcessingSystem.js.map +1 -0
- package/dist/src/process/index.d.ts +11 -0
- package/dist/src/process/index.js +12 -0
- package/dist/src/process/index.js.map +1 -0
- package/dist/src/reports/conversions.d.ts +8 -0
- package/dist/src/reports/conversions.js +47 -0
- package/dist/src/reports/conversions.js.map +1 -0
- package/dist/src/reports/index.d.ts +6 -0
- package/dist/src/reports/index.js +7 -0
- package/dist/src/reports/index.js.map +1 -0
- package/dist/src/server/ISPDemoServer.d.ts +43 -0
- package/dist/src/server/ISPDemoServer.js +112 -0
- package/dist/src/server/ISPDemoServer.js.map +1 -0
- package/dist/src/server/api.d.ts +15 -0
- package/dist/src/server/api.js +27 -0
- package/dist/src/server/api.js.map +1 -0
- package/dist/src/server/index.d.ts +7 -0
- package/dist/src/server/index.js +8 -0
- package/dist/src/server/index.js.map +1 -0
- package/dist/src/server/router.d.ts +5 -0
- package/dist/src/server/router.js +37 -0
- package/dist/src/server/router.js.map +1 -0
- package/dist/src/system.d.ts +27 -0
- package/dist/src/system.js +95 -0
- package/dist/src/system.js.map +1 -0
- package/dist/tests/TransactionRules.spec.d.ts +1 -0
- package/dist/tests/TransactionRules.spec.js +64 -0
- package/dist/tests/TransactionRules.spec.js.map +1 -0
- package/dist/tests/password.spec.d.ts +1 -0
- package/dist/tests/password.spec.js +8 -0
- package/dist/tests/password.spec.js.map +1 -0
- package/dist/tests/tokens.spec.d.ts +1 -0
- package/dist/tests/tokens.spec.js +49 -0
- package/dist/tests/tokens.spec.js.map +1 -0
- package/dist/tests/vault.spec.d.ts +1 -0
- package/dist/tests/vault.spec.js +19 -0
- package/dist/tests/vault.spec.js.map +1 -0
- package/package.json +3 -3
- package/src/index.ts +0 -1
- package/src/testing/ProcessingSystemMock.ts +0 -45
- package/src/testing/UnitTestImportConnector.ts +0 -86
- package/src/testing/UnitTester.ts +0 -231
- package/src/testing/index.ts +0 -4
- package/src/testing/test-handlers.ts +0 -47
- package/tests/TransferAnalyzer-account-address.spec.ts +0 -87
- package/tests/TransferAnalyzer-buying-and-selling.spec.ts +0 -354
- package/tests/TransferAnalyzer-loans.spec.ts +0 -197
- package/tests/TransferAnalyzer-multiple-null-amounts.spec.ts +0 -181
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
async function up(knex) {
|
|
2
|
+
if (await knex.schema.hasTable('processes')) {
|
|
3
|
+
console.log('Found processes table. Skipping migrations.')
|
|
4
|
+
return
|
|
5
|
+
}
|
|
6
|
+
await knex.schema.createTable('processes', function (table) {
|
|
7
|
+
table.increments('id')
|
|
8
|
+
table.integer('ownerId').default(null)
|
|
9
|
+
table.string('name', 128).notNullable()
|
|
10
|
+
table.jsonb('config').default({})
|
|
11
|
+
table.boolean('complete').notNullable().default(false)
|
|
12
|
+
table.boolean('successful').default(null)
|
|
13
|
+
table.integer('currentStep').default(null)
|
|
14
|
+
table.text('error').default(null)
|
|
15
|
+
table.enum('status', ['INCOMPLETE', 'WAITING', 'SUCCEEDED', 'FAILED', 'CRASHED', 'ROLLEDBACK'], { useNative: true, enumName: 'process_status' }).notNullable().default('INCOMPLETE')
|
|
16
|
+
table.datetime('created').defaultTo(knex.fn.now())
|
|
17
|
+
|
|
18
|
+
table.index(['ownerId', 'created'])
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
await knex.schema.createTable('process_files', function (table) {
|
|
22
|
+
table.increments('id')
|
|
23
|
+
table.integer('processId').notNullable()
|
|
24
|
+
table.foreign('processId').references('processes.id')
|
|
25
|
+
table.text('name')
|
|
26
|
+
table.string('type', 64)
|
|
27
|
+
table.string('encoding', 16)
|
|
28
|
+
table.text('data')
|
|
29
|
+
|
|
30
|
+
table.index(['processId'])
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
await knex.schema.createTable('process_steps', function (table) {
|
|
34
|
+
table.increments('id')
|
|
35
|
+
|
|
36
|
+
table.integer('processId').notNullable()
|
|
37
|
+
table.foreign('processId').references('processes.id')
|
|
38
|
+
|
|
39
|
+
table.integer('number').notNullable()
|
|
40
|
+
table.string('handler', 32).notNullable()
|
|
41
|
+
table.jsonb('directions')
|
|
42
|
+
table.jsonb('action').default(null)
|
|
43
|
+
table.datetime('started').defaultTo(knex.fn.now())
|
|
44
|
+
table.jsonb('state').notNullable()
|
|
45
|
+
table.datetime('finished').default(null)
|
|
46
|
+
|
|
47
|
+
table.unique(['processId', 'number'])
|
|
48
|
+
})
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async function down(knex) {
|
|
52
|
+
await knex.schema.dropTable('process_files')
|
|
53
|
+
await knex.schema.dropTable('process_steps')
|
|
54
|
+
await knex.schema.dropTable('processes')
|
|
55
|
+
await knex.schema.raw('DROP TYPE process_status')
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
module.exports = {
|
|
59
|
+
up, down
|
|
60
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import * as FormData from 'form-data';
|
|
2
|
+
import { HttpMethod, Url, Value, TokenPair, Token, HttpResponse } from '@tasenor/common';
|
|
3
|
+
import { Command, CommandArgumentDefault, CommandArguments } from './commands';
|
|
4
|
+
/**
|
|
5
|
+
* Ask a question on the console and return answer.
|
|
6
|
+
* @param question
|
|
7
|
+
* @returns
|
|
8
|
+
*/
|
|
9
|
+
declare function ask(question: string): Promise<string>;
|
|
10
|
+
/**
|
|
11
|
+
* Exit hook that needs to be called if used functions in this library.
|
|
12
|
+
*/
|
|
13
|
+
declare function exit(): void;
|
|
14
|
+
/**
|
|
15
|
+
* An interface for accessing API.
|
|
16
|
+
*/
|
|
17
|
+
export declare class CLIRunner {
|
|
18
|
+
user: string;
|
|
19
|
+
password: string;
|
|
20
|
+
api: Url;
|
|
21
|
+
uiApi: Url;
|
|
22
|
+
token: Token;
|
|
23
|
+
commands: Record<string, Command>;
|
|
24
|
+
originalArgs: string[];
|
|
25
|
+
args: CommandArguments;
|
|
26
|
+
/**
|
|
27
|
+
* Execute HTTP request.
|
|
28
|
+
* @param method
|
|
29
|
+
* @param url
|
|
30
|
+
* @returns
|
|
31
|
+
*/
|
|
32
|
+
request(method: HttpMethod, url: string, data: Value | undefined | FormData): Promise<HttpResponse>;
|
|
33
|
+
/**
|
|
34
|
+
* Execute HTTP request against UI API.
|
|
35
|
+
* @param method
|
|
36
|
+
* @param url
|
|
37
|
+
* @returns
|
|
38
|
+
*/
|
|
39
|
+
requestUi(method: HttpMethod, url: string, data: Value | undefined | FormData): Promise<HttpResponse>;
|
|
40
|
+
/**
|
|
41
|
+
* Execute request with optional retries.
|
|
42
|
+
* @param caller
|
|
43
|
+
* @param fullUrl
|
|
44
|
+
* @param data
|
|
45
|
+
* @returns
|
|
46
|
+
*/
|
|
47
|
+
doRequest(caller: any, fullUrl: any, data: any): Promise<import("@tasenor/common").HttpSuccessResponse<Value>>;
|
|
48
|
+
/**
|
|
49
|
+
* Log in if we don't have access token yet.
|
|
50
|
+
*/
|
|
51
|
+
login(): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Set up the API.
|
|
54
|
+
* @param tokens
|
|
55
|
+
*/
|
|
56
|
+
configureApi(api: Url, tokens?: TokenPair | undefined): void;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* A class implementing dynamic collection of commands that are automatically looked up when called.
|
|
60
|
+
*/
|
|
61
|
+
export declare class CLI extends CLIRunner {
|
|
62
|
+
/**
|
|
63
|
+
* Scan commands and instantiate them to the collection.
|
|
64
|
+
* @param paths
|
|
65
|
+
*/
|
|
66
|
+
constructor();
|
|
67
|
+
/**
|
|
68
|
+
* Insert defaults for the arguments.
|
|
69
|
+
* @param args
|
|
70
|
+
*/
|
|
71
|
+
addDefaults(defaults: CommandArgumentDefault[]): void;
|
|
72
|
+
/**
|
|
73
|
+
* Parse and execute the command.
|
|
74
|
+
*/
|
|
75
|
+
run(defaults?: CommandArgumentDefault[], explicitArgs?: string[]): Promise<void>;
|
|
76
|
+
}
|
|
77
|
+
export declare const cli: {
|
|
78
|
+
ask: typeof ask;
|
|
79
|
+
exit: typeof exit;
|
|
80
|
+
};
|
|
81
|
+
export {};
|
package/dist/src/cli.js
ADDED
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/* eslint-disable camelcase */
|
|
2
|
+
/**
|
|
3
|
+
* Command line interface utilities.
|
|
4
|
+
*
|
|
5
|
+
* @module tasenor-common-node/src/cli
|
|
6
|
+
*/
|
|
7
|
+
import * as readline from 'readline';
|
|
8
|
+
import { ArgumentParser } from 'argparse';
|
|
9
|
+
import { net, log, mute, waitPromise, note } from '@tasenor/common';
|
|
10
|
+
import clone from 'clone';
|
|
11
|
+
import DbCommand from './commands/db';
|
|
12
|
+
import AccountCommand from './commands/account';
|
|
13
|
+
import BalanceCommand from './commands/balance';
|
|
14
|
+
import EntryCommand from './commands/entry';
|
|
15
|
+
import ImportCommand from './commands/import';
|
|
16
|
+
import PeriodCommand from './commands/period';
|
|
17
|
+
import ImporterCommand from './commands/importer';
|
|
18
|
+
import PluginCommand from './commands/plugin';
|
|
19
|
+
import ReportCommand from './commands/report';
|
|
20
|
+
import SettingsCommand from './commands/settings';
|
|
21
|
+
import StockCommand from './commands/stock';
|
|
22
|
+
import TagCommand from './commands/tag';
|
|
23
|
+
import TxCommand from './commands/tx';
|
|
24
|
+
import UserCommand from './commands/user';
|
|
25
|
+
let readlineInterface;
|
|
26
|
+
/**
|
|
27
|
+
* Ask a question on the console and return answer.
|
|
28
|
+
* @param question
|
|
29
|
+
* @returns
|
|
30
|
+
*/
|
|
31
|
+
function ask(question) {
|
|
32
|
+
if (!readlineInterface) {
|
|
33
|
+
readlineInterface = readline.createInterface({
|
|
34
|
+
input: process.stdin,
|
|
35
|
+
output: process.stdout
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
return new Promise((resolve) => {
|
|
39
|
+
readlineInterface.question(question ? `${question} ` : '>', (text) => { resolve(text); });
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Exit hook that needs to be called if used functions in this library.
|
|
44
|
+
*/
|
|
45
|
+
function exit() {
|
|
46
|
+
if (readlineInterface)
|
|
47
|
+
readlineInterface.close();
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* An interface for accessing API.
|
|
51
|
+
*/
|
|
52
|
+
export class CLIRunner {
|
|
53
|
+
user;
|
|
54
|
+
password;
|
|
55
|
+
api;
|
|
56
|
+
uiApi;
|
|
57
|
+
token;
|
|
58
|
+
commands;
|
|
59
|
+
originalArgs;
|
|
60
|
+
args;
|
|
61
|
+
/**
|
|
62
|
+
* Execute HTTP request.
|
|
63
|
+
* @param method
|
|
64
|
+
* @param url
|
|
65
|
+
* @returns
|
|
66
|
+
*/
|
|
67
|
+
async request(method, url, data) {
|
|
68
|
+
const caller = net[method];
|
|
69
|
+
const fullUrl = url.startsWith('/') ? `${this.api}${url}` : `${this.api}/${url}`;
|
|
70
|
+
return this.doRequest(caller, fullUrl, data);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Execute HTTP request against UI API.
|
|
74
|
+
* @param method
|
|
75
|
+
* @param url
|
|
76
|
+
* @returns
|
|
77
|
+
*/
|
|
78
|
+
async requestUi(method, url, data) {
|
|
79
|
+
const caller = net[method];
|
|
80
|
+
const fullUrl = url.startsWith('/') ? `${this.uiApi}${url}` : `${this.uiApi}/${url}`;
|
|
81
|
+
return this.doRequest(caller, fullUrl, data);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Execute request with optional retries.
|
|
85
|
+
* @param caller
|
|
86
|
+
* @param fullUrl
|
|
87
|
+
* @param data
|
|
88
|
+
* @returns
|
|
89
|
+
*/
|
|
90
|
+
async doRequest(caller, fullUrl, data) {
|
|
91
|
+
let result = null;
|
|
92
|
+
let error;
|
|
93
|
+
const max = this.args.retry || 0;
|
|
94
|
+
for (let i = -1; i < max; i++) {
|
|
95
|
+
try {
|
|
96
|
+
result = await caller(fullUrl, data);
|
|
97
|
+
if (result && result.success) {
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
error = new Error(JSON.stringify(result));
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
error = err;
|
|
104
|
+
}
|
|
105
|
+
const delay = (i + 1) * 5;
|
|
106
|
+
note(`Waiting for ${delay} seconds`);
|
|
107
|
+
await waitPromise(delay * 1000);
|
|
108
|
+
}
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Log in if we don't have access token yet.
|
|
113
|
+
*/
|
|
114
|
+
async login() {
|
|
115
|
+
if (this.token)
|
|
116
|
+
return;
|
|
117
|
+
log(`Logging in to ${this.api} as ${this.user}`);
|
|
118
|
+
const resp = await this.request('POST', '/auth', { user: this.user, password: this.password });
|
|
119
|
+
if (resp.success && resp.data && resp.data instanceof Object) {
|
|
120
|
+
if ('token' in resp.data && 'refresh' in resp.data) {
|
|
121
|
+
const { token, refresh } = resp.data;
|
|
122
|
+
this.configureApi(this.api, { token, refresh });
|
|
123
|
+
this.configureApi(this.uiApi, { token, refresh });
|
|
124
|
+
this.token = token;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Set up the API.
|
|
130
|
+
* @param tokens
|
|
131
|
+
*/
|
|
132
|
+
configureApi(api, tokens = undefined) {
|
|
133
|
+
net.configure({ sites: { [api]: {} } });
|
|
134
|
+
if (tokens) {
|
|
135
|
+
net.setConf(api, 'token', tokens.token);
|
|
136
|
+
net.setConf(api, 'refreshToken', tokens.refresh);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* A class implementing dynamic collection of commands that are automatically looked up when called.
|
|
142
|
+
*/
|
|
143
|
+
export class CLI extends CLIRunner {
|
|
144
|
+
/**
|
|
145
|
+
* Scan commands and instantiate them to the collection.
|
|
146
|
+
* @param paths
|
|
147
|
+
*/
|
|
148
|
+
constructor() {
|
|
149
|
+
super();
|
|
150
|
+
this.commands = {
|
|
151
|
+
account: new AccountCommand(this),
|
|
152
|
+
db: new DbCommand(this),
|
|
153
|
+
balance: new BalanceCommand(this),
|
|
154
|
+
entry: new EntryCommand(this),
|
|
155
|
+
import: new ImportCommand(this),
|
|
156
|
+
importer: new ImporterCommand(this),
|
|
157
|
+
period: new PeriodCommand(this),
|
|
158
|
+
plugin: new PluginCommand(this),
|
|
159
|
+
report: new ReportCommand(this),
|
|
160
|
+
settings: new SettingsCommand(this),
|
|
161
|
+
stock: new StockCommand(this),
|
|
162
|
+
tag: new TagCommand(this),
|
|
163
|
+
tx: new TxCommand(this),
|
|
164
|
+
user: new UserCommand(this)
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Insert defaults for the arguments.
|
|
169
|
+
* @param args
|
|
170
|
+
*/
|
|
171
|
+
addDefaults(defaults) {
|
|
172
|
+
for (const def of defaults) {
|
|
173
|
+
const { name, envName, defaultValue } = def;
|
|
174
|
+
if (this.args[name] === undefined) {
|
|
175
|
+
this.args[name] = process.env[envName] || defaultValue;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Parse and execute the command.
|
|
181
|
+
*/
|
|
182
|
+
async run(defaults = [], explicitArgs = []) {
|
|
183
|
+
// Helper to extract arguments.
|
|
184
|
+
const pop = (args, name) => {
|
|
185
|
+
const ret = args[name];
|
|
186
|
+
delete args[name];
|
|
187
|
+
if (!ret)
|
|
188
|
+
return '';
|
|
189
|
+
return typeof ret === 'string' ? ret : ret[0];
|
|
190
|
+
};
|
|
191
|
+
const parser = new ArgumentParser({
|
|
192
|
+
description: 'Tasenor command line tool'
|
|
193
|
+
});
|
|
194
|
+
parser.add_argument('command', { help: 'Command handling the operation', choices: Object.keys(this.commands) });
|
|
195
|
+
parser.add_argument('--debug', '-d', { help: 'If set, show logs for requests etc', action: 'store_true', required: false });
|
|
196
|
+
parser.add_argument('--json', { help: 'If set, show output as JSON', action: 'store_true', required: false });
|
|
197
|
+
parser.add_argument('--verbose', '-v', { help: 'If set, show more comprehensive output', action: 'store_true', required: false });
|
|
198
|
+
parser.add_argument('--user', { help: 'User email for logging in (use USERNAME env by default)', type: String, required: false });
|
|
199
|
+
parser.add_argument('--password', { help: 'User password for logging in (use PASSWORD env by default)', type: String, required: false });
|
|
200
|
+
parser.add_argument('--api', { help: 'The server base URL providing Bookkeeper API (use API env by default)', type: String, required: false });
|
|
201
|
+
parser.add_argument('--ui-api', { help: 'The server base URL providing Bookkeeper UI API (use UI_API env by default)', type: String, required: false });
|
|
202
|
+
parser.add_argument('--retry', { help: 'If given, retry this many times if network call fails', type: Number, required: false });
|
|
203
|
+
// Set up args.
|
|
204
|
+
this.originalArgs = explicitArgs.length ? clone(explicitArgs) : clone(process.argv.splice(2));
|
|
205
|
+
// Find the command and add its arguments.
|
|
206
|
+
let cmd;
|
|
207
|
+
for (let i = 0; i < this.originalArgs.length; i++) {
|
|
208
|
+
if (this.commands[this.originalArgs[i]]) {
|
|
209
|
+
cmd = this.commands[this.originalArgs[i]];
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (cmd) {
|
|
214
|
+
cmd.addArguments(parser);
|
|
215
|
+
}
|
|
216
|
+
// Collect and fix arguments.
|
|
217
|
+
this.args = parser.parse_args(this.originalArgs);
|
|
218
|
+
cmd?.setArgs(this.args);
|
|
219
|
+
this.addDefaults(defaults);
|
|
220
|
+
this.user = pop(this.args, 'user');
|
|
221
|
+
this.password = pop(this.args, 'password');
|
|
222
|
+
this.api = pop(this.args, 'api');
|
|
223
|
+
this.uiApi = pop(this.args, 'ui_api');
|
|
224
|
+
delete this.args.command;
|
|
225
|
+
if (!this.args.debug) {
|
|
226
|
+
mute();
|
|
227
|
+
}
|
|
228
|
+
// Configure net APIs.
|
|
229
|
+
if (this.api) {
|
|
230
|
+
this.configureApi(this.api);
|
|
231
|
+
}
|
|
232
|
+
if (this.uiApi) {
|
|
233
|
+
this.configureApi(this.uiApi);
|
|
234
|
+
}
|
|
235
|
+
cmd && await cmd.run();
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
export const cli = {
|
|
239
|
+
ask,
|
|
240
|
+
exit
|
|
241
|
+
};
|
|
242
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B;;;;GAIG;AACH,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAA;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAc,GAAG,EAAgC,GAAG,EAAgB,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAC3H,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,SAAS,MAAM,eAAe,CAAA;AAErC,OAAO,cAAc,MAAM,oBAAoB,CAAA;AAC/C,OAAO,cAAc,MAAM,oBAAoB,CAAA;AAC/C,OAAO,YAAY,MAAM,kBAAkB,CAAA;AAC3C,OAAO,aAAa,MAAM,mBAAmB,CAAA;AAC7C,OAAO,aAAa,MAAM,mBAAmB,CAAA;AAC7C,OAAO,eAAe,MAAM,qBAAqB,CAAA;AACjD,OAAO,aAAa,MAAM,mBAAmB,CAAA;AAC7C,OAAO,aAAa,MAAM,mBAAmB,CAAA;AAC7C,OAAO,eAAe,MAAM,qBAAqB,CAAA;AACjD,OAAO,YAAY,MAAM,kBAAkB,CAAA;AAC3C,OAAO,UAAU,MAAM,gBAAgB,CAAA;AACvC,OAAO,SAAS,MAAM,eAAe,CAAA;AACrC,OAAO,WAAW,MAAM,iBAAiB,CAAA;AAEzC,IAAI,iBAAiB,CAAA;AAErB;;;;GAIG;AACH,SAAS,GAAG,CAAC,QAAgB;IAC3B,IAAI,CAAC,iBAAiB,EAAE;QACtB,iBAAiB,GAAG,QAAQ,CAAC,eAAe,CAAC;YAC3C,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAA;KACH;IACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;IAC1F,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,IAAI;IACX,IAAI,iBAAiB;QAAE,iBAAiB,CAAC,KAAK,EAAE,CAAA;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,SAAS;IACpB,IAAI,CAAQ;IACZ,QAAQ,CAAQ;IAChB,GAAG,CAAK;IACR,KAAK,CAAK;IACV,KAAK,CAAO;IACZ,QAAQ,CAAyB;IACjC,YAAY,CAAU;IACtB,IAAI,CAAkB;IAEtB;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,MAAkB,EAAE,GAAW,EAAE,IAAkC;QAC/E,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAA;QAC1B,MAAM,OAAO,GAAQ,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,EAAS,CAAA;QACnG,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IAC9C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,SAAS,CAAC,MAAkB,EAAE,GAAW,EAAE,IAAkC;QACjF,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAA;QAC1B,MAAM,OAAO,GAAQ,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,EAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,EAAS,CAAA;QACvG,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IAC9C,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;QACnC,IAAI,MAAM,GAAwB,IAAI,CAAA;QACtC,IAAI,KAAK,CAAA;QACT,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAI,GAAc,EAAE,CAAC,EAAE,EAAE;YACzC,IAAI;gBACF,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;gBACpC,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;oBAC5B,OAAO,MAAM,CAAA;iBACd;gBACD,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;aAC1C;YAAC,OAAO,GAAG,EAAE;gBACZ,KAAK,GAAG,GAAG,CAAA;aACZ;YACD,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;YACzB,IAAI,CAAC,eAAe,KAAK,UAAU,CAAC,CAAA;YACpC,MAAM,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;SAChC;QAED,MAAM,KAAK,CAAA;IACb,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QAET,IAAI,IAAI,CAAC,KAAK;YAAE,OAAM;QAEtB,GAAG,CAAC,iBAAiB,IAAI,CAAC,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QAChD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAsB,CAAC,CAAA;QAClH,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,YAAY,MAAM,EAAE;YAC5D,IAAI,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE;gBAClD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,IAAmD,CAAA;gBACnF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;gBAC/C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;gBACjD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;aACnB;SACF;IACH,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,GAAQ,EAAE,SAAgC,SAAS;QAC9D,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;QACvC,IAAI,MAAM,EAAE;YACV,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;YACvC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;SACjD;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,GAAI,SAAQ,SAAS;IAEhC;;;OAGG;IACH;QACE,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,QAAQ,GAAG;YACd,OAAO,EAAE,IAAI,cAAc,CAAC,IAAI,CAAC;YACjC,EAAE,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC;YACvB,OAAO,EAAE,IAAI,cAAc,CAAC,IAAI,CAAC;YACjC,KAAK,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC;YAC7B,MAAM,EAAE,IAAI,aAAa,CAAC,IAAI,CAAC;YAC/B,QAAQ,EAAE,IAAI,eAAe,CAAC,IAAI,CAAC;YACnC,MAAM,EAAE,IAAI,aAAa,CAAC,IAAI,CAAC;YAC/B,MAAM,EAAE,IAAI,aAAa,CAAC,IAAI,CAAC;YAC/B,MAAM,EAAE,IAAI,aAAa,CAAC,IAAI,CAAC;YAC/B,QAAQ,EAAE,IAAI,eAAe,CAAC,IAAI,CAAC;YACnC,KAAK,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC;YAC7B,GAAG,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC;YACzB,EAAE,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC;YACvB,IAAI,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC;SAC5B,CAAA;IACH,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,QAAkC;QAC5C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;YAC1B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,GAAG,CAAA;YAC3C,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;gBACjC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,YAAY,CAAA;aACvD;SACF;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,WAAqC,EAAE,EAAE,eAAyB,EAAE;QAC5E,+BAA+B;QAC/B,MAAM,GAAG,GAAG,CAAC,IAAsB,EAAE,IAAY,EAAU,EAAE;YAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;YACtB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAA;YACjB,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,CAAA;YACnB,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAC/C,CAAC,CAAA;QAED,MAAM,MAAM,GAAmB,IAAI,cAAc,CAAC;YAChD,WAAW,EAAE,2BAA2B;SACzC,CAAC,CAAA;QAEF,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,gCAAgC,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAC/G,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,oCAAoC,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QAC3H,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QAC7G,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,wCAAwC,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QACjI,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,yDAAyD,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QACjI,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,4DAA4D,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QACxI,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,uEAAuE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QAC9I,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,6EAA6E,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QACvJ,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,uDAAuD,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QAEhI,eAAe;QACf,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAE7F,0CAA0C;QAC1C,IAAI,GAAwB,CAAA;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;gBACvC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;gBACzC,MAAK;aACN;SACF;QAED,IAAI,GAAG,EAAE;YACP,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;SACzB;QAED,6BAA6B;QAC7B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAEhD,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEvB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;QAC1B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAClC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAC1C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAQ,CAAA;QACvC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAQ,CAAA;QAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAA;QACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACpB,IAAI,EAAE,CAAA;SACP;QAED,sBAAsB;QACtB,IAAI,IAAI,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SAC5B;QACD,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;SAC9B;QAED,GAAG,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE,CAAA;IACxB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,GAAG;IACH,IAAI;CACL,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AccountModelData } from '@tasenor/common';
|
|
2
|
+
import { Command } from '.';
|
|
3
|
+
import { ArgumentParser } from 'argparse';
|
|
4
|
+
declare class AccountCommand extends Command {
|
|
5
|
+
addArguments(parser: ArgumentParser): void;
|
|
6
|
+
ls(): Promise<void>;
|
|
7
|
+
print(data: AccountModelData[]): void;
|
|
8
|
+
rm(): Promise<void>;
|
|
9
|
+
create(): Promise<void>;
|
|
10
|
+
run(): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export default AccountCommand;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/* eslint-disable camelcase */
|
|
2
|
+
import { log } from '@tasenor/common';
|
|
3
|
+
import { Command } from '.';
|
|
4
|
+
class AccountCommand extends Command {
|
|
5
|
+
addArguments(parser) {
|
|
6
|
+
const sub = parser.add_subparsers();
|
|
7
|
+
const ls = sub.add_parser('ls', { help: 'List all accounts' });
|
|
8
|
+
ls.set_defaults({ subCommand: 'ls' });
|
|
9
|
+
ls.add_argument('db', { help: 'Name of the database' });
|
|
10
|
+
const rm = sub.add_parser('rm', { help: 'Delete an account' });
|
|
11
|
+
rm.set_defaults({ subCommand: 'rm' });
|
|
12
|
+
rm.add_argument('db', { help: 'Name of the database' });
|
|
13
|
+
rm.add_argument('id', { help: 'ID of the account' });
|
|
14
|
+
const create = sub.add_parser('create', { help: 'Create an account' });
|
|
15
|
+
create.set_defaults({ subCommand: 'create' });
|
|
16
|
+
create.add_argument('db', { help: 'Name of the database' });
|
|
17
|
+
create.add_argument('language', { help: 'Account language' });
|
|
18
|
+
create.add_argument('currency', { help: 'Account currency' });
|
|
19
|
+
create.add_argument('type', { help: 'Account type' });
|
|
20
|
+
create.add_argument('number', { help: 'Account number' });
|
|
21
|
+
create.add_argument('name', { help: 'Account name' });
|
|
22
|
+
create.add_argument('data', { help: 'Additional account data in JSON format', nargs: '?' });
|
|
23
|
+
}
|
|
24
|
+
async ls() {
|
|
25
|
+
const { db } = this.args;
|
|
26
|
+
const resp = await this.get(`/db/${db}/account`);
|
|
27
|
+
this.out('account', resp);
|
|
28
|
+
}
|
|
29
|
+
print(data) {
|
|
30
|
+
for (const account of data.sort((a, b) => (a.id || 0) - (b.id || 0))) {
|
|
31
|
+
const { id, number, name, type, language, currency, data } = account;
|
|
32
|
+
console.log(`#${id} [${language} ${currency} ${type}] ${number} ${name} ${Object.keys(data).length ? JSON.stringify(data) : ''}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async rm() {
|
|
36
|
+
const { db, id } = this.args;
|
|
37
|
+
await this.delete(`/db/${db}/account/${id}`);
|
|
38
|
+
log(`Account ${id} deleted successfully.`);
|
|
39
|
+
}
|
|
40
|
+
async create() {
|
|
41
|
+
const { db, number, name, type, language, currency, data } = this.args;
|
|
42
|
+
const params = {
|
|
43
|
+
number,
|
|
44
|
+
name,
|
|
45
|
+
type,
|
|
46
|
+
language,
|
|
47
|
+
currency,
|
|
48
|
+
data: data ? await this.jsonData(data) : {}
|
|
49
|
+
};
|
|
50
|
+
await this.post(`/db/${db}/account`, params);
|
|
51
|
+
log(`Account ${number} ${name} created successfully.`);
|
|
52
|
+
}
|
|
53
|
+
async run() {
|
|
54
|
+
await this.runBy('subCommand');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export default AccountCommand;
|
|
58
|
+
//# sourceMappingURL=account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/commands/account.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,OAAO,EAAE,GAAG,EAAoB,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,CAAA;AAG3B,MAAM,cAAe,SAAQ,OAAO;IAElC,YAAY,CAAC,MAAsB;QACjC,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,EAAE,CAAA;QAEnC,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAA;QAC9D,EAAE,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;QACrC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAA;QAEvD,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAA;QAC9D,EAAE,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;QACrC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAA;QACvD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAA;QAEpD,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAA;QACtE,MAAM,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC7C,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAA;QAC3D,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAA;QAC7D,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAA;QAC7D,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;QACrD,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAA;QACzD,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;QACrD,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,wCAAwC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;IAC7F,CAAC;IAED,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAA;QACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QAChD,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,IAAwB;QAC5B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE;YACpE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;YACpE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;SAClI;IACH,CAAC;IAED,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAA;QAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC,CAAA;QAC5C,GAAG,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAA;IAC5C,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAA;QACtE,MAAM,MAAM,GAAG;YACb,MAAM;YACN,IAAI;YACJ,IAAI;YACJ,QAAQ;YACR,QAAQ;YACR,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;SAC5C,CAAA;QACD,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;QAC5C,GAAG,CAAC,WAAW,MAAM,IAAI,IAAI,wBAAwB,CAAC,CAAA;IACxD,CAAC;IAED,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IAChC,CAAC;CACF;AAED,eAAe,cAAc,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Command } from '.';
|
|
2
|
+
import { ArgumentParser } from 'argparse';
|
|
3
|
+
import { AccountNumber } from '@tasenor/common';
|
|
4
|
+
declare class BalanceCommand extends Command {
|
|
5
|
+
addArguments(parser: ArgumentParser): void;
|
|
6
|
+
ls(): Promise<void>;
|
|
7
|
+
print(data: Record<AccountNumber, number>): void;
|
|
8
|
+
create(): Promise<void>;
|
|
9
|
+
run(): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export default BalanceCommand;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/* eslint-disable camelcase */
|
|
2
|
+
import { sprintf } from 'sprintf-js';
|
|
3
|
+
import { Command } from '.';
|
|
4
|
+
import { log, warning } from '@tasenor/common';
|
|
5
|
+
import clone from 'clone';
|
|
6
|
+
class BalanceCommand extends Command {
|
|
7
|
+
addArguments(parser) {
|
|
8
|
+
const sub = parser.add_subparsers();
|
|
9
|
+
const ls = sub.add_parser('ls', { help: 'List account balances' });
|
|
10
|
+
ls.set_defaults({ subCommand: 'ls' });
|
|
11
|
+
ls.add_argument('db', { help: 'Name of the database' });
|
|
12
|
+
ls.add_argument('period', { help: 'Period year, date or ID' });
|
|
13
|
+
const create = sub.add_parser('create', { help: 'Initialize account balances' });
|
|
14
|
+
create.set_defaults({ subCommand: 'create' });
|
|
15
|
+
create.add_argument('--force', '-f', { action: 'store_true', help: 'If given, allow invalid entries to be created', required: false });
|
|
16
|
+
create.add_argument('--map', { help: 'Remap account numbers using JSON or @filepath mapping', required: false });
|
|
17
|
+
create.add_argument('--stock', { nargs: '*', help: 'Define initial stock using JSON or @filepath mapping', required: false });
|
|
18
|
+
create.add_argument('--text', { help: 'A description for the transaction', required: false });
|
|
19
|
+
create.add_argument('db', { help: 'Name of the database' });
|
|
20
|
+
create.add_argument('data', { help: 'A JSON data or @filepath for balances' });
|
|
21
|
+
}
|
|
22
|
+
async ls() {
|
|
23
|
+
const { db, period, verbose } = this.args;
|
|
24
|
+
const periodId = await this.periodId(db, period);
|
|
25
|
+
const resp = await this.get(`/db/${db}/period/${periodId}`);
|
|
26
|
+
await this.readAccounts(db);
|
|
27
|
+
if (!verbose && resp.balances) {
|
|
28
|
+
this.out('balance', resp.balances.reduce((prev, cur) => ({ ...prev, [cur.number]: cur.total }), {}));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
this.out('balance', resp);
|
|
32
|
+
}
|
|
33
|
+
print(data) {
|
|
34
|
+
Object.keys(data).sort().forEach(number => {
|
|
35
|
+
console.log(number, this.accounts[number].name, '\t', sprintf('%.2f', data[number] / 100));
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
async create() {
|
|
39
|
+
const { db, data, map, stock, text, force } = this.args;
|
|
40
|
+
if (!db) {
|
|
41
|
+
throw new Error(`Invalid database argument ${JSON.stringify(db)}`);
|
|
42
|
+
}
|
|
43
|
+
const dataArg = await this.jsonData(data);
|
|
44
|
+
const mapArg = (map ? await this.jsonData(map) : {});
|
|
45
|
+
const period = await this.singlePeriod(db);
|
|
46
|
+
const stockArg = await this.jsonData(stock);
|
|
47
|
+
// Check if the DB is clean.
|
|
48
|
+
const docs = await this.get(`/db/${db}/document`);
|
|
49
|
+
if (docs.filter(d => d.number !== 0).length && !force) {
|
|
50
|
+
throw new Error('There are already non-initial transactions in the database and cannot be initialized anymore.');
|
|
51
|
+
}
|
|
52
|
+
// Ensure zero balance.
|
|
53
|
+
const sum = Object.values(dataArg).reduce((prev, cur) => prev + cur, 0);
|
|
54
|
+
if (sum) {
|
|
55
|
+
if (force) {
|
|
56
|
+
warning(`Initial balance total must be zero. Got ${sum} from ${JSON.stringify(dataArg)}.`);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
throw new Error(`Initial balance total must be zero. Got ${sum} from ${JSON.stringify(dataArg)}.`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Ensure all accounts are valid.
|
|
63
|
+
for (const account of Object.keys(dataArg)) {
|
|
64
|
+
// Zero balance accounts not needed.
|
|
65
|
+
if (!dataArg[account]) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
await this.accountId(db, mapArg[account] || account);
|
|
69
|
+
}
|
|
70
|
+
// Create initial doc.
|
|
71
|
+
const document = (docs.length > 0)
|
|
72
|
+
? docs[0]
|
|
73
|
+
: await this.post(`/db/${db}/document`, {
|
|
74
|
+
period_id: period.id,
|
|
75
|
+
date: this.date(period.start_date),
|
|
76
|
+
number: 0
|
|
77
|
+
});
|
|
78
|
+
log(`Created a document #${document.id} on ${period.start_date}.`);
|
|
79
|
+
// Create entries.
|
|
80
|
+
const description = this.str(text) || 'Initial balance';
|
|
81
|
+
for (const account of Object.keys(dataArg)) {
|
|
82
|
+
const destAccount = mapArg[account] || account;
|
|
83
|
+
// Skip zeroes.
|
|
84
|
+
if (!dataArg[account]) {
|
|
85
|
+
log(`Skipping an entry ${destAccount} ${description} ${sprintf('%.2f', 0)}.`);
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const entry = {
|
|
89
|
+
document_id: document.id,
|
|
90
|
+
account_id: await this.accountId(db, destAccount),
|
|
91
|
+
debit: dataArg[account] >= 0 ? 1 : 0,
|
|
92
|
+
amount: Math.abs(dataArg[account]),
|
|
93
|
+
description
|
|
94
|
+
};
|
|
95
|
+
// Add stock if given.
|
|
96
|
+
if (stockArg[destAccount]) {
|
|
97
|
+
entry.data = {
|
|
98
|
+
stock: {
|
|
99
|
+
set: clone(stockArg[destAccount])
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
delete stockArg[destAccount];
|
|
103
|
+
}
|
|
104
|
+
// Add data if known.
|
|
105
|
+
const out = await this.post(`/db/${db}/entry`, entry);
|
|
106
|
+
log(`Created an entry #${out.id} for ${destAccount} ${description} ${sprintf('%.2f', dataArg[account] / 100)}${entry.data ? ' ' + JSON.stringify(entry.data) : ''}.`);
|
|
107
|
+
}
|
|
108
|
+
if (Object.keys(stockArg).length) {
|
|
109
|
+
throw new Error(`Unused initial stocks for accounts ${Object.keys(stockArg).join(', ')}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async run() {
|
|
113
|
+
await this.runBy('subCommand');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
export default BalanceCommand;
|
|
117
|
+
//# sourceMappingURL=balance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"balance.js","sourceRoot":"","sources":["../../../src/commands/balance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { DatabaseModelData } from '@tasenor/common';
|
|
2
|
+
import { ArgumentParser } from 'argparse';
|
|
3
|
+
import { Command } from '.';
|
|
4
|
+
declare class DbCommand extends Command {
|
|
5
|
+
addArguments(parser: ArgumentParser): void;
|
|
6
|
+
ls(): Promise<void>;
|
|
7
|
+
print(data: DatabaseModelData[]): void;
|
|
8
|
+
rm(): Promise<void>;
|
|
9
|
+
create(): Promise<void>;
|
|
10
|
+
upload(): Promise<void>;
|
|
11
|
+
download(): Promise<void>;
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export default DbCommand;
|