lib-fints 1.3.1 → 1.4.1

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 (90) hide show
  1. package/README.md +43 -40
  2. package/dist/camtParser.js +412 -0
  3. package/dist/client.js +65 -82
  4. package/dist/dataGroups/SepaAccount.js +17 -0
  5. package/dist/dataGroups/SepaAccountParameters.js +16 -0
  6. package/dist/dialog.js +126 -108
  7. package/dist/httpClient.js +17 -3
  8. package/dist/index.js +1 -0
  9. package/dist/interactions/balanceInteraction.js +1 -1
  10. package/dist/interactions/customerInteraction.js +6 -3
  11. package/dist/interactions/endDialogInteraction.js +17 -0
  12. package/dist/interactions/initDialogInteraction.js +18 -8
  13. package/dist/interactions/sepaAccountInteraction.js +48 -0
  14. package/dist/interactions/statementInteractionCAMT.js +54 -0
  15. package/dist/interactions/{statementInteraction.js → statementInteractionMT940.js} +11 -8
  16. package/dist/interactions/tanMediaInteraction.js +4 -0
  17. package/dist/segments/HICAZ.js +22 -0
  18. package/dist/segments/HICAZS.js +19 -0
  19. package/dist/segments/HISPA.js +14 -0
  20. package/dist/segments/HISPAS.js +14 -0
  21. package/dist/segments/HKCAZ.js +28 -0
  22. package/dist/segments/HKSPA.js +21 -0
  23. package/dist/segments/registry.js +16 -2
  24. package/dist/statement.js +1 -0
  25. package/dist/tests/HICAZS.test.js +18 -0
  26. package/dist/tests/HKCAZ.test.js +47 -0
  27. package/dist/tests/camtParser.test.js +673 -0
  28. package/dist/tests/client.test.js +642 -23
  29. package/dist/tests/dialog.test.js +234 -0
  30. package/dist/types/bankAccount.d.ts +2 -3
  31. package/dist/types/bankAccount.d.ts.map +1 -1
  32. package/dist/types/camtParser.d.ts +31 -0
  33. package/dist/types/camtParser.d.ts.map +1 -0
  34. package/dist/types/client.d.ts +10 -10
  35. package/dist/types/client.d.ts.map +1 -1
  36. package/dist/types/config.d.ts +2 -1
  37. package/dist/types/config.d.ts.map +1 -1
  38. package/dist/types/dataGroups/SepaAccount.d.ts +11 -0
  39. package/dist/types/dataGroups/SepaAccount.d.ts.map +1 -0
  40. package/dist/types/dataGroups/SepaAccountParameters.d.ts +13 -0
  41. package/dist/types/dataGroups/SepaAccountParameters.d.ts.map +1 -0
  42. package/dist/types/dialog.d.ts +12 -8
  43. package/dist/types/dialog.d.ts.map +1 -1
  44. package/dist/types/httpClient.d.ts +2 -1
  45. package/dist/types/httpClient.d.ts.map +1 -1
  46. package/dist/types/index.d.ts +2 -1
  47. package/dist/types/index.d.ts.map +1 -1
  48. package/dist/types/interactions/customerInteraction.d.ts +7 -3
  49. package/dist/types/interactions/customerInteraction.d.ts.map +1 -1
  50. package/dist/types/interactions/endDialogInteraction.d.ts +13 -0
  51. package/dist/types/interactions/endDialogInteraction.d.ts.map +1 -0
  52. package/dist/types/interactions/initDialogInteraction.d.ts +2 -3
  53. package/dist/types/interactions/initDialogInteraction.d.ts.map +1 -1
  54. package/dist/types/interactions/sepaAccountInteraction.d.ts +17 -0
  55. package/dist/types/interactions/sepaAccountInteraction.d.ts.map +1 -0
  56. package/dist/types/interactions/{statementInteraction.d.ts → statementInteractionCAMT.d.ts} +4 -7
  57. package/dist/types/interactions/statementInteractionCAMT.d.ts.map +1 -0
  58. package/dist/types/interactions/statementInteractionMT940.d.ts +13 -0
  59. package/dist/types/interactions/statementInteractionMT940.d.ts.map +1 -0
  60. package/dist/types/interactions/tanMediaInteraction.d.ts.map +1 -1
  61. package/dist/types/mt940parser.d.ts +2 -38
  62. package/dist/types/mt940parser.d.ts.map +1 -1
  63. package/dist/types/segments/HICAZ.d.ts +22 -0
  64. package/dist/types/segments/HICAZ.d.ts.map +1 -0
  65. package/dist/types/segments/HICAZS.d.ts +17 -0
  66. package/dist/types/segments/HICAZS.d.ts.map +1 -0
  67. package/dist/types/segments/HISPA.d.ts +17 -0
  68. package/dist/types/segments/HISPA.d.ts.map +1 -0
  69. package/dist/types/segments/HISPAS.d.ts +14 -0
  70. package/dist/types/segments/HISPAS.d.ts.map +1 -0
  71. package/dist/types/segments/HKCAZ.d.ts +27 -0
  72. package/dist/types/segments/HKCAZ.d.ts.map +1 -0
  73. package/dist/types/segments/HKKAZ.d.ts +1 -1
  74. package/dist/types/segments/HKSAL.d.ts +1 -1
  75. package/dist/types/segments/HKSPA.d.ts +21 -0
  76. package/dist/types/segments/HKSPA.d.ts.map +1 -0
  77. package/dist/types/segments/HKTAN.d.ts +1 -1
  78. package/dist/types/segments/registry.d.ts.map +1 -1
  79. package/dist/types/statement.d.ts +39 -0
  80. package/dist/types/statement.d.ts.map +1 -0
  81. package/dist/types/tests/HICAZS.test.d.ts +2 -0
  82. package/dist/types/tests/HICAZS.test.d.ts.map +1 -0
  83. package/dist/types/tests/HKCAZ.test.d.ts +2 -0
  84. package/dist/types/tests/HKCAZ.test.d.ts.map +1 -0
  85. package/dist/types/tests/camtParser.test.d.ts +2 -0
  86. package/dist/types/tests/camtParser.test.d.ts.map +1 -0
  87. package/dist/types/tests/dialog.test.d.ts +2 -0
  88. package/dist/types/tests/dialog.test.d.ts.map +1 -0
  89. package/package.json +4 -1
  90. package/dist/types/interactions/statementInteraction.d.ts.map +0 -1
