@coderoftime/fints 0.2.0 → 0.3.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.
Files changed (215) hide show
  1. package/CHANGELOG.md +377 -0
  2. package/README.md +31 -23
  3. package/dist/client.d.ts +3 -2
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +52 -9
  6. package/dist/client.js.map +1 -1
  7. package/dist/core/account.d.ts +15 -4
  8. package/dist/core/account.d.ts.map +1 -1
  9. package/dist/core/account.js +84 -36
  10. package/dist/core/account.js.map +1 -1
  11. package/dist/core/amount.d.ts +13 -3
  12. package/dist/core/amount.d.ts.map +1 -1
  13. package/dist/core/amount.js +42 -8
  14. package/dist/core/amount.js.map +1 -1
  15. package/dist/core/balance.d.ts +3 -0
  16. package/dist/core/balance.d.ts.map +1 -1
  17. package/dist/core/balance.js +5 -0
  18. package/dist/core/balance.js.map +1 -1
  19. package/dist/core/bank-info.d.ts +20 -3
  20. package/dist/core/bank-info.d.ts.map +1 -1
  21. package/dist/core/bank-info.js +25 -4
  22. package/dist/core/bank-info.js.map +1 -1
  23. package/dist/core/client.d.ts +42 -15
  24. package/dist/core/client.d.ts.map +1 -1
  25. package/dist/core/config.d.ts +15 -7
  26. package/dist/core/config.d.ts.map +1 -1
  27. package/dist/core/config.js +29 -14
  28. package/dist/core/config.js.map +1 -1
  29. package/dist/core/errors.d.ts +17 -5
  30. package/dist/core/errors.d.ts.map +1 -1
  31. package/dist/core/errors.js +25 -7
  32. package/dist/core/errors.js.map +1 -1
  33. package/dist/core/feedback.d.ts +7 -0
  34. package/dist/core/feedback.d.ts.map +1 -1
  35. package/dist/core/feedback.js +10 -1
  36. package/dist/core/feedback.js.map +1 -1
  37. package/dist/core/transaction.d.ts +5 -0
  38. package/dist/core/transaction.d.ts.map +1 -1
  39. package/dist/core/transaction.js +12 -0
  40. package/dist/core/transaction.js.map +1 -1
  41. package/dist/core/transport.d.ts +22 -7
  42. package/dist/core/transport.d.ts.map +1 -1
  43. package/dist/core/transport.js +51 -11
  44. package/dist/core/transport.js.map +1 -1
  45. package/dist/formats/camt.d.ts +7 -4
  46. package/dist/formats/camt.d.ts.map +1 -1
  47. package/dist/formats/camt.js +53 -54
  48. package/dist/formats/camt.js.map +1 -1
  49. package/dist/formats/mt940.d.ts +18 -6
  50. package/dist/formats/mt940.d.ts.map +1 -1
  51. package/dist/formats/mt940.js +83 -66
  52. package/dist/formats/mt940.js.map +1 -1
  53. package/dist/formats/readers.d.ts.map +1 -1
  54. package/dist/formats/readers.js +6 -2
  55. package/dist/formats/readers.js.map +1 -1
  56. package/dist/formats/sepa-purpose.d.ts +7 -4
  57. package/dist/formats/sepa-purpose.d.ts.map +1 -1
  58. package/dist/formats/sepa-purpose.js +18 -9
  59. package/dist/formats/sepa-purpose.js.map +1 -1
  60. package/dist/session/dialog-runner.d.ts +5 -2
  61. package/dist/session/dialog-runner.d.ts.map +1 -1
  62. package/dist/session/dialog-runner.js +23 -7
  63. package/dist/session/dialog-runner.js.map +1 -1
  64. package/dist/session/login-guard.d.ts +4 -4
  65. package/dist/session/login-guard.d.ts.map +1 -1
  66. package/dist/session/login-guard.js +29 -14
  67. package/dist/session/login-guard.js.map +1 -1
  68. package/dist/session/session-setup.d.ts +14 -5
  69. package/dist/session/session-setup.d.ts.map +1 -1
  70. package/dist/session/session-setup.js +30 -9
  71. package/dist/session/session-setup.js.map +1 -1
  72. package/dist/session/session-state.d.ts +4 -3
  73. package/dist/session/session-state.d.ts.map +1 -1
  74. package/dist/session/session-state.js +28 -9
  75. package/dist/session/session-state.js.map +1 -1
  76. package/dist/session/signed-dialog.d.ts +19 -13
  77. package/dist/session/signed-dialog.d.ts.map +1 -1
  78. package/dist/session/signed-dialog.js +45 -30
  79. package/dist/session/signed-dialog.js.map +1 -1
  80. package/dist/session/user-prompts.d.ts +6 -1
  81. package/dist/session/user-prompts.d.ts.map +1 -1
  82. package/dist/session/user-prompts.js +19 -4
  83. package/dist/session/user-prompts.js.map +1 -1
  84. package/dist/tan/challenge.d.ts +15 -13
  85. package/dist/tan/challenge.d.ts.map +1 -1
  86. package/dist/tan/challenge.js +32 -26
  87. package/dist/tan/challenge.js.map +1 -1
  88. package/dist/tan/flicker.d.ts +5 -1
  89. package/dist/tan/flicker.d.ts.map +1 -1
  90. package/dist/tan/flicker.js +42 -30
  91. package/dist/tan/flicker.js.map +1 -1
  92. package/dist/tan/tan-image.d.ts +4 -1
  93. package/dist/tan/tan-image.d.ts.map +1 -1
  94. package/dist/tan/tan-image.js +8 -2
  95. package/dist/tan/tan-image.js.map +1 -1
  96. package/dist/tan/tan-models.d.ts +9 -1
  97. package/dist/tan/tan-models.d.ts.map +1 -1
  98. package/dist/tan/tan-models.js +14 -2
  99. package/dist/tan/tan-models.js.map +1 -1
  100. package/dist/util/arguments.d.ts +13 -0
  101. package/dist/util/arguments.d.ts.map +1 -0
  102. package/dist/util/arguments.js +40 -0
  103. package/dist/util/arguments.js.map +1 -0
  104. package/dist/util/async.d.ts +4 -1
  105. package/dist/util/async.d.ts.map +1 -1
  106. package/dist/util/async.js +6 -3
  107. package/dist/util/async.js.map +1 -1
  108. package/dist/util/bytes.d.ts +1 -1
  109. package/dist/util/bytes.d.ts.map +1 -1
  110. package/dist/util/bytes.js +3 -3
  111. package/dist/util/bytes.js.map +1 -1
  112. package/dist/util/dates.d.ts +3 -10
  113. package/dist/util/dates.d.ts.map +1 -1
  114. package/dist/util/dates.js +49 -39
  115. package/dist/util/dates.js.map +1 -1
  116. package/dist/util/errors.d.ts +5 -3
  117. package/dist/util/errors.d.ts.map +1 -1
  118. package/dist/util/errors.js +8 -4
  119. package/dist/util/errors.js.map +1 -1
  120. package/dist/util/immutable-map.d.ts +5 -2
  121. package/dist/util/immutable-map.d.ts.map +1 -1
  122. package/dist/util/immutable-map.js +15 -12
  123. package/dist/util/immutable-map.js.map +1 -1
  124. package/dist/util/inspect.d.ts +11 -0
  125. package/dist/util/inspect.d.ts.map +1 -0
  126. package/dist/util/inspect.js +14 -0
  127. package/dist/util/inspect.js.map +1 -0
  128. package/dist/util/text.d.ts +18 -2
  129. package/dist/util/text.d.ts.map +1 -1
  130. package/dist/util/text.js +50 -5
  131. package/dist/util/text.js.map +1 -1
  132. package/dist/util/xml.d.ts +6 -4
  133. package/dist/util/xml.d.ts.map +1 -1
  134. package/dist/util/xml.js +106 -44
  135. package/dist/util/xml.js.map +1 -1
  136. package/dist/v3/bank-connection.d.ts +23 -3
  137. package/dist/v3/bank-connection.d.ts.map +1 -1
  138. package/dist/v3/bank-connection.js +66 -6
  139. package/dist/v3/bank-connection.js.map +1 -1
  140. package/dist/v3/dialog.d.ts +6 -2
  141. package/dist/v3/dialog.d.ts.map +1 -1
  142. package/dist/v3/dialog.js +20 -9
  143. package/dist/v3/dialog.js.map +1 -1
  144. package/dist/v3/message.d.ts +18 -10
  145. package/dist/v3/message.d.ts.map +1 -1
  146. package/dist/v3/message.js +92 -75
  147. package/dist/v3/message.js.map +1 -1
  148. package/dist/v3/parameter-store.d.ts +43 -7
  149. package/dist/v3/parameter-store.d.ts.map +1 -1
  150. package/dist/v3/parameter-store.js +69 -15
  151. package/dist/v3/parameter-store.js.map +1 -1
  152. package/dist/v3/parameters.d.ts +12 -11
  153. package/dist/v3/parameters.d.ts.map +1 -1
  154. package/dist/v3/parameters.js +57 -35
  155. package/dist/v3/parameters.js.map +1 -1
  156. package/dist/v3/protocol.d.ts +16 -9
  157. package/dist/v3/protocol.d.ts.map +1 -1
  158. package/dist/v3/protocol.js +57 -26
  159. package/dist/v3/protocol.js.map +1 -1
  160. package/dist/v3/queries.d.ts +2 -2
  161. package/dist/v3/queries.d.ts.map +1 -1
  162. package/dist/v3/queries.js +24 -16
  163. package/dist/v3/queries.js.map +1 -1
  164. package/dist/v3/segments.d.ts +18 -11
  165. package/dist/v3/segments.d.ts.map +1 -1
  166. package/dist/v3/segments.js +30 -21
  167. package/dist/v3/segments.js.map +1 -1
  168. package/dist/v3/syntax.d.ts +15 -11
  169. package/dist/v3/syntax.d.ts.map +1 -1
  170. package/dist/v3/syntax.js +30 -15
  171. package/dist/v3/syntax.js.map +1 -1
  172. package/package.json +1 -1
  173. package/src/client.ts +58 -17
  174. package/src/core/account.ts +91 -35
  175. package/src/core/amount.ts +42 -9
  176. package/src/core/balance.ts +6 -0
  177. package/src/core/bank-info.ts +28 -4
  178. package/src/core/client.ts +42 -15
  179. package/src/core/config.ts +37 -18
  180. package/src/core/errors.ts +27 -7
  181. package/src/core/feedback.ts +12 -1
  182. package/src/core/transaction.ts +13 -0
  183. package/src/core/transport.ts +62 -16
  184. package/src/formats/camt.ts +62 -51
  185. package/src/formats/mt940.ts +114 -78
  186. package/src/formats/readers.ts +6 -2
  187. package/src/formats/sepa-purpose.ts +17 -9
  188. package/src/session/dialog-runner.ts +34 -7
  189. package/src/session/login-guard.ts +29 -13
  190. package/src/session/session-setup.ts +27 -9
  191. package/src/session/session-state.ts +25 -8
  192. package/src/session/signed-dialog.ts +60 -30
  193. package/src/session/user-prompts.ts +28 -3
  194. package/src/tan/challenge.ts +50 -36
  195. package/src/tan/flicker.ts +40 -29
  196. package/src/tan/tan-image.ts +9 -2
  197. package/src/tan/tan-models.ts +16 -2
  198. package/src/util/arguments.ts +40 -0
  199. package/src/util/async.ts +10 -4
  200. package/src/util/bytes.ts +3 -3
  201. package/src/util/dates.ts +52 -38
  202. package/src/util/errors.ts +9 -4
  203. package/src/util/immutable-map.ts +15 -12
  204. package/src/util/inspect.ts +14 -0
  205. package/src/util/text.ts +47 -5
  206. package/src/util/xml.ts +105 -38
  207. package/src/v3/bank-connection.ts +65 -6
  208. package/src/v3/dialog.ts +18 -8
  209. package/src/v3/message.ts +81 -72
  210. package/src/v3/parameter-store.ts +82 -16
  211. package/src/v3/parameters.ts +68 -41
  212. package/src/v3/protocol.ts +61 -28
  213. package/src/v3/queries.ts +26 -18
  214. package/src/v3/segments.ts +32 -20
  215. package/src/v3/syntax.ts +31 -14
