lib-fints 1.4.8 → 1.5.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 (50) hide show
  1. package/README.md +2 -0
  2. package/dist/client.js +37 -0
  3. package/dist/dataElements/Binary.js +18 -1
  4. package/dist/dialog.js +52 -31
  5. package/dist/electronicStatement.js +1 -0
  6. package/dist/httpClient.js +1 -1
  7. package/dist/index.js +2 -0
  8. package/dist/interactions/creditcardStatementInteraction.js +9 -1
  9. package/dist/interactions/electronicStatementInteraction.js +88 -0
  10. package/dist/interactions/portfolioInteraction.js +10 -4
  11. package/dist/interactions/sepaAccountInteraction.js +5 -3
  12. package/dist/interactions/statementInteractionCAMT.js +8 -3
  13. package/dist/interactions/statementInteractionMT940.js +10 -3
  14. package/dist/message.js +5 -1
  15. package/dist/segments/HIEKA.js +45 -0
  16. package/dist/segments/HIEKAS.js +18 -0
  17. package/dist/segments/HKEKA.js +43 -0
  18. package/dist/segments/registry.js +6 -0
  19. package/dist/tests/HKEKA.test.js +198 -0
  20. package/dist/tests/partedResponse.test.js +181 -0
  21. package/dist/types/client.d.ts +28 -0
  22. package/dist/types/client.d.ts.map +1 -1
  23. package/dist/types/dataElements/Binary.d.ts +7 -0
  24. package/dist/types/dataElements/Binary.d.ts.map +1 -1
  25. package/dist/types/dialog.d.ts +14 -0
  26. package/dist/types/dialog.d.ts.map +1 -1
  27. package/dist/types/electronicStatement.d.ts +40 -0
  28. package/dist/types/electronicStatement.d.ts.map +1 -0
  29. package/dist/types/index.d.ts +3 -0
  30. package/dist/types/index.d.ts.map +1 -1
  31. package/dist/types/interactions/creditcardStatementInteraction.d.ts.map +1 -1
  32. package/dist/types/interactions/electronicStatementInteraction.d.ts +33 -0
  33. package/dist/types/interactions/electronicStatementInteraction.d.ts.map +1 -0
  34. package/dist/types/interactions/portfolioInteraction.d.ts.map +1 -1
  35. package/dist/types/interactions/sepaAccountInteraction.d.ts.map +1 -1
  36. package/dist/types/interactions/statementInteractionCAMT.d.ts.map +1 -1
  37. package/dist/types/interactions/statementInteractionMT940.d.ts.map +1 -1
  38. package/dist/types/message.d.ts.map +1 -1
  39. package/dist/types/segments/HIEKA.d.ts +52 -0
  40. package/dist/types/segments/HIEKA.d.ts.map +1 -0
  41. package/dist/types/segments/HIEKAS.d.ts +21 -0
  42. package/dist/types/segments/HIEKAS.d.ts.map +1 -0
  43. package/dist/types/segments/HKEKA.d.ts +54 -0
  44. package/dist/types/segments/HKEKA.d.ts.map +1 -0
  45. package/dist/types/segments/registry.d.ts.map +1 -1
  46. package/dist/types/tests/HKEKA.test.d.ts +2 -0
  47. package/dist/types/tests/HKEKA.test.d.ts.map +1 -0
  48. package/dist/types/tests/partedResponse.test.d.ts +2 -0
  49. package/dist/types/tests/partedResponse.test.d.ts.map +1 -0
  50. package/package.json +2 -2