@@ -0,0 +1,234 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { Dialog } from '../dialog.js';
3
+ import { FinTSConfig } from '../config.js';
4
+ import { Message } from '../message.js';
5
+ import { InitDialogInteraction } from '../interactions/initDialogInteraction.js';
6
+ import { Language, TanMediaRequirement } from '../codes.js';
7
+ import { SepaAccountInteraction } from '../interactions/sepaAccountInteraction.js';
8
+ import { registerSegments } from '../segments/registry.js';
9
+ // Mock HttpClient to prevent real HTTP calls
10
+ vi.mock('../httpClient.js', () => ({
11
+ HttpClient: vi.fn().mockImplementation(() => ({
12
+ sendMessage: vi.fn(),
13
+ })),
14
+ }));
15
+ describe('Dialog', () => {
16
+ let config;
17
+ let dialog;
18
+ let httpClientSendMessageMock;
19
+ registerSegments();
20
+ beforeEach(() => {
21
+ const bankingInformation = {
22
+ systemId: 'MOCK_SYSTEM_ID',
23
+ bankMessages: [],
24
+ bpd: {
25
+ version: 1,
26
+ bankId: '12030000',
27
+ bankName: 'Mock Bank',
28
+ countryCode: 280,
29
+ url: 'http://mock.bank.url',
30
+ allowedTransactions: [
31
+ {
32
+ transId: 'HKSPA',
33
+ tanRequired: false,
34
+ versions: [1, 2, 3],
35
+ },
36
+ ],
37
+ supportedTanMethods: [
38
+ {
39
+ id: 940,
40
+ tanProcess: 1,
41
+ name: 'chipTAN',
42
+ version: 6,
43
+ isDecoupled: false,
44
+ activeTanMediaCount: 1,
45
+ activeTanMedia: ['TEST_MEDIA'],
46
+ tanMediaRequirement: TanMediaRequirement.Optional,
47
+ },
48
+ ],
49
+ availableTanMethodIds: [940],
50
+ supportedLanguages: [Language.German],
51
+ maxTransactionsPerMessage: 1,
52
+ },
53
+ };
54
+ config = FinTSConfig.fromBankingInformation('TestProduct', '1.0', bankingInformation, 'testuser', '12345', 940, // tanMethodId
55
+ 'TEST_MEDIA' // tanMediaName
56
+ );
57
+ // Create dialog instance
58
+ dialog = new Dialog(config);
59
+ vi.spyOn(dialog.currentInteraction, 'handleClientResponse').mockReturnValue({
60
+ dialogId: 'MOCK_DIALOG_123',
61
+ success: true,
62
+ requiresTan: false,
63
+ bankAnswers: [{ code: 20, text: 'Success' }],
64
+ });
65
+ vi.spyOn(dialog.interactions[dialog.interactions.length - 1], 'handleClientResponse').mockReturnValue({
66
+ dialogId: 'MOCK_DIALOG_123',
67
+ success: true,
68
+ requiresTan: false,
69
+ bankAnswers: [{ code: 100, text: 'Dialog ended' }],
70
+ });
71
+ // Mock the HttpClient.sendMessage method
72
+ httpClientSendMessageMock = vi.mocked(dialog.httpClient.sendMessage);
73
+ const responseMessage = new Message([]);
74
+ httpClientSendMessageMock.mockResolvedValue(responseMessage);
75
+ });
76
+ afterEach(() => {
77
+ vi.clearAllMocks();
78
+ });
79
+ describe('constructor', () => {
80
+ it('creates a new dialog with provided config', () => {
81
+ expect(dialog.config).toBe(config);
82
+ expect(dialog.dialogId).toBe('0');
83
+ expect(dialog.lastMessageNumber).toBe(0);
84
+ expect(dialog.interactions).toHaveLength(2);
85
+ expect(dialog.interactions[0]).toBeInstanceOf(InitDialogInteraction);
86
+ expect(dialog.currentInteractionIndex).toBe(0);
87
+ expect(dialog.isInitialized).toBe(false);
88
+ expect(dialog.hasEnded).toBe(false);
89
+ expect(dialog.httpClient.sendMessage).toBeDefined();
90
+ });
91
+ it('creates dialog with syncSystemId option', () => {
92
+ const syncDialog = new Dialog(config, true);
93
+ const initDialogInteraction = syncDialog.interactions[0];
94
+ expect(initDialogInteraction).toBeInstanceOf(InitDialogInteraction);
95
+ expect(initDialogInteraction.syncSystemId).toBe(true);
96
+ });
97
+ it('throws error when no config is provided', () => {
98
+ expect(() => new Dialog(null)).toThrow('configuration must be provided');
99
+ });
100
+ });
101
+ describe('currentInteraction getter', () => {
102
+ it('returns the current interaction', () => {
103
+ expect(dialog.currentInteraction).toBeInstanceOf(InitDialogInteraction);
104
+ });
105
+ });
106
+ describe('start()', () => {
107
+ it('successfully starts and ends a dialog', async () => {
108
+ const sepaInteraction = new SepaAccountInteraction();
109
+ vi.spyOn(sepaInteraction, 'handleClientResponse').mockReturnValue({
110
+ dialogId: 'MOCK_DIALOG_123',
111
+ success: true,
112
+ requiresTan: false,
113
+ bankAnswers: [{ code: 20, text: 'Success' }],
114
+ });
115
+ dialog.addCustomerInteraction(sepaInteraction);
116
+ const responses = await dialog.start();
117
+ expect(dialog.dialogId).toBe('MOCK_DIALOG_123');
118
+ expect(httpClientSendMessageMock).toHaveBeenCalledTimes(3);
119
+ expect(responses).toBeInstanceOf(Map);
120
+ expect(responses.size).toBe(3);
121
+ expect(dialog.currentInteraction).toBeUndefined();
122
+ expect(dialog.hasEnded).toBe(true);
123
+ });
124
+ it('throws error when dialog is already initialized', async () => {
125
+ dialog.isInitialized = true;
126
+ await expect(dialog.start()).rejects.toThrow('dialog has already been initialized');
127
+ });
128
+ it('throws error when dialog has ended', async () => {
129
+ dialog.hasEnded = true;
130
+ await expect(dialog.start()).rejects.toThrow('cannot start a dialog that has already ended');
131
+ });
132
+ it('throws error when lastMessageNumber > 0', async () => {
133
+ dialog.lastMessageNumber = 1;
134
+ await expect(dialog.start()).rejects.toThrow('dialog start can only be called on a new dialog');
135
+ });
136
+ it('handles TAN requirement correctly', async () => {
137
+ vi.spyOn(dialog.currentInteraction, 'handleClientResponse').mockReturnValue({
138
+ dialogId: 'MOCK_DIALOG_123',
139
+ success: true,
140
+ requiresTan: true,
141
+ tanReference: 'TAN_REF_123',
142
+ bankAnswers: [{ code: 3955, text: 'TAN required' }],
143
+ });
144
+ const responses = await dialog.start();
145
+ expect(dialog.currentInteraction).toBeInstanceOf(InitDialogInteraction);
146
+ expect(dialog.isInitialized).toBe(false);
147
+ expect(dialog.hasEnded).toBe(false);
148
+ const response = responses.get(dialog.currentInteraction.segId);
149
+ expect(response).toBeDefined();
150
+ expect(response.requiresTan).toBe(true);
151
+ expect(response.tanReference).toBe('TAN_REF_123');
152
+ });
153
+ });
154
+ describe('continue()', () => {
155
+ beforeEach(async () => {
156
+ vi.spyOn(dialog.currentInteraction, 'handleClientResponse').mockReturnValue({
157
+ dialogId: 'MOCK_DIALOG_123',
158
+ success: true,
159
+ requiresTan: true,
160
+ tanReference: 'TAN_REF_123',
161
+ bankAnswers: [{ code: 3955, text: 'TAN required' }],
162
+ });
163
+ await dialog.start();
164
+ vi.spyOn(dialog.currentInteraction, 'handleClientResponse').mockReturnValue({
165
+ dialogId: 'MOCK_DIALOG_123',
166
+ success: true,
167
+ requiresTan: false,
168
+ bankAnswers: [{ code: 20, text: 'Dialog initialized' }],
169
+ });
170
+ });
171
+ it('successfully continues with TAN', async () => {
172
+ const responses = await dialog.continue('TAN_REF_123', '123456');
173
+ expect(responses).toBeInstanceOf(Map);
174
+ expect(dialog.dialogId).toBe('MOCK_DIALOG_123');
175
+ expect(httpClientSendMessageMock).toHaveBeenCalledTimes(3);
176
+ expect(responses).toBeInstanceOf(Map);
177
+ expect(responses.size).toBe(2);
178
+ expect(dialog.currentInteraction).toBeUndefined();
179
+ expect(dialog.hasEnded).toBe(true);
180
+ });
181
+ it('successfully continues decoupled TAN method without TAN', async () => {
182
+ dialog.config.bankingInformation.bpd.supportedTanMethods[0].isDecoupled = true;
183
+ const responses = await dialog.continue('TAN_REF_123');
184
+ expect(responses).toBeInstanceOf(Map);
185
+ expect(responses.size).toBe(2);
186
+ expect(dialog.currentInteraction).toBeUndefined();
187
+ expect(dialog.hasEnded).toBe(true);
188
+ });
189
+ it('throws error when tanOrderReference is missing', async () => {
190
+ await expect(dialog.continue('')).rejects.toThrow('tanOrderReference must be provided to continue a customer order with a TAN');
191
+ });
192
+ it('throws error when TAN is missing for non-decoupled method', async () => {
193
+ // The default config already has a non-decoupled TAN method
194
+ await expect(dialog.continue('TAN_REF_123')).rejects.toThrow('TAN must be provided for non-decoupled TAN methods');
195
+ });
196
+ it('throws error when dialog has ended', async () => {
197
+ dialog.hasEnded = true;
198
+ await expect(dialog.continue('TAN_REF_123', '123456')).rejects.toThrow('cannot continue a customer order when dialog has already ended');
199
+ });
200
+ it('throws error when no current interaction', async () => {
201
+ dialog.currentInteractionIndex = dialog.interactions.length;
202
+ await expect(dialog.continue('TAN_REF_123', '123456')).rejects.toThrow('there is no running customer interaction in this dialog to continue');
203
+ });
204
+ });
205
+ describe('addCustomerInteraction()', () => {
206
+ let sepaAccountInteraction;
207
+ beforeEach(() => {
208
+ sepaAccountInteraction = new SepaAccountInteraction();
209
+ });
210
+ it('adds interaction to the end but before dialog end interaction by default', () => {
211
+ const initialLength = dialog.interactions.length;
212
+ dialog.addCustomerInteraction(sepaAccountInteraction);
213
+ expect(dialog.interactions).toHaveLength(initialLength + 1);
214
+ expect(dialog.interactions[dialog.interactions.length - 2]).toBe(sepaAccountInteraction);
215
+ expect(sepaAccountInteraction.dialog).toBe(dialog);
216
+ });
217
+ it('adds interaction after current when afterCurrent is true', () => {
218
+ const initialLength = dialog.interactions.length;
219
+ const currentIndex = dialog.currentInteractionIndex;
220
+ dialog.addCustomerInteraction(sepaAccountInteraction, true);
221
+ expect(dialog.interactions).toHaveLength(initialLength + 1);
222
+ expect(dialog.interactions[currentIndex + 1]).toBe(sepaAccountInteraction);
223
+ });
224
+ it('throws error when dialog has ended', () => {
225
+ dialog.hasEnded = true;
226
+ expect(() => dialog.addCustomerInteraction(sepaAccountInteraction)).toThrow('cannot queue another customer interaction when dialog has already ended');
227
+ });
228
+ it('throws error for unsupported transaction', () => {
229
+ // Mock unsupported transaction
230
+ sepaAccountInteraction.segId = 'UNSUPPORTED';
231
+ expect(() => dialog.addCustomerInteraction(sepaAccountInteraction)).toThrow('customer order transaction UNSUPPORTED is not supported according to the BPD');
232
+ });
233
+ });
234
+ });
@@ -1,4 +1,4 @@
1
- import { Account } from './dataGroups/Account.js';
1
+ import { SepaAccount } from './dataGroups/SepaAccount.js';
2
2
  import { AccountLimit, AllowedTransactions } from './segments/HIUPD.js';
