lib-fints 1.0.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 (306) hide show
  1. package/LICENSE +504 -0
  2. package/README.md +216 -0
  3. package/dist/accountBalance.js +1 -0
  4. package/dist/bankAccount.js +34 -0
  5. package/dist/bankAnswer.js +1 -0
  6. package/dist/bankTransaction.js +1 -0
  7. package/dist/bankingInformation.js +1 -0
  8. package/dist/bpd.js +1 -0
  9. package/dist/client.js +165 -0
  10. package/dist/codes.js +79 -0
  11. package/dist/config.js +181 -0
  12. package/dist/dataElements/AlphaNumeric.js +24 -0
  13. package/dist/dataElements/Amount.js +6 -0
  14. package/dist/dataElements/Binary.js +20 -0
  15. package/dist/dataElements/Country.js +6 -0
  16. package/dist/dataElements/Currency.js +6 -0
  17. package/dist/dataElements/Dat.js +18 -0
  18. package/dist/dataElements/DataElement.js +37 -0
  19. package/dist/dataElements/Digits.js +23 -0
  20. package/dist/dataElements/Float.js +21 -0
  21. package/dist/dataElements/Identification.js +6 -0
  22. package/dist/dataElements/Numeric.js +26 -0
  23. package/dist/dataElements/Text.js +21 -0
  24. package/dist/dataElements/Time.js +18 -0
  25. package/dist/dataElements/YesNo.js +18 -0
  26. package/dist/dataGroups/Account.js +12 -0
  27. package/dist/dataGroups/Balance.js +15 -0
  28. package/dist/dataGroups/BankIdentification.js +8 -0
  29. package/dist/dataGroups/DataGroup.js +54 -0
  30. package/dist/dataGroups/InternationalAccount.js +15 -0
  31. package/dist/dataGroups/Money.js +8 -0
  32. package/dist/dataGroups/RefMessage.js +8 -0
  33. package/dist/dataGroups/TimeStamp.js +8 -0
  34. package/dist/decoder.js +97 -0
  35. package/dist/dialog.js +189 -0
  36. package/dist/encoder.js +47 -0
  37. package/dist/format.js +6 -0
  38. package/dist/httpClient.js +41 -0
  39. package/dist/httpClientNode.js +59 -0
  40. package/dist/index.js +15 -0
  41. package/dist/interactions/balanceInteraction.js +47 -0
  42. package/dist/interactions/customerInteraction.js +55 -0
  43. package/dist/interactions/initDialogInteraction.js +155 -0
  44. package/dist/interactions/statementInteraction.js +44 -0
  45. package/dist/interactions/tanMediaInteraction.js +27 -0
  46. package/dist/message.js +198 -0
  47. package/dist/mt940parser.js +307 -0
  48. package/dist/parser.js +30 -0
  49. package/dist/partedSegment.js +8 -0
  50. package/dist/segment.js +59 -0
  51. package/dist/segmentDefinition.js +11 -0
  52. package/dist/segmentHeader.js +13 -0
  53. package/dist/segments/HIBPA.js +23 -0
  54. package/dist/segments/HIKAZ.js +13 -0
  55. package/dist/segments/HIKAZS.js +13 -0
  56. package/dist/segments/HIKIM.js +11 -0
  57. package/dist/segments/HIKOM.js +23 -0
  58. package/dist/segments/HIPINS.js +22 -0
  59. package/dist/segments/HIRMG.js +20 -0
  60. package/dist/segments/HIRMS.js +20 -0
  61. package/dist/segments/HISAL.js +31 -0
  62. package/dist/segments/HISYN.js +16 -0
  63. package/dist/segments/HITAB.js +37 -0
  64. package/dist/segments/HITAN.js +23 -0
  65. package/dist/segments/HITANS.js +48 -0
  66. package/dist/segments/HIUPA.js +18 -0
  67. package/dist/segments/HIUPD.js +34 -0
  68. package/dist/segments/HKEND.js +11 -0
  69. package/dist/segments/HKIDN.js +18 -0
  70. package/dist/segments/HKKAZ.js +24 -0
  71. package/dist/segments/HKSAL.js +21 -0
  72. package/dist/segments/HKSYN.js +11 -0
  73. package/dist/segments/HKTAB.js +12 -0
  74. package/dist/segments/HKTAN.js +35 -0
  75. package/dist/segments/HKVVB.js +18 -0
  76. package/dist/segments/HNHBK.js +20 -0
  77. package/dist/segments/HNHBS.js +11 -0
  78. package/dist/segments/HNSHA.js +17 -0
  79. package/dist/segments/HNSHK.js +43 -0
  80. package/dist/segments/HNVSD.js +11 -0
  81. package/dist/segments/HNVSK.js +45 -0
  82. package/dist/segments/businessTransactionParameter.js +20 -0
  83. package/dist/segments/registry.js +71 -0
  84. package/dist/tanMethod.js +1 -0
  85. package/dist/tests/HIBPA.test.js +26 -0
  86. package/dist/tests/HIPINS.test.js +14 -0
  87. package/dist/tests/HIRMG.test.js +24 -0
  88. package/dist/tests/HITAB.test.js +19 -0
  89. package/dist/tests/HITANS.test.js +19 -0
  90. package/dist/tests/HIUPA.test.js +11 -0
  91. package/dist/tests/HIUPD.test.js +11 -0
  92. package/dist/tests/HKIDN.test.js +22 -0
  93. package/dist/tests/HKSAL.test.js +45 -0
  94. package/dist/tests/HKTAN.test.js +21 -0
  95. package/dist/tests/HNSHK.test.js +11 -0
  96. package/dist/tests/HNVSK.test.js +11 -0
  97. package/dist/tests/client.test.js +33 -0
  98. package/dist/tests/datatypes.test.js +8 -0
  99. package/dist/tests/message.test.js +80 -0
  100. package/dist/tests/mt940parser.test.js +56 -0
  101. package/dist/tests/parser.test.js +20 -0
  102. package/dist/types/accountBalance.d.ts +9 -0
  103. package/dist/types/accountBalance.d.ts.map +1 -0
  104. package/dist/types/bankAccount.d.ts +27 -0
  105. package/dist/types/bankAccount.d.ts.map +1 -0
  106. package/dist/types/bankAnswer.d.ts +6 -0
  107. package/dist/types/bankAnswer.d.ts.map +1 -0
  108. package/dist/types/bankTransaction.d.ts +6 -0
  109. package/dist/types/bankTransaction.d.ts.map +1 -0
  110. package/dist/types/bankingInformation.d.ts +20 -0
  111. package/dist/types/bankingInformation.d.ts.map +1 -0
  112. package/dist/types/bpd.d.ts +17 -0
  113. package/dist/types/bpd.d.ts.map +1 -0
  114. package/dist/types/client.d.ts +86 -0
  115. package/dist/types/client.d.ts.map +1 -0
  116. package/dist/types/codes.d.ts +68 -0
  117. package/dist/types/codes.d.ts.map +1 -0
  118. package/dist/types/config.d.ts +99 -0
  119. package/dist/types/config.d.ts.map +1 -0
  120. package/dist/types/dataElements/AlphaNumeric.d.ts +8 -0
  121. package/dist/types/dataElements/AlphaNumeric.d.ts.map +1 -0
  122. package/dist/types/dataElements/Amount.d.ts +5 -0
  123. package/dist/types/dataElements/Amount.d.ts.map +1 -0
  124. package/dist/types/dataElements/Binary.d.ts +8 -0
  125. package/dist/types/dataElements/Binary.d.ts.map +1 -0
  126. package/dist/types/dataElements/Country.d.ts +5 -0
  127. package/dist/types/dataElements/Country.d.ts.map +1 -0
  128. package/dist/types/dataElements/Currency.d.ts +5 -0
  129. package/dist/types/dataElements/Currency.d.ts.map +1 -0
  130. package/dist/types/dataElements/Dat.d.ts +8 -0
  131. package/dist/types/dataElements/Dat.d.ts.map +1 -0
  132. package/dist/types/dataElements/DataElement.d.ts +14 -0
  133. package/dist/types/dataElements/DataElement.d.ts.map +1 -0
  134. package/dist/types/dataElements/Digits.d.ts +8 -0
  135. package/dist/types/dataElements/Digits.d.ts.map +1 -0
  136. package/dist/types/dataElements/Float.d.ts +8 -0
  137. package/dist/types/dataElements/Float.d.ts.map +1 -0
  138. package/dist/types/dataElements/Identification.d.ts +5 -0
  139. package/dist/types/dataElements/Identification.d.ts.map +1 -0
  140. package/dist/types/dataElements/Numeric.d.ts +9 -0
  141. package/dist/types/dataElements/Numeric.d.ts.map +1 -0
  142. package/dist/types/dataElements/Text.d.ts +8 -0
  143. package/dist/types/dataElements/Text.d.ts.map +1 -0
  144. package/dist/types/dataElements/Time.d.ts +8 -0
  145. package/dist/types/dataElements/Time.d.ts.map +1 -0
  146. package/dist/types/dataElements/YesNo.d.ts +7 -0
  147. package/dist/types/dataElements/YesNo.d.ts.map +1 -0
  148. package/dist/types/dataGroups/Account.d.ts +14 -0
  149. package/dist/types/dataGroups/Account.d.ts.map +1 -0
  150. package/dist/types/dataGroups/Balance.d.ts +12 -0
  151. package/dist/types/dataGroups/Balance.d.ts.map +1 -0
  152. package/dist/types/dataGroups/BankIdentification.d.ts +5 -0
  153. package/dist/types/dataGroups/BankIdentification.d.ts.map +1 -0
  154. package/dist/types/dataGroups/DataGroup.d.ts +10 -0
  155. package/dist/types/dataGroups/DataGroup.d.ts.map +1 -0
  156. package/dist/types/dataGroups/InternationalAccount.d.ts +13 -0
  157. package/dist/types/dataGroups/InternationalAccount.d.ts.map +1 -0
  158. package/dist/types/dataGroups/Money.d.ts +9 -0
  159. package/dist/types/dataGroups/Money.d.ts.map +1 -0
  160. package/dist/types/dataGroups/RefMessage.d.ts +9 -0
  161. package/dist/types/dataGroups/RefMessage.d.ts.map +1 -0
  162. package/dist/types/dataGroups/TimeStamp.d.ts +9 -0
  163. package/dist/types/dataGroups/TimeStamp.d.ts.map +1 -0
  164. package/dist/types/decoder.d.ts +4 -0
  165. package/dist/types/decoder.d.ts.map +1 -0
  166. package/dist/types/dialog.d.ts +21 -0
  167. package/dist/types/dialog.d.ts.map +1 -0
  168. package/dist/types/encoder.d.ts +3 -0
  169. package/dist/types/encoder.d.ts.map +1 -0
  170. package/dist/types/format.d.ts +3 -0
  171. package/dist/types/format.d.ts.map +1 -0
  172. package/dist/types/httpClient.d.ts +8 -0
  173. package/dist/types/httpClient.d.ts.map +1 -0
  174. package/dist/types/httpClientNode.d.ts +8 -0
  175. package/dist/types/httpClientNode.d.ts.map +1 -0
  176. package/dist/types/index.d.ts +17 -0
  177. package/dist/types/index.d.ts.map +1 -0
  178. package/dist/types/interactions/balanceInteraction.d.ts +15 -0
  179. package/dist/types/interactions/balanceInteraction.d.ts.map +1 -0
  180. package/dist/types/interactions/customerInteraction.d.ts +41 -0
  181. package/dist/types/interactions/customerInteraction.d.ts.map +1 -0
  182. package/dist/types/interactions/initDialogInteraction.d.ts +16 -0
  183. package/dist/types/interactions/initDialogInteraction.d.ts.map +1 -0
  184. package/dist/types/interactions/statementInteraction.d.ts +17 -0
  185. package/dist/types/interactions/statementInteraction.d.ts.map +1 -0
  186. package/dist/types/interactions/tanMediaInteraction.d.ts +13 -0
  187. package/dist/types/interactions/tanMediaInteraction.d.ts.map +1 -0
  188. package/dist/types/message.d.ts +30 -0
  189. package/dist/types/message.d.ts.map +1 -0
  190. package/dist/types/mt940parser.d.ts +83 -0
  191. package/dist/types/mt940parser.d.ts.map +1 -0
  192. package/dist/types/parser.d.ts +2 -0
  193. package/dist/types/parser.d.ts.map +1 -0
  194. package/dist/types/partedSegment.d.ts +14 -0
  195. package/dist/types/partedSegment.d.ts.map +1 -0
  196. package/dist/types/segment.d.ts +11 -0
  197. package/dist/types/segment.d.ts.map +1 -0
  198. package/dist/types/segmentDefinition.d.ts +11 -0
  199. package/dist/types/segmentDefinition.d.ts.map +1 -0
  200. package/dist/types/segmentHeader.d.ts +11 -0
  201. package/dist/types/segmentHeader.d.ts.map +1 -0
  202. package/dist/types/segments/HIBPA.d.ts +27 -0
  203. package/dist/types/segments/HIBPA.d.ts.map +1 -0
  204. package/dist/types/segments/HIKAZ.d.ts +16 -0
  205. package/dist/types/segments/HIKAZ.d.ts.map +1 -0
  206. package/dist/types/segments/HIKAZS.d.ts +16 -0
  207. package/dist/types/segments/HIKAZS.d.ts.map +1 -0
  208. package/dist/types/segments/HIKIM.d.ts +17 -0
  209. package/dist/types/segments/HIKIM.d.ts.map +1 -0
  210. package/dist/types/segments/HIKOM.d.ts +27 -0
  211. package/dist/types/segments/HIKOM.d.ts.map +1 -0
  212. package/dist/types/segments/HIPINS.d.ts +23 -0
  213. package/dist/types/segments/HIPINS.d.ts.map +1 -0
  214. package/dist/types/segments/HIRMG.d.ts +22 -0
  215. package/dist/types/segments/HIRMG.d.ts.map +1 -0
  216. package/dist/types/segments/HIRMS.d.ts +17 -0
  217. package/dist/types/segments/HIRMS.d.ts.map +1 -0
  218. package/dist/types/segments/HISAL.d.ts +32 -0
  219. package/dist/types/segments/HISAL.d.ts.map +1 -0
  220. package/dist/types/segments/HISYN.d.ts +19 -0
  221. package/dist/types/segments/HISYN.d.ts.map +1 -0
  222. package/dist/types/segments/HITAB.d.ts +39 -0
  223. package/dist/types/segments/HITAB.d.ts.map +1 -0
  224. package/dist/types/segments/HITAN.d.ts +25 -0
  225. package/dist/types/segments/HITAN.d.ts.map +1 -0
  226. package/dist/types/segments/HITANS.d.ts +41 -0
  227. package/dist/types/segments/HITANS.d.ts.map +1 -0
  228. package/dist/types/segments/HIUPA.d.ts +21 -0
  229. package/dist/types/segments/HIUPA.d.ts.map +1 -0
  230. package/dist/types/segments/HIUPD.d.ts +42 -0
  231. package/dist/types/segments/HIUPD.d.ts.map +1 -0
  232. package/dist/types/segments/HKEND.d.ts +16 -0
  233. package/dist/types/segments/HKEND.d.ts.map +1 -0
  234. package/dist/types/segments/HKIDN.d.ts +22 -0
  235. package/dist/types/segments/HKIDN.d.ts.map +1 -0
  236. package/dist/types/segments/HKKAZ.d.ts +25 -0
  237. package/dist/types/segments/HKKAZ.d.ts.map +1 -0
  238. package/dist/types/segments/HKSAL.d.ts +22 -0
  239. package/dist/types/segments/HKSAL.d.ts.map +1 -0
  240. package/dist/types/segments/HKSYN.d.ts +17 -0
  241. package/dist/types/segments/HKSYN.d.ts.map +1 -0
  242. package/dist/types/segments/HKTAB.d.ts +19 -0
  243. package/dist/types/segments/HKTAB.d.ts.map +1 -0
  244. package/dist/types/segments/HKTAN.d.ts +39 -0
  245. package/dist/types/segments/HKTAN.d.ts.map +1 -0
  246. package/dist/types/segments/HKVVB.d.ts +22 -0
  247. package/dist/types/segments/HKVVB.d.ts.map +1 -0
  248. package/dist/types/segments/HNHBK.d.ts +23 -0
  249. package/dist/types/segments/HNHBK.d.ts.map +1 -0
  250. package/dist/types/segments/HNHBS.d.ts +16 -0
  251. package/dist/types/segments/HNHBS.d.ts.map +1 -0
  252. package/dist/types/segments/HNSHA.d.ts +24 -0
  253. package/dist/types/segments/HNSHA.d.ts.map +1 -0
  254. package/dist/types/segments/HNSHK.d.ts +66 -0
  255. package/dist/types/segments/HNSHK.d.ts.map +1 -0
  256. package/dist/types/segments/HNVSD.d.ts +20 -0
  257. package/dist/types/segments/HNVSD.d.ts.map +1 -0
  258. package/dist/types/segments/HNVSK.d.ts +40 -0
  259. package/dist/types/segments/HNVSK.d.ts.map +1 -0
  260. package/dist/types/segments/businessTransactionParameter.d.ts +18 -0
  261. package/dist/types/segments/businessTransactionParameter.d.ts.map +1 -0
  262. package/dist/types/segments/registry.d.ts +4 -0
  263. package/dist/types/segments/registry.d.ts.map +1 -0
  264. package/dist/types/tanMethod.d.ts +10 -0
  265. package/dist/types/tanMethod.d.ts.map +1 -0
  266. package/dist/types/tests/HIBPA.test.d.ts +2 -0
  267. package/dist/types/tests/HIBPA.test.d.ts.map +1 -0
  268. package/dist/types/tests/HIPINS.test.d.ts +2 -0
  269. package/dist/types/tests/HIPINS.test.d.ts.map +1 -0
  270. package/dist/types/tests/HIRMG.test.d.ts +2 -0
  271. package/dist/types/tests/HIRMG.test.d.ts.map +1 -0
  272. package/dist/types/tests/HITAB.test.d.ts +2 -0
  273. package/dist/types/tests/HITAB.test.d.ts.map +1 -0
  274. package/dist/types/tests/HITANS.test.d.ts +2 -0
  275. package/dist/types/tests/HITANS.test.d.ts.map +1 -0
  276. package/dist/types/tests/HIUPA.test.d.ts +2 -0
  277. package/dist/types/tests/HIUPA.test.d.ts.map +1 -0
  278. package/dist/types/tests/HIUPD.test.d.ts +2 -0
  279. package/dist/types/tests/HIUPD.test.d.ts.map +1 -0
  280. package/dist/types/tests/HKIDN.test.d.ts +2 -0
  281. package/dist/types/tests/HKIDN.test.d.ts.map +1 -0
  282. package/dist/types/tests/HKSAL.test.d.ts +2 -0
  283. package/dist/types/tests/HKSAL.test.d.ts.map +1 -0
  284. package/dist/types/tests/HKTAN.test.d.ts +2 -0
  285. package/dist/types/tests/HKTAN.test.d.ts.map +1 -0
  286. package/dist/types/tests/HNSHK.test.d.ts +2 -0
  287. package/dist/types/tests/HNSHK.test.d.ts.map +1 -0
  288. package/dist/types/tests/HNVSK.test.d.ts +2 -0
  289. package/dist/types/tests/HNVSK.test.d.ts.map +1 -0
  290. package/dist/types/tests/client.test.d.ts +2 -0
  291. package/dist/types/tests/client.test.d.ts.map +1 -0
  292. package/dist/types/tests/datatypes.test.d.ts +2 -0
  293. package/dist/types/tests/datatypes.test.d.ts.map +1 -0
  294. package/dist/types/tests/message.test.d.ts +2 -0
  295. package/dist/types/tests/message.test.d.ts.map +1 -0
  296. package/dist/types/tests/mt940parser.test.d.ts +2 -0
  297. package/dist/types/tests/mt940parser.test.d.ts.map +1 -0
  298. package/dist/types/tests/parser.test.d.ts +2 -0
  299. package/dist/types/tests/parser.test.d.ts.map +1 -0
  300. package/dist/types/unknownSegment.d.ts +14 -0
  301. package/dist/types/unknownSegment.d.ts.map +1 -0
  302. package/dist/types/upd.d.ts +8 -0
  303. package/dist/types/upd.d.ts.map +1 -0
  304. package/dist/unknownSegment.js +8 -0
  305. package/dist/upd.js +1 -0
  306. package/package.json +45 -0
