UNPKG

node-idin

Version:

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

80 lines 3.91 kB
"use strict"; 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