3
3
  export declare enum AccountType {
4
4
  CheckingAccount = "CheckingAccount",
@@ -12,8 +12,7 @@ export declare enum AccountType {
12
12
  InsurancePolicy = "InsurancePolicy",
13
13
  Miscellaneous = "Miscellaneous"
14
14
  }
15
- export type BankAccount = Account & {
16
- iban?: string;
15
+ export type BankAccount = SepaAccount & {
17
16
  customerId: string;
18
17
  accountType: AccountType;
19
18
  currency: string;
@@ -1 +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"}
1
+ {"version":3,"file":"bankAccount.d.ts","sourceRoot":"","sources":["../../src/bankAccount.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAExE,oBAAY,WAAW;IACtB,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;CAC/B;AAED,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IACvC,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;CAC5C,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAWvE"}
@@ -0,0 +1,31 @@
1
+ import { Statement } from './statement.js';
2
+ export declare class CamtParsingError extends Error {
3
+ cause?: Error | undefined;
4
+ constructor(message: string, cause?: Error | undefined);
5
+ }
6
+ export declare class CamtParser {
7
+ private xmlData;
8
+ private parser;
9
+ constructor(xmlData: string);
10
+ parse(): Statement[];
11
+ private getDocumentObject;
12
+ private getReports;
13
+ private parseReport;
14
+ private getValueFromPath;
15
+ private parseBalances;
16
+ private parseTransactions;
17
+ private parseTransaction;
18
+ /**
19
+ * Extract party name from various possible CAMT structures
20
+ * Handles both direct name (<Dbtr><Nm>) and party structure (<Dbtr><Pty><Nm>)
21
+ */
22
+ private extractPartyName;
23
+ /**
24
+ * Extract bank identification code from various possible CAMT structures
25
+ * Handles both BIC and BICFI elements
26
+ */
27
+ private extractBankId;
28
+ private parseDate;
29
+ private parseBankTransactionCode;
30
+ }
31
+ //# sourceMappingURL=camtParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camtParser.d.ts","sourceRoot":"","sources":["../../src/camtParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAwB,MAAM,gBAAgB,CAAC;AAGjE,qBAAa,gBAAiB,SAAQ,KAAK;IACL,KAAK,CAAC;gBAA9B,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,mBAAO;CAIlD;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAY;gBAEd,OAAO,EAAE,MAAM;IAoB3B,KAAK,IAAI,SAAS,EAAE;IA8CpB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,WAAW;IAiEnB,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,aAAa;IAmFrB,OAAO,CAAC,iBAAiB;IA6BzB,OAAO,CAAC,gBAAgB;IA4ExB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAwCxB;;;OAGG;IACH,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,wBAAwB;CAyBjC"}
@@ -1,4 +1,4 @@
1
- import { StatementResponse } from './interactions/statementInteraction.js';
1
+ import { StatementResponse } from './interactions/customerInteraction.js';
2
2
  import { AccountBalanceResponse } from './interactions/balanceInteraction.js';
3
3
  import { PortfolioResponse } from './interactions/portfolioInteraction.js';
4
4
  import { FinTSConfig } from './config.js';
@@ -11,7 +11,7 @@ export interface SynchronizeResponse extends InitResponse {
11
11
  */
12
12
  export declare class FinTSClient {
13
13
  config: FinTSConfig;
14
- private openCustomerInteractions;
14
+ private currentDialog;
15
15
  /**
16
16
  * Creates a new FinTS client
17
17
  * @param config - the configuration for the client, use the static factory methods FinTSConfig.forFirstTimeUse or FinTSConfig.fromBankingInformation to create a configuration
@@ -70,9 +70,10 @@ export declare class FinTSClient {
70
70
  * @param accountNumber - the account number to fetch the statements for, must be an account available in the config.baningInformation.UPD.accounts
71
71
  * @param from - an optional start date of the period to fetch the statements for
72
72
  * @param to - an optional end date of the period to fetch the statements for
73
+ * @param preferCamt - whether to prefer CAMT format over MT940 when both are supported (default: true)
73
74
  * @returns an account statements response containing an array of statements
74
75
  */
75
- getAccountStatements(accountNumber: string, from?: Date, to?: Date): Promise<StatementResponse>;
76
+ getAccountStatements(accountNumber: string, from?: Date, to?: Date, preferCamt?: boolean): Promise<StatementResponse>;
76
77
  /**
77
78
  * Continues the account statements fetching when a TAN is required
78
79
  * @param tanReference The TAN reference provided in the first call's response
@@ -96,12 +97,12 @@ export declare class FinTSClient {
96
97
  */
97
98
  getPortfolio(accountNumber: string, currency?: string, priceQuality?: '1' | '2', maxEntries?: number): Promise<PortfolioResponse>;
98
99
  /**
99
- * Continues the portfolio fetching when a TAN is required
100
- * @param tanReference The TAN reference provided in the first call's response
101
-
102
- * @param tan The TAN entered by the user, can be omitted if a decoupled TAN method is used
103
- * @returns a portfolio response containing holdings and total value
104
- */
100
+ * Continues the portfolio fetching when a TAN is required
101
+ * @param tanReference The TAN reference provided in the first call's response
102
+
103
+ * @param tan The TAN entered by the user, can be omitted if a decoupled TAN method is used
104
+ * @returns a portfolio response containing holdings and total value
105
+ */
105
106
  getPortfolioWithTan(tanReference: string, tan?: string): Promise<PortfolioResponse>;
106
107
  /**
107
108
  * Checks if the bank supports fetching credit card statements in general or for the given account number
@@ -127,6 +128,5 @@ export declare class FinTSClient {
127
128
  getCreditCardStatementsWithTan(tanReference: string, tan?: string): Promise<StatementResponse>;
128
129
  private startCustomerOrderInteraction;
129
130
  private continueCustomerInteractionWithTan;
130
- private initDialog;
131
131
  }
132
132
  //# sourceMappingURL=client.d.ts.map
@@ -1 +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,iBAAiB,EAAwB,MAAM,wCAAwC,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAK3C,OAAO,EAAyB,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAG9F,MAAM,WAAW,mBAAoB,SAAQ,YAAY;CAAG;AAE5D;;GAEG;AACH,qBAAa,WAAW;IAOJ,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,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;IAI/E;;;;;OAKG;IACG,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAInG;;;;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,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIjG;;;;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;IAKzF;;;;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;IAI7F;;;;;OAKG;IACG,8BAA8B,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAItF,6BAA6B;YAqB7B,kCAAkC;YA0ClC,UAAU;CAcxB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAsB,MAAM,sCAAsC,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAwB,MAAM,wCAAwC,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAM3C,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAIvE,MAAM,WAAW,mBAAoB,SAAQ,YAAY;CAAG;AAE5D;;GAEG;AACH,qBAAa,WAAW;IAOH,MAAM,EAAE,WAAW;IANtC,OAAO,CAAC,aAAa,CAAqB;IAE1C;;;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;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;IAK/E;;;;;OAKG;IACG,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAInG;;;;OAIG;IACH,uBAAuB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO;IAaxD;;;;;;;OAOG;IACG,oBAAoB,CACxB,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,IAAI,EACX,EAAE,CAAC,EAAE,IAAI,EACT,UAAU,GAAE,OAAc,GACzB,OAAO,CAAC,iBAAiB,CAAC;IAuB7B;;;;;OAKG;IACG,2BAA2B,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQjG;;;;OAIG;IACH,eAAe,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO;IAMhD;;;;;;;OAOG;IACG,YAAY,CAChB,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,GAAG,GAAG,GAAG,EACxB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,CAAC;IAM7B;;;;;;SAME;IACI,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIzF;;;;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,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAItF,6BAA6B;YAa7B,kCAAkC;CAoBjD"}
@@ -1,5 +1,6 @@
1
1
  import { TanMethod } from './tanMethod.js';
2
2
  import { BankingInformation } from './bankingInformation.js';
3
+ import { BankAccount } from './bankAccount.js';
3
4
  /**
4
5
  * Configuration for the FinTS client
5
6
  */
@@ -94,6 +95,6 @@ export declare class FinTSConfig {
94
95
  * Gets the bank account information for a specific account number
95
96
  * @param accountNumber The account number
96
97
  */
97
- getBankAccount(accountNumber: string): import("./bankAccount.js").BankAccount;
98
+ getBankAccount(accountNumber: string): BankAccount;
98
99
  }
99
100
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D;;GAEG;AACH,qBAAa,WAAW;IAKf,SAAS,EAAE,MAAM;IACjB,cAAc,EAAE,MAAM;IAC7B,OAAO,CAAC,GAAG,CAAC;IACZ,OAAO,CAAC,kBAAkB,CAAC;IACpB,MAAM,CAAC;IACP,GAAG,CAAC;IAEJ,WAAW,CAAC;IACZ,YAAY,CAAC;IACb,UAAU,CAAC;IAClB,OAAO,CAAC,OAAO;IAdhB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,YAAY,UAAS;IAErB,OAAO;IA+CP;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,eAAe,CACrB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,GAAE,MAAY,GACvB,WAAW;IAgBd;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,sBAAsB,CAC5B,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,CAAC,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,GAAE,MAAY,GACvB,WAAW;IAgBd;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;OAEG;IACH,IAAI,mBAAmB,IAAI,SAAS,EAAE,CAMrC;IAED;;;OAGG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM;IAQnC;;;OAGG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM;IAYnC;;OAEG;IACH,IAAI,iBAAiB,IAAI,SAAS,GAAG,SAAS,CAE7C;IAED;;;OAGG;IACH,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIhD;;;;OAIG;IACH,6BAA6B,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAK9E;;;OAGG;IACH,iCAAiC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAetE;;;OAGG;IACH,cAAc,CAAC,aAAa,EAAE,MAAM;CASpC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;GAEG;AACH,qBAAa,WAAW;IAKf,SAAS,EAAE,MAAM;IACjB,cAAc,EAAE,MAAM;IAC7B,OAAO,CAAC,GAAG,CAAC;IACZ,OAAO,CAAC,kBAAkB,CAAC;IACpB,MAAM,CAAC;IACP,GAAG,CAAC;IAEJ,WAAW,CAAC;IACZ,YAAY,CAAC;IACb,UAAU,CAAC;IAClB,OAAO,CAAC,OAAO;IAdhB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,YAAY,UAAS;IAErB,OAAO;IA+CP;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,eAAe,CACrB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,GAAE,MAAY,GACvB,WAAW;IAgBd;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,sBAAsB,CAC5B,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,CAAC,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,GAAE,MAAY,GACvB,WAAW;IAgBd;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;OAEG;IACH,IAAI,mBAAmB,IAAI,SAAS,EAAE,CAMrC;IAED;;;OAGG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM;IAQnC;;;OAGG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM;IAYnC;;OAEG;IACH,IAAI,iBAAiB,IAAI,SAAS,GAAG,SAAS,CAE7C;IAED;;;OAGG;IACH,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIhD;;;;OAIG;IACH,6BAA6B,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAK9E;;;OAGG;IACH,iCAAiC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAetE;;;OAGG;IACH,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW;CASlD"}
@@ -0,0 +1,11 @@
1
+ import { DataGroup } from './DataGroup.js';
2
+ import { Account } from './Account.js';
3
+ export type SepaAccount = Account & {
4
+ isSepaAccount?: boolean;
5
+ iban?: string;
6
+ bic?: string;
7
+ };
8
+ export declare class SepaAccountGroup extends DataGroup {
9
+ constructor(name: string, minCount?: number, maxCount?: number, minVersion?: number, maxVersion?: number);
10
+ }
11
+ //# sourceMappingURL=SepaAccount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SepaAccount.d.ts","sourceRoot":"","sources":["../../../src/dataGroups/SepaAccount.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,SAAS;gBAClC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAI,EAAE,QAAQ,SAAI,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;CAiB9F"}
@@ -0,0 +1,13 @@
1
+ import { DataGroup } from './DataGroup.js';
2
+ export type SepaAccountParameters = {
3
+ individualAccountRetrievalAllowed: boolean;
4
+ nationalAccountAllowed: boolean;
5
+ structuredPurposeAllowed: boolean;
6
+ maxEntriesAllowed?: boolean;
7
+ reservedPurposePositions?: number;
8
+ supportedSepaFormats?: string[];
9
+ };
10
+ export declare class SepaAccountParametersGroup extends DataGroup {
11
+ constructor(name: string, minCount?: number, maxCount?: number, minVersion?: number, maxVersion?: number);
12
+ }
13
+ //# sourceMappingURL=SepaAccountParameters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SepaAccountParameters.d.ts","sourceRoot":"","sources":["../../../src/dataGroups/SepaAccountParameters.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,MAAM,qBAAqB,GAAG;IACnC,iCAAiC,EAAE,OAAO,CAAC;IAC3C,sBAAsB,EAAE,OAAO,CAAC;IAChC,wBAAwB,EAAE,OAAO,CAAC;IAClC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC,CAAC;AAEF,qBAAa,0BAA2B,SAAQ,SAAS;gBAC5C,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAI,EAAE,QAAQ,SAAI,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;CAiB9F"}
@@ -1,20 +1,24 @@
1
1
  import { FinTSConfig } from './config.js';
2
2
  import { HttpClient } from './httpClient.js';
3
- import { Message } from './message.js';
4
- import { ClientResponse, CustomerOrderInteraction } from './interactions/customerInteraction.js';
5
- import { InitDialogInteraction, InitResponse } from './interactions/initDialogInteraction.js';
3
+ import { ClientResponse, CustomerInteraction } from './interactions/customerInteraction.js';
6
4
  export declare class Dialog {
7
5
  config: FinTSConfig;
8
6
  dialogId: string;
9
7
  lastMessageNumber: number;
8
+ interactions: CustomerInteraction[];
9
+ responses: Map<string, ClientResponse>;
10
+ currentInteractionIndex: number;
10
11
  isInitialized: boolean;
11
12
  hasEnded: boolean;
12
13
  httpClient: HttpClient;
13
- constructor(config: FinTSConfig);
14
- initialize(interaction: InitDialogInteraction): Promise<InitResponse>;
15
- end(): Promise<boolean>;
16
- startCustomerOrderInteraction<TClientResponse extends ClientResponse>(interaction: CustomerOrderInteraction): Promise<TClientResponse>;
17
- sendTanMessage(refSegId: string, tanOrderReference: string, tan?: string): Promise<Message>;
14
+ constructor(config: FinTSConfig, syncSystemId?: boolean);
15
+ get currentInteraction(): CustomerInteraction;
16
+ start(): Promise<Map<string, ClientResponse>>;
17
+ continue(tanOrderReference: string, tan?: string): Promise<Map<string, ClientResponse>>;
18
+ addCustomerInteraction(interaction: CustomerInteraction, afterCurrent?: boolean): void;
19
+ private createCurrentCustomerMessage;
20
+ private createCurrentTanMessage;
21
+ private handlePartedMessages;
18
22
  private checkEnded;
19
23
  private getHttpClient;
20
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAyC,OAAO,EAAE,MAAM,cAAc,CAAC;AAQ9E,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAE9F,qBAAa,MAAM;IAOC,MAAM,EAAE,WAAW;IANtC,QAAQ,EAAE,MAAM,CAAO;IACvB,iBAAiB,SAAK;IACtB,aAAa,UAAS;IACtB,QAAQ,UAAS;IACjB,UAAU,EAAE,UAAU,CAAC;gBAEJ,MAAM,EAAE,WAAW;IAQhC,UAAU,CAAC,WAAW,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC;IA0DrE,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;IAuCvB,6BAA6B,CAAC,eAAe,SAAS,cAAc,EACzE,WAAW,EAAE,wBAAwB,GACnC,OAAO,CAAC,eAAe,CAAC;IA+FrB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuDjG,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,aAAa;CAGrB"}
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAQ7C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAA4B,MAAM,uCAAuC,CAAC;AAItH,qBAAa,MAAM;IAUC,MAAM,EAAE,WAAW;IATtC,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;gBAEJ,MAAM,EAAE,WAAW,EAAE,YAAY,GAAE,OAAe;IAarE,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;IAqBpF,OAAO,CAAC,4BAA4B;IAoDpC,OAAO,CAAC,uBAAuB;YAkCjB,oBAAoB;IAuClC,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,aAAa;CAGrB"}
@@ -2,7 +2,8 @@ import { CustomerMessage, Message } from './message.js';
2
2
  export declare class HttpClient {
3
3
  url: string;
4
4
  debug: boolean;
5
- constructor(url: string, debug?: boolean);
5
+ debugRaw: boolean;
6
+ constructor(url: string, debug?: boolean, debugRaw?: boolean);
6
7
  sendMessage(message: CustomerMessage): Promise<Message>;
7
8
  }
8
9
  //# sourceMappingURL=httpClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"httpClient.d.ts","sourceRoot":"","sources":["../../src/httpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAwB,OAAO,EAAE,MAAM,cAAc,CAAC;AAE9E,qBAAa,UAAU;IACF,GAAG,EAAE,MAAM;IAAS,KAAK;gBAAzB,GAAG,EAAE,MAAM,EAAS,KAAK,UAAQ;IAE9C,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;CAqC9D"}
1
+ {"version":3,"file":"httpClient.d.ts","sourceRoot":"","sources":["../../src/httpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAwB,OAAO,EAAE,MAAM,cAAc,CAAC;AAE9E,qBAAa,UAAU;IACH,GAAG,EAAE,MAAM;IAAS,KAAK;IAAiB,QAAQ;gBAAlD,GAAG,EAAE,MAAM,EAAS,KAAK,UAAQ,EAAS,QAAQ,UAAQ;IAEvE,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;CAiD7D"}
@@ -2,7 +2,7 @@ export * from './client.js';
2
2
  export * from './config.js';
3
3
  export { ClientResponse } from './interactions/customerInteraction.js';
4
4
  export { AccountBalanceResponse } from './interactions/balanceInteraction.js';
5
- export { StatementResponse } from './interactions/statementInteraction.js';
5
+ export { StatementResponse } from './interactions/customerInteraction.js';
6
6
  export { PortfolioResponse } from './interactions/portfolioInteraction.js';
7
7
  export * from './segment.js';
8
8
  export * from './message.js';
@@ -14,6 +14,7 @@ export * from './bankingInformation.js';
14
14
  export * from './accountBalance.js';
15
15
  export * from './bpd.js';
16
16
  export * from './upd.js';
17
+ export * from './statement.js';
17
18
  export * from './mt940parser.js';
18
19
  export * from './mt535parser.js';
19
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
@@ -3,6 +3,7 @@ import { Dialog } from '../dialog.js';
3
3
  import { FinTSConfig } from '../config.js';
4
4
  import { Message } from '../message.js';
5
5
  import { Segment } from '../segment.js';
6
+ import { Statement } from '../statement.js';
6
7
  export interface PhotoTan {
7
8
  mimeType: string;
8
9
  image: Uint8Array;
@@ -29,13 +30,16 @@ export interface ClientResponse {
29
30
  tanPhoto?: PhotoTan;
30
31
  tanMediaName?: string;
31
32
  }
33
+ export interface StatementResponse extends ClientResponse {
34
+ statements: Statement[];
35
+ }
32
36
  export declare abstract class CustomerInteraction {
33
37
  segId: string;
34
38
  dialog?: Dialog;
35
39
  constructor(segId: string);
36
- getSegments(init: FinTSConfig): Segment[];
37
- getClientResponse<TResponse extends ClientResponse>(message: Message): TResponse;
38
- protected abstract createSegments(init: FinTSConfig): Segment[];
40
+ getSegments(config: FinTSConfig): Segment[];
41
+ handleClientResponse(message: Message): ClientResponse;
42
+ protected abstract createSegments(config: FinTSConfig): Segment[];
39
43
  protected abstract handleResponse(response: Message, clientResponse: ClientResponse): void;
40
44
  private parseHHDUC;
41
45
  private handleBaseResponse;
@@ -1 +1 @@
1
- {"version":3,"file":"customerInteraction.d.ts","sourceRoot":"","sources":["../../../src/interactions/customerInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAIxC,MAAM,WAAW,QAAQ;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,UAAU,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,yBAAyB,EAAE,OAAO,CAAC;IACnC,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,8BAAsB,mBAAmB;IAGrB,KAAK,EAAE,MAAM;IAFhC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEG,KAAK,EAAE,MAAM;IAEhC,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,EAAE;IAIzC,iBAAiB,CAAC,SAAS,SAAS,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS;IAUhF,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,EAAE;IAC/D,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,GAAG,IAAI;IAE1F,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,kBAAkB;CA0C1B;AAED,8BAAsB,wBAAyB,SAAQ,mBAAmB;IACvC,aAAa,EAAE,MAAM;gBAA3C,KAAK,EAAE,MAAM,EAAS,aAAa,EAAE,MAAM;CAGvD"}
1
+ {"version":3,"file":"customerInteraction.d.ts","sourceRoot":"","sources":["../../../src/interactions/customerInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,MAAM,WAAW,QAAQ;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,UAAU,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,yBAAyB,EAAE,OAAO,CAAC;IACnC,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACxD,UAAU,EAAE,SAAS,EAAE,CAAC;CACxB;AAED,8BAAsB,mBAAmB;IAGrB,KAAK,EAAE,MAAM;IAFhC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEG,KAAK,EAAE,MAAM;IAEhC,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,EAAE;IAI3C,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc;IAetD,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,EAAE;IACjE,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,GAAG,IAAI;IAE1F,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,kBAAkB;CA0C1B;AAED,8BAAsB,wBAAyB,SAAQ,mBAAmB;IACvC,aAAa,EAAE,MAAM;gBAA3C,KAAK,EAAE,MAAM,EAAS,aAAa,EAAE,MAAM;CAGvD"}
@@ -0,0 +1,13 @@
1
+ import { ClientResponse, CustomerInteraction } from './customerInteraction.js';
2
+ import { Message } from '../message.js';
3
+ import { Segment } from '../segment.js';
4
+ import { FinTSConfig } from '../config.js';
5
+ export interface TanMediaResponse extends ClientResponse {
6
+ tanMediaList: string[];
7
+ }
8
+ export declare class EndDialogInteraction extends CustomerInteraction {
9
+ constructor();
10
+ createSegments(init: FinTSConfig): Segment[];
11
+ handleResponse(response: Message, clientResponse: ClientResponse): void;
12
+ }
13
+ //# sourceMappingURL=endDialogInteraction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endDialogInteraction.d.ts","sourceRoot":"","sources":["../../../src/interactions/endDialogInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAA4B,MAAM,0BAA0B,CAAC;AACzG,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3C,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACvD,YAAY,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,qBAAa,oBAAqB,SAAQ,mBAAmB;;IAK5D,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,EAAE;IAS5C,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc;CAGhE"}
@@ -1,4 +1,4 @@
1
- import { ClientResponse, CustomerInteraction, CustomerOrderInteraction } from './customerInteraction.js';
1
+ import { ClientResponse, CustomerInteraction } from './customerInteraction.js';
2
2
  import { Message } from '../message.js';
3
3
  import { Segment } from '../segment.js';
4
4
  import { FinTSConfig } from '../config.js';
@@ -9,8 +9,7 @@ export interface InitResponse extends ClientResponse {
9
9
  export declare class InitDialogInteraction extends CustomerInteraction {
10
10
  config: FinTSConfig;
11
11
  syncSystemId: boolean;
12
- followUpInteraction?: CustomerOrderInteraction | undefined;
13
- constructor(config: FinTSConfig, syncSystemId?: boolean, followUpInteraction?: CustomerOrderInteraction | undefined);
12
+ constructor(config: FinTSConfig, syncSystemId?: boolean);
14
13
  createSegments(init: FinTSConfig): Segment[];
15
14
  handleResponse(response: Message, clientResponse: InitResponse): void;
16
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"initDialogInteraction.d.ts","sourceRoot":"","sources":["../../../src/interactions/initDialogInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzG,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAe,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAiB3E,MAAM,WAAW,YAAa,SAAQ,cAAc;IACnD,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACxC;AAED,qBAAa,qBAAsB,SAAQ,mBAAmB;IAErD,MAAM,EAAE,WAAW;IACnB,YAAY;IACZ,mBAAmB,CAAC;gBAFpB,MAAM,EAAE,WAAW,EACnB,YAAY,UAAQ,EACpB,mBAAmB,CAAC,sCAA0B;IAKtD,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,EAAE;IAoC5C,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY;CA2I9D"}
1
+ {"version":3,"file":"initDialogInteraction.d.ts","sourceRoot":"","sources":["../../../src/interactions/initDialogInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAA4B,MAAM,0BAA0B,CAAC;AACzG,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAe,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAqB3E,MAAM,WAAW,YAAa,SAAQ,cAAc;IACnD,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACxC;AAED,qBAAa,qBAAsB,SAAQ,mBAAmB;IAC1C,MAAM,EAAE,WAAW;IAAS,YAAY;gBAAxC,MAAM,EAAE,WAAW,EAAS,YAAY,UAAQ;IAInE,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,EAAE;IAoC5C,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY;CAyJ9D"}
@@ -0,0 +1,17 @@
1
+ import { ClientResponse, CustomerOrderInteraction } from './customerInteraction.js';
2
+ import { Message } from '../message.js';
3
+ import { Segment } from '../segment.js';
4
+ import { FinTSConfig } from '../config.js';
5
+ import { SepaAccount } from '../dataGroups/SepaAccount.js';
6
+ export interface SepaAccountResponse extends ClientResponse {
7
+ sepaAccounts?: SepaAccount[];
8
+ }
9
+ export declare class SepaAccountInteraction extends CustomerOrderInteraction {
10
+ accounts?: string[] | undefined;
11
+ maxEntries?: number | undefined;
12
+ constructor(accounts?: string[] | undefined, // optional specific account numbers
13
+ maxEntries?: number | undefined);
14
+ createSegments(init: FinTSConfig): Segment[];
15
+ handleResponse(response: Message, clientResponse: SepaAccountResponse): void;
16
+ }
17
+ //# sourceMappingURL=sepaAccountInteraction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sepaAccountInteraction.d.ts","sourceRoot":"","sources":["../../../src/interactions/sepaAccountInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IAC1D,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,qBAAa,sBAAuB,SAAQ,wBAAwB;IAE3D,QAAQ,CAAC;IACT,UAAU,CAAC;gBADX,QAAQ,CAAC,sBAAU,EAAE,oCAAoC;IACzD,UAAU,CAAC,oBAAQ;IAK3B,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,EAAE;IAwB5C,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,mBAAmB;CAmBrE"}