@@ -0,0 +1,19 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { registerSegments } from '../segments/registry.js';
3
+ import { HITAB } from '../segments/HITAB.js';
4
+ import { decode, encode } from '../segment.js';
5
+ registerSegments();
6
+ describe('HITAB', () => {
7
+ it('decodes correctly', () => {
8
+ const text = "HITAB:5:4:3+0+A:1:::::::::::Media1::::::::+A:1:::::::::::Media2::::::::'";
9
+ const segment = decode(text);
10
+ expect(segment.mediaList.length).toBe(2);
11
+ expect(segment.mediaList[0].name).toBe('Media1');
12
+ });
13
+ it('decode and encode roundtrip matches', () => {
14
+ HITAB.Id;
15
+ const text = "HITAB:5:4:3+0+A:1:::::::::::Greenwood::::::::+A:1:::::::::::iPhone::::::::'";
16
+ const segment = decode(text);
17
+ expect(encode(segment)).toBe(text);
18
+ });
19
+ });
@@ -0,0 +1,19 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { registerSegments } from '../segments/registry.js';
3
+ import { decode, encode } from '../segment.js';
4
+ registerSegments();
5
+ describe('HITANS', () => {
6
+ it('decode and encode roundtrip matches', () => {
7
+ const text = "HITANS:163:6:4+1+1+1+J:N:0:910:2:HHD1.3.0:::chipTAN manuell:6:1:TAN-Nummer:3:J:2:N:0:0:N:N:00:0:N:1:911:2:HHD1.3.2OPT:HHDOPT1:1.3.2:chipTAN optisch:6:1:TAN-Nummer:3:J:2:N:0:0:N:N:00:0:N:1:912:2:HHD1.3.2USB:HHDUSB1:1.3.2:chipTAN-USB:6:1:TAN-Nummer:3:J:2:N:0:0:N:N:00:0:N:1:913:2:Q1S:Secoder_UC:1.2.0:chipTAN-QR:6:1:TAN-Nummer:3:J:2:N:0:0:N:N:00:0:N:1:920:2:smsTAN:::smsTAN:6:1:TAN-Nummer:3:J:2:N:0:0:N:N:00:2:N:5:921:2:TAN2go:::TAN2go:6:1:TAN-Nummer:3:J:2:N:0:0:N:N:00:2:N:2:900:2:iTAN:::iTAN:6:1:TAN-Nummer:3:J:2:N:0:0:N:N:00:0:N:0'";
8
+ const segment = decode(text);
9
+ expect(segment.params.oneStepAllowed).toBe(true);
10
+ expect(segment.params.tanMethods[0].methodName).toBe('chipTAN manuell');
11
+ expect(encode(segment)).toBe(text);
12
+ });
13
+ it('decodes v1', () => {
14
+ const text = 'HITANS:163:1:4+1+1+0+J:N:0:0:900:2:iTAN:iTAN:6:1:Index:3:1:N:N';
15
+ const segment = decode(text);
16
+ expect(segment.params.tanMethods[0].methodId).toBe('iTAN');
17
+ expect(segment.params.tanMethods[0].methodName).toBe('iTAN');
18
+ });
19
+ });
@@ -0,0 +1,11 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { registerSegments } from '../segments/registry.js';
3
+ import { decode, encode } from '../segment.js';
4
+ registerSegments();
5
+ describe('HIUPA', () => {
6
+ it('decode and encode roundtrip matches', () => {
7
+ const text = "HIUPA:165:4:4+1197651234+0+0++PERSNR0010488691234'";
8
+ const segment = decode(text);
9
+ expect(encode(segment)).toBe(text);
10
+ });
11
+ });
@@ -0,0 +1,11 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { registerSegments } from '../segments/registry.js';
3
+ import { decode, encode } from '../segment.js';
4
+ registerSegments();
5
+ describe('HIUPD', () => {
6
+ it('decode and encode roundtrip matches', () => {
7
+ const text = `HIUPD:167:6:4+1234567890::280:12030000+DE19120300001234567890+1197651234+1+EUR+KONTO INHABER 1+KONTO INHABER 2+Sichteinlagen++HKSAK:1+HKISA:1+HKSSP:1+HKPAE:1+HKTAB:1+HKTAZ:1+HKTML:1+HKSPA:1+HKCAZ:1+HKCCM:1+HKCCS:1+HKCDB:1+HKCDE:1+HKCDL:1+HKCDN:1+HKCDU:1+HKCMB:1+HKCME:1+HKCML:1+HKCSA:1+HKCSB:1+HKCSE:1+HKCSL:1+HKDSB:1+HKDSW:1+HKEKA:1+DKPSA:1+DKPSP:1+HKTAN:1+DKANA:1+DKANL:1+DKKBA:1+DKSID:1+DKBAZ:1+DKZDF:1+DKZDL:1+HKFRD:1+HKAUB:1+HKKAZ:1+HKKIF:1+HKSAL:1+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++{"umsltzt"?:"2024-01-20-14.50.31.849705"}'`;
8
+ const segment = decode(text);
9
+ expect(encode(segment)).toBe(text);
10
+ });
11
+ });
@@ -0,0 +1,22 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { HKIDN } from '../segments/HKIDN.js';
3
+ import { registerSegments } from '../segments/registry.js';
4
+ import { decode, encode } from '../segment.js';
5
+ registerSegments();
6
+ describe('HKIDN', () => {
7
+ it('encodes correctly', () => {
8
+ const segment = {
9
+ header: { segId: HKIDN.Id, segNr: 1, version: 2 },
10
+ bank: { country: 280, bankId: '12030000' },
11
+ systemId: '4711',
12
+ customerId: '1022334455_p',
13
+ systemIdRequired: 1,
14
+ };
15
+ expect(encode(segment)).toBe("HKIDN:1:2+280:12030000+1022334455_p+4711+1'");
16
+ });
17
+ it('decode and encode roundtrip matches', () => {
18
+ const text = "HKIDN:1:2+280:12030000+1022334455_p+4711+1'";
19
+ const segment = decode(text);
20
+ expect(encode(segment)).toBe(text);
21
+ });
22
+ });
@@ -0,0 +1,45 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { registerSegments } from '../segments/registry.js';
3
+ import { HKSAL } from '../segments/HKSAL.js';
4
+ import { decode, encode } from '../segment.js';
5
+ registerSegments();
6
+ describe('HKSAL v8', () => {
7
+ it('encode', () => {
8
+ const segment = {
9
+ header: { segId: HKSAL.Id, segNr: 1, version: 8 },
10
+ allAccounts: false,
11
+ account: {
12
+ iban: 'DE991234567123456',
13
+ bic: 'BANK12',
14
+ accountNumber: '123456',
15
+ bank: { country: 280, bankId: '12030000' },
16
+ },
17
+ };
18
+ expect(encode(segment)).toBe("HKSAL:1:8+DE991234567123456:BANK12:123456::280:12030000+N'");
19
+ });
20
+ it('decode and encode roundtrip matches', () => {
21
+ const text = "HKSAL:0:8+DE991234567123456:BANK12+N'";
22
+ const segment = decode(text);
23
+ expect(encode(segment)).toBe(text);
24
+ });
25
+ });
26
+ describe('HKSAL v6', () => {
27
+ it('encode', () => {
28
+ const segment = {
29
+ header: { segId: HKSAL.Id, segNr: 1, version: 6 },
30
+ allAccounts: false,
31
+ account: {
32
+ iban: 'DE991234567123456',
33
+ bic: 'BANK12',
34
+ accountNumber: '123456',
35
+ bank: { country: 280, bankId: '12030000' },
36
+ },
37
+ };
38
+ expect(encode(segment)).toBe("HKSAL:1:6+123456::280:12030000+N'");
39
+ });
40
+ it('decode and encode roundtrip matches', () => {
41
+ const text = "HKSAL:0:6+123456::280:12030000+N'";
42
+ const segment = decode(text);
43
+ expect(encode(segment)).toBe(text);
44
+ });
45
+ });
@@ -0,0 +1,21 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { registerSegments } from '../segments/registry.js';
3
+ import { HKTAN } from '../segments/HKTAN.js';
4
+ import { decode, encode } from '../segment.js';
5
+ registerSegments();
6
+ describe('HKTAN', () => {
7
+ it('encode', () => {
8
+ const segment = {
9
+ header: { segId: HKTAN.Id, segNr: 1, version: 6 },
10
+ segId: 'HKKAZ',
11
+ tanProcess: 4,
12
+ tanMedia: 'Media1',
13
+ };
14
+ expect(encode(segment)).toBe("HKTAN:1:6+4+HKKAZ+++++++++Media1'");
15
+ });
16
+ it('decode and encode roundtrip matches', () => {
17
+ const text = "HKTAN:5:6+4+HKIDN'";
18
+ const segment = decode(text);
19
+ expect(encode(segment)).toBe(text);
20
+ });
21
+ });
@@ -0,0 +1,11 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { registerSegments } from '../segments/registry.js';
3
+ import { decode, encode } from '../segment.js';
4
+ registerSegments();
5
+ describe('HNSHK', () => {
6
+ it('decode and encode roundtrip matches', () => {
7
+ const text = "HNSHK:2:4+PIN:1+999+6506545+1+1+1::0+1+1:20240121:120140+1:999:1+6:10:16+280:12030000:1234567890_p:S:0:0'";
8
+ const segment = decode(text);
9
+ expect(encode(segment)).toBe(text);
10
+ });
11
+ });
@@ -0,0 +1,11 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { registerSegments } from '../segments/registry.js';
3
+ import { decode, encode } from '../segment.js';
4
+ registerSegments();
5
+ describe('HNVSK', () => {
6
+ it('decode and encode roundtrip matches', () => {
7
+ const text = "HNVSK:998:3+PIN:1+998+1+1::0+1:20240121:120140+2:2:13:@8@00000000:5:1+280:12030000:1234567890_p:S:0:0+0'";
8
+ const segment = decode(text);
9
+ expect(encode(segment)).toBe(text);
10
+ });
11
+ });
@@ -0,0 +1,33 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { FinTSClient } from '../client.js';
3
+ import { Dialog } from '../dialog.js';
4
+ import { FinTSConfig } from '../config.js';
5
+ describe('FinTSClient', () => {
6
+ let dialogInitializeMock;
7
+ let dialogEndMock;
8
+ beforeEach(() => {
9
+ dialogInitializeMock = vi.spyOn(Dialog.prototype, 'initialize');
10
+ dialogEndMock = vi.spyOn(Dialog.prototype, 'end');
11
+ });
12
+ afterEach(() => {
13
+ dialogInitializeMock.mockRestore();
14
+ dialogEndMock.mockRestore();
15
+ });
16
+ it('sends a message', async () => {
17
+ const client = new FinTSClient(FinTSConfig.forFirstTimeUse('product', '1.0', 'http://localhost', '12030000', 'user'));
18
+ dialogInitializeMock.mockResolvedValueOnce({
19
+ dialogId: 'DIALOG1',
20
+ success: true,
21
+ requiresTan: false,
22
+ bankingInformationUpdated: true,
23
+ bankingInformation: { systemId: 'SYSTEM01', bankMessages: [] },
24
+ bankAnswers: [{ code: 20, text: 'Auftrag ausgeführt' }],
25
+ });
26
+ const response = await client.synchronize();
27
+ expect(response.success).toBe(true);
28
+ expect(response.requiresTan).toBe(false);
29
+ expect(response.bankingInformation).toBeDefined();
30
+ expect(dialogInitializeMock).toHaveBeenCalledOnce();
31
+ expect(dialogEndMock).toHaveBeenCalledOnce();
32
+ });
33
+ });
@@ -0,0 +1,8 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { BankIdentification } from '../dataGroups/BankIdentification.js';
3
+ describe('BankIdentification', () => {
4
+ it('encodes correctly', () => {
5
+ const id = new BankIdentification('bank', 1, 1);
6
+ expect(id.encode({ country: 280, bankId: '12030000' }, [], 1)).toBe('280:12030000');
7
+ });
8
+ });
@@ -0,0 +1,80 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { CustomerMessage, Message } from '../message.js';
3
+ import { HKIDN } from '../segments/HKIDN.js';
4
+ import { HKVVB } from '../segments/HKVVB.js';
5
+ import { Language } from '../codes.js';
6
+ import { registerSegments } from '../segments/registry.js';
7
+ import { HIRMS } from '../segments/HIRMS.js';
8
+ import { HIRMG } from '../segments/HIRMG.js';
9
+ registerSegments();
10
+ describe('Message', () => {
11
+ describe('decoding', () => {
12
+ it('with known segments', () => {
13
+ const message = Message.decode("HNHBK:1:3+000000000108+300+0+1'HKIDN:2:2+280:12030000+9999999999+0+0'HKVVB:3:3+0+0+0+ABCDEF+1.0'HNHBS:4:1+1'");
14
+ expect(message.segments.length).toBe(4);
15
+ });
16
+ it('with one unknown segment', () => {
17
+ const message = Message.decode("HNHBK:1:3+000000000108+300+0+1'HKIDN:2:2+280:12030000+9999999999+0+0'HKVVB:3:3+0+0+0+ABCDEF+1.0'HIXXX:4:1+13'HNHBS:5:1+1'");
18
+ expect(message.segments.length).toBe(5);
19
+ });
20
+ it('with signed and encrypted data', () => {
21
+ const text = "HNHBK:1:3+000000000412+300+0+1'HNVSK:998:3+PIN:1+998+1+1+1:20240601:102151+2:2:13:@8@00000000:5:1+280:123456:user1:S:0:0+0'HNVSD:999:1+@259@HNSHK:2:4+PIN:2+944+1+1+1+1::rWkyTQV5yI8BAABFH0nthrBCCgQA+1+1:20240601:102151+1:3:1+6:10:16+280:30520037:user1:S:0:0'HKIDN:3:2+280:123456+user1+rWkyTQV5yI8BAABFH0nthrBCCgQA+1'HKVVB:4:3+43+9+0+9FA6681DEC0CF3046BFC2F8A6+0.1'HKTAN:5:6+4+HKIDN'HNSHA:6:2+1++12345''HNHBS:7:1+1'";
22
+ const message = Message.decode(text);
23
+ const hkidn = message.findSegment(HKIDN.Id);
24
+ expect(hkidn?.customerId).toBe('user1');
25
+ expect(hkidn?.bank.bankId).toBe('123456');
26
+ });
27
+ });
28
+ describe('findAllSegments()', () => {
29
+ it('returns all segments with given ID', () => {
30
+ const hirmg = {
31
+ header: { segId: HIRMG.Id, segNr: 1, version: HIRMG.Version },
32
+ answers: [{ code: 20, text: 'Message 1' }],
33
+ };
34
+ const hirms1 = {
35
+ header: { segId: HIRMS.Id, segNr: 2, version: HIRMS.Version },
36
+ answers: [{ code: 30, text: 'Message 2' }],
37
+ };
38
+ const hirms2 = {
39
+ header: { segId: HIRMS.Id, segNr: 3, version: HIRMS.Version },
40
+ answers: [{ code: 40, text: 'Message 3' }],
41
+ };
42
+ const message = new Message([hirmg, hirms1, hirms2]);
43
+ const segments = message.findAllSegments(HIRMS.Id);
44
+ expect(segments.length).toBe(2);
45
+ expect(segments.map((s) => s.header.segId)).toEqual([HIRMS.Id, HIRMS.Id]);
46
+ });
47
+ });
48
+ });
49
+ describe('CustomerMessage', () => {
50
+ const hkidn = {
51
+ header: { segId: HKIDN.Id, segNr: 0, version: HKIDN.Version },
52
+ bank: { country: 280, bankId: '12030000' },
53
+ customerId: '9999999999',
54
+ systemId: '0',
55
+ systemIdRequired: 0,
56
+ };
57
+ const hkvvb = {
58
+ header: { segId: HKVVB.Id, segNr: 0, version: HKVVB.Version },
59
+ bpdVersion: 0,
60
+ updVersion: 0,
61
+ dialogLanguage: Language.Default,
62
+ productId: 'ABCDEF',
63
+ productVersion: '1.0',
64
+ };
65
+ it('with no signature encodes correctly', () => {
66
+ const message = new CustomerMessage('0', 1);
67
+ message.addSegment(hkidn);
68
+ message.addSegment(hkvvb);
69
+ const encodedMessage = message.encode();
70
+ expect(encodedMessage).toBe("HNHBK:1:3+000000000108+300+0+1'HKIDN:2:2+280:12030000+9999999999+0+0'HKVVB:3:3+0+0+0+ABCDEF+1.0'HNHBS:4:1+1'");
71
+ });
72
+ it('with signature encodes correctly', () => {
73
+ const customerMessage = new CustomerMessage('0', 1);
74
+ customerMessage.addSegment(hkidn);
75
+ customerMessage.addSegment(hkvvb);
76
+ customerMessage.sign(280, '12030000', '12345678', '123', '0', 900, '12345');
77
+ const encodedMessage = customerMessage.encode();
78
+ const message = Message.decode(encodedMessage);
79
+ });
80
+ });
@@ -0,0 +1,56 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { Mt940Parser } from '../mt940parser.js';
3
+ describe('parse', () => {
4
+ it('parses a MT940 input string', () => {
5
+ const input = ':20:1234567\r\n' +
6
+ ':21:9876543210\r\n' +
7
+ ':25:10020030/1234567\r\n' +
8
+ ':28C:5/1\r\n' +
9
+ ':60F:C021101EUR2187,95\r\n' +
10
+ ':61:0211011102DR800,NSTONONREF//55555\r\n' +
11
+ ':86:008?00DAUERAUFTRAG?100599?20Miete Nov\r\n' +
12
+ 'ember?3010020030?31234567\r\n' +
13
+ '?32MUELLER?3433\r\n' +
14
+ '9\r\n' +
15
+ ':61:0211021102CR3000,NTRFNONREF//55555\r\n' +
16
+ 'Additional Information\r\n' +
17
+ ':86:051?00UEBERWEISUNG?100599?20EREF+53XA\r\n' +
18
+ 'QC7FDN1K2FO1\r\n' +
19
+ '?21SVWZ+Gehalt?22CRED+Arbeitgeber?3050060400?31084\r\n' +
20
+ '7564700?32MUELLER?34339\r\n' +
21
+ ':62F:C021131EUR4387,95\r\n';
22
+ const parser = new Mt940Parser(input);
23
+ const statements = parser.parse();
24
+ const statement = statements[0];
25
+ expect(statement.transactionReference).toBe('1234567');
26
+ expect(statement.relatedReference).toBe('9876543210');
27
+ expect(statement.account).toBe('10020030/1234567');
28
+ expect(statement.number).toBe('5/1');
29
+ expect(statement.openingBalance?.date).toEqual(new Date('2002-11-01T00:00'));
30
+ expect(statement.openingBalance?.currency).toBe('EUR');
31
+ expect(statement.openingBalance?.value).toBe(2187.95);
32
+ expect(statement.closingBalance?.date).toEqual(new Date('2002-11-31T00:00'));
33
+ expect(statement.closingBalance?.currency).toBe('EUR');
34
+ expect(statement.closingBalance?.value).toBe(4387.95);
35
+ expect(statement.transactions).toHaveLength(2);
36
+ expect(statement.transactions[0].valueDate).toEqual(new Date('2002-11-01T00:00'));
37
+ expect(statement.transactions[0].entryDate).toEqual(new Date('2002-11-02T00:00'));
38
+ expect(statement.transactions[0].fundsCode).toBe('R');
39
+ expect(statement.transactions[0].amount).toBe(-800);
40
+ expect(statement.transactions[0].transactionType).toBe('NSTO');
41
+ expect(statement.transactions[0].customerReference).toBe('NONREF');
42
+ expect(statement.transactions[0].bankReference).toBe('55555');
43
+ expect(statement.transactions[0].transactionCode).toBe('008');
44
+ expect(statement.transactions[0].bookingText).toBe('DAUERAUFTRAG');
45
+ expect(statement.transactions[0].primeNotesNr).toBe('0599');
46
+ expect(statement.transactions[0].purpose).toBe('Miete November');
47
+ expect(statement.transactions[0].remoteBankId).toBe('10020030');
48
+ expect(statement.transactions[0].remoteAccountNumber).toBe('234567');
49
+ expect(statement.transactions[0].remoteName).toBe('MUELLER');
50
+ expect(statement.transactions[0].textKeyExtension).toBe('339');
51
+ expect(statement.transactions[1].purpose).toBe('Gehalt');
52
+ expect(statement.transactions[1].e2eReference).toBe('53XAQC7FDN1K2FO1');
53
+ expect(statement.transactions[1].remoteIdentifier).toBe('Arbeitgeber');
54
+ expect(statement.transactions[1].additionalInformation).toBe('Additional Information');
55
+ });
56
+ });
@@ -0,0 +1,20 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { splitBySeparator } from '../parser.js';
3
+ describe('splitBySeparator', () => {
4
+ it('works with binary elements', () => {
5
+ const text = "HNVSD:999:1+@105@HNSHK:2:4+PIN:1+999+6506545+1+1+1::0+1+1:20240121:120140+1:999:1+6:10:16+280:12030000:1234567890_p:S:0:0''HNHBS:7:1+1'";
6
+ const segments = splitBySeparator(text, "'");
7
+ expect(segments.length).toBe(2);
8
+ expect(segments[0].slice(0, 5)).toBe('HNVSD');
9
+ expect(segments[1].slice(0, 5)).toBe('HNHBS');
10
+ });
11
+ it('ignores escaped separators', () => {
12
+ const text = 'HNSHK:2:4+PIN:1+999+hello?+world??+3+2+1';
13
+ const segments = splitBySeparator(text, '+');
14
+ expect(segments.length).toBe(7);
15
+ expect(segments[0]).toBe('HNSHK:2:4');
16
+ expect(segments[1]).toBe('PIN:1');
17
+ expect(segments[3]).toBe('hello?+world??');
18
+ expect(segments[6]).toBe('1');
19
+ });
20
+ });
@@ -0,0 +1,9 @@
1
+ export type AccountBalance = {
2
+ date: Date;
3
+ currency: string;
4
+ balance: number;
5
+ notedBalance?: number;
6
+ creditLimit?: number;
7
+ availableAmount?: number;
8
+ };
9
+ //# sourceMappingURL=accountBalance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accountBalance.d.ts","sourceRoot":"","sources":["../../src/accountBalance.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { Account } from './dataGroups/Account.js';
2
+ import { AccountLimit, AllowedTransactions } from './segments/HIUPD.js';
3
+ export declare enum AccountType {
4
+ CheckingAccount = "CheckingAccount",
5
+ SavingsAccount = "SavingsAccount",
6
+ FixedDepositAccount = "FixedDepositAccount",
7
+ SecuritiesAccount = "SecuritiesAccount",
8
+ LoanMortgageAccount = "LoanMortgageAccount",
9
+ CreditCardAccount = "CreditCardAccount",
10
+ InvestmentCompanyFund = "InvestmentCompanyFund",
11
+ HomeSavingsContract = "HomeSavingsContract",
12
+ InsurancePolicy = "InsurancePolicy",
13
+ Miscellaneous = "Miscellaneous"
14
+ }
15
+ export type BankAccount = Account & {
16
+ iban?: string;
17
+ customerId: string;
18
+ accountType: AccountType;
19
+ currency: string;
20
+ holder1: string;
21
+ holder2?: string;
22
+ product?: string;
23
+ limit?: AccountLimit;
24
+ allowedTransactions?: AllowedTransactions[];
25
+ };
26
+ export declare function finTsAccountTypeToEnum(accountType: number): AccountType;
27
+ //# sourceMappingURL=bankAccount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bankAccount.d.ts","sourceRoot":"","sources":["../../src/bankAccount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAExE,oBAAY,WAAW;IACrB,eAAe,oBAAoB;IACnC,cAAc,mBAAmB;IACjC,mBAAmB,wBAAwB;IAC3C,iBAAiB,sBAAsB;IACvC,mBAAmB,wBAAwB;IAC3C,iBAAiB,sBAAsB;IACvC,qBAAqB,0BAA0B;IAC/C,mBAAmB,wBAAwB;IAC3C,eAAe,oBAAoB;IACnC,aAAa,kBAAkB;CAChC;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,mBAAmB,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAC7C,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAWvE"}
@@ -0,0 +1,6 @@
1
+ export type BankAnswer = {
2
+ code: number;
3
+ text: string;
4
+ params?: string[];
5
+ };
6
+ //# sourceMappingURL=bankAnswer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bankAnswer.d.ts","sourceRoot":"","sources":["../../src/bankAnswer.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export type BankTransaction = {
2
+ transId: string;
3
+ tanRequired: boolean;
4
+ versions: number[];
5
+ };
6
+ //# sourceMappingURL=bankTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bankTransaction.d.ts","sourceRoot":"","sources":["../../src/bankTransaction.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { BPD } from './bpd.js';
2
+ import { UPD } from './upd.js';
3
+ /**
4
+ * Information returned by the bank
5
+ * @property systemId The system ID provided by the bank for this client/product
6
+ * @property bpd The BPD (BankParameterDaten) contain general information
7
+ * @property upd The UPD (UserParameterDaten) contain user-specific information like the banking accounts
8
+ * @property bankMessages Messages from the bank which should be displayed to the user
9
+ */
10
+ export type BankingInformation = {
11
+ systemId: string;
12
+ bpd?: BPD;
13
+ upd?: UPD;
14
+ bankMessages: BankMessage[];
15
+ };
16
+ export type BankMessage = {
17
+ subject: string;
18
+ text: string;
19
+ };
20
+ //# sourceMappingURL=bankingInformation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bankingInformation.d.ts","sourceRoot":"","sources":["../../src/bankingInformation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { BankTransaction } from './bankTransaction.js';
2
+ import { Language } from './codes.js';
3
+ import { TanMethod } from './tanMethod.js';
4
+ export type BPD = {
5
+ version: number;
6
+ countryCode: number;
7
+ bankId: string;
8
+ bankName: string;
9
+ maxTransactionsPerMessage: number;
10
+ supportedLanguages: Language[];
11
+ supportedHbciVersions: number[];
12
+ url?: string;
13
+ supportedTanMethods: TanMethod[];
14
+ availableTanMethodIds: number[];
15
+ allowedTransactions: BankTransaction[];
16
+ };
17
+ //# sourceMappingURL=bpd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bpd.d.ts","sourceRoot":"","sources":["../../src/bpd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,MAAM,GAAG,GAAG;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB,EAAE,MAAM,CAAC;IAClC,kBAAkB,EAAE,QAAQ,EAAE,CAAC;IAC/B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mBAAmB,EAAE,SAAS,EAAE,CAAC;IACjC,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,mBAAmB,EAAE,eAAe,EAAE,CAAC;CACxC,CAAC"}
@@ -0,0 +1,86 @@
1
+ import { StatementResponse } from './interactions/statementInteraction.js';
2
+ import { AccountBalanceResponse } from './interactions/balanceInteraction.js';
3
+ import { FinTSConfig } from './config.js';
4
+ import { InitResponse } from './interactions/initDialogInteraction.js';
5
+ import { TanMethod } from './tanMethod.js';
6
+ export interface SynchronizeResponse extends InitResponse {
7
+ }
8
+ /**
9
+ * A client to communicate with a bank over the FinTS protocol
10
+ */
11
+ export declare class FinTSClient {
12
+ config: FinTSConfig;
13
+ private openCustomerInteractions;
14
+ /**
15
+ * Creates a new FinTS client
16
+ * @param config - the configuration for the client, use the static factory methods FinTSConfig.forFirstTimeUse or FinTSConfig.fromBankingInformation to create a configuration
17
+ */
18
+ constructor(config: FinTSConfig);
19
+ /**
20
+ * Selects a TAN method by its ID
21
+ * @param tanMethodId - the ID of the TAN method to select, get the ID from FinTSClient.config.availableTanMethods
22
+ * @returns the selected TAN method
23
+ */
24
+ selectTanMethod(tanMethodId: number): TanMethod;
25
+ /**
26
+ * Selects a TAN media by its name
27
+ * @param tanMediaName - the name of the TAN media to select corresponding to a name in TanMethod.activeTanMedia
28
+ */
29
+ selectTanMedia(tanMediaName: string): void;
30
+ /**
31
+ * Synchronizes information with the bank, updating config.bankingInformation
32
+ * @returns the synchronization response
33
+ */
34
+ synchronize(): Promise<SynchronizeResponse>;
35
+ /**
36
+ * Continues the synchronization transaction when a TAN is required
37
+ * @param tanReference The TAN reference provided in the first call's response
38
+ * @param tan The TAN entered by the user
39
+ * @returns the synchronization response
40
+ */
41
+ synchronizeWithTan(tanReference: string, tan: string): Promise<SynchronizeResponse>;
42
+ /**
43
+ * Checks if the bank supports fetching an account balance in general or for the given account number when provided
44
+ * @param accountNumber when the account number is provided, checks if the account supports fetching the balance
45
+ * @returns true if the bank (and account) supports fetching the account balance
46
+ */
47
+ canGetAccountBalance(accountNumber?: string): boolean;
48
+ /**
49
+ * Fetches the account balance for the given account number
50
+ * @param accountNumber - the account number to fetch the balance for, must be an account available in the config.baningInformation.UPD.accounts
51
+ * @returns the account balance response
52
+ */
53
+ getAccountBalance(accountNumber: string): Promise<AccountBalanceResponse>;
54
+ /**
55
+ * Continues the account balance fetching when a TAN is required
56
+ * @param tanReference The TAN reference provided in the first call's response
57
+ * @param tan The TAN entered by the user
58
+ * @returns the account balance response
59
+ */
60
+ getAccountBalanceWithTan(tanReference: string, tan: string): Promise<AccountBalanceResponse>;
61
+ /**
62
+ * Checks if the bank supports fetching account statements in general or for the given account number when provided
63
+ * @param accountNumber when the account number is provided, checks if the account supports fetching of statements
64
+ * @returns true if the bank (and account) supports fetching account statements
65
+ */
66
+ canGetAccountStatements(accountNumber?: string): boolean;
67
+ /**
68
+ * Fetches the account statements for the given account number
69
+ * @param accountNumber - the account number to fetch the statements for, must be an account available in the config.baningInformation.UPD.accounts
70
+ * @param from - an optional start date of the period to fetch the statements for
71
+ * @param to - an optional end date of the period to fetch the statements for
72
+ * @returns an account statements response containing an array of statements
73
+ */
74
+ getAccountStatements(accountNumber: string, from?: Date, to?: Date): Promise<StatementResponse>;
75
+ /**
76
+ * Continues the account statements fetching when a TAN is required
77
+ * @param tanReference The TAN reference provided in the first call's response
78
+ * @param tan The TAN entered by the user
79
+ * @returns an account statements response containing an array of statements
80
+ */
81
+ getAccountStatementsWithTan(tanReference: string, tan: string): Promise<StatementResponse>;
82
+ private startCustomerOrderInteraction;
83
+ private continueCustomerInteractionWithTan;
84
+ private initDialog;
85
+ }
86
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAwB,MAAM,wCAAwC,CAAC;AACjG,OAAO,EAAE,sBAAsB,EAAsB,MAAM,sCAAsC,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAyB,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAE9F,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI3C,MAAM,WAAW,mBAAoB,SAAQ,YAAY;CAAG;AAE5D;;GAEG;AACH,qBAAa,WAAW;IAOH,MAAM,EAAE,WAAW;IANtC,OAAO,CAAC,wBAAwB,CAA0C;IAE1E;;;OAGG;gBACgB,MAAM,EAAE,WAAW;IAUtC;;;;OAIG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS;IAK/C;;;OAGG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAI1C;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAwBjD;;;;;OAKG;IACG,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAIzF;;;;OAIG;IACH,oBAAoB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO;IAMrD;;;;OAIG;IACG,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAI/E;;;;;OAKG;IACG,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAIlG;;;;OAIG;IACH,uBAAuB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO;IAMxD;;;;;;OAMG;IACG,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIrG;;;;;OAKG;IACG,2BAA2B,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAIlF,6BAA6B;YAqB7B,kCAAkC;YAiBlC,UAAU;CAUzB"}