@coderoftime/fints 0.1.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 (289) hide show
  1. package/CHANGELOG.md +519 -1
  2. package/README.md +138 -40
  3. package/dist/client.d.ts +49 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +242 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/core/account.d.ts +46 -7
  8. package/dist/core/account.d.ts.map +1 -1
  9. package/dist/core/account.js +143 -24
  10. package/dist/core/account.js.map +1 -1
  11. package/dist/core/amount.d.ts +15 -4
  12. package/dist/core/amount.d.ts.map +1 -1
  13. package/dist/core/amount.js +46 -9
  14. package/dist/core/amount.js.map +1 -1
  15. package/dist/core/balance.d.ts +4 -0
  16. package/dist/core/balance.d.ts.map +1 -1
  17. package/dist/core/balance.js +11 -5
  18. package/dist/core/balance.js.map +1 -1
  19. package/dist/core/bank-info.d.ts +21 -4
  20. package/dist/core/bank-info.d.ts.map +1 -1
  21. package/dist/core/bank-info.js +26 -5
  22. package/dist/core/bank-info.js.map +1 -1
  23. package/dist/core/client.d.ts +81 -19
  24. package/dist/core/client.d.ts.map +1 -1
  25. package/dist/core/config.d.ts +40 -20
  26. package/dist/core/config.d.ts.map +1 -1
  27. package/dist/core/config.js +85 -30
  28. package/dist/core/config.js.map +1 -1
  29. package/dist/core/errors.d.ts +100 -26
  30. package/dist/core/errors.d.ts.map +1 -1
  31. package/dist/core/errors.js +136 -53
  32. package/dist/core/errors.js.map +1 -1
  33. package/dist/core/feedback.d.ts +11 -1
  34. package/dist/core/feedback.d.ts.map +1 -1
  35. package/dist/core/feedback.js +14 -2
  36. package/dist/core/feedback.js.map +1 -1
  37. package/dist/core/transaction.d.ts +11 -1
  38. package/dist/core/transaction.d.ts.map +1 -1
  39. package/dist/core/transaction.js +21 -4
  40. package/dist/core/transaction.js.map +1 -1
  41. package/dist/core/transport.d.ts +48 -6
  42. package/dist/core/transport.d.ts.map +1 -1
  43. package/dist/core/transport.js +126 -29
  44. package/dist/core/transport.js.map +1 -1
  45. package/dist/formats/camt.d.ts +28 -5
  46. package/dist/formats/camt.d.ts.map +1 -1
  47. package/dist/formats/camt.js +132 -50
  48. package/dist/formats/camt.js.map +1 -1
  49. package/dist/formats/mt940.d.ts +29 -5
  50. package/dist/formats/mt940.d.ts.map +1 -1
  51. package/dist/formats/mt940.js +209 -113
  52. package/dist/formats/mt940.js.map +1 -1
  53. package/dist/formats/readers.d.ts +6 -2
  54. package/dist/formats/readers.d.ts.map +1 -1
  55. package/dist/formats/readers.js +28 -29
  56. package/dist/formats/readers.js.map +1 -1
  57. package/dist/formats/record-budget.d.ts +7 -0
  58. package/dist/formats/record-budget.d.ts.map +1 -0
  59. package/dist/formats/record-budget.js +17 -0
  60. package/dist/formats/record-budget.js.map +1 -0
  61. package/dist/formats/sepa-purpose.d.ts +9 -0
  62. package/dist/formats/sepa-purpose.d.ts.map +1 -1
  63. package/dist/formats/sepa-purpose.js +32 -2
  64. package/dist/formats/sepa-purpose.js.map +1 -1
  65. package/dist/index.d.ts +3 -3
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +2 -2
  68. package/dist/index.js.map +1 -1
  69. package/dist/session/app-approval.d.ts +11 -5
  70. package/dist/session/app-approval.d.ts.map +1 -1
  71. package/dist/session/app-approval.js +23 -12
  72. package/dist/session/app-approval.js.map +1 -1
  73. package/dist/session/dialog-runner.d.ts +11 -11
  74. package/dist/session/dialog-runner.d.ts.map +1 -1
  75. package/dist/session/dialog-runner.js +34 -19
  76. package/dist/session/dialog-runner.js.map +1 -1
  77. package/dist/session/login-guard.d.ts +54 -49
  78. package/dist/session/login-guard.d.ts.map +1 -1
  79. package/dist/session/login-guard.js +170 -83
  80. package/dist/session/login-guard.js.map +1 -1
  81. package/dist/session/sepa-accounts.d.ts +20 -14
  82. package/dist/session/sepa-accounts.d.ts.map +1 -1
  83. package/dist/session/sepa-accounts.js +62 -46
  84. package/dist/session/sepa-accounts.js.map +1 -1
  85. package/dist/session/session-setup.d.ts +41 -24
  86. package/dist/session/session-setup.d.ts.map +1 -1
  87. package/dist/session/session-setup.js +106 -63
  88. package/dist/session/session-setup.js.map +1 -1
  89. package/dist/session/session-state.d.ts +10 -6
  90. package/dist/session/session-state.d.ts.map +1 -1
  91. package/dist/session/session-state.js +72 -18
  92. package/dist/session/session-state.js.map +1 -1
  93. package/dist/session/signed-dialog.d.ts +83 -0
  94. package/dist/session/signed-dialog.d.ts.map +1 -0
  95. package/dist/session/signed-dialog.js +185 -0
  96. package/dist/session/signed-dialog.js.map +1 -0
  97. package/dist/session/tan-selection.d.ts +26 -18
  98. package/dist/session/tan-selection.d.ts.map +1 -1
  99. package/dist/session/tan-selection.js +44 -33
  100. package/dist/session/tan-selection.js.map +1 -1
  101. package/dist/session/user-prompts.d.ts +14 -5
  102. package/dist/session/user-prompts.d.ts.map +1 -1
  103. package/dist/session/user-prompts.js +53 -18
  104. package/dist/session/user-prompts.js.map +1 -1
  105. package/dist/tan/challenge.d.ts +47 -24
  106. package/dist/tan/challenge.d.ts.map +1 -1
  107. package/dist/tan/challenge.js +56 -51
  108. package/dist/tan/challenge.js.map +1 -1
  109. package/dist/tan/flicker.d.ts +11 -1
  110. package/dist/tan/flicker.d.ts.map +1 -1
  111. package/dist/tan/flicker.js +70 -24
  112. package/dist/tan/flicker.js.map +1 -1
  113. package/dist/tan/tan-image.d.ts +6 -2
  114. package/dist/tan/tan-image.d.ts.map +1 -1
  115. package/dist/tan/tan-image.js +14 -6
  116. package/dist/tan/tan-image.js.map +1 -1
  117. package/dist/tan/tan-models.d.ts +14 -2
  118. package/dist/tan/tan-models.d.ts.map +1 -1
  119. package/dist/tan/tan-models.js +24 -7
  120. package/dist/tan/tan-models.js.map +1 -1
  121. package/dist/util/arguments.d.ts +13 -0
  122. package/dist/util/arguments.d.ts.map +1 -0
  123. package/dist/util/arguments.js +40 -0
  124. package/dist/util/arguments.js.map +1 -0
  125. package/dist/util/async.d.ts +4 -3
  126. package/dist/util/async.d.ts.map +1 -1
  127. package/dist/util/async.js +6 -7
  128. package/dist/util/async.js.map +1 -1
  129. package/dist/util/bytes.d.ts +3 -4
  130. package/dist/util/bytes.d.ts.map +1 -1
  131. package/dist/util/bytes.js +13 -21
  132. package/dist/util/bytes.js.map +1 -1
  133. package/dist/util/call-context.d.ts.map +1 -1
  134. package/dist/util/call-context.js +3 -2
  135. package/dist/util/call-context.js.map +1 -1
  136. package/dist/util/dates.d.ts +6 -20
  137. package/dist/util/dates.d.ts.map +1 -1
  138. package/dist/util/dates.js +58 -28
  139. package/dist/util/dates.js.map +1 -1
  140. package/dist/util/errors.d.ts +13 -3
  141. package/dist/util/errors.d.ts.map +1 -1
  142. package/dist/util/errors.js +19 -6
  143. package/dist/util/errors.js.map +1 -1
  144. package/dist/util/immutable-map.d.ts +5 -2
  145. package/dist/util/immutable-map.d.ts.map +1 -1
  146. package/dist/util/immutable-map.js +15 -12
  147. package/dist/util/immutable-map.js.map +1 -1
  148. package/dist/util/inspect.d.ts +11 -0
  149. package/dist/util/inspect.d.ts.map +1 -0
  150. package/dist/util/inspect.js +14 -0
  151. package/dist/util/inspect.js.map +1 -0
  152. package/dist/util/json.d.ts +4 -0
  153. package/dist/util/json.d.ts.map +1 -1
  154. package/dist/util/json.js +18 -0
  155. package/dist/util/json.js.map +1 -1
  156. package/dist/util/text.d.ts +38 -5
  157. package/dist/util/text.d.ts.map +1 -1
  158. package/dist/util/text.js +90 -16
  159. package/dist/util/text.js.map +1 -1
  160. package/dist/util/xml.d.ts +9 -6
  161. package/dist/util/xml.d.ts.map +1 -1
  162. package/dist/util/xml.js +129 -56
  163. package/dist/util/xml.js.map +1 -1
  164. package/dist/v3/account-extension.d.ts.map +1 -1
  165. package/dist/v3/account-extension.js +7 -10
  166. package/dist/v3/account-extension.js.map +1 -1
  167. package/dist/v3/bank-connection.d.ts +54 -0
  168. package/dist/v3/bank-connection.d.ts.map +1 -0
  169. package/dist/v3/bank-connection.js +118 -0
  170. package/dist/v3/bank-connection.js.map +1 -0
  171. package/dist/v3/dialog.d.ts +84 -46
  172. package/dist/v3/dialog.d.ts.map +1 -1
  173. package/dist/v3/dialog.js +174 -60
  174. package/dist/v3/dialog.js.map +1 -1
  175. package/dist/v3/message.d.ts +32 -11
  176. package/dist/v3/message.d.ts.map +1 -1
  177. package/dist/v3/message.js +144 -83
  178. package/dist/v3/message.js.map +1 -1
  179. package/dist/v3/parameter-store.d.ts +111 -0
  180. package/dist/v3/parameter-store.d.ts.map +1 -0
  181. package/dist/v3/parameter-store.js +197 -0
  182. package/dist/v3/parameter-store.js.map +1 -0
  183. package/dist/v3/parameters.d.ts +44 -17
  184. package/dist/v3/parameters.d.ts.map +1 -1
  185. package/dist/v3/parameters.js +136 -60
  186. package/dist/v3/parameters.js.map +1 -1
  187. package/dist/v3/protocol.d.ts +50 -50
  188. package/dist/v3/protocol.d.ts.map +1 -1
  189. package/dist/v3/protocol.js +91 -210
  190. package/dist/v3/protocol.js.map +1 -1
  191. package/dist/v3/queries.d.ts +51 -0
  192. package/dist/v3/queries.d.ts.map +1 -0
  193. package/dist/v3/queries.js +128 -0
  194. package/dist/v3/queries.js.map +1 -0
  195. package/dist/v3/segments.d.ts +43 -19
  196. package/dist/v3/segments.d.ts.map +1 -1
  197. package/dist/v3/segments.js +84 -33
  198. package/dist/v3/segments.js.map +1 -1
  199. package/dist/v3/syntax.d.ts +68 -13
  200. package/dist/v3/syntax.d.ts.map +1 -1
  201. package/dist/v3/syntax.js +183 -102
  202. package/dist/v3/syntax.js.map +1 -1
  203. package/package.json +10 -6
  204. package/src/client.ts +293 -0
  205. package/src/core/account.ts +153 -24
  206. package/src/core/amount.ts +45 -10
  207. package/src/core/balance.ts +12 -5
  208. package/src/core/bank-info.ts +29 -5
  209. package/src/core/client.ts +83 -19
  210. package/src/core/config.ts +95 -35
  211. package/src/core/errors.ts +148 -54
  212. package/src/core/feedback.ts +16 -2
  213. package/src/core/transaction.ts +22 -4
  214. package/src/core/transport.ts +153 -32
  215. package/src/formats/camt.ts +153 -45
  216. package/src/formats/mt940.ts +244 -122
  217. package/src/formats/readers.ts +28 -31
  218. package/src/formats/record-budget.ts +18 -0
  219. package/src/formats/sepa-purpose.ts +29 -2
  220. package/src/index.ts +4 -2
  221. package/src/session/app-approval.ts +51 -38
  222. package/src/session/dialog-runner.ts +61 -31
  223. package/src/session/login-guard.ts +189 -87
  224. package/src/session/sepa-accounts.ts +63 -45
  225. package/src/session/session-setup.ts +105 -68
  226. package/src/session/session-state.ts +74 -23
  227. package/src/session/signed-dialog.ts +222 -0
  228. package/src/session/tan-selection.ts +50 -39
  229. package/src/session/user-prompts.ts +62 -18
  230. package/src/tan/challenge.ts +87 -64
  231. package/src/tan/flicker.ts +72 -23
  232. package/src/tan/tan-image.ts +15 -6
  233. package/src/tan/tan-models.ts +26 -7
  234. package/src/util/arguments.ts +40 -0
  235. package/src/util/async.ts +10 -9
  236. package/src/util/bytes.ts +14 -20
  237. package/src/util/call-context.ts +3 -2
  238. package/src/util/dates.ts +64 -33
  239. package/src/util/errors.ts +22 -6
  240. package/src/util/immutable-map.ts +15 -12
  241. package/src/util/inspect.ts +14 -0
  242. package/src/util/json.ts +16 -0
  243. package/src/util/text.ts +87 -15
  244. package/src/util/xml.ts +130 -52
  245. package/src/v3/account-extension.ts +7 -12
  246. package/src/v3/bank-connection.ts +126 -0
  247. package/src/v3/dialog.ts +186 -92
  248. package/src/v3/message.ts +140 -79
  249. package/src/v3/parameter-store.ts +226 -0
  250. package/src/v3/parameters.ts +166 -66
  251. package/src/v3/protocol.ts +103 -253
  252. package/src/v3/queries.ts +198 -0
  253. package/src/v3/segments.ts +86 -31
  254. package/src/v3/syntax.ts +172 -93
  255. package/dist/session/bank-connection.d.ts +0 -28
  256. package/dist/session/bank-connection.d.ts.map +0 -1
  257. package/dist/session/bank-connection.js +0 -48
  258. package/dist/session/bank-connection.js.map +0 -1
  259. package/dist/session/parameter-data.d.ts +0 -83
  260. package/dist/session/parameter-data.d.ts.map +0 -1
  261. package/dist/session/parameter-data.js +0 -68
  262. package/dist/session/parameter-data.js.map +0 -1
  263. package/dist/session/pin-tan-client.d.ts +0 -54
  264. package/dist/session/pin-tan-client.d.ts.map +0 -1
  265. package/dist/session/pin-tan-client.js +0 -153
  266. package/dist/session/pin-tan-client.js.map +0 -1
  267. package/dist/session/pin-tan-dialog.d.ts +0 -71
  268. package/dist/session/pin-tan-dialog.d.ts.map +0 -1
  269. package/dist/session/pin-tan-dialog.js +0 -124
  270. package/dist/session/pin-tan-dialog.js.map +0 -1
  271. package/dist/session/protocol.d.ts +0 -209
  272. package/dist/session/protocol.d.ts.map +0 -1
  273. package/dist/session/protocol.js +0 -75
  274. package/dist/session/protocol.js.map +0 -1
  275. package/dist/session/response-handler.d.ts +0 -48
  276. package/dist/session/response-handler.d.ts.map +0 -1
  277. package/dist/session/response-handler.js +0 -121
  278. package/dist/session/response-handler.js.map +0 -1
  279. package/dist/v3/client.d.ts +0 -24
  280. package/dist/v3/client.d.ts.map +0 -1
  281. package/dist/v3/client.js +0 -16
  282. package/dist/v3/client.js.map +0 -1
  283. package/src/session/bank-connection.ts +0 -51
  284. package/src/session/parameter-data.ts +0 -137
  285. package/src/session/pin-tan-client.ts +0 -186
  286. package/src/session/pin-tan-dialog.ts +0 -160
  287. package/src/session/protocol.ts +0 -311
  288. package/src/session/response-handler.ts +0 -130
  289. package/src/v3/client.ts +0 -29
