fints-lib 0.6.0 → 0.7.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 (197) hide show
  1. package/README_advanced_usage.md +70 -0
  2. package/dist/client.d.ts +89 -0
  3. package/dist/client.js +473 -0
  4. package/dist/client.js.map +1 -0
  5. package/dist/constants.d.ts +15 -0
  6. package/dist/constants.js +19 -0
  7. package/dist/constants.js.map +1 -0
  8. package/dist/dialog.d.ts +111 -0
  9. package/dist/dialog.js +187 -0
  10. package/dist/dialog.js.map +1 -0
  11. package/dist/error-codes.d.ts +39 -0
  12. package/dist/error-codes.js +228 -0
  13. package/dist/error-codes.js.map +1 -0
  14. package/dist/errors/fints-error.d.ts +55 -0
  15. package/dist/errors/fints-error.js +131 -0
  16. package/dist/errors/fints-error.js.map +1 -0
  17. package/dist/errors/response-error.d.ts +6 -0
  18. package/dist/errors/response-error.js +20 -0
  19. package/dist/errors/response-error.js.map +1 -0
  20. package/dist/errors/tan-required-error.d.ts +40 -0
  21. package/dist/errors/tan-required-error.js +54 -0
  22. package/dist/errors/tan-required-error.js.map +1 -0
  23. package/dist/format.d.ts +81 -0
  24. package/dist/format.js +112 -0
  25. package/dist/format.js.map +1 -0
  26. package/dist/http-connection.d.ts +36 -0
  27. package/dist/http-connection.js +109 -0
  28. package/dist/http-connection.js.map +1 -0
  29. package/dist/index.d.ts +23 -0
  30. package/dist/index.js +40 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/logger.d.ts +4 -0
  33. package/dist/logger.js +13 -0
  34. package/dist/logger.js.map +1 -0
  35. package/dist/mt535.d.ts +19 -0
  36. package/dist/mt535.js +153 -0
  37. package/dist/mt535.js.map +1 -0
  38. package/dist/mt940-86-structured.d.ts +47 -0
  39. package/dist/mt940-86-structured.js +213 -0
  40. package/dist/mt940-86-structured.js.map +1 -0
  41. package/dist/pain-formats.d.ts +50 -0
  42. package/dist/pain-formats.js +7 -0
  43. package/dist/pain-formats.js.map +1 -0
  44. package/dist/pain.d.ts +21 -0
  45. package/dist/pain.js +315 -0
  46. package/dist/pain.js.map +1 -0
  47. package/dist/parse.d.ts +46 -0
  48. package/dist/parse.js +97 -0
  49. package/dist/parse.js.map +1 -0
  50. package/dist/pin-tan-client.d.ts +47 -0
  51. package/dist/pin-tan-client.js +35 -0
  52. package/dist/pin-tan-client.js.map +1 -0
  53. package/dist/request.d.ts +90 -0
  54. package/dist/request.js +102 -0
  55. package/dist/request.js.map +1 -0
  56. package/dist/response.d.ts +104 -0
  57. package/dist/response.js +197 -0
  58. package/dist/response.js.map +1 -0
  59. package/dist/return-value.d.ts +37 -0
  60. package/dist/return-value.js +31 -0
  61. package/dist/return-value.js.map +1 -0
  62. package/dist/segments/hibpa.d.ts +22 -0
  63. package/dist/segments/hibpa.js +36 -0
  64. package/dist/segments/hibpa.js.map +1 -0
  65. package/dist/segments/hiccs.d.ts +14 -0
  66. package/dist/segments/hiccs.js +28 -0
  67. package/dist/segments/hiccs.js.map +1 -0
  68. package/dist/segments/hiccss.d.ts +13 -0
  69. package/dist/segments/hiccss.js +24 -0
  70. package/dist/segments/hiccss.js.map +1 -0
  71. package/dist/segments/hicdb.d.ts +17 -0
  72. package/dist/segments/hicdb.js +62 -0
  73. package/dist/segments/hicdb.js.map +1 -0
  74. package/dist/segments/hicdbs.d.ts +16 -0
  75. package/dist/segments/hicdbs.js +28 -0
  76. package/dist/segments/hicdbs.js.map +1 -0
  77. package/dist/segments/hidse.d.ts +14 -0
  78. package/dist/segments/hidse.js +28 -0
  79. package/dist/segments/hidse.js.map +1 -0
  80. package/dist/segments/hidses.d.ts +13 -0
  81. package/dist/segments/hidses.js +24 -0
  82. package/dist/segments/hidses.js.map +1 -0
  83. package/dist/segments/hikaz.d.ts +16 -0
  84. package/dist/segments/hikaz.js +31 -0
  85. package/dist/segments/hikaz.js.map +1 -0
  86. package/dist/segments/hikazs.d.ts +16 -0
  87. package/dist/segments/hikazs.js +28 -0
  88. package/dist/segments/hikazs.js.map +1 -0
  89. package/dist/segments/hirmg.d.ts +17 -0
  90. package/dist/segments/hirmg.js +39 -0
  91. package/dist/segments/hirmg.js.map +1 -0
  92. package/dist/segments/hirms.d.ts +16 -0
  93. package/dist/segments/hirms.js +37 -0
  94. package/dist/segments/hirms.js.map +1 -0
  95. package/dist/segments/hisal.d.ts +22 -0
  96. package/dist/segments/hisal.js +33 -0
  97. package/dist/segments/hisal.js.map +1 -0
  98. package/dist/segments/hisals.d.ts +16 -0
  99. package/dist/segments/hisals.js +28 -0
  100. package/dist/segments/hisals.js.map +1 -0
  101. package/dist/segments/hispa.d.ts +16 -0
  102. package/dist/segments/hispa.js +31 -0
  103. package/dist/segments/hispa.js.map +1 -0
  104. package/dist/segments/hispas.d.ts +14 -0
  105. package/dist/segments/hispas.js +28 -0
  106. package/dist/segments/hispas.js.map +1 -0
  107. package/dist/segments/hisyn.d.ts +15 -0
  108. package/dist/segments/hisyn.js +26 -0
  109. package/dist/segments/hisyn.js.map +1 -0
  110. package/dist/segments/hitan.d.ts +18 -0
  111. package/dist/segments/hitan.js +66 -0
  112. package/dist/segments/hitan.js.map +1 -0
  113. package/dist/segments/hitans.d.ts +18 -0
  114. package/dist/segments/hitans.js +46 -0
  115. package/dist/segments/hitans.js.map +1 -0
  116. package/dist/segments/hiupd.d.ts +16 -0
  117. package/dist/segments/hiupd.js +34 -0
  118. package/dist/segments/hiupd.js.map +1 -0
  119. package/dist/segments/hiwpd.d.ts +15 -0
  120. package/dist/segments/hiwpd.js +26 -0
  121. package/dist/segments/hiwpd.js.map +1 -0
  122. package/dist/segments/hiwpds.d.ts +16 -0
  123. package/dist/segments/hiwpds.js +32 -0
  124. package/dist/segments/hiwpds.js.map +1 -0
  125. package/dist/segments/hkccs.d.ts +18 -0
  126. package/dist/segments/hkccs.js +32 -0
  127. package/dist/segments/hkccs.js.map +1 -0
  128. package/dist/segments/hkcdb.d.ts +19 -0
  129. package/dist/segments/hkcdb.js +30 -0
  130. package/dist/segments/hkcdb.js.map +1 -0
  131. package/dist/segments/hkdse.d.ts +18 -0
  132. package/dist/segments/hkdse.js +27 -0
  133. package/dist/segments/hkdse.js.map +1 -0
  134. package/dist/segments/hkend.d.ts +12 -0
  135. package/dist/segments/hkend.js +24 -0
  136. package/dist/segments/hkend.js.map +1 -0
  137. package/dist/segments/hkidn.d.ts +19 -0
  138. package/dist/segments/hkidn.js +33 -0
  139. package/dist/segments/hkidn.js.map +1 -0
  140. package/dist/segments/hkkaz.d.ts +20 -0
  141. package/dist/segments/hkkaz.js +42 -0
  142. package/dist/segments/hkkaz.js.map +1 -0
  143. package/dist/segments/hksal.d.ts +18 -0
  144. package/dist/segments/hksal.js +35 -0
  145. package/dist/segments/hksal.js.map +1 -0
  146. package/dist/segments/hkspa.d.ts +18 -0
  147. package/dist/segments/hkspa.js +31 -0
  148. package/dist/segments/hkspa.js.map +1 -0
  149. package/dist/segments/hksyn.d.ts +16 -0
  150. package/dist/segments/hksyn.js +31 -0
  151. package/dist/segments/hksyn.js.map +1 -0
  152. package/dist/segments/hktab.d.ts +17 -0
  153. package/dist/segments/hktab.js +31 -0
  154. package/dist/segments/hktab.js.map +1 -0
  155. package/dist/segments/hktan.d.ts +19 -0
  156. package/dist/segments/hktan.js +66 -0
  157. package/dist/segments/hktan.js.map +1 -0
  158. package/dist/segments/hkvvb.d.ts +17 -0
  159. package/dist/segments/hkvvb.js +39 -0
  160. package/dist/segments/hkvvb.js.map +1 -0
  161. package/dist/segments/hkwpd.d.ts +21 -0
  162. package/dist/segments/hkwpd.js +39 -0
  163. package/dist/segments/hkwpd.js.map +1 -0
  164. package/dist/segments/hnhbk.d.ts +22 -0
  165. package/dist/segments/hnhbk.js +54 -0
  166. package/dist/segments/hnhbk.js.map +1 -0
  167. package/dist/segments/hnhbs.d.ts +16 -0
  168. package/dist/segments/hnhbs.js +29 -0
  169. package/dist/segments/hnhbs.js.map +1 -0
  170. package/dist/segments/hnsha.d.ts +18 -0
  171. package/dist/segments/hnsha.js +30 -0
  172. package/dist/segments/hnsha.js.map +1 -0
  173. package/dist/segments/hnshk.d.ts +21 -0
  174. package/dist/segments/hnshk.js +44 -0
  175. package/dist/segments/hnshk.js.map +1 -0
  176. package/dist/segments/hnvsd.d.ts +25 -0
  177. package/dist/segments/hnvsd.js +31 -0
  178. package/dist/segments/hnvsd.js.map +1 -0
  179. package/dist/segments/hnvsk.d.ts +15 -0
  180. package/dist/segments/hnvsk.js +51 -0
  181. package/dist/segments/hnvsk.js.map +1 -0
  182. package/dist/segments/index.d.ts +40 -0
  183. package/dist/segments/index.js +57 -0
  184. package/dist/segments/index.js.map +1 -0
  185. package/dist/segments/segment.d.ts +60 -0
  186. package/dist/segments/segment.js +74 -0
  187. package/dist/segments/segment.js.map +1 -0
  188. package/dist/tan-method.d.ts +36 -0
  189. package/dist/tan-method.js +224 -0
  190. package/dist/tan-method.js.map +1 -0
  191. package/dist/types.d.ts +386 -0
  192. package/dist/types.js +3 -0
  193. package/dist/types.js.map +1 -0
  194. package/dist/utils.d.ts +55 -0
  195. package/dist/utils.js +178 -0
  196. package/dist/utils.js.map +1 -0
  197. package/package.json +1 -1
