@coderoftime/fints 0.0.0-stage → 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.
Files changed (249) hide show
  1. package/CHANGELOG.md +152 -0
  2. package/LICENSE +28 -0
  3. package/README.md +246 -2
  4. package/dist/client.d.ts +48 -0
  5. package/dist/client.d.ts.map +1 -0
  6. package/dist/client.js +199 -0
  7. package/dist/client.js.map +1 -0
  8. package/dist/core/account.d.ts +168 -0
  9. package/dist/core/account.d.ts.map +1 -0
  10. package/dist/core/account.js +245 -0
  11. package/dist/core/account.js.map +1 -0
  12. package/dist/core/amount.d.ts +63 -0
  13. package/dist/core/amount.d.ts.map +1 -0
  14. package/dist/core/amount.js +192 -0
  15. package/dist/core/amount.js.map +1 -0
  16. package/dist/core/balance.d.ts +55 -0
  17. package/dist/core/balance.d.ts.map +1 -0
  18. package/dist/core/balance.js +54 -0
  19. package/dist/core/balance.js.map +1 -0
  20. package/dist/core/bank-info.d.ts +49 -0
  21. package/dist/core/bank-info.d.ts.map +1 -0
  22. package/dist/core/bank-info.js +52 -0
  23. package/dist/core/bank-info.js.map +1 -0
  24. package/dist/core/client.d.ts +161 -0
  25. package/dist/core/client.d.ts.map +1 -0
  26. package/dist/core/client.js +2 -0
  27. package/dist/core/client.js.map +1 -0
  28. package/dist/core/config.d.ts +80 -0
  29. package/dist/core/config.d.ts.map +1 -0
  30. package/dist/core/config.js +153 -0
  31. package/dist/core/config.js.map +1 -0
  32. package/dist/core/errors.d.ts +153 -0
  33. package/dist/core/errors.d.ts.map +1 -0
  34. package/dist/core/errors.js +247 -0
  35. package/dist/core/errors.js.map +1 -0
  36. package/dist/core/feedback.d.ts +72 -0
  37. package/dist/core/feedback.d.ts.map +1 -0
  38. package/dist/core/feedback.js +127 -0
  39. package/dist/core/feedback.js.map +1 -0
  40. package/dist/core/transaction.d.ts +103 -0
  41. package/dist/core/transaction.d.ts.map +1 -0
  42. package/dist/core/transaction.js +96 -0
  43. package/dist/core/transaction.js.map +1 -0
  44. package/dist/core/transport.d.ts +64 -0
  45. package/dist/core/transport.d.ts.map +1 -0
  46. package/dist/core/transport.js +149 -0
  47. package/dist/core/transport.js.map +1 -0
  48. package/dist/formats/camt.d.ts +32 -0
  49. package/dist/formats/camt.d.ts.map +1 -0
  50. package/dist/formats/camt.js +242 -0
  51. package/dist/formats/camt.js.map +1 -0
  52. package/dist/formats/mt940.d.ts +54 -0
  53. package/dist/formats/mt940.d.ts.map +1 -0
  54. package/dist/formats/mt940.js +376 -0
  55. package/dist/formats/mt940.js.map +1 -0
  56. package/dist/formats/readers.d.ts +15 -0
  57. package/dist/formats/readers.d.ts.map +1 -0
  58. package/dist/formats/readers.js +42 -0
  59. package/dist/formats/readers.js.map +1 -0
  60. package/dist/formats/record-budget.d.ts +7 -0
  61. package/dist/formats/record-budget.d.ts.map +1 -0
  62. package/dist/formats/record-budget.js +17 -0
  63. package/dist/formats/record-budget.js.map +1 -0
  64. package/dist/formats/sepa-purpose.d.ts +28 -0
  65. package/dist/formats/sepa-purpose.d.ts.map +1 -0
  66. package/dist/formats/sepa-purpose.js +89 -0
  67. package/dist/formats/sepa-purpose.js.map +1 -0
  68. package/dist/index.d.ts +28 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +27 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/session/app-approval.d.ts +66 -0
  73. package/dist/session/app-approval.d.ts.map +1 -0
  74. package/dist/session/app-approval.js +226 -0
  75. package/dist/session/app-approval.js.map +1 -0
  76. package/dist/session/dialog-runner.d.ts +31 -0
  77. package/dist/session/dialog-runner.d.ts.map +1 -0
  78. package/dist/session/dialog-runner.js +111 -0
  79. package/dist/session/dialog-runner.js.map +1 -0
  80. package/dist/session/login-guard.d.ts +78 -0
  81. package/dist/session/login-guard.d.ts.map +1 -0
  82. package/dist/session/login-guard.js +181 -0
  83. package/dist/session/login-guard.js.map +1 -0
  84. package/dist/session/sepa-accounts.d.ts +40 -0
  85. package/dist/session/sepa-accounts.d.ts.map +1 -0
  86. package/dist/session/sepa-accounts.js +112 -0
  87. package/dist/session/sepa-accounts.js.map +1 -0
  88. package/dist/session/session-setup.d.ts +80 -0
  89. package/dist/session/session-setup.d.ts.map +1 -0
  90. package/dist/session/session-setup.js +182 -0
  91. package/dist/session/session-setup.js.map +1 -0
  92. package/dist/session/session-state.d.ts +50 -0
  93. package/dist/session/session-state.d.ts.map +1 -0
  94. package/dist/session/session-state.js +182 -0
  95. package/dist/session/session-state.js.map +1 -0
  96. package/dist/session/signed-dialog.d.ts +77 -0
  97. package/dist/session/signed-dialog.d.ts.map +1 -0
  98. package/dist/session/signed-dialog.js +170 -0
  99. package/dist/session/signed-dialog.js.map +1 -0
  100. package/dist/session/tan-selection.d.ts +96 -0
  101. package/dist/session/tan-selection.d.ts.map +1 -0
  102. package/dist/session/tan-selection.js +189 -0
  103. package/dist/session/tan-selection.js.map +1 -0
  104. package/dist/session/user-prompts.d.ts +65 -0
  105. package/dist/session/user-prompts.d.ts.map +1 -0
  106. package/dist/session/user-prompts.js +184 -0
  107. package/dist/session/user-prompts.js.map +1 -0
  108. package/dist/tan/challenge.d.ts +135 -0
  109. package/dist/tan/challenge.d.ts.map +1 -0
  110. package/dist/tan/challenge.js +184 -0
  111. package/dist/tan/challenge.js.map +1 -0
  112. package/dist/tan/flicker.d.ts +42 -0
  113. package/dist/tan/flicker.d.ts.map +1 -0
  114. package/dist/tan/flicker.js +296 -0
  115. package/dist/tan/flicker.js.map +1 -0
  116. package/dist/tan/tan-image.d.ts +22 -0
  117. package/dist/tan/tan-image.d.ts.map +1 -0
  118. package/dist/tan/tan-image.js +43 -0
  119. package/dist/tan/tan-image.js.map +1 -0
  120. package/dist/tan/tan-models.d.ts +149 -0
  121. package/dist/tan/tan-models.d.ts.map +1 -0
  122. package/dist/tan/tan-models.js +153 -0
  123. package/dist/tan/tan-models.js.map +1 -0
  124. package/dist/util/async.d.ts +22 -0
  125. package/dist/util/async.d.ts.map +1 -0
  126. package/dist/util/async.js +45 -0
  127. package/dist/util/async.js.map +1 -0
  128. package/dist/util/bytes.d.ts +22 -0
  129. package/dist/util/bytes.d.ts.map +1 -0
  130. package/dist/util/bytes.js +128 -0
  131. package/dist/util/bytes.js.map +1 -0
  132. package/dist/util/call-context.d.ts +12 -0
  133. package/dist/util/call-context.d.ts.map +1 -0
  134. package/dist/util/call-context.js +30 -0
  135. package/dist/util/call-context.js.map +1 -0
  136. package/dist/util/dates.d.ts +55 -0
  137. package/dist/util/dates.d.ts.map +1 -0
  138. package/dist/util/dates.js +189 -0
  139. package/dist/util/dates.js.map +1 -0
  140. package/dist/util/errors.d.ts +17 -0
  141. package/dist/util/errors.d.ts.map +1 -0
  142. package/dist/util/errors.js +24 -0
  143. package/dist/util/errors.js.map +1 -0
  144. package/dist/util/immutable-map.d.ts +16 -0
  145. package/dist/util/immutable-map.d.ts.map +1 -0
  146. package/dist/util/immutable-map.js +38 -0
  147. package/dist/util/immutable-map.js.map +1 -0
  148. package/dist/util/json.d.ts +17 -0
  149. package/dist/util/json.d.ts.map +1 -0
  150. package/dist/util/json.js +62 -0
  151. package/dist/util/json.js.map +1 -0
  152. package/dist/util/text.d.ts +37 -0
  153. package/dist/util/text.d.ts.map +1 -0
  154. package/dist/util/text.js +107 -0
  155. package/dist/util/text.js.map +1 -0
  156. package/dist/util/xml.d.ts +36 -0
  157. package/dist/util/xml.d.ts.map +1 -0
  158. package/dist/util/xml.js +194 -0
  159. package/dist/util/xml.js.map +1 -0
  160. package/dist/v3/account-extension.d.ts +25 -0
  161. package/dist/v3/account-extension.d.ts.map +1 -0
  162. package/dist/v3/account-extension.js +173 -0
  163. package/dist/v3/account-extension.js.map +1 -0
  164. package/dist/v3/bank-connection.d.ts +34 -0
  165. package/dist/v3/bank-connection.d.ts.map +1 -0
  166. package/dist/v3/bank-connection.js +58 -0
  167. package/dist/v3/bank-connection.js.map +1 -0
  168. package/dist/v3/dialog.d.ts +112 -0
  169. package/dist/v3/dialog.d.ts.map +1 -0
  170. package/dist/v3/dialog.js +241 -0
  171. package/dist/v3/dialog.js.map +1 -0
  172. package/dist/v3/message.d.ts +85 -0
  173. package/dist/v3/message.d.ts.map +1 -0
  174. package/dist/v3/message.js +303 -0
  175. package/dist/v3/message.js.map +1 -0
  176. package/dist/v3/parameter-store.d.ts +75 -0
  177. package/dist/v3/parameter-store.d.ts.map +1 -0
  178. package/dist/v3/parameter-store.js +143 -0
  179. package/dist/v3/parameter-store.js.map +1 -0
  180. package/dist/v3/parameters.d.ts +105 -0
  181. package/dist/v3/parameters.d.ts.map +1 -0
  182. package/dist/v3/parameters.js +450 -0
  183. package/dist/v3/parameters.js.map +1 -0
  184. package/dist/v3/protocol.d.ts +61 -0
  185. package/dist/v3/protocol.d.ts.map +1 -0
  186. package/dist/v3/protocol.js +113 -0
  187. package/dist/v3/protocol.js.map +1 -0
  188. package/dist/v3/queries.d.ts +51 -0
  189. package/dist/v3/queries.d.ts.map +1 -0
  190. package/dist/v3/queries.js +120 -0
  191. package/dist/v3/queries.js.map +1 -0
  192. package/dist/v3/segments.d.ts +106 -0
  193. package/dist/v3/segments.d.ts.map +1 -0
  194. package/dist/v3/segments.js +325 -0
  195. package/dist/v3/segments.js.map +1 -0
  196. package/dist/v3/syntax.d.ts +127 -0
  197. package/dist/v3/syntax.d.ts.map +1 -0
  198. package/dist/v3/syntax.js +367 -0
  199. package/dist/v3/syntax.js.map +1 -0
  200. package/package.json +67 -4
  201. package/src/client.ts +252 -0
  202. package/src/core/account.ts +323 -0
  203. package/src/core/amount.ts +211 -0
  204. package/src/core/balance.ts +85 -0
  205. package/src/core/bank-info.ts +66 -0
  206. package/src/core/client.ts +186 -0
  207. package/src/core/config.ts +182 -0
  208. package/src/core/errors.ts +277 -0
  209. package/src/core/feedback.ts +140 -0
  210. package/src/core/transaction.ts +161 -0
  211. package/src/core/transport.ts +189 -0
  212. package/src/formats/camt.ts +266 -0
  213. package/src/formats/mt940.ts +419 -0
  214. package/src/formats/readers.ts +49 -0
  215. package/src/formats/record-budget.ts +18 -0
  216. package/src/formats/sepa-purpose.ts +94 -0
  217. package/src/index.ts +70 -0
  218. package/src/session/app-approval.ts +278 -0
  219. package/src/session/dialog-runner.ts +122 -0
  220. package/src/session/login-guard.ts +221 -0
  221. package/src/session/sepa-accounts.ts +115 -0
  222. package/src/session/session-setup.ts +184 -0
  223. package/src/session/session-state.ts +204 -0
  224. package/src/session/signed-dialog.ts +192 -0
  225. package/src/session/tan-selection.ts +203 -0
  226. package/src/session/user-prompts.ts +193 -0
  227. package/src/tan/challenge.ts +261 -0
  228. package/src/tan/flicker.ts +308 -0
  229. package/src/tan/tan-image.ts +38 -0
  230. package/src/tan/tan-models.ts +252 -0
  231. package/src/util/async.ts +48 -0
  232. package/src/util/bytes.ts +129 -0
  233. package/src/util/call-context.ts +41 -0
  234. package/src/util/dates.ts +210 -0
  235. package/src/util/errors.ts +27 -0
  236. package/src/util/immutable-map.ts +47 -0
  237. package/src/util/json.ts +67 -0
  238. package/src/util/text.ts +112 -0
  239. package/src/util/xml.ts +183 -0
  240. package/src/v3/account-extension.ts +185 -0
  241. package/src/v3/bank-connection.ts +67 -0
  242. package/src/v3/dialog.ts +283 -0
  243. package/src/v3/message.ts +373 -0
  244. package/src/v3/parameter-store.ts +160 -0
  245. package/src/v3/parameters.ts +524 -0
  246. package/src/v3/protocol.ts +148 -0
  247. package/src/v3/queries.ts +190 -0
  248. package/src/v3/segments.ts +374 -0
  249. package/src/v3/syntax.ts +369 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segments.js","sourceRoot":"","sources":["../../src/v3/segments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * One (group) data element of a received segment: text or binary data, from `start` to `end` in `source`. A view or
