request.js 2.78 KB
// const PRODUCTION = process.env.NODE_ENV === 'production';

const request = require('request');
const uniqid = require('uniqid');

const coreUrl = require('komodo-sdk/core-url');
const config = require('komodo-sdk/config');
const logger = require('komodo-sdk/logger');
const commandError = require('../command-handler/error');

function execute(coreEndpoint, params, httpMethod, cb) {
    const xid = uniqid();

    const requestOptions = {
        url: coreUrl + coreEndpoint,
        method: httpMethod || 'GET'
    }

    if (requestOptions.method === 'GET' && params) {
        requestOptions.qs = params;
    }
    else if (requestOptions.method === 'POST' && params) {
        requestOptions.data = params;
    }

    logger.verbose('COREAPI-REQUEST: Requesting to core', {
        xid, url: requestOptions.url, http_method: httpMethod, params: params,
    });

    request(requestOptions, function(err, res, body) {
        const responseParams = {
            directResponse: true,
            httpStatusCode: res ? res.statusCode : null,
            body: body
        }

        if (err) {
            logger.warn('ERROR on requesting to CORE', {
                xid, eCode: err.code, eMessage: err.message,
            });
            cb(commandError.ERR_INVALID_CORE_RESPONSE, null, responseParams);
            return;
        }

        if (res.statusCode !== 200) {
            logger.warn('Invalid HTTP status from CORE', {
                xid, httpStatus: res.statusCode,
            });

            cb(commandError.ERR_INVALID_CORE_HTTP_STATUS_RESPONSE, null, responseParams);
            return;
        }

        try {
            var coreResponseObject = JSON.parse(body);
        }
        catch(e) {
            logger.warn(commandError.ERR_INVALID_CORE_RESPONSE, {
                xid, eCode: e.code, eMessage: e.message, body: body
            });
            cb(commandError.ERR_INVALID_CORE_RESPONSE, null, responseParams);
            return;
        }

        logger.verbose('Got CORE response', {
            xid, coreResponseObject,
        });

        // jangan kirim reply rc 68 jika origin/center ada di do_not_forward_rc68_to_centers
        if (
            coreResponseObject && coreResponseObject.rc === '68'
            && config && config.do_not_forward_rc68_to_centers
            && params && params.origin && params.origin.trim()
            && typeof params.origin === 'string'
            && Array.isArray(config.do_not_forward_rc68_to_centers)
            && config.do_not_forward_rc68_to_centers
                .map((item) => item && (typeof item === 'string') && item.trim().toUpperCase())
                .indexOf(params.origin.trim().toUpperCase()) >= 0
        ) {
            return;
        }

        cb(err, coreResponseObject, responseParams);
    })

}

module.exports = execute;