forest-express
Version:
Official package for all Forest Express Lianas
51 lines (50 loc) • 1.76 kB
JavaScript
;
var _require = require('@forestadmin/context'),
inject = _require.inject;
var P = require('bluebird');
var superagent = require('superagent');
var VError = require('verror');
var timeoutError = require('../utils/timeout-error');
var errorMessages = require('../utils/error-messages');
function perform(route, environmentSecret, queryParameters, headers) {
var _inject = inject(),
forestUrl = _inject.forestUrl;
var url = forestUrl + route;
// eslint-disable-next-line sonarjs/cognitive-complexity
return new P(function (resolve, reject) {
var request = superagent.get(url).timeout(process.env.FOREST_REQUEST_TIMEOUT || 30000);
if (environmentSecret) {
request.set('forest-secret-key', environmentSecret);
}
if (headers) {
request.set(headers);
}
if (queryParameters) {
request.query(queryParameters);
}
request.end(function (error, result) {
if (result) {
if (result.status === 200 && result.body) {
return resolve(result.body);
}
if (result.status === 0) {
return reject(new Error(errorMessages.SERVER_TRANSACTION.SERVER_DOWN));
}
if (result.status === 404) {
return reject(new Error(errorMessages.SERVER_TRANSACTION.SECRET_NOT_FOUND));
}
if (result.status === 422) {
return reject(new Error(errorMessages.SERVER_TRANSACTION.SECRET_AND_RENDERINGID_INCONSISTENT));
}
}
if (error) {
var message = timeoutError(url, error) || 'Forest server request error';
return reject(new VError(error, message));
}
return reject(new Error(errorMessages.SERVER_TRANSACTION.UNEXPECTED, error));
});
});
}
module.exports = {
perform: perform
};