index.js 1.63 KB
"use strict";

const request = require('request');

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

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() ) {
        return;
    }

    const partner = params.partner.trim();
    const msg = params.msg.trim();

    const requestOptions = {
        url: config.messaging_url,
        qs: {
            origin: originData.origin,
            report_port: originData.report_port,
            from: partner,
            msg: msg
        }
    }

    request(requestOptions, function(err, res, body) {
        if (err) {
            logger.warn(err);
            return;
        }

        try {
            var data = JSON.parse(body);
        }
        catch(e) {
            logger.verbose('Direct response is not on JSON format, forwarding raw response');
            sendToPartner(partner, body);
            return;
        }

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

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

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