3
+ * copy of its own would take more memory than most elements hold.
4
+ */
5
+ export declare class DataElement {
6
+ private readonly source;
7
+ private readonly start;
8
+ private readonly end;
9
+ readonly isBinary: boolean;
10
+ /** Whether the text holds escape characters, which `bytes` leaves out. */
11
+ private readonly escaped;
12
+ private decoded;
13
+ constructor(source: Uint8Array, start: number, end: number, isBinary: boolean,
14
+ /** Whether the text holds escape characters, which `bytes` leaves out. */
15
+ escaped?: boolean);
16
+ /** The binary data, or the text without escape characters. */
17
+ get bytes(): Uint8Array;
18
+ get isEmpty(): boolean;
19
+ get text(): string;
20
+ }
21
+ /**
22
+ * A received segment: data elements separated by `+`, each a group of elements separated by `:`.
23
+ *
24
+ * Index 0 is the segment header (type, number, version, reference); the data elements follow from index 1.
25
+ */
26
+ export declare class Segment {
27
+ readonly elements: readonly (readonly DataElement[])[];
28
+ /** The bytes the segment was read from: `start` to `end` in `source`, terminator included. */
29
+ private readonly source;
30
+ private readonly start;
31
+ private readonly end;
32
+ constructor(elements: readonly (readonly DataElement[])[],
33
+ /** The bytes the segment was read from: `start` to `end` in `source`, terminator included. */
34
+ source: Uint8Array, start: number, end: number);
35
+ get type(): string;
36
+ get version(): number;
37
+ get length(): number;
38
+ group(index: number): readonly DataElement[];
39
+ element(index: number, sub?: number): DataElement | undefined;
40
+ text(index: number, sub?: number): string | undefined;
41
+ /** The binary data at `index`; `undefined` for an element that holds text. */
42
+ binary(index: number, sub?: number): Uint8Array | undefined;
43
+ /**
44
+ * The element at `index` as the bank sent it, for a value the client sends back, such as the dialog ID: untrimmed,
45
+ * and one character per byte (ISO 8859-1, the FinTS 3.0 character set), so that `Verbatim` gives the bank back the
46
+ * very bytes it sent, in whatever encoding. `undefined` for an empty element.
47
+ */
48
+ verbatim(index: number, sub?: number): string | undefined;
49
+ integer(index: number, sub?: number): number | undefined;
50
+ /** The texts of the group at `index`; `undefined` for empty elements. */
51
+ texts(index: number): (string | undefined)[];
52
+ /** The bytes the segment was read from, as the bank sent them, terminator included. */
53
+ encode(): Uint8Array;
54
+ }
55
+ /**
56
+ * Encodes `value` in ISO 8859-1, the FinTS 3.0 character set, or in UTF-8 where it does not fit: such text can only
57
+ * come from a bank that sends UTF-8, such as a TAN medium named `Max’s iPhone`. `FinTsConfig` checks the login data for
58
+ * ISO 8859-1 up front, and the client the PIN and the TAN.
59
+ *
60
+ * @internal Exported for the tests.
61
+ */
62
+ export declare function encodeText(value: string): Uint8Array;
63
+ /**
64
+ * The data elements one message may hold, segment headers and group elements included: several times what the
65
+ * parameter data of a user with hundreds of accounts take, and few enough that a hostile message cannot exhaust the
66
+ * memory, at about `dataElementMemory` bytes each.
67
+ */
68
+ export declare const maxDataElements = 200000;
69
+ /**
70
+ * The memory a data element of a received message takes, in bytes, with its share of the segment and of a return code:
71
+ * about this much in V8, however few bytes of the message it is made of.
72
+ */
73
+ export declare const dataElementMemory = 256;
74
+ /**
75
+ * Splits a FinTS 3.0 message into segments, resolving escapes and binary data (`@length@bytes`).
76
+ *
77
+ * The elements share the memory of `data`. Throws `FormatError` for anything a complete message cannot hold: a
78
+ * malformed binary length, binary data beyond the end of `data` or not followed by a separator, a last segment without
79
+ * terminator, and more elements than `budget` has left, which parses of the same message share.
80
+ */
81
+ export declare function parseSegments(data: Uint8Array, budget?: {
82
+ elements: number;
83
+ }): Segment[];
84
+ /** Binary data in a segment to send, written as `@length@bytes`. */
85
+ export declare class Binary {
86
+ readonly bytes: Uint8Array;
87
+ constructor(bytes: Uint8Array);
88
+ }
89
+ /**
90
+ * A value the bank issued, such as the dialog ID, to send back as `Segment.verbatim` reads it: escaped, but not
91
+ * trimmed, so that the bank gets back the very bytes it sent. Text from elsewhere, such as a TAN medium name the app
92
+ * passes, goes out as `encodeText` encodes it.
93
+ */
94
+ export declare class Verbatim {
95
+ readonly text: string;
96
+ constructor(text: string);
97
+ /** `text` as a `Verbatim`; `undefined` stays empty. */
98
+ static of(text: string | undefined): Verbatim | undefined;
99
+ }
100
+ /** A value of a segment to send; see `SegmentSpec`. */
101
+ export type SegmentValue = string | number | boolean | Binary | Verbatim | null | undefined | readonly SegmentValue[];
102
+ /**
103
+ * A segment to send.
104
+ *
105
+ * `elements` holds the data elements after the header: `null` or `undefined` for an empty element, an array for a data
106
+ * element group, a boolean for `J`/`N`, `Binary` for binary data, `Verbatim` for a value the bank issued, and anything
107
+ * else as its text, without leading and trailing blanks. Trailing empty elements are left out, as the specification
108
+ * asks.
109
+ */
110
+ export declare class SegmentSpec {
111
+ readonly type: string;
112
+ readonly version: number;
113
+ readonly elements: readonly SegmentValue[];
114
+ /** The number of the segment an answer refers to (Bezugssegment); requests have none. */
115
+ readonly reference?: number | undefined;
116
+ constructor(type: string, version: number, elements: readonly SegmentValue[],
117
+ /** The number of the segment an answer refers to (Bezugssegment); requests have none. */
118
+ reference?: number | undefined);
119
+ /**
120
+ * A segment given by the field numbers of its data elements, as in the specification (1 is the first data element
121
+ * after the header); missing numbers stay empty.
122
+ */
123
+ static numbered(type: string, version: number, fields: Readonly<Record<number, SegmentValue>>): SegmentSpec;
124
+ /** Encodes the segment with `number`. */
125
+ build(number: number): Uint8Array;
126
+ }
127
+ //# sourceMappingURL=syntax.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntax.d.ts","sourceRoot":"","sources":["../../src/v3/syntax.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,367 @@
1
+ // Internal to the package, and named after the FinTS specification. Documentation is where the meaning is not evident.
2
+ import { BytesBuilder, latin1Decode, latin1Encode, utf8Encode } from '../util/bytes.js';
3
+ import { FormatError } from '../util/errors.js';
4
+ import { decodeBankText, isLatin1, tryParseInt } from '../util/text.js';
5
+ // FinTS 3.0 syntax characters.
6
+ const dataElementSeparator = 0x2b; // '+'
7
+ const groupElementSeparator = 0x3a; // ':'
8
+ const segmentTerminator = 0x27; // "'"
9
+ const escapeCharacter = 0x3f; // '?'
10
+ const binaryMarker = 0x40; // '@'
11
+ function isSyntaxCharacter(byte) {
12
+ return (byte === dataElementSeparator ||
13
+ byte === groupElementSeparator ||
14
+ byte === segmentTerminator ||
15
+ byte === escapeCharacter ||
16
+ byte === binaryMarker);
17
+ }
18
+ /**
19
+ * One (group) data element of a received segment: text or binary data, from `start` to `end` in `source`. A view or
20
+ * copy of its own would take more memory than most elements hold.
21
+ */
22
+ export class DataElement {
23
+ source;
24
+ start;
25
+ end;
26
+ isBinary;
27
+ escaped;
28
+ decoded;
29
+ constructor(source, start, end, isBinary,
30
+ /** Whether the text holds escape characters, which `bytes` leaves out. */
31
+ escaped = false) {
32
+ this.source = source;
33
+ this.start = start;
34
+ this.end = end;
35
+ this.isBinary = isBinary;
36
+ this.escaped = escaped;
37
+ }
38
+ /** The binary data, or the text without escape characters. */
39
+ get bytes() {
40
+ const bytes = this.source.subarray(this.start, this.end);
41
+ return this.escaped ? unescape(bytes) : bytes;
42
+ }
43
+ get isEmpty() {
44
+ return !this.isBinary && this.start === this.end;
45
+ }
46
+ get text() {
47
+ this.decoded ??= decodeBankText(this.bytes);
48
+ return this.decoded;
49
+ }
50
+ }
51
+ /**
52
+ * A received segment: data elements separated by `+`, each a group of elements separated by `:`.
53
+ *
54
+ * Index 0 is the segment header (type, number, version, reference); the data elements follow from index 1.
55
+ */
56
+ export class Segment {
57
+ elements;
58
+ source;
59
+ start;
60
+ end;
61
+ constructor(elements,
62
+ /** The bytes the segment was read from: `start` to `end` in `source`, terminator included. */
63
+ source, start, end) {
64
+ this.elements = elements;
65
+ this.source = source;
66
+ this.start = start;
67
+ this.end = end;
68
+ }
69
+ get type() {
70
+ return this.text(0)?.trim() ?? '';
71
+ }
72
+ get version() {
73
+ return this.integer(0, 2) ?? 0;
74
+ }
75
+ get length() {
76
+ return this.elements.length;
77
+ }
78
+ group(index) {
79
+ return this.elements[index] ?? [];
80
+ }
81
+ element(index, sub = 0) {
82
+ return this.group(index)[sub];
83
+ }
84
+ text(index, sub = 0) {
85
+ const e = this.element(index, sub);
86
+ if (e === undefined || e.isEmpty)
87
+ return undefined;
88
+ return e.text;
89
+ }
90
+ /** The binary data at `index`; `undefined` for an element that holds text. */
91
+ binary(index, sub = 0) {
92
+ const e = this.element(index, sub);
93
+ return e?.isBinary === true ? e.bytes : undefined;
94
+ }
95
+ /**
96
+ * The element at `index` as the bank sent it, for a value the client sends back, such as the dialog ID: untrimmed,
97
+ * and one character per byte (ISO 8859-1, the FinTS 3.0 character set), so that `Verbatim` gives the bank back the
98
+ * very bytes it sent, in whatever encoding. `undefined` for an empty element.
99
+ */
100
+ verbatim(index, sub = 0) {
101
+ const e = this.element(index, sub);
102
+ if (e === undefined || e.isEmpty)
103
+ return undefined;
104
+ return latin1Decode(e.bytes);
105
+ }
106
+ integer(index, sub = 0) {
107
+ return tryParseInt(this.text(index, sub)?.trim());
108
+ }
109
+ /** The texts of the group at `index`; `undefined` for empty elements. */
110
+ texts(index) {
111
+ return this.group(index).map((e) => (e.isEmpty ? undefined : e.text));
112
+ }
113
+ /** The bytes the segment was read from, as the bank sent them, terminator included. */
114
+ encode() {
115
+ return this.source.subarray(this.start, this.end);
116
+ }
117
+ }
118
+ function writeEscaped(out, bytes) {
119
+ const escaped = [];
120
+ for (const b of bytes) {
121
+ if (isSyntaxCharacter(b))
122
+ escaped.push(escapeCharacter);
123
+ escaped.push(b);
124
+ }
125
+ out.add(escaped);
126
+ }
127
+ function writeBinary(out, bytes) {
128
+ out.add(latin1Encode(`@${bytes.length}@`));
129
+ out.add(bytes);
130
+ }
131
+ /**
132
+ * Encodes `value` in ISO 8859-1, the FinTS 3.0 character set, or in UTF-8 where it does not fit: such text can only
133
+ * come from a bank that sends UTF-8, such as a TAN medium named `Max’s iPhone`. `FinTsConfig` checks the login data for
134
+ * ISO 8859-1 up front, and the client the PIN and the TAN.
135
+ *
136
+ * @internal Exported for the tests.
137
+ */
138
+ export function encodeText(value) {
139
+ return isLatin1(value) ? latin1Encode(value) : utf8Encode(value);
140
+ }
141
+ /**
142
+ * The data elements one message may hold, segment headers and group elements included: several times what the
143
+ * parameter data of a user with hundreds of accounts take, and few enough that a hostile message cannot exhaust the
144
+ * memory, at about `dataElementMemory` bytes each.
145
+ */
146
+ export const maxDataElements = 200_000;
147
+ /**
148
+ * The memory a data element of a received message takes, in bytes, with its share of the segment and of a return code:
149
+ * about this much in V8, however few bytes of the message it is made of.
150
+ */
151
+ export const dataElementMemory = 256;
152
+ /** Every empty data element of a received segment; it has no bytes to change. */
153
+ const emptyElement = new DataElement(new Uint8Array(0), 0, 0, false);
154
+ function isSeparator(byte) {
155
+ return byte === dataElementSeparator || byte === groupElementSeparator || byte === segmentTerminator;
156
+ }
157
+ /** Line breaks and spaces between segments are padding, not content. */
158
+ function isPadding(byte) {
159
+ return byte === 0x0a || byte === 0x0d || byte === 0x20;
160
+ }
161
+ function isDigit(byte) {
162
+ return byte !== undefined && byte >= 0x30 && byte <= 0x39;
163
+ }
164
+ /**
165
+ * Splits a FinTS 3.0 message into segments, resolving escapes and binary data (`@length@bytes`).
166
+ *
167
+ * The elements share the memory of `data`. Throws `FormatError` for anything a complete message cannot hold: a
168
+ * malformed binary length, binary data beyond the end of `data` or not followed by a separator, a last segment without
169
+ * terminator, and more elements than `budget` has left, which parses of the same message share.
170
+ */
171
+ export function parseSegments(data, budget = { elements: maxDataElements }) {
172
+ const segments = [];
173
+ // Created with their first element: an array that starts empty reserves room for more than most of them hold.
174
+ let elements;
175
+ let group;
176
+ let segmentStart = 0;
177
+ let i = 0;
178
+ const readBinary = () => {
179
+ let end = i + 1;
180
+ let length = 0;
181
+ while (isDigit(data[end])) {
182
+ length = length * 10 + data[end++] - 0x30;
183
+ if (length > data.length)
184
+ throw new FormatError('Binary data beyond the end of the message');
185
+ }
186
+ if (end === i + 1 || data[end] !== binaryMarker)
187
+ throw new FormatError('Malformed binary length');
188
+ const start = end + 1;
189
+ if (length > data.length - start)
190
+ throw new FormatError('Binary data beyond the end of the message');
191
+ i = start + length;
192
+ if (i < data.length && !isSeparator(data[i]))
193
+ throw new FormatError('Binary data not followed by a separator');
194
+ return new DataElement(data, start, i, true);
195
+ };
196
+ const readText = () => {
197
+ const start = i;
198
+ let escaped = false;
199
+ while (i < data.length && !isSeparator(data[i])) {
200
+ if (data[i] === escapeCharacter) {
201
+ escaped = true;
202
+ i++;
203
+ }
204
+ i++;
205
+ }
206
+ if (i > data.length)
207
+ throw new FormatError('Escape character at the end of the message');
208
+ return i === start ? emptyElement : new DataElement(data, start, i, false, escaped);
209
+ };
210
+ while (i < data.length) {
211
+ if (elements === undefined && group === undefined && isPadding(data[i])) {
212
+ i++;
213
+ continue;
214
+ }
215
+ if (--budget.elements < 0)
216
+ throw new FormatError('Too many data elements');
217
+ if (elements === undefined && group === undefined)
218
+ segmentStart = i;
219
+ const element = data[i] === binaryMarker ? readBinary() : readText();
220
+ if (group === undefined)
221
+ group = [element];
222
+ else
223
+ group.push(element);
224
+ const separator = data[i++];
225
+ if (separator === groupElementSeparator)
226
+ continue;
227
+ if (elements === undefined)
228
+ elements = [group];
229
+ else
230
+ elements.push(group);
231
+ group = undefined;
232
+ if (separator === segmentTerminator) {
233
+ const segment = new Segment(elements, data, segmentStart, i);
234
+ // Skip empty segments, such as a stray double terminator.
235
+ if (segment.type !== '')
236
+ segments.push(segment);
237
+ elements = undefined;
238
+ }
239
+ }
240
+ if (elements !== undefined || group !== undefined)
241
+ throw new FormatError('Segment without terminator');
242
+ return segments;
243
+ }
244
+ /** `text` without the escape characters in front of syntax characters. */
245
+ function unescape(text) {
246
+ const out = new Uint8Array(text.length);
247
+ let o = 0;
248
+ for (let j = 0; j < text.length; j++) {
249
+ if (text[j] === escapeCharacter)
250
+ j++;
251
+ out[o++] = text[j];
252
+ }
253
+ return out.subarray(0, o);
254
+ }
255
+ /** Binary data in a segment to send, written as `@length@bytes`. */
256
+ export class Binary {
257
+ bytes;
258
+ constructor(bytes) {
259
+ this.bytes = bytes;
260
+ }
261
+ }
262
+ /**
263
+ * A value the bank issued, such as the dialog ID, to send back as `Segment.verbatim` reads it: escaped, but not
264
+ * trimmed, so that the bank gets back the very bytes it sent. Text from elsewhere, such as a TAN medium name the app
265
+ * passes, goes out as `encodeText` encodes it.
266
+ */
267
+ export class Verbatim {
268
+ text;
269
+ constructor(text) {
270
+ this.text = text;
271
+ }
272
+ /** `text` as a `Verbatim`; `undefined` stays empty. */
273
+ static of(text) {
274
+ return text === undefined ? undefined : new Verbatim(text);
275
+ }
276
+ }
277
+ /**
278
+ * A segment to send.
279
+ *
280
+ * `elements` holds the data elements after the header: `null` or `undefined` for an empty element, an array for a data
281
+ * element group, a boolean for `J`/`N`, `Binary` for binary data, `Verbatim` for a value the bank issued, and anything
282
+ * else as its text, without leading and trailing blanks. Trailing empty elements are left out, as the specification
283
+ * asks.
284
+ */
285
+ export class SegmentSpec {
286
+ type;
287
+ version;
288
+ elements;
289
+ reference;
290
+ constructor(type, version, elements,
291
+ /** The number of the segment an answer refers to (Bezugssegment); requests have none. */
292
+ reference) {
293
+ this.type = type;
294
+ this.version = version;
295
+ this.elements = elements;
296
+ this.reference = reference;
297
+ }
298
+ /**
299
+ * A segment given by the field numbers of its data elements, as in the specification (1 is the first data element
300
+ * after the header); missing numbers stay empty.
301
+ */
302
+ static numbered(type, version, fields) {
303
+ const count = Math.max(0, ...Object.keys(fields).map(Number));
304
+ const elements = [];
305
+ for (let number = 1; number <= count; number++)
306
+ elements.push(fields[number]);
307
+ return new SegmentSpec(type, version, elements);
308
+ }
309
+ /** Encodes the segment with `number`. */
310
+ build(number) {
311
+ const out = new BytesBuilder();
312
+ out.add(encodeText(`${this.type}:${number}:${this.version}${this.reference === undefined ? '' : `:${this.reference}`}`));
313
+ const encoded = this.elements.map(encodeGroup);
314
+ while (encoded.length > 0 && encoded.at(-1).length === 0)
315
+ encoded.pop();
316
+ for (const e of encoded) {
317
+ out.addByte(dataElementSeparator);
318
+ out.add(e);
319
+ }
320
+ out.addByte(segmentTerminator);
321
+ return out.takeBytes();
322
+ }
323
+ }
324
+ function isGroup(value) {
325
+ return Array.isArray(value);
326
+ }
327
+ function encodeGroup(value) {
328
+ const parts = [];
329
+ const flatten = (v) => {
330
+ if (isGroup(v))
331
+ v.forEach(flatten);
332
+ else
333
+ parts.push(encodeValue(v));
334
+ };
335
+ flatten(value);
336
+ while (parts.length > 0 && parts.at(-1).length === 0)
337
+ parts.pop();
338
+ const out = new BytesBuilder();
339
+ parts.forEach((part, i) => {
340
+ if (i > 0)
341
+ out.addByte(groupElementSeparator);
342
+ out.add(part);
343
+ });
344
+ return out.takeBytes();
345
+ }
346
+ function encodeValue(value) {
347
+ const out = new BytesBuilder();
348
+ if (value === null || value === undefined) {
349
+ // Empty.
350
+ }
351
+ else if (value instanceof Binary) {
352
+ writeBinary(out, value.bytes);
353
+ }
354
+ else if (value instanceof Verbatim) {
355
+ writeEscaped(out, encodeText(value.text));
356
+ }
357
+ else if (typeof value === 'boolean') {
358
+ out.addByte(value ? 0x4a : 0x4e); // 'J' or 'N'
359
+ }
360
+ else {
361
+ // All but binary data go without leading and trailing blanks (Formals B.4.1). Encode first, then escape the bytes,
362
+ // so that nothing unescaped slips into the syntax.
363
+ writeEscaped(out, encodeText(String(value).trim()));
364
+ }
365
+ return out.takeBytes();
366
+ }
367
+ //# sourceMappingURL=syntax.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntax.js","sourceRoot":"","sources":["../../src/v3/syntax.ts"],"names":[],"mappings":"AAAA,uHAAuH;AAEvH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAExE,+BAA+B;AAC/B,MAAM,oBAAoB,GAAG,IAAI,CAAC,CAAC,MAAM;AACzC,MAAM,qBAAqB,GAAG,IAAI,CAAC,CAAC,MAAM;AAC1C,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,MAAM;AACtC,MAAM,eAAe,GAAG,IAAI,CAAC,CAAC,MAAM;AACpC,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,MAAM;AAEjC,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,CACL,IAAI,KAAK,oBAAoB;QAC7B,IAAI,KAAK,qBAAqB;QAC9B,IAAI,KAAK,iBAAiB;QAC1B,IAAI,KAAK,eAAe;QACxB,IAAI,KAAK,YAAY,CACtB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,WAAW;IAIH;IACA;IACA;IACR;IAEQ;IARX,OAAO,CAAqB;IAEpC,YACmB,MAAkB,EAClB,KAAa,EACb,GAAW,EACnB,QAAiB;IAC1B,0EAA0E;IACzD,UAAU,KAAK;QALf,WAAM,GAAN,MAAM,CAAY;QAClB,UAAK,GAAL,KAAK,CAAQ;QACb,QAAG,GAAH,GAAG,CAAQ;QACnB,aAAQ,GAAR,QAAQ,CAAS;QAET,YAAO,GAAP,OAAO,CAAQ;IAC/B,CAAC;IAEJ,8DAA8D;IAC9D,IAAI,KAAK;QACP,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAChD,CAAC;IAED,IAAI,OAAO;QACT,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC;IACnD,CAAC;IAED,IAAI,IAAI;QACN,IAAI,CAAC,OAAO,KAAK,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,OAAO;IAEP;IAEQ;IACA;IACA;IALnB,YACW,QAA6C;IACtD,8FAA8F;IAC7E,MAAkB,EAClB,KAAa,EACb,GAAW;QAJnB,aAAQ,GAAR,QAAQ,CAAqC;QAErC,WAAM,GAAN,MAAM,CAAY;QAClB,UAAK,GAAL,KAAK,CAAQ;QACb,QAAG,GAAH,GAAG,CAAQ;IAC3B,CAAC;IAEJ,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACpC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,KAAa;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACpC,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,GAAG,GAAG,CAAC;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,GAAG,GAAG,CAAC;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QACnD,OAAO,CAAC,CAAC,IAAI,CAAC;IAChB,CAAC;IAED,8EAA8E;IAC9E,MAAM,CAAC,KAAa,EAAE,GAAG,GAAG,CAAC;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACnC,OAAO,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,KAAa,EAAE,GAAG,GAAG,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QACnD,OAAO,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,GAAG,GAAG,CAAC;QAC5B,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,yEAAyE;IACzE,KAAK,CAAC,KAAa;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,uFAAuF;IACvF,MAAM;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACpD,CAAC;CACF;AAED,SAAS,YAAY,CAAC,GAAiB,EAAE,KAAiB;IACxD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,iBAAiB,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,GAAiB,EAAE,KAAiB;IACvD,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3C,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AAEvC;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAErC,iFAAiF;AACjF,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AAErE,SAAS,WAAW,CAAC,IAAwB;IAC3C,OAAO,IAAI,KAAK,oBAAoB,IAAI,IAAI,KAAK,qBAAqB,IAAI,IAAI,KAAK,iBAAiB,CAAC;AACvG,CAAC;AAED,wEAAwE;AACxE,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC;AACzD,CAAC;AAED,SAAS,OAAO,CAAC,IAAwB;IACvC,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC;AAC5D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,IAAgB,EAAE,MAAM,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE;IACpF,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,8GAA8G;IAC9G,IAAI,QAAqC,CAAC;IAC1C,IAAI,KAAgC,CAAC;IACrC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,MAAM,UAAU,GAAG,GAAgB,EAAE;QACnC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAE,GAAG,IAAI,CAAC;YAC3C,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,WAAW,CAAC,2CAA2C,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,YAAY;YAAE,MAAM,IAAI,WAAW,CAAC,yBAAyB,CAAC,CAAC;QAClG,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;QACtB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK;YAAE,MAAM,IAAI,WAAW,CAAC,2CAA2C,CAAC,CAAC;QACrG,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC;QACnB,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,WAAW,CAAC,yCAAyC,CAAC,CAAC;QAC/G,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,GAAgB,EAAE;QACjC,MAAM,KAAK,GAAG,CAAC,CAAC;QAChB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,eAAe,EAAE,CAAC;gBAChC,OAAO,GAAG,IAAI,CAAC;gBACf,CAAC,EAAE,CAAC;YACN,CAAC;YACD,CAAC,EAAE,CAAC;QACN,CAAC;QACD,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,WAAW,CAAC,4CAA4C,CAAC,CAAC;QACzF,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACtF,CAAC,CAAC;IAEF,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;YACzE,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,IAAI,EAAE,MAAM,CAAC,QAAQ,GAAG,CAAC;YAAE,MAAM,IAAI,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAC3E,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;YAAE,YAAY,GAAG,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACrE,IAAI,KAAK,KAAK,SAAS;YAAE,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;;YACtC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,SAAS,KAAK,qBAAqB;YAAE,SAAS;QAClD,IAAI,QAAQ,KAAK,SAAS;YAAE,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC;;YAC1C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,KAAK,GAAG,SAAS,CAAC;QAClB,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;YAC7D,0DAA0D;YAC1D,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;gBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChD,QAAQ,GAAG,SAAS,CAAC;QACvB,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,WAAW,CAAC,4BAA4B,CAAC,CAAC;IACvG,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,0EAA0E;AAC1E,SAAS,QAAQ,CAAC,IAAgB;IAChC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,eAAe;YAAE,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;IACtB,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,oEAAoE;AACpE,MAAM,OAAO,MAAM;IACI;IAArB,YAAqB,KAAiB;QAAjB,UAAK,GAAL,KAAK,CAAY;IAAG,CAAC;CAC3C;AAED;;;;GAIG;AACH,MAAM,OAAO,QAAQ;IACE;IAArB,YAAqB,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;IAAG,CAAC;IAErC,uDAAuD;IACvD,MAAM,CAAC,EAAE,CAAC,IAAwB;QAChC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;CACF;AAKD;;;;;;;GAOG;AACH,MAAM,OAAO,WAAW;IAEX;IACA;IACA;IAEA;IALX,YACW,IAAY,EACZ,OAAe,EACf,QAAiC;IAC1C,yFAAyF;IAChF,SAAkB;QAJlB,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAQ;QACf,aAAQ,GAAR,QAAQ,CAAyB;QAEjC,cAAS,GAAT,SAAS,CAAS;IAC1B,CAAC;IAEJ;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAY,EAAE,OAAe,EAAE,MAA8C;QAC3F,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAmB,EAAE,CAAC;QACpC,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,KAAK,EAAE,MAAM,EAAE;YAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9E,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,MAAc;QAClB,MAAM,GAAG,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,GAAG,CAAC,GAAG,CACL,UAAU,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAChH,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/C,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,GAAG,EAAE,CAAC;QACzE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YAClC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACb,CAAC;QACD,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC/B,OAAO,GAAG,CAAC,SAAS,EAAE,CAAC;IACzB,CAAC;CACF;AAKD,SAAS,OAAO,CAAC,KAAmB;IAClC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,WAAW,CAAC,KAAmB;IACtC,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,CAAC,CAAe,EAAQ,EAAE;QACxC,IAAI,OAAO,CAAC,CAAC,CAAC;YAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;;YAC9B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC;IACF,OAAO,CAAC,KAAK,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,MAAM,KAAK,CAAC;QAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IACnE,MAAM,GAAG,GAAG,IAAI,YAAY,EAAE,CAAC;IAC/B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACxB,IAAI,CAAC,GAAG,CAAC;YAAE,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC9C,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC,SAAS,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,WAAW,CAAC,KAAkB;IACrC,MAAM,GAAG,GAAG,IAAI,YAAY,EAAE,CAAC;IAC/B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,SAAS;IACX,CAAC;SAAM,IAAI,KAAK,YAAY,MAAM,EAAE,CAAC;QACnC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;SAAM,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QACrC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5C,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QACtC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa;IACjD,CAAC;SAAM,CAAC;QACN,mHAAmH;QACnH,mDAAmD;QACnD,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,GAAG,CAAC,SAAS,EAAE,CAAC;AACzB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,69 @@
1
1
  {
2
2
  "name": "@coderoftime/fints",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.2.0",
4
+ "description": "FinTS 3.0 client for German banks: accounts, balances and transactions with PIN/TAN, PSD2 strong customer authentication and decoupled app approval.",
5
+ "keywords": [
6
+ "fints",
7
+ "hbci",
8
+ "banking",
9
+ "psd2",
10
+ "mt940",
11
+ "camt",
12
+ "germany"
13
+ ],
14
+ "license": "BSD-3-Clause",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://gitlab.com/coderoftime/fints-ts.git"
18
+ },
19
+ "homepage": "https://gitlab.com/coderoftime/fints-ts",
20
+ "bugs": {
21
+ "url": "https://gitlab.com/coderoftime/fints-ts/-/issues"
22
+ },
23
+ "type": "module",
24
+ "exports": {
25
+ ".": {
26
+ "types": "./dist/index.d.ts",
27
+ "default": "./dist/index.js"
28
+ }
29
+ },
30
+ "types": "./dist/index.d.ts",
31
+ "files": [
32
+ "dist",
33
+ "src",
34
+ "CHANGELOG.md"
35
+ ],
36
+ "sideEffects": false,
37
+ "engines": {
38
+ "node": ">=22.12"
39
+ },
40
+ "scripts": {
41
+ "build": "rm -rf dist && tsc -p tsconfig.build.json",
42
+ "typecheck": "tsc --noEmit && tsc -p tsconfig.build.json --noEmit",
43
+ "lint": "eslint .",
44
+ "format": "prettier --write .",
45
+ "format:check": "prettier --check .",
46
+ "knip": "knip && knip --production",
47
+ "test": "vitest run",
48
+ "test:coverage": "vitest run --coverage",
49
+ "check": "npm run typecheck && npm run lint && npm run knip && npm run format:check && npm run test:coverage",
50
+ "prepublishOnly": "npm run check && npm run build",
51
+ "check:package": "npm run build && publint && npm pack --dry-run"
52
+ },
53
+ "devDependencies": {
54
+ "@eslint/js": "^10.0.1",
55
+ "@types/node": "22.12.0",
56
+ "@vitest/coverage-v8": "5.0.2",
57
+ "eslint": "^10.12.0",
58
+ "fast-check": "4.10.2",
59
+ "knip": "6.38.0",
60
+ "prettier": "^3.9.9",
61
+ "publint": "^0.3.25",
62
+ "typescript": "~6.0.3",
63
+ "typescript-eslint": "^8.71.1",
64
+ "vitest": "5.0.2"
65
+ },
66
+ "publishConfig": {
67
+ "access": "public"
68
+ }
69
+ }