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.
- package/LICENSE +504 -0
- package/README.md +216 -0
- package/dist/accountBalance.js +1 -0
- package/dist/bankAccount.js +34 -0
- package/dist/bankAnswer.js +1 -0
- package/dist/bankTransaction.js +1 -0
- package/dist/bankingInformation.js +1 -0
- package/dist/bpd.js +1 -0
- package/dist/client.js +165 -0
- package/dist/codes.js +79 -0
- package/dist/config.js +181 -0
- package/dist/dataElements/AlphaNumeric.js +24 -0
- package/dist/dataElements/Amount.js +6 -0
- package/dist/dataElements/Binary.js +20 -0
- package/dist/dataElements/Country.js +6 -0
- package/dist/dataElements/Currency.js +6 -0
- package/dist/dataElements/Dat.js +18 -0
- package/dist/dataElements/DataElement.js +37 -0
- package/dist/dataElements/Digits.js +23 -0
- package/dist/dataElements/Float.js +21 -0
- package/dist/dataElements/Identification.js +6 -0
- package/dist/dataElements/Numeric.js +26 -0
- package/dist/dataElements/Text.js +21 -0
- package/dist/dataElements/Time.js +18 -0
- package/dist/dataElements/YesNo.js +18 -0
- package/dist/dataGroups/Account.js +12 -0
- package/dist/dataGroups/Balance.js +15 -0
- package/dist/dataGroups/BankIdentification.js +8 -0
- package/dist/dataGroups/DataGroup.js +54 -0
- package/dist/dataGroups/InternationalAccount.js +15 -0
- package/dist/dataGroups/Money.js +8 -0
- package/dist/dataGroups/RefMessage.js +8 -0
- package/dist/dataGroups/TimeStamp.js +8 -0
- package/dist/decoder.js +97 -0
- package/dist/dialog.js +189 -0
- package/dist/encoder.js +47 -0
- package/dist/format.js +6 -0
- package/dist/httpClient.js +41 -0
- package/dist/httpClientNode.js +59 -0
- package/dist/index.js +15 -0
- package/dist/interactions/balanceInteraction.js +47 -0
- package/dist/interactions/customerInteraction.js +55 -0
- package/dist/interactions/initDialogInteraction.js +155 -0
- package/dist/interactions/statementInteraction.js +44 -0
- package/dist/interactions/tanMediaInteraction.js +27 -0
- package/dist/message.js +198 -0
- package/dist/mt940parser.js +307 -0
- package/dist/parser.js +30 -0
- package/dist/partedSegment.js +8 -0
- package/dist/segment.js +59 -0
- package/dist/segmentDefinition.js +11 -0
- package/dist/segmentHeader.js +13 -0
- package/dist/segments/HIBPA.js +23 -0
- package/dist/segments/HIKAZ.js +13 -0
- package/dist/segments/HIKAZS.js +13 -0
- package/dist/segments/HIKIM.js +11 -0
- package/dist/segments/HIKOM.js +23 -0
- package/dist/segments/HIPINS.js +22 -0
- package/dist/segments/HIRMG.js +20 -0
- package/dist/segments/HIRMS.js +20 -0
- package/dist/segments/HISAL.js +31 -0
- package/dist/segments/HISYN.js +16 -0
- package/dist/segments/HITAB.js +37 -0
- package/dist/segments/HITAN.js +23 -0
- package/dist/segments/HITANS.js +48 -0
- package/dist/segments/HIUPA.js +18 -0
- package/dist/segments/HIUPD.js +34 -0
- package/dist/segments/HKEND.js +11 -0
- package/dist/segments/HKIDN.js +18 -0
- package/dist/segments/HKKAZ.js +24 -0
- package/dist/segments/HKSAL.js +21 -0
- package/dist/segments/HKSYN.js +11 -0
- package/dist/segments/HKTAB.js +12 -0
- package/dist/segments/HKTAN.js +35 -0
- package/dist/segments/HKVVB.js +18 -0
- package/dist/segments/HNHBK.js +20 -0
- package/dist/segments/HNHBS.js +11 -0
- package/dist/segments/HNSHA.js +17 -0
- package/dist/segments/HNSHK.js +43 -0
- package/dist/segments/HNVSD.js +11 -0
- package/dist/segments/HNVSK.js +45 -0
- package/dist/segments/businessTransactionParameter.js +20 -0
- package/dist/segments/registry.js +71 -0
- package/dist/tanMethod.js +1 -0
- package/dist/tests/HIBPA.test.js +26 -0
- package/dist/tests/HIPINS.test.js +14 -0
- package/dist/tests/HIRMG.test.js +24 -0
- package/dist/tests/HITAB.test.js +19 -0
- package/dist/tests/HITANS.test.js +19 -0
- package/dist/tests/HIUPA.test.js +11 -0
- package/dist/tests/HIUPD.test.js +11 -0
- package/dist/tests/HKIDN.test.js +22 -0
- package/dist/tests/HKSAL.test.js +45 -0
- package/dist/tests/HKTAN.test.js +21 -0
- package/dist/tests/HNSHK.test.js +11 -0
- package/dist/tests/HNVSK.test.js +11 -0
- package/dist/tests/client.test.js +33 -0
- package/dist/tests/datatypes.test.js +8 -0
- package/dist/tests/message.test.js +80 -0
- package/dist/tests/mt940parser.test.js +56 -0
- package/dist/tests/parser.test.js +20 -0
- package/dist/types/accountBalance.d.ts +9 -0
- package/dist/types/accountBalance.d.ts.map +1 -0
- package/dist/types/bankAccount.d.ts +27 -0
- package/dist/types/bankAccount.d.ts.map +1 -0
- package/dist/types/bankAnswer.d.ts +6 -0
- package/dist/types/bankAnswer.d.ts.map +1 -0
- package/dist/types/bankTransaction.d.ts +6 -0
- package/dist/types/bankTransaction.d.ts.map +1 -0
- package/dist/types/bankingInformation.d.ts +20 -0
- package/dist/types/bankingInformation.d.ts.map +1 -0
- package/dist/types/bpd.d.ts +17 -0
- package/dist/types/bpd.d.ts.map +1 -0
- package/dist/types/client.d.ts +86 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/codes.d.ts +68 -0
- package/dist/types/codes.d.ts.map +1 -0
- package/dist/types/config.d.ts +99 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/dataElements/AlphaNumeric.d.ts +8 -0
- package/dist/types/dataElements/AlphaNumeric.d.ts.map +1 -0
- package/dist/types/dataElements/Amount.d.ts +5 -0
- package/dist/types/dataElements/Amount.d.ts.map +1 -0
- package/dist/types/dataElements/Binary.d.ts +8 -0
- package/dist/types/dataElements/Binary.d.ts.map +1 -0
- package/dist/types/dataElements/Country.d.ts +5 -0
- package/dist/types/dataElements/Country.d.ts.map +1 -0
- package/dist/types/dataElements/Currency.d.ts +5 -0
- package/dist/types/dataElements/Currency.d.ts.map +1 -0
- package/dist/types/dataElements/Dat.d.ts +8 -0
- package/dist/types/dataElements/Dat.d.ts.map +1 -0
- package/dist/types/dataElements/DataElement.d.ts +14 -0
- package/dist/types/dataElements/DataElement.d.ts.map +1 -0
- package/dist/types/dataElements/Digits.d.ts +8 -0
- package/dist/types/dataElements/Digits.d.ts.map +1 -0
- package/dist/types/dataElements/Float.d.ts +8 -0
- package/dist/types/dataElements/Float.d.ts.map +1 -0
- package/dist/types/dataElements/Identification.d.ts +5 -0
- package/dist/types/dataElements/Identification.d.ts.map +1 -0
- package/dist/types/dataElements/Numeric.d.ts +9 -0
- package/dist/types/dataElements/Numeric.d.ts.map +1 -0
- package/dist/types/dataElements/Text.d.ts +8 -0
- package/dist/types/dataElements/Text.d.ts.map +1 -0
- package/dist/types/dataElements/Time.d.ts +8 -0
- package/dist/types/dataElements/Time.d.ts.map +1 -0
- package/dist/types/dataElements/YesNo.d.ts +7 -0
- package/dist/types/dataElements/YesNo.d.ts.map +1 -0
- package/dist/types/dataGroups/Account.d.ts +14 -0
- package/dist/types/dataGroups/Account.d.ts.map +1 -0
- package/dist/types/dataGroups/Balance.d.ts +12 -0
- package/dist/types/dataGroups/Balance.d.ts.map +1 -0
- package/dist/types/dataGroups/BankIdentification.d.ts +5 -0
- package/dist/types/dataGroups/BankIdentification.d.ts.map +1 -0
- package/dist/types/dataGroups/DataGroup.d.ts +10 -0
- package/dist/types/dataGroups/DataGroup.d.ts.map +1 -0
- package/dist/types/dataGroups/InternationalAccount.d.ts +13 -0
- package/dist/types/dataGroups/InternationalAccount.d.ts.map +1 -0
- package/dist/types/dataGroups/Money.d.ts +9 -0
- package/dist/types/dataGroups/Money.d.ts.map +1 -0
- package/dist/types/dataGroups/RefMessage.d.ts +9 -0
- package/dist/types/dataGroups/RefMessage.d.ts.map +1 -0
- package/dist/types/dataGroups/TimeStamp.d.ts +9 -0
- package/dist/types/dataGroups/TimeStamp.d.ts.map +1 -0
- package/dist/types/decoder.d.ts +4 -0
- package/dist/types/decoder.d.ts.map +1 -0
- package/dist/types/dialog.d.ts +21 -0
- package/dist/types/dialog.d.ts.map +1 -0
- package/dist/types/encoder.d.ts +3 -0
- package/dist/types/encoder.d.ts.map +1 -0
- package/dist/types/format.d.ts +3 -0
- package/dist/types/format.d.ts.map +1 -0
- package/dist/types/httpClient.d.ts +8 -0
- package/dist/types/httpClient.d.ts.map +1 -0
- package/dist/types/httpClientNode.d.ts +8 -0
- package/dist/types/httpClientNode.d.ts.map +1 -0
- package/dist/types/index.d.ts +17 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/interactions/balanceInteraction.d.ts +15 -0
- package/dist/types/interactions/balanceInteraction.d.ts.map +1 -0
- package/dist/types/interactions/customerInteraction.d.ts +41 -0
- package/dist/types/interactions/customerInteraction.d.ts.map +1 -0
- package/dist/types/interactions/initDialogInteraction.d.ts +16 -0
- package/dist/types/interactions/initDialogInteraction.d.ts.map +1 -0
- package/dist/types/interactions/statementInteraction.d.ts +17 -0
- package/dist/types/interactions/statementInteraction.d.ts.map +1 -0
- package/dist/types/interactions/tanMediaInteraction.d.ts +13 -0
- package/dist/types/interactions/tanMediaInteraction.d.ts.map +1 -0
- package/dist/types/message.d.ts +30 -0
- package/dist/types/message.d.ts.map +1 -0
- package/dist/types/mt940parser.d.ts +83 -0
- package/dist/types/mt940parser.d.ts.map +1 -0
- package/dist/types/parser.d.ts +2 -0
- package/dist/types/parser.d.ts.map +1 -0
- package/dist/types/partedSegment.d.ts +14 -0
- package/dist/types/partedSegment.d.ts.map +1 -0
- package/dist/types/segment.d.ts +11 -0
- package/dist/types/segment.d.ts.map +1 -0
- package/dist/types/segmentDefinition.d.ts +11 -0
- package/dist/types/segmentDefinition.d.ts.map +1 -0
- package/dist/types/segmentHeader.d.ts +11 -0
- package/dist/types/segmentHeader.d.ts.map +1 -0
- package/dist/types/segments/HIBPA.d.ts +27 -0
- package/dist/types/segments/HIBPA.d.ts.map +1 -0
- package/dist/types/segments/HIKAZ.d.ts +16 -0
- package/dist/types/segments/HIKAZ.d.ts.map +1 -0
- package/dist/types/segments/HIKAZS.d.ts +16 -0
- package/dist/types/segments/HIKAZS.d.ts.map +1 -0
- package/dist/types/segments/HIKIM.d.ts +17 -0
- package/dist/types/segments/HIKIM.d.ts.map +1 -0
- package/dist/types/segments/HIKOM.d.ts +27 -0
- package/dist/types/segments/HIKOM.d.ts.map +1 -0
- package/dist/types/segments/HIPINS.d.ts +23 -0
- package/dist/types/segments/HIPINS.d.ts.map +1 -0
- package/dist/types/segments/HIRMG.d.ts +22 -0
- package/dist/types/segments/HIRMG.d.ts.map +1 -0
- package/dist/types/segments/HIRMS.d.ts +17 -0
- package/dist/types/segments/HIRMS.d.ts.map +1 -0
- package/dist/types/segments/HISAL.d.ts +32 -0
- package/dist/types/segments/HISAL.d.ts.map +1 -0
- package/dist/types/segments/HISYN.d.ts +19 -0
- package/dist/types/segments/HISYN.d.ts.map +1 -0
- package/dist/types/segments/HITAB.d.ts +39 -0
- package/dist/types/segments/HITAB.d.ts.map +1 -0
- package/dist/types/segments/HITAN.d.ts +25 -0
- package/dist/types/segments/HITAN.d.ts.map +1 -0
- package/dist/types/segments/HITANS.d.ts +41 -0
- package/dist/types/segments/HITANS.d.ts.map +1 -0
- package/dist/types/segments/HIUPA.d.ts +21 -0
- package/dist/types/segments/HIUPA.d.ts.map +1 -0
- package/dist/types/segments/HIUPD.d.ts +42 -0
- package/dist/types/segments/HIUPD.d.ts.map +1 -0
- package/dist/types/segments/HKEND.d.ts +16 -0
- package/dist/types/segments/HKEND.d.ts.map +1 -0
- package/dist/types/segments/HKIDN.d.ts +22 -0
- package/dist/types/segments/HKIDN.d.ts.map +1 -0
- package/dist/types/segments/HKKAZ.d.ts +25 -0
- package/dist/types/segments/HKKAZ.d.ts.map +1 -0
- package/dist/types/segments/HKSAL.d.ts +22 -0
- package/dist/types/segments/HKSAL.d.ts.map +1 -0
- package/dist/types/segments/HKSYN.d.ts +17 -0
- package/dist/types/segments/HKSYN.d.ts.map +1 -0
- package/dist/types/segments/HKTAB.d.ts +19 -0
- package/dist/types/segments/HKTAB.d.ts.map +1 -0
- package/dist/types/segments/HKTAN.d.ts +39 -0
- package/dist/types/segments/HKTAN.d.ts.map +1 -0
- package/dist/types/segments/HKVVB.d.ts +22 -0
- package/dist/types/segments/HKVVB.d.ts.map +1 -0
- package/dist/types/segments/HNHBK.d.ts +23 -0
- package/dist/types/segments/HNHBK.d.ts.map +1 -0
- package/dist/types/segments/HNHBS.d.ts +16 -0
- package/dist/types/segments/HNHBS.d.ts.map +1 -0
- package/dist/types/segments/HNSHA.d.ts +24 -0
- package/dist/types/segments/HNSHA.d.ts.map +1 -0
- package/dist/types/segments/HNSHK.d.ts +66 -0
- package/dist/types/segments/HNSHK.d.ts.map +1 -0
- package/dist/types/segments/HNVSD.d.ts +20 -0
- package/dist/types/segments/HNVSD.d.ts.map +1 -0
- package/dist/types/segments/HNVSK.d.ts +40 -0
- package/dist/types/segments/HNVSK.d.ts.map +1 -0
- package/dist/types/segments/businessTransactionParameter.d.ts +18 -0
- package/dist/types/segments/businessTransactionParameter.d.ts.map +1 -0
- package/dist/types/segments/registry.d.ts +4 -0
- package/dist/types/segments/registry.d.ts.map +1 -0
- package/dist/types/tanMethod.d.ts +10 -0
- package/dist/types/tanMethod.d.ts.map +1 -0
- package/dist/types/tests/HIBPA.test.d.ts +2 -0
- package/dist/types/tests/HIBPA.test.d.ts.map +1 -0
- package/dist/types/tests/HIPINS.test.d.ts +2 -0
- package/dist/types/tests/HIPINS.test.d.ts.map +1 -0
- package/dist/types/tests/HIRMG.test.d.ts +2 -0
- package/dist/types/tests/HIRMG.test.d.ts.map +1 -0
- package/dist/types/tests/HITAB.test.d.ts +2 -0
- package/dist/types/tests/HITAB.test.d.ts.map +1 -0
- package/dist/types/tests/HITANS.test.d.ts +2 -0
- package/dist/types/tests/HITANS.test.d.ts.map +1 -0
- package/dist/types/tests/HIUPA.test.d.ts +2 -0
- package/dist/types/tests/HIUPA.test.d.ts.map +1 -0
- package/dist/types/tests/HIUPD.test.d.ts +2 -0
- package/dist/types/tests/HIUPD.test.d.ts.map +1 -0
- package/dist/types/tests/HKIDN.test.d.ts +2 -0
- package/dist/types/tests/HKIDN.test.d.ts.map +1 -0
- package/dist/types/tests/HKSAL.test.d.ts +2 -0
- package/dist/types/tests/HKSAL.test.d.ts.map +1 -0
- package/dist/types/tests/HKTAN.test.d.ts +2 -0
- package/dist/types/tests/HKTAN.test.d.ts.map +1 -0
- package/dist/types/tests/HNSHK.test.d.ts +2 -0
- package/dist/types/tests/HNSHK.test.d.ts.map +1 -0
- package/dist/types/tests/HNVSK.test.d.ts +2 -0
- package/dist/types/tests/HNVSK.test.d.ts.map +1 -0
- package/dist/types/tests/client.test.d.ts +2 -0
- package/dist/types/tests/client.test.d.ts.map +1 -0
- package/dist/types/tests/datatypes.test.d.ts +2 -0
- package/dist/types/tests/datatypes.test.d.ts.map +1 -0
- package/dist/types/tests/message.test.d.ts +2 -0
- package/dist/types/tests/message.test.d.ts.map +1 -0
- package/dist/types/tests/mt940parser.test.d.ts +2 -0
- package/dist/types/tests/mt940parser.test.d.ts.map +1 -0
- package/dist/types/tests/parser.test.d.ts +2 -0
- package/dist/types/tests/parser.test.d.ts.map +1 -0
- package/dist/types/unknownSegment.d.ts +14 -0
- package/dist/types/unknownSegment.d.ts.map +1 -0
- package/dist/types/upd.d.ts +8 -0
- package/dist/types/upd.d.ts.map +1 -0
- package/dist/unknownSegment.js +8 -0
- package/dist/upd.js +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|