@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 +1 @@
1
- {"version":3,"file":"tan-selection.d.ts","sourceRoot":"","sources":["../../src/session/tan-selection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAe,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACzG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;GAGG;AACH,qBAAa,YAAY,CAAC,CAAC,SAAS,YAAY,EAAE,CAAC;IAW/C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAZ1B,sHAAsH;IACtH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IAEnD,6EAA6E;IAC7E,OAAO,CAAC,aAAa,CAA0B;IAE/C,wFAAwF;IACxF,OAAO,CAAC,cAAc,CAAS;gBAGZ,QAAQ,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAC9B,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,WAAW;IAGvC,sEAAsE;IACtE,IAAI,MAAM,IAAI,SAAS,CAItB;IAED,8EAA8E;IAC9E,MAAM,CAAC,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAKrE;;;;;OAKG;IACH,SAAS,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;IAYjC;;;;;OAKG;IACH,YAAY,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;IAKpC;;;;;;;;;;OAUG;IACH,qBAAqB,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;IAY7C,+DAA+D;IAC/D,OAAO,CAAC,WAAW;IAInB;;;;;OAKG;IACH,SAAS,IAAI,SAAS,EAAE;IAgBxB;;;;;OAKG;IACG,OAAO,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IASpD,4FAA4F;IACtF,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQzC;;;OAGG;IACH,IAAI,cAAc,IAAI,OAAO,CAG5B;IAED;;;OAGG;IACG,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjE;;;;;OAKG;IACH,iBAAiB,IAAI,SAAS,EAAE,GAAG,SAAS;IAM5C,+GAA+G;YACjG,cAAc;CAQ7B"}
1
+ {"version":3,"file":"tan-selection.d.ts","sourceRoot":"","sources":["../../src/session/tan-selection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;GAGG;AACH,qBAAa,YAAY;IAWrB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAZ1B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA8C;IAEnF,wFAAwF;IACxF,OAAO,CAAC,cAAc,CAAS;gBAGZ,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,WAAW;IAGvC,sEAAsE;IACtE,IAAI,MAAM,IAAI,SAAS,CAKtB;IAED,8EAA8E;IAC9E,MAAM,CAAC,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAKrE;;;OAGG;IACH,YAAY,IAAI,IAAI;IAKpB;;;;;OAKG;IACH,SAAS,IAAI,YAAY;IAYzB;;;;;OAKG;IACH,YAAY,IAAI,YAAY;IAK5B;;;;;;;;;;OAUG;IACH,qBAAqB,IAAI,YAAY;IAYrC,+DAA+D;IAC/D,OAAO,CAAC,WAAW;IAInB;;;;;OAKG;IACH,SAAS,IAAI,SAAS,EAAE;IAgBxB;;;;;OAKG;IACG,OAAO,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IASpD,4FAA4F;IACtF,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQzC;;;OAGG;IACH,IAAI,cAAc,IAAI,OAAO,CAG5B;IAED;;;OAGG;IACG,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjE;;;;;;OAMG;IACH,IAAI,aAAa,IAAI,SAAS,EAAE,GAAG,SAAS,CAE3C;IAED,+GAA+G;YACjG,cAAc;CAQ7B"}
@@ -1,6 +1,7 @@
1
- import { FinTsUnsupportedError } from '../core/errors.js';
1
+ import { FinTsTanSetupError } from '../core/errors.js';
2
2
  import { TanMethod } from '../tan/tan-models.js';
3
- import { noReference } from './protocol.js';
3
+ import { FinTs3Dialog } from '../v3/dialog.js';
4
+ import { noReference } from '../v3/segments.js';
4
5
  /**
5
6
  * The TAN method and medium the session's messages are signed with, chosen by the user among what the bank offers and
6
7
  * the user may use, and kept in the session state.
@@ -9,10 +10,11 @@ export class TanSelection {
9
10
  protocol;
10
11
  state;
11
12
  prompts;
12
- /** TAN methods whose media were looked up in this session. A lookup is not repeated, even where it gave no medium. */
13
- mediaLookedUp = new Set();
14
- /** The list the last lookup gave, until `takeLookedUpMedia` hands it out. */
15
- lookedUpMedia;
13
+ /**
14
+ * The lookups of this session that found no medium to choose, by TAN method, with the list each gave; `undefined`
15
+ * where the bank gave none. Such a lookup is not repeated for its method until `select` or `forgetMedium` drops it.
16
+ */
17
+ lookupsWithoutMedium = new Map();
16
18
  /** Whether the bank refused a login signed with the one-step method in this session. */
17
19
  oneStepRefused = false;
18
20
  constructor(protocol, state, prompts) {
@@ -25,27 +27,36 @@ export class TanSelection {
25
27
  const code = this.state.tanMethod;
26
28
  if (code === undefined || code === TanMethod.oneStep.securityFunction)
27
29
  return TanMethod.oneStep;
28
- return this.protocol.bankParameters?.tanMethods.find((m) => m.securityFunction === code) ?? TanMethod.oneStep;
30
+ const methods = this.protocol.parameters.bankParameters?.tanMethods ?? [];
31
+ return methods.find((m) => m.securityFunction === code) ?? TanMethod.oneStep;
29
32
  }
30
33
  /** Switches to `securityFunction` and `tanMedium` for the dialogs to come. */
31
34
  select(securityFunction, tanMedium) {
32
35
  this.state.useTanMethod(securityFunction, tanMedium);
33
- this.mediaLookedUp.delete(securityFunction);
36
+ this.lookupsWithoutMedium.delete(securityFunction);
37
+ }
38
+ /**
39
+ * Forgets the medium in use and the lookups of this session, so that the next login looks the media up anew where the
40
+ * method needs one: the bank may have refused the medium, such as that of a phone the user has replaced.
41
+ */
42
+ forgetMedium() {
43
+ this.state.useTanMedium(undefined);
44
+ this.lookupsWithoutMedium.clear();
34
45
  }
35
46
  /**
36
47
  * A dialog signed with the TAN method in use and its medium.
37
48
  *
38
- * Throws `FinTsUnsupportedError` if the method needs a medium the user has not chosen: the bank would refuse the
49
+ * Throws `FinTsTanSetupError` if the method needs a medium the user has not chosen: the bank would refuse the
39
50
  * login, and the client would not send the PIN again.
40
51
  */
41
52
  newDialog() {
42
53
  const method = this.method;
43
54
  if (this.lacksMedium(method)) {
44
- throw new FinTsUnsupportedError(`The TAN method ${method.name} needs a TAN medium, and the client could not learn one: the bank lists no ` +
55
+ throw new FinTsTanSetupError(`The TAN method ${method.name} needs a TAN medium, and the client could not learn one: the bank lists no ` +
45
56
  'active medium for it, or does not offer or permit the list of TAN media, or rejected it. Pass a medium to ' +
46
57
  'selectTanMethod, or choose another method');
47
58
  }
48
- return this.protocol.newDialog(method, this.state.tanMedium);
59
+ return FinTs3Dialog.signed(this.protocol, method, this.state.tanMedium);
49
60
  }
50
61
  /**
51
62
  * The dialog that looks up the TAN media, signed with the TAN method in use.
@@ -55,7 +66,7 @@ export class TanSelection {
55
66
  */
56
67
  lookupDialog() {
57
68
  const method = this.method;
58
- return this.protocol.newDialog(method, this.lacksMedium(method) ? noReference : this.state.tanMedium);
69
+ return FinTs3Dialog.signed(this.protocol, method, this.lacksMedium(method) ? noReference : this.state.tanMedium);
59
70
  }
60
71
  /**
61
72
  * The synchronization dialog. It runs before the TAN media are looked up, so its method must do without a medium the
@@ -66,18 +77,18 @@ export class TanSelection {
66
77
  * a one-step login;
67
78
  * 3. another two-step method the user may use.
68
79
  *
69
- * Throws `FinTsUnsupportedError` if none does, before the bank could refuse the login.
80
+ * Throws `FinTsTanSetupError` if none does, before the bank could refuse the login.
70
81
  */
71
82
  synchronizationDialog() {
72
83
  const method = this.method;
73
84
  if (!this.lacksMedium(method))
74
- return this.protocol.newDialog(method, this.state.tanMedium);
85
+ return FinTs3Dialog.signed(this.protocol, method, this.state.tanMedium);
75
86
  if (!this.oneStepRefused)
76
- return this.protocol.newDialog(TanMethod.oneStep);
87
+ return FinTs3Dialog.signed(this.protocol, TanMethod.oneStep);
77
88
  const other = this.available().find((m) => !m.isOneStep && !this.lacksMedium(m));
78
89
  if (other !== undefined)
79
- return this.protocol.newDialog(other);
80
- throw new FinTsUnsupportedError(`The bank refuses the one-step method, and the TAN method ${method.name} needs a TAN medium, which the client ` +
90
+ return FinTs3Dialog.signed(this.protocol, other);
91
+ throw new FinTsTanSetupError(`The bank refuses the one-step method, and the TAN method ${method.name} needs a TAN medium, which the client ` +
81
92
  'can look up only after the synchronization. Pass the medium to selectTanMethod, or choose another method');
82
93
  }
83
94
  /** Whether `method` needs a medium the user has not chosen. */
@@ -88,17 +99,17 @@ export class TanSelection {
88
99
  * The two-step TAN methods the bank offers, the user may use and this client can run; the one-step method if there
89
100
  * are none.
90
101
  *
91
- * Throws `FinTsUnsupportedError` if the bank offers the user nothing but methods the client cannot run.
102
+ * Throws `FinTsTanSetupError` if the bank offers the user nothing but methods the client cannot run.
92
103
  */
93
104
  available() {
94
- const bpd = this.protocol.bankParameters;
105
+ const bpd = this.protocol.parameters.bankParameters;
95
106
  if (bpd === undefined)
96
107
  return [TanMethod.oneStep];
97
- const allowed = this.state.allowedMethods ?? this.protocol.userParameters?.allowedTanMethods;
108
+ const allowed = this.state.allowedMethods;
98
109
  const isAllowed = (securityFunction) => allowed === undefined || allowed.length === 0 || allowed.includes(securityFunction);
99
110
  const runnable = bpd.tanMethods.filter((m) => isAllowed(m.securityFunction));
100
111
  if (runnable.length === 0 && bpd.unsupportedTanMethods.some(isAllowed)) {
101
- throw new FinTsUnsupportedError('The bank offers only TAN methods this client cannot run: process variant 1, or methods that need an SMS ' +
112
+ throw new FinTsTanSetupError('The bank offers only TAN methods this client cannot run: process variant 1, or methods that need an SMS ' +
102
113
  'charge account or an HHD_UC answer');
103
114
  }
104
115
  return runnable.length === 0 ? [TanMethod.oneStep] : runnable;
@@ -130,11 +141,11 @@ export class TanSelection {
130
141
  }
131
142
  /**
132
143
  * Whether the media of the method in use have to be looked up: it needs a medium the user has not chosen, and they
133
- * were not looked up for it in this session.
144
+ * were not looked up in vain for it in this session.
134
145
  */
135
146
  get mediumToLookUp() {
136
147
  const method = this.method;
137
- return this.lacksMedium(method) && !this.mediaLookedUp.has(method.securityFunction);
148
+ return this.lacksMedium(method) && !this.lookupsWithoutMedium.has(method.securityFunction);
138
149
  }
139
150
  /**
140
151
  * Lets the user choose the medium of the method in use among the active ones in `media`, the result of a lookup;
@@ -142,20 +153,20 @@ export class TanSelection {
142
153
  */
143
154
  async chooseMedium(media) {
144
155
  const method = this.method;
145
- this.lookedUpMedia = media;
146
- this.state.useTanMedium(media === undefined ? undefined : await this.chooseMediumOf(method, media));
147
- this.mediaLookedUp.add(method.securityFunction);
156
+ const medium = media === undefined ? undefined : await this.chooseMediumOf(method, media);
157
+ this.state.useTanMedium(medium);
158
+ if (medium === undefined)
159
+ this.lookupsWithoutMedium.set(method.securityFunction, media);
148
160
  }
149
161
  /**
150
- * The list of the last lookup, once; `undefined` if there was none since the last time.
162
+ * The list of the lookup that found no medium for the method in use; `undefined` where there was none, or the bank
163
+ * gave no list.
151
164
  *
152
- * `getTanMedia` takes it, so that the list is not asked for twice in a row. It also outlasts a call that failed for
153
- * want of an active medium, so that the app can show the user the list that tells why; later calls ask anew.
165
+ * It outlasts the call that failed for want of the medium, so that `getTanMedia` can show the user the list that tells
166
+ * why: the client neither looks the media up again for the method nor can list them in a dialog without a medium.
154
167
  */
155
- takeLookedUpMedia() {
156
- const media = this.lookedUpMedia;
157
- this.lookedUpMedia = undefined;
158
- return media;
168
+ get lookedUpMedia() {
169
+ return this.lookupsWithoutMedium.get(this.method.securityFunction);
159
170
  }
160
171
  /** The name of the medium the user chooses among the active ones in `media`; `undefined` if none is active. */
161
172
  async chooseMediumOf(method, media) {
@@ -1 +1 @@
1
- {"version":3,"file":"tan-selection.js","sourceRoot":"","sources":["../../src/session/tan-selection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tan-selection.js","sourceRoot":"","sources":["../../src/session/tan-selection.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { BankMessage } from '../core/bank-info.js';
2
2
  import type { FinTsClientOptions, MessageLogger } from '../core/client.js';
3
3
  import type { FinTsFeedback } from '../core/feedback.js';
4
- import type { TanAnswer, TanChallenge } from '../tan/challenge.js';
4
+ import { TanAnswer, type TanChallenge } from '../tan/challenge.js';
5
5
  import type { TanMedium, TanMethod } from '../tan/tan-models.js';
6
6
  /**
7
7
  * Everything a session tells the app, asks of it or waits for: the bank's messages, warnings and log, the TAN callback,
@@ -11,12 +11,17 @@ import type { TanMedium, TanMethod } from '../tan/tan-models.js';
11
11
  * callbacks that only inform the app wait for `reportingCallbackErrors`, as `FinTsClientOptions` promises.
12
12
  */
13
13
  export declare class UserPrompts {
14
- private readonly options;
15
14
  private closed;
16
15
  /** The first error an informing callback threw during the running call. */
17
16
  private callbackError;
18
- /** Aborts the waits under way; each wait removes its abort when it is over. */
17
+ /** Aborts the waits under way; each wait removes its abort when it is over, or when nothing waits for it any more. */
19
18
  private readonly aborts;
19
+ /** The callbacks as the client was built with them, as in the Dart package, whose options are final. */
20
+ private readonly options;
21
+ /**
22
+ * Throws `TypeError` for a `tanCallback` that is no function, and for another callback that is neither a function
23
+ * nor `undefined` or `null`, which mean none.
24
+ */
20
25
  constructor(options: FinTsClientOptions);
21
26
  /** Ends every wait; the client calls it once. */
22
27
  close(): void;
@@ -34,7 +39,10 @@ export declare class UserPrompts {
34
39
  /** Passes the bank's `warning` to the app, unless the client is closed. */
35
40
  showWarning(warning: FinTsFeedback): void;
36
41
  private inform;
37
- /** Shows `challenge` through the TAN callback and returns its answer. */
42
+ /**
43
+ * Shows `challenge` through the TAN callback and returns its answer; rejects with `TypeError` for anything but a
44
+ * `TanAnswer`. Once `TanChallenge.resolved` settles, nothing waits for the answer any more.
45
+ */
38
46
  askTan(challenge: TanChallenge): Promise<TanAnswer>;
39
47
  /** Waits for `delayMs` milliseconds, or until `interrupt` settles. */
40
48
  pause(delayMs: number, interrupt?: Promise<unknown>): Promise<void>;
@@ -51,7 +59,8 @@ export declare class UserPrompts {
51
59
  */
52
60
  chooseMedium(media: readonly TanMedium[]): Promise<TanMedium>;
53
61
  /**
54
- * Starts `wait` and ends it with `FinTsStateError` if `close` is called before it is over.
62
+ * Starts `wait` and ends it with `FinTsStateError` if `close` is called before it is over. Once `unwanted` settles,
63
+ * nothing waits for it any more: it is forgotten then, rather than kept until a callback that never answers does.
55
64
  *
56
65
  * Once the client is closed, the returned promise rejects rather than this function throwing: a caller that starts
57
66
  * several waits at once would otherwise leave the failure of those started first unheard.
@@ -1 +1 @@
1
- {"version":3,"file":"user-prompts.d.ts","sourceRoot":"","sources":["../../src/session/user-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAQjE;;;;;;GAMG;AACH,qBAAa,WAAW;IASV,OAAO,CAAC,QAAQ,CAAC,OAAO;IARpC,OAAO,CAAC,MAAM,CAAS;IAEvB,2EAA2E;IAC3E,OAAO,CAAC,aAAa,CAAiC;IAEtD,+EAA+E;IAC/E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;gBAEnB,OAAO,EAAE,kBAAkB;IAExD,iDAAiD;IACjD,KAAK,IAAI,IAAI;IAMb,wDAAwD;IACxD,SAAS,IAAI,IAAI;IAIjB;;;OAGG;IACG,uBAAuB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IASpE,sGAAsG;IACtG,IAAI,MAAM,IAAI,aAAa,GAAG,SAAS,CAQtC;IAED,2EAA2E;IAC3E,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAS3C,2EAA2E;IAC3E,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IASzC,OAAO,CAAC,MAAM;IAQd,yEAAyE;IACzE,MAAM,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAInD,sEAAsE;IACtE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAcnE;;;;OAIG;IACG,YAAY,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IAUxE;;;;OAIG;IACG,YAAY,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IAUnE;;;;;OAKG;IACH,OAAO,CAAC,YAAY;CAsBrB"}
1
+ {"version":3,"file":"user-prompts.d.ts","sourceRoot":"","sources":["../../src/session/user-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAWjE;;;;;;GAMG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAS;IAEvB,2EAA2E;IAC3E,OAAO,CAAC,aAAa,CAAiC;IAEtD,sHAAsH;IACtH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAEhD,wGAAwG;IACxG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IAEpC;;;OAGG;gBACS,OAAO,EAAE,kBAAkB;IAavC,iDAAiD;IACjD,KAAK,IAAI,IAAI;IAMb,wDAAwD;IACxD,SAAS,IAAI,IAAI;IAIjB;;;OAGG;IACG,uBAAuB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IASpE,sGAAsG;IACtG,IAAI,MAAM,IAAI,aAAa,GAAG,SAAS,CAQtC;IAED,2EAA2E;IAC3E,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAS3C,2EAA2E;IAC3E,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IASzC,OAAO,CAAC,MAAM;IAQd;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAInD,sEAAsE;IACtE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAcnE;;;;OAIG;IACG,YAAY,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IAUxE;;;;OAIG;IACG,YAAY,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IAUnE;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;CA0BrB"}
@@ -1,9 +1,8 @@
1
- import { FinTsStateError } from '../core/errors.js';
1
+ import { clientClosedError } from '../core/errors.js';
2
+ import { TanAnswer } from '../tan/challenge.js';
3
+ import { optionalFunction, requireFunction } from '../util/arguments.js';
2
4
  import { Deferred } from '../util/async.js';
3
5
  import { invalidArgument } from '../util/errors.js';
4
- function closedError() {
5
- return new FinTsStateError('The FinTS client is closed');
6
- }
7
6
  /**
8
7
  * Everything a session tells the app, asks of it or waits for: the bank's messages, warnings and log, the TAN callback,
9
8
  * the selectors and the pauses between status requests.
@@ -12,14 +11,28 @@ function closedError() {
12
11
  * callbacks that only inform the app wait for `reportingCallbackErrors`, as `FinTsClientOptions` promises.
13
12
  */
14
13
  export class UserPrompts {
15
- options;
16
14
  closed = false;
17
15
  /** The first error an informing callback threw during the running call. */
18
16
  callbackError;
19
- /** Aborts the waits under way; each wait removes its abort when it is over. */
17
+ /** Aborts the waits under way; each wait removes its abort when it is over, or when nothing waits for it any more. */
20
18
  aborts = new Set();
19
+ /** The callbacks as the client was built with them, as in the Dart package, whose options are final. */
20
+ options;
21
+ /**
22
+ * Throws `TypeError` for a `tanCallback` that is no function, and for another callback that is neither a function
23
+ * nor `undefined` or `null`, which mean none.
24
+ */
21
25
  constructor(options) {
22
- this.options = options;
26
+ const tanCallback = requireFunction(options.tanCallback, 'tanCallback');
27
+ this.options = {
28
+ // Called on the app's options, which a callback written as a method of them may refer to as `this`.
29
+ tanCallback: (challenge) => tanCallback.call(options, challenge),
30
+ tanMethodSelector: optionalFunction(options.tanMethodSelector, 'tanMethodSelector'),
31
+ tanMediumSelector: optionalFunction(options.tanMediumSelector, 'tanMediumSelector'),
32
+ onBankMessage: optionalFunction(options.onBankMessage, 'onBankMessage'),
33
+ onWarning: optionalFunction(options.onWarning, 'onWarning'),
34
+ logger: optionalFunction(options.logger, 'logger'),
35
+ };
23
36
  }
24
37
  /** Ends every wait; the client calls it once. */
25
38
  close() {
@@ -31,7 +44,7 @@ export class UserPrompts {
31
44
  /** Throws `FinTsStateError` once `close` was called. */
32
45
  checkOpen() {
33
46
  if (this.closed)
34
- throw closedError();
47
+ throw clientClosedError();
35
48
  }
36
49
  /**
37
50
  * Runs `call` and then fails it with the first error an informing callback threw meanwhile; an error of `call` itself
@@ -83,14 +96,17 @@ export class UserPrompts {
83
96
  this.callbackError ??= { error };
84
97
  }
85
98
  }
86
- /** Shows `challenge` through the TAN callback and returns its answer. */
99
+ /**
100
+ * Shows `challenge` through the TAN callback and returns its answer; rejects with `TypeError` for anything but a
101
+ * `TanAnswer`. Once `TanChallenge.resolved` settles, nothing waits for the answer any more.
102
+ */
87
103
  askTan(challenge) {
88
- return this.unlessClosed(() => this.options.tanCallback(challenge));
104
+ return this.unlessClosed(async () => tanAnswerOf(await this.options.tanCallback(challenge)), challenge.resolved);
89
105
  }
90
106
  /** Waits for `delayMs` milliseconds, or until `interrupt` settles. */
91
107
  pause(delayMs, interrupt) {
92
108
  if (this.closed)
93
- return Promise.reject(closedError());
109
+ return Promise.reject(clientClosedError());
94
110
  let timer;
95
111
  const elapsed = new Promise((resolve) => {
96
112
  timer = setTimeout(resolve, Math.max(0, delayMs));
@@ -110,7 +126,7 @@ export class UserPrompts {
110
126
  if (candidates.length === 1 || selector === undefined)
111
127
  return candidates[0];
112
128
  const chosen = await this.unlessClosed(() => selector(candidates));
113
- if (chosen === undefined)
129
+ if (chosen === undefined || chosen === null)
114
130
  return candidates[0];
115
131
  const match = candidates.find((m) => m.securityFunction === chosen.securityFunction);
116
132
  if (match === undefined)
@@ -127,7 +143,7 @@ export class UserPrompts {
127
143
  if (media.length === 1 || selector === undefined)
128
144
  return media[0];
129
145
  const chosen = await this.unlessClosed(() => selector(media));
130
- if (chosen === undefined)
146
+ if (chosen === undefined || chosen === null)
131
147
  return media[0];
132
148
  const match = media.find((m) => m.name === chosen.name);
133
149
  if (match === undefined)
@@ -135,17 +151,21 @@ export class UserPrompts {
135
151
  return match;
136
152
  }
137
153
  /**
138
- * Starts `wait` and ends it with `FinTsStateError` if `close` is called before it is over.
154
+ * Starts `wait` and ends it with `FinTsStateError` if `close` is called before it is over. Once `unwanted` settles,
155
+ * nothing waits for it any more: it is forgotten then, rather than kept until a callback that never answers does.
139
156
  *
140
157
  * Once the client is closed, the returned promise rejects rather than this function throwing: a caller that starts
141
158
  * several waits at once would otherwise leave the failure of those started first unheard.
142
159
  */
143
- unlessClosed(wait) {
160
+ unlessClosed(wait, unwanted) {
144
161
  if (this.closed)
145
- return Promise.reject(closedError());
162
+ return Promise.reject(clientClosedError());
146
163
  const result = new Deferred();
147
164
  const abort = () => {
148
- result.reject(closedError());
165
+ result.reject(clientClosedError());
166
+ };
167
+ const forget = () => {
168
+ this.aborts.delete(abort);
149
169
  };
150
170
  this.aborts.add(abort);
151
171
  // Runs `wait` at once, as far as its first `await`, and turns an error it throws into a rejection.
@@ -156,9 +176,24 @@ export class UserPrompts {
156
176
  }, (error) => {
157
177
  result.reject(error);
158
178
  })
159
- .finally(() => this.aborts.delete(abort))
179
+ .finally(forget)
160
180
  .catch(() => undefined);
181
+ void unwanted?.then(forget, forget);
161
182
  return result.promise;
162
183
  }
163
184
  }
185
+ /**
186
+ * `answer`, a result of the TAN callback, as a `TanAnswer`; throws `TypeError` for anything else, such as the
187
+ * `undefined` of a callback that returns nothing. The answer is read once, so that what was checked is what counts.
188
+ */
189
+ function tanAnswerOf(answer) {
190
+ const { kind, tan } = (typeof answer === 'object' && answer !== null ? answer : {});
191
+ if (kind === 'tan' && typeof tan === 'string')
192
+ return TanAnswer.tan(tan);
193
+ if (kind === 'approved')
194
+ return TanAnswer.approved;
195
+ if (kind === 'cancelled')
196
+ return TanAnswer.cancelled;
197
+ throw invalidArgument('Returned no TanAnswer', 'tanCallback');
198
+ }
164
199
  //# sourceMappingURL=user-prompts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"user-prompts.js","sourceRoot":"","sources":["../../src/session/user-prompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user-prompts.js","sourceRoot":"","sources":["../../src/session/user-prompts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAqB,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAQpD;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IACd,MAAM,GAAG,KAAK,CAAC;IAEvB,2EAA2E;IACnE,aAAa,CAAiC;IAEtD,sHAAsH;IACrG,MAAM,GAAG,IAAI,GAAG,EAAc,CAAC;IAEhD,wGAAwG;IACvF,OAAO,CAAY;IAEpC;;;OAGG;IACH,YAAY,OAA2B;QACrC,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,GAAG;YACb,oGAAoG;YACpG,WAAW,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;YAChE,iBAAiB,EAAE,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;YACnF,iBAAiB,EAAE,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;YACnF,aAAa,EAAE,gBAAgB,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC;YACvE,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC;YAC3D,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;SACnD,CAAC;IACJ,CAAC;IAED,iDAAiD;IACjD,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YAAE,KAAK,EAAE,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED,wDAAwD;IACxD,SAAS;QACP,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,iBAAiB,EAAE,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,uBAAuB,CAAI,IAAsB;QACrD,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;QAC5B,qEAAqE;QACrE,MAAM,OAAO,GAAG,IAAI,CAAC,aAA+C,CAAC;QACrE,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM,OAAO,CAAC,KAAK,CAAC;QAC/C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,sGAAsG;IACtG,IAAI,MAAM;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACnC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC3C,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE;YAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;gBACf,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,eAAe,CAAC,OAAoB;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;gBACf,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,WAAW,CAAC,OAAsB;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACvC,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;gBACf,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,QAAoB;QACjC,IAAI,CAAC;YACH,QAAQ,EAAE,CAAC;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,aAAa,KAAK,EAAE,KAAK,EAAE,CAAC;QACnC,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,SAAuB;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IACnH,CAAC;IAED,sEAAsE;IACtE,KAAK,CAAC,OAAe,EAAE,SAA4B;QACjD,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAC5D,IAAI,KAAgD,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC5C,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QACH,yGAAyG;QACzG,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAC/F,CAAC,OAAO,CAAC,GAAG,EAAE;YACb,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,YAAY,CAAC,UAAgC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;QAChD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,UAAU,CAAC,CAAC,CAAE,CAAC;QAC7E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QACnE,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,UAAU,CAAC,CAAC,CAAE,CAAC;QACnE,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,KAAK,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACrF,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,eAAe,CAAC,8CAA8C,EAAE,mBAAmB,CAAC,CAAC;QACpH,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,YAAY,CAAC,KAA2B;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;QAChD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,CAAC,CAAE,CAAC;QACnE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9D,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC,CAAC,CAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,eAAe,CAAC,6CAA6C,EAAE,mBAAmB,CAAC,CAAC;QACnH,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACK,YAAY,CAAI,IAA0B,EAAE,QAA2B;QAC7E,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAK,CAAC;QACjC,MAAM,KAAK,GAAG,GAAS,EAAE;YACvB,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,GAAS,EAAE;YACxB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvB,mGAAmG;QACnG,MAAM,OAAO,GAAG,CAAC,KAAK,IAAgB,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACnD,OAAO;aACJ,IAAI,CACH,CAAC,KAAK,EAAE,EAAE;YACR,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;YACjB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CACF;aACA,OAAO,CAAC,MAAM,CAAC;aACf,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1B,KAAK,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpC,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;CACF;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,MAAe;IAClC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAGjF,CAAC;IACF,IAAI,IAAI,KAAK,KAAK,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzE,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC,QAAQ,CAAC;IACnD,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,SAAS,CAAC,SAAS,CAAC;IACrD,MAAM,eAAe,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC;AAChE,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { inspectCustom } from '../util/inspect.js';
1
2
  import { FlickerCode } from './flicker.js';
2
3
  import { TanImage } from './tan-image.js';
3
4
  import type { TanMedium, TanMethod } from './tan-models.js';
@@ -21,9 +22,13 @@ export interface TanChallengeInit {
21
22
  export declare class TanChallenge {
22
23
  /** The TAN method the challenge is for. */
23
24
  readonly method: TanMethod;
24
- /** Bank reference of the pending action. */
25
+ /** Bank reference of the pending action, one character per byte the bank sent (ISO 8859-1). */
25
26
  readonly reference: string;
26
- /** Challenge text as sent by the bank; may contain simple HTML. See `plainMessage`. */
27
+ /**
28
+ * Challenge text as the bank sent it, including the formatting tags of a structured challenge
29
+ * (`TanMethod.structuredChallenge`); `plainMessage` is the text to show. Show either as text only, never as HTML
30
+ * (`innerHTML`, `v-html`): it is the bank's text, not markup to trust.
31
+ */
27
32
  readonly message: string | undefined;
28
33
  /** Raw challenge data for TAN generators (HHD_UC). */
29
34
  readonly hhdUc: Uint8Array | undefined;
@@ -40,12 +45,15 @@ export declare class TanChallenge {
40
45
  /** Counts repeated prompts for the same decoupled approval. */
41
46
  readonly attempt: number;
42
47
  /**
43
- * Settles when the client needs no more answer to this challenge: the bank confirmed the approval, or the approval
44
- * failed, timed out or was cancelled. Set where the client asks the bank by itself while the callback shows the
45
- * challenge (`TanCallback`), `undefined` otherwise. It never rejects.
48
+ * Settles when the client needs no more answer to this challenge: a later prompt for the approval replaces it, or the
49
+ * bank confirmed the approval, or the approval failed, timed out or was cancelled. Set where the client asks the bank
50
+ * by itself while the callback shows the challenge (`TanCallback`), `undefined` otherwise. It never rejects.
46
51
  */
47
52
  readonly resolved: Promise<void> | undefined;
48
- /** A challenge as the bank sent it. Use `TanChallenge.create` to have a flicker code or image detected in the data. */
53
+ /**
54
+ * A challenge as the bank sent it, with a copy of `validUntil`, which no other challenge shares. Use
55
+ * `TanChallenge.create` to have a flicker code or image detected in the data.
56
+ */
49
57
  constructor(init: TanChallengeInit);
50
58
  /** Builds a challenge and detects a photoTAN image or chipTAN flicker code in `hhdUc` or `message`. */
51
59
  static create(init: Omit<TanChallengeInit, 'flickerCode' | 'image' | 'resolved'>): TanChallenge;
@@ -60,9 +68,18 @@ export declare class TanChallenge {
60
68
  * A method with structured challenges (`TanMethod.structuredChallenge`) may use the formatting tags the specification
61
69
  * defines. Line breaks, paragraphs and list items become new lines. Bold, italics, underlining and list tags are
62
70
  * removed, and the entity references of such markup are resolved. Any other challenge stays as the bank sent it,
63
- * which is how the specification wants it shown.
71
+ * which is how the specification wants it shown. So does a structured challenge of more than 65,536 characters.
72
+ *
73
+ * Show it as text, such as with `textContent`, or `{{ }}` in Vue, and `white-space: pre-line` for its line breaks;
74
+ * never as HTML (`innerHTML`, `v-html`). It keeps the tags the specification does not define, and `&lt;` becomes
75
+ * `<`, so that as HTML the bank's text could run scripts in the app.
64
76
  */
65
77
  get plainMessage(): string | undefined;
78
+ /**
79
+ * What Node.js's `util.inspect` and `console.log` show: the method, the kind of challenge and the attempt; not the
80
+ * text, the reference, the challenge data, the image or the medium, which may name the user, the account or the order.
81
+ */
82
+ [inspectCustom](): string;
66
83
  }
67
84
  /** `challenge` again, counted as the next prompt for the same approval, with the bank's new instructions `message`. */
68
85
  export declare function nextAttempt(challenge: TanChallenge, message?: string): TanChallenge;
@@ -70,7 +87,10 @@ export declare function nextAttempt(challenge: TanChallenge, message?: string):
70
87
  export declare function withResolved(challenge: TanChallenge, resolved: Promise<void>): TanChallenge;
71
88
  /** The user's answer to a `TanChallenge`: `TanAnswer.tan(…)`, `TanAnswer.approved` or `TanAnswer.cancelled`. */
72
89
  export type TanAnswer =
73
- /** The TAN the user entered; an empty one cancels. */
90
+ /**
91
+ * The TAN the user entered; an empty one cancels a TAN challenge. Blanks around it do not count, and full-width
92
+ * characters, as East Asian input methods type them, count as their ASCII counterparts.
93
+ */
74
94
  {
75
95
  readonly kind: 'tan';
76
96
  readonly tan: string;
@@ -85,30 +105,33 @@ export type TanAnswer =
85
105
  };
86
106
  /** The answers a `TanCallback` returns. */
87
107
  export declare const TanAnswer: Readonly<{
88
- /** The TAN the user entered; an empty one cancels. */
108
+ /** The TAN the user entered; an empty one cancels a TAN challenge (`TanAnswer`). */
89
109
  tan: (tan: string) => TanAnswer;
90
110
  /** The user reports the approval in the banking app (`TanChallenge.isDecoupled`); the client then asks the bank. */
91
- approved: {
92
- readonly kind: "approved";
93
- };
111
+ approved: TanAnswer;
94
112
  /** The user cancels: the client ends the bank dialog, and the call fails with `FinTsTanCancelledError`. */
95
- cancelled: {
96
- readonly kind: "cancelled";
97
- };
113
+ cancelled: TanAnswer;
98
114
  }>;
99
115
  /**
100
116
  * Shows the `TanChallenge` to the user and returns the `TanAnswer`: `TanAnswer.tan(…)` for a TAN, `TanAnswer.approved`
101
117
  * once the user reports an approval in the banking app (`TanChallenge.isDecoupled`), `TanAnswer.cancelled` to cancel
102
- * either. An answer that does not fit the challenge fails the call with a `TypeError`.
118
+ * either.
119
+ *
120
+ * The call fails with a `TypeError`, without reaching the bank, for anything but a `TanAnswer`, for `approved` to a TAN
121
+ * challenge, for a TAN to an app approval the user can report, and for a TAN that the method rules out: longer than
122
+ * `TanMethod.maxTanLength`, with anything but the digits 0 to 9 where `TanMethod.numericTan`, or that FinTS 3.0 cannot
123
+ * send (ISO 8859-1 only). Where the user cannot report the approval (`TanChallenge.manualConfirmation` is `false`),
124
+ * offer no confirm button: any `TanAnswer` but `cancelled` is ignored.
103
125
  *
104
- * Where the client polls the bank by itself, it sets `TanChallenge.resolved`: close the prompt when it settles, the
105
- * callback's result is no longer waited for then. If the bank has not confirmed a reported approval yet, the callback is
106
- * called again with the next `TanChallenge.attempt`. Where `TanChallenge.manualConfirmation` is `false`, offer no
107
- * confirm button: any answer but `TanAnswer.cancelled` is ignored.
126
+ * If the bank has not confirmed a reported approval yet, the callback is called again with the next
127
+ * `TanChallenge.attempt` and the bank's latest instructions. Where the client polls the bank by itself, it sets
128
+ * `TanChallenge.resolved`: close the prompt when it settles, the callback's result is no longer waited for then. New
129
+ * instructions of the bank then replace the open prompt with the next attempt, which the callback gets after the
130
+ * handlers of the earlier prompt's `resolved` have run.
108
131
  */
109
132
  export type TanCallback = (challenge: TanChallenge) => TanAnswer | Promise<TanAnswer>;
110
- /** Picks one of several allowed TAN methods; the first is used when this returns `undefined`. */
111
- export type TanMethodSelector = (methods: readonly TanMethod[]) => TanMethod | undefined | Promise<TanMethod | undefined>;
112
- /** Picks one of several active TAN media; the first is used when this returns `undefined`. */
113
- export type TanMediumSelector = (media: readonly TanMedium[]) => TanMedium | undefined | Promise<TanMedium | undefined>;
133
+ /** Picks one of several allowed TAN methods; the first is used when this returns `undefined` or `null`. */
134
+ export type TanMethodSelector = (methods: readonly TanMethod[]) => TanMethod | null | undefined | Promise<TanMethod | null | undefined>;
135
+ /** Picks one of several active TAN media; the first is used when this returns `undefined` or `null`. */
136
+ export type TanMediumSelector = (media: readonly TanMedium[]) => TanMedium | null | undefined | Promise<TanMedium | null | undefined>;
114
137
  //# sourceMappingURL=challenge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"challenge.d.ts","sourceRoot":"","sources":["../../src/tan/challenge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"challenge.d.ts","sourceRoot":"","sources":["../../src/tan/challenge.ts"],"names":[],"mappings":"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"}