parse-result.js 2.45 KB
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 });

    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) {
        logger.warn(`${MODULE_NAME} B46CAAD1: Invalid XML`, { xid });

        if (trxIdFromCaller) {
            report(xid, {
                trx_id: trxIdFromCaller,
                rc: '68',
                message: {
                    xid,
                    isDirectResponse: !isCallback,
                    isCallback: !!isCallback,
                    body: xml,
                },
            });
        }

        return;
    }

    const params = getParamsMemberObj(obj, false);
    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,
        rc,
        sn,
        message: {
            xid,
            responseType: isCallback ? 'CALLBACK' : 'DIRECT-RESPONSE',
            body: xml,
        },
    });
};