@@ -0,0 +1,198 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { ElectronicStatementInteraction, } from '../interactions/electronicStatementInteraction.js';
3
+ import { Message } from '../message.js';
4
+ import { decode, encode } from '../segment.js';
5
+ import { HKEKA, StatementFormat } from '../segments/HKEKA.js';
6
+ import { registerSegments } from '../segments/registry.js';
7
+ registerSegments();
8
+ describe('HKEKA v5', () => {
9
+ it('encode', () => {
10
+ const segment = {
11
+ header: { segId: HKEKA.Id, segNr: 3, version: 5 },
12
+ account: {
13
+ iban: 'DE991234567123456',
14
+ bic: 'BANK12',
15
+ },
16
+ statementFormat: StatementFormat.PDF,
17
+ };
18
+ expect(encode(segment)).toBe("HKEKA:3:5+DE991234567123456:BANK12+3'");
19
+ });
20
+ it('encode with statement number, year and offset', () => {
21
+ const segment = {
22
+ header: { segId: HKEKA.Id, segNr: 3, version: 5 },
23
+ account: {
24
+ iban: 'DE991234567123456',
25
+ bic: 'BANK12',
26
+ },
27
+ statementFormat: StatementFormat.PDF,
28
+ statementNumber: 7,
29
+ statementYear: 2026,
30
+ offset: '20260530120235141058000_0',
31
+ };
32
+ expect(encode(segment)).toBe("HKEKA:3:5+DE991234567123456:BANK12+3+7+2026++20260530120235141058000_0'");
33
+ });
34
+ it('decode and encode roundtrip matches', () => {
35
+ const text = "HKEKA:0:5+DE991234567123456:BANK12+3+7+2026++20260530120235141058000_0'";
36
+ const segment = decode(text);
37
+ expect(encode(segment)).toBe(text);
38
+ });
39
+ });
40
+ describe('HIEKA v5', () => {
41
+ // The element order is the whole risk of this segment: `booked` comes AFTER
42
+ // date/year/number, unlike HIEKP v2 where it comes first.
43
+ const text = "HIEKA:5:5:3+3+20260601:20260630+20260701+2026+7+@9@%PDF-1.7 +Abschluss+Konditionen+Werbung+DE991234567123456+BANK12+Muster+GmbH+i?:G?:+@4@abcd'";
44
+ it('decode', () => {
45
+ const segment = decode(text);
46
+ expect(segment.format).toBe(StatementFormat.PDF);
47
+ expect(segment.timeRange?.from).toEqual(new Date('2026-06-01'));
48
+ expect(segment.timeRange?.to).toEqual(new Date('2026-06-30'));
49
+ expect(segment.date).toEqual(new Date('2026-07-01'));
50
+ expect(segment.year).toBe(2026);
51
+ expect(segment.number).toBe(7);
52
+ expect(segment.booked).toBe('%PDF-1.7 ');
53
+ expect(segment.closingInfo).toBe('Abschluss');
54
+ expect(segment.conditionsInfo).toBe('Konditionen');
55
+ expect(segment.advertisement).toBe('Werbung');
56
+ expect(segment.iban).toBe('DE991234567123456');
57
+ expect(segment.bic).toBe('BANK12');
58
+ expect(segment.name).toBe('Muster');
59
+ expect(segment.name2).toBe('GmbH');
60
+ expect(segment.name3).toBe('i:G:');
61
+ expect(segment.receipt).toBe('abcd');
62
+ });
63
+ it('decode and encode roundtrip matches', () => {
64
+ expect(encode(decode(text))).toBe(text);
65
+ });
66
+ it('decode without the optional elements', () => {
67
+ const segment = decode("HIEKA:5:5:3+3+20260601:20260630++++@9@%PDF-1.7 '");
68
+ expect(segment.format).toBe(StatementFormat.PDF);
69
+ expect(segment.timeRange?.from).toEqual(new Date('2026-06-01'));
70
+ expect(segment.date).toBeUndefined();
71
+ expect(segment.number).toBeUndefined();
72
+ expect(segment.booked).toBe('%PDF-1.7 ');
73
+ expect(segment.receipt).toBeUndefined();
74
+ });
75
+ });
76
+ describe('HKEKA / HIEKA older versions', () => {
77
+ // Up to version 3 the request carries the national account connection, from version 4
78
+ // on the international one; `year` does not exist before version 3. Getting this wrong
79
+ // puts an IBAN into the slot the bank reads as an account number.
80
+ it('encodes version 3 with the national account connection and no year', () => {
81
+ const segment = {
82
+ header: { segId: HKEKA.Id, segNr: 3, version: 3 },
83
+ account: { accountNumber: '2759161761', bank: { country: 280, bankId: '10090000' } },
84
+ statementFormat: StatementFormat.PDF,
85
+ statementNumber: 7,
86
+ };
87
+ expect(encode(segment)).toBe("HKEKA:3:3+2759161761::280:10090000+3+7'");
88
+ });
89
+ it('encodes version 5 with the international account connection', () => {
90
+ const segment = {
91
+ header: { segId: HKEKA.Id, segNr: 3, version: 5 },
92
+ account: { iban: 'DE991234567123456', bic: 'BANK12' },
93
+ statementFormat: StatementFormat.PDF,
94
+ statementNumber: 7,
95
+ };
96
+ expect(encode(segment)).toBe("HKEKA:3:5+DE991234567123456:BANK12+3+7'");
97
+ });
98
+ // Up to version 4 the response has no date/year/number — `booked` follows the time
99
+ // range directly. Decoded with the version 5 layout this does not throw, it hands out
100
+ // the advertisement text as the statement document.
101
+ it('decodes a version 4 response without shifting the document', () => {
102
+ const segment = decode("HIEKA:5:4+3+20260601:20260630+@9@%PDF-1.7 +Abschluss+Konditionen+Werbung+DE991234567123456+BANK12+Muster+++@4@abcd'");
103
+ expect(segment.booked).toBe('%PDF-1.7 ');
104
+ expect(segment.closingInfo).toBe('Abschluss');
105
+ expect(segment.advertisement).toBe('Werbung');
106
+ expect(segment.iban).toBe('DE991234567123456');
107
+ expect(segment.date).toBeUndefined();
108
+ expect(segment.year).toBeUndefined();
109
+ expect(segment.number).toBeUndefined();
110
+ expect(segment.receipt).toBe('abcd');
111
+ });
112
+ it('decodes a version 1 response, which has no iban/bic/name', () => {
113
+ const segment = decode("HIEKA:5:1+3+20260601:20260630+@9@%PDF-1.7 +Abschluss+Konditionen+Werbung+@4@abcd'");
114
+ expect(segment.booked).toBe('%PDF-1.7 ');
115
+ expect(segment.advertisement).toBe('Werbung');
116
+ expect(segment.iban).toBeUndefined();
117
+ expect(segment.receipt).toBe('abcd');
118
+ });
119
+ });
120
+ describe('HIEKAS v5', () => {
121
+ it('decode and encode roundtrip matches', () => {
122
+ const text = "HIEKAS:4:5:4+1+1+0+J:N:J:1:3'";
123
+ const segment = decode(text);
124
+ expect(segment.params.indexAllowed).toBe(true);
125
+ expect(segment.params.receiptRequired).toBe(false);
126
+ expect(segment.params.maxEntryCountAllowed).toBe(true);
127
+ expect(segment.params.supportedFormats).toEqual(['1', '3']);
128
+ expect(encode(segment)).toBe(text);
129
+ });
130
+ });
131
+ describe('binary payloads', () => {
132
+ // A PDF contains every character FinTS uses structurally: + and ' as separators,
133
+ // @ for binary markers, ? for escaping. Only the declared length keeps them apart
134
+ // from real syntax.
135
+ it('carries a payload containing FinTS control characters through unharmed', () => {
136
+ const pdf = "%PDF-1.7\n+ ' @ ? +++ '''\nstartxref\n%%EOF";
137
+ const text = `HIEKA:5:5:3+3+20260601:20260630+20260701+2026+7+@${pdf.length}@${pdf}+++++++++`;
138
+ const segment = decode(`${text}'`);
139
+ expect(segment.booked).toBe(pdf);
140
+ expect(segment.number).toBe(7);
141
+ });
142
+ it('honours the declared length instead of reading to the end of the field', () => {
143
+ // Some banks pad a binary field; the declared length is what counts.
144
+ const pdf = '%PDF-1.7 ';
145
+ const segment = decode(`HIEKA:5:5:3+3+20260601:20260630+20260701+2026+7+@${pdf.length}@${pdf}\u0000+++++++++'`);
146
+ expect(segment.booked).toBe(pdf);
147
+ expect(segment.booked).not.toContain('\u0000');
148
+ });
149
+ });
150
+ describe('ElectronicStatementInteraction', () => {
151
+ const pdf = '%PDF-1.7 fake';
152
+ function messageWith(hieka, continuation) {
153
+ const answers = continuation
154
+ ? `HIRMG:3:2+0010::Entgegengenommen.+3040::Es liegen weitere Dokumente vor.:${continuation}'`
155
+ : "HIRMG:3:2+0010::Entgegengenommen.'";
156
+ return Message.decode(`${answers}${hieka}`);
157
+ }
158
+ function hiekaText(booked) {
159
+ return (`HIEKA:5:5:3+3+20260601:20260630+20260701+2026+7+@${booked.length}@${booked}` +
160
+ `+Abschluss+Konditionen+Werbung+DE991234567123456+BANK12+Muster+GmbH++@4@abcd'`);
161
+ }
162
+ function handle(message) {
163
+ const interaction = new ElectronicStatementInteraction('123');
164
+ const clientResponse = { bankAnswers: message.getBankAnswers() };
165
+ interaction.handleResponse(message, clientResponse);
166
+ return clientResponse;
167
+ }
168
+ it('maps the response onto a statement', () => {
169
+ const response = handle(messageWith(hiekaText(pdf)));
170
+ expect(response.statements).toHaveLength(1);
171
+ const statement = response.statements[0];
172
+ expect(statement.format).toBe(StatementFormat.PDF);
173
+ expect(statement.year).toBe(2026);
174
+ expect(statement.number).toBe(7);
175
+ expect(statement.from).toEqual(new Date('2026-06-01'));
176
+ expect(statement.iban).toBe('DE991234567123456');
177
+ expect(statement.accountName).toBe('Muster GmbH');
178
+ expect(statement.receipt).toBe('abcd');
179
+ expect(Buffer.from(statement.document).toString('latin1')).toBe(pdf);
180
+ });
181
+ it('reports the offset of a waiting successor and nothing otherwise', () => {
182
+ expect(handle(messageWith(hiekaText(pdf), 'AUFSETZ_1')).nextOffset).toBe('AUFSETZ_1');
183
+ expect(handle(messageWith(hiekaText(pdf))).nextOffset).toBeUndefined();
184
+ });
185
+ it('collects every statement the response carries', () => {
186
+ const message = messageWith(`${hiekaText(pdf)}${hiekaText('%PDF-1.7 second')}`);
187
+ expect(handle(message).statements).toHaveLength(2);
188
+ });
189
+ it('unwraps a base64 wrapped document, but only when it proves to be one', () => {
190
+ const wrapped = Buffer.from(pdf, 'latin1').toString('base64');
191
+ const unwrapped = handle(messageWith(hiekaText(wrapped))).statements[0].document;
192
+ expect(Buffer.from(unwrapped).toString('latin1')).toBe(pdf);
193
+ // Base64-looking text that does NOT decode to a document must survive untouched.
194
+ const notADocument = 'SGVsbG8gV29ybGQ=';
195
+ const kept = handle(messageWith(hiekaText(notADocument))).statements[0].document;
196
+ expect(Buffer.from(kept).toString('latin1')).toBe(notADocument);
197
+ });
198
+ });
@@ -0,0 +1,181 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { FinTSConfig } from '../config.js';
3
+ import { Dialog } from '../dialog.js';
4
+ import { StatementInteractionCAMT } from '../interactions/statementInteractionCAMT.js';
5
+ import { CustomerOrderMessage, Message } from '../message.js';
6
+ import { HICAZ } from '../segments/HICAZ.js';
7
+ import { HKCAZ } from '../segments/HKCAZ.js';
8
+ import { registerSegments } from '../segments/registry.js';
9
+ vi.mock('../httpClient.js', () => ({
10
+ HttpClient: class MockHttpClient {
11
+ url;
12
+ debug;
13
+ debugRaw;
14
+ constructor(url, debug = false, debugRaw = false) {
15
+ this.url = url;
16
+ this.debug = debug;
17
+ this.debugRaw = debugRaw;
18
+ }
19
+ sendMessage = vi.fn();
20
+ },
21
+ }));
22
+ registerSegments();
23
+ const CAMT_DESCRIPTOR = 'urn?:iso?:std?:iso?:20022?:tech?:xsd?:camt.052.001.08';
24
+ /**
25
+ * A HICAZ segment as the bank sends it. Every portion of a parted response is a
26
+ * COMPLETE segment — it repeats account and descriptor before carrying its own share
27
+ * of the CAMT documents.
28
+ */
29
+ function hicazText(...camtDocuments) {
30
+ const booked = camtDocuments.map((doc) => `@${doc.length}@${doc}`).join(':');
31
+ return `HICAZ:5:1+DE991234567123456:BANK12+${CAMT_DESCRIPTOR}+${booked}'`;
32
+ }
33
+ function responseMessage(hicaz, withContinuation) {
34
+ const answers = withContinuation
35
+ ? "HIRMG:3:2+0010::Entgegengenommen.+3040::Es liegen weitere Umsaetze vor.:AUFSETZ_1'"
36
+ : "HIRMG:3:2+0010::Entgegengenommen.+0020::Abfrage erfolgreich.'";
37
+ return Message.decode(`${answers}${hicaz}`, HICAZ.Id);
38
+ }
39
+ describe('parted responses (bank answer code 3040)', () => {
40
+ let config;
41
+ let dialog;
42
+ beforeEach(() => {
43
+ const bankingInformation = {
44
+ systemId: 'MOCK_SYSTEM_ID',
45
+ bankMessages: [],
46
+ bpd: {
47
+ version: 1,
48
+ bankId: '12030000',
49
+ bankName: 'Mock Bank',
50
+ countryCode: 280,
51
+ url: 'http://mock.bank.url',
52
+ allowedTransactions: [
53
+ { transId: 'HKCAZ', tanRequired: false, versions: [1] },
54
+ ],
55
+ supportedTanMethods: [],
56
+ availableTanMethodIds: [],
57
+ maxTransactionsPerMessage: 1,
58
+ supportedLanguages: [],
59
+ supportedHbciVersions: [300],
60
+ },
61
+ };
62
+ config = FinTSConfig.fromBankingInformation('PRODUCT', '1.0', bankingInformation, 'user', 'pin');
63
+ dialog = new Dialog(config);
64
+ });
65
+ it('delivers every portion into the message the caller holds', async () => {
66
+ const first = responseMessage(hicazText('<Doc>one</Doc>'), true);
67
+ const second = responseMessage(hicazText('<Doc>two</Doc>', '<Doc>three</Doc>'), false);
68
+ vi.mocked(dialog.httpClient.sendMessage).mockResolvedValueOnce(second);
69
+ const interaction = new StatementInteractionCAMT('123');
70
+ const request = new CustomerOrderMessage(HKCAZ.Id, HICAZ.Id);
71
+ request.addSegment({
72
+ header: { segId: HKCAZ.Id, segNr: 0, version: 1 },
73
+ account: { iban: 'DE991234567123456', bic: 'BANK12' },
74
+ acceptedCamtFormats: ['urn:iso:std:iso:20022:tech:xsd:camt.052.001.08'],
75
+ allAccounts: false,
76
+ });
77
+ // biome-ignore lint/suspicious/noExplicitAny: reaching into the private collector on purpose
78
+ await dialog.handlePartedMessages(request, first, interaction);
79
+ // Before the fix this was a single unresolved PARTED segment and everything after
80
+ // the first portion was lost without a trace.
81
+ const segments = first.findAllSegments(HICAZ.Id);
82
+ expect(first.findAllSegments('PARTED')).toHaveLength(0);
83
+ expect(segments).toHaveLength(2);
84
+ expect(segments.flatMap((s) => s.bookedTransactions)).toEqual([
85
+ '<Doc>one</Doc>',
86
+ '<Doc>two</Doc>',
87
+ '<Doc>three</Doc>',
88
+ ]);
89
+ });
90
+ it('leaves an unparted response untouched', async () => {
91
+ const only = responseMessage(hicazText('<Doc>one</Doc>'), false);
92
+ const interaction = new StatementInteractionCAMT('123');
93
+ const request = new CustomerOrderMessage(HKCAZ.Id, HICAZ.Id);
94
+ request.addSegment({
95
+ header: { segId: HKCAZ.Id, segNr: 0, version: 1 },
96
+ account: { iban: 'DE991234567123456', bic: 'BANK12' },
97
+ acceptedCamtFormats: ['urn:iso:std:iso:20022:tech:xsd:camt.052.001.08'],
98
+ allAccounts: false,
99
+ });
100
+ // biome-ignore lint/suspicious/noExplicitAny: reaching into the private collector on purpose
101
+ await dialog.handlePartedMessages(request, only, interaction);
102
+ expect(dialog.httpClient.sendMessage).not.toHaveBeenCalled();
103
+ const segments = only.findAllSegments(HICAZ.Id);
104
+ expect(segments).toHaveLength(1);
105
+ expect(segments[0].bookedTransactions).toEqual(['<Doc>one</Doc>']);
106
+ });
107
+ });
108
+ describe('StatementInteractionCAMT with a parted response', () => {
109
+ it('parses the CAMT documents of every segment, not just the first', () => {
110
+ const camt = (id, amount) => `<?xml version="1.0"?><Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.052.001.08">` +
111
+ `<BkToCstmrAcctRpt><GrpHdr><MsgId>${id}</MsgId><CreDtTm>2026-07-01T10:00:00+02:00</CreDtTm></GrpHdr>` +
112
+ `<Rpt><Id>${id}</Id><Acct><Id><IBAN>DE991234567123456</IBAN></Id><Ccy>EUR</Ccy></Acct>` +
113
+ `<Bal><Tp><CdOrPrtry><Cd>PRCD</Cd></CdOrPrtry></Tp><Amt Ccy="EUR">1000.00</Amt>` +
114
+ `<CdtDbtInd>CRDT</CdtDbtInd><Dt><Dt>2026-06-30</Dt></Dt></Bal>` +
115
+ `<Bal><Tp><CdOrPrtry><Cd>CLBD</Cd></CdOrPrtry></Tp><Amt Ccy="EUR">990.00</Amt>` +
116
+ `<CdtDbtInd>CRDT</CdtDbtInd><Dt><Dt>2026-07-01</Dt></Dt></Bal>` +
117
+ `<Ntry><Amt>${amount}</Amt><CdtDbtInd>DBIT</CdtDbtInd>` +
118
+ `<BookgDt><Dt>2026-07-01</Dt></BookgDt><ValDt><Dt>2026-07-01</Dt></ValDt>` +
119
+ `<AcctSvcrRef>TXN${id}</AcctSvcrRef>` +
120
+ `<NtryDtls><TxDtls><RmtInf><Ustrd>Test ${id}</Ustrd></RmtInf></TxDtls></NtryDtls>` +
121
+ `</Ntry></Rpt></BkToCstmrAcctRpt></Document>`;
122
+ const message = Message.decode(`${hicazText(camt('A', '10.00'))}${hicazText(camt('B', '20.00'))}`);
123
+ expect(message.findAllSegments(HICAZ.Id)).toHaveLength(2);
124
+ const interaction = new StatementInteractionCAMT('123');
125
+ const clientResponse = { statements: [] };
126
+ interaction.handleResponse(message, clientResponse);
127
+ const transactions = clientResponse.statements.flatMap((s) => s.transactions);
128
+ expect(transactions).toHaveLength(2);
129
+ });
130
+ });
131
+ describe('several response segments in one bank message', () => {
132
+ it('resolves every portion, not just the first', async () => {
133
+ // Eine Botschaft mit ZWEI HICAZ-Segmenten. Vorher wurde nur das erste aufgeloest;
134
+ // das zweite blieb als PARTED im Baum und war fuer findAllSegments unsichtbar.
135
+ const answers = "HIRMG:3:2+0010::Entgegengenommen.+0020::Abfrage erfolgreich.'";
136
+ const message = Message.decode(`${answers}${hicazText('<Doc>one</Doc>')}${hicazText('<Doc>two</Doc>')}`, HICAZ.Id);
137
+ expect(message.findAllSegments('PARTED')).toHaveLength(2);
138
+ const dialog = new Dialog(FinTSConfig.fromBankingInformation('PRODUCT', '1.0', {
139
+ systemId: 'X',
140
+ bankMessages: [],
141
+ bpd: {
142
+ version: 1,
143
+ bankId: '12030000',
144
+ bankName: 'Mock',
145
+ countryCode: 280,
146
+ url: 'http://mock.bank.url',
147
+ allowedTransactions: [{ transId: 'HKCAZ', tanRequired: false, versions: [1] }],
148
+ supportedTanMethods: [],
149
+ availableTanMethodIds: [],
150
+ maxTransactionsPerMessage: 1,
151
+ supportedLanguages: [],
152
+ supportedHbciVersions: [300],
153
+ },
154
+ // biome-ignore lint/suspicious/noExplicitAny: schlanker Mock
155
+ }, 'user', 'pin'));
156
+ const request = new CustomerOrderMessage(HKCAZ.Id, HICAZ.Id);
157
+ request.addSegment({
158
+ header: { segId: HKCAZ.Id, segNr: 0, version: 1 },
159
+ account: { iban: 'DE991234567123456', bic: 'BANK12' },
160
+ acceptedCamtFormats: ['urn:iso:std:iso:20022:tech:xsd:camt.052.001.08'],
161
+ allAccounts: false,
162
+ });
163
+ // biome-ignore lint/suspicious/noExplicitAny: private Sammelroutine, absichtlich
164
+ await dialog.handlePartedMessages(request, message, new StatementInteractionCAMT('123'));
165
+ expect(message.findAllSegments('PARTED')).toHaveLength(0);
166
+ const segments = message.findAllSegments(HICAZ.Id);
167
+ expect(segments).toHaveLength(2);
168
+ expect(segments.flatMap((s) => s.bookedTransactions)).toEqual([
169
+ '<Doc>one</Doc>',
170
+ '<Doc>two</Doc>',
171
+ ]);
172
+ });
173
+ it('does not mistake a parameter segment for a response segment', () => {
174
+ // HICAZS begins like HICAZ. Without the colon in the comparison it would be held
175
+ // back as PARTED and never decoded — the same for HIEKAS/HIEKA, HIKAZS/HIKAZ.
176
+ const hicazs = "HICAZS:16:1:4+1+1+0+450:N:N:urn?:iso?:std?:iso?:20022?:tech?:xsd?:camt.052.001.08'";
177
+ const message = Message.decode(hicazs, HICAZ.Id);
178
+ expect(message.findAllSegments('PARTED')).toHaveLength(0);
179
+ expect(message.findAllSegments('HICAZS')).toHaveLength(1);
180
+ });
181
+ });
@@ -1,6 +1,7 @@
1
1
  import { FinTSConfig } from './config.js';
