beckn-lightweight
Version:
Lightweight Node.js utilities to integrate Beckn protocol into existing BPPs
35 lines (27 loc) • 1.23 kB
JavaScript
const axios = require("axios");
const { sendAck } = require("../utils/ackResponse");
const { postCallback } = require("../utils/postCallback");
function createForwardingHandlerFactory(config = {}) {
return function createForwardingHandler({ messageKey, callbackAction }) {
return async (req, res) => {
const context = req.body.context;
const payload = req.body.message?.[messageKey];
console.log(`[${context.action}] → Received. Sending ACK.`);
sendAck(res);
try {
const bppUri = config.bppUri || context.bpp_uri;
if (!bppUri) throw new Error("Missing bpp_uri in config or context");
const forwardUrl = `${bppUri}/${context.action}`;
const response = await axios.post(forwardUrl, req.body, {
headers: { "Content-Type": "application/json" },
});
console.log(`[${context.action}] → Forwarded to BPP. Posting callback.`);
const bapUri = config.bapUri || context.bap_uri;
await postCallback(callbackAction, context, response.data, bapUri);
} catch (err) {
console.error(`${callbackAction} forwarding error:`, err.message);
}
};
};
}
module.exports = createForwardingHandlerFactory;