@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,4 +1,7 @@
1
1
  import { latin1Decode } from '../util/bytes.js';
2
+ import { copyDate } from '../util/dates.js';
3
+ import { frozenWithInspect, inspectCustom } from '../util/inspect.js';
4
+ import { characterReference, trimBlanks } from '../util/text.js';
2
5
  import { challengeInstruction, FlickerCode, hasEmbeddedFlickerCode } from './flicker.js';
3
6
  import { TanImage } from './tan-image.js';
4
7
  /** Challenge text banks send when there is nothing to show. */
@@ -7,7 +10,6 @@ const noChallenge = 'nochallenge';
7
10
  export function challengeText(message) {
8
11
  return message === undefined || message === '' || message === noChallenge ? undefined : message;
9
12
  }
10
- const printableAscii = /^[\x20-\x7E]+$/;
11
13
  const lineBreak = /<br\b[^<>]*>/gi;
12
14
  const blockTag = /<\/?(?:p|li)\b[^<>]*>/gi;
13
15
  /**
@@ -18,6 +20,8 @@ const blockTag = /<\/?(?:p|li)\b[^<>]*>/gi;
18
20
  const formattingTag = /<\/?(?:b|i|u|ul|ol)\b[^<>]*>/gi;
19
21
  const entityReference = /&(#x?[0-9a-fA-F]+|[a-zA-Z]+);/g;
20
22
  const blankLines = /\n{3,}/g;
23
+ /** Longest challenge `plainMessage` formats: far longer than the specification allows (an..2048). */
24
+ const maxFormattedLength = 65_536;
21
25
  const namedEntities = {
22
26
  amp: '&',
23
27
  lt: '<',
@@ -34,27 +38,21 @@ const namedEntities = {
34
38
  szlig: 'ß',
35
39
  euro: '€',
36
40
  };
37
- /**
38
- * The character `name` refers to; `undefined` for an unknown name and for a number that is not a character, as XML
39
- * defines them: `NUL`, half a surrogate pair, or beyond Unicode.
40
- */
41
+ /** The character `name` refers to; `undefined` for an unknown name and for a number that is not a character. */
41
42
  function decodeEntity(name) {
42
- if (name.startsWith('#')) {
43
- const isHex = name.startsWith('#x') || name.startsWith('#X');
44
- const digits = name.substring(isHex ? 2 : 1);
45
- const code = (isHex ? /^[0-9a-fA-F]+$/ : /^[0-9]+$/).test(digits) ? parseInt(digits, isHex ? 16 : 10) : NaN;
46
- const isCharacter = code > 0 && (code < 0xd800 || code > 0xdfff) && code <= 0x10ffff;
47
- return isCharacter ? String.fromCodePoint(code) : undefined;
48
- }
49
- return Object.hasOwn(namedEntities, name) ? namedEntities[name] : undefined;
43
+ return characterReference(name) ?? (Object.hasOwn(namedEntities, name) ? namedEntities[name] : undefined);
50
44
  }
51
45
  /** A request from the bank to authorize an action with a TAN or an app approval. */
52
46
  export class TanChallenge {
53
47
  /** The TAN method the challenge is for. */
54
48
  method;
55
- /** Bank reference of the pending action. */
49
+ /** Bank reference of the pending action, one character per byte the bank sent (ISO 8859-1). */
56
50
  reference;
57
- /** Challenge text as sent by the bank; may contain simple HTML. See `plainMessage`. */
51
+ /**
52
+ * Challenge text as the bank sent it, including the formatting tags of a structured challenge
53
+ * (`TanMethod.structuredChallenge`); `plainMessage` is the text to show. Show either as text only, never as HTML
54
+ * (`innerHTML`, `v-html`): it is the bank's text, not markup to trust.
55
+ */
58
56
  message;
59
57
  /** Raw challenge data for TAN generators (HHD_UC). */
60
58
  hhdUc;
@@ -71,12 +69,15 @@ export class TanChallenge {
71
69
  /** Counts repeated prompts for the same decoupled approval. */
72
70
  attempt;
73
71
  /**
74
- * Settles when the client needs no more answer to this challenge: the bank confirmed the approval, or the approval
75
- * failed, timed out or was cancelled. Set where the client asks the bank by itself while the callback shows the
76
- * challenge (`TanCallback`), `undefined` otherwise. It never rejects.
72
+ * Settles when the client needs no more answer to this challenge: a later prompt for the approval replaces it, or the
73
+ * bank confirmed the approval, or the approval failed, timed out or was cancelled. Set where the client asks the bank
74
+ * by itself while the callback shows the challenge (`TanCallback`), `undefined` otherwise. It never rejects.
77
75
  */
78
76
  resolved;
79
- /** A challenge as the bank sent it. Use `TanChallenge.create` to have a flicker code or image detected in the data. */
77
+ /**
78
+ * A challenge as the bank sent it, with a copy of `validUntil`, which no other challenge shares. Use
79
+ * `TanChallenge.create` to have a flicker code or image detected in the data.
80
+ */
80
81
  constructor(init) {
81
82
  this.method = init.method;
82
83
  this.reference = init.reference;
@@ -85,7 +86,7 @@ export class TanChallenge {
85
86
  this.flickerCode = init.flickerCode;
86
87
  this.image = init.image;
87
88
  this.isDecoupled = init.isDecoupled ?? false;
88
- this.validUntil = init.validUntil;
89
+ this.validUntil = copyDate(init.validUntil);
89
90
  this.tanMediumName = init.tanMediumName;
90
91
  this.attempt = init.attempt ?? 1;
91
92
  this.resolved = init.resolved;
@@ -97,14 +98,11 @@ export class TanChallenge {
97
98
  const data = init.hhdUc !== undefined && init.hhdUc.length > 0 ? init.hhdUc : undefined;
98
99
  if (data !== undefined) {
99
100
  image = TanImage.tryParse(data);
100
- if (image === undefined) {
101
- const text = latin1Decode(data);
102
- if (printableAscii.test(text))
103
- flicker = FlickerCode.tryParse(text);
104
- }
101
+ if (image === undefined)
102
+ flicker = FlickerCode.tryParse(latin1Decode(data));
105
103
  }
106
- else if (init.message !== undefined && hasEmbeddedFlickerCode(init.message)) {
107
- flicker = FlickerCode.tryParse(init.message);
104
+ if (image === undefined && init.message !== undefined && hasEmbeddedFlickerCode(init.message)) {
105
+ flicker ??= FlickerCode.tryParse(init.message);
108
106
  }
109
107
  return new TanChallenge({
110
108
  ...init,
@@ -127,26 +125,41 @@ export class TanChallenge {
127
125
  * A method with structured challenges (`TanMethod.structuredChallenge`) may use the formatting tags the specification
128
126
  * defines. Line breaks, paragraphs and list items become new lines. Bold, italics, underlining and list tags are
129
127
  * removed, and the entity references of such markup are resolved. Any other challenge stays as the bank sent it,
130
- * which is how the specification wants it shown.
128
+ * which is how the specification wants it shown. So does a structured challenge of more than 65,536 characters.
129
+ *
130
+ * Show it as text, such as with `textContent`, or `{{ }}` in Vue, and `white-space: pre-line` for its line breaks;
131
+ * never as HTML (`innerHTML`, `v-html`). It keeps the tags the specification does not define, and `&lt;` becomes
132
+ * `<`, so that as HTML the bank's text could run scripts in the app.
131
133
  */
132
134
  get plainMessage() {
133
135
  const text = this.message;
134
136
  if (text === undefined)
135
137
  return undefined;
136
138
  const instruction = challengeInstruction(text);
137
- if (!this.method.structuredChallenge)
139
+ if (!this.method.structuredChallenge || instruction.length > maxFormattedLength)
138
140
  return instruction;
139
- return instruction
141
+ return trimBlanks(instruction
140
142
  .replace(lineBreak, '\n')
141
143
  .replace(blockTag, '\n')
142
144
  .replace(formattingTag, '')
143
145
  .replace(entityReference, (match, name) => decodeEntity(name) ?? match)
144
- .replace(blankLines, '\n\n')
145
- .trim();
146
+ .replace(blankLines, '\n\n'));
147
+ }
148
+ /**
149
+ * What Node.js's `util.inspect` and `console.log` show: the method, the kind of challenge and the attempt; not the
150
+ * text, the reference, the challenge data, the image or the medium, which may name the user, the account or the order.
151
+ */
152
+ [inspectCustom]() {
153
+ const kinds = [
154
+ ...(this.isDecoupled ? ['decoupled'] : []),
155
+ ...(this.flickerCode === undefined ? [] : ['flicker code']),
156
+ ...(this.image === undefined ? [] : ['image']),
157
+ ];
158
+ return `TanChallenge(${[this.method.toString(), ...kinds, `attempt ${this.attempt}`].join(', ')})`;
146
159
  }
147
160
  }
148
161
  // Copies of a challenge for the prompts of one approval. Not methods of `TanChallenge`, so that they are not part of its
149
- // API; they stand beside the class, so that a field added to it is added here as well.
162
+ // API. The own fields of a challenge are those of `TanChallengeInit`, so a copy spreads it.
150
163
  /** `challenge` again, counted as the next prompt for the same approval, with the bank's new instructions `message`. */
151
164
  export function nextAttempt(challenge, message) {
152
165
  return copyChallenge(challenge, { attempt: challenge.attempt + 1, message: message ?? challenge.message });
@@ -156,27 +169,19 @@ export function withResolved(challenge, resolved) {
156
169
  return copyChallenge(challenge, { resolved });
157
170
  }
158
171
  function copyChallenge(challenge, changes) {
159
- return new TanChallenge({
160
- method: challenge.method,
161
- reference: challenge.reference,
162
- message: challenge.message,
163
- hhdUc: challenge.hhdUc,
164
- flickerCode: challenge.flickerCode,
165
- image: challenge.image,
166
- isDecoupled: challenge.isDecoupled,
167
- validUntil: challenge.validUntil,
168
- tanMediumName: challenge.tanMediumName,
169
- attempt: challenge.attempt,
170
- resolved: challenge.resolved,
171
- ...changes,
172
- });
172
+ const init = challenge;
173
+ return new TanChallenge({ ...init, ...changes });
174
+ }
175
+ /** `answer` frozen, which `util.inspect` shows by its kind, never with the TAN. */
176
+ function frozenAnswer(answer) {
177
+ return frozenWithInspect(answer, (a) => `TanAnswer(${a.kind})`);
173
178
  }
174
- const approvedAnswer = Object.freeze({ kind: 'approved' });
175
- const cancelledAnswer = Object.freeze({ kind: 'cancelled' });
179
+ const approvedAnswer = frozenAnswer({ kind: 'approved' });
180
+ const cancelledAnswer = frozenAnswer({ kind: 'cancelled' });
176
181
  /** The answers a `TanCallback` returns. */
177
182
  export const TanAnswer = Object.freeze({
178
- /** The TAN the user entered; an empty one cancels. */
179
- tan: (tan) => Object.freeze({ kind: 'tan', tan }),
183
+ /** The TAN the user entered; an empty one cancels a TAN challenge (`TanAnswer`). */
184
+ tan: (tan) => frozenAnswer({ kind: 'tan', tan }),
180
185
  /** The user reports the approval in the banking app (`TanChallenge.isDecoupled`); the client then asks the bank. */
181
186
  approved: approvedAnswer,
182
187
  /** The user cancels: the client ends the bank dialog, and the call fails with `FinTsTanCancelledError`. */
@@ -1 +1 @@
1
- {"version":3,"file":"challenge.js","sourceRoot":"","sources":["../../src/tan/challenge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"challenge.js","sourceRoot":"","sources":["../../src/tan/challenge.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { inspectCustom } from '../util/inspect.js';
1
2
  /** Version of the chipTAN HHD specification a flicker code follows: 1.3, or 1.4, which adds control bytes. */
2
3
  export type HhdVersion = 'hhd13' | 'hhd14';
3
4
  /** Whether `message` is a combined challenge with an embedded flicker code. */
@@ -13,11 +14,18 @@ export declare class FlickerCode {
13
14
  private readonly startCode;
14
15
  private readonly dataElements;
15
16
  private constructor();
16
- /** Parses the challenge data sent by the bank; throws `FormatError` if it is not a flicker code. */
17
+ /**
18
+ * Parses the challenge data sent by the bank, the code itself or a combined challenge, which embeds it in the
19
+ * challenge text (`CHLGUC`), wrapped into lines; throws `FormatError` if it is not a flicker code a TAN generator can
20
+ * take: one with characters after the length it states, an empty data element, data other than printable ASCII, or
21
+ * more data than its length fields can state, such as more than 15 bytes in an element in HHD 1.3 or 255 bytes in all.
22
+ */
17
23
  static parse(code: string): FlickerCode;
18
24
  /** Parses `code`, or returns `undefined` if it is not a flicker code. */
19
25
  static tryParse(code: string): FlickerCode | undefined;
20
26
  private static parseLayout;
27
+ /** Whether the code renders as the bank sent it: its data printable ASCII, every length within its field. */
28
+ private get fitsTanGenerator();
21
29
  /** The data of the start code, which opens the challenge. */
22
30
  get startCodeData(): string;
23
31
  /** The first data element of the challenge; `undefined` if the code leaves it out. */
@@ -32,5 +40,7 @@ export declare class FlickerCode {
32
40
  private luhnChecksum;
33
41
  /** Frames to animate: each is `[clock, bit0, bit1, bit2, bit3]` for the five bars. */
34
42
  frames(): boolean[][];
43
+ /** What Node.js's `util.inspect` and `console.log` show: the version, not the data, which may hold IBAN and amount. */
44
+ [inspectCustom](): string;
35
45
  }
36
46
  //# sourceMappingURL=flicker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"flicker.d.ts","sourceRoot":"","sources":["../../src/tan/flicker.ts"],"names":[],"mappings":"AAGA,8GAA8G;AAC9G,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;AAQ3C,+EAA+E;AAC/E,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAK5D;AAiBD,2EAA2E;AAC3E,qBAAa,WAAW;IAEpB,qFAAqF;IACrF,QAAQ,CAAC,OAAO,EAAE,UAAU;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAN/B,OAAO;IASP,oGAAoG;IACpG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;IAavC,yEAAyE;IACzE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAStD,OAAO,CAAC,MAAM,CAAC,WAAW;IAwB1B,6DAA6D;IAC7D,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,sFAAsF;IACtF,IAAI,YAAY,IAAI,MAAM,GAAG,SAAS,CAErC;IAED,uFAAuF;IACvF,IAAI,YAAY,IAAI,MAAM,GAAG,SAAS,CAErC;IAED,sFAAsF;IACtF,IAAI,YAAY,IAAI,MAAM,GAAG,SAAS,CAErC;IAED,4EAA4E;IAC5E,MAAM,IAAI,MAAM;IAKhB,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,YAAY;IAapB,sFAAsF;IACtF,MAAM,IAAI,OAAO,EAAE,EAAE;CAatB"}
1
+ {"version":3,"file":"flicker.d.ts","sourceRoot":"","sources":["../../src/tan/flicker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,8GAA8G;AAC9G,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;AAuB3C,+EAA+E;AAC/E,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D;AA2BD,2EAA2E;AAC3E,qBAAa,WAAW;IAEpB,qFAAqF;IACrF,QAAQ,CAAC,OAAO,EAAE,UAAU;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAN/B,OAAO;IASP;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;IAavC,yEAAyE;IACzE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAStD,OAAO,CAAC,MAAM,CAAC,WAAW;IA2B1B,6GAA6G;IAC7G,OAAO,KAAK,gBAAgB,GAG3B;IAED,6DAA6D;IAC7D,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,sFAAsF;IACtF,IAAI,YAAY,IAAI,MAAM,GAAG,SAAS,CAErC;IAED,uFAAuF;IACvF,IAAI,YAAY,IAAI,MAAM,GAAG,SAAS,CAErC;IAED,sFAAsF;IACtF,IAAI,YAAY,IAAI,MAAM,GAAG,SAAS,CAErC;IAED,4EAA4E;IAC5E,MAAM,IAAI,MAAM;IAKhB,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,YAAY;IAapB,sFAAsF;IACtF,MAAM,IAAI,OAAO,EAAE,EAAE;IAcrB,uHAAuH;IACvH,CAAC,aAAa,CAAC,IAAI,MAAM;CAG1B"}
@@ -1,32 +1,52 @@
1
1
  import { FormatError } from '../util/errors.js';
2
- import { withoutWhitespace } from '../util/text.js';
2
+ import { inspectCustom } from '../util/inspect.js';
3
+ import { trimBlanks, withoutWhitespace } from '../util/text.js';
3
4
  // A combined challenge embeds the flicker code in the challenge text:
4
5
  // `CHLGUC` + four-digit length + code + `CHLGTEXT` + four digits + instruction text.
5
6
  const codeMarker = 'CHLGUC';
6
7
  const textMarker = 'CHLGTEXT';
7
8
  const markerLengthDigits = 4;
9
+ /**
10
+ * The flicker code and the instruction text of a combined challenge; `undefined` unless `message` starts with
11
+ * `CHLGUC`, after blanks, and states the length of the code. White space in the code wraps lines and is dropped.
12
+ */
13
+ function splitCombined(message) {
14
+ const text = trimBlanks(message, { end: false });
15
+ const end = text.indexOf(textMarker);
16
+ if (!text.startsWith(codeMarker) || end < 0)
17
+ return undefined;
18
+ const lengthAndCode = withoutWhitespace(text.substring(codeMarker.length, end));
19
+ const code = lengthAndCode.substring(markerLengthDigits);
20
+ const length = lengthAndCode.substring(0, markerLengthDigits);
21
+ if (!/^[0-9]{4}$/.test(length) || parseInt(length, 10) !== code.length)
22
+ return undefined;
23
+ return { code, instruction: text.substring(end + textMarker.length + markerLengthDigits) };
24
+ }
8
25
  /** Whether `message` is a combined challenge with an embedded flicker code. */
9
26
  export function hasEmbeddedFlickerCode(message) {
10
- return message.includes(codeMarker);
27
+ return splitCombined(message) !== undefined;
11
28
  }
12
29
  /** The instruction text of a combined challenge; `message` itself if it is none. */
13
30
  export function challengeInstruction(message) {
14
- const start = message.indexOf(textMarker);
15
- if (start < 0)
16
- return message;
17
- const textStart = start + textMarker.length + markerLengthDigits;
18
- return textStart < message.length ? message.substring(textStart) : '';
31
+ return splitCombined(message)?.instruction ?? message;
19
32
  }
20
33
  /**
21
34
  * Digit counts of the challenge length (LC) and of the data element lengths (LDE) to try when parsing.
22
35
  *
23
- * HHD 1.4 states the LC with three digits, HHD 1.3 with two.
36
+ * HHD 1.4 states the LC with three digits, HHD 1.3 with two. Some banks state the LDE of HHD 1.4 with three digits;
37
+ * a code that both LDE widths read is taken with two, as the specification has it.
24
38
  */
25
39
  const layouts = [
26
40
  { lcDigits: 3, lengthDigits: 2 },
27
41
  { lcDigits: 3, lengthDigits: 3 },
28
42
  { lcDigits: 2, lengthDigits: 2 },
29
43
  ];
44
+ /** The most bytes a length field states: HHD 1.3 flags ASCII data in bit 4 of it, HHD 1.4 in bit 6. */
45
+ const maxElementLength = { hhd13: 0x0f, hhd14: 0x3f };
46
+ /** The most bytes of a rendered code, which its one-byte length (LC) states. */
47
+ const maxCodeLength = 0xff;
48
+ /** The characters a TAN generator shows; one byte each. */
49
+ const printableAscii = /^[\x20-\x7E]*$/;
30
50
  function hex(value, width) {
31
51
  return value.toString(16).toUpperCase().padStart(width, '0');
32
52
  }
@@ -46,12 +66,17 @@ export class FlickerCode {
46
66
  this.startCode = startCode;
47
67
  this.dataElements = dataElements;
48
68
  }
49
- /** Parses the challenge data sent by the bank; throws `FormatError` if it is not a flicker code. */
69
+ /**
70
+ * Parses the challenge data sent by the bank, the code itself or a combined challenge, which embeds it in the
71
+ * challenge text (`CHLGUC`), wrapped into lines; throws `FormatError` if it is not a flicker code a TAN generator can
72
+ * take: one with characters after the length it states, an empty data element, data other than printable ASCII, or
73
+ * more data than its length fields can state, such as more than 15 bytes in an element in HHD 1.3 or 255 bytes in all.
74
+ */
50
75
  static parse(code) {
51
- const cleaned = extractCode(code);
76
+ const embedded = splitCombined(code)?.code ?? trimBlanks(code);
52
77
  for (const layout of layouts) {
53
78
  try {
54
- return FlickerCode.parseLayout(new Reader(cleaned), layout.lcDigits, layout.lengthDigits);
79
+ return FlickerCode.parseLayout(new Reader(embedded), layout.lcDigits, layout.lengthDigits);
55
80
  }
56
81
  catch (error) {
57
82
  // Not this layout; try the next one.
@@ -81,18 +106,28 @@ export class FlickerCode {
81
106
  const controlBytes = [];
82
107
  if ((startLength & 0x80) !== 0) {
83
108
  do {
109
+ if (controlBytes.length === 10)
110
+ throw new FormatError('Too many control bytes in flicker code');
84
111
  controlBytes.push(challenge.hex(2));
85
- } while ((controlBytes.at(-1) & 0x80) !== 0 && controlBytes.length < 10);
112
+ } while ((controlBytes.at(-1) & 0x80) !== 0);
86
113
  }
87
- const startCode = new StartCode(challenge.take(startLength & 0x3f), controlBytes);
114
+ const startCode = new StartCode(challenge.take(elementLength(startLength & 0x7f)), controlBytes);
88
115
  const dataElements = [];
89
116
  for (let i = 0; i < 3; i++) {
90
- dataElements.push(new DataElement(challenge.isAtEnd ? undefined : challenge.take(challenge.decimal(lengthDigits) & 0x3f)));
117
+ dataElements.push(new DataElement(challenge.isAtEnd ? undefined : challenge.take(elementLength(challenge.decimal(lengthDigits)))));
91
118
  }
92
- // The fields fill exactly the LC characters; a layout that reads them otherwise is the wrong one.
93
- if (!challenge.isAtEnd)
119
+ // Only a layout whose fields fill exactly the LC characters, which end the code, can be the right one.
120
+ if (!challenge.isAtEnd || !code.isAtEnd)
94
121
  throw new FormatError('Flicker code fields do not match its length');
95
- return new FlickerCode(controlBytes.length === 0 ? 'hhd13' : 'hhd14', lc, startCode, dataElements);
122
+ const flicker = new FlickerCode(controlBytes.length === 0 ? 'hhd13' : 'hhd14', lc, startCode, dataElements);
123
+ if (!flicker.fitsTanGenerator)
124
+ throw new FormatError('Flicker code data the TAN generator cannot take');
125
+ return flicker;
126
+ }
127
+ /** Whether the code renders as the bank sent it: its data printable ASCII, every length within its field. */
128
+ get fitsTanGenerator() {
129
+ const elements = [this.startCode, ...this.dataElements];
130
+ return elements.every((element) => element.fits(this.version)) && this.payload().length <= 2 * maxCodeLength;
96
131
  }
97
132
  /** The data of the start code, which opens the challenge. */
98
133
  get startCodeData() {
@@ -155,14 +190,20 @@ export class FlickerCode {
155
190
  }
156
191
  return result;
157
192
  }
193
+ /** What Node.js's `util.inspect` and `console.log` show: the version, not the data, which may hold IBAN and amount. */
194
+ [inspectCustom]() {
195
+ return `FlickerCode(${this.version})`;
196
+ }
158
197
  }
159
- /** The code of a combined challenge, or `code` itself without whitespace. */
160
- function extractCode(code) {
161
- const compact = withoutWhitespace(code);
162
- const start = compact.indexOf(codeMarker);
163
- const codeStart = start + codeMarker.length + markerLengthDigits;
164
- const end = compact.indexOf(textMarker);
165
- return start >= 0 && end >= codeStart ? compact.substring(codeStart, end) : compact;
198
+ /**
199
+ * The length a field of the challenge states for the start code or a data element: 1 to 63 characters. The challenge
200
+ * leaves out an element without data and sets no flag in bit 6, which only the rendered code carries; bit 7 of the start
201
+ * code, which announces control bytes, is masked off before.
202
+ */
203
+ function elementLength(length) {
204
+ if (length === 0 || length > 0x3f)
205
+ throw new FormatError('Invalid data element length');
206
+ return length;
166
207
  }
167
208
  function xorChecksum(payload) {
168
209
  let x = 0;
@@ -222,6 +263,11 @@ class DataElement {
222
263
  get isBcd() {
223
264
  return this.data === undefined || /^[0-9]+$/.test(this.data);
224
265
  }
266
+ /** Whether the data are printable ASCII, and no more bytes than the length field of `version` can state. */
267
+ fits(version) {
268
+ const d = this.data;
269
+ return d === undefined || (printableAscii.test(d) && this.renderData().length / 2 <= maxElementLength[version]);
270
+ }
225
271
  renderData() {
226
272
  const d = this.data;
227
273
  if (d === undefined)
@@ -1 +1 @@
1
- {"version":3,"file":"flicker.js","sourceRoot":"","sources":["../../src/tan/flicker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flicker.js","sourceRoot":"","sources":["../../src/tan/flicker.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { inspectCustom } from '../util/inspect.js';
1
2
  /** An image challenge (photoTAN, QR-TAN) with its MIME type. */
2
3
  export declare class TanImage {
3
4
  /** The media type of `bytes`, for example `image/png`. */
@@ -12,10 +13,13 @@ export declare class TanImage {
12
13
  /**
13
14
  * Reads the bank's image container: a two-byte length and the MIME type, then a two-byte length and the image.
14
15
  *
15
- * `undefined` unless the MIME type is an image type and the container holds the whole image.
16
+ * `undefined` unless the MIME type, in any case, is that of a PNG, JPEG, GIF, WebP or BMP image, and the container
17
+ * holds the whole image, of at least one byte.
16
18
  */
17
19
  static tryParse(data: Uint8Array): TanImage | undefined;
18
- /** The image as a `data:` URL, ready for the `src` of an `<img>`. */
20
+ /** The image as a `data:` URL, for the `src` of an `<img>` only: the bytes are the bank's, whatever their type says. */
19
21
  toDataUrl(): string;
22
+ /** What Node.js's `util.inspect` and `console.log` show: type and size, not the image, which shows the order. */
23
+ [inspectCustom](): string;
20
24
  }
21
25
  //# sourceMappingURL=tan-image.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tan-image.d.ts","sourceRoot":"","sources":["../../src/tan/tan-image.ts"],"names":[],"mappings":"AAIA,gEAAgE;AAChE,qBAAa,QAAQ;IAEjB,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,yBAAyB;IACzB,QAAQ,CAAC,KAAK,EAAE,UAAU;;IAH1B,0DAA0D;IACjD,QAAQ,EAAE,MAAM;IACzB,yBAAyB;IAChB,KAAK,EAAE,UAAU;IAG5B;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS;IAavD,qEAAqE;IACrE,SAAS,IAAI,MAAM;CAGpB"}
1
+ {"version":3,"file":"tan-image.d.ts","sourceRoot":"","sources":["../../src/tan/tan-image.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMnD,gEAAgE;AAChE,qBAAa,QAAQ;IAEjB,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,yBAAyB;IACzB,QAAQ,CAAC,KAAK,EAAE,UAAU;;IAH1B,0DAA0D;IACjD,QAAQ,EAAE,MAAM;IACzB,yBAAyB;IAChB,KAAK,EAAE,UAAU;IAG5B;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS;IAavD,wHAAwH;IACxH,SAAS,IAAI,MAAM;IAInB,iHAAiH;IACjH,CAAC,aAAa,CAAC,IAAI,MAAM;CAG1B"}
@@ -1,5 +1,8 @@
1
1
  import { base64Encode, latin1Decode } from '../util/bytes.js';
2
- const imageMimeType = /^image\/[a-zA-Z0-9.+-]+$/;
2
+ import { inspectCustom } from '../util/inspect.js';
3
+ import { counted } from '../util/text.js';
4
+ /** The formats of photoTAN and QR-TAN images: raster images, which unlike SVG cannot carry scripts. */
5
+ const imageMimeTypes = new Set(['image/png', 'image/jpeg', 'image/gif', 'image/webp', 'image/bmp']);
3
6
  /** An image challenge (photoTAN, QR-TAN) with its MIME type. */
4
7
  export class TanImage {
5
8
  mimeType;
@@ -15,7 +18,8 @@ export class TanImage {
15
18
  /**
16
19
  * Reads the bank's image container: a two-byte length and the MIME type, then a two-byte length and the image.
17
20
  *
18
- * `undefined` unless the MIME type is an image type and the container holds the whole image.
21
+ * `undefined` unless the MIME type, in any case, is that of a PNG, JPEG, GIF, WebP or BMP image, and the container
22
+ * holds the whole image, of at least one byte.
19
23
  */
20
24
  static tryParse(data) {
21
25
  if (data.length < 4)
@@ -23,19 +27,23 @@ export class TanImage {
23
27
  const mimeLength = (data[0] << 8) | data[1];
24
28
  if (mimeLength === 0 || data.length < 2 + mimeLength + 2)
25
29
  return undefined;
26
- const mime = latin1Decode(data.subarray(2, 2 + mimeLength));
27
- if (!imageMimeType.test(mime))
30
+ const mime = latin1Decode(data.subarray(2, 2 + mimeLength)).toLowerCase();
31
+ if (!imageMimeTypes.has(mime))
28
32
  return undefined;
29
33
  const offset = 2 + mimeLength;
30
34
  const imageLength = (data[offset] << 8) | data[offset + 1];
31
35
  const start = offset + 2;
32
- if (start + imageLength > data.length)
36
+ if (imageLength === 0 || start + imageLength > data.length)
33
37
  return undefined;
34
38
  return new TanImage(mime, data.subarray(start, start + imageLength));
35
39
  }
36
- /** The image as a `data:` URL, ready for the `src` of an `<img>`. */
40
+ /** The image as a `data:` URL, for the `src` of an `<img>` only: the bytes are the bank's, whatever their type says. */
37
41
  toDataUrl() {
38
42
  return `data:${this.mimeType};base64,${base64Encode(this.bytes)}`;
39
43
  }
44
+ /** What Node.js's `util.inspect` and `console.log` show: type and size, not the image, which shows the order. */
45
+ [inspectCustom]() {
46
+ return `TanImage(${this.mimeType}, ${counted(this.bytes.length, 'byte')})`;
47
+ }
40
48
  }
41
49
  //# sourceMappingURL=tan-image.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tan-image.js","sourceRoot":"","sources":["../../src/tan/tan-image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE9D,MAAM,aAAa,GAAG,0BAA0B,CAAC;AAEjD,gEAAgE;AAChE,MAAM,OAAO,QAAQ;IAGR;IAEA;IAJX;IACE,0DAA0D;IACjD,QAAgB;IACzB,yBAAyB;IAChB,KAAiB;QAFjB,aAAQ,GAAR,QAAQ,CAAQ;QAEhB,UAAK,GAAL,KAAK,CAAY;IACzB,CAAC;IAEJ;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAgB;QAC9B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QACtC,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QAC9C,IAAI,UAAU,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAC3E,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QAChD,MAAM,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC;QAC9B,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,MAAM,CAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;QACzB,IAAI,KAAK,GAAG,WAAW,GAAG,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QACxD,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,qEAAqE;IACrE,SAAS;QACP,OAAO,QAAQ,IAAI,CAAC,QAAQ,WAAW,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IACpE,CAAC;CACF"}
1
+ {"version":3,"file":"tan-image.js","sourceRoot":"","sources":["../../src/tan/tan-image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,uGAAuG;AACvG,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;AAEpG,gEAAgE;AAChE,MAAM,OAAO,QAAQ;IAGR;IAEA;IAJX;IACE,0DAA0D;IACjD,QAAgB;IACzB,yBAAyB;IAChB,KAAiB;QAFjB,aAAQ,GAAR,QAAQ,CAAQ;QAEhB,UAAK,GAAL,KAAK,CAAY;IACzB,CAAC;IAEJ;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAgB;QAC9B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QACtC,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QAC9C,IAAI,UAAU,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAC3E,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1E,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QAChD,MAAM,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC;QAC9B,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,MAAM,CAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;QACzB,IAAI,WAAW,KAAK,CAAC,IAAI,KAAK,GAAG,WAAW,GAAG,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC7E,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,wHAAwH;IACxH,SAAS;QACP,OAAO,QAAQ,IAAI,CAAC,QAAQ,WAAW,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IACpE,CAAC;IAED,iHAAiH;IACjH,CAAC,aAAa,CAAC;QACb,OAAO,YAAY,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC;IAC7E,CAAC;CACF"}
@@ -1,3 +1,4 @@
1
+ import { inspectCustom } from '../util/inspect.js';
1
2
  /** Whether a TAN method needs the name of a TAN medium. */
2
3
  export type TanMediumRequirement =
3
4
  /** The method takes no medium name. */
@@ -62,7 +63,10 @@ export declare class TanMethod {
62
63
  readonly structuredChallenge: boolean;
63
64
  /** Whether approval happens in a separate app instead of entering a TAN. */
64
65
  readonly decoupled: boolean;
65
- /** Most status requests the bank allows for a decoupled approval; 0 allows any number. */
66
+ /**
67
+ * Most status requests the bank allows for a decoupled approval, 0 for any number. The client sends 60 where the bank
68
+ * states none, and polls for 10 minutes at most.
69
+ */
66
70
  readonly decoupledMaxPolls: number | undefined;
67
71
  /** How long to wait before the first status request of a decoupled approval, in seconds. */
68
72
  readonly decoupledFirstPollDelaySeconds: number | undefined;
@@ -80,6 +84,8 @@ export declare class TanMethod {
80
84
  /** Whether the bank needs the name of a TAN medium for this procedure. */
81
85
  get needsMediumName(): boolean;
82
86
  toString(): string;
87
+ /** What Node.js's `util.inspect` and `console.log` show: `toString`, not the fields. */
88
+ [inspectCustom](): string;
83
89
  }
84
90
  /** State of a TAN medium as reported by the bank. */
85
91
  export type TanMediumStatus =
@@ -136,10 +142,16 @@ export declare class TanMedium {
136
142
  readonly lastUsed: Date | undefined;
137
143
  /** When the medium was activated. */
138
144
  readonly activatedOn: Date | undefined;
145
+ /** Takes copies of the dates of `init`: each medium has its own, which no other one shares. */
139
146
  constructor(init: TanMediumInit);
140
147
  /** Whether the medium is the one in use. */
141
148
  get isActive(): boolean;
142
- /** The name, or the last digits of the card number, so that logs and crash reports do not collect the number. */
149
+ /**
150
+ * The medium class, or the last digits of the card number, and the status: no name, which the user may have given the
151
+ * medium after themselves, such as `Max’s iPhone`, so that logs and crash reports collect neither.
152
+ */
143
153
  toString(): string;
154
+ /** What Node.js's `util.inspect` and `console.log` show: `toString`, not the fields. */
155
+ [inspectCustom](): string;
144
156
  }
145
157
  //# sourceMappingURL=tan-models.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tan-models.d.ts","sourceRoot":"","sources":["../../src/tan/tan-models.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tan-models.d.ts","sourceRoot":"","sources":["../../src/tan/tan-models.ts"],"names":[],"mappings":"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"}