@@ -1,47 +1,46 @@
1
- import { BytesBuilder } from '../util/bytes.js';
2
1
  import { decodeBankText, decodeXmlText } from '../util/text.js';
3
- import { Camt } from './camt.js';
4
- import { Mt940 } from './mt940.js';
2
+ import { parseCamt } from './camt.js';
3
+ import { parseMt940 } from './mt940.js';
4
+ import { RecordBudget } from './record-budget.js';
5
5
  /**
6
6
  * The transactions in MT940 data: the `booked` parts joined, since a statement may continue on the next page, then the
7
7
  * `pending` ones (MT942).
8
8
  *
9
- * `currency` applies to statements that do not state one; throws `FormatError` if both are missing.
9
+ * `currency` applies to statements that do not state one; throws `FormatError` if both are missing, and for more than
10
+ * 200,000 statements and transactions in all.
10
11
  */
11
12
  export function mt940Transactions(booked, pending, currency) {
13
+ const budget = new RecordBudget();
12
14
  return [
13
- ...Mt940.parseTransactions(joinedMt940(booked), { currency }),
14
- ...Mt940.parseTransactions(joinedMt940(pending), { currency, status: 'pending' }),
15
- ];
15
+ ...parseMt940(joinedMt940(booked), { currency }, budget),
16
+ ...parseMt940(joinedMt940(pending), { currency, status: 'pending' }, budget),
17
+ ].flatMap((statement) => statement.transactions);
16
18
  }
