@methodus/server
Version:
Server components for @methodus workflow
212 lines • 7.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
require("reflect-metadata");
const log_1 = require("../../log");
const fs = require("fs");
const path = require("path");
const https = require("https");
const request = require("request-promise-native");
let Request = class Request {
sendRequest(verb, uri, params, paramsMap, securityContext) {
const body = {};
const headers = {};
const cookies = {};
const query = {};
const files = [];
try {
paramsMap.forEach((item) => {
item.value = params[item.index];
switch (item.from) {
case 'params':
if (item.name) {
uri = uri.replace(':' + item.name, item.value);
}
else {
Object.keys(item.value).forEach((element) => {
uri = uri.replace(':' + element, item.value[element]);
});
}
break;
case 'body':
if (item.name) {
body[item.name] = item.value;
}
else {
Object.assign(body, item.value);
}
break;
case 'query':
if (item.name) {
query[item.name] = item.value;
}
else {
Object.assign(query, item.value);
}
break;
case 'security_context':
securityContext = { uid: item.value.uid, user_id: item.value.user_id };
break;
case 'headers':
if (item.name) {
headers[item.name] = item.value;
}
else {
Object.assign(headers, item.value);
}
break;
case 'cookies':
if (item.name) {
cookies[item.name] = item.value;
}
else {
Object.assign(cookies, item.value);
}
break;
case 'files':
if (item.name) {
files[item.name] = item.value;
}
else {
Object.assign(files, item.value);
}
break;
}
});
}
catch (error) {
log_1.logger.error(error);
}
if (Object.keys(query).length > 0) {
uri += '?' + Object.keys(query).map((element) => {
if (Array.isArray(query[element])) {
return query[element].map((subelement) => {
if (typeof subelement !== 'string') {
return `${element}=${encodeURIComponent(JSON.stringify(subelement))}`;
}
else {
return `${element}=${encodeURIComponent(subelement)}`;
}
}).join('&');
}
if (query[element] && query[element].toISOString) {
return `${element}=${query[element].toISOString()}`;
}
else if (typeof query[element] !== 'string') {
return `${element}=${encodeURIComponent(JSON.stringify(query[element]))}`;
}
else {
return `${element}=${encodeURIComponent(query[element])}`;
}
}).join('&');
}
const parts = uri.split('://')[1].split('/');
parts.splice(0, 1);
let requestOptions;
if (uri.indexOf('https://') === 0) {
const hostParts = uri.split('://')[1].split('/')[0].split(':');
const agent = new https.Agent({
host: hostParts[0],
port: hostParts[1] || 443,
path: parts.join('/').split('?')[0] || '',
rejectUnauthorized: false,
});
requestOptions = {
method: verb,
uri,
timeout: 1000 * 60 * 5,
rejectUnauthorized: false,
strictSSL: false,
secureProtocol: 'TLSv1_method',
requestCert: false,
agent,
};
}
else {
requestOptions = {
method: verb,
uri,
timeout: 1000 * 60 * 5,
};
}
if (process.env.PROXY) {
Object.assign(requestOptions, { proxy: process.env.PROXY });
}
log_1.logger.log(this, body, uri);
if (Object.keys(body).length > 0) {
requestOptions.body = body;
requestOptions.json = true;
}
if (securityContext) {
requestOptions.headers = {
security_context: JSON.stringify(securityContext),
};
}
if (headers && Object.keys(headers).length > 0) {
if (!requestOptions.headers) {
requestOptions.headers = {};
}
Object.assign(requestOptions.headers, headers);
}
if (cookies && Object.keys(cookies).length > 0) {
requestOptions.cookies = cookies;
requestOptions.jar = true;
}
if (files && files.length > 0) {
const file = files[0];
const formData = {
custom_file: {
value: fs.createReadStream(path.resolve(file.path)),
options: {
filename: file.originalname,
contentType: file.mimetype,
size: file.size,
},
},
};
requestOptions.formData = formData;
}
else if (files && files.readable) {
const formData = {
custom_file: {
value: files,
options: {
filename: path.basename(files.path),
},
},
};
requestOptions.formData = formData;
}
requestOptions.encoding = null;
log_1.logger.log(this, 'request options are: ', requestOptions);
try {
const returnedPipe = this.promiseToTry(requestOptions);
return returnedPipe;
}
catch (error) {
throw (error);
}
}
promiseToTry(requestOptions) {
requestOptions.retryCount = requestOptions.retryCount || 0;
try {
return this.try(requestOptions);
}
catch (error) {
throw (error);
}
}
try(requestOptions) {
const requestToPipe = request(requestOptions);
requestToPipe.on('error', (error) => {
log_1.logger.error(error);
});
return requestToPipe;
}
};
Request = tslib_1.__decorate([
log_1.LogClass(log_1.logger)
], Request);
exports.Request = Request;
//# sourceMappingURL=Request.js.map