70 lines
2.8 KiB
JavaScript
70 lines
2.8 KiB
JavaScript
var _ = require('lodash'),
|
|
Requester = require('./requester').Requester,
|
|
RequestCookieJar = require('postman-request').jar,
|
|
|
|
STRING = 'string',
|
|
FUNCTION = 'function',
|
|
|
|
RequesterPool; // fn
|
|
|
|
RequesterPool = function (options, callback) {
|
|
var self = this,
|
|
extendedRootCA,
|
|
fileResolver = options && options.fileResolver;
|
|
|
|
_.assign((self.options = {}), {
|
|
timeout: _.min([
|
|
_.get(options, 'timeout.request'),
|
|
_.get(options, 'timeout.global')
|
|
]), // validated later inside requester
|
|
timings: _.get(options, 'requester.timings', true),
|
|
verbose: _.get(options, 'requester.verbose', false),
|
|
keepAlive: _.get(options, 'requester.keepAlive', true),
|
|
agents: _.get(options, 'requester.agents'), // http(s).Agent instances
|
|
cookieJar: _.get(options, 'requester.cookieJar'), // default set later in this constructor
|
|
strictSSL: _.get(options, 'requester.strictSSL'),
|
|
maxResponseSize: _.get(options, 'requester.maxResponseSize'),
|
|
// @todo drop support in v8
|
|
useWhatWGUrlParser: _.get(options, 'requester.useWhatWGUrlParser', false),
|
|
followRedirects: _.get(options, 'requester.followRedirects', true),
|
|
followOriginalHttpMethod: _.get(options, 'requester.followOriginalHttpMethod'),
|
|
maxRedirects: _.get(options, 'requester.maxRedirects'),
|
|
implicitCacheControl: _.get(options, 'requester.implicitCacheControl', true),
|
|
implicitTraceHeader: _.get(options, 'requester.implicitTraceHeader', true),
|
|
systemHeaders: _.get(options, 'requester.systemHeaders', {}),
|
|
removeRefererHeaderOnRedirect: _.get(options, 'requester.removeRefererHeaderOnRedirect'),
|
|
ignoreProxyEnvironmentVariables: _.get(options, 'ignoreProxyEnvironmentVariables'),
|
|
network: _.get(options, 'network', {})
|
|
});
|
|
|
|
// create a cookie jar if one is not provided
|
|
if (!self.options.cookieJar) {
|
|
self.options.cookieJar = RequestCookieJar();
|
|
}
|
|
|
|
if (fileResolver && typeof fileResolver.readFile === FUNCTION &&
|
|
typeof (extendedRootCA = _.get(options, 'requester.extendedRootCA')) === STRING) {
|
|
// eslint-disable-next-line security/detect-non-literal-fs-filename
|
|
fileResolver.readFile(extendedRootCA, function (err, caCerts) {
|
|
if (err) {
|
|
// @todo trigger console error
|
|
}
|
|
else {
|
|
// set extendedRootCA option
|
|
self.options.extendedRootCA = caCerts;
|
|
}
|
|
|
|
return callback();
|
|
});
|
|
}
|
|
else {
|
|
return callback();
|
|
}
|
|
};
|
|
|
|
RequesterPool.prototype.create = function (trace, callback) {
|
|
return Requester.create(trace, this.options, callback);
|
|
};
|
|
|
|
module.exports.RequesterPool = RequesterPool;
|