UNPKG

node-idin

Version:

NodeJS Library for iDIN (https://www.idin.nl/)

62 lines 2.76 kB
"use strict"; 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