17
- const lineFeed = 0x0a;
18
- const carriageReturn = 0x0d;
19
- const atSign = 0x40;
20
19
  /**
21
- * The MT940 `parts` as one text.
20
+ * The MT940 `parts` as one text, whose line separator the parser takes from its first line: a later page may start
21
+ * with a purpose, which the payer writes.
22
22
  *
23
- * Each part ends a line before the next one follows, since the parser finds fields at the start of a line and a bank
24
- * need not end its pages with a line break. Banks that separate lines with `@@` get that separator.
23
+ * Each part is decoded on its own, since a bank may start each page with a byte order mark. Each part ends a line
24
+ * before the next one follows, since the parser finds fields at the start of a line and a bank need not end its pages
25
+ * with a line break. Where no part holds a line break, a part ends its line with `@@` instead: a line break after a
26
+ * first page without `@@`, such as `:20:X`, would make the parser read the `@@` of the others as text.
25
27
  */
26
28
  function joinedMt940(parts) {
27
- const pages = parts.filter((part) => part.length > 0);
28
- const atSigns = !pages.some((p) => p.includes(lineFeed) || p.includes(carriageReturn));
29
- const endsLine = (page) => atSigns
30
- ? page.length >= 2 && page[page.length - 1] === atSign && page[page.length - 2] === atSign
31
- : page.at(-1) === lineFeed || page.at(-1) === carriageReturn;
32
- const bytes = new BytesBuilder();
33
- pages.forEach((page, i) => {
34
- if (i > 0 && !endsLine(pages[i - 1]))
35
- bytes.add(atSigns ? [atSign, atSign] : [lineFeed]);
36
- bytes.add(page);
37
- });
38
- return decodeBankText(bytes.takeBytes());
29
+ const pages = parts.filter((part) => part.length > 0).map((part) => decodeBankText(part));
30
+ const lineEnd = pages.some((page) => page.includes('\n') || page.includes('\r')) ? '\n' : '@@';
31
+ return pages
32
+ .map((page, i) => (i + 1 < pages.length && !page.endsWith(lineEnd) ? `${page}${lineEnd}` : page))
33
+ .join('');
39
34
  }