@@ -0,0 +1,70 @@
1
+ ### JavaScript Example
2
+ ```javascript
3
+ function getAccountStatements(client, accounts, statements, callback) {
4
+ for (let i in accounts) {
5
+ let account = accounts[i];
6
+
7
+ if (
8
+ !account.hasOwnProperty("statementsIsSet") ||
9
+ (account.hasOwnProperty("statementsIsSet") && !account.statementsIsSet)
10
+ ) {
11
+ client
12
+ .statements(account, new Date(moment().subtract(1, "day").startOf("day")), new Date())
13
+ .then(function (statementsBack) {
14
+ statements.push(statementsBack);
15
+ account.statementsIsSet = true;
16
+ account.statements = statementsBack.length > 0 ? statementsBack[0] : {};
17
+ let accountsFilter = accounts.filter(function (account) {
18
+ return account.hasOwnProperty("statementsIsSet");
19
+ });
20
+ if (accountsFilter.length === accounts.length) {
21
+ callback(statements, accounts);
22
+ return;
23
+ } else {
24
+ getAccountStatements(client, accounts, statements, callback);
25
+ }
26
+ });
27
+ break;
28
+ }
29
+ }
30
+ }
31
+
32
+ const client = new PinTanClient({
33
+ url: "https://example.com/fints",
34
+ name: "username",
35
+ pin: 12345,
36
+ blz: 12345678,
37
+ });
38
+
39
+ let fintsObject = {
40
+ accounts: null,
41
+ statements: null,
42
+ };
43
+ client
44
+ .accounts()
45
+ .then(function (accounts) {
46
+ fintsObject.accounts = accounts;
47
+ getAccountStatements(client, accounts, [], (statements, accountsBack) => {
48
+ fintsObject.statements = statements;
49
+
50
+ console.log(fintsObject);
51
+ });
52
+ })
53
+ .catch((error) => {
54
+ console.log(error);
55
+ });
56
+ ```
57
+
58
+ ##Test Javascript Example with runKit
59
+ [Javascript Example](https://runkit.com/guidomueller/javascript-fints-example)
60
+
61
+ ## nodjs Service Example
62
+ Example Application with nodejs middleware and web application for view banking transactions.
63
+
64
+ ###Nodejs application for the fints data processing
65
+ - [cf-banking-fints-example](https://github.com/guidoMueller/cf-banking-fints-example)
66
+
67
+ - [DEMO](https://cf-banking-fints-example.cfapps.eu10.hana.ondemand.com/)
68
+
69
+ ###IOS Application work with the nodejs application
70
+ - [IOS Application](https://apps.apple.com/us/app/unibanking/id1469203913)
@@ -0,0 +1,89 @@
1
+ import "isomorphic-fetch";
2
+ import { Dialog, DialogConfig } from "./dialog";
3
+ import { Segment } from "./segments";
4
+ import { Request } from "./request";
5
+ import { SEPAAccount, Statement, Balance, StandingOrder, Holding, DirectDebitRequest, DirectDebitSubmission, CreditTransferRequest, CreditTransferSubmission } from "./types";
6
+ /**
7
+ * An abstract class for communicating with a fints server.
8
+ * For a common implementation look at `PinTanClient`.
9
+ */
10
+ export declare abstract class Client {
11
+ /**
12
+ * Create a new dialog.
13
+ */
14
+ protected abstract createDialog(dialogConfig?: DialogConfig): Dialog;
15
+ /**
16
+ * Create a request.
17
+ */
18
+ protected abstract createRequest(dialog: Dialog, segments: Segment<any>[], tan?: string): Request;
19
+ /**
20
+ * Fetch a list of all SEPA accounts accessible by the user.
21
+ *
22
+ * @param existingDialog Optionally reuse an already authenticated dialog instance.
23
+ * @return An array of all SEPA accounts.
24
+ */
25
+ accounts(existingDialog?: Dialog): Promise<SEPAAccount[]>;
26
+ /**
27
+ * Fetch the balance for a SEPA account.
28
+ *
29
+ * @param account The SEPA account to fetch the balance for.
30
+ * @param existingDialog Optionally reuse an already authenticated dialog instance.
31
+ *
32
+ * @return The balance of the given SEPA account.
33
+ */
34
+ balance(account: SEPAAccount, existingDialog?: Dialog): Promise<Balance>;
35
+ /**
36
+ * Fetch the list of holdings for a depot account.
37
+ *
38
+ * @param account The account to fetch holdings for.
39
+ * @param existingDialog Optionally reuse an already authenticated dialog instance.
40
+ *
41
+ * @return A list of holdings contained in the depot.
42
+ */
43
+ holdings(account: SEPAAccount, existingDialog?: Dialog): Promise<Holding[]>;
44
+ /**
45
+ * Fetch a list of bank statements deserialized from the MT940 transmitted by the fints server.
46
+ *
47
+ * @param startDate The start of the range for which the statements should be fetched.
48
+ * @param endDate The end of the range for which the statements should be fetched.
49
+ * @param existingDialog Optionally reuse an already authenticated dialog instance.
50
+ *
51
+ * @return A list of all statements in the specified range.
52
+ */
53
+ statements(account: SEPAAccount, startDate?: Date, endDate?: Date, existingDialog?: Dialog): Promise<Statement[]>;
54
+ /**
55
+ * Fetch a list of bank statements deserialized from the MT940 transmitted by the fints server.
56
+ *
57
+ * @param startDate The start of the range for which the statements should be fetched.
58
+ * @param endDate The end of the range for which the statements should be fetched.
59
+ *
60
+ * @return A list of all statements in the specified range.
61
+ */
62
+ completeStatements(savedDialog: DialogConfig, transactionReference: string, tan: string): Promise<Statement[]>;
63
+ /**
64
+ * Complete a login flow that has been interrupted by a TAN challenge.
65
+ *
66
+ * @param savedDialog The dialog data returned with the {@link TanRequiredError}.
67
+ * @param transactionReference The transaction reference from the challenge message.
68
+ * @param tan The TAN that should be used to authorize the login.
69
+ *
70
+ * @return A dialog that can be reused to continue the original request.
71
+ * The caller is responsible for ending the dialog once no further messages
72
+ * should be sent.
73
+ */
74
+ completeLogin(savedDialog: DialogConfig, transactionReference: string, tan: string): Promise<Dialog>;
75
+ private sendStatementRequest;
76
+ /**
77
+ * Fetch a list of standing orders for the given account.
78
+ *
79
+ * @param account The account to fetch standing orders for.
80
+ * @param existingDialog Optionally reuse an already authenticated dialog instance.
81
+ *
82
+ * @return A list of all standing orders for the given account.
83
+ */
84
+ standingOrders(account: SEPAAccount, existingDialog?: Dialog): Promise<StandingOrder[]>;
85
+ creditTransfer(account: SEPAAccount, request: CreditTransferRequest): Promise<CreditTransferSubmission>;
86
+ directDebit(account: SEPAAccount, request: DirectDebitRequest): Promise<DirectDebitSubmission>;
87
+ completeCreditTransfer(savedDialog: DialogConfig, transactionReference: string, tan: string, submission: CreditTransferSubmission): Promise<CreditTransferSubmission>;
88
+ completeDirectDebit(savedDialog: DialogConfig, transactionReference: string, tan: string, submission: DirectDebitSubmission): Promise<DirectDebitSubmission>;
89
+ }
package/dist/client.js ADDED
@@ -0,0 +1,473 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.Client = void 0;
13
+ require("isomorphic-fetch");
14
+ const parse_1 = require("./parse");
15
+ const segments_1 = require("./segments");
16
+ const mt940_js_1 = require("mt940-js");
17
+ const mt940_86_structured_1 = require("./mt940-86-structured");
18
+ const mt535_1 = require("./mt535");
19
+ const pain_1 = require("./pain");
20
+ const tan_required_error_1 = require("./errors/tan-required-error");
21
+ /**
22
+ * An abstract class for communicating with a fints server.
23
+ * For a common implementation look at `PinTanClient`.
24
+ */
25
+ class Client {
26
+ /**
27
+ * Fetch a list of all SEPA accounts accessible by the user.
28
+ *
29
+ * @param existingDialog Optionally reuse an already authenticated dialog instance.
30
+ * @return An array of all SEPA accounts.
31
+ */
32
+ accounts(existingDialog) {
33
+ return __awaiter(this, void 0, void 0, function* () {
34
+ const dialog = existingDialog !== null && existingDialog !== void 0 ? existingDialog : this.createDialog();
35
+ const shouldInitializeDialog = !existingDialog;
36
+ if (shouldInitializeDialog) {
37
+ yield dialog.sync();
38
+ yield dialog.init();
39
+ }
40
+ const response = yield dialog.send(this.createRequest(dialog, [new segments_1.HKSPA({ segNo: 3 })]));
41
+ if (shouldInitializeDialog) {
42
+ yield dialog.end();
43
+ }
44
+ const hispa = response.findSegment(segments_1.HISPA);
45
+ hispa.accounts.map((account) => {
46
+ const hiupdAccount = dialog.hiupd.filter((element) => {
47
+ return element.account.iban === account.iban;
48
+ });
49
+ if (hiupdAccount.length > 0) {
50
+ return Object.assign(Object.assign({}, account), { accountOwnerName: hiupdAccount[0].account.accountOwnerName1, accountName: hiupdAccount[0].account.accountName, limitValue: parse_1.Parse.num(hiupdAccount[0].account.limitValue) });
51
+ }
52
+ });
53
+ return hispa.accounts;
54
+ });
55
+ }
56
+ /**
57
+ * Fetch the balance for a SEPA account.
58
+ *
59
+ * @param account The SEPA account to fetch the balance for.
60
+ * @param existingDialog Optionally reuse an already authenticated dialog instance.
61
+ *
62
+ * @return The balance of the given SEPA account.
63
+ */
64
+ balance(account, existingDialog) {
65
+ return __awaiter(this, void 0, void 0, function* () {
66
+ const dialog = existingDialog !== null && existingDialog !== void 0 ? existingDialog : this.createDialog();
67
+ const shouldInitializeDialog = !existingDialog;
68
+ if (shouldInitializeDialog) {
69
+ yield dialog.sync();
70
+ yield dialog.init();
71
+ }
72
+ let touchdowns;
73
+ let touchdown;
74
+ const responses = [];
75
+ do {
76
+ const request = this.createRequest(dialog, [
77
+ new segments_1.HKSAL({
78
+ segNo: 3,
79
+ version: dialog.hisalsVersion,
80
+ account,
81
+ touchdown,
82
+ }),
83
+ ]);
84
+ const response = yield dialog.send(request);
85
+ touchdowns = response.getTouchdowns(request);
86
+ touchdown = touchdowns.get("HKSAL");
87
+ responses.push(response);
88
+ } while (touchdown);
89
+ if (shouldInitializeDialog) {
90
+ yield dialog.end();
91
+ }
92
+ const segments = responses.reduce((result, response) => {
93
+ result.push(...response.findSegments(segments_1.HISAL));
94
+ return result;
95
+ }, []);
96
+ const hisal = segments.find((s) => s.account.accountNumber === account.accountNumber && s.account.blz === account.blz);
97
+ return {
98
+ account,
99
+ availableBalance: hisal.availableBalance,
100
+ bookedBalance: hisal.bookedBalance,
101
+ currency: hisal.currency,
102
+ creditLimit: hisal.creditLimit,
103
+ pendingBalance: hisal.pendingBalance,
104
+ productName: hisal.productName,
105
+ };
106
+ });
107
+ }
108
+ /**
109
+ * Fetch the list of holdings for a depot account.
110
+ *
111
+ * @param account The account to fetch holdings for.
112
+ * @param existingDialog Optionally reuse an already authenticated dialog instance.
113
+ *
114
+ * @return A list of holdings contained in the depot.
115
+ */
116
+ holdings(account, existingDialog) {
117
+ return __awaiter(this, void 0, void 0, function* () {
118
+ const dialog = existingDialog !== null && existingDialog !== void 0 ? existingDialog : this.createDialog();
119
+ const shouldInitializeDialog = !existingDialog;
120
+ if (shouldInitializeDialog) {
121
+ yield dialog.sync();
122
+ }
123
+ if (!dialog.hiwpdsVersion) {
124
+ throw new Error("Holdings are not supported by this bank.");
125
+ }
126
+ if (shouldInitializeDialog) {
127
+ yield dialog.init();
128
+ }
129
+ let touchdowns;
130
+ let touchdown;
131
+ const responses = [];
132
+ do {
133
+ const request = this.createRequest(dialog, [
134
+ new segments_1.HKWPD({
135
+ segNo: 3,
136
+ version: dialog.hiwpdsVersion,
137
+ account,
138
+ touchdown,
139
+ }),
140
+ ]);
141
+ const response = yield dialog.send(request);
142
+ touchdowns = response.getTouchdowns(request);
143
+ touchdown = touchdowns.get("HKWPD");
144
+ responses.push(response);
145
+ } while (touchdown);
146
+ if (shouldInitializeDialog) {
147
+ yield dialog.end();
148
+ }
149
+ const parser = new mt535_1.MT535Parser();
150
+ return responses.reduce((result, response) => {
151
+ response.findSegments(segments_1.HIWPD).forEach((segment) => {
152
+ const raw = segment.holdings;
153
+ if (!raw) {
154
+ return;
155
+ }
156
+ const lines = raw.split(/\r?\n/);
157
+ if (lines.length > 0 && lines[0] === "") {
158
+ lines.shift();
159
+ }
160
+ result.push(...parser.parse(lines));
161
+ });
162
+ return result;
163
+ }, []);
164
+ });
165
+ }
166
+ /**
167
+ * Fetch a list of bank statements deserialized from the MT940 transmitted by the fints server.
168
+ *
169
+ * @param startDate The start of the range for which the statements should be fetched.
170
+ * @param endDate The end of the range for which the statements should be fetched.
171
+ * @param existingDialog Optionally reuse an already authenticated dialog instance.
172
+ *
173
+ * @return A list of all statements in the specified range.
174
+ */
175
+ statements(account, startDate, endDate, existingDialog) {
176
+ return __awaiter(this, void 0, void 0, function* () {
177
+ const dialog = existingDialog !== null && existingDialog !== void 0 ? existingDialog : this.createDialog();
178
+ const shouldInitializeDialog = !existingDialog;
179
+ if (shouldInitializeDialog) {
180
+ yield dialog.sync();
181
+ yield dialog.init();
182
+ }
183
+ const segments = [];
184
+ segments.push(new segments_1.HKKAZ({
185
+ segNo: 3,
186
+ version: dialog.hikazsVersion,
187
+ account,
188
+ startDate,
189
+ endDate,
190
+ }));
191
+ if (dialog.hktanVersion >= 6) {
192
+ const version = dialog.hktanVersion >= 7 ? 7 : 6;
193
+ segments.push(new segments_1.HKTAN({
194
+ segNo: 4,
195
+ version,
196
+ process: "4",
197
+ segmentReference: "HKKAZ",
198
+ medium: dialog.tanMethods[0].name,
199
+ }));
200
+ }
201
+ return yield this.sendStatementRequest(dialog, segments, undefined, shouldInitializeDialog);
202
+ });
203
+ }
204
+ /**
205
+ * Fetch a list of bank statements deserialized from the MT940 transmitted by the fints server.
206
+ *
207
+ * @param startDate The start of the range for which the statements should be fetched.
208
+ * @param endDate The end of the range for which the statements should be fetched.
209
+ *
210
+ * @return A list of all statements in the specified range.
211
+ */
212
+ completeStatements(savedDialog, transactionReference, tan) {
213
+ return __awaiter(this, void 0, void 0, function* () {
214
+ const dialog = this.createDialog(savedDialog);
215
+ dialog.msgNo = dialog.msgNo + 1;
216
+ const segments = [];
217
+ const version = dialog.hktanVersion >= 7 ? 7 : 6;
218
+ segments.push(new segments_1.HKTAN({
219
+ segNo: 3,
220
+ version,
221
+ process: "2",
222
+ segmentReference: "HKKAZ",
223
+ aref: transactionReference,
224
+ medium: dialog.tanMethods[0].name,
225
+ }));
226
+ return yield this.sendStatementRequest(dialog, segments, tan);
227
+ });
228
+ }
229
+ /**
230
+ * Complete a login flow that has been interrupted by a TAN challenge.
231
+ *
232
+ * @param savedDialog The dialog data returned with the {@link TanRequiredError}.
233
+ * @param transactionReference The transaction reference from the challenge message.
234
+ * @param tan The TAN that should be used to authorize the login.
235
+ *
236
+ * @return A dialog that can be reused to continue the original request.
237
+ * The caller is responsible for ending the dialog once no further messages
238
+ * should be sent.
239
+ */
240
+ completeLogin(savedDialog, transactionReference, tan) {
241
+ return __awaiter(this, void 0, void 0, function* () {
242
+ const dialog = this.createDialog(savedDialog);
243
+ dialog.msgNo = dialog.msgNo + 1;
244
+ const version = dialog.hktanVersion >= 7 ? 7 : 6;
245
+ const segments = [
246
+ new segments_1.HKTAN({
247
+ segNo: 3,
248
+ version,
249
+ process: "2",
250
+ segmentReference: "HKIDN",
251
+ aref: transactionReference,
252
+ medium: dialog.tanMethods[0].name,
253
+ }),
254
+ ];
255
+ yield dialog.send(this.createRequest(dialog, segments, tan));
256
+ return dialog;
257
+ });
258
+ }
259
+ sendStatementRequest(dialog_1, segments_2, tan_1) {
260
+ return __awaiter(this, arguments, void 0, function* (dialog, segments, tan, shouldEndDialog = true) {
261
+ let touchdowns;
262
+ let touchdown;
263
+ const responses = [];
264
+ do {
265
+ const request = this.createRequest(dialog, segments, tan);
266
+ const response = yield dialog.send(request);
267
+ touchdowns = response.getTouchdowns(request);
268
+ touchdown = touchdowns.get("HKKAZ");
269
+ responses.push(response);
270
+ } while (touchdown);
271
+ if (shouldEndDialog) {
272
+ yield dialog.end();
273
+ }
274
+ const responseSegments = responses.reduce((result, response) => {
275
+ result.push(...response.findSegments(segments_1.HIKAZ));
276
+ return result;
277
+ }, []);
278
+ const bookedString = responseSegments.map((segment) => segment.bookedTransactions || "").join("");
279
+ const unprocessedStatements = yield (0, mt940_js_1.read)(Buffer.from(bookedString, "latin1"));
280
+ return unprocessedStatements.map((statement) => {
281
+ const transactions = statement.transactions.map((transaction) => {
282
+ const descriptionStructured = (0, mt940_86_structured_1.parse86Structured)(transaction.description);
283
+ return Object.assign(Object.assign({}, transaction), { descriptionStructured });
284
+ });
285
+ return Object.assign(Object.assign({}, statement), { transactions });
286
+ });
287
+ });
288
+ }
289
+ /**
290
+ * Fetch a list of standing orders for the given account.
291
+ *
292
+ * @param account The account to fetch standing orders for.
293
+ * @param existingDialog Optionally reuse an already authenticated dialog instance.
294
+ *
295
+ * @return A list of all standing orders for the given account.
296
+ */
297
+ standingOrders(account, existingDialog) {
298
+ return __awaiter(this, void 0, void 0, function* () {
299
+ const dialog = existingDialog !== null && existingDialog !== void 0 ? existingDialog : this.createDialog();
300
+ const shouldInitializeDialog = !existingDialog;
301
+ if (shouldInitializeDialog) {
302
+ yield dialog.sync();
303
+ yield dialog.init();
304
+ }
305
+ let touchdowns;
306
+ let touchdown;
307
+ const responses = [];
308
+ do {
309
+ const request = this.createRequest(dialog, [
310
+ new segments_1.HKCDB({
311
+ segNo: 3,
312
+ version: dialog.hicdbVersion,
313
+ account,
314
+ painFormats: dialog.painFormats,
315
+ touchdown,
316
+ }),
317
+ ]);
318
+ const response = yield dialog.send(request);
319
+ touchdowns = response.getTouchdowns(request);
320
+ touchdown = touchdowns.get("HKCDB");
321
+ responses.push(response);
322
+ } while (touchdown);
323
+ if (shouldInitializeDialog) {
324
+ yield dialog.end();
325
+ }
326
+ const segments = responses.reduce((result, response) => {
327
+ result.push(...response.findSegments(segments_1.HICDB));
328
+ return result;
329
+ }, []);
330
+ return segments.map((s) => s.standingOrder);
331
+ });
332
+ }
333
+ creditTransfer(account, request) {
334
+ return __awaiter(this, void 0, void 0, function* () {
335
+ const dialog = this.createDialog();
336
+ yield dialog.sync();
337
+ yield dialog.init();
338
+ const descriptor = (0, pain_1.selectPain001Descriptor)(dialog.painFormats);
339
+ const submission = (0, pain_1.buildCreditTransferSubmission)(request, account, descriptor);
340
+ const segments = [
341
+ new segments_1.HKCCS({
342
+ segNo: 3,
343
+ version: dialog.hkccsVersion || 1,
344
+ account,
345
+ painDescriptor: descriptor,
346
+ painMessage: submission.xml,
347
+ }),
348
+ ];
349
+ if (dialog.hktanVersion >= 6 && dialog.tanMethods.length > 0) {
350
+ const version = dialog.hktanVersion >= 7 ? 7 : dialog.hktanVersion;
351
+ segments.push(new segments_1.HKTAN({
352
+ segNo: 4,
353
+ version,
354
+ process: "4",
355
+ segmentReference: "HKCCS",
356
+ medium: dialog.tanMethods[0].name,
357
+ }));
358
+ }
359
+ try {
360
+ const requestMessage = this.createRequest(dialog, segments);
361
+ const response = yield dialog.send(requestMessage);
362
+ const acknowledgement = response.findSegmentForReference(segments_1.HICCS, segments[0]) || response.findSegment(segments_1.HICCS);
363
+ if (acknowledgement) {
364
+ submission.taskId = acknowledgement.taskId;
365
+ }
366
+ yield dialog.end();
367
+ return submission;
368
+ }
369
+ catch (error) {
370
+ if (error instanceof tan_required_error_1.TanRequiredError) {
371
+ error.creditTransferSubmission = submission;
372
+ }
373
+ throw error;
374
+ }
375
+ });
376
+ }
377
+ directDebit(account, request) {
378
+ return __awaiter(this, void 0, void 0, function* () {
379
+ const dialog = this.createDialog();
380
+ yield dialog.sync();
381
+ yield dialog.init();
382
+ const descriptor = (0, pain_1.selectPain008Descriptor)(dialog.painFormats);
383
+ const submission = (0, pain_1.buildDirectDebitSubmission)(request, account, descriptor);
384
+ const segments = [
385
+ new segments_1.HKDSE({
386
+ segNo: 3,
387
+ version: dialog.hkdseVersion || 1,
388
+ account,
389
+ painDescriptor: descriptor,
390
+ painMessage: submission.xml,
391
+ }),
392
+ ];
393
+ if (dialog.hktanVersion >= 6 && dialog.tanMethods.length > 0) {
394
+ const version = dialog.hktanVersion >= 7 ? 7 : dialog.hktanVersion;
395
+ segments.push(new segments_1.HKTAN({
396
+ segNo: 4,
397
+ version,
398
+ process: "4",
399
+ segmentReference: "HKDSE",
400
+ medium: dialog.tanMethods[0].name,
401
+ }));
402
+ }
403
+ try {
404
+ const requestMessage = this.createRequest(dialog, segments);
405
+ const response = yield dialog.send(requestMessage);
406
+ const acknowledgement = response.findSegmentForReference(segments_1.HIDSE, segments[0]) || response.findSegment(segments_1.HIDSE);
407
+ if (acknowledgement) {
408
+ submission.taskId = acknowledgement.taskId;
409
+ }
410
+ yield dialog.end();
411
+ return submission;
412
+ }
413
+ catch (error) {
414
+ if (error instanceof tan_required_error_1.TanRequiredError) {
415
+ error.directDebitSubmission = submission;
416
+ }
417
+ throw error;
418
+ }
419
+ });
420
+ }
421
+ completeCreditTransfer(savedDialog, transactionReference, tan, submission) {
422
+ return __awaiter(this, void 0, void 0, function* () {
423
+ var _a;
424
+ const dialog = this.createDialog(savedDialog);
425
+ dialog.msgNo = dialog.msgNo + 1;
426
+ const version = dialog.hktanVersion >= 7 ? 7 : dialog.hktanVersion;
427
+ const segments = [
428
+ new segments_1.HKTAN({
429
+ segNo: 3,
430
+ version,
431
+ process: "2",
432
+ segmentReference: "HKCCS",
433
+ aref: transactionReference,
434
+ medium: (_a = dialog.tanMethods[0]) === null || _a === void 0 ? void 0 : _a.name,
435
+ }),
436
+ ];
437
+ const response = yield dialog.send(this.createRequest(dialog, segments, tan));
438
+ const acknowledgement = response.findSegment(segments_1.HICCS);
439
+ if (acknowledgement) {
440
+ submission.taskId = acknowledgement.taskId;
441
+ }
442
+ yield dialog.end();
443
+ return submission;
444
+ });
445
+ }
446
+ completeDirectDebit(savedDialog, transactionReference, tan, submission) {
447
+ return __awaiter(this, void 0, void 0, function* () {
448
+ var _a;
449
+ const dialog = this.createDialog(savedDialog);
450
+ dialog.msgNo = dialog.msgNo + 1;
451
+ const version = dialog.hktanVersion >= 7 ? 7 : dialog.hktanVersion;
452
+ const segments = [
453
+ new segments_1.HKTAN({
454
+ segNo: 3,
455
+ version,
456
+ process: "2",
457
+ segmentReference: "HKDSE",
458
+ aref: transactionReference,
459
+ medium: (_a = dialog.tanMethods[0]) === null || _a === void 0 ? void 0 : _a.name,
460
+ }),
461
+ ];
462
+ const response = yield dialog.send(this.createRequest(dialog, segments, tan));
463
+ const acknowledgement = response.findSegment(segments_1.HIDSE);
464
+ if (acknowledgement) {
465
+ submission.taskId = acknowledgement.taskId;
466
+ }
467
+ yield dialog.end();
468
+ return submission;
469
+ });
470
+ }
471
+ }
472
+ exports.Client = Client;
473
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export declare const COUNTRY_CODE = 280;
2
+ export declare const SYNC_MODE_NEW_CUSTOMER_ID = 0;
3
+ export declare const SYNC_MODE_LAST_MSG_NUMBER = 1;
4
+ export declare const SYNC_MODE_SIGNATURE_ID = 2;
5
+ export declare const LANG_DE = 1;
6
+ export declare const LANG_EN = 2;
7
+ export declare const LANG_FR = 3;
8
+ export declare const PRODUCT_NAME = "fints";
9
+ export declare const PRODUCT_VERSION = "0.1";
10
+ export declare const HEADER_LENGTH = 29;
11
+ export declare const SECURITY_FUNCTION = "999";
12
+ export declare const SECURITY_BOUNDARY = 1;
13
+ export declare const SECURITY_SUPPLIER_ROLE = 1;
14
+ export declare const COMPRESSION_NONE = 0;
15
+ export declare const HBCI_VERSION = 300;