package/dist/client.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { Account } from './core/account.js';
1
2
  import { FinTsConfig, requirePin } from './core/config.js';
2
3
  import { FinTsStateError, FinTsUnsupportedError } from './core/errors.js';
3
4
  import { DialogRunner } from './session/dialog-runner.js';
@@ -8,6 +9,7 @@ import { restoreSession, saveSession } from './session/session-state.js';
8
9
  import { TanSelection } from './session/tan-selection.js';
9
10
  import { UserPrompts } from './session/user-prompts.js';
10
11
  import { TanMedium } from './tan/tan-models.js';
12
+ import { optionalString, requireString } from './util/arguments.js';
11
13
  import { SerialExecutor } from './util/async.js';
12
14
  import { CallContext } from './util/call-context.js';
13
15
  import { calendarDay, notAfterToday } from './util/dates.js';
@@ -17,6 +19,24 @@ import { FinTs3Protocol } from './v3/protocol.js';
17
19
  import { balanceQuery, tanMediaQuery, transactionsQuery } from './v3/queries.js';
18
20
  /** A token of the client call running now, so that a call from inside its callbacks is recognized. */
19
21
  const runningCalls = new CallContext();
22
+ /**
23
+ * `transport`, `undefined` for `null`; throws `TypeError` unless it is neither or has the functions of a
24
+ * `FinTsTransport`.
25
+ */
26
+ function optionalTransport(transport) {
27
+ if (transport === undefined || transport === null)
28
+ return undefined;
29
+ const candidate = transport;
30
+ if (typeof candidate.post !== 'function' || typeof candidate.close !== 'function') {
31
+ throw invalidArgument('Must have the functions post and close', 'transport');
32
+ }
33
+ return transport;
34
+ }
35
+ /** Throws `TypeError` for anything but an `Account`, such as one written to JSON and read back. */
36
+ function requireAccount(account) {
37
+ if (!(account instanceof Account))
38
+ throw invalidArgument('Must be an Account', 'account');
39
+ }
20
40
  /**
21
41
  * The calendar day of `bound`, the `name` bound of a `TransactionQuery`: the bank takes dates without time of day.
22
42
  * Throws `TypeError` for anything but a valid `Date`, such as an Invalid Date, which would go out as `0NaNNaNNaN`.
@@ -28,6 +48,17 @@ function requestedDay(bound, name) {
28
48
  throw invalidArgument('Not a valid Date', name);
29
49
  return calendarDay(bound);
30
50
  }
51
+ /**
52
+ * The format a `TransactionQuery` asks for with `format`: `auto` where it is `undefined`. Throws `TypeError` for anything
53
+ * but a `TransactionFormat`, such as `'CAMT'` or `null`.
54
+ */
55
+ function requestedFormat(format) {
56
+ if (format === undefined)
57
+ return 'auto';
58
+ if (format === 'auto' || format === 'mt940' || format === 'camt')
59
+ return format;
60
+ throw invalidArgument("Must be 'auto', 'mt940' or 'camt'", 'format');
61
+ }
31
62
  /** FinTS 3.0 PIN/TAN client, the version German banks use. */
