UNPKG

@allgemein/http

Version:

Library for http request backend abstraction.

139 lines 5.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HttpGotAdapter = void 0; const url_1 = require("url"); const JsonUtils_1 = require("@allgemein/base/utils/JsonUtils"); const RequestError_1 = require("../../../libs/errors/RequestError"); const TimeoutError_1 = require("../../../libs/errors/TimeoutError"); const lodash_1 = require("lodash"); class HttpGotAdapter { constructor() { this.name = 'got'; } static wrap(url, method, options) { const GOT = this.GOT; if ((0, lodash_1.has)(options, 'passBody')) { options.resolveBodyOnly = (0, lodash_1.get)(options, 'passBody', false); } if ((0, lodash_1.has)(options, 'proxy') && options.proxy && HttpGotAdapter.ProxyAgent) { const proxyHeaders = options.proxyHeaders || {}; const proxyUrl = new url_1.URL(options.proxy); const hostName = proxyUrl.hostname; const port = parseInt(proxyUrl.port, 0); const tunnelOptions = { protocol: proxyUrl.protocol, host: hostName, port: port, headers: proxyHeaders }; if ((0, lodash_1.has)(options, 'rejectUnauthorized')) { tunnelOptions.rejectUnauthorized = options.rejectUnauthorized; } const agent = new HttpGotAdapter.ProxyAgent(tunnelOptions); options.agent = {}; options.agent[proxyUrl.protocol.replace(':', '')] = agent; } else if ((0, lodash_1.has)(options, 'proxy') && options.proxy && !HttpGotAdapter.ProxyAgent) { throw new Error('proxy agent not imported'); } if ((0, lodash_1.has)(options, 'stream') && (0, lodash_1.get)(options, 'stream', false)) { const stream = GOT.stream(url, options); stream._ended = false; stream.once('response', (res) => { res.once('end', () => { stream._ended = true; stream.emit('finished'); }); }); stream.asPromise = () => { return new Promise((resolve, reject) => { if (!stream._ended) { stream.once('finished', () => { resolve(null); }); stream.once('error', (err) => { reject(err); }); } else { resolve(null); } }); }; return stream; } if ((0, lodash_1.has)(options, 'body') && (0, lodash_1.isObjectLike)(options['body'])) { options['body'] = JsonUtils_1.JsonUtils.stringify(options['body']); } let p = null; if (options) { p = GOT[method](url, options); } else { p = GOT[method](url); } if ((0, lodash_1.get)(options, 'passBody', false)) { p = p.then((res) => { if (options.responseType === 'json') { return res; } return res.body; }); } return p.catch((err) => { if (err.name === 'RequestError') { const e = new RequestError_1.RequestError(err.message); (0, lodash_1.assign)(e, err); throw e; } else if (err.name === 'TimeoutError') { const e = new TimeoutError_1.TimeoutError(err.message); (0, lodash_1.assign)(e, err); throw e; } throw err; }); } isAvailable(logger) { try { if (!HttpGotAdapter.GOT) { HttpGotAdapter.GOT = require('got'); try { HttpGotAdapter.ProxyAgent = require('proxy-agent'); } catch (e) { if (logger) { logger.warn('http got adapter: proxing not possible package proxy-agent missing.'); } } } return true; } catch (e) { if (logger) { logger.warn('http got adapter: required got package is not installed. Adapter will not be used.'); } return false; } } get(url, options) { return HttpGotAdapter.wrap(url, 'get', options); } post(url, options) { return HttpGotAdapter.wrap(url, 'post', options); } put(url, options) { return HttpGotAdapter.wrap(url, 'put', options); } delete(url, options) { return HttpGotAdapter.wrap(url, 'delete', options); } head(url, options) { return HttpGotAdapter.wrap(url, 'head', options); } patch(url, options) { return HttpGotAdapter.wrap(url, 'patch', options); } } exports.HttpGotAdapter = HttpGotAdapter; //# sourceMappingURL=HttpGotAdapter.js.map