const MODULE_NAME = 'PARSE-RESULT'; const config = require('komodo-sdk/config'); const logger = require('komodo-sdk/logger'); const getParamsMemberObj = require('./generic-xmlrpc/get-params-members-obj'); const parseXml = require('./parse-xml'); const report = require('./report'); const translateRc = require('./translate-rc'); module.exports = (xid, trxIdFromCaller, xml, isCallback) => { logger.verbose(`${MODULE_NAME} 58547863: Processing XML message`, { xid, isCallback }); const responseType = isCallback ? 'CALLBACK' : 'DIRECT-RESPONSE'; if (!trxIdFromCaller && !isCallback) { if (logger) logger.warn(`${MODULE_NAME} 8CAAD7C9: No trx id on non callback`, { xid }); return; } const obj = parseXml(xid, xml); if (!obj) { const e = new Error(`${MODULE_NAME} B46CAAD1: Invalid XML`); logger.warn(e.message, { xid }); if (trxIdFromCaller) { report(xid, { trx_id: trxIdFromCaller.toString(), rc: '68', message: { xid, responseType, 'GW-ERROR': { message: e.message, responseFromPartner: xml, }, }, }); } return; } const params = getParamsMemberObj(obj, false); if (!params) { const e = new Error(`${MODULE_NAME} A7B7EB30: Can not get params from message`); logger.warn(e.message, { xid }); if (trxIdFromCaller) { report(xid, { trx_id: trxIdFromCaller.toString(), rc: '68', message: { xid, responseType, 'GW-ERROR': { message: e.message, responseFromPartner: obj, }, }, }); } } logger.verbose(`${MODULE_NAME} 3D5400C1: Params extracted from response`, { xid, params }); const requestIdField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.requestId) || 'REQUESTID'; const requestIdFromResponse = params[requestIdField]; const responseCodeField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.responseCode) || 'RESPONSECODE'; const responseCodeFromResponse = params[responseCodeField]; // eslint-disable-next-line max-len // const messageField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.message) || 'MESSAGE'; // const messageFromResponse = params[messageField]; const snField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.sn) || 'SN'; const snFromResponse = params[snField]; const trxId = trxIdFromCaller || requestIdFromResponse; if (!trxId) { logger.warn(`${MODULE_NAME} 534E684A: Unknown trxId`, { xid }); return; } const rc = translateRc(xid, responseCodeFromResponse) || '68'; const sn = (rc === '00' && snFromResponse) || null; report(xid, { trx_id: trxId.toString(), rc, sn, message: { xid, responseType: isCallback ? 'CALLBACK' : 'DIRECT-RESPONSE', message: params, }, }); };