UNPKG

@methodus/server

Version:
187 lines 7.38 kB
"use strict"; 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