node-idin
Version:
NodeJS Library for iDIN (https://www.idin.nl/)
62 lines • 2.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const assert_1 = require("assert");
const idin_request_1 = require("./idin-request");
const pretty_data_1 = require("pretty-data");
const await_to_js_1 = require("await-to-js");
const idin_protocol_1 = require("./idin-protocol");
const xml_js_1 = require("xml-js");
function formatDirectoryProtocolXML({ merchantId, merchantSubId, publicKey, privateKey, publicKeyFingerprint }) {
const xml = pretty_data_1.pd.xmlmin(`
<?xml version="1.0" encoding="UTF-8"?>
<DirectoryReq
version="1.0.0"
productID="NL:BVN:BankID:1.0"
xmlns="http://www.betaalvereniging.nl/iDx/messages/Merchant-Acquirer/1.0.0"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<createDateTimestamp>${new Date().toISOString()}</createDateTimestamp>
<Merchant>
<merchantID>${merchantId}</merchantID>
<subID>${merchantSubId}</subID>
</Merchant>
</DirectoryReq>
`);
return idin_protocol_1.signXml({ xml, publicKey, publicKeyFingerprint, privateKey });
}
const transformToArray = (source) => Array.isArray(source) ? source : [source];
function _parseIssuers(issuers) {
const parse = (issuer) => {
return {
issuerID: issuer['ns3:issuerID']._text,
issuerName: issuer['ns3:issuerName']._text,
};
};
return Array.isArray(issuers) ? issuers.map(parse) : [parse(issuers)];
}
async function getDirectoryResponse({ merchantId, merchantSubId, routingCert, routingEndpoint, privateKey, publicKey, publicKeyFingerprint }) {
const [err, res] = await await_to_js_1.default(idin_request_1.fetchResponse({
payload: formatDirectoryProtocolXML({ merchantSubId, merchantId, privateKey, publicKey, publicKeyFingerprint }),
routingEndpoint,
routingCert,
}));
assert_1.ifError(err);
const parsed = JSON.parse(xml_js_1.xml2json(res, { compact: true }));
const directoryRes = parsed['ns3:DirectoryRes'];
const directory = directoryRes['ns3:Directory'];
const countries = transformToArray(directory['ns3:Country']);
return {
createDateTimestamp: directoryRes['ns3:createDateTimestamp']._text,
Acquirer: {
acquirerID: directoryRes['ns3:Acquirer']['ns3:acquirerID']._text,
},
Directory: {
directoryDateTimestamp: directory['ns3:directoryDateTimestamp']._text,
Country: countries.map((country) => ({
countryNames: country['ns3:countryNames']._text,
Issuer: _parseIssuers(country['ns3:Issuer']),
})),
},
};
}
exports.default = getDirectoryResponse;
//# sourceMappingURL=directory-protocol.js.map