@methodus/server
Version:
dynamic rpc components
187 lines • 7.38 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
require("reflect-metadata");
const log_1 = require("../../log");
const fs = require("fs");
const path = require("path");
const request = require("request-promise-native");
let Request = class Request {
constructor() {
}
sendRequest(verb, uri, params, paramsMap, securityContext) {
let body = {};
let headers = {};
let cookies = {};
let query = {};
let 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 'att_security_context':
securityContext = { uid: item.value.uid, user_id: item.value.user_id };
break;
case 'headers':
headers[item.name] = item.value;
break;
case 'cookies':
cookies[item.name] = item.value;
break;
case 'files':
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('&');
}
let requestOptions = {
// will be ignored
method: verb,
uri: uri,
timeout: 1000 * 60 * 5
};
let paramPos = 0;
log_1.logger.log(this, body, uri);
if (Object.keys(body).length > 0) {
requestOptions.body = body;
requestOptions.json = true;
}
if (securityContext) {
requestOptions.headers = {
'hub-ess-cookie': 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; //enable cookies
}
if (files && files.length > 0) {
let file = files[0];
let 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) {
let formData = {
custom_file: {
value: files,
options: {
filename: path.basename(files.path)
}
}
};
requestOptions.formData = formData;
}
//very important it allows the download of binary files
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 {
//let result = await
return this.try(requestOptions);
//return result;
}
catch (error) {
throw (error);
//return reject(error);
}
}
try(requestOptions) {
const requestToPipe = request(requestOptions);
requestToPipe.on('error', (error) => {
console.error(error);
});
return requestToPipe;
}
};
__decorate([
log_1.Log(),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object, Object, Object, Object]),
__metadata("design:returntype", void 0)
], Request.prototype, "sendRequest", null);
Request = __decorate([
log_1.LogClass(log_1.logger),
__metadata("design:paramtypes", [])
], Request);
exports.Request = Request;
//# sourceMappingURL=Request.js.map