2
2
  import { type AccountBalanceResponse } from './interactions/balanceInteraction.js';
3
3
  import type { StatementResponse } from './interactions/customerInteraction.js';
4
+ import { type ElectronicStatementOptions, type ElectronicStatementResponse } from './interactions/electronicStatementInteraction.js';
4
5
  import type { InitResponse } from './interactions/initDialogInteraction.js';
5
6
  import { type PortfolioResponse } from './interactions/portfolioInteraction.js';
6
7
  import type { TanMethod } from './tanMethod.js';
@@ -126,6 +127,33 @@ export declare class FinTSClient {
126
127
  * @returns a credit card statements response containing an array of statements
127
128
  */
128
129
  getCreditCardStatementsWithTan(tanReference: string, tan?: string): Promise<StatementResponse>;
130
+ /**
131
+ * Checks if the bank supports fetching electronic account statements in general or for the given account number
132
+ * @param accountNumber when the account number is provided, checks if the account supports fetching of electronic statements
133
+ * @returns true if the bank (and account) supports fetching electronic account statements
134
+ */
135
+ canGetElectronicStatements(accountNumber?: string): boolean;
136
+ /**
137
+ * Fetches an electronic account statement (Elektronischer Kontoauszug) for the given account number
138
+ *
139
+ * This returns the statement document the bank files in the customer's electronic mailbox,
140
+ * usually a PDF, not a list of transactions. The bank hands out one statement per call and
141
+ * announces a waiting successor in `nextOffset`; pass that value back in `options.offset` to
142
+ * fetch the next one. Banks that set `receiptRequired` in their HIEKAS parameters keep
143
+ * offering a statement until it has been acknowledged with its receipt.
144
+ *
145
+ * @param accountNumber - the account number to fetch the statement for, must be an account available in the config.bankingInformation.upd.accounts
146
+ * @param options - optional format, statement number and year, entry limit and offset
147
+ * @returns a response containing the statement documents and the offset of a waiting successor
148
+ */
149
+ getElectronicStatements(accountNumber: string, options?: ElectronicStatementOptions): Promise<ElectronicStatementResponse>;
150
+ /**
151
+ * Continues the electronic account statement fetching when a TAN is required
152
+ * @param tanReference The TAN reference provided in the first call's response
153
+ * @param tan The TAN entered by the user, can be omitted if a decoupled TAN method is used
154
+ * @returns a response containing the statement documents
155
+ */
156
+ getElectronicStatementsWithTan(tanReference: string, tan?: string): Promise<ElectronicStatementResponse>;
129
157
  private startCustomerOrderInteraction;
130
158
  private continueCustomerInteractionWithTan;
131
159
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EACN,KAAK,sBAAsB,EAE3B,MAAM,sCAAsC,CAAC;AAE9C,OAAO,KAAK,EAGX,iBAAiB,EACjB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAEN,KAAK,iBAAiB,EACtB,MAAM,wCAAwC,CAAC;AAShD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,mBAAoB,SAAQ,YAAY;CAAG;AAE5D;;GAEG;AACH,qBAAa,WAAW;IAOJ,MAAM,EAAE,WAAW;IANtC,OAAO,CAAC,aAAa,CAAqB;IAE1C;;;OAGG;gBACgB,MAAM,EAAE,WAAW;IAUtC;;;;OAIG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS;IAI/C;;;OAGG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAI1C;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAMjD;;;;;OAKG;IACG,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAI1F;;;;OAIG;IACH,oBAAoB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO;IAMrD;;;;OAIG;IACG,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAO/E;;;;;OAKG;IACG,wBAAwB,CAC7B,YAAY,EAAE,MAAM,EACpB,GAAG,CAAC,EAAE,MAAM,GACV,OAAO,CAAC,sBAAsB,CAAC;IAQlC;;;;OAIG;IACH,uBAAuB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO;IAexD;;;;;;;OAOG;IACG,oBAAoB,CACzB,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,IAAI,EACX,EAAE,CAAC,EAAE,IAAI,EACT,UAAU,GAAE,OAAc,GACxB,OAAO,CAAC,iBAAiB,CAAC;IAuB7B;;;;;OAKG;IACG,2BAA2B,CAChC,YAAY,EAAE,MAAM,EACpB,GAAG,CAAC,EAAE,MAAM,GACV,OAAO,CAAC,iBAAiB,CAAC;IAQ7B;;;;OAIG;IACH,eAAe,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO;IAMhD;;;;;;;OAOG;IACG,YAAY,CACjB,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,GAAG,GAAG,GAAG,EACxB,UAAU,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,iBAAiB,CAAC;IAM7B;;;;;;OAMG;IACG,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQzF;;;;OAIG;IACH,0BAA0B,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO;IAM3D;;;;;;;OAOG;IACG,uBAAuB,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAM7F;;;;;OAKG;IACG,8BAA8B,CACnC,YAAY,EAAE,MAAM,EACpB,GAAG,CAAC,EAAE,MAAM,GACV,OAAO,CAAC,iBAAiB,CAAC;YAQf,6BAA6B;YAsB7B,kCAAkC;CA2BhD"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,13 @@ export declare class Binary extends DataElement {
3
3
  maxLength?: number | undefined;
4
4
  constructor(name: string, minCount?: number, maxCount?: number, maxLength?: number | undefined, minVersion?: number, maxVersion?: number);
5
5
  encode(value: string): string;
6
+ /**
7
+ * A binary value arrives as `@<length>@<data>`. The length is authoritative: it is the
8
+ * only thing that tells data apart from the separators and escape characters that a
9
+ * binary payload — a PDF, for instance — is full of. Returning everything after the
10
+ * second `@` instead would hand out whatever the bank appended between the end of the
11
+ * data and the next separator.
12
+ */
6
13
  decode(text: string): string;
7
14
  }