40
- /** The transactions in camt documents; each document stands on its own. */
35
+ /**
36
+ * The transactions in camt documents; each document stands on its own. Throws `FormatError` for more than 200,000
37
+ * statements and transactions in all.
38
+ */
41
39
  export function camtTransactions(booked, pending) {
40
+ const budget = new RecordBudget();
42
41
  return [
43
- ...booked.flatMap((document) => Camt.parseTransactions(decodeXmlText(document))),
44
- ...pending.flatMap((document) => Camt.parseTransactions(decodeXmlText(document), 'pending')),
45
- ];
42
+ ...booked.flatMap((document) => parseCamt(decodeXmlText(document), undefined, budget)),
43
+ ...pending.flatMap((document) => parseCamt(decodeXmlText(document), 'pending', budget)),
44
+ ].flatMap((statement) => statement.transactions);
46
45
  }
47
46
  //# sourceMappingURL=readers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"readers.js","sourceRoot":"","sources":["../../src/formats/readers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAA6B,EAC7B,OAA8B,EAC9B,QAA4B;IAE5B,OAAO;QACL,GAAG,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC;QAC7D,GAAG,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;KAClF,CAAC;AACJ,CAAC;AAED,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,MAAM,GAAG,IAAI,CAAC;AAEpB;;;;;GAKG;AACH,SAAS,WAAW,CAAC,KAA4B;IAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;IACvF,MAAM,QAAQ,GAAG,CAAC,IAAgB,EAAW,EAAE,CAC7C,OAAO;QACL,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,MAAM;QAC1F,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC;IAEjE,MAAM,KAAK,GAAG,IAAI,YAAY,EAAE,CAAC;IACjC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACxB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1F,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,OAAO,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB,CAAC,MAA6B,EAAE,OAA8B;IAC5F,OAAO;QACL,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChF,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;KAC7F,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"readers.js","sourceRoot":"","sources":["../../src/formats/readers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAA6B,EAC7B,OAA8B,EAC9B,QAA4B;IAE5B,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;IAClC,OAAO;QACL,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC;QACxD,GAAG,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC;KAC7E,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,WAAW,CAAC,KAA4B;IAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1F,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/F,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAChG,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAA6B,EAAE,OAA8B;IAC5F,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;IAClC,OAAO;QACL,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACtF,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;KACxF,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,7 @@
1
+ /** The statements and transactions the parsers may still build; the parses of one query share one budget. */
2
+ export declare class RecordBudget {
3
+ private left;
4
+ /** Counts a statement or transaction about to be built; throws `FormatError` for one beyond the budget. */
5
+ take(): void;
6
+ }
7
+ //# sourceMappingURL=record-budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-budget.d.ts","sourceRoot":"","sources":["../../src/formats/record-budget.ts"],"names":[],"mappings":"AASA,6GAA6G;AAC7G,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAc;IAE1B,2GAA2G;IAC3G,IAAI,IAAI,IAAI;CAGb"}
@@ -0,0 +1,17 @@
1
+ import { FormatError } from '../util/errors.js';
2
+ /**
3
+ * Most statements and transactions the parsers build for one query: several times what a year of a busy business
4
+ * account holds, and few enough that a hostile answer cannot exhaust the memory, at about 600 bytes each. The size of
5
+ * the answer does not bound them: a transaction takes up to 25 times the bytes of its MT940 line.
6
+ */
7
+ const maxRecords = 200_000;
8
+ /** The statements and transactions the parsers may still build; the parses of one query share one budget. */
9
+ export class RecordBudget {
10
+ left = maxRecords;
11
+ /** Counts a statement or transaction about to be built; throws `FormatError` for one beyond the budget. */
12
+ take() {
13
+ if (--this.left < 0)
14
+ throw new FormatError(`More than ${maxRecords} statements and transactions`);
15
+ }
16
+ }
17
+ //# sourceMappingURL=record-budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-budget.js","sourceRoot":"","sources":["../../src/formats/record-budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,UAAU,GAAG,OAAO,CAAC;AAE3B,6GAA6G;AAC7G,MAAM,OAAO,YAAY;IACf,IAAI,GAAG,UAAU,CAAC;IAE1B,2GAA2G;IAC3G,IAAI;QACF,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC;YAAE,MAAM,IAAI,WAAW,CAAC,aAAa,UAAU,8BAA8B,CAAC,CAAC;IACpG,CAAC;CACF"}
@@ -8,6 +8,13 @@ export declare const SepaPurpose: Readonly<{
8
8
  * A keyword counts unless a capital letter comes right before it, so `XEREF+` does not open an EREF value. After a
9
9
  * digit or a small letter it does: a purpose line cut at 35 characters is joined to the next one without a space, so
10
10
  * `…4711EREF+` may be where one line ends and the next begins.
11
+ *
12
+ * The remittance information (`SVWZ+`) and the ultimate debtor and creditor (`ABWA+`, `ABWE+`) are text the payer or
13
+ * the payee writes, which banks put after every other keyword, some of them `ABWA+` or `ABWE+` first. So from the
14
+ * first of them on only these three start a value: any other keyword in that text, such as `IBAN+`, is part of it. A
15
+ * keyword that occurs twice has no value: which of the two the bank wrote cannot be told, since a reference the payee
16
+ * chose, such as `EREF+`, comes before the bank's `CRED+` and may hold `CRED+…` and `SVWZ+`, which turns the bank's
17
+ * value into remittance information.
11
18
  */
12
19
  parse(purpose: string): Map<string, string>;
13
20
  /**
@@ -16,6 +23,8 @@ export declare const SepaPurpose: Readonly<{
16
23
  *
17
24
  * A keyword also counts at the start of a part, where the previous value may end in a capital letter, as in
18
25
  * `EREF+NOTPROVIDED` followed by a part `MREF+…`.
26
+ *
27
+ * Throws `TypeError` for a string, whose characters would count as parts, and for parts that are no strings.
19
28
  */
20
29
  parseParts(parts: Iterable<string>): Map<string, string>;
21
30
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"sepa-purpose.d.ts","sourceRoot":"","sources":["../../src/formats/sepa-purpose.ts"],"names":[],"mappings":"AAqBA,yGAAyG;AACzG,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAEnF;AAID,sDAAsD;AACtD,eAAO,MAAM,WAAW;IACtB;;;;;;OAMG;mBACY,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAI3C;;;;;;OAMG;sBACe,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;EASxD,CAAC"}
1
+ {"version":3,"file":"sepa-purpose.d.ts","sourceRoot":"","sources":["../../src/formats/sepa-purpose.ts"],"names":[],"mappings":"AAwBA,yGAAyG;AACzG,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAEnF;AAOD,sDAAsD;AACtD,eAAO,MAAM,WAAW;IACtB;;;;;;;;;;;;;OAaG;mBACY,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAI3C;;;;;;;;OAQG;sBACe,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;EAWxD,CAAC"}
@@ -1,3 +1,5 @@
1
+ import { invalidArgument } from '../util/errors.js';
2
+ import { trimBlanks } from '../util/text.js';
1
3
  /** SEPA keywords German banks put into the purpose text, each followed by `+`. */
