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.
- package/README_advanced_usage.md +70 -0
- package/dist/client.d.ts +89 -0
- package/dist/client.js +473 -0
- package/dist/client.js.map +1 -0
- package/dist/constants.d.ts +15 -0
- package/dist/constants.js +19 -0
- package/dist/constants.js.map +1 -0
- package/dist/dialog.d.ts +111 -0
- package/dist/dialog.js +187 -0
- package/dist/dialog.js.map +1 -0
- package/dist/error-codes.d.ts +39 -0
- package/dist/error-codes.js +228 -0
- package/dist/error-codes.js.map +1 -0
- package/dist/errors/fints-error.d.ts +55 -0
- package/dist/errors/fints-error.js +131 -0
- package/dist/errors/fints-error.js.map +1 -0
- package/dist/errors/response-error.d.ts +6 -0
- package/dist/errors/response-error.js +20 -0
- package/dist/errors/response-error.js.map +1 -0
- package/dist/errors/tan-required-error.d.ts +40 -0
- package/dist/errors/tan-required-error.js +54 -0
- package/dist/errors/tan-required-error.js.map +1 -0
- package/dist/format.d.ts +81 -0
- package/dist/format.js +112 -0
- package/dist/format.js.map +1 -0
- package/dist/http-connection.d.ts +36 -0
- package/dist/http-connection.js +109 -0
- package/dist/http-connection.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +4 -0
- package/dist/logger.js +13 -0
- package/dist/logger.js.map +1 -0
- package/dist/mt535.d.ts +19 -0
- package/dist/mt535.js +153 -0
- package/dist/mt535.js.map +1 -0
- package/dist/mt940-86-structured.d.ts +47 -0
- package/dist/mt940-86-structured.js +213 -0
- package/dist/mt940-86-structured.js.map +1 -0
- package/dist/pain-formats.d.ts +50 -0
- package/dist/pain-formats.js +7 -0
- package/dist/pain-formats.js.map +1 -0
- package/dist/pain.d.ts +21 -0
- package/dist/pain.js +315 -0
- package/dist/pain.js.map +1 -0
- package/dist/parse.d.ts +46 -0
- package/dist/parse.js +97 -0
- package/dist/parse.js.map +1 -0
- package/dist/pin-tan-client.d.ts +47 -0
- package/dist/pin-tan-client.js +35 -0
- package/dist/pin-tan-client.js.map +1 -0
- package/dist/request.d.ts +90 -0
- package/dist/request.js +102 -0
- package/dist/request.js.map +1 -0
- package/dist/response.d.ts +104 -0
- package/dist/response.js +197 -0
- package/dist/response.js.map +1 -0
- package/dist/return-value.d.ts +37 -0
- package/dist/return-value.js +31 -0
- package/dist/return-value.js.map +1 -0
- package/dist/segments/hibpa.d.ts +22 -0
- package/dist/segments/hibpa.js +36 -0
- package/dist/segments/hibpa.js.map +1 -0
- package/dist/segments/hiccs.d.ts +14 -0
- package/dist/segments/hiccs.js +28 -0
- package/dist/segments/hiccs.js.map +1 -0
- package/dist/segments/hiccss.d.ts +13 -0
- package/dist/segments/hiccss.js +24 -0
- package/dist/segments/hiccss.js.map +1 -0
- package/dist/segments/hicdb.d.ts +17 -0
- package/dist/segments/hicdb.js +62 -0
- package/dist/segments/hicdb.js.map +1 -0
- package/dist/segments/hicdbs.d.ts +16 -0
- package/dist/segments/hicdbs.js +28 -0
- package/dist/segments/hicdbs.js.map +1 -0
- package/dist/segments/hidse.d.ts +14 -0
- package/dist/segments/hidse.js +28 -0
- package/dist/segments/hidse.js.map +1 -0
- package/dist/segments/hidses.d.ts +13 -0
- package/dist/segments/hidses.js +24 -0
- package/dist/segments/hidses.js.map +1 -0
- package/dist/segments/hikaz.d.ts +16 -0
- package/dist/segments/hikaz.js +31 -0
- package/dist/segments/hikaz.js.map +1 -0
- package/dist/segments/hikazs.d.ts +16 -0
- package/dist/segments/hikazs.js +28 -0
- package/dist/segments/hikazs.js.map +1 -0
- package/dist/segments/hirmg.d.ts +17 -0
- package/dist/segments/hirmg.js +39 -0
- package/dist/segments/hirmg.js.map +1 -0
- package/dist/segments/hirms.d.ts +16 -0
- package/dist/segments/hirms.js +37 -0
- package/dist/segments/hirms.js.map +1 -0
- package/dist/segments/hisal.d.ts +22 -0
- package/dist/segments/hisal.js +33 -0
- package/dist/segments/hisal.js.map +1 -0
- package/dist/segments/hisals.d.ts +16 -0
- package/dist/segments/hisals.js +28 -0
- package/dist/segments/hisals.js.map +1 -0
- package/dist/segments/hispa.d.ts +16 -0
- package/dist/segments/hispa.js +31 -0
- package/dist/segments/hispa.js.map +1 -0
- package/dist/segments/hispas.d.ts +14 -0
- package/dist/segments/hispas.js +28 -0
- package/dist/segments/hispas.js.map +1 -0
- package/dist/segments/hisyn.d.ts +15 -0
- package/dist/segments/hisyn.js +26 -0
- package/dist/segments/hisyn.js.map +1 -0
- package/dist/segments/hitan.d.ts +18 -0
- package/dist/segments/hitan.js +66 -0
- package/dist/segments/hitan.js.map +1 -0
- package/dist/segments/hitans.d.ts +18 -0
- package/dist/segments/hitans.js +46 -0
- package/dist/segments/hitans.js.map +1 -0
- package/dist/segments/hiupd.d.ts +16 -0
- package/dist/segments/hiupd.js +34 -0
- package/dist/segments/hiupd.js.map +1 -0
- package/dist/segments/hiwpd.d.ts +15 -0
- package/dist/segments/hiwpd.js +26 -0
- package/dist/segments/hiwpd.js.map +1 -0
- package/dist/segments/hiwpds.d.ts +16 -0
- package/dist/segments/hiwpds.js +32 -0
- package/dist/segments/hiwpds.js.map +1 -0
- package/dist/segments/hkccs.d.ts +18 -0
- package/dist/segments/hkccs.js +32 -0
- package/dist/segments/hkccs.js.map +1 -0
- package/dist/segments/hkcdb.d.ts +19 -0
- package/dist/segments/hkcdb.js +30 -0
- package/dist/segments/hkcdb.js.map +1 -0
- package/dist/segments/hkdse.d.ts +18 -0
- package/dist/segments/hkdse.js +27 -0
- package/dist/segments/hkdse.js.map +1 -0
- package/dist/segments/hkend.d.ts +12 -0
- package/dist/segments/hkend.js +24 -0
- package/dist/segments/hkend.js.map +1 -0
- package/dist/segments/hkidn.d.ts +19 -0
- package/dist/segments/hkidn.js +33 -0
- package/dist/segments/hkidn.js.map +1 -0
- package/dist/segments/hkkaz.d.ts +20 -0
- package/dist/segments/hkkaz.js +42 -0
- package/dist/segments/hkkaz.js.map +1 -0
- package/dist/segments/hksal.d.ts +18 -0
- package/dist/segments/hksal.js +35 -0
- package/dist/segments/hksal.js.map +1 -0
- package/dist/segments/hkspa.d.ts +18 -0
- package/dist/segments/hkspa.js +31 -0
- package/dist/segments/hkspa.js.map +1 -0
- package/dist/segments/hksyn.d.ts +16 -0
- package/dist/segments/hksyn.js +31 -0
- package/dist/segments/hksyn.js.map +1 -0
- package/dist/segments/hktab.d.ts +17 -0
- package/dist/segments/hktab.js +31 -0
- package/dist/segments/hktab.js.map +1 -0
- package/dist/segments/hktan.d.ts +19 -0
- package/dist/segments/hktan.js +66 -0
- package/dist/segments/hktan.js.map +1 -0
- package/dist/segments/hkvvb.d.ts +17 -0
- package/dist/segments/hkvvb.js +39 -0
- package/dist/segments/hkvvb.js.map +1 -0
- package/dist/segments/hkwpd.d.ts +21 -0
- package/dist/segments/hkwpd.js +39 -0
- package/dist/segments/hkwpd.js.map +1 -0
- package/dist/segments/hnhbk.d.ts +22 -0
- package/dist/segments/hnhbk.js +54 -0
- package/dist/segments/hnhbk.js.map +1 -0
- package/dist/segments/hnhbs.d.ts +16 -0
- package/dist/segments/hnhbs.js +29 -0
- package/dist/segments/hnhbs.js.map +1 -0
- package/dist/segments/hnsha.d.ts +18 -0
- package/dist/segments/hnsha.js +30 -0
- package/dist/segments/hnsha.js.map +1 -0
- package/dist/segments/hnshk.d.ts +21 -0
- package/dist/segments/hnshk.js +44 -0
- package/dist/segments/hnshk.js.map +1 -0
- package/dist/segments/hnvsd.d.ts +25 -0
- package/dist/segments/hnvsd.js +31 -0
- package/dist/segments/hnvsd.js.map +1 -0
- package/dist/segments/hnvsk.d.ts +15 -0
- package/dist/segments/hnvsk.js +51 -0
- package/dist/segments/hnvsk.js.map +1 -0
- package/dist/segments/index.d.ts +40 -0
- package/dist/segments/index.js +57 -0
- package/dist/segments/index.js.map +1 -0
- package/dist/segments/segment.d.ts +60 -0
- package/dist/segments/segment.js +74 -0
- package/dist/segments/segment.js.map +1 -0
- package/dist/tan-method.d.ts +36 -0
- package/dist/tan-method.js +224 -0
- package/dist/tan-method.js.map +1 -0
- package/dist/types.d.ts +386 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +55 -0
- package/dist/utils.js +178 -0
- package/dist/utils.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HBCI_VERSION = exports.COMPRESSION_NONE = exports.SECURITY_SUPPLIER_ROLE = exports.SECURITY_BOUNDARY = exports.SECURITY_FUNCTION = exports.HEADER_LENGTH = exports.PRODUCT_VERSION = exports.PRODUCT_NAME = exports.LANG_FR = exports.LANG_EN = exports.LANG_DE = exports.SYNC_MODE_SIGNATURE_ID = exports.SYNC_MODE_LAST_MSG_NUMBER = exports.SYNC_MODE_NEW_CUSTOMER_ID = exports.COUNTRY_CODE = void 0;
|
|
4
|
+
exports.COUNTRY_CODE = 280;
|
|
5
|
+
exports.SYNC_MODE_NEW_CUSTOMER_ID = 0;
|
|
6
|
+
exports.SYNC_MODE_LAST_MSG_NUMBER = 1;
|
|
7
|
+
exports.SYNC_MODE_SIGNATURE_ID = 2;
|
|
8
|
+
exports.LANG_DE = 1;
|
|
9
|
+
exports.LANG_EN = 2;
|
|
10
|
+
exports.LANG_FR = 3;
|
|
11
|
+
exports.PRODUCT_NAME = "fints";
|
|
12
|
+
exports.PRODUCT_VERSION = "0.1";
|
|
13
|
+
exports.HEADER_LENGTH = 29;
|
|
14
|
+
exports.SECURITY_FUNCTION = "999";
|
|
15
|
+
exports.SECURITY_BOUNDARY = 1;
|
|
16
|
+
exports.SECURITY_SUPPLIER_ROLE = 1;
|
|
17
|
+
exports.COMPRESSION_NONE = 0;
|
|
18
|
+
exports.HBCI_VERSION = 300;
|
|
19
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG,GAAG,CAAC;AAEnB,QAAA,yBAAyB,GAAG,CAAC,CAAC;AAC9B,QAAA,yBAAyB,GAAG,CAAC,CAAC;AAC9B,QAAA,sBAAsB,GAAG,CAAC,CAAC;AAE3B,QAAA,OAAO,GAAG,CAAC,CAAC;AACZ,QAAA,OAAO,GAAG,CAAC,CAAC;AACZ,QAAA,OAAO,GAAG,CAAC,CAAC;AAEZ,QAAA,YAAY,GAAG,OAAO,CAAC;AACvB,QAAA,eAAe,GAAG,KAAK,CAAC;AAExB,QAAA,aAAa,GAAG,EAAE,CAAC;AAEnB,QAAA,iBAAiB,GAAG,KAAK,CAAC;AAC1B,QAAA,iBAAiB,GAAG,CAAC,CAAC;AACtB,QAAA,sBAAsB,GAAG,CAAC,CAAC;AAE3B,QAAA,gBAAgB,GAAG,CAAC,CAAC;AAErB,QAAA,YAAY,GAAG,GAAG,CAAC"}
|
package/dist/dialog.d.ts
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { Connection } from "./types";
|
|
2
|
+
import { HIUPD } from "./segments";
|
|
3
|
+
import { Request } from "./request";
|
|
4
|
+
import { Response } from "./response";
|
|
5
|
+
import { TanMethod } from "./tan-method";
|
|
6
|
+
/**
|
|
7
|
+
* Properties passed to configure a `Dialog`.
|
|
8
|
+
*/
|
|
9
|
+
export declare class DialogConfig {
|
|
10
|
+
/**
|
|
11
|
+
* The product ID that was assigned by ZKA
|
|
12
|
+
*/
|
|
13
|
+
productId: string;
|
|
14
|
+
/**
|
|
15
|
+
* The banks identification number (Bankleitzahl).
|
|
16
|
+
*/
|
|
17
|
+
blz: string;
|
|
18
|
+
/**
|
|
19
|
+
* The username or identification number.
|
|
20
|
+
*/
|
|
21
|
+
name: string;
|
|
22
|
+
/**
|
|
23
|
+
* The pin code or password used for authenticating with the fints server.
|
|
24
|
+
*/
|
|
25
|
+
pin: string;
|
|
26
|
+
/**
|
|
27
|
+
* The system's id. This id needs to be stored across all dialogs and will be assigned
|
|
28
|
+
* by the server at the first request.
|
|
29
|
+
*/
|
|
30
|
+
systemId: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* A dialog consisting of multiple related requests and responses.
|
|
34
|
+
*/
|
|
35
|
+
export declare class Dialog extends DialogConfig {
|
|
36
|
+
/**
|
|
37
|
+
* All messages sent within a dialog are numbered.
|
|
38
|
+
* This counter is kept here.
|
|
39
|
+
*/
|
|
40
|
+
msgNo: number;
|
|
41
|
+
/**
|
|
42
|
+
* A unique id for the dialog.
|
|
43
|
+
* Assigned by the server as response to the initial request.
|
|
44
|
+
* For the initial request a `0` needs to be sent.
|
|
45
|
+
*/
|
|
46
|
+
dialogId: string;
|
|
47
|
+
/**
|
|
48
|
+
* A list of allowed TAN methods as configured by the server.
|
|
49
|
+
*/
|
|
50
|
+
tanMethods: TanMethod[];
|
|
51
|
+
/**
|
|
52
|
+
* The server will only accept a certain version for the HISALS segment.
|
|
53
|
+
* This version defaults to the latest version (6).
|
|
54
|
+
* The server's maximum supported version can be parsed from the initial requests and is stored here.
|
|
55
|
+
*/
|
|
56
|
+
hisalsVersion: number;
|
|
57
|
+
/**
|
|
58
|
+
* The server will only accept a certain version for the HIKAZS segment.
|
|
59
|
+
* This version defaults to the latest version (6).
|
|
60
|
+
* The server's maximum supported version can be parsed from the initial requests and is stored here.
|
|
61
|
+
*/
|
|
62
|
+
hikazsVersion: number;
|
|
63
|
+
/**
|
|
64
|
+
* The server will only accept a certain version for the HICDB segment.
|
|
65
|
+
* This version defaults to the latest version (1).
|
|
66
|
+
* The server's maximum supported version can be parsed from the initial requests and is stored here.
|
|
67
|
+
*/
|
|
68
|
+
hicdbVersion: number;
|
|
69
|
+
hktanVersion: number;
|
|
70
|
+
hkdseVersion: number;
|
|
71
|
+
hkccsVersion: number;
|
|
72
|
+
/**
|
|
73
|
+
* The server will only accept a certain version for the HIWPD segment.
|
|
74
|
+
* Stores the maximum supported version parsed during synchronization.
|
|
75
|
+
*/
|
|
76
|
+
hiwpdsVersion: number;
|
|
77
|
+
/**
|
|
78
|
+
* A list of supported SEPA pain-formats as configured by the server.
|
|
79
|
+
*/
|
|
80
|
+
painFormats: string[];
|
|
81
|
+
hiupd: HIUPD[];
|
|
82
|
+
connection: Connection;
|
|
83
|
+
constructor(config: DialogConfig, connection: Connection);
|
|
84
|
+
/**
|
|
85
|
+
* Send a synchronization request to the server.
|
|
86
|
+
* Only one synchronization is needed per dialog.
|
|
87
|
+
* This is most likely the initial request sent.
|
|
88
|
+
* It will be answered with the system's id and a list of supported TAN methods.
|
|
89
|
+
* The supported HISALS and HIKAZS version can also be parsed from this request.
|
|
90
|
+
*
|
|
91
|
+
* @return The response as received by the server.
|
|
92
|
+
*/
|
|
93
|
+
sync(): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* Send the initializing request to the server.
|
|
96
|
+
* The dialog is ready for performing custom requests afterwards.
|
|
97
|
+
*/
|
|
98
|
+
init(): Promise<Response>;
|
|
99
|
+
/**
|
|
100
|
+
* End the currently open request.
|
|
101
|
+
*/
|
|
102
|
+
end(): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Send a custom request to the fints server and return the received response.
|
|
105
|
+
*
|
|
106
|
+
* @param request The request to send to the server.
|
|
107
|
+
*
|
|
108
|
+
* @return The response received from the server.
|
|
109
|
+
*/
|
|
110
|
+
send(request: Request): Promise<Response>;
|
|
111
|
+
}
|
package/dist/dialog.js
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
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.Dialog = exports.DialogConfig = void 0;
|
|
13
|
+
const segments_1 = require("./segments");
|
|
14
|
+
const request_1 = require("./request");
|
|
15
|
+
const utils_1 = require("./utils");
|
|
16
|
+
const response_error_1 = require("./errors/response-error");
|
|
17
|
+
const tan_required_error_1 = require("./errors/tan-required-error");
|
|
18
|
+
const hitan_1 = require("./segments/hitan");
|
|
19
|
+
const constants_1 = require("./constants");
|
|
20
|
+
/**
|
|
21
|
+
* Properties passed to configure a `Dialog`.
|
|
22
|
+
*/
|
|
23
|
+
class DialogConfig {
|
|
24
|
+
constructor() {
|
|
25
|
+
/**
|
|
26
|
+
* The product ID that was assigned by ZKA
|
|
27
|
+
*/
|
|
28
|
+
this.productId = constants_1.PRODUCT_NAME;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.DialogConfig = DialogConfig;
|
|
32
|
+
/**
|
|
33
|
+
* A dialog consisting of multiple related requests and responses.
|
|
34
|
+
*/
|
|
35
|
+
class Dialog extends DialogConfig {
|
|
36
|
+
constructor(config, connection) {
|
|
37
|
+
super();
|
|
38
|
+
/**
|
|
39
|
+
* All messages sent within a dialog are numbered.
|
|
40
|
+
* This counter is kept here.
|
|
41
|
+
*/
|
|
42
|
+
this.msgNo = 1;
|
|
43
|
+
/**
|
|
44
|
+
* A unique id for the dialog.
|
|
45
|
+
* Assigned by the server as response to the initial request.
|
|
46
|
+
* For the initial request a `0` needs to be sent.
|
|
47
|
+
*/
|
|
48
|
+
this.dialogId = "0";
|
|
49
|
+
/**
|
|
50
|
+
* A list of allowed TAN methods as configured by the server.
|
|
51
|
+
*/
|
|
52
|
+
this.tanMethods = [];
|
|
53
|
+
/**
|
|
54
|
+
* The server will only accept a certain version for the HISALS segment.
|
|
55
|
+
* This version defaults to the latest version (6).
|
|
56
|
+
* The server's maximum supported version can be parsed from the initial requests and is stored here.
|
|
57
|
+
*/
|
|
58
|
+
this.hisalsVersion = 6;
|
|
59
|
+
/**
|
|
60
|
+
* The server will only accept a certain version for the HIKAZS segment.
|
|
61
|
+
* This version defaults to the latest version (6).
|
|
62
|
+
* The server's maximum supported version can be parsed from the initial requests and is stored here.
|
|
63
|
+
*/
|
|
64
|
+
this.hikazsVersion = 6;
|
|
65
|
+
/**
|
|
66
|
+
* The server will only accept a certain version for the HICDB segment.
|
|
67
|
+
* This version defaults to the latest version (1).
|
|
68
|
+
* The server's maximum supported version can be parsed from the initial requests and is stored here.
|
|
69
|
+
*/
|
|
70
|
+
this.hicdbVersion = 1;
|
|
71
|
+
this.hktanVersion = 1;
|
|
72
|
+
this.hkdseVersion = 1;
|
|
73
|
+
this.hkccsVersion = 1;
|
|
74
|
+
/**
|
|
75
|
+
* The server will only accept a certain version for the HIWPD segment.
|
|
76
|
+
* Stores the maximum supported version parsed during synchronization.
|
|
77
|
+
*/
|
|
78
|
+
this.hiwpdsVersion = 0;
|
|
79
|
+
/**
|
|
80
|
+
* A list of supported SEPA pain-formats as configured by the server.
|
|
81
|
+
*/
|
|
82
|
+
this.painFormats = [];
|
|
83
|
+
Object.assign(this, config);
|
|
84
|
+
this.connection = connection;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Send a synchronization request to the server.
|
|
88
|
+
* Only one synchronization is needed per dialog.
|
|
89
|
+
* This is most likely the initial request sent.
|
|
90
|
+
* It will be answered with the system's id and a list of supported TAN methods.
|
|
91
|
+
* The supported HISALS and HIKAZS version can also be parsed from this request.
|
|
92
|
+
*
|
|
93
|
+
* @return The response as received by the server.
|
|
94
|
+
*/
|
|
95
|
+
sync() {
|
|
96
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
97
|
+
const { blz, name, pin, systemId, dialogId, msgNo } = this;
|
|
98
|
+
const segments = [
|
|
99
|
+
new segments_1.HKIDN({ segNo: 3, blz, name, systemId: "0" }),
|
|
100
|
+
new segments_1.HKVVB({ segNo: 4, productId: this.productId, lang: 0 }),
|
|
101
|
+
new segments_1.HKSYN({ segNo: 5 }),
|
|
102
|
+
];
|
|
103
|
+
const response = yield this.send(new request_1.Request({ blz, name, pin, systemId, dialogId, msgNo, segments }));
|
|
104
|
+
this.systemId = (0, utils_1.escapeFinTS)(response.systemId);
|
|
105
|
+
this.dialogId = response.dialogId;
|
|
106
|
+
this.hisalsVersion = response.segmentMaxVersion(segments_1.HISALS);
|
|
107
|
+
this.hikazsVersion = response.segmentMaxVersion(segments_1.HIKAZS);
|
|
108
|
+
this.hicdbVersion = response.segmentMaxVersion(segments_1.HICDBS);
|
|
109
|
+
const hkdseVersion = response.segmentMaxVersion(segments_1.HIDSES);
|
|
110
|
+
this.hkdseVersion = hkdseVersion > 0 ? hkdseVersion : 1;
|
|
111
|
+
const hkccsVersion = response.segmentMaxVersion(segments_1.HICCSS);
|
|
112
|
+
this.hkccsVersion = hkccsVersion > 0 ? hkccsVersion : 1;
|
|
113
|
+
this.hiwpdsVersion = response.segmentMaxVersion(segments_1.HIWPDS);
|
|
114
|
+
this.hktanVersion = response.segmentMaxVersion(segments_1.HITANS);
|
|
115
|
+
this.tanMethods = response.supportedTanMethods;
|
|
116
|
+
this.painFormats = response.painFormats;
|
|
117
|
+
const hiupd = response.findSegments(segments_1.HIUPD);
|
|
118
|
+
this.hiupd = hiupd;
|
|
119
|
+
yield this.end();
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Send the initializing request to the server.
|
|
124
|
+
* The dialog is ready for performing custom requests afterwards.
|
|
125
|
+
*/
|
|
126
|
+
init() {
|
|
127
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
128
|
+
const { blz, name, pin, dialogId, msgNo, tanMethods } = this;
|
|
129
|
+
const segments = [
|
|
130
|
+
new segments_1.HKIDN({ segNo: 3, blz, name, systemId: "0" }),
|
|
131
|
+
new segments_1.HKVVB({ segNo: 4, productId: this.productId, lang: 0 }),
|
|
132
|
+
];
|
|
133
|
+
if (this.hktanVersion >= 6) {
|
|
134
|
+
const version = this.hktanVersion >= 7 ? 7 : 6;
|
|
135
|
+
segments.push(new segments_1.HKTAN({ segNo: 5, version, process: "4" }));
|
|
136
|
+
}
|
|
137
|
+
const response = yield this.send(new request_1.Request({ blz, name, pin, systemId: "0", dialogId, msgNo, segments, tanMethods }));
|
|
138
|
+
this.dialogId = response.dialogId;
|
|
139
|
+
return response;
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* End the currently open request.
|
|
144
|
+
*/
|
|
145
|
+
end() {
|
|
146
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
+
const { blz, name, pin, systemId, dialogId, msgNo } = this;
|
|
148
|
+
const segments = [new segments_1.HKEND({ segNo: 3, dialogId })];
|
|
149
|
+
yield this.send(new request_1.Request({ blz, name, pin, systemId, dialogId, msgNo, segments }));
|
|
150
|
+
this.dialogId = "0";
|
|
151
|
+
this.msgNo = 1;
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Send a custom request to the fints server and return the received response.
|
|
156
|
+
*
|
|
157
|
+
* @param request The request to send to the server.
|
|
158
|
+
*
|
|
159
|
+
* @return The response received from the server.
|
|
160
|
+
*/
|
|
161
|
+
send(request) {
|
|
162
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
163
|
+
request.msgNo = this.msgNo;
|
|
164
|
+
request.dialogId = this.dialogId;
|
|
165
|
+
request.tanMethods = this.tanMethods;
|
|
166
|
+
const response = yield this.connection.send(request);
|
|
167
|
+
this.dialogId = response.dialogId;
|
|
168
|
+
if (!response.success) {
|
|
169
|
+
throw new response_error_1.ResponseError(response);
|
|
170
|
+
}
|
|
171
|
+
if (response.returnValues().has("0030")) {
|
|
172
|
+
const hitan = response.findSegment(hitan_1.HITAN);
|
|
173
|
+
const returnValue = response.returnValues().get("0030");
|
|
174
|
+
// Determine which segment triggered the TAN requirement
|
|
175
|
+
const triggeringSegment = request.segments.length > 0 ? request.segments[0].type : undefined;
|
|
176
|
+
throw new tan_required_error_1.TanRequiredError(returnValue.message, hitan.transactionReference, hitan.challengeText, hitan.challengeMedia, this, tan_required_error_1.TanProcessStep.CHALLENGE_RESPONSE_NEEDED, triggeringSegment, {
|
|
177
|
+
returnCode: "0030",
|
|
178
|
+
requestSegments: request.segments.map((s) => s.type),
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
this.msgNo++;
|
|
182
|
+
return response;
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
exports.Dialog = Dialog;
|
|
187
|
+
//# sourceMappingURL=dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../src/dialog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FinTS Error and Return Code Mappings
|
|
3
|
+
* Based on FinTS 3.0 specification
|
|
4
|
+
*
|
|
5
|
+
* Code ranges:
|
|
6
|
+
* 0xxx - Success messages
|
|
7
|
+
* 3xxx - Warnings
|
|
8
|
+
* 9xxx - Errors
|
|
9
|
+
*/
|
|
10
|
+
export interface FinTSErrorCodeInfo {
|
|
11
|
+
code: string;
|
|
12
|
+
message: string;
|
|
13
|
+
category: "success" | "warning" | "error";
|
|
14
|
+
description: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Complete mapping of FinTS return codes
|
|
18
|
+
*/
|
|
19
|
+
export declare const FINTS_ERROR_CODES: Record<string, FinTSErrorCodeInfo>;
|
|
20
|
+
/**
|
|
21
|
+
* Get error code information
|
|
22
|
+
*/
|
|
23
|
+
export declare function getErrorCodeInfo(code: string): FinTSErrorCodeInfo | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Check if a code represents a success
|
|
26
|
+
*/
|
|
27
|
+
export declare function isSuccessCode(code: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Check if a code represents a warning
|
|
30
|
+
*/
|
|
31
|
+
export declare function isWarningCode(code: string): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Check if a code represents an error
|
|
34
|
+
*/
|
|
35
|
+
export declare function isErrorCode(code: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Get a human-readable error message with code
|
|
38
|
+
*/
|
|
39
|
+
export declare function formatErrorCode(code: string, originalMessage?: string): string;
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* FinTS Error and Return Code Mappings
|
|
4
|
+
* Based on FinTS 3.0 specification
|
|
5
|
+
*
|
|
6
|
+
* Code ranges:
|
|
7
|
+
* 0xxx - Success messages
|
|
8
|
+
* 3xxx - Warnings
|
|
9
|
+
* 9xxx - Errors
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.FINTS_ERROR_CODES = void 0;
|
|
13
|
+
exports.getErrorCodeInfo = getErrorCodeInfo;
|
|
14
|
+
exports.isSuccessCode = isSuccessCode;
|
|
15
|
+
exports.isWarningCode = isWarningCode;
|
|
16
|
+
exports.isErrorCode = isErrorCode;
|
|
17
|
+
exports.formatErrorCode = formatErrorCode;
|
|
18
|
+
/**
|
|
19
|
+
* Complete mapping of FinTS return codes
|
|
20
|
+
*/
|
|
21
|
+
exports.FINTS_ERROR_CODES = {
|
|
22
|
+
// Success codes (0xxx)
|
|
23
|
+
"0010": {
|
|
24
|
+
code: "0010",
|
|
25
|
+
message: "Nachricht entgegengenommen",
|
|
26
|
+
category: "success",
|
|
27
|
+
description: "Message successfully received",
|
|
28
|
+
},
|
|
29
|
+
"0020": {
|
|
30
|
+
code: "0020",
|
|
31
|
+
message: "Dialoginitialisierung erfolgreich",
|
|
32
|
+
category: "success",
|
|
33
|
+
description: "Dialog initialization successful",
|
|
34
|
+
},
|
|
35
|
+
"0030": {
|
|
36
|
+
code: "0030",
|
|
37
|
+
message: "Auftrag entgegengenommen - Sicherheitsfreigabe erforderlich",
|
|
38
|
+
category: "success",
|
|
39
|
+
description: "Order received - TAN/Security clearance required",
|
|
40
|
+
},
|
|
41
|
+
"0100": {
|
|
42
|
+
code: "0100",
|
|
43
|
+
message: "Dialog beendet",
|
|
44
|
+
category: "success",
|
|
45
|
+
description: "Dialog ended successfully",
|
|
46
|
+
},
|
|
47
|
+
// Warning codes (3xxx)
|
|
48
|
+
"3010": {
|
|
49
|
+
code: "3010",
|
|
50
|
+
message: "Teilweise fehlerhaft",
|
|
51
|
+
category: "warning",
|
|
52
|
+
description: "Partially erroneous",
|
|
53
|
+
},
|
|
54
|
+
"3040": {
|
|
55
|
+
code: "3040",
|
|
56
|
+
message: "Auftragsdaten liegen nicht vollständig vor - weitere Auftragsdaten benötigt",
|
|
57
|
+
category: "warning",
|
|
58
|
+
description: "Order data not complete - more data needed (touchdown)",
|
|
59
|
+
},
|
|
60
|
+
"3050": {
|
|
61
|
+
code: "3050",
|
|
62
|
+
message: "Auftragsart derzeit nicht zugelassen",
|
|
63
|
+
category: "warning",
|
|
64
|
+
description: "Order type currently not permitted",
|
|
65
|
+
},
|
|
66
|
+
"3060": {
|
|
67
|
+
code: "3060",
|
|
68
|
+
message: "Teilweise fehlerhaft, Restdaten folgen",
|
|
69
|
+
category: "warning",
|
|
70
|
+
description: "Partially erroneous, remaining data follows",
|
|
71
|
+
},
|
|
72
|
+
"3076": {
|
|
73
|
+
code: "3076",
|
|
74
|
+
message: "Starke Kundenauthentifizierung notwendig",
|
|
75
|
+
category: "warning",
|
|
76
|
+
description: "Strong customer authentication necessary (PSD2)",
|
|
77
|
+
},
|
|
78
|
+
"3920": {
|
|
79
|
+
code: "3920",
|
|
80
|
+
message: "Zugelassene Zwei-Schritt-Verfahren für den Benutzer",
|
|
81
|
+
category: "warning",
|
|
82
|
+
description: "Permitted two-step procedures for the user",
|
|
83
|
+
},
|
|
84
|
+
"3956": {
|
|
85
|
+
code: "3956",
|
|
86
|
+
message: "Starke Kundenauthentifizierung notwendig",
|
|
87
|
+
category: "warning",
|
|
88
|
+
description: "Strong customer authentication necessary",
|
|
89
|
+
},
|
|
90
|
+
// Error codes (9xxx)
|
|
91
|
+
"9010": {
|
|
92
|
+
code: "9010",
|
|
93
|
+
message: "Nachrichtenaufbau fehlerhaft",
|
|
94
|
+
category: "error",
|
|
95
|
+
description: "Message structure error",
|
|
96
|
+
},
|
|
97
|
+
"9030": {
|
|
98
|
+
code: "9030",
|
|
99
|
+
message: "Nachrichtenkopf fehlerhaft",
|
|
100
|
+
category: "error",
|
|
101
|
+
description: "Message header error",
|
|
102
|
+
},
|
|
103
|
+
"9040": {
|
|
104
|
+
code: "9040",
|
|
105
|
+
message: "Nachrichten-Ende fehlerhaft",
|
|
106
|
+
category: "error",
|
|
107
|
+
description: "Message end error",
|
|
108
|
+
},
|
|
109
|
+
"9050": {
|
|
110
|
+
code: "9050",
|
|
111
|
+
message: "Nachrichtensignatur fehlerhaft oder fehlt",
|
|
112
|
+
category: "error",
|
|
113
|
+
description: "Message signature error or missing",
|
|
114
|
+
},
|
|
115
|
+
"9070": {
|
|
116
|
+
code: "9070",
|
|
117
|
+
message: "Test-BPD/UPD nicht mehr aktuell",
|
|
118
|
+
category: "error",
|
|
119
|
+
description: "Test BPD/UPD no longer current",
|
|
120
|
+
},
|
|
121
|
+
"9080": {
|
|
122
|
+
code: "9080",
|
|
123
|
+
message: "Teilnehmer im Testsystem nicht vorhanden",
|
|
124
|
+
category: "error",
|
|
125
|
+
description: "Participant not present in test system",
|
|
126
|
+
},
|
|
127
|
+
"9110": {
|
|
128
|
+
code: "9110",
|
|
129
|
+
message: "Kunde nicht berechtigt",
|
|
130
|
+
category: "error",
|
|
131
|
+
description: "Customer not authorized",
|
|
132
|
+
},
|
|
133
|
+
"9120": {
|
|
134
|
+
code: "9120",
|
|
135
|
+
message: "Auftrag nicht zugelassen",
|
|
136
|
+
category: "error",
|
|
137
|
+
description: "Order not permitted",
|
|
138
|
+
},
|
|
139
|
+
"9130": {
|
|
140
|
+
code: "9130",
|
|
141
|
+
message: "Maximale Anzahl Aufträge überschritten",
|
|
142
|
+
category: "error",
|
|
143
|
+
description: "Maximum number of orders exceeded",
|
|
144
|
+
},
|
|
145
|
+
"9140": {
|
|
146
|
+
code: "9140",
|
|
147
|
+
message: "Geschäftsvorfall nicht zugelassen",
|
|
148
|
+
category: "error",
|
|
149
|
+
description: "Business transaction not permitted",
|
|
150
|
+
},
|
|
151
|
+
"9210": {
|
|
152
|
+
code: "9210",
|
|
153
|
+
message: "Feature nicht unterstützt",
|
|
154
|
+
category: "error",
|
|
155
|
+
description: "Feature not supported",
|
|
156
|
+
},
|
|
157
|
+
"9340": {
|
|
158
|
+
code: "9340",
|
|
159
|
+
message: "Nachricht abgelehnt",
|
|
160
|
+
category: "error",
|
|
161
|
+
description: "Message rejected",
|
|
162
|
+
},
|
|
163
|
+
"9380": {
|
|
164
|
+
code: "9380",
|
|
165
|
+
message: "Dialog abgebrochen",
|
|
166
|
+
category: "error",
|
|
167
|
+
description: "Dialog aborted",
|
|
168
|
+
},
|
|
169
|
+
"9390": {
|
|
170
|
+
code: "9390",
|
|
171
|
+
message: "Nachricht doppelt",
|
|
172
|
+
category: "error",
|
|
173
|
+
description: "Duplicate message",
|
|
174
|
+
},
|
|
175
|
+
"9800": {
|
|
176
|
+
code: "9800",
|
|
177
|
+
message: "Dialog/Nachricht abgebrochen",
|
|
178
|
+
category: "error",
|
|
179
|
+
description: "Dialog/Message aborted",
|
|
180
|
+
},
|
|
181
|
+
"9931": {
|
|
182
|
+
code: "9931",
|
|
183
|
+
message: "Kundensystem-ID ungültig",
|
|
184
|
+
category: "error",
|
|
185
|
+
description: "Customer system ID invalid",
|
|
186
|
+
},
|
|
187
|
+
"9942": {
|
|
188
|
+
code: "9942",
|
|
189
|
+
message: "PIN falsch",
|
|
190
|
+
category: "error",
|
|
191
|
+
description: "PIN incorrect",
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
/**
|
|
195
|
+
* Get error code information
|
|
196
|
+
*/
|
|
197
|
+
function getErrorCodeInfo(code) {
|
|
198
|
+
return exports.FINTS_ERROR_CODES[code];
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Check if a code represents a success
|
|
202
|
+
*/
|
|
203
|
+
function isSuccessCode(code) {
|
|
204
|
+
return code.startsWith("0");
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Check if a code represents a warning
|
|
208
|
+
*/
|
|
209
|
+
function isWarningCode(code) {
|
|
210
|
+
return code.startsWith("3");
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Check if a code represents an error
|
|
214
|
+
*/
|
|
215
|
+
function isErrorCode(code) {
|
|
216
|
+
return code.startsWith("9");
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Get a human-readable error message with code
|
|
220
|
+
*/
|
|
221
|
+
function formatErrorCode(code, originalMessage) {
|
|
222
|
+
const info = getErrorCodeInfo(code);
|
|
223
|
+
if (info) {
|
|
224
|
+
return `[${code}] ${info.message}${originalMessage && originalMessage !== info.message ? ` - ${originalMessage}` : ""}`;
|
|
225
|
+
}
|
|
226
|
+
return originalMessage ? `[${code}] ${originalMessage}` : `[${code}] Unknown error code`;
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=error-codes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-codes.js","sourceRoot":"","sources":["../src/error-codes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { ReturnValue } from "../return-value";
|
|
2
|
+
/**
|
|
3
|
+
* Base class for FinTS-specific errors with enhanced error information
|
|
4
|
+
*/
|
|
5
|
+
export declare class FinTSError extends Error {
|
|
6
|
+
code: string;
|
|
7
|
+
returnValue?: ReturnValue;
|
|
8
|
+
constructor(message: string, code?: string, returnValue?: ReturnValue);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Error thrown when customer authentication fails
|
|
12
|
+
*/
|
|
13
|
+
export declare class AuthenticationError extends FinTSError {
|
|
14
|
+
constructor(message: string, code?: string, returnValue?: ReturnValue);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Error thrown when an order/transaction is rejected
|
|
18
|
+
*/
|
|
19
|
+
export declare class OrderRejectedError extends FinTSError {
|
|
20
|
+
constructor(message: string, code?: string, returnValue?: ReturnValue);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Error thrown when the dialog is aborted by the server
|
|
24
|
+
*/
|
|
25
|
+
export declare class DialogAbortedError extends FinTSError {
|
|
26
|
+
constructor(message: string, code?: string, returnValue?: ReturnValue);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Error thrown when a message has structural errors
|
|
30
|
+
*/
|
|
31
|
+
export declare class MessageStructureError extends FinTSError {
|
|
32
|
+
constructor(message: string, code?: string, returnValue?: ReturnValue);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Error thrown when a PIN is incorrect
|
|
36
|
+
*/
|
|
37
|
+
export declare class PinError extends FinTSError {
|
|
38
|
+
constructor(message: string, code?: string, returnValue?: ReturnValue);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Error thrown when strong customer authentication is required (PSD2)
|
|
42
|
+
*/
|
|
43
|
+
export declare class StrongAuthenticationRequiredError extends FinTSError {
|
|
44
|
+
constructor(message: string, code?: string, returnValue?: ReturnValue);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Error thrown when system/customer ID is invalid
|
|
48
|
+
*/
|
|
49
|
+
export declare class InvalidSystemIdError extends FinTSError {
|
|
50
|
+
constructor(message: string, code?: string, returnValue?: ReturnValue);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Factory function to create appropriate error based on error code
|
|
54
|
+
*/
|
|
55
|
+
export declare function createFinTSError(code: string, message: string, returnValue?: ReturnValue): FinTSError;
|