node-ebics-client/lib/Client.js

77 lines
1.8 KiB
JavaScript
Raw Normal View History

2018-05-17 15:03:59 +00:00
'use strict';
2018-06-01 13:16:43 +00:00
const $request = require('request');
2018-05-17 15:03:59 +00:00
2018-06-01 13:16:43 +00:00
const XMLSign = require('./middleware/XMLSign');
2018-05-17 15:03:59 +00:00
const ParseResponse = require('./middleware/ParseResponse');
2018-05-17 15:03:59 +00:00
module.exports = class Client {
constructor({ url }) {
this.url = url;
2018-06-01 13:16:43 +00:00
}
2018-05-17 15:03:59 +00:00
async initialization(order) {
2018-06-11 12:25:07 +00:00
const res = await this.ebicsRequest(order);
const xml = res.orderData();
2018-06-01 13:16:43 +00:00
return {
orderData: xml,
orderId: res.orderId(),
returnCode: res.returnCode(),
reportText: res.reportText(),
bankKeys: res.bankKeys(),
};
2018-05-17 15:03:59 +00:00
}
async download(order) {
2018-06-11 12:25:07 +00:00
const res = await this.ebicsRequest(order);
2018-05-17 15:03:59 +00:00
order.transactionId = res.transactionId();
if (res.isSegmented() && res.isLastSegment())
2018-06-11 12:25:07 +00:00
await this.ebicsRequest(order);
2018-05-17 15:03:59 +00:00
// return res.orderData();
return {
orderData: res.orderData(),
orderId: res.orderId(),
returnCode: res.returnCode(),
reportText: res.reportText(),
};
2018-06-01 13:16:43 +00:00
}
2018-05-17 15:03:59 +00:00
2018-05-31 09:08:07 +00:00
async upload(order) {
2018-06-11 12:25:07 +00:00
let res = await this.ebicsRequest(order);
const transactionId = res.transactionId();
const orderId = res.orderId();
order.transactionId = transactionId;
2018-05-31 09:08:07 +00:00
2018-06-11 12:25:07 +00:00
res = await this.ebicsRequest(order);
2018-05-31 09:08:07 +00:00
return [transactionId, orderId];
2018-05-31 09:08:07 +00:00
}
2018-06-01 13:16:43 +00:00
async downloadAndUnzip(order) { // eslint-disable-line
2018-05-17 15:03:59 +00:00
}
2018-06-11 12:25:07 +00:00
ebicsRequest(order) {
2018-05-17 15:03:59 +00:00
return new Promise((resolve, reject) => {
$request.post({
2018-06-01 13:16:43 +00:00
url: this.url,
2018-06-11 12:25:07 +00:00
body: XMLSign.sign(order),
2018-06-01 13:16:43 +00:00
headers: { 'content-type': 'text/xml;charset=UTF-8' },
2018-06-11 12:25:07 +00:00
}, (err, res, data) => (err ? reject(err) : resolve(ParseResponse.parse(data, order.keys, order.version))));
2018-05-17 15:03:59 +00:00
});
2018-06-01 13:16:43 +00:00
}
2018-05-17 15:03:59 +00:00
request(order) {
if (order.type.toLowerCase() === 'ini') return this.initialization(order);
if (order.type.toLowerCase() === 'payment') return this.upload(order);
if (order.type.toLowerCase() === 'status') return this.download(order);
2018-05-17 15:03:59 +00:00
throw Error('Invalid order type');
2018-05-17 15:03:59 +00:00
}
};