8
15
  //# sourceMappingURL=Binary.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Binary.d.ts","sourceRoot":"","sources":["../../../src/dataElements/Binary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,MAAO,SAAQ,WAAW;IAK9B,SAAS,CAAC,EAAE,MAAM;gBAHzB,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAI,EACZ,QAAQ,SAAI,EACL,SAAS,CAAC,EAAE,MAAM,YAAA,EACzB,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM;IAKpB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAY7B,MAAM,CAAC,IAAI,EAAE,MAAM;CAGnB"}
1
+ {"version":3,"file":"Binary.d.ts","sourceRoot":"","sources":["../../../src/dataElements/Binary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,MAAO,SAAQ,WAAW;IAK9B,SAAS,CAAC,EAAE,MAAM;gBAHzB,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAI,EACZ,QAAQ,SAAI,EACL,SAAS,CAAC,EAAE,MAAM,YAAA,EACzB,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM;IAKpB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAY7B;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM;CAgBnB"}
@@ -19,6 +19,20 @@ export declare class Dialog {
19
19
  private createCurrentCustomerMessage;
20
20
  private createCurrentTanMessage;
21
21
  private getTanMediaName;
22
+ /**
23
+ * Collects a response that the bank spreads over several messages.
24
+ *
25
+ * When the bank cannot fit a response into one message it answers with code 3040 plus
26
+ * a continuation mark. Repeating the order with that mark yields the next portion —
27
+ * as a COMPLETE, self-contained response segment, not as a byte-wise continuation of
28
+ * the previous one. A HICAZ follow-up, for example, repeats the account and the CAMT
29
+ * descriptor before carrying its own share of the statements.
30
+ *
31
+ * Every portion is therefore decoded on its own and all of them are placed into the
32
+ * response message the caller holds. Combining their payloads needs to know what the
33
+ * payload means — one MT940 stream continues, a list of CAMT documents is appended —
34
+ * so that step belongs to the interaction, which does it via `findAllSegments`.
35
+ */
22
36
  private handlePartedMessages;
23
37
  private checkEnded;
24
38
  private getHttpClient;
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/dialog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACN,KAAK,cAAc,EACnB,KAAK,mBAAmB,EAExB,MAAM,uCAAuC,CAAC;AAW/C,qBAAa,MAAM;IAWV,MAAM,EAAE,WAAW;IAV3B,QAAQ,EAAE,MAAM,CAAO;IACvB,iBAAiB,SAAK;IACtB,YAAY,EAAE,mBAAmB,EAAE,CAAM;IACzC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAa;IACnD,uBAAuB,SAAK;IAC5B,aAAa,UAAS;IACtB,QAAQ,UAAS;IACjB,UAAU,EAAE,UAAU,CAAC;gBAGf,MAAM,EAAE,WAAW,EAC1B,YAAY,GAAE,OAAe;IAc9B,IAAI,kBAAkB,IAAI,mBAAmB,CAE5C;IAEK,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAyC7C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAmD7F,sBAAsB,CAAC,WAAW,EAAE,mBAAmB,EAAE,YAAY,UAAQ,GAAG,IAAI;IAuBpF,OAAO,CAAC,4BAA4B;IAuDpC,OAAO,CAAC,uBAAuB;IAiC/B,OAAO,CAAC,eAAe;YAeT,oBAAoB;IAoDlC,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,aAAa;CAGrB"}
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/dialog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACN,KAAK,cAAc,EACnB,KAAK,mBAAmB,EAExB,MAAM,uCAAuC,CAAC;AAW/C,qBAAa,MAAM;IAWV,MAAM,EAAE,WAAW;IAV3B,QAAQ,EAAE,MAAM,CAAO;IACvB,iBAAiB,SAAK;IACtB,YAAY,EAAE,mBAAmB,EAAE,CAAM;IACzC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAa;IACnD,uBAAuB,SAAK;IAC5B,aAAa,UAAS;IACtB,QAAQ,UAAS;IACjB,UAAU,EAAE,UAAU,CAAC;gBAGf,MAAM,EAAE,WAAW,EAC1B,YAAY,GAAE,OAAe;IAc9B,IAAI,kBAAkB,IAAI,mBAAmB,CAE5C;IAEK,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAyC7C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAmD7F,sBAAsB,CAAC,WAAW,EAAE,mBAAmB,EAAE,YAAY,UAAQ,GAAG,IAAI;IAuBpF,OAAO,CAAC,4BAA4B;IAuDpC,OAAO,CAAC,uBAAuB;IAiC/B,OAAO,CAAC,eAAe;IAevB;;;;;;;;;;;;;OAaG;YACW,oBAAoB;IA8DlC,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,aAAa;CAGrB"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * An electronic account statement (Elektronischer Kontoauszug) as handed out by the bank.
3
+ *
4
+ * Unlike {@link Statement} this is not a list of parsed transactions but the statement
5
+ * document itself — the same document the bank files in the customer's electronic mailbox,
6
+ * usually a PDF.
7
+ */
8
+ export type ElectronicStatement = {
9
+ /** The format of {@link document}, as announced by the bank in the HIEKAS parameters */
10
+ format: string;
11
+ /** Start of the period the statement covers */
12
+ from?: Date;
13
+ /** End of the period the statement covers */
14
+ to?: Date;
15
+ /** The date the statement was created by the bank */
16
+ date?: Date;
17
+ /** The year the statement number refers to, statement numbers restart every year */
18
+ year?: number;
19
+ /** The sequential number of the statement within its year */
20
+ number?: number;
21
+ /** The statement document itself */
22
+ document: Uint8Array;
23
+ /** Information about the closing of the accounting period, when the bank provides it */
24
+ closingInfo?: string;
25
+ /** Information about the conditions of the account, when the bank provides it */
26
+ conditionsInfo?: string;
27
+ /** Advertising text, when the bank provides it */
28
+ advertisement?: string;
29
+ iban?: string;
30
+ bic?: string;
31
+ /** The account holder's name, joined from the up to three name lines the bank sends */
32
+ accountName?: string;
33
+ /**
34
+ * The receipt for this statement. When the bank requires acknowledgement
35
+ * (`receiptRequired` in the HIEKAS parameters), it only stops handing out a statement
36
+ * once it has been acknowledged with this receipt.
37
+ */
38
+ receipt?: string;
39
+ };
40
+ //# sourceMappingURL=electronicStatement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"electronicStatement.d.ts","sourceRoot":"","sources":["../../src/electronicStatement.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAAG;IACjC,wFAAwF;IACxF,MAAM,EAAE,MAAM,CAAC;IAEf,+CAA+C;IAC/C,IAAI,CAAC,EAAE,IAAI,CAAC;IAEZ,6CAA6C;IAC7C,EAAE,CAAC,EAAE,IAAI,CAAC;IAEV,qDAAqD;IACrD,IAAI,CAAC,EAAE,IAAI,CAAC;IAEZ,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,oCAAoC;IACpC,QAAQ,EAAE,UAAU,CAAC;IAErB,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,iFAAiF;IACjF,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC"}
@@ -6,14 +6,17 @@ export * from './bpd.js';
6
6
  export * from './client.js';
7
7
  export * from './config.js';
8
8
  export * from './dialog.js';
9
+ export * from './electronicStatement.js';
9
10
  export * from './httpClient.js';
10
11
  export { AccountBalanceResponse } from './interactions/balanceInteraction.js';
11
12
  export { ClientResponse, StatementResponse } from './interactions/customerInteraction.js';
13
+ export { ElectronicStatementOptions, ElectronicStatementResponse, } from './interactions/electronicStatementInteraction.js';
12
14
  export { PortfolioResponse } from './interactions/portfolioInteraction.js';
13
15
  export * from './message.js';
14
16
  export * from './mt535parser.js';
15
17
  export * from './mt940parser.js';
16
18
  export * from './segment.js';
19
+ export { StatementFormat } from './segments/HKEKA.js';
17
20
  export * from './statement.js';
18
21
  export * from './upd.js';
19
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1F,OAAO,EACN,0BAA0B,EAC1B,2BAA2B,GAC3B,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"creditcardStatementInteraction.d.ts","sourceRoot":"","sources":["../../../src/interactions/creditcardStatementInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAAE,KAAK,cAAc,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzF,MAAM,WAAW,2BAA4B,SAAQ,cAAc;IAClE,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,mBAAmB,EAAE,CAAC;CAClC;AAED,qBAAa,8BAA+B,SAAQ,wBAAwB;IAEnE,aAAa,EAAE,MAAM;IACrB,IAAI,CAAC,EAAE,IAAI;gBADX,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,IAAI,YAAA;IAKnB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,EAAE;IAuB5C,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,2BAA2B;CA8E7E"}
1
+ {"version":3,"file":"creditcardStatementInteraction.d.ts","sourceRoot":"","sources":["../../../src/interactions/creditcardStatementInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAAE,KAAK,cAAc,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzF,MAAM,WAAW,2BAA4B,SAAQ,cAAc;IAClE,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,mBAAmB,EAAE,CAAC;CAClC;AAED,qBAAa,8BAA+B,SAAQ,wBAAwB;IAEnE,aAAa,EAAE,MAAM;IACrB,IAAI,CAAC,EAAE,IAAI;gBADX,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,IAAI,YAAA;IAKnB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,EAAE;IAuB5C,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,2BAA2B;CAuF7E"}
@@ -0,0 +1,33 @@
1
+ import type { FinTSConfig } from '../config.js';
2
+ import type { ElectronicStatement } from '../electronicStatement.js';
3
+ import type { Message } from '../message.js';
4
+ import type { Segment } from '../segment.js';
5
+ import { type StatementFormat } from '../segments/HKEKA.js';
6
+ import { type ClientResponse, CustomerOrderInteraction } from './customerInteraction.js';
7
+ export interface ElectronicStatementResponse extends ClientResponse {
8
+ statements: ElectronicStatement[];
9
+ /**
10
+ * The offset to pass to the next call when the bank announced further documents
11
+ * (answer code 3040), undefined when no more statements are waiting.
12
+ */
13
+ nextOffset?: string;
14
+ }
15
+ export interface ElectronicStatementOptions {
16
+ /** The format to request, defaults to the first format the bank announces in HIEKAS */
17
+ format?: StatementFormat;
18
+ /** Fetch one specific statement, only allowed when the bank sets `indexAllowed` */
19
+ number?: number;
20
+ /** The year the statement number refers to */
21
+ year?: number;
22
+ maxEntries?: number;
23
+ /** The offset from a previous response's `nextOffset` */
24
+ offset?: string;
25
+ }
26
+ export declare class ElectronicStatementInteraction extends CustomerOrderInteraction {
27
+ accountNumber: string;
28
+ options: ElectronicStatementOptions;
29
+ constructor(accountNumber: string, options?: ElectronicStatementOptions);
30
+ createSegments(init: FinTSConfig): Segment[];
31
+ handleResponse(response: Message, clientResponse: ElectronicStatementResponse): void;
32
+ }
33
+ //# sourceMappingURL=electronicStatementInteraction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"electronicStatementInteraction.d.ts","sourceRoot":"","sources":["../../../src/interactions/electronicStatementInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAA4B,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,KAAK,cAAc,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzF,MAAM,WAAW,2BAA4B,SAAQ,cAAc;IAClE,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IAC1C,uFAAuF;IACvF,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAwCD,qBAAa,8BAA+B,SAAQ,wBAAwB;IAEnE,aAAa,EAAE,MAAM;IACrB,OAAO,EAAE,0BAA0B;gBADnC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,0BAA+B;IAKhD,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,EAAE;IAwB5C,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,2BAA2B;CA4B7E"}
@@ -1 +1 @@
1
- {"version":3,"file":"portfolioInteraction.d.ts","sourceRoot":"","sources":["../../../src/interactions/portfolioInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,KAAK,OAAO,EAAe,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAAE,KAAK,cAAc,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAEvC;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,mBAAmB,CAAC;AAE3D,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACxD;;OAEG;IACH,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,wBAAwB;IAEzD,aAAa,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC;IACjB,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,UAAU,CAAC;IACnB,OAAO,CAAC,gBAAgB,CAAC;gBAJlB,aAAa,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,YAAA,EACjB,YAAY,CAAC,EAAE,GAAG,GAAG,GAAG,YAAA,EACxB,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,gBAAgB,CAAC,EAAE,MAAM,YAAA;IAKlC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,EAAE;IA4B9C,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,iBAAiB,GAAG,IAAI;CAe1E"}
1
+ {"version":3,"file":"portfolioInteraction.d.ts","sourceRoot":"","sources":["../../../src/interactions/portfolioInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,KAAK,OAAO,EAAe,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAAE,KAAK,cAAc,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAEvC;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,mBAAmB,CAAC;AAE3D,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACxD;;OAEG;IACH,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,wBAAwB;IAEzD,aAAa,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC;IACjB,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,UAAU,CAAC;IACnB,OAAO,CAAC,gBAAgB,CAAC;gBAJlB,aAAa,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,YAAA,EACjB,YAAY,CAAC,EAAE,GAAG,GAAG,GAAG,YAAA,EACxB,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,gBAAgB,CAAC,EAAE,MAAM,YAAA;IAKlC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,EAAE;IA4B9C,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,iBAAiB,GAAG,IAAI;CAqB1E"}
@@ -1 +1 @@
1
- {"version":3,"file":"sepaAccountInteraction.d.ts","sourceRoot":"","sources":["../../../src/interactions/sepaAccountInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAAE,KAAK,cAAc,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzF,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IAC1D,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,qBAAa,sBAAuB,SAAQ,wBAAwB;IAE3D,QAAQ,CAAC,EAAE,MAAM,EAAE;IACnB,UAAU,CAAC,EAAE,MAAM;gBADnB,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAA,EAAE,oCAAoC;IACzD,UAAU,CAAC,EAAE,MAAM,YAAA;IAK3B,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,EAAE;IAwB5C,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,mBAAmB;CAmBrE"}
1
+ {"version":3,"file":"sepaAccountInteraction.d.ts","sourceRoot":"","sources":["../../../src/interactions/sepaAccountInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAAE,KAAK,cAAc,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzF,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IAC1D,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,qBAAa,sBAAuB,SAAQ,wBAAwB;IAE3D,QAAQ,CAAC,EAAE,MAAM,EAAE;IACnB,UAAU,CAAC,EAAE,MAAM;gBADnB,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAA,EAAE,oCAAoC;IACzD,UAAU,CAAC,EAAE,MAAM,YAAA;IAK3B,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,EAAE;IAwB5C,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,mBAAmB;CAqBrE"}
@@ -1 +1 @@
1
- {"version":3,"file":"statementInteractionCAMT.d.ts","sourceRoot":"","sources":["../../../src/interactions/statementInteractionCAMT.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAK7C,OAAO,EAAE,wBAAwB,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE5F,qBAAa,wBAAyB,SAAQ,wBAAwB;IAE7D,aAAa,EAAE,MAAM;IACrB,IAAI,CAAC,EAAE,IAAI;IACX,EAAE,CAAC,EAAE,IAAI;gBAFT,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,IAAI,YAAA,EACX,EAAE,CAAC,EAAE,IAAI,YAAA;IAKjB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,EAAE;IA6B5C,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,iBAAiB;CAiCnE"}
1
+ {"version":3,"file":"statementInteractionCAMT.d.ts","sourceRoot":"","sources":["../../../src/interactions/statementInteractionCAMT.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAK7C,OAAO,EAAE,wBAAwB,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE5F,qBAAa,wBAAyB,SAAQ,wBAAwB;IAE7D,aAAa,EAAE,MAAM;IACrB,IAAI,CAAC,EAAE,IAAI;IACX,EAAE,CAAC,EAAE,IAAI;gBAFT,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,IAAI,YAAA,EACX,EAAE,CAAC,EAAE,IAAI,YAAA;IAKjB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,EAAE;IA6B5C,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,iBAAiB;CAuCnE"}
@@ -1 +1 @@
1
- {"version":3,"file":"statementInteractionMT940.d.ts","sourceRoot":"","sources":["../../../src/interactions/statementInteractionMT940.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAAE,wBAAwB,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE5F,qBAAa,yBAA0B,SAAQ,wBAAwB;IAE9D,aAAa,EAAE,MAAM;IACrB,IAAI,CAAC,EAAE,IAAI;IACX,EAAE,CAAC,EAAE,IAAI;gBAFT,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,IAAI,YAAA,EACX,EAAE,CAAC,EAAE,IAAI,YAAA;IAKjB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,EAAE;IAoB5C,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,iBAAiB;CAcnE"}
1
+ {"version":3,"file":"statementInteractionMT940.d.ts","sourceRoot":"","sources":["../../../src/interactions/statementInteractionMT940.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAAE,wBAAwB,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE5F,qBAAa,yBAA0B,SAAQ,wBAAwB;IAE9D,aAAa,EAAE,MAAM;IACrB,IAAI,CAAC,EAAE,IAAI;IACX,EAAE,CAAC,EAAE,IAAI;gBAFT,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,IAAI,YAAA,EACX,EAAE,CAAC,EAAE,IAAI,YAAA;IAKjB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,EAAE;IAoB5C,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,iBAAiB;CAsBnE"}