coreapi.js 1.64 KB
const request = require('request');

const logger = require('tektrans-logger');
const coreUrl = require('komodo-sdk/core-url');

logger.verbose(`CORE URL: ${coreUrl}`);

function doRequest(params, cb) {
    return new Promise((resolve) => {
        const options = {
            url: `${coreUrl}/${params.path.replace(/^\/+/, '')}`,
            method: params.method || 'GET',
            qs: params.qs || null,
        };

        logger.verbose('Requesting to CORE', {
            xid: params.xid, method: options.method, fullpath: options.url, qs: options.qs,
        });

        request(options, (err, res, body) => {
            if (err) {
                logger.warn(`COREAPI: Error doing HTTP ${options.method} to CORE. ${err.toString()}`, { xid: params.xid });
                resolve(null);
                if (typeof cb === 'function') cb(err);
                return;
            }

            if (res.statusCode !== 200) {
                logger.warn(`COREAPI: CORE returning HTTP STATUS CODE ${res.statusCode}, not 200`, { xid: params.xid, body });
                resolve(null);
                if (typeof cb === 'function') cb('NON_HTTP_STATUS_200');
                return;
            }

            let bodyObject;
            try {
                bodyObject = JSON.parse(body);
            } catch (e) {
                logger.verbose('COREAPI: CORE respond is not a JSON string');
                resolve(body);
                if (typeof cb === 'function') cb(e, body);
                return;
            }

            resolve(bodyObject);
            if (typeof cb === 'function') cb(null, bodyObject);
        });
    });
}

module.exports = doRequest;