index.js 2.81 KB
const DEBUG_ON_NON_JSON_DIRECT_RESPONSE = !!(process.env.DEBUG_ON_NON_JSON_DIRECT_RESPONSE)

const request = require('request');
const config = require('komodo-sdk/config');
const logger = require('komodo-sdk/logger');

if (!process.env.KOMODO_MESSAGING_DO_NOT_LISTEN) {
    require('./http-callback-handler');
}

let transport;

const originData = {
    origin: config.origin,
    report_port: config.listen_port
}

function setTransport(_transport) {
    transport = _transport;
}

function onIncomingMessage(params) {

    if ( typeof params.partner !== 'string' || typeof params.msg !== 'string' || !params.partner.trim() || !params.msg.trim() ) {
        logger.verbose('Not reporting to messaging center because of invalid parameter. F68CCCD74E79');
        return;
    }

    const requestOptions = {
        url: config.messaging_url,
        qs: {
            origin: originData.origin,
            origin_label: params.origin_label,
            origin_transport: params.origin_transport,
            report_port: originData.report_port,
            partner: params.partner,
            partner_raw: params.partner_raw || params.partner,
            from: params.partner,
            from_raw: params.partner_raw || params.partner,
            msg: params.msg.trim(),
            do_not_forward_to_core: params.do_not_forward_to_core || null,
            is_outgoing: params.is_outgoing || null,
        }
    }

    logger.verbose('MESSAGING-CLIENT-LIB: Sending report to messaging service', { qs: requestOptions.qs });
    request(requestOptions, function(err, res, body) {
        if (err) {
            logger.warn('MESSAGING-CLIENT-LIB: error on request to messaging service', {err: err});
            return;
        }

        logger.verbose('MESSAGING-CLIENT-LIB: Got resposnse', { body });

        if (params.do_not_forward_to_core) return;
        if (params.is_outgoing) return;

        try {
            var data = JSON.parse(body);
        }
        catch(e) {
            if (DEBUG_ON_NON_JSON_DIRECT_RESPONSE) {
                logger.verbose('MESSAGING-CLIENT-LIB: direct response from messaging service is not on JSON format, forwarding raw response', {
                    partner: params.partner,
                    msg: params.msg.trim(),
                    directResponse: body,
                });
            }

            sendToPartner(params.partner, body);
            return;
        }

        //logger.verbose('DEBUG', {msg: data.message, err: data.error});
        const responseMessage = data.message || data.error;
        sendToPartner(params.partner, responseMessage);
    })
}

function sendToPartner(partner, msg) {
    if (transport && transport.send) {
        transport.send(partner, msg);
    }
}

exports.setTransport = setTransport;
exports.onIncomingMessage = onIncomingMessage;
exports.sendToPartner = sendToPartner;