32
63
  export class FinTs3Client {
33
64
  // A call such as `getBalance` runs through these parts:
@@ -65,15 +96,17 @@ export class FinTs3Client {
65
96
  *
66
97
  * Throws `TypeError` if the configuration is invalid, as the constructor of `FinTsConfig` tells, or the PIN is empty,
67
98
  * 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.
99
+ * non-Latin letters are not possible. Throws `TypeError` as well for an option of another type than
100
+ * `FinTsClientOptions` names, as `FinTsClientOptions` tells.
69
101
  */
70
102
  constructor(init) {
71
103
  const config = init.config instanceof FinTsConfig ? init.config : new FinTsConfig(init.config);
104
+ const { state, transport } = init.options;
72
105
  this.#prompts = new UserPrompts(init.options);
73
106
  this.#guard = new LoginGuard(requirePin(init.pin));
74
107
  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);
108
+ this.#protocol = new FinTs3Protocol(this.#parameters, this.#guard, optionalTransport(transport), this.#prompts.logger);
109
+ this.#sessionState = restoreSession(optionalString(state, 'state'), this.#parameters, this.#guard);
77
110
  this.#tans = new TanSelection(this.#protocol, this.#sessionState, this.#prompts);
78
111
  const session = {
79
112
  parameters: this.#parameters,
@@ -97,10 +130,13 @@ export class FinTs3Client {
97
130
  get selectedTanMedium() {
98
131
  return this.#sessionState.tanMedium;
99
132
  }
100
- selectTanMethod(securityFunction, tanMedium) {
133
+ async selectTanMethod(securityFunction, tanMedium) {
134
+ // Checked before the dialog ends; an async method, so that every argument error is a rejection.
135
+ const method = requireString(securityFunction, 'securityFunction');
136
+ const medium = optionalString(tanMedium, 'tanMedium');
101
137
  return this.#serialized(async () => {
102
138
  await this.#dialogs.end();
103
- this.#tans.select(securityFunction, tanMedium);
139
+ this.#tans.select(method, medium);
104
140
  });
105
141
  }
106
142
  clearLoginRefusal(pin) {
@@ -134,7 +170,9 @@ export class FinTs3Client {
134
170
  getAccounts() {
135
171
  return this.#serialized(() => this.#sepa.completedAccounts());
136
172
  }
137
- getBalance(account) {
173
+ async getBalance(account) {
174
+ // Checked before the call waits for others; an async method, so that every argument error is a rejection.
175
+ requireAccount(account);
138
176
  return this.#serialized(async () => {
139
177
  const completed = await this.#sepa.complete(account);
140
178
  // The dialog start delivers the user parameter data, which may carry the complete balance: then the client must
@@ -146,14 +184,16 @@ export class FinTs3Client {
146
184
  }
147
185
  async getTransactions(account, query = {}) {
148
186
  // Checked before the call waits for others; an async method, so that every argument error is a rejection.
187
+ requireAccount(account);
149
188
  const firstDay = requestedDay(query.from, 'from');
150
189
  const lastDay = requestedDay(query.to, 'to');
151
190
  if (firstDay !== undefined && lastDay !== undefined && firstDay.getTime() > lastDay.getTime()) {
152
191
  throw invalidArgument('`from` lies on a day after `to`', 'from');
153
192
  }
193
+ const format = requestedFormat(query.format);
154
194
  return this.#serialized(async () => {
155
195
  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)));
196
+ const transactions = await this.#dialogs.query(() => transactionsQuery(this.#parameters, completed, format, notAfterToday(firstDay), notAfterToday(lastDay)));
157
197
  // A stable sort, so that transactions of the same day keep the bank's order.
158
198
  return transactions.sort((a, b) => (a.bookingDate ?? a.valueDate).getTime() - (b.bookingDate ?? b.valueDate).getTime());
159
199
  });
@@ -185,9 +225,12 @@ export class FinTs3Client {
185
225
  const call = {};
186
226
  this.#runningCall = call;
187
227
  try {
188
- return await runningCalls.run(call, () => this.#guard.runCall(() => {
228
+ return await runningCalls.run(call, () => this.#guard.runCall(async () => {
229
+ this.#prompts.checkOpen();
230
+ const result = await this.#prompts.reportingCallbackErrors(action);
231
+ // Also where the last answer arrived after `close`: a closed client hands out no account data.
189
232
  this.#prompts.checkOpen();
190
- return this.#prompts.reportingCallbackErrors(action);
233
+ return result;
191
234
  }));
192
235
  }
193
236
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { inspectCustom } from '../util/inspect.js';
1
2
  /** Account kind derived from the FinTS account type code. */
2
3
  export type AccountCategory =
3
4
  /** Current account (type codes 1 to 9). */
@@ -88,7 +89,12 @@ export declare class Account {
88
89
  readonly allowedTransactionsComplete: boolean;
89
90
  /** What the bank tells about the data it holds for the account, where it does. */
90
91
  readonly dataStatus: AccountDataStatus | undefined;
91
- /** Takes copies of the permitted transactions and the data status of `init`, which no other account shares. */
92
+ /**
93
+ * Takes copies of the permitted transactions and the data status of `init`, which no other account shares.
94
+ *
95
+ * Throws `TypeError` for a detail of another type than `AccountInit` names, such as a number as `bankCode` or
96
+ * `accountNumber`, or a missing `bankCode`; `null` counts as a detail not given. The message leaves out the value.
97
+ */
92
98
  constructor(init: AccountInit);
93
99
  /** The kind of account, derived from `typeCode`. */
94
100
  get category(): AccountCategory;
@@ -107,17 +113,17 @@ export declare class Account {
107
113
  * collect account data.
108
114
  */
109
115
  toString(): string;
116
+ /** What Node.js's `util.inspect` and `console.log` show: `toString`, not the fields. */
117
+ [inspectCustom](): string;
110
118
  }
111
119
  /**
112
120
  * Accounts by IBAN and by national account, to find the first one an account `matches` without comparing it with each:
113
121
  * 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
122
  */
118
123
  export declare class AccountIndex {
119
124
  private readonly accounts;
120
125
  private readonly byIban;
126
+ /** By national account, under its bank and country code and under `null` for any of each, as `matches` takes them. */
121
127
  private readonly byNational;
122
128
  /** Those without IBAN only: an account with IBAN matches one with IBAN by that alone. */
123
129
  private readonly byNationalWithoutIban;
@@ -164,5 +170,10 @@ export declare class AccountDataStatus {
164
170
  get mt940TransactionsId(): string | undefined;
165
171
  /** The ID of the transactions the bank holds as camt, its entry for `HKCAZ` in `inventory`. */
166
172
  get camtTransactionsId(): string | undefined;
173
+ /**
174
+ * What Node.js's `util.inspect` and `console.log` show: the queries `inventory` holds an ID for, not the IDs, which
175
+ * mark the user's data.
176
+ */
177
+ [inspectCustom](): string;
167
178
  }
168
179
  //# sourceMappingURL=account.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/core/account.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/core/account.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,9 @@
1
+ import { optionalBoolean, optionalInteger, optionalString, requireString } from '../util/arguments.js';
1
2
  import { copyDate } from '../util/dates.js';
3
+ import { invalidArgument } from '../util/errors.js';
2
4
  import { ImmutableMap } from '../util/immutable-map.js';
5
+ import { inspectCustom } from '../util/inspect.js';
6
+ import { isString } from '../util/json.js';
3
7
  import { maskedId, nonBlank } from '../util/text.js';
4
8
  import { defaultCountryCode } from './config.js';
5
9
  const categoriesByTens = [
@@ -68,22 +72,28 @@ export class Account {
68
72
  allowedTransactionsComplete;
69
73
  /** What the bank tells about the data it holds for the account, where it does. */
70
74
  dataStatus;
71
- /** Takes copies of the permitted transactions and the data status of `init`, which no other account shares. */
75
+ /**
76
+ * Takes copies of the permitted transactions and the data status of `init`, which no other account shares.
77
+ *
78
+ * Throws `TypeError` for a detail of another type than `AccountInit` names, such as a number as `bankCode` or
79
+ * `accountNumber`, or a missing `bankCode`; `null` counts as a detail not given. The message leaves out the value.
80
+ */
72
81
  constructor(init) {
73
- this.accountNumber = init.accountNumber;
74
- this.subAccount = init.subAccount;
75
- this.bankCode = init.bankCode;
76
- this.countryCode = init.countryCode ?? defaultCountryCode;
77
- this.iban = electronicFormat(init.iban);
78
- this.bic = electronicFormat(init.bic);
79
- this.customerId = init.customerId;
80
- this.currency = init.currency;
81
- this.ownerName = init.ownerName;
82
- this.productName = init.productName;
83
- this.typeCode = init.typeCode;
84
- this.allowedTransactions = Object.freeze([...(init.allowedTransactions ?? [])]);
85
- this.allowedTransactionsComplete = init.allowedTransactionsComplete ?? false;
86
- this.dataStatus = init.dataStatus && new AccountDataStatus(init.dataStatus);
82
+ this.accountNumber = optionalString(init.accountNumber, 'accountNumber');
83
+ this.subAccount = optionalString(init.subAccount, 'subAccount');
84
+ this.bankCode = requireString(init.bankCode, 'bankCode');
85
+ this.countryCode = optionalString(init.countryCode, 'countryCode') ?? defaultCountryCode;
86
+ this.iban = electronicFormat(optionalString(init.iban, 'iban'));
87
+ this.bic = electronicFormat(optionalString(init.bic, 'bic'));
88
+ this.customerId = optionalString(init.customerId, 'customerId');
89
+ this.currency = optionalString(init.currency, 'currency');
90
+ this.ownerName = optionalString(init.ownerName, 'ownerName');
91
+ this.productName = optionalString(init.productName, 'productName');
92
+ this.typeCode = optionalInteger(init.typeCode, 'typeCode');
93
+ this.allowedTransactions = Object.freeze(segmentIds(init.allowedTransactions));
94
+ this.allowedTransactionsComplete =
95
+ optionalBoolean(init.allowedTransactionsComplete, 'allowedTransactionsComplete') ?? false;
96
+ this.dataStatus = copiedDataStatus(init.dataStatus);
87
97
  }
88
98
  /** The kind of account, derived from `typeCode`. */
89
99
  get category() {
@@ -137,12 +147,34 @@ export class Account {
137
147
  ];
138
148
  return `Account(${parts.join(', ')})`;
139
149
  }
150
+ /** What Node.js's `util.inspect` and `console.log` show: `toString`, not the fields. */
151
+ [inspectCustom]() {
152
+ return this.toString();
153
+ }
140
154
  }
141
155
  /**
142
- * An IBAN or BIC in the form the bank sends and compares, without blanks and in capitals; `undefined` for blanks only.
156
+ * An IBAN or BIC in the form the bank sends and compares, without blanks, U+0085 (NEL) among them, and in capitals;
157
+ * `undefined` for blanks only.
143
158
  */
144
159
  function electronicFormat(code) {
145
- return nonBlank(code?.replace(/\s/g, '').toUpperCase());
160
+ return nonBlank(code?.replace(/[\s\u0085]/g, '').toUpperCase());
161
+ }
162
+ /** A copy of `ids`, none for `undefined` or `null`; throws `TypeError` unless they are an array of strings. */
163
+ function segmentIds(ids) {
164
+ if (ids === undefined || ids === null)
165
+ return [];
166
+ if (!Array.isArray(ids) || !ids.every(isString)) {
167
+ throw invalidArgument('Must be an array of strings', 'allowedTransactions');
168
+ }
169
+ return [...ids];
170
+ }
171
+ /** A copy of `status`, none for `undefined` or `null`; throws `TypeError` unless it is an `AccountDataStatus`. */
172
+ function copiedDataStatus(status) {
173
+ if (status === undefined || status === null)
174
+ return undefined;
175
+ if (!(status instanceof AccountDataStatus))
176
+ throw invalidArgument('Must be an AccountDataStatus', 'dataStatus');
177
+ return new AccountDataStatus(status);
146
178
  }
147
179
  function sameOrUnstated(a, b) {
148
180
  return a === '' || b === '' || a === b;
@@ -154,45 +186,54 @@ function nationalNumber(account) {
154
186
  /**
155
187
  * Accounts by IBAN and by national account, to find the first one an account `matches` without comparing it with each:
156
188
  * 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
189
  */
161
190
  export class AccountIndex {
162
191
  accounts;
163
192
  byIban = new Map();
193
+ /** By national account, under its bank and country code and under `null` for any of each, as `matches` takes them. */
164
194
  byNational = new Map();
165
195
  /** Those without IBAN only: an account with IBAN matches one with IBAN by that alone. */
166
196
  byNationalWithoutIban = new Map();
167
197
  constructor(accounts) {
168
198
  this.accounts = accounts;
169
199
  accounts.forEach((account, i) => {
170
- const national = nationalKey(account);
171
200
  if (account.iban !== undefined)
172
201
  keepFirst(this.byIban, account.iban, i);
173
- if (national === undefined)
202
+ const number = nationalNumber(account);
203
+ if (number === undefined)
174
204
  return;
175
- keepFirst(this.byNational, national, i);
176
- if (account.iban === undefined)
177
- keepFirst(this.byNationalWithoutIban, national, i);
205
+ for (const bankCode of [account.bankCode, null]) {
206
+ for (const countryCode of [account.countryCode, null]) {
207
+ const national = nationalKey(number, account.subAccount, bankCode, countryCode);
208
+ keepFirst(this.byNational, national, i);
209
+ if (account.iban === undefined)
210
+ keepFirst(this.byNationalWithoutIban, national, i);
211
+ }
212
+ }
178
213
  });
179
214
  }
180
215
  /** The first of the accounts that `account` matches. */
181
216
  find(account) {
182
- const national = nationalKey(account);
217
+ const number = nationalNumber(account);
183
218
  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)];
219
+ const found = [account.iban === undefined ? undefined : this.byIban.get(account.iban)];
220
+ if (number !== undefined) {
221
+ for (const bankCode of codesMatching(account.bankCode)) {
222
+ for (const countryCode of codesMatching(account.countryCode)) {
223
+ found.push(byNational.get(nationalKey(number, account.subAccount, bankCode, countryCode)));
224
+ }
225
+ }
226
+ }
227
+ const positions = found.filter((i) => i !== undefined);
228
+ return positions.length === 0 ? undefined : this.accounts[Math.min(...positions)];
189
229
  }
190
230
  }
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]);
231
+ /** The keys of the codes that `code` matches: an empty one matches any, and a stated one also an empty one. */
232
+ function codesMatching(code) {
233
+ return code === '' ? [null] : [code, ''];
234
+ }
235
+ function nationalKey(number, subAccount, bankCode, countryCode) {
236
+ return JSON.stringify([number, subAccount ?? '', bankCode, countryCode]);
196
237
  }
197
238
  function keepFirst(index, key, position) {
198
239
  if (!index.has(key))
@@ -241,5 +282,12 @@ export class AccountDataStatus {
241
282
  get camtTransactionsId() {
242
283
  return this.inventory.get('HKCAZ');
243
284
  }
285
+ /**
286
+ * What Node.js's `util.inspect` and `console.log` show: the queries `inventory` holds an ID for, not the IDs, which
287
+ * mark the user's data.
288
+ */
289
+ [inspectCustom]() {
290
+ return `AccountDataStatus(${[...this.inventory.keys()].join(', ')})`;
291
+ }
244
292
  }
245
293
  //# sourceMappingURL=account.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/core/account.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/core/account.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { inspectCustom } from '../util/inspect.js';
1
2
  /** A money amount stored as an integer number of `scale`-digit minor units. */
2
3
  export declare class Amount {
3
4
  /** The amount in units of 10^-`scale` of the currency, negative for a debit: 1234 with scale 2 is 12.34. */
@@ -9,6 +10,8 @@ export declare class Amount {
9
10
  /**
10
11
  * An amount of `minorUnits` with `scale` decimal places; throws `RangeError` for a `scale` outside 0 to 5, and for
11
12
  * `minorUnits` that are no integer or beyond 2^53 - 1 in either direction, about 90 trillion at two decimal places.
13
+ * Throws `TypeError` for `minorUnits` or `scale` that are no number, such as `'1234'`, and a `currency` that is no
14
+ * string.
12
15
  */
13
16
  constructor(minorUnits: number, scale: number, currency: string);
14
17
  /**
@@ -19,8 +22,9 @@ export declare class Amount {
19
22
  * `JPY`, three for `KWD`. It has more where the value has more significant digits. So `100,` in `EUR` is `100.00`, in
20
23
  * `JPY` `100`.
21
24
  *
22
- * Throws `FormatError` for anything else, so that `1.234,56` in bank data is an error, not a guess, and for more than
23
- * five decimal places (trailing zeros aside) or more than 15 digits.
25
+ * Throws `FormatError` for anything else, so that `1.234,56` in bank data is an error, not a guess, for more than
26
+ * five decimal places (trailing zeros aside) or more than 15 digits, and for more than 64 characters, zeros included
27
+ * and surrounding blanks aside. Throws `TypeError` for a `value` or `currency` that is no string.
24
28
  */
25
29
  static parseDecimal(value: string, currency: string): Amount;
26
30
  /** The amount as a floating-point number, which cannot hold every decimal fraction exactly; do not calculate with it. */
@@ -47,12 +51,18 @@ export declare class Amount {
47
51
  /** Formats the amount without currency, for example `-12.50`. */
48
52
  toDecimalString(decimalSeparator?: string): string;
49
53
  toString(): string;
54
+ /** What Node.js's `util.inspect` and `console.log` show: `toString`, not the fields. */
55
+ [inspectCustom](): string;
50
56
  /** The minor units of both amounts at the larger scale, as `bigint`s, since the factor could leave the safe range. */
51
57
  private atCommonScale;
52
- private rescale;
53
58
  private compareValue;
54
59
  private checkCurrency;
55
60
  }
61
+ /**
62
+ * Whether `parts` are all in the currency of `total` and add up to exactly `total`; unlike `add`, also where a sum on
63
+ * the way lies beyond what an amount holds.
64
+ */
65
+ export declare function addsUpTo(parts: readonly Amount[], total: Amount): boolean;
56
66
  /**
57
67
  * `amount` as a credit (unchanged) or a debit (negated), by the bank's credit/debit `mark`.
58
68
  *
@@ -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;;;;;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"}
1
+ {"version":3,"file":"amount.d.ts","sourceRoot":"","sources":["../../src/core/amount.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAuDnD,+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;;;;;OAKG;gBACS,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAc/D;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAsB5D,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,wFAAwF;IACxF,CAAC,aAAa,CAAC,IAAI,MAAM;IAIzB,sHAAsH;IACtH,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,aAAa;CAItB;AAMD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAOzE;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"}
@@ -1,4 +1,7 @@
1
- import { FormatError } from '../util/errors.js';
1
+ import { requireString } from '../util/arguments.js';
2
+ import { FormatError, invalidArgument } from '../util/errors.js';
3
+ import { inspectCustom } from '../util/inspect.js';
4
+ import { trimBlanks } from '../util/text.js';
2
5
  /** Most decimal places an amount has: ISO 20022, the widest of the bank formats, allows five. */
3
6
  const maxScale = 5;
4
7
  /** Largest `minorUnits` an amount holds: 2^53 - 1, which JavaScript numbers represent exactly. */
@@ -6,6 +9,8 @@ const maxMinorUnits = Number.MAX_SAFE_INTEGER;
6
9
  const powersOfTen = [1, 10, 100, 1000, 10000, 100000];
7
10
  /** Most digits a parsed amount has: few enough that the sum of two parsed amounts still fits. */
8
11
  const maxDigits = 15;
12
+ /** Most characters a parsed value has: room for the zeros banks pad amounts with besides `maxDigits` digits. */
13
+ const maxLength = 64;
9
14
  const decimal = /^([+-]?)(\d*)(?:[.,](\d*))?$/;
10
15
  /** Decimal places of the minor unit of `currency` (ISO 4217): two, except for the currencies listed here. */
11
16
  function minorUnitDigits(currency) {
@@ -54,8 +59,15 @@ export class Amount {
54
59
  /**
55
60
  * An amount of `minorUnits` with `scale` decimal places; throws `RangeError` for a `scale` outside 0 to 5, and for
56
61
  * `minorUnits` that are no integer or beyond 2^53 - 1 in either direction, about 90 trillion at two decimal places.
62
+ * Throws `TypeError` for `minorUnits` or `scale` that are no number, such as `'1234'`, and a `currency` that is no
63
+ * string.
57
64
  */
58
65
  constructor(minorUnits, scale, currency) {
66
+ if (typeof minorUnits !== 'number')
67
+ throw invalidArgument('Must be a number', 'minorUnits');
68
+ if (typeof scale !== 'number')
69
+ throw invalidArgument('Must be a number', 'scale');
70
+ requireString(currency, 'currency');
59
71
  if (!Number.isInteger(scale) || scale < 0 || scale > maxScale) {
60
72
  throw new RangeError(`scale must be an integer from 0 to ${maxScale}: ${scale}`);
61
73
  }
@@ -74,11 +86,16 @@ export class Amount {
74
86
  * `JPY`, three for `KWD`. It has more where the value has more significant digits. So `100,` in `EUR` is `100.00`, in
75
87
  * `JPY` `100`.
76
88
  *
77
- * Throws `FormatError` for anything else, so that `1.234,56` in bank data is an error, not a guess, and for more than
78
- * five decimal places (trailing zeros aside) or more than 15 digits.
89
+ * Throws `FormatError` for anything else, so that `1.234,56` in bank data is an error, not a guess, for more than
90
+ * five decimal places (trailing zeros aside) or more than 15 digits, and for more than 64 characters, zeros included
91
+ * and surrounding blanks aside. Throws `TypeError` for a `value` or `currency` that is no string.
79
92
  */
80
93
  static parseDecimal(value, currency) {
81
- const match = decimal.exec(value.trim());
94
+ const trimmed = trimBlanks(requireString(value, 'value'));
95
+ requireString(currency, 'currency');
96
+ if (trimmed.length > maxLength)
97
+ throw new FormatError(`Amount longer than ${maxLength} characters`, value);
98
+ const match = decimal.exec(trimmed);
82
99
  const whole = match?.[2] ?? '';
83
100
  let fraction = match?.[3] ?? '';
84
101
  if (!match || (whole === '' && fraction === ''))
@@ -155,13 +172,14 @@ export class Amount {
155
172
  toString() {
156
173
  return `${this.toDecimalString()} ${this.currency}`;
157
174
  }
175
+ /** What Node.js's `util.inspect` and `console.log` show: `toString`, not the fields. */
176
+ [inspectCustom]() {
177
+ return this.toString();
178
+ }
158
179
  /** The minor units of both amounts at the larger scale, as `bigint`s, since the factor could leave the safe range. */
159
180
  atCommonScale(other) {
160
181
  const target = Math.max(this.scale, other.scale);
161
- return [this.rescale(target), other.rescale(target)];
162
- }
163
- rescale(target) {
164
- return BigInt(this.minorUnits) * BigInt(powersOfTen[target - this.scale]);
182
+ return [unitsAtScale(this, target), unitsAtScale(other, target)];
165
183
  }
166
184
  compareValue(other) {
167
185
  if (this.scale === other.scale)
@@ -174,6 +192,22 @@ export class Amount {
174
192
  throw new TypeError(`Currency mismatch: ${this.currency} vs ${other.currency}`);
175
193
  }
176
194
  }
195
+ function unitsAtScale(amount, scale) {
196
+ return BigInt(amount.minorUnits) * BigInt(powersOfTen[scale - amount.scale]);
197
+ }
198
+ /**
199
+ * Whether `parts` are all in the currency of `total` and add up to exactly `total`; unlike `add`, also where a sum on
200
+ * the way lies beyond what an amount holds.
201
+ */
202
+ export function addsUpTo(parts, total) {
203
+ let sum = 0n;
204
+ for (const part of parts) {
205
+ if (part.currency !== total.currency)
206
+ return false;
207
+ sum += unitsAtScale(part, maxScale);
208
+ }
209
+ return sum === unitsAtScale(total, maxScale);
210
+ }
177
211
  /**
178
212
  * `amount` as a credit (unchanged) or a debit (negated), by the bank's credit/debit `mark`.
179
213
  *