UNPKG

@methodus/server

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