2
4
  const keywords = [
3
5
  'EREF',
@@ -22,6 +24,8 @@ export function providedReference(reference) {
22
24
  return reference === notProvided ? undefined : reference;
23
25
  }
24
26
  const keywordPattern = new RegExp(`(${keywords.join('|')})\\+`, 'g');
27
+ /** The keywords of the text the payer or the payee writes, which German banks put after every other keyword. */
28
+ const payerText = new Set(['SVWZ', 'ABWA', 'ABWE']);
25
29
  /** Parser for the SEPA keywords in a purpose text. */
26
30
  export const SepaPurpose = Object.freeze({
27
31
  /**
@@ -30,6 +34,13 @@ export const SepaPurpose = Object.freeze({
30
34
  * A keyword counts unless a capital letter comes right before it, so `XEREF+` does not open an EREF value. After a
31
35
  * digit or a small letter it does: a purpose line cut at 35 characters is joined to the next one without a space, so
32
36
  * `…4711EREF+` may be where one line ends and the next begins.
37
+ *
38
+ * The remittance information (`SVWZ+`) and the ultimate debtor and creditor (`ABWA+`, `ABWE+`) are text the payer or
39
+ * the payee writes, which banks put after every other keyword, some of them `ABWA+` or `ABWE+` first. So from the
40
+ * first of them on only these three start a value: any other keyword in that text, such as `IBAN+`, is part of it. A
41
+ * keyword that occurs twice has no value: which of the two the bank wrote cannot be told, since a reference the payee
42
+ * chose, such as `EREF+`, comes before the bank's `CRED+` and may hold `CRED+…` and `SVWZ+`, which turns the bank's
43
+ * value into remittance information.
33
44
  */
34
45
  parse(purpose) {
35
46
  return split(purpose, new Set());
@@ -40,11 +51,17 @@ export const SepaPurpose = Object.freeze({
40
51
  *
41
52
  * A keyword also counts at the start of a part, where the previous value may end in a capital letter, as in
42
53
  * `EREF+NOTPROVIDED` followed by a part `MREF+…`.
54
+ *
55
+ * Throws `TypeError` for a string, whose characters would count as parts, and for parts that are no strings.
43
56
  */
44
57
  parseParts(parts) {
58
+ if (typeof parts === 'string')
59
+ throw invalidArgument('Must be the parts, not one string', 'parts');
45
60
  let text = '';
46
61
  const partStarts = new Set();
47
62
  for (const part of parts) {
63
+ if (typeof part !== 'string')
64
+ throw invalidArgument('Must be strings', 'parts');
48
65
  partStarts.add(text.length);
49
66
  text += part;
50
67
  }
@@ -53,11 +70,24 @@ export const SepaPurpose = Object.freeze({
53
70
  });
54
71
  function split(purpose, partStarts) {
55
72
  const atWordStart = (index) => index === 0 || partStarts.has(index) || !isCapitalLetter(purpose, index - 1);
56
- const matches = [...purpose.matchAll(keywordPattern)].filter((m) => atWordStart(m.index));
73
+ const occurrences = new Map();
74
+ const matches = [];
75
+ let inPayerText = false;
76
+ for (const m of purpose.matchAll(keywordPattern)) {
77
+ if (!atWordStart(m.index))
78
+ continue;
79
+ const keyword = m[1];
80
+ occurrences.set(keyword, (occurrences.get(keyword) ?? 0) + 1);
81
+ if (inPayerText && !payerText.has(keyword))
82
+ continue;
83
+ inPayerText ||= payerText.has(keyword);
84
+ matches.push(m);
85
+ }
57
86
  const result = new Map();
58
87
  matches.forEach((m, i) => {
59
88
  const end = i + 1 < matches.length ? matches[i + 1].index : purpose.length;
60
- result.set(m[1], purpose.substring(m.index + m[0].length, end).trim());
89
+ if (occurrences.get(m[1]) === 1)
90
+ result.set(m[1], trimBlanks(purpose.substring(m.index + m[0].length, end)));
61
91
  });
62
92
  return result;
63
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sepa-purpose.js","sourceRoot":"","sources":["../../src/formats/sepa-purpose.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,MAAM,QAAQ,GAAG;IACf,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;CACP,CAAC;AAEF,+EAA+E;AAC/E,MAAM,WAAW,GAAG,aAAa,CAAC;AAElC,yGAAyG;AACzG,MAAM,UAAU,iBAAiB,CAAC,SAA6B;IAC7D,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC;AAED,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAErE,sDAAsD;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IACvC;;;;;;OAMG;IACH,KAAK,CAAC,OAAe;QACnB,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IACnC,CAAC;IAED;;;;;;OAMG;IACH,UAAU,CAAC,KAAuB;QAChC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,IAAI,IAAI,IAAI,CAAC;QACf,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACjC,CAAC;CACF,CAAC,CAAC;AAEH,SAAS,KAAK,CAAC,OAAe,EAAE,UAA+B;IAC7D,MAAM,WAAW,GAAG,CAAC,KAAa,EAAW,EAAE,CAC7C,KAAK,KAAK,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1F,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAC5E,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,KAAa;IAClD,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"sepa-purpose.js","sourceRoot":"","sources":["../../src/formats/sepa-purpose.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,17 +6,18 @@
6
6
  *
7
7
  * @packageDocumentation
8
8
  */
9
+ export { FinTs3Client, type FinTs3ClientInit } from './client.js';
9
10
  export { Account, AccountDataStatus, type AccountCategory, type AccountInit } from './core/account.js';
10
11
  export { Amount } from './core/amount.js';
11
12
  export { Balance, type BalanceInit } from './core/balance.js';
12
13
  export { BankInfo, BankMessage } from './core/bank-info.js';
13
14
  export type { BankMessageHandler, FinTsClient, FinTsClientOptions, MessageDirection, MessageLogger, TransactionQuery, WarningHandler, } from './core/client.js';
14
15
  export { FinTsConfig, type FinTsConfigInit } from './core/config.js';
15
- export { FinTsBankError, FinTsDecoupledTimeoutError, FinTsDialogAbortedError, FinTsError, FinTsLoginDataChangedError, FinTsPinError, FinTsProtocolError, FinTsStateError, FinTsTanCancelledError, FinTsTanError, FinTsTransportError, FinTsUnsupportedError, } from './core/errors.js';
16
+ export { FinTsBankError, FinTsDecoupledTimeoutError, FinTsDialogAbortedError, FinTsError, FinTsLoginDataChangedError, FinTsLoginRefusedError, FinTsPinError, FinTsProtocolError, FinTsStateError, FinTsTanCancelledError, FinTsTanError, FinTsTanSetupError, FinTsTransportError, FinTsUnsupportedError, } from './core/errors.js';
16
17
  export { FeedbackCodes, FinTsFeedback } from './core/feedback.js';
17
18
  export { Transaction, type TransactionFormat, type TransactionInit, type TransactionStatus, } from './core/transaction.js';
18
19
  export { HttpTransport, type FinTsTransport, type HttpTransportOptions } from './core/transport.js';
19
- export { Camt } from './formats/camt.js';
20
+ export { Camt, type CamtStatement } from './formats/camt.js';
20
21
  export { Mt940, type Mt940Options, type Mt940Statement } from './formats/mt940.js';
21
22
  export { SepaPurpose } from './formats/sepa-purpose.js';
22
23
  export { TanAnswer, TanChallenge, type TanCallback, type TanChallengeInit, type TanMediumSelector, type TanMethodSelector, } from './tan/challenge.js';
@@ -24,5 +25,4 @@ export { FlickerCode, type HhdVersion } from './tan/flicker.js';
24
25
  export { TanImage } from './tan/tan-image.js';
25
26
  export { TanMedium, TanMethod, type TanMediumInit, type TanMediumRequirement, type TanMediumStatus, type TanMethodInit, } from './tan/tan-models.js';
26
27
  export { FormatError } from './util/errors.js';
27
- export { FinTs3Client, type FinTs3ClientInit } from './v3/client.js';
28
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACvG,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC5D,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EACL,cAAc,EACd,0BAA0B,EAC1B,uBAAuB,EACvB,UAAU,EACV,0BAA0B,EAC1B,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EACL,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACpG,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EACL,SAAS,EACT,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EACL,SAAS,EACT,SAAS,EACT,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACvG,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC5D,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EACL,cAAc,EACd,0BAA0B,EAC1B,uBAAuB,EACvB,UAAU,EACV,0BAA0B,EAC1B,sBAAsB,EACtB,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EACL,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACpG,OAAO,EAAE,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EACL,SAAS,EACT,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EACL,SAAS,EACT,SAAS,EACT,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -6,12 +6,13 @@
6
6
  *
7
7
  * @packageDocumentation
8
8
  */
9
+ export { FinTs3Client } from './client.js';
9
10
  export { Account, AccountDataStatus } from './core/account.js';
10
11
  export { Amount } from './core/amount.js';
11
12
  export { Balance } from './core/balance.js';
12
13
  export { BankInfo, BankMessage } from './core/bank-info.js';
13
14
  export { FinTsConfig } from './core/config.js';
14
- export { FinTsBankError, FinTsDecoupledTimeoutError, FinTsDialogAbortedError, FinTsError, FinTsLoginDataChangedError, FinTsPinError, FinTsProtocolError, FinTsStateError, FinTsTanCancelledError, FinTsTanError, FinTsTransportError, FinTsUnsupportedError, } from './core/errors.js';
15
+ export { FinTsBankError, FinTsDecoupledTimeoutError, FinTsDialogAbortedError, FinTsError, FinTsLoginDataChangedError, FinTsLoginRefusedError, FinTsPinError, FinTsProtocolError, FinTsStateError, FinTsTanCancelledError, FinTsTanError, FinTsTanSetupError, FinTsTransportError, FinTsUnsupportedError, } from './core/errors.js';
15
16
  export { FeedbackCodes, FinTsFeedback } from './core/feedback.js';
16
17
  export { Transaction, } from './core/transaction.js';
17
18
  export { HttpTransport } from './core/transport.js';
@@ -23,5 +24,4 @@ export { FlickerCode } from './tan/flicker.js';
23
24
  export { TanImage } from './tan/tan-image.js';
24
25
  export { TanMedium, TanMethod, } from './tan/tan-models.js';
25
26
  export { FormatError } from './util/errors.js';
26
- export { FinTs3Client } from './v3/client.js';
27
27
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAA0C,MAAM,mBAAmB,CAAC;AACvG,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAoB,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAU5D,OAAO,EAAE,WAAW,EAAwB,MAAM,kBAAkB,CAAC;AACrE,OAAO,EACL,cAAc,EACd,0BAA0B,EAC1B,uBAAuB,EACvB,UAAU,EACV,0BAA0B,EAC1B,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EACL,WAAW,GAIZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAkD,MAAM,qBAAqB,CAAC;AACpG,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,KAAK,EAA0C,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EACL,SAAS,EACT,YAAY,GAKb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAmB,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EACL,SAAS,EACT,SAAS,GAKV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAyB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAyB,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAA0C,MAAM,mBAAmB,CAAC;AACvG,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAoB,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAU5D,OAAO,EAAE,WAAW,EAAwB,MAAM,kBAAkB,CAAC;AACrE,OAAO,EACL,cAAc,EACd,0BAA0B,EAC1B,uBAAuB,EACvB,UAAU,EACV,0BAA0B,EAC1B,sBAAsB,EACtB,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EACL,WAAW,GAIZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAkD,MAAM,qBAAqB,CAAC;AACpG,OAAO,EAAE,IAAI,EAAsB,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,KAAK,EAA0C,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EACL,SAAS,EACT,YAAY,GAKb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAmB,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EACL,SAAS,EACT,SAAS,GAKV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,10 +1,15 @@
1
+ import { type FinTsFeedback } from '../core/feedback.js';
1
2
  import { type TanAnswer, type TanChallenge } from '../tan/challenge.js';
2
3
  import type { TanMethod } from '../tan/tan-models.js';
3
- import type { Approval, BankResponse } from './protocol.js';
4
+ import type { Approval } from '../v3/dialog.js';
5
+ /** What a wait reads of the bank's answer to a status request: its return codes. */
6
+ interface StatusAnswer {
7
+ readonly feedback: readonly FinTsFeedback[];
8
+ }
4
9
  /** Shows a challenge and returns the user's answer. */
5
- export type AskUser = (challenge: TanChallenge) => Promise<TanAnswer>;
10
+ type AskUser = (challenge: TanChallenge) => Promise<TanAnswer>;
6
11
  /** Waits for `delayMs`, or until `interrupt` settles. */
7
- export type Pause = (delayMs: number, interrupt?: Promise<unknown>) => Promise<void>;
12
+ type Pause = (delayMs: number, interrupt?: Promise<unknown>) => Promise<void>;
8
13
  /** What an `AppApprovalWait` needs: `ask` shows a challenge, `pause` waits, `receive` takes in each status response. */
9
14
  export interface AppApprovalHooks<R> {
10
15
  readonly ask: AskUser;
@@ -26,8 +31,8 @@ export interface AppApprovalHooks<R> {
26
31
  * handles one `Approval`; `run` may be called once. A failure of `ask` or `pause`, such as a closed client, ends the
27
32
  * wait.
28
33
  */
29
- export declare function appApprovalWait<R extends BankResponse>(approval: Approval<R>, hooks: AppApprovalHooks<R>): AppApprovalWait<R>;
30
- export declare abstract class AppApprovalWait<R extends BankResponse> {
34
+ export declare function appApprovalWait<R extends StatusAnswer>(approval: Approval<R>, hooks: AppApprovalHooks<R>): AppApprovalWait<R>;
35
+ export declare abstract class AppApprovalWait<R extends StatusAnswer> {
31
36
  protected readonly approval: Approval<R>;
32
37
  protected readonly hooks: AppApprovalHooks<R>;
33
38
  private requests;
@@ -57,4 +62,5 @@ export declare abstract class AppApprovalWait<R extends BankResponse> {
57
62
  */
58
63
  protected nextPrompt(challenge: TanChallenge, pending: R): TanChallenge;
59
64
  }
65
+ export {};
60
66
  //# sourceMappingURL=app-approval.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-approval.d.ts","sourceRoot":"","sources":["../../src/session/app-approval.ts"],"names":[],"mappings":"AAEA,OAAO,EAA6B,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAY5D,uDAAuD;AACvD,MAAM,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,YAAY,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAEtE,yDAAyD;AACzD,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAErF,wHAAwH;AACxH,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,kEAAkE;IAClE,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC;CACzC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,YAAY,EACpD,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrB,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,GACzB,eAAe,CAAC,CAAC,CAAC,CAIpB;AAED,8BAAsB,eAAe,CAAC,CAAC,SAAS,YAAY;IAOxD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAP/C,OAAO,CAAC,QAAQ,CAAK;IAErB,mFAAmF;IACnF,SAAS,CAAC,QAAQ,SAAK;gBAGF,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrB,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAG/C;;;OAGG;IACH,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC;IAE1B,SAAS,KAAK,MAAM,IAAI,SAAS,CAEhC;IAED,0FAA0F;IAC1F,SAAS,KAAK,YAAY,IAAI,OAAO,CAEpC;IAED,SAAS,KAAK,cAAc,IAAI,MAAM,CAMrC;IAED,SAAS,KAAK,gBAAgB,IAAI,MAAM,CAEvC;IAED;;;;;OAKG;cACa,aAAa,IAAI,OAAO,CAAC,CAAC,CAAC;IAe3C;;;OAGG;IACH,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,GAAG,YAAY;CAGxE"}
1
+ {"version":3,"file":"app-approval.d.ts","sourceRoot":"","sources":["../../src/session/app-approval.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAA6B,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,oFAAoF;AACpF,UAAU,YAAY;IACpB,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;CAC7C;AAYD,uDAAuD;AACvD,KAAK,OAAO,GAAG,CAAC,SAAS,EAAE,YAAY,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAE/D,yDAAyD;AACzD,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9E,wHAAwH;AACxH,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,kEAAkE;IAClE,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC;CACzC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,YAAY,EACpD,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrB,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,GACzB,eAAe,CAAC,CAAC,CAAC,CAIpB;AAED,8BAAsB,eAAe,CAAC,CAAC,SAAS,YAAY;IAOxD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAP/C,OAAO,CAAC,QAAQ,CAAK;IAErB,mFAAmF;IACnF,SAAS,CAAC,QAAQ,SAAK;gBAGF,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrB,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAG/C;;;OAGG;IACH,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC;IAE1B,SAAS,KAAK,MAAM,IAAI,SAAS,CAEhC;IAED,0FAA0F;IAC1F,SAAS,KAAK,YAAY,IAAI,OAAO,CAEpC;IAED,SAAS,KAAK,cAAc,IAAI,MAAM,CAMrC;IAED,SAAS,KAAK,gBAAgB,IAAI,MAAM,CAEvC;IAED;;;;;OAKG;cACa,aAAa,IAAI,OAAO,CAAC,CAAC,CAAC;IAe3C;;;OAGG;IACH,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,GAAG,YAAY;CAGxE"}
@@ -80,19 +80,20 @@ export class AppApprovalWait {
80
80
  }
81
81
  }
82
82
  /**
83
- * The client polls by itself while the callback shows the instructions, and settles `TanChallenge.resolved` when it is
84
- * done.
83
+ * The client polls by itself while the callback shows the instructions, and settles the `TanChallenge.resolved` of a
84
+ * prompt when it needs no more answer to it.
85
85
  *
86
86
  * `run` shows the prompt, waits the bank's first delay, then asks the bank until it confirms, waiting the interval in
87
- * between. The callback's answer only records what the user did:
87
+ * between. A status answer with new instructions replaces the prompt with one that shows them. The callback's answer
88
+ * only records what the user did, and counts while its prompt is shown:
88
89
  * - `stopped` settles on a cancel, a TAN or a failing callback; the loop stops before its next request.
89
90
  * - `report` settles on a report of the approval, which cuts the current wait short once, though not below a second.
90
91
  * The report closed the prompt, so it is shown anew while the bank has not confirmed yet.
91
92
  * - A user who cannot report the approval has every answer but `TanAnswer.cancelled` ignored.
92
93
  */
93
94
  class PollingWhileShown extends AppApprovalWait {
94
- /** Settles when the client needs no more answer, which `TanChallenge.resolved` tells the callback. */
95
- finished = new Deferred();
95
+ /** Settles when the prompt shown now needs no more answer, which its `TanChallenge.resolved` tells the callback. */
96
+ shown;
96
97
  /** Settles when the user cancels or the callback fails; `stopReason` holds the error that ends the wait. */
97
98
  stopped = new Deferred();
98
99
  stopReason;
@@ -110,20 +111,29 @@ class PollingWhileShown extends AppApprovalWait {
110
111
  if (!isPending(response))
111
112
  return response;
112
113
  this.throwIfStopped();
113
- // The user reported the approval, which closed the prompt, but the bank has not confirmed it yet.
114
- if (this.userConfirms && this.report === undefined)
115
- this.show((challenge = this.nextPrompt(challenge, response)));
114
+ // A report closed the prompt, but the bank has not confirmed the approval yet; or the bank's instructions changed.
115
+ const reported = this.userConfirms && this.report === undefined;
116
+ const next = this.nextPrompt(challenge, response);
117
+ if (reported || next.message !== challenge.message)
118
+ this.show((challenge = next));
116
119
  await this.sleep(this.pollIntervalMs, minPollIntervalMs);
117
120
  }
118
121
  }
119
122
  finally {
120
- this.finished.resolve();
123
+ this.shown?.resolve();
121
124
  }
122
125
  }
123
- /** Shows `challenge` without waiting for the answer. */
126
+ /** Shows `challenge` in place of the prompt before, without waiting for the answer. */
124
127
  show(challenge) {
128
+ this.shown?.resolve();
129
+ const shown = (this.shown = new Deferred());
125
130
  const report = (this.report = this.userConfirms ? new Deferred() : undefined);
126
- void this.hooks.ask(withResolved(challenge, this.finished.promise)).then((answer) => {
131
+ // Asked a microtask later: the app closes the prompt before on its `resolved` first, and then opens this one.
132
+ void Promise.resolve()
133
+ .then(() => this.hooks.ask(withResolved(challenge, shown.promise)))
134
+ .then((answer) => {
135
+ if (shown.isCompleted)
136
+ return;
127
137
  switch (answer.kind) {
128
138
  case 'cancelled':
129
139
  this.stop(new FinTsTanCancelledError());
@@ -138,7 +148,8 @@ class PollingWhileShown extends AppApprovalWait {
138
148
  // The user cannot report the approval: the client waits for the bank.
139
149
  }
140
150
  }, (error) => {
141
- this.stop(error);
151
+ if (!shown.isCompleted)
152
+ this.stop(error);
142
153
  });
143
154
  }
144
155
  stop(error) {
@@ -1 +1 @@
1
- {"version":3,"file":"app-approval.js","sourceRoot":"","sources":["../../src/session/app-approval.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-approval.js","sourceRoot":"","sources":["../../src/session/app-approval.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,6 @@
1
- import type { BankResponse, ProtocolDialog, Query } from './protocol.js';
2
- import type { ResponseHandler } from './response-handler.js';
1
+ import type { Query } from '../v3/queries.js';
3
2
  import type { SessionSetup } from './session-setup.js';
4
- import type { UserPrompts } from './user-prompts.js';
3
+ import type { SignedDialog } from './signed-dialog.js';
5
4
  /**
6
5
  * Keeps one dialog open for all calls and runs the queries in it.
7
6
  *
@@ -9,14 +8,12 @@ import type { UserPrompts } from './user-prompts.js';
9
8
  * client does not repeat the call by itself, since the bank's answer cannot tell a dialog that had ended before from an
10
9
  * order it refuses along with ending the dialog, and a new login may cost the user another approval.
11
10
  */
12
- export declare class DialogRunner<R extends BankResponse, O> {
11
+ export declare class DialogRunner {
13
12
  private readonly setup;
14
- private readonly responses;
15
- private readonly prompts;
16
13
  private dialog;
17
- constructor(setup: SessionSetup<R, O>, responses: ResponseHandler<R>, prompts: UserPrompts);
14
+ constructor(setup: SessionSetup);
18
15
  /** The open dialog, or a new one once the setup is complete and the user has passed strong authentication. */
19
- open(): Promise<ProtocolDialog<R, O>>;
16
+ open(): Promise<SignedDialog>;
20
17
  private login;
21
18
  /** Ends the open dialog, if there is one. */
22
19
  end(): Promise<void>;
@@ -25,10 +22,13 @@ export declare class DialogRunner<R extends BankResponse, O> {
25
22
  *
26
23
  * The query is built once the dialog is open, since building it takes the parameter data.
27
24
  */
28
- query<T>(build: () => Query<R, O, T>): Promise<T>;
29
- /** Sends `order` in `dialog` and completes its approval. */
25
+ query<T>(build: () => Query<T>): Promise<T>;
26
+ /** Sends `order` in `dialog` and completes its approval, which `admitApproval` may refuse (`SignedDialog.send`). */
30
27
  private run;
31
- /** Sends the order built by `order` until the bank has delivered all pages (Formals B.6.3, "Aufsetzpunkt"). */
28
+ /**
29
+ * Sends the order built by `order` until the bank has delivered all pages (Formals B.6.3, "Aufsetzpunkt"), and
30
+ * completes the approval each asks for, that of `maxPageApprovals` further pages at most.
31
+ */
32
32
  private fetchPages;
33
33
  }
34
34
  //# sourceMappingURL=dialog-runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dialog-runner.d.ts","sourceRoot":"","sources":["../../src/session/dialog-runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQrD;;;;;;GAMG;AACH,qBAAa,YAAY,CAAC,CAAC,SAAS,YAAY,EAAE,CAAC;IAI/C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL1B,OAAO,CAAC,MAAM,CAAmC;gBAG9B,KAAK,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EACzB,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,EAC7B,OAAO,EAAE,WAAW;IAGvC,8GAA8G;IACxG,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAS7B,KAAK;IAanB,6CAA6C;IACvC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAM1B;;;;OAIG;IACG,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAOvD,4DAA4D;YAC9C,GAAG;IAajB,+GAA+G;YACjG,UAAU;CAgCzB"}
1
+ {"version":3,"file":"dialog-runner.d.ts","sourceRoot":"","sources":["../../src/session/dialog-runner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAmBvD;;;;;;GAMG;AACH,qBAAa,YAAY;IAGX,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFlC,OAAO,CAAC,MAAM,CAA2B;gBAEZ,KAAK,EAAE,YAAY;IAEhD,8GAA8G;IACxG,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;YASrB,KAAK;IAanB,6CAA6C;IACvC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAM1B;;;;OAIG;IACG,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAOjD,oHAAoH;YACtG,GAAG;IAgBjB;;;OAGG;YACW,UAAU;CAgDzB"}