node-idin
Version:
NodeJS Library for iDIN (https://www.idin.nl/)
80 lines • 3.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const assert_1 = require("assert");
const pretty_data_1 = require("pretty-data");
const uniqid = require("uniqid");
const xml_js_1 = require("xml-js");
const await_to_js_1 = require("await-to-js");
const idin_protocol_1 = require("./idin-protocol");
const idin_request_1 = require("./idin-request");
function formatTransactionProtocolXML({ issuerId, merchantReturnUrl, defaultLanguage, expirationPeriod, idPrefix, loa, requestedService, transactionId, merchantSubId, merchantId, publicKeyFingerprint, privateKey, publicKey, }) {
const xml = pretty_data_1.pd.xmlmin(`
<?xml version="1.0" encoding="UTF-8"?>
<AcquirerTrxReq 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#">
<createDateTimestamp>${new Date().toISOString()}</createDateTimestamp>
<Issuer>
<issuerID>${issuerId}</issuerID>
</Issuer>
<Merchant>
<merchantID>${merchantId}</merchantID>
<subID>${merchantSubId}</subID>
<merchantReturnURL>${merchantReturnUrl}</merchantReturnURL>
</Merchant>
<Transaction>
<expirationPeriod>${expirationPeriod}</expirationPeriod>
<language>${defaultLanguage}</language>
<entranceCode>${idPrefix}${transactionId}${uniqid.time()}</entranceCode>
<container>
<samlp:AuthnRequest
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
AttributeConsumingServiceIndex="${requestedService}"
ID="${idPrefix}${transactionId}"
IssueInstant="${new Date().toISOString()}"
Version="2.0"
ProtocolBinding="nl:bvn:bankid:1.0:protocol:iDx"
AssertionConsumerServiceURL="${merchantReturnUrl}">
<saml:Issuer>${merchantId}</saml:Issuer>
<samlp:RequestedAuthnContext Comparison="minimum">
<saml:AuthnContextClassRef>nl:bvn:bankid:1.0:${loa}</saml:AuthnContextClassRef>
</samlp:RequestedAuthnContext>
</samlp:AuthnRequest>
</container>
</Transaction>
</AcquirerTrxReq>
`);
return idin_protocol_1.signXml({ xml, publicKey, publicKeyFingerprint, privateKey });
}
async function getTransactionResponse({ merchantId, merchantSubId, routingCert, routingEndpoint, publicKeyFingerprint, privateKey, publicKey }, otherParams) {
const [err, res] = await await_to_js_1.default(idin_request_1.fetchResponse({
payload: formatTransactionProtocolXML({ ...otherParams, merchantId, merchantSubId, publicKeyFingerprint, privateKey, publicKey }),
routingEndpoint,
routingCert,
}));
assert_1.ifError(err);
const parsed = JSON.parse(xml_js_1.xml2json(res, { compact: true }));
if (parsed['ns3:AcquirerErrorRes']) {
return {
createDateTimestamp: parsed['ns3:AcquirerErrorRes']['ns3:createDateTimestamp'],
Error: parsed['ns3:AcquirerErrorRes']['ns3:Error'],
};
}
return {
createDateTimestamp: parsed['ns3:AcquirerTrxRes']['ns3:createDateTimestamp']._text,
Acquirer: {
acquirerID: parsed['ns3:AcquirerTrxRes']['ns3:Acquirer']['ns3:acquirerID']._text,
},
Issuer: {
issuerAuthenticationURL: parsed['ns3:AcquirerTrxRes']['ns3:Issuer']['ns3:issuerAuthenticationURL']._text,
},
Transaction: {
transactionID: parsed['ns3:AcquirerTrxRes']['ns3:Transaction']['ns3:transactionID']._text,
transactionCreateDateTimestamp: parsed['ns3:AcquirerTrxRes']['ns3:Transaction']['ns3:transactionCreateDateTimestamp']._text,
},
};
}
exports.default = getTransactionResponse;
//# sourceMappingURL=transaction-protocol.js.map