@coderoftime/fints 0.1.0 → 0.2.0
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/CHANGELOG.md +142 -1
- package/README.md +127 -37
- package/dist/client.d.ts +48 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +199 -0
- package/dist/client.js.map +1 -0
- package/dist/core/account.d.ts +35 -7
- package/dist/core/account.d.ts.map +1 -1
- package/dist/core/account.js +84 -13
- package/dist/core/account.js.map +1 -1
- package/dist/core/amount.d.ts +2 -1
- package/dist/core/amount.d.ts.map +1 -1
- package/dist/core/amount.js +4 -1
- package/dist/core/amount.js.map +1 -1
- package/dist/core/balance.d.ts +1 -0
- package/dist/core/balance.d.ts.map +1 -1
- package/dist/core/balance.js +6 -5
- package/dist/core/balance.js.map +1 -1
- package/dist/core/bank-info.d.ts +1 -1
- package/dist/core/bank-info.js +1 -1
- package/dist/core/client.d.ts +50 -15
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/config.d.ts +28 -16
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +66 -26
- package/dist/core/config.js.map +1 -1
- package/dist/core/errors.d.ts +85 -23
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +112 -47
- package/dist/core/errors.js.map +1 -1
- package/dist/core/feedback.d.ts +4 -1
- package/dist/core/feedback.d.ts.map +1 -1
- package/dist/core/feedback.js +4 -1
- package/dist/core/feedback.js.map +1 -1
- package/dist/core/transaction.d.ts +6 -1
- package/dist/core/transaction.d.ts.map +1 -1
- package/dist/core/transaction.js +9 -4
- package/dist/core/transaction.js.map +1 -1
- package/dist/core/transport.d.ts +33 -6
- package/dist/core/transport.d.ts.map +1 -1
- package/dist/core/transport.js +77 -20
- package/dist/core/transport.js.map +1 -1
- package/dist/formats/camt.d.ts +24 -4
- package/dist/formats/camt.d.ts.map +1 -1
- package/dist/formats/camt.js +124 -41
- package/dist/formats/camt.js.map +1 -1
- package/dist/formats/mt940.d.ts +15 -3
- package/dist/formats/mt940.d.ts.map +1 -1
- package/dist/formats/mt940.js +161 -82
- package/dist/formats/mt940.js.map +1 -1
- package/dist/formats/readers.d.ts +6 -2
- package/dist/formats/readers.d.ts.map +1 -1
- package/dist/formats/readers.js +24 -29
- package/dist/formats/readers.js.map +1 -1
- package/dist/formats/record-budget.d.ts +7 -0
- package/dist/formats/record-budget.d.ts.map +1 -0
- package/dist/formats/record-budget.js +17 -0
- package/dist/formats/record-budget.js.map +1 -0
- package/dist/formats/sepa-purpose.d.ts +6 -0
- package/dist/formats/sepa-purpose.d.ts.map +1 -1
- package/dist/formats/sepa-purpose.js +23 -2
- package/dist/formats/sepa-purpose.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/session/app-approval.d.ts +11 -5
- package/dist/session/app-approval.d.ts.map +1 -1
- package/dist/session/app-approval.js +23 -12
- package/dist/session/app-approval.js.map +1 -1
- package/dist/session/dialog-runner.d.ts +7 -10
- package/dist/session/dialog-runner.d.ts.map +1 -1
- package/dist/session/dialog-runner.js +15 -16
- package/dist/session/dialog-runner.js.map +1 -1
- package/dist/session/login-guard.d.ts +54 -49
- package/dist/session/login-guard.d.ts.map +1 -1
- package/dist/session/login-guard.js +156 -84
- package/dist/session/login-guard.js.map +1 -1
- package/dist/session/sepa-accounts.d.ts +20 -14
- package/dist/session/sepa-accounts.d.ts.map +1 -1
- package/dist/session/sepa-accounts.js +62 -46
- package/dist/session/sepa-accounts.js.map +1 -1
- package/dist/session/session-setup.d.ts +33 -25
- package/dist/session/session-setup.d.ts.map +1 -1
- package/dist/session/session-setup.js +87 -65
- package/dist/session/session-setup.js.map +1 -1
- package/dist/session/session-state.d.ts +9 -6
- package/dist/session/session-state.d.ts.map +1 -1
- package/dist/session/session-state.js +52 -17
- package/dist/session/session-state.js.map +1 -1
- package/dist/session/signed-dialog.d.ts +77 -0
- package/dist/session/signed-dialog.d.ts.map +1 -0
- package/dist/session/signed-dialog.js +170 -0
- package/dist/session/signed-dialog.js.map +1 -0
- package/dist/session/tan-selection.d.ts +26 -18
- package/dist/session/tan-selection.d.ts.map +1 -1
- package/dist/session/tan-selection.js +44 -33
- package/dist/session/tan-selection.js.map +1 -1
- package/dist/session/user-prompts.d.ts +8 -4
- package/dist/session/user-prompts.d.ts.map +1 -1
- package/dist/session/user-prompts.js +34 -14
- package/dist/session/user-prompts.js.map +1 -1
- package/dist/tan/challenge.d.ts +34 -13
- package/dist/tan/challenge.d.ts.map +1 -1
- package/dist/tan/challenge.js +25 -26
- package/dist/tan/challenge.js.map +1 -1
- package/dist/tan/flicker.d.ts +7 -1
- package/dist/tan/flicker.d.ts.map +1 -1
- package/dist/tan/flicker.js +40 -6
- package/dist/tan/flicker.js.map +1 -1
- package/dist/tan/tan-image.d.ts +3 -2
- package/dist/tan/tan-image.d.ts.map +1 -1
- package/dist/tan/tan-image.js +7 -5
- package/dist/tan/tan-image.js.map +1 -1
- package/dist/tan/tan-models.d.ts +5 -1
- package/dist/tan/tan-models.d.ts.map +1 -1
- package/dist/tan/tan-models.js +10 -5
- package/dist/tan/tan-models.js.map +1 -1
- package/dist/util/async.d.ts +0 -2
- package/dist/util/async.d.ts.map +1 -1
- package/dist/util/async.js +0 -4
- package/dist/util/async.js.map +1 -1
- package/dist/util/bytes.d.ts +2 -3
- package/dist/util/bytes.d.ts.map +1 -1
- package/dist/util/bytes.js +12 -20
- package/dist/util/bytes.js.map +1 -1
- package/dist/util/call-context.d.ts.map +1 -1
- package/dist/util/call-context.js +3 -2
- package/dist/util/call-context.js.map +1 -1
- package/dist/util/dates.d.ts +9 -16
- package/dist/util/dates.d.ts.map +1 -1
- package/dist/util/dates.js +39 -19
- package/dist/util/dates.js.map +1 -1
- package/dist/util/errors.d.ts +9 -1
- package/dist/util/errors.d.ts.map +1 -1
- package/dist/util/errors.js +12 -3
- package/dist/util/errors.js.map +1 -1
- package/dist/util/json.d.ts +4 -0
- package/dist/util/json.d.ts.map +1 -1
- package/dist/util/json.js +18 -0
- package/dist/util/json.js.map +1 -1
- package/dist/util/text.d.ts +21 -4
- package/dist/util/text.d.ts.map +1 -1
- package/dist/util/text.js +42 -13
- package/dist/util/text.js.map +1 -1
- package/dist/util/xml.d.ts +4 -3
- package/dist/util/xml.d.ts.map +1 -1
- package/dist/util/xml.js +37 -26
- package/dist/util/xml.js.map +1 -1
- package/dist/v3/account-extension.d.ts.map +1 -1
- package/dist/v3/account-extension.js +7 -10
- package/dist/v3/account-extension.js.map +1 -1
- package/dist/v3/bank-connection.d.ts +34 -0
- package/dist/v3/bank-connection.d.ts.map +1 -0
- package/dist/v3/bank-connection.js +58 -0
- package/dist/v3/bank-connection.js.map +1 -0
- package/dist/v3/dialog.d.ts +80 -46
- package/dist/v3/dialog.d.ts.map +1 -1
- package/dist/v3/dialog.js +162 -59
- package/dist/v3/dialog.js.map +1 -1
- package/dist/v3/message.d.ts +17 -4
- package/dist/v3/message.d.ts.map +1 -1
- package/dist/v3/message.js +62 -18
- package/dist/v3/message.js.map +1 -1
- package/dist/v3/parameter-store.d.ts +75 -0
- package/dist/v3/parameter-store.d.ts.map +1 -0
- package/dist/v3/parameter-store.js +143 -0
- package/dist/v3/parameter-store.js.map +1 -0
- package/dist/v3/parameters.d.ts +38 -12
- package/dist/v3/parameters.d.ts.map +1 -1
- package/dist/v3/parameters.js +91 -37
- package/dist/v3/parameters.js.map +1 -1
- package/dist/v3/protocol.d.ts +43 -50
- package/dist/v3/protocol.d.ts.map +1 -1
- package/dist/v3/protocol.js +58 -208
- package/dist/v3/protocol.js.map +1 -1
- package/dist/v3/queries.d.ts +51 -0
- package/dist/v3/queries.d.ts.map +1 -0
- package/dist/v3/queries.js +120 -0
- package/dist/v3/queries.js.map +1 -0
- package/dist/v3/segments.d.ts +29 -12
- package/dist/v3/segments.d.ts.map +1 -1
- package/dist/v3/segments.js +65 -23
- package/dist/v3/segments.js.map +1 -1
- package/dist/v3/syntax.d.ts +65 -14
- package/dist/v3/syntax.d.ts.map +1 -1
- package/dist/v3/syntax.js +167 -101
- package/dist/v3/syntax.js.map +1 -1
- package/package.json +10 -6
- package/src/client.ts +252 -0
- package/src/core/account.ts +86 -13
- package/src/core/amount.ts +3 -1
- package/src/core/balance.ts +6 -5
- package/src/core/bank-info.ts +1 -1
- package/src/core/client.ts +52 -15
- package/src/core/config.ts +69 -28
- package/src/core/errors.ts +122 -48
- package/src/core/feedback.ts +4 -1
- package/src/core/transaction.ts +9 -4
- package/src/core/transport.ts +98 -23
- package/src/formats/camt.ts +136 -39
- package/src/formats/mt940.ts +167 -81
- package/src/formats/readers.ts +24 -31
- package/src/formats/record-budget.ts +18 -0
- package/src/formats/sepa-purpose.ts +21 -2
- package/src/index.ts +4 -2
- package/src/session/app-approval.ts +51 -38
- package/src/session/dialog-runner.ts +31 -28
- package/src/session/login-guard.ts +174 -88
- package/src/session/sepa-accounts.ts +63 -45
- package/src/session/session-setup.ts +90 -71
- package/src/session/session-state.ts +56 -22
- package/src/session/signed-dialog.ts +192 -0
- package/src/session/tan-selection.ts +50 -39
- package/src/session/user-prompts.ts +35 -16
- package/src/tan/challenge.ts +40 -31
- package/src/tan/flicker.ts +44 -6
- package/src/tan/tan-image.ts +7 -5
- package/src/tan/tan-models.ts +10 -5
- package/src/util/async.ts +0 -5
- package/src/util/bytes.ts +13 -19
- package/src/util/call-context.ts +3 -2
- package/src/util/dates.ts +41 -24
- package/src/util/errors.ts +14 -3
- package/src/util/json.ts +16 -0
- package/src/util/text.ts +42 -12
- package/src/util/xml.ts +37 -26
- package/src/v3/account-extension.ts +7 -12
- package/src/v3/bank-connection.ts +67 -0
- package/src/v3/dialog.ts +175 -91
- package/src/v3/message.ts +69 -17
- package/src/v3/parameter-store.ts +160 -0
- package/src/v3/parameters.ts +110 -37
- package/src/v3/protocol.ts +70 -253
- package/src/v3/queries.ts +190 -0
- package/src/v3/segments.ts +65 -22
- package/src/v3/syntax.ts +153 -91
- package/dist/session/bank-connection.d.ts +0 -28
- package/dist/session/bank-connection.d.ts.map +0 -1
- package/dist/session/bank-connection.js +0 -48
- package/dist/session/bank-connection.js.map +0 -1
- package/dist/session/parameter-data.d.ts +0 -83
- package/dist/session/parameter-data.d.ts.map +0 -1
- package/dist/session/parameter-data.js +0 -68
- package/dist/session/parameter-data.js.map +0 -1
- package/dist/session/pin-tan-client.d.ts +0 -54
- package/dist/session/pin-tan-client.d.ts.map +0 -1
- package/dist/session/pin-tan-client.js +0 -153
- package/dist/session/pin-tan-client.js.map +0 -1
- package/dist/session/pin-tan-dialog.d.ts +0 -71
- package/dist/session/pin-tan-dialog.d.ts.map +0 -1
- package/dist/session/pin-tan-dialog.js +0 -124
- package/dist/session/pin-tan-dialog.js.map +0 -1
- package/dist/session/protocol.d.ts +0 -209
- package/dist/session/protocol.d.ts.map +0 -1
- package/dist/session/protocol.js +0 -75
- package/dist/session/protocol.js.map +0 -1
- package/dist/session/response-handler.d.ts +0 -48
- package/dist/session/response-handler.d.ts.map +0 -1
- package/dist/session/response-handler.js +0 -121
- package/dist/session/response-handler.js.map +0 -1
- package/dist/v3/client.d.ts +0 -24
- package/dist/v3/client.d.ts.map +0 -1
- package/dist/v3/client.js +0 -16
- package/dist/v3/client.js.map +0 -1
- package/src/session/bank-connection.ts +0 -51
- package/src/session/parameter-data.ts +0 -137
- package/src/session/pin-tan-client.ts +0 -186
- package/src/session/pin-tan-dialog.ts +0 -160
- package/src/session/protocol.ts +0 -311
- package/src/session/response-handler.ts +0 -130
- package/src/v3/client.ts +0 -29
package/dist/client.js
ADDED
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { FinTsConfig, requirePin } from './core/config.js';
|
|
2
|
+
import { FinTsStateError, FinTsUnsupportedError } from './core/errors.js';
|
|
3
|
+
import { DialogRunner } from './session/dialog-runner.js';
|
|
4
|
+
import { LoginGuard } from './session/login-guard.js';
|
|
5
|
+
import { SepaAccounts } from './session/sepa-accounts.js';
|
|
6
|
+
import { SessionSetup } from './session/session-setup.js';
|
|
7
|
+
import { restoreSession, saveSession } from './session/session-state.js';
|
|
8
|
+
import { TanSelection } from './session/tan-selection.js';
|
|
9
|
+
import { UserPrompts } from './session/user-prompts.js';
|
|
10
|
+
import { TanMedium } from './tan/tan-models.js';
|
|
11
|
+
import { SerialExecutor } from './util/async.js';
|
|
12
|
+
import { CallContext } from './util/call-context.js';
|
|
13
|
+
import { calendarDay, notAfterToday } from './util/dates.js';
|
|
14
|
+
import { invalidArgument } from './util/errors.js';
|
|
15
|
+
import { ParameterStore } from './v3/parameter-store.js';
|
|
16
|
+
import { FinTs3Protocol } from './v3/protocol.js';
|
|
17
|
+
import { balanceQuery, tanMediaQuery, transactionsQuery } from './v3/queries.js';
|
|
18
|
+
/** A token of the client call running now, so that a call from inside its callbacks is recognized. */
|
|
19
|
+
const runningCalls = new CallContext();
|
|
20
|
+
/**
|
|
21
|
+
* The calendar day of `bound`, the `name` bound of a `TransactionQuery`: the bank takes dates without time of day.
|
|
22
|
+
* Throws `TypeError` for anything but a valid `Date`, such as an Invalid Date, which would go out as `0NaNNaNNaN`.
|
|
23
|
+
*/
|
|
24
|
+
function requestedDay(bound, name) {
|
|
25
|
+
if (bound === undefined)
|
|
26
|
+
return undefined;
|
|
27
|
+
if (!(bound instanceof Date) || Number.isNaN(bound.getTime()))
|
|
28
|
+
throw invalidArgument('Not a valid Date', name);
|
|
29
|
+
return calendarDay(bound);
|
|
30
|
+
}
|
|
31
|
+
/** FinTS 3.0 PIN/TAN client, the version German banks use. */
|
|
32
|
+
export class FinTs3Client {
|
|
33
|
+
// A call such as `getBalance` runs through these parts:
|
|
34
|
+
// 1. `DialogRunner.open` reuses the session's dialog or logs in, through `SessionSetup.remedied`, which logs in once
|
|
35
|
+
// more for each refusal it can take care of.
|
|
36
|
+
// 2. `SessionSetup.prepare` first settles what is open: the bank parameter data, the synchronization, and through
|
|
37
|
+
// `TanSelection` the TAN method and medium.
|
|
38
|
+
// 3. `SignedDialog.login` sends the login and completes the strong authentication the bank asks for, a TAN or an app
|
|
39
|
+
// approval (`AppApprovalWait`).
|
|
40
|
+
// 4. `DialogRunner.query` sends the order in that dialog, completes its approval the same way, and fetches all pages.
|
|
41
|
+
//
|
|
42
|
+
// `FinTs3Protocol` builds, signs and posts the messages of each `FinTs3Dialog`, the queries build the orders and read
|
|
43
|
+
// the answers, and the `ParameterStore` keeps the bank's parameter data and IDs. `SepaAccounts` completes IBAN and
|
|
44
|
+
// BIC, and `UserPrompts` is everything the app is told or asked. The `LoginGuard` holds the PIN: the protocol takes it
|
|
45
|
+
// from the guard for every message it signs, and `SignedDialog` has the guard judge every answer, so that the PIN does
|
|
46
|
+
// not go out after a refusal.
|
|
47
|
+
//
|
|
48
|
+
// The fields are ECMAScript private, so that neither `util.inspect` nor `JSON.stringify` of a client reaches the PIN
|
|
49
|
+
// or the account data behind them.
|
|
50
|
+
#prompts;
|
|
51
|
+
#guard;
|
|
52
|
+
#parameters;
|
|
53
|
+
#protocol;
|
|
54
|
+
#sessionState;
|
|
55
|
+
#tans;
|
|
56
|
+
#setup;
|
|
57
|
+
#dialogs;
|
|
58
|
+
#sepa;
|
|
59
|
+
#queue = new SerialExecutor();
|
|
60
|
+
#closed;
|
|
61
|
+
/** The call running now, which a call from inside its callbacks would wait for. */
|
|
62
|
+
#runningCall;
|
|
63
|
+
/**
|
|
64
|
+
* A client with the session restored from `FinTsClientOptions.state` where it was saved for this user and bank.
|
|
65
|
+
*
|
|
66
|
+
* Throws `TypeError` if the configuration is invalid, as the constructor of `FinTsConfig` tells, or the PIN is empty,
|
|
67
|
+
* begins or ends with a blank, or has characters FinTS 3.0 cannot send: it uses ISO 8859-1, so `€` and most
|
|
68
|
+
* non-Latin letters are not possible.
|
|
69
|
+
*/
|
|
70
|
+
constructor(init) {
|
|
71
|
+
const config = init.config instanceof FinTsConfig ? init.config : new FinTsConfig(init.config);
|
|
72
|
+
this.#prompts = new UserPrompts(init.options);
|
|
73
|
+
this.#guard = new LoginGuard(requirePin(init.pin));
|
|
74
|
+
this.#parameters = new ParameterStore(config);
|
|
75
|
+
this.#protocol = new FinTs3Protocol(this.#parameters, this.#guard, init.options.transport, this.#prompts.logger);
|
|
76
|
+
this.#sessionState = restoreSession(init.options.state, this.#parameters, this.#guard);
|
|
77
|
+
this.#tans = new TanSelection(this.#protocol, this.#sessionState, this.#prompts);
|
|
78
|
+
const session = {
|
|
79
|
+
parameters: this.#parameters,
|
|
80
|
+
state: this.#sessionState,
|
|
81
|
+
prompts: this.#prompts,
|
|
82
|
+
guard: this.#guard,
|
|
83
|
+
};
|
|
84
|
+
this.#setup = new SessionSetup(session, this.#protocol, this.#tans);
|
|
85
|
+
this.#dialogs = new DialogRunner(this.#setup);
|
|
86
|
+
this.#sepa = new SepaAccounts(this.#parameters, this.#sessionState, this.#dialogs);
|
|
87
|
+
}
|
|
88
|
+
get state() {
|
|
89
|
+
return saveSession(this.#parameters, this.#guard, this.#sessionState);
|
|
90
|
+
}
|
|
91
|
+
get loginRefusal() {
|
|
92
|
+
return this.#guard.refusal;
|
|
93
|
+
}
|
|
94
|
+
get selectedTanMethod() {
|
|
95
|
+
return this.#sessionState.tanMethod;
|
|
96
|
+
}
|
|
97
|
+
get selectedTanMedium() {
|
|
98
|
+
return this.#sessionState.tanMedium;
|
|
99
|
+
}
|
|
100
|
+
selectTanMethod(securityFunction, tanMedium) {
|
|
101
|
+
return this.#serialized(async () => {
|
|
102
|
+
await this.#dialogs.end();
|
|
103
|
+
this.#tans.select(securityFunction, tanMedium);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
clearLoginRefusal(pin) {
|
|
107
|
+
return this.#serialized(async () => {
|
|
108
|
+
const sendable = requirePin(pin);
|
|
109
|
+
// The dialog ends with the PIN it was opened with.
|
|
110
|
+
await this.#dialogs.end();
|
|
111
|
+
this.#guard.replacePin(sendable);
|
|
112
|
+
this.#tans.forgetMedium();
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
getBankInfo() {
|
|
116
|
+
return this.#serialized(() => this.#setup.remedied(() => this.#setup.bankInfo()));
|
|
117
|
+
}
|
|
118
|
+
getTanMethods() {
|
|
119
|
+
return this.#serialized(() => this.#setup.remedied(() => this.#setup.methods()));
|
|
120
|
+
}
|
|
121
|
+
getTanMedia() {
|
|
122
|
+
return this.#serialized(async () => {
|
|
123
|
+
// The session keeps the list of a lookup that found no medium; the app gets media of its own.
|
|
124
|
+
const lookedUp = (await this.#setup.remedied(() => this.#setup.prepare())) ?? this.#tans.lookedUpMedia;
|
|
125
|
+
return (lookedUp?.map((m) => new TanMedium(m)) ??
|
|
126
|
+
(await this.#dialogs.query(() => {
|
|
127
|
+
const query = tanMediaQuery(this.#parameters);
|
|
128
|
+
if (query === undefined)
|
|
129
|
+
throw new FinTsUnsupportedError('The bank does not list TAN media');
|
|
130
|
+
return query;
|
|
131
|
+
})));
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
getAccounts() {
|
|
135
|
+
return this.#serialized(() => this.#sepa.completedAccounts());
|
|
136
|
+
}
|
|
137
|
+
getBalance(account) {
|
|
138
|
+
return this.#serialized(async () => {
|
|
139
|
+
const completed = await this.#sepa.complete(account);
|
|
140
|
+
// The dialog start delivers the user parameter data, which may carry the complete balance: then the client must
|
|
141
|
+
// not ask for it separately (Formals E.3.1.1, F.3.2).
|
|
142
|
+
await this.#dialogs.open();
|
|
143
|
+
return (this.#parameters.userParameters?.completeBalance(completed) ??
|
|
144
|
+
(await this.#dialogs.query(() => balanceQuery(this.#parameters, completed))));
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
async getTransactions(account, query = {}) {
|
|
148
|
+
// Checked before the call waits for others; an async method, so that every argument error is a rejection.
|
|
149
|
+
const firstDay = requestedDay(query.from, 'from');
|
|
150
|
+
const lastDay = requestedDay(query.to, 'to');
|
|
151
|
+
if (firstDay !== undefined && lastDay !== undefined && firstDay.getTime() > lastDay.getTime()) {
|
|
152
|
+
throw invalidArgument('`from` lies on a day after `to`', 'from');
|
|
153
|
+
}
|
|
154
|
+
return this.#serialized(async () => {
|
|
155
|
+
const completed = await this.#sepa.complete(account);
|
|
156
|
+
const transactions = await this.#dialogs.query(() => transactionsQuery(this.#parameters, completed, query.format ?? 'auto', notAfterToday(firstDay), notAfterToday(lastDay)));
|
|
157
|
+
// A stable sort, so that transactions of the same day keep the bank's order.
|
|
158
|
+
return transactions.sort((a, b) => (a.bookingDate ?? a.valueDate).getTime() - (b.bookingDate ?? b.valueDate).getTime());
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
close() {
|
|
162
|
+
this.#closed ??= this.#closeNow();
|
|
163
|
+
return this.#closed;
|
|
164
|
+
}
|
|
165
|
+
#closeNow() {
|
|
166
|
+
this.#prompts.close();
|
|
167
|
+
this.#protocol.beginClose();
|
|
168
|
+
return this.#queue.run(() => this.#prompts.reportingCallbackErrors(async () => {
|
|
169
|
+
try {
|
|
170
|
+
await this.#dialogs.end();
|
|
171
|
+
}
|
|
172
|
+
finally {
|
|
173
|
+
this.#guard.close();
|
|
174
|
+
this.#protocol.close();
|
|
175
|
+
}
|
|
176
|
+
}));
|
|
177
|
+
}
|
|
178
|
+
#serialized(action) {
|
|
179
|
+
const caller = runningCalls.current;
|
|
180
|
+
if (caller !== undefined && caller === this.#runningCall) {
|
|
181
|
+
// The call would wait behind the running one, which waits for the callback: neither would ever end.
|
|
182
|
+
return Promise.reject(new FinTsStateError('The FinTS client was called from inside one of its callbacks'));
|
|
183
|
+
}
|
|
184
|
+
return this.#queue.run(async () => {
|
|
185
|
+
const call = {};
|
|
186
|
+
this.#runningCall = call;
|
|
187
|
+
try {
|
|
188
|
+
return await runningCalls.run(call, () => this.#guard.runCall(() => {
|
|
189
|
+
this.#prompts.checkOpen();
|
|
190
|
+
return this.#prompts.reportingCallbackErrors(action);
|
|
191
|
+
}));
|
|
192
|
+
}
|
|
193
|
+
finally {
|
|
194
|
+
this.#runningCall = undefined;
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/core/account.d.ts
CHANGED
|
@@ -22,8 +22,6 @@ export type AccountCategory =
|
|
|
22
22
|
| 'other'
|
|
23
23
|
/** The bank states no type code. */
|
|
24
24
|
| 'unknown';
|
|
25
|
-
/** The category of the FinTS account type `code`, which is `undefined` if the bank states none. */
|
|
26
|
-
export declare function accountCategoryOf(code: number | undefined): AccountCategory;
|
|
27
25
|
/** What `Account` takes; the bank states the details it knows. */
|
|
28
26
|
export interface AccountInit {
|
|
29
27
|
accountNumber?: string | undefined;
|
|
@@ -41,7 +39,15 @@ export interface AccountInit {
|
|
|
41
39
|
allowedTransactionsComplete?: boolean | undefined;
|
|
42
40
|
dataStatus?: AccountDataStatus | undefined;
|
|
43
41
|
}
|
|
44
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* A bank account as reported by the user parameter data or the SEPA account query.
|
|
44
|
+
*
|
|
45
|
+
* An account the app builds itself, such as from a stored IBAN, stands for the one of `getAccounts` it `matches`:
|
|
46
|
+
* queries take the details the bank states of that one, and the transactions the bank permits for it. One the bank
|
|
47
|
+
* names nowhere goes out with its account number, sub-account, IBAN, BIC, bank and country code and currency only, and
|
|
48
|
+
* is refused with `FinTsUnsupportedError` where the bank's lists of permitted transactions are complete. Queries never
|
|
49
|
+
* take the permitted transactions from the app's account.
|
|
50
|
+
*/
|
|
45
51
|
export declare class Account {
|
|
46
52
|
/** National account number. */
|
|
47
53
|
readonly accountNumber: string | undefined;
|
|
@@ -51,9 +57,12 @@ export declare class Account {
|
|
|
51
57
|
readonly bankCode: string;
|
|
52
58
|
/** Numeric country code of the bank, `280` for Germany. */
|
|
53
59
|
readonly countryCode: string;
|
|
54
|
-
/**
|
|
60
|
+
/**
|
|
61
|
+
* International bank account number, in its electronic format: without blanks and in capitals, however
|
|
62
|
+
* `AccountInit.iban` wrote it, such as in groups of four as printed.
|
|
63
|
+
*/
|
|
55
64
|
readonly iban: string | undefined;
|
|
56
|
-
/** Bank identifier code of the bank holding the account. */
|
|
65
|
+
/** Bank identifier code of the bank holding the account, without blanks and in capitals. */
|
|
57
66
|
readonly bic: string | undefined;
|
|
58
67
|
/** Customer ID the account is assigned to; may differ from the login name. */
|
|
59
68
|
readonly customerId: string | undefined;
|
|
@@ -68,8 +77,8 @@ export declare class Account {
|
|
|
68
77
|
/**
|
|
69
78
|
* The transactions the bank lists as permitted for this account, by their segment IDs, such as `HKSAL`.
|
|
70
79
|
*
|
|
71
|
-
* The client applies them itself: `getBalance` and `getTransactions`
|
|
72
|
-
*
|
|
80
|
+
* The client applies them itself: `getBalance` and `getTransactions` do not send a query they rule out, and fail with
|
|
81
|
+
* `FinTsUnsupportedError`.
|
|
73
82
|
*/
|
|
74
83
|
readonly allowedTransactions: readonly string[];
|
|
75
84
|
/**
|
|
@@ -79,6 +88,7 @@ export declare class Account {
|
|
|
79
88
|
readonly allowedTransactionsComplete: boolean;
|
|
80
89
|
/** What the bank tells about the data it holds for the account, where it does. */
|
|
81
90
|
readonly dataStatus: AccountDataStatus | undefined;
|
|
91
|
+
/** Takes copies of the permitted transactions and the data status of `init`, which no other account shares. */
|
|
82
92
|
constructor(init: AccountInit);
|
|
83
93
|
/** The kind of account, derived from `typeCode`. */
|
|
84
94
|
get category(): AccountCategory;
|
|
@@ -98,6 +108,23 @@ export declare class Account {
|
|
|
98
108
|
*/
|
|
99
109
|
toString(): string;
|
|
100
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* Accounts by IBAN and by national account, to find the first one an account `matches` without comparing it with each:
|
|
113
|
+
* a bank may list tens of thousands.
|
|
114
|
+
*
|
|
115
|
+
* Bank and country codes count as they are, where `matches` takes an empty one for any: the accounts a bank lists state
|
|
116
|
+
* both.
|
|
117
|
+
*/
|
|
118
|
+
export declare class AccountIndex {
|
|
119
|
+
private readonly accounts;
|
|
120
|
+
private readonly byIban;
|
|
121
|
+
private readonly byNational;
|
|
122
|
+
/** Those without IBAN only: an account with IBAN matches one with IBAN by that alone. */
|
|
123
|
+
private readonly byNationalWithoutIban;
|
|
124
|
+
constructor(accounts: readonly Account[]);
|
|
125
|
+
/** The first of the accounts that `account` matches. */
|
|
126
|
+
find(account: Account): Account | undefined;
|
|
127
|
+
}
|
|
101
128
|
/**
|
|
102
129
|
* What the bank tells about the data it holds for an account, so that an app asks only for what has changed (FinTS 3.0
|
|
103
130
|
* user parameter data, "Erweiterung, kontobezogen", Formals E.3.1 and F).
|
|
@@ -126,6 +153,7 @@ export declare class AccountDataStatus {
|
|
|
126
153
|
readonly nextTransactionsAt: Date | undefined;
|
|
127
154
|
/** Whether the balances the transactions carry are the current ones. */
|
|
128
155
|
readonly transactionBalancesCurrent: boolean;
|
|
156
|
+
/** Takes copies of the inventory and the date of `init`, which no other status shares. */
|
|
129
157
|
constructor(init: {
|
|
130
158
|
inventory?: ReadonlyMap<string, string>;
|
|
131
159
|
lastTransactions?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/core/account.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/core/account.ts"],"names":[],"mappings":"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"}
|
package/dist/core/account.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { copyDate } from '../util/dates.js';
|
|
1
2
|
import { ImmutableMap } from '../util/immutable-map.js';
|
|
2
|
-
import { maskedId } from '../util/text.js';
|
|
3
|
+
import { maskedId, nonBlank } from '../util/text.js';
|
|
3
4
|
import { defaultCountryCode } from './config.js';
|
|
4
5
|
const categoriesByTens = [
|
|
5
6
|
'checking',
|
|
@@ -13,12 +14,20 @@ const categoriesByTens = [
|
|
|
13
14
|
'insurance',
|
|
14
15
|
];
|
|
15
16
|
/** The category of the FinTS account type `code`, which is `undefined` if the bank states none. */
|
|
16
|
-
|
|
17
|
+
function accountCategoryOf(code) {
|
|
17
18
|
if (code === undefined || code < 1)
|
|
18
19
|
return 'unknown';
|
|
19
20
|
return categoriesByTens[Math.floor(code / 10)] ?? 'other';
|
|
20
21
|
}
|
|
21
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* A bank account as reported by the user parameter data or the SEPA account query.
|
|
24
|
+
*
|
|
25
|
+
* An account the app builds itself, such as from a stored IBAN, stands for the one of `getAccounts` it `matches`:
|
|
26
|
+
* queries take the details the bank states of that one, and the transactions the bank permits for it. One the bank
|
|
27
|
+
* names nowhere goes out with its account number, sub-account, IBAN, BIC, bank and country code and currency only, and
|
|
28
|
+
* is refused with `FinTsUnsupportedError` where the bank's lists of permitted transactions are complete. Queries never
|
|
29
|
+
* take the permitted transactions from the app's account.
|
|
30
|
+
*/
|
|
22
31
|
export class Account {
|
|
23
32
|
/** National account number. */
|
|
24
33
|
accountNumber;
|
|
@@ -28,9 +37,12 @@ export class Account {
|
|
|
28
37
|
bankCode;
|
|
29
38
|
/** Numeric country code of the bank, `280` for Germany. */
|
|
30
39
|
countryCode;
|
|
31
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* International bank account number, in its electronic format: without blanks and in capitals, however
|
|
42
|
+
* `AccountInit.iban` wrote it, such as in groups of four as printed.
|
|
43
|
+
*/
|
|
32
44
|
iban;
|
|
33
|
-
/** Bank identifier code of the bank holding the account. */
|
|
45
|
+
/** Bank identifier code of the bank holding the account, without blanks and in capitals. */
|
|
34
46
|
bic;
|
|
35
47
|
/** Customer ID the account is assigned to; may differ from the login name. */
|
|
36
48
|
customerId;
|
|
@@ -45,8 +57,8 @@ export class Account {
|
|
|
45
57
|
/**
|
|
46
58
|
* The transactions the bank lists as permitted for this account, by their segment IDs, such as `HKSAL`.
|
|
47
59
|
*
|
|
48
|
-
* The client applies them itself: `getBalance` and `getTransactions`
|
|
49
|
-
*
|
|
60
|
+
* The client applies them itself: `getBalance` and `getTransactions` do not send a query they rule out, and fail with
|
|
61
|
+
* `FinTsUnsupportedError`.
|
|
50
62
|
*/
|
|
51
63
|
allowedTransactions;
|
|
52
64
|
/**
|
|
@@ -56,13 +68,14 @@ export class Account {
|
|
|
56
68
|
allowedTransactionsComplete;
|
|
57
69
|
/** What the bank tells about the data it holds for the account, where it does. */
|
|
58
70
|
dataStatus;
|
|
71
|
+
/** Takes copies of the permitted transactions and the data status of `init`, which no other account shares. */
|
|
59
72
|
constructor(init) {
|
|
60
73
|
this.accountNumber = init.accountNumber;
|
|
61
74
|
this.subAccount = init.subAccount;
|
|
62
75
|
this.bankCode = init.bankCode;
|
|
63
76
|
this.countryCode = init.countryCode ?? defaultCountryCode;
|
|
64
|
-
this.iban = init.iban;
|
|
65
|
-
this.bic = init.bic;
|
|
77
|
+
this.iban = electronicFormat(init.iban);
|
|
78
|
+
this.bic = electronicFormat(init.bic);
|
|
66
79
|
this.customerId = init.customerId;
|
|
67
80
|
this.currency = init.currency;
|
|
68
81
|
this.ownerName = init.ownerName;
|
|
@@ -70,7 +83,7 @@ export class Account {
|
|
|
70
83
|
this.typeCode = init.typeCode;
|
|
71
84
|
this.allowedTransactions = Object.freeze([...(init.allowedTransactions ?? [])]);
|
|
72
85
|
this.allowedTransactionsComplete = init.allowedTransactionsComplete ?? false;
|
|
73
|
-
this.dataStatus = init.dataStatus;
|
|
86
|
+
this.dataStatus = init.dataStatus && new AccountDataStatus(init.dataStatus);
|
|
74
87
|
}
|
|
75
88
|
/** The kind of account, derived from `typeCode`. */
|
|
76
89
|
get category() {
|
|
@@ -86,9 +99,9 @@ export class Account {
|
|
|
86
99
|
matches(other) {
|
|
87
100
|
if (this.iban !== undefined && other.iban !== undefined)
|
|
88
101
|
return this.iban === other.iban;
|
|
89
|
-
const number = this
|
|
102
|
+
const number = nationalNumber(this);
|
|
90
103
|
return (number !== undefined &&
|
|
91
|
-
number === other
|
|
104
|
+
number === nationalNumber(other) &&
|
|
92
105
|
(this.subAccount ?? '') === (other.subAccount ?? '') &&
|
|
93
106
|
sameOrUnstated(this.bankCode, other.bankCode) &&
|
|
94
107
|
sameOrUnstated(this.countryCode, other.countryCode));
|
|
@@ -125,9 +138,66 @@ export class Account {
|
|
|
125
138
|
return `Account(${parts.join(', ')})`;
|
|
126
139
|
}
|
|
127
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* An IBAN or BIC in the form the bank sends and compares, without blanks and in capitals; `undefined` for blanks only.
|
|
143
|
+
*/
|
|
144
|
+
function electronicFormat(code) {
|
|
145
|
+
return nonBlank(code?.replace(/\s/g, '').toUpperCase());
|
|
146
|
+
}
|
|
128
147
|
function sameOrUnstated(a, b) {
|
|
129
148
|
return a === '' || b === '' || a === b;
|
|
130
149
|
}
|
|
150
|
+
/** The account number as `Account.matches` compares it: without leading zeros. */
|
|
151
|
+
function nationalNumber(account) {
|
|
152
|
+
return account.accountNumber?.replace(/^0+/, '');
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Accounts by IBAN and by national account, to find the first one an account `matches` without comparing it with each:
|
|
156
|
+
* a bank may list tens of thousands.
|
|
157
|
+
*
|
|
158
|
+
* Bank and country codes count as they are, where `matches` takes an empty one for any: the accounts a bank lists state
|
|
159
|
+
* both.
|
|
160
|
+
*/
|
|
161
|
+
export class AccountIndex {
|
|
162
|
+
accounts;
|
|
163
|
+
byIban = new Map();
|
|
164
|
+
byNational = new Map();
|
|
165
|
+
/** Those without IBAN only: an account with IBAN matches one with IBAN by that alone. */
|
|
166
|
+
byNationalWithoutIban = new Map();
|
|
167
|
+
constructor(accounts) {
|
|
168
|
+
this.accounts = accounts;
|
|
169
|
+
accounts.forEach((account, i) => {
|
|
170
|
+
const national = nationalKey(account);
|
|
171
|
+
if (account.iban !== undefined)
|
|
172
|
+
keepFirst(this.byIban, account.iban, i);
|
|
173
|
+
if (national === undefined)
|
|
174
|
+
return;
|
|
175
|
+
keepFirst(this.byNational, national, i);
|
|
176
|
+
if (account.iban === undefined)
|
|
177
|
+
keepFirst(this.byNationalWithoutIban, national, i);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
/** The first of the accounts that `account` matches. */
|
|
181
|
+
find(account) {
|
|
182
|
+
const national = nationalKey(account);
|
|
183
|
+
const byNational = account.iban === undefined ? this.byNational : this.byNationalWithoutIban;
|
|
184
|
+
const found = [
|
|
185
|
+
account.iban === undefined ? undefined : this.byIban.get(account.iban),
|
|
186
|
+
national === undefined ? undefined : byNational.get(national),
|
|
187
|
+
].filter((i) => i !== undefined);
|
|
188
|
+
return found.length === 0 ? undefined : this.accounts[Math.min(...found)];
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
function nationalKey(account) {
|
|
192
|
+
const number = nationalNumber(account);
|
|
193
|
+
return number === undefined
|
|
194
|
+
? undefined
|
|
195
|
+
: JSON.stringify([number, account.subAccount ?? '', account.bankCode, account.countryCode]);
|
|
196
|
+
}
|
|
197
|
+
function keepFirst(index, key, position) {
|
|
198
|
+
if (!index.has(key))
|
|
199
|
+
index.set(key, position);
|
|
200
|
+
}
|
|
131
201
|
/**
|
|
132
202
|
* What the bank tells about the data it holds for an account, so that an app asks only for what has changed (FinTS 3.0
|
|
133
203
|
* user parameter data, "Erweiterung, kontobezogen", Formals E.3.1 and F).
|
|
@@ -156,10 +226,11 @@ export class AccountDataStatus {
|
|
|
156
226
|
nextTransactionsAt;
|
|
157
227
|
/** Whether the balances the transactions carry are the current ones. */
|
|
158
228
|
transactionBalancesCurrent;
|
|
229
|
+
/** Takes copies of the inventory and the date of `init`, which no other status shares. */
|
|
159
230
|
constructor(init) {
|
|
160
231
|
this.inventory = new ImmutableMap(init.inventory ?? []);
|
|
161
232
|
this.lastTransactions = init.lastTransactions;
|
|
162
|
-
this.nextTransactionsAt = init.nextTransactionsAt;
|
|
233
|
+
this.nextTransactionsAt = copyDate(init.nextTransactionsAt);
|
|
163
234
|
this.transactionBalancesCurrent = init.transactionBalancesCurrent ?? false;
|
|
164
235
|
}
|
|
165
236
|
/** The ID of the transactions the bank holds as MT940, its entry for `HKKAZ` in `inventory`. */
|
package/dist/core/account.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/core/account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/core/account.ts"],"names":[],"mappings":"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"}
|
package/dist/core/amount.d.ts
CHANGED
|
@@ -56,7 +56,8 @@ export declare class Amount {
|
|
|
56
56
|
/**
|
|
57
57
|
* `amount` as a credit (unchanged) or a debit (negated), by the bank's credit/debit `mark`.
|
|
58
58
|
*
|
|
59
|
-
* Throws `FormatError` for any other `mark`, `undefined` included: a missing mark must not be read as a credit.
|
|
59
|
+
* Throws `FormatError` for any other `mark`, `undefined` included: a missing mark must not be read as a credit. It does
|
|
60
|
+
* as well for a negative `amount`, whose sign the mark would turn: the mark alone gives the direction.
|
|
60
61
|
*/
|
|
61
62
|
export declare function withMark(amount: Amount, mark: string | undefined, credit: string, debit: string): Amount;
|
|
62
63
|
//# sourceMappingURL=amount.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amount.d.ts","sourceRoot":"","sources":["../../src/core/amount.ts"],"names":[],"mappings":"AAmDA,+EAA+E;AAC/E,qBAAa,MAAM;IACjB,4GAA4G;IAC5G,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;OAGG;gBACS,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAW/D;;;;;;;;;;OAUG;IACH,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAmB5D,yHAAyH;IACzH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,wCAAwC;IACxC,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,kCAAkC;IAClC,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,0CAA0C;IAC1C,MAAM,IAAI,MAAM;IAIhB,oCAAoC;IACpC,GAAG,IAAI,MAAM;IAIb;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAU1B,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI/B,uFAAuF;IACvF,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAKhC,wGAAwG;IACxG,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAI/B,iEAAiE;IACjE,eAAe,CAAC,gBAAgB,SAAM,GAAG,MAAM;IAU/C,QAAQ,IAAI,MAAM;IAIlB,sHAAsH;IACtH,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,aAAa;CAItB;AAED
|
|
1
|
+
{"version":3,"file":"amount.d.ts","sourceRoot":"","sources":["../../src/core/amount.ts"],"names":[],"mappings":"AAmDA,+EAA+E;AAC/E,qBAAa,MAAM;IACjB,4GAA4G;IAC5G,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;;OAGG;gBACS,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAW/D;;;;;;;;;;OAUG;IACH,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAmB5D,yHAAyH;IACzH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,wCAAwC;IACxC,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,kCAAkC;IAClC,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,0CAA0C;IAC1C,MAAM,IAAI,MAAM;IAIhB,oCAAoC;IACpC,GAAG,IAAI,MAAM;IAIb;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAU1B,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI/B,uFAAuF;IACvF,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAKhC,wGAAwG;IACxG,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAI/B,iEAAiE;IACjE,eAAe,CAAC,gBAAgB,SAAM,GAAG,MAAM;IAU/C,QAAQ,IAAI,MAAM;IAIlB,sHAAsH;IACtH,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,aAAa;CAItB;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKxG"}
|
package/dist/core/amount.js
CHANGED
|
@@ -177,9 +177,12 @@ export class Amount {
|
|
|
177
177
|
/**
|
|
178
178
|
* `amount` as a credit (unchanged) or a debit (negated), by the bank's credit/debit `mark`.
|
|
179
179
|
*
|
|
180
|
-
* Throws `FormatError` for any other `mark`, `undefined` included: a missing mark must not be read as a credit.
|
|
180
|
+
* Throws `FormatError` for any other `mark`, `undefined` included: a missing mark must not be read as a credit. It does
|
|
181
|
+
* as well for a negative `amount`, whose sign the mark would turn: the mark alone gives the direction.
|
|
181
182
|
*/
|
|
182
183
|
export function withMark(amount, mark, credit, debit) {
|
|
184
|
+
if (amount.isNegative)
|
|
185
|
+
throw new FormatError('Negative amount with a credit/debit mark', amount.toString());
|
|
183
186
|
if (mark === credit)
|
|
184
187
|
return amount;
|
|
185
188
|
if (mark === debit)
|
package/dist/core/amount.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amount.js","sourceRoot":"","sources":["../../src/core/amount.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"amount.js","sourceRoot":"","sources":["../../src/core/amount.ts"],"names":[],"mappings":"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"}
|
package/dist/core/balance.d.ts
CHANGED
|
@@ -44,6 +44,7 @@ export declare class Balance {
|
|
|
44
44
|
readonly bookingTime: Date | undefined;
|
|
45
45
|
/** The bank's name for the account, for example `Girokonto`. */
|
|
46
46
|
readonly productName: string | undefined;
|
|
47
|
+
/** Takes copies of the dates of `init`: each balance has its own, which no other one shares. */
|
|
47
48
|
constructor(init: BalanceInit);
|
|
48
49
|
/**
|
|
49
50
|
* The account, as `Account.toString` shows it, and the date; no amount, so that logs and crash reports do not collect
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../src/core/balance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,kEAAkE;AAClE,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,IAAI,CAAC;IACjB,cAAc,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,WAAW,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAC/B,WAAW,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,+CAA+C;AAC/C,qBAAa,OAAO;IAClB,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;IAE1B,8GAA8G;IAC9G,QAAQ,CAAC,cAAc,EAAE,IAAI,GAAG,SAAS,CAAC;IAE1C,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAErC,gCAAgC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAExC,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvC,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,qDAAqD;IACrD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvC,oGAAoG;IACpG,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,SAAS,CAAC;IAEvC,+GAA+G;IAC/G,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,SAAS,CAAC;IAEvC,gEAAgE;IAChE,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../src/core/balance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,kEAAkE;AAClE,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,IAAI,CAAC;IACjB,cAAc,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,WAAW,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAC/B,WAAW,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,+CAA+C;AAC/C,qBAAa,OAAO;IAClB,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;IAE1B,8GAA8G;IAC9G,QAAQ,CAAC,cAAc,EAAE,IAAI,GAAG,SAAS,CAAC;IAE1C,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAErC,gCAAgC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAExC,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvC,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,qDAAqD;IACrD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvC,oGAAoG;IACpG,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,SAAS,CAAC;IAEvC,+GAA+G;IAC/G,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,SAAS,CAAC;IAEvC,gEAAgE;IAChE,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAEzC,gGAAgG;gBACpF,IAAI,EAAE,WAAW;IAe7B;;;OAGG;IACH,QAAQ,IAAI,MAAM;CAGnB"}
|
package/dist/core/balance.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { formatIsoDate } from '../util/dates.js';
|
|
1
|
+
import { copyDate, formatIsoDate } from '../util/dates.js';
|
|
2
2
|
/** Account balance as reported by the bank. */
|
|
3
3
|
export class Balance {
|
|
4
4
|
/** The account the balance belongs to. */
|
|
@@ -28,18 +28,19 @@ export class Balance {
|
|
|
28
28
|
bookingTime;
|
|
29
29
|
/** The bank's name for the account, for example `Girokonto`. */
|
|
30
30
|
productName;
|
|
31
|
+
/** Takes copies of the dates of `init`: each balance has its own, which no other one shares. */
|
|
31
32
|
constructor(init) {
|
|
32
33
|
this.account = init.account;
|
|
33
34
|
this.booked = init.booked;
|
|
34
|
-
this.bookedAsOf = init.bookedAsOf;
|
|
35
|
-
this.bookedAsOfTime = init.bookedAsOfTime;
|
|
35
|
+
this.bookedAsOf = copyDate(init.bookedAsOf);
|
|
36
|
+
this.bookedAsOfTime = copyDate(init.bookedAsOfTime);
|
|
36
37
|
this.pending = init.pending;
|
|
37
38
|
this.creditLine = init.creditLine;
|
|
38
39
|
this.available = init.available;
|
|
39
40
|
this.used = init.used;
|
|
40
41
|
this.overdraft = init.overdraft;
|
|
41
|
-
this.bookingDate = init.bookingDate;
|
|
42
|
-
this.bookingTime = init.bookingTime;
|
|
42
|
+
this.bookingDate = copyDate(init.bookingDate);
|
|
43
|
+
this.bookingTime = copyDate(init.bookingTime);
|
|
43
44
|
this.productName = init.productName;
|
|
44
45
|
}
|
|
45
46
|
/**
|