Comparing version 6.1.0 to 7.0.0-1
@@ -5,2 +5,6 @@ # Change Log | ||
## v7.0.0 | ||
* [major] Converted project to typescript | ||
## v6.1.0 | ||
@@ -7,0 +11,0 @@ |
@@ -1,3 +0,1 @@ | ||
/* eslint func-names: 0, no-console: 0 */ | ||
var AnxApi = require('anx-api'); | ||
@@ -4,0 +2,0 @@ |
592
lib/api.js
@@ -1,358 +0,254 @@ | ||
'use strict'; | ||
var _defaults2 = require('lodash/defaults'); | ||
var _defaults3 = _interopRequireDefault(_defaults2); | ||
var _trimStart2 = require('lodash/trimStart'); | ||
var _trimStart3 = _interopRequireDefault(_trimStart2); | ||
var _get3 = require('lodash/get'); | ||
var _get4 = _interopRequireDefault(_get3); | ||
var _pick2 = require('lodash/pick'); | ||
var _pick3 = _interopRequireDefault(_pick2); | ||
var _forEach2 = require('lodash/forEach'); | ||
var _forEach3 = _interopRequireDefault(_forEach2); | ||
var _isEmpty2 = require('lodash/isEmpty'); | ||
var _isEmpty3 = _interopRequireDefault(_isEmpty2); | ||
var _assign2 = require('lodash/assign'); | ||
var _assign3 = _interopRequireDefault(_assign2); | ||
var _isString2 = require('lodash/isString'); | ||
var _isString3 = _interopRequireDefault(_isString2); | ||
var _isUndefined2 = require('lodash/isUndefined'); | ||
var _isUndefined3 = _interopRequireDefault(_isUndefined2); | ||
var _isNull2 = require('lodash/isNull'); | ||
var _isNull3 = _interopRequireDefault(_isNull2); | ||
var _qs = require('qs'); | ||
var _qs2 = _interopRequireDefault(_qs); | ||
var _urlJoin = require('url-join'); | ||
var _urlJoin2 = _interopRequireDefault(_urlJoin); | ||
var _errors = require('./errors'); | ||
var _errors2 = _interopRequireDefault(_errors); | ||
var _package = require('../package.json'); | ||
var _package2 = _interopRequireDefault(_package); | ||
var _axiosAdapter = require('./axiosAdapter'); | ||
var _axiosAdapter2 = _interopRequireDefault(_axiosAdapter); | ||
var _rateLimitAdapter = require('./rateLimitAdapter'); | ||
var _rateLimitAdapter2 = _interopRequireDefault(_rateLimitAdapter); | ||
var _concurrencyAdapter = require('./concurrencyAdapter'); | ||
var _concurrencyAdapter2 = _interopRequireDefault(_concurrencyAdapter); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var DEFAULT_CHUNK_SIZE = 100; | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const _ = require("lodash"); | ||
const query = require("qs"); | ||
const urlJoin = require("url-join"); | ||
const axiosAdapter_1 = require("./axiosAdapter"); | ||
const concurrencyAdapter_1 = require("./concurrencyAdapter"); | ||
const errors = require("./errors"); | ||
const rateLimitAdapter_1 = require("./rateLimitAdapter"); | ||
const packageJson = require('../package.json'); | ||
const DEFAULT_CHUNK_SIZE = 100; | ||
var Method; | ||
(function (Method) { | ||
Method["GET"] = "GET"; | ||
Method["POST"] = "POST"; | ||
Method["PUT"] = "PUT"; | ||
Method["DELETE"] = "DELETE"; | ||
})(Method = exports.Method || (exports.Method = {})); | ||
function _hasValue(value) { | ||
return !((0, _isNull3.default)(value) || (0, _isUndefined3.default)(value)); | ||
return !(_.isNull(value) || _.isUndefined(value)); | ||
} | ||
function _isInteger(value) { | ||
return parseInt(value, 10) === +value; | ||
return parseInt(value, 10) === +value; | ||
} | ||
function _normalizeOpts(opts, extendOpts) { | ||
var newOpts = (0, _isString3.default)(opts) ? { | ||
uri: opts | ||
} : opts || {}; | ||
return (0, _assign3.default)({}, newOpts, extendOpts); | ||
const newOpts = _.isString(opts) ? { | ||
uri: opts, | ||
} : opts || {}; | ||
return _.assign({ method: null }, newOpts, extendOpts); | ||
} | ||
function _statusOk(body) { | ||
return !!body && !!body.response && body.response.status === 'OK'; | ||
function statusOk(body) { | ||
return !!body && !!body.response && body.response.status === 'OK'; | ||
} | ||
exports.statusOk = statusOk; | ||
function __request(opts) { | ||
var _self = this; | ||
return new Promise(function requestPromise(resolve, reject) { | ||
var params; | ||
var startTime = new Date().getTime(); | ||
if ((0, _isEmpty3.default)(_self._config.target)) { | ||
return reject(new _errors2.default.TargetError(opts, 'Target not set')); | ||
} | ||
// Validate Opts | ||
(0, _forEach3.default)((0, _pick3.default)(opts, ['startElement', 'numElements']), function validate(value, opt) { | ||
if (_hasValue(value) && !_isInteger(value)) { | ||
return reject(new _errors2.default.ArgumentError(opts, 'Invalid ' + opt)); | ||
} | ||
return null; | ||
}); | ||
// Configure Options | ||
var reqOpts = (0, _assign3.default)({}, { | ||
rejectUnauthorized: false, | ||
headers: (0, _assign3.default)({}, _self._config.headers) | ||
}); | ||
reqOpts.timeout = opts.timeout || _self._config.timeout; | ||
reqOpts.method = (opts.method || 'GET').toUpperCase(); | ||
reqOpts.params = (0, _assign3.default)({}, opts.params); | ||
reqOpts.body = opts.body; | ||
reqOpts.encodeParams = (0, _get4.default)(opts, 'encodeParams', false); | ||
if (_self._config.userAgent) { | ||
reqOpts.headers['User-Agent'] = _self._config.userAgent; | ||
} | ||
if (!opts.noAuth && !opts.auth && _self._config.token) { | ||
reqOpts.headers.Authorization = _self._config.token; | ||
} | ||
if (opts.mimeType) { | ||
reqOpts.headers.Accept = opts.mimeType; | ||
if (opts.method === 'POST' || opts.method === 'PUT') { | ||
reqOpts.headers['Content-Type'] = opts.mimeType; | ||
} | ||
} else { | ||
// Default Accept to application/json | ||
reqOpts.headers.Accept = (0, _get4.default)(opts, 'headers.Accept', 'application/json'); | ||
// Default Content-Type to application/json for POSTs and PUTs | ||
if (reqOpts.method === 'POST' || reqOpts.method === 'PUT') { | ||
reqOpts.headers['Content-Type'] = (0, _get4.default)(opts, 'headers.Content-Type', 'application/json'); | ||
} | ||
} | ||
reqOpts.headers = (0, _assign3.default)({}, reqOpts.headers, opts.headers); | ||
reqOpts.uri = (0, _urlJoin2.default)(_self._config.target, (0, _trimStart3.default)(opts.uri, '/')); | ||
// Configure Parameters | ||
if (_hasValue(opts.startElement)) { | ||
reqOpts.params.start_element = +opts.startElement; | ||
} | ||
if (_hasValue(opts.numElements)) { | ||
reqOpts.params.num_elements = +opts.numElements; | ||
reqOpts.params.start_element = +opts.startElement || reqOpts.params.start_element || 0; // startElement is required if numElements is set | ||
} | ||
params = _qs2.default.stringify(reqOpts.params, { encode: reqOpts.encodeParams }); | ||
if (params !== '') { | ||
reqOpts.uri += opts.uri.indexOf('?') === -1 ? '?' : '&'; | ||
reqOpts.uri += params; | ||
} | ||
if (_self._config.beforeRequest) { | ||
var beforeRequestOpts = _self._config.beforeRequest(reqOpts); | ||
if (beforeRequestOpts) { | ||
reqOpts = (0, _assign3.default)({}, reqOpts, beforeRequestOpts); | ||
} | ||
} | ||
return _self._config.request(reqOpts).then(function success(res) { | ||
var totalTime = new Date().getTime() - startTime; | ||
var newRes = (0, _assign3.default)({ | ||
requestTime: res.requestTime || totalTime, | ||
totalTime: new Date().getTime() - startTime | ||
}, res); | ||
if (_self._config.afterRequest) { | ||
var afterRequestRes = _self._config.afterRequest(newRes); | ||
if (afterRequestRes) { | ||
newRes = (0, _assign3.default)({}, newRes, afterRequestRes); | ||
} | ||
} | ||
if (newRes.statusCode >= 400) { | ||
return reject(_errors2.default.buildError(reqOpts, newRes)); | ||
} | ||
// Temporary fix | ||
var errorId; | ||
var errorCode; | ||
if (newRes.body && newRes.body.response && newRes.body.response) { | ||
errorId = newRes.body.response.error_id; | ||
errorCode = newRes.body.response.error_code; | ||
} | ||
if (errorId === 'SYSTEM' && errorCode === 'SERVICE_UNAVAILABLE') { | ||
return reject(_errors2.default.buildError(reqOpts, newRes)); | ||
} | ||
if (errorId === 'SYSTEM' && errorCode === 'UNKNOWN') { | ||
return reject(_errors2.default.buildError(reqOpts, newRes)); | ||
} | ||
newRes.req = reqOpts; | ||
return resolve(newRes); | ||
}).catch(function failure(err) { | ||
var newErr; | ||
if (_self._config.afterRequest) { | ||
newErr = _self._config.afterRequest(err); | ||
} | ||
return reject(_errors2.default.buildError(reqOpts, newErr || err)); | ||
}); | ||
}); | ||
const _self = this; | ||
return new Promise((resolve, reject) => { | ||
let params; | ||
const startTime = new Date().getTime(); | ||
if (_.isEmpty(_self._config.target)) { | ||
return reject(new errors.TargetError(opts, 'Target not set')); | ||
} | ||
// Validate Opts | ||
_.forEach(_.pick(opts, ['startElement', 'numElements']), (value, opt) => { | ||
if (_hasValue(value) && !_isInteger(value)) { | ||
return reject(new errors.ArgumentError(opts, 'Invalid ' + opt)); | ||
} | ||
return null; | ||
}); | ||
// Configure Options | ||
let reqOpts = _.assign({}, { | ||
rejectUnauthorized: false, | ||
headers: _.assign({}, _self._config.headers), | ||
}); | ||
reqOpts.timeout = opts.timeout || _self._config.timeout; | ||
reqOpts.method = (opts.method || Method.GET).toUpperCase(); | ||
reqOpts.params = _.assign({}, opts.params); | ||
reqOpts.body = opts.body; | ||
reqOpts.encodeParams = _.get(opts, 'encodeParams', false); | ||
if (_self._config.userAgent) { | ||
reqOpts.headers['User-Agent'] = _self._config.userAgent; | ||
} | ||
if (!opts.noAuth && !opts.auth && _self._config.token) { | ||
reqOpts.headers.Authorization = _self._config.token; | ||
} | ||
if (opts.mimeType) { | ||
reqOpts.headers.Accept = opts.mimeType; | ||
if (opts.method === Method.POST || opts.method === Method.PUT) { | ||
reqOpts.headers['Content-Type'] = opts.mimeType; | ||
} | ||
} | ||
else { | ||
// Default Accept to application/json | ||
reqOpts.headers.Accept = _.get(opts, 'headers.Accept', 'application/json'); | ||
// Default Content-Type to application/json for POSTs and PUTs | ||
if (reqOpts.method === Method.POST || reqOpts.method === Method.PUT) { | ||
reqOpts.headers['Content-Type'] = _.get(opts, 'headers.Content-Type', 'application/json'); | ||
} | ||
} | ||
reqOpts.headers = _.assign({}, reqOpts.headers, opts.headers); | ||
reqOpts.uri = urlJoin(_self._config.target, _.trimStart(opts.uri, '/')); | ||
// Configure Parameters | ||
if (_hasValue(opts.startElement)) { | ||
reqOpts.params.start_element = +opts.startElement; | ||
} | ||
if (_hasValue(opts.numElements)) { | ||
reqOpts.params.num_elements = +opts.numElements; | ||
reqOpts.params.start_element = +opts.startElement || reqOpts.params.start_element || 0; // startElement is required if numElements is set | ||
} | ||
params = query.stringify(reqOpts.params, { encode: reqOpts.encodeParams }); | ||
if (params !== '') { | ||
reqOpts.uri += (opts.uri.indexOf('?') === -1) ? '?' : '&'; | ||
reqOpts.uri += params; | ||
} | ||
if (_self._config.beforeRequest) { | ||
const beforeRequestOpts = _self._config.beforeRequest(reqOpts); | ||
if (beforeRequestOpts) { | ||
reqOpts = _.assign({}, reqOpts, beforeRequestOpts); | ||
} | ||
} | ||
return _self._config.request(reqOpts).then((res) => { | ||
const totalTime = new Date().getTime() - startTime; | ||
let newRes = _.assign({ | ||
requestTime: res.requestTime || totalTime, | ||
totalTime: new Date().getTime() - startTime, | ||
}, res); | ||
if (_self._config.afterRequest) { | ||
const afterRequestRes = _self._config.afterRequest(newRes); | ||
if (afterRequestRes) { | ||
newRes = _.assign({}, newRes, afterRequestRes); | ||
} | ||
} | ||
if (newRes.statusCode >= 400) { | ||
return reject(errors.buildError(reqOpts, newRes)); | ||
} | ||
// Temporary fix | ||
let errorId; | ||
let errorCode; | ||
if (newRes.body && newRes.body.response && newRes.body.response) { | ||
errorId = newRes.body.response.error_id; | ||
errorCode = newRes.body.response.error_code; | ||
} | ||
if (errorId === 'SYSTEM' && errorCode === 'SERVICE_UNAVAILABLE') { | ||
return reject(errors.buildError(reqOpts, newRes)); | ||
} | ||
if (errorId === 'SYSTEM' && errorCode === 'UNKNOWN') { | ||
return reject(errors.buildError(reqOpts, newRes)); | ||
} | ||
newRes.req = reqOpts; | ||
return resolve(newRes); | ||
}).catch((err) => { | ||
let newErr; | ||
if (_self._config.afterRequest) { | ||
newErr = _self._config.afterRequest(err); | ||
} | ||
return reject(errors.buildError(reqOpts, newErr || err)); | ||
}); | ||
}); | ||
} | ||
function AnxApi(config) { | ||
this._config = (0, _defaults3.default)({}, config, { | ||
request: (0, _axiosAdapter2.default)({ | ||
forceHttpAdaptor: config.environment === 'node' | ||
}), | ||
userAgent: 'anx-api/' + _package2.default.version, | ||
timeout: 60 * 1000, | ||
headers: {}, | ||
target: null, | ||
token: null, | ||
rateLimiting: true, | ||
chunkSize: DEFAULT_CHUNK_SIZE | ||
}); | ||
this.request = __request; | ||
// Install optional rate limiting adapter | ||
this.request = this._config.rateLimiting ? (0, _rateLimitAdapter2.default)((0, _assign3.default)({}, config, { | ||
request: __request.bind(this) | ||
})) : __request.bind(this); | ||
// Install optional concurrency adapter | ||
this._config.request = this._config.concurrencyLimit ? (0, _concurrencyAdapter2.default)({ | ||
limit: this._config.concurrencyLimit, | ||
request: this._config.request | ||
}) : this._config.request; | ||
class AnxApi { | ||
constructor(config) { | ||
this._config = _.defaults({}, config, { | ||
request: axiosAdapter_1.axiosAdapter({ | ||
forceHttpAdaptor: config.environment === 'node', | ||
}), | ||
userAgent: 'anx-api/' + packageJson.version, | ||
timeout: 60 * 1000, | ||
headers: {}, | ||
target: null, | ||
token: null, | ||
rateLimiting: true, | ||
chunkSize: DEFAULT_CHUNK_SIZE, | ||
}); | ||
this.request = __request; | ||
// Install optional rate limiting adapter | ||
this.request = this._config.rateLimiting ? rateLimitAdapter_1.rateLimitAdapter(_.assign({}, config, { | ||
request: __request.bind(this), | ||
})) : __request.bind(this); | ||
// Install optional concurrency adapter | ||
this._config.request = this._config.concurrencyLimit ? concurrencyAdapter_1.concurrencyAdapter({ | ||
limit: this._config.concurrencyLimit, | ||
request: this._config.request, | ||
}) : this._config.request; | ||
} | ||
_request(method, opts, extendOpts, payload) { | ||
const newOpts = _normalizeOpts(opts, extendOpts); | ||
newOpts.method = method || newOpts.method || Method.GET; | ||
if (payload) { | ||
newOpts.body = payload; | ||
} | ||
return this.request(newOpts); | ||
} | ||
request(opts, extendOpts) { | ||
return this._request(null, opts, extendOpts); | ||
} | ||
get(opts, extendOpts) { | ||
return this._request(Method.GET, opts, extendOpts); | ||
} | ||
getAll(opts, extendOpts) { | ||
return new Promise((resolve, reject) => { | ||
const newOpts = _normalizeOpts(opts, extendOpts); | ||
let numElements = opts.numElements || 100; | ||
let firstOutputTerm; | ||
let elements = []; | ||
let totalTime = 0; | ||
const getAll = (startElement) => { | ||
newOpts.startElement = startElement; | ||
newOpts.numElements = numElements; | ||
return this.get(newOpts).then((res) => { | ||
if (!statusOk(res.body)) { | ||
return reject(res); | ||
} | ||
const response = res.body.response; | ||
const count = response.count || 0; | ||
const outputTerm = response.dbg_info.output_term; | ||
if (!firstOutputTerm) { | ||
firstOutputTerm = outputTerm; | ||
} | ||
numElements = response.num_elements; | ||
totalTime += response.dbg_info.time || 0; | ||
elements = elements.concat(response[outputTerm]); | ||
if (count <= startElement + numElements) { | ||
const newResponse = _.assign({}, { | ||
count: elements.length, | ||
start_element: 0, | ||
num_elements: elements.length, | ||
dbg_info: _.assign({}, response.dbg_info, { | ||
output_term: firstOutputTerm, | ||
time: totalTime, | ||
}), | ||
}); | ||
newResponse[firstOutputTerm] = elements; | ||
return resolve({ body: { response: newResponse } }); | ||
} | ||
return getAll(startElement + numElements); | ||
}).catch(reject); | ||
}; | ||
return getAll(0); | ||
}); | ||
} | ||
post(opts, payload, extendOpts) { | ||
return this._request(Method.POST, opts, extendOpts, payload); | ||
} | ||
put(opts, payload, extendOpts) { | ||
return this._request(Method.PUT, opts, extendOpts, payload); | ||
} | ||
delete(opts, extendOpts) { | ||
return this._request(Method.DELETE, opts, extendOpts); | ||
} | ||
login(username, password) { | ||
const reqOpts = { | ||
auth: { | ||
username, | ||
password, | ||
}, | ||
}; | ||
return this.post('/auth', reqOpts).then((res) => { | ||
if (res.statusCode === 200 && statusOk(res.body)) { | ||
this._config.token = res.body.response.token; | ||
return this._config.token; | ||
} | ||
throw errors.buildError(reqOpts, res); | ||
}); | ||
} | ||
switchUser(userId) { | ||
return this.post('/auth', { | ||
auth: { | ||
switch_to_user: userId, | ||
}, | ||
}); | ||
} | ||
} | ||
// Bind error types on the AnxApi namespace | ||
(0, _assign3.default)(AnxApi, _errors2.default); | ||
AnxApi.prototype._request = function _request(method, opts, extendOpts, payload) { | ||
var newOpts = _normalizeOpts(opts, extendOpts); | ||
newOpts.method = method || newOpts.method || 'GET'; | ||
if (payload) { | ||
newOpts.body = payload; | ||
} | ||
return this.request(newOpts); | ||
}; | ||
AnxApi.prototype.request = function _request(opts, extendOpts) { | ||
return this._request(null, opts, extendOpts); | ||
}; | ||
AnxApi.prototype.get = function _get(opts, extendOpts) { | ||
return this._request('GET', opts, extendOpts); | ||
}; | ||
AnxApi.prototype.getAll = function _getAll(opts, extendOpts) { | ||
var _self = this; | ||
return new Promise(function getAllPromise(resolve, reject) { | ||
var newOpts = _normalizeOpts(opts, extendOpts); | ||
var numElements = opts.numElements || 100; | ||
var firstOutputTerm; | ||
var elements = []; | ||
var totalTime = 0; | ||
function getAll(startElement) { | ||
newOpts.startElement = startElement; | ||
newOpts.numElements = numElements; | ||
return _self.get(newOpts).then(function success(res) { | ||
if (!AnxApi.statusOk(res.body)) { | ||
return reject(res); | ||
} | ||
var response = res.body.response; | ||
var count = response.count || 0; | ||
var outputTerm = response.dbg_info.output_term; | ||
if (!firstOutputTerm) { | ||
firstOutputTerm = outputTerm; | ||
} | ||
numElements = response.num_elements; | ||
totalTime += response.dbg_info.time || 0; | ||
elements = elements.concat(response[outputTerm]); | ||
if (count <= startElement + numElements) { | ||
var newResponse = (0, _assign3.default)({}, { | ||
count: elements.length, | ||
start_element: 0, | ||
num_elements: elements.length, | ||
dbg_info: (0, _assign3.default)({}, response.dbg_info, { | ||
output_term: firstOutputTerm, | ||
time: totalTime | ||
}) | ||
}); | ||
newResponse[firstOutputTerm] = elements; | ||
return resolve({ body: { response: newResponse } }); | ||
} | ||
return getAll(startElement + numElements); | ||
}).catch(reject); | ||
} | ||
return getAll(0); | ||
}); | ||
}; | ||
AnxApi.prototype.post = function _post(opts, payload, extendOpts) { | ||
return this._request('POST', opts, extendOpts, payload); | ||
}; | ||
AnxApi.prototype.put = function _put(opts, payload, extendOpts) { | ||
return this._request('PUT', opts, extendOpts, payload); | ||
}; | ||
AnxApi.prototype.delete = function _delete(opts, extendOpts) { | ||
return this._request('DELETE', opts, extendOpts); | ||
}; | ||
AnxApi.prototype.login = function _login(username, password) { | ||
var _self = this; | ||
var reqOpts = { | ||
auth: { | ||
username: username, | ||
password: password | ||
} | ||
}; | ||
return _self.post('/auth', reqOpts).then(function success(res) { | ||
if (res.statusCode === 200 && AnxApi.statusOk(res.body)) { | ||
_self._config.token = res.body.response.token; | ||
return _self._config.token; | ||
} | ||
throw AnxApi.buildError(reqOpts, res); | ||
}); | ||
}; | ||
AnxApi.prototype.switchUser = function _switchUser(userId) { | ||
var _self = this; | ||
return _self.post('/auth', { | ||
auth: { | ||
switch_to_user: userId | ||
} | ||
}); | ||
}; | ||
AnxApi.statusOk = _statusOk; | ||
module.exports = AnxApi; | ||
exports.AnxApi = AnxApi; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDRCQUE0QjtBQUM1Qiw0QkFBNEI7QUFDNUIsb0NBQW9DO0FBQ3BDLGlEQUE4QztBQUM5Qyw2REFBMEQ7QUFDMUQsbUNBQW1DO0FBQ25DLHlEQUFzRDtBQUV0RCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUUvQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztBQWdDL0IsSUFBWSxNQUtYO0FBTEQsV0FBWSxNQUFNO0lBQ2pCLHFCQUFXLENBQUE7SUFDWCx1QkFBYSxDQUFBO0lBQ2IscUJBQVcsQ0FBQTtJQUNYLDJCQUFpQixDQUFBO0FBQ2xCLENBQUMsRUFMVyxNQUFNLEdBQU4sY0FBTSxLQUFOLGNBQU0sUUFLakI7QUFNRCxTQUFTLFNBQVMsQ0FBQyxLQUFVO0lBQzVCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFVO0lBQzdCLE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUN2QyxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsSUFBOEIsRUFBRSxVQUEyQjtJQUNsRixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEVBQUUsSUFBSTtLQUNULENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7SUFDZixPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRCxTQUFnQixRQUFRLENBQUMsSUFBSTtJQUM1QixPQUFPLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDO0FBQ25FLENBQUM7QUFGRCw0QkFFQztBQUVELFNBQVMsU0FBUyxDQUFDLElBQXFCO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQztJQUNuQixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3RDLElBQUksTUFBTSxDQUFDO1FBQ1gsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV2QyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNwQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUVELGdCQUFnQjtRQUNoQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDdkUsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzNDLE9BQU8sTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEU7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDO1FBRUgsb0JBQW9CO1FBQ3BCLElBQUksT0FBTyxHQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQy9CLGtCQUFrQixFQUFFLEtBQUs7WUFDekIsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1NBQzVDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUN4RCxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDM0QsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTFELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDNUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztTQUN4RDtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtZQUN0RCxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztTQUNwRDtRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3ZDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDOUQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQ2hEO1NBQ0Q7YUFBTTtZQUNOLHFDQUFxQztZQUNyQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBRTNFLDhEQUE4RDtZQUM5RCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ3BFLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQzthQUMxRjtTQUNEO1FBRUQsT0FBTyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU5RCxPQUFPLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV4RSx1QkFBdUI7UUFDdkIsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ2pDLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUNsRDtRQUNELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNoQyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDaEQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxDQUFDLGlEQUFpRDtTQUN6STtRQUVELE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLFlBQVksRUFBQyxDQUFDLENBQUM7UUFFekUsSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFO1lBQ2xCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUMxRCxPQUFPLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQztTQUN0QjtRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDaEMsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvRCxJQUFJLGlCQUFpQixFQUFFO2dCQUN0QixPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUM7YUFDbkQ7U0FDRDtRQUVELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUM7WUFFbkQsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDckIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXLElBQUksU0FBUztnQkFDekMsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsU0FBUzthQUMzQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRVIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtnQkFDL0IsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzNELElBQUksZUFBZSxFQUFFO29CQUNwQixNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2lCQUMvQzthQUNEO1lBRUQsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLEdBQUcsRUFBRTtnQkFDN0IsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzthQUNsRDtZQUVELGdCQUFnQjtZQUNoQixJQUFJLE9BQU8sQ0FBQztZQUNaLElBQUksU0FBUyxDQUFDO1lBQ2QsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNoRSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUN4QyxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO2FBQzVDO1lBQ0QsSUFBSSxPQUFPLEtBQUssUUFBUSxJQUFJLFNBQVMsS0FBSyxxQkFBcUIsRUFBRTtnQkFDaEUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzthQUNsRDtZQUNELElBQUksT0FBTyxLQUFLLFFBQVEsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFO2dCQUNwRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQ2xEO1lBRUQsTUFBTSxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUM7WUFFckIsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDaEIsSUFBSSxNQUFNLENBQUM7WUFDWCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO2dCQUMvQixNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDekM7WUFDRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQWEsTUFBTTtJQUdsQixZQUFZLE1BQWU7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUU7WUFDckMsT0FBTyxFQUFFLDJCQUFZLENBQUM7Z0JBQ3JCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxXQUFXLEtBQUssTUFBTTthQUMvQyxDQUFDO1lBQ0YsU0FBUyxFQUFFLFVBQVUsR0FBRyxXQUFXLENBQUMsT0FBTztZQUMzQyxPQUFPLEVBQUUsRUFBRSxHQUFHLElBQUk7WUFDbEIsT0FBTyxFQUFFLEVBQUU7WUFDWCxNQUFNLEVBQUUsSUFBSTtZQUNaLEtBQUssRUFBRSxJQUFJO1lBQ1gsWUFBWSxFQUFFLElBQUk7WUFDbEIsU0FBUyxFQUFFLGtCQUFrQjtTQUM3QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUV6Qix5Q0FBeUM7UUFDekMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsbUNBQWdCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFO1lBQ2hGLE9BQU8sRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUM3QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQix1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsdUNBQWtCLENBQUM7WUFDekUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCO1lBQ3BDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87U0FDN0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRU0sUUFBUSxDQUFDLE1BQWMsRUFBRSxJQUE4QixFQUFFLFVBQTJCLEVBQUUsT0FBUTtRQUNwRyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUN4RCxJQUFJLE9BQU8sRUFBRTtZQUNaLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxPQUFPLENBQUMsSUFBcUIsRUFBRSxVQUE0QjtRQUNqRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU0sR0FBRyxDQUFDLElBQThCLEVBQUUsVUFBNEI7UUFDdEUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSxNQUFNLENBQUMsSUFBcUIsRUFBRSxVQUFVO1FBRTlDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDdEMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNqRCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQztZQUMxQyxJQUFJLGVBQWUsQ0FBQztZQUNwQixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbEIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBRWxCLE1BQU0sTUFBTSxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQy9CLE9BQU8sQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO2dCQUNwQyxPQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztnQkFFbEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDeEIsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ25CO29CQUNELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUNuQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztvQkFDbEMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7b0JBQ2pELElBQUksQ0FBQyxlQUFlLEVBQUU7d0JBQ3JCLGVBQWUsR0FBRyxVQUFVLENBQUM7cUJBQzdCO29CQUVELFdBQVcsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO29CQUVwQyxTQUFTLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO29CQUN6QyxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztvQkFDakQsSUFBSSxLQUFLLElBQUksWUFBWSxHQUFHLFdBQVcsRUFBRTt3QkFDeEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUU7NEJBQ2hDLEtBQUssRUFBRSxRQUFRLENBQUMsTUFBTTs0QkFDdEIsYUFBYSxFQUFFLENBQUM7NEJBQ2hCLFlBQVksRUFBRSxRQUFRLENBQUMsTUFBTTs0QkFDN0IsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUU7Z0NBQ3pDLFdBQVcsRUFBRSxlQUFlO2dDQUM1QixJQUFJLEVBQUUsU0FBUzs2QkFDZixDQUFDO3lCQUNGLENBQUMsQ0FBQzt3QkFDSCxXQUFXLENBQUMsZUFBZSxDQUFDLEdBQUcsUUFBUSxDQUFDO3dCQUN4QyxPQUFPLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7cUJBQ3BEO29CQUNELE9BQU8sTUFBTSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsQ0FBQztnQkFDM0MsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xCLENBQUMsQ0FBQztZQUVGLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVNLElBQUksQ0FBQyxJQUFrQyxFQUFFLE9BQU8sRUFBRSxVQUE0QjtRQUNwRixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTSxHQUFHLENBQUMsSUFBa0MsRUFBRSxPQUFPLEVBQUUsVUFBNEI7UUFDbkYsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU0sTUFBTSxDQUFDLElBQThCLEVBQUUsVUFBNEI7UUFDekUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTSxLQUFLLENBQUMsUUFBZ0IsRUFBRSxRQUFnQjtRQUM5QyxNQUFNLE9BQU8sR0FBRztZQUNmLElBQUksRUFBRTtnQkFDTCxRQUFRO2dCQUNSLFFBQVE7YUFDUjtTQUNELENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQy9DLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxHQUFHLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUM3QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2FBQzFCO1lBQ0QsTUFBTSxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTSxVQUFVLENBQUMsTUFBYztRQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3pCLElBQUksRUFBRTtnQkFDTCxjQUFjLEVBQUUsTUFBTTthQUN0QjtTQUNELENBQUMsQ0FBQztJQUNKLENBQUM7Q0FFRDtBQXJJRCx3QkFxSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBxdWVyeSBmcm9tICdxcyc7XG5pbXBvcnQgKiBhcyB1cmxKb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCB7IGF4aW9zQWRhcHRlciB9IGZyb20gJy4vYXhpb3NBZGFwdGVyJztcbmltcG9ydCB7IGNvbmN1cnJlbmN5QWRhcHRlciB9IGZyb20gJy4vY29uY3VycmVuY3lBZGFwdGVyJztcbmltcG9ydCAqIGFzIGVycm9ycyBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyByYXRlTGltaXRBZGFwdGVyIH0gZnJvbSAnLi9yYXRlTGltaXRBZGFwdGVyJztcblxuY29uc3QgcGFja2FnZUpzb24gPSByZXF1aXJlKCcuLi9wYWNrYWdlLmpzb24nKTtcblxuY29uc3QgREVGQVVMVF9DSFVOS19TSVpFID0gMTAwO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb25maWcge1xuXHRjb25jdXJyZW5jeUxpbWl0PzogbnVtYmVyO1xuXHRlbnZpcm9ubWVudD86IHN0cmluZztcblx0cmF0ZUxpbWl0aW5nOiBib29sZWFuO1xuXHRyZXF1ZXN0PzogKG9wdHM6IGFueSkgPT4gYW55O1xuXHRiZWZvcmVSZXF1ZXN0PzogKG9wdHM6IGFueSkgPT4gYW55O1xuXHRhZnRlclJlcXVlc3Q/OiAob3B0czogYW55KSA9PiBhbnk7XG5cdHRhcmdldDogc3RyaW5nO1xuXHR0aW1lb3V0PzogbnVtYmVyO1xuXHR0b2tlbj86IHN0cmluZztcblx0dXNlckFnZW50Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHZW5lcmljT3B0aW9ucyB7XG5cdGF1dGg/OiBhbnk7XG5cdGVuY29kZVBhcmFtcz86IGJvb2xlYW47XG5cdGhlYWRlcnM/OiB7fTtcblx0bWltZVR5cGU/OiBzdHJpbmc7XG5cdG5vQXV0aD86IGFueTtcblx0bnVtRWxlbWVudHM/OiBudW1iZXI7XG5cdHBhcmFtcz86IHt9O1xuXHRzdGFydEVsZW1lbnQ/OiBudW1iZXI7XG5cdHRpbWVvdXQ/OiBudW1iZXI7XG5cdHVyaTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElPcHRpb25zV2l0aFBheWxvYWQgZXh0ZW5kcyBJR2VuZXJpY09wdGlvbnMge1xuXHRib2R5PzogYW55O1xufVxuXG5leHBvcnQgZW51bSBNZXRob2Qge1xuXHRHRVQgPVx0J0dFVCcsXG5cdFBPU1QgPSAnUE9TVCcsXG5cdFBVVCA9ICdQVVQnLFxuXHRERUxFVEUgPSAnREVMRVRFJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVxdWVzdE9wdGlvbnMgZXh0ZW5kcyBJT3B0aW9uc1dpdGhQYXlsb2FkIHtcblx0bWV0aG9kOiAoTWV0aG9kIHwgc3RyaW5nKTtcbn1cblxuZnVuY3Rpb24gX2hhc1ZhbHVlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcblx0cmV0dXJuICEoXy5pc051bGwodmFsdWUpIHx8IF8uaXNVbmRlZmluZWQodmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gX2lzSW50ZWdlcih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG5cdHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApID09PSArdmFsdWU7XG59XG5cbmZ1bmN0aW9uIF9ub3JtYWxpemVPcHRzKG9wdHM6IElHZW5lcmljT3B0aW9ucyB8IHN0cmluZywgZXh0ZW5kT3B0czogSUdlbmVyaWNPcHRpb25zKTogSVJlcXVlc3RPcHRpb25zIHtcblx0Y29uc3QgbmV3T3B0cyA9IF8uaXNTdHJpbmcob3B0cykgPyB7XG5cdFx0dXJpOiBvcHRzLFxuXHR9IDogb3B0cyB8fCB7fTtcblx0cmV0dXJuIF8uYXNzaWduKHsgbWV0aG9kOiBudWxsIH0sIG5ld09wdHMsIGV4dGVuZE9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdHVzT2soYm9keSkge1xuXHRyZXR1cm4gISFib2R5ICYmICEhYm9keS5yZXNwb25zZSAmJiBib2R5LnJlc3BvbnNlLnN0YXR1cyA9PT0gJ09LJztcbn1cblxuZnVuY3Rpb24gX19yZXF1ZXN0KG9wdHM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG5cdGNvbnN0IF9zZWxmID0gdGhpcztcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRsZXQgcGFyYW1zO1xuXHRcdGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG5cdFx0aWYgKF8uaXNFbXB0eShfc2VsZi5fY29uZmlnLnRhcmdldCkpIHtcblx0XHRcdHJldHVybiByZWplY3QobmV3IGVycm9ycy5UYXJnZXRFcnJvcihvcHRzLCAnVGFyZ2V0IG5vdCBzZXQnKSk7XG5cdFx0fVxuXG5cdFx0Ly8gVmFsaWRhdGUgT3B0c1xuXHRcdF8uZm9yRWFjaChfLnBpY2sob3B0cywgWydzdGFydEVsZW1lbnQnLCAnbnVtRWxlbWVudHMnXSksICh2YWx1ZSwgb3B0KSA9PiB7XG5cdFx0XHRpZiAoX2hhc1ZhbHVlKHZhbHVlKSAmJiAhX2lzSW50ZWdlcih2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHJlamVjdChuZXcgZXJyb3JzLkFyZ3VtZW50RXJyb3Iob3B0cywgJ0ludmFsaWQgJyArIG9wdCkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSk7XG5cblx0XHQvLyBDb25maWd1cmUgT3B0aW9uc1xuXHRcdGxldCByZXFPcHRzOiBhbnkgPSBfLmFzc2lnbih7fSwge1xuXHRcdFx0cmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcblx0XHRcdGhlYWRlcnM6IF8uYXNzaWduKHt9LCBfc2VsZi5fY29uZmlnLmhlYWRlcnMpLFxuXHRcdH0pO1xuXG5cdFx0cmVxT3B0cy50aW1lb3V0ID0gb3B0cy50aW1lb3V0IHx8IF9zZWxmLl9jb25maWcudGltZW91dDtcblx0XHRyZXFPcHRzLm1ldGhvZCA9IChvcHRzLm1ldGhvZCB8fCBNZXRob2QuR0VUKS50b1VwcGVyQ2FzZSgpO1xuXHRcdHJlcU9wdHMucGFyYW1zID0gXy5hc3NpZ24oe30sIG9wdHMucGFyYW1zKTtcblx0XHRyZXFPcHRzLmJvZHkgPSBvcHRzLmJvZHk7XG5cdFx0cmVxT3B0cy5lbmNvZGVQYXJhbXMgPSBfLmdldChvcHRzLCAnZW5jb2RlUGFyYW1zJywgZmFsc2UpO1xuXG5cdFx0aWYgKF9zZWxmLl9jb25maWcudXNlckFnZW50KSB7XG5cdFx0XHRyZXFPcHRzLmhlYWRlcnNbJ1VzZXItQWdlbnQnXSA9IF9zZWxmLl9jb25maWcudXNlckFnZW50O1xuXHRcdH1cblxuXHRcdGlmICghb3B0cy5ub0F1dGggJiYgIW9wdHMuYXV0aCAmJiBfc2VsZi5fY29uZmlnLnRva2VuKSB7XG5cdFx0XHRyZXFPcHRzLmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IF9zZWxmLl9jb25maWcudG9rZW47XG5cdFx0fVxuXG5cdFx0aWYgKG9wdHMubWltZVR5cGUpIHtcblx0XHRcdHJlcU9wdHMuaGVhZGVycy5BY2NlcHQgPSBvcHRzLm1pbWVUeXBlO1xuXHRcdFx0aWYgKG9wdHMubWV0aG9kID09PSBNZXRob2QuUE9TVCB8fCBvcHRzLm1ldGhvZCA9PT0gTWV0aG9kLlBVVCkge1xuXHRcdFx0XHRyZXFPcHRzLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gb3B0cy5taW1lVHlwZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRGVmYXVsdCBBY2NlcHQgdG8gYXBwbGljYXRpb24vanNvblxuXHRcdFx0cmVxT3B0cy5oZWFkZXJzLkFjY2VwdCA9IF8uZ2V0KG9wdHMsICdoZWFkZXJzLkFjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cblx0XHRcdC8vIERlZmF1bHQgQ29udGVudC1UeXBlIHRvIGFwcGxpY2F0aW9uL2pzb24gZm9yIFBPU1RzIGFuZCBQVVRzXG5cdFx0XHRpZiAocmVxT3B0cy5tZXRob2QgPT09IE1ldGhvZC5QT1NUIHx8IHJlcU9wdHMubWV0aG9kID09PSBNZXRob2QuUFVUKSB7XG5cdFx0XHRcdHJlcU9wdHMuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBfLmdldChvcHRzLCAnaGVhZGVycy5Db250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJlcU9wdHMuaGVhZGVycyA9IF8uYXNzaWduKHt9LCByZXFPcHRzLmhlYWRlcnMsIG9wdHMuaGVhZGVycyk7XG5cblx0XHRyZXFPcHRzLnVyaSA9IHVybEpvaW4oX3NlbGYuX2NvbmZpZy50YXJnZXQsIF8udHJpbVN0YXJ0KG9wdHMudXJpLCAnLycpKTtcblxuXHRcdC8vIENvbmZpZ3VyZSBQYXJhbWV0ZXJzXG5cdFx0aWYgKF9oYXNWYWx1ZShvcHRzLnN0YXJ0RWxlbWVudCkpIHtcblx0XHRcdHJlcU9wdHMucGFyYW1zLnN0YXJ0X2VsZW1lbnQgPSArb3B0cy5zdGFydEVsZW1lbnQ7XG5cdFx0fVxuXHRcdGlmIChfaGFzVmFsdWUob3B0cy5udW1FbGVtZW50cykpIHtcblx0XHRcdHJlcU9wdHMucGFyYW1zLm51bV9lbGVtZW50cyA9ICtvcHRzLm51bUVsZW1lbnRzO1xuXHRcdFx0cmVxT3B0cy5wYXJhbXMuc3RhcnRfZWxlbWVudCA9ICtvcHRzLnN0YXJ0RWxlbWVudCB8fCByZXFPcHRzLnBhcmFtcy5zdGFydF9lbGVtZW50IHx8IDA7IC8vIHN0YXJ0RWxlbWVudCBpcyByZXF1aXJlZCBpZiBudW1FbGVtZW50cyBpcyBzZXRcblx0XHR9XG5cblx0XHRwYXJhbXMgPSBxdWVyeS5zdHJpbmdpZnkocmVxT3B0cy5wYXJhbXMsIHtlbmNvZGU6IHJlcU9wdHMuZW5jb2RlUGFyYW1zfSk7XG5cblx0XHRpZiAocGFyYW1zICE9PSAnJykge1xuXHRcdFx0cmVxT3B0cy51cmkgKz0gKG9wdHMudXJpLmluZGV4T2YoJz8nKSA9PT0gLTEpID8gJz8nIDogJyYnO1xuXHRcdFx0cmVxT3B0cy51cmkgKz0gcGFyYW1zO1xuXHRcdH1cblxuXHRcdGlmIChfc2VsZi5fY29uZmlnLmJlZm9yZVJlcXVlc3QpIHtcblx0XHRcdGNvbnN0IGJlZm9yZVJlcXVlc3RPcHRzID0gX3NlbGYuX2NvbmZpZy5iZWZvcmVSZXF1ZXN0KHJlcU9wdHMpO1xuXHRcdFx0aWYgKGJlZm9yZVJlcXVlc3RPcHRzKSB7XG5cdFx0XHRcdHJlcU9wdHMgPSBfLmFzc2lnbih7fSwgcmVxT3B0cywgYmVmb3JlUmVxdWVzdE9wdHMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBfc2VsZi5fY29uZmlnLnJlcXVlc3QocmVxT3B0cykudGhlbigocmVzKSA9PiB7XG5cdFx0XHRjb25zdCB0b3RhbFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXJ0VGltZTtcblxuXHRcdFx0bGV0IG5ld1JlcyA9IF8uYXNzaWduKHtcblx0XHRcdFx0cmVxdWVzdFRpbWU6IHJlcy5yZXF1ZXN0VGltZSB8fCB0b3RhbFRpbWUsXG5cdFx0XHRcdHRvdGFsVGltZTogbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydFRpbWUsXG5cdFx0XHR9LCByZXMpO1xuXG5cdFx0XHRpZiAoX3NlbGYuX2NvbmZpZy5hZnRlclJlcXVlc3QpIHtcblx0XHRcdFx0Y29uc3QgYWZ0ZXJSZXF1ZXN0UmVzID0gX3NlbGYuX2NvbmZpZy5hZnRlclJlcXVlc3QobmV3UmVzKTtcblx0XHRcdFx0aWYgKGFmdGVyUmVxdWVzdFJlcykge1xuXHRcdFx0XHRcdG5ld1JlcyA9IF8uYXNzaWduKHt9LCBuZXdSZXMsIGFmdGVyUmVxdWVzdFJlcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKG5ld1Jlcy5zdGF0dXNDb2RlID49IDQwMCkge1xuXHRcdFx0XHRyZXR1cm4gcmVqZWN0KGVycm9ycy5idWlsZEVycm9yKHJlcU9wdHMsIG5ld1JlcykpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUZW1wb3JhcnkgZml4XG5cdFx0XHRsZXQgZXJyb3JJZDtcblx0XHRcdGxldCBlcnJvckNvZGU7XG5cdFx0XHRpZiAobmV3UmVzLmJvZHkgJiYgbmV3UmVzLmJvZHkucmVzcG9uc2UgJiYgbmV3UmVzLmJvZHkucmVzcG9uc2UpIHtcblx0XHRcdFx0ZXJyb3JJZCA9IG5ld1Jlcy5ib2R5LnJlc3BvbnNlLmVycm9yX2lkO1xuXHRcdFx0XHRlcnJvckNvZGUgPSBuZXdSZXMuYm9keS5yZXNwb25zZS5lcnJvcl9jb2RlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGVycm9ySWQgPT09ICdTWVNURU0nICYmIGVycm9yQ29kZSA9PT0gJ1NFUlZJQ0VfVU5BVkFJTEFCTEUnKSB7XG5cdFx0XHRcdHJldHVybiByZWplY3QoZXJyb3JzLmJ1aWxkRXJyb3IocmVxT3B0cywgbmV3UmVzKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZXJyb3JJZCA9PT0gJ1NZU1RFTScgJiYgZXJyb3JDb2RlID09PSAnVU5LTk9XTicpIHtcblx0XHRcdFx0cmV0dXJuIHJlamVjdChlcnJvcnMuYnVpbGRFcnJvcihyZXFPcHRzLCBuZXdSZXMpKTtcblx0XHRcdH1cblxuXHRcdFx0bmV3UmVzLnJlcSA9IHJlcU9wdHM7XG5cblx0XHRcdHJldHVybiByZXNvbHZlKG5ld1Jlcyk7XG5cdFx0fSkuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0bGV0IG5ld0Vycjtcblx0XHRcdGlmIChfc2VsZi5fY29uZmlnLmFmdGVyUmVxdWVzdCkge1xuXHRcdFx0XHRuZXdFcnIgPSBfc2VsZi5fY29uZmlnLmFmdGVyUmVxdWVzdChlcnIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlamVjdChlcnJvcnMuYnVpbGRFcnJvcihyZXFPcHRzLCBuZXdFcnIgfHwgZXJyKSk7XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5leHBvcnQgY2xhc3MgQW54QXBpIHtcblx0cHVibGljIF9jb25maWc6IElDb25maWc7XG5cblx0Y29uc3RydWN0b3IoY29uZmlnOiBJQ29uZmlnKSB7XG5cdFx0dGhpcy5fY29uZmlnID0gXy5kZWZhdWx0cyh7fSwgY29uZmlnLCB7XG5cdFx0XHRyZXF1ZXN0OiBheGlvc0FkYXB0ZXIoe1xuXHRcdFx0XHRmb3JjZUh0dHBBZGFwdG9yOiBjb25maWcuZW52aXJvbm1lbnQgPT09ICdub2RlJyxcblx0XHRcdH0pLFxuXHRcdFx0dXNlckFnZW50OiAnYW54LWFwaS8nICsgcGFja2FnZUpzb24udmVyc2lvbixcblx0XHRcdHRpbWVvdXQ6IDYwICogMTAwMCxcblx0XHRcdGhlYWRlcnM6IHt9LFxuXHRcdFx0dGFyZ2V0OiBudWxsLFxuXHRcdFx0dG9rZW46IG51bGwsXG5cdFx0XHRyYXRlTGltaXRpbmc6IHRydWUsXG5cdFx0XHRjaHVua1NpemU6IERFRkFVTFRfQ0hVTktfU0laRSxcblx0XHR9KTtcblxuXHRcdHRoaXMucmVxdWVzdCA9IF9fcmVxdWVzdDtcblxuXHRcdC8vIEluc3RhbGwgb3B0aW9uYWwgcmF0ZSBsaW1pdGluZyBhZGFwdGVyXG5cdFx0dGhpcy5yZXF1ZXN0ID0gdGhpcy5fY29uZmlnLnJhdGVMaW1pdGluZyA/IHJhdGVMaW1pdEFkYXB0ZXIoXy5hc3NpZ24oe30sIGNvbmZpZywge1xuXHRcdFx0cmVxdWVzdDogX19yZXF1ZXN0LmJpbmQodGhpcyksXG5cdFx0fSkpIDogX19yZXF1ZXN0LmJpbmQodGhpcyk7XG5cblx0XHQvLyBJbnN0YWxsIG9wdGlvbmFsIGNvbmN1cnJlbmN5IGFkYXB0ZXJcblx0XHR0aGlzLl9jb25maWcucmVxdWVzdCA9IHRoaXMuX2NvbmZpZy5jb25jdXJyZW5jeUxpbWl0ID8gY29uY3VycmVuY3lBZGFwdGVyKHtcblx0XHRcdGxpbWl0OiB0aGlzLl9jb25maWcuY29uY3VycmVuY3lMaW1pdCxcblx0XHRcdHJlcXVlc3Q6IHRoaXMuX2NvbmZpZy5yZXF1ZXN0LFxuXHRcdH0pIDogdGhpcy5fY29uZmlnLnJlcXVlc3Q7XG5cdH1cblxuXHRwdWJsaWMgX3JlcXVlc3QobWV0aG9kOiBNZXRob2QsIG9wdHM6IElHZW5lcmljT3B0aW9ucyB8IHN0cmluZywgZXh0ZW5kT3B0czogSUdlbmVyaWNPcHRpb25zLCBwYXlsb2FkPyk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgbmV3T3B0cyA9IF9ub3JtYWxpemVPcHRzKG9wdHMsIGV4dGVuZE9wdHMpO1xuXHRcdG5ld09wdHMubWV0aG9kID0gbWV0aG9kIHx8IG5ld09wdHMubWV0aG9kIHx8IE1ldGhvZC5HRVQ7XG5cdFx0aWYgKHBheWxvYWQpIHtcblx0XHRcdG5ld09wdHMuYm9keSA9IHBheWxvYWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QobmV3T3B0cyk7XG5cdH1cblxuXHRwdWJsaWMgcmVxdWVzdChvcHRzOiBJUmVxdWVzdE9wdGlvbnMsIGV4dGVuZE9wdHM/OiBJR2VuZXJpY09wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xuXHRcdHJldHVybiB0aGlzLl9yZXF1ZXN0KG51bGwsIG9wdHMsIGV4dGVuZE9wdHMpO1xuXHR9XG5cblx0cHVibGljIGdldChvcHRzOiBJR2VuZXJpY09wdGlvbnMgfCBzdHJpbmcsIGV4dGVuZE9wdHM/OiBJR2VuZXJpY09wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xuXHRcdHJldHVybiB0aGlzLl9yZXF1ZXN0KE1ldGhvZC5HRVQsIG9wdHMsIGV4dGVuZE9wdHMpO1xuXHR9XG5cblx0cHVibGljIGdldEFsbChvcHRzOiBJR2VuZXJpY09wdGlvbnMsIGV4dGVuZE9wdHMpOiBQcm9taXNlPGFueT4ge1xuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IG5ld09wdHMgPSBfbm9ybWFsaXplT3B0cyhvcHRzLCBleHRlbmRPcHRzKTtcblx0XHRcdGxldCBudW1FbGVtZW50cyA9IG9wdHMubnVtRWxlbWVudHMgfHwgMTAwO1xuXHRcdFx0bGV0IGZpcnN0T3V0cHV0VGVybTtcblx0XHRcdGxldCBlbGVtZW50cyA9IFtdO1xuXHRcdFx0bGV0IHRvdGFsVGltZSA9IDA7XG5cblx0XHRcdGNvbnN0IGdldEFsbCA9IChzdGFydEVsZW1lbnQpID0+IHtcblx0XHRcdFx0bmV3T3B0cy5zdGFydEVsZW1lbnQgPSBzdGFydEVsZW1lbnQ7XG5cdFx0XHRcdG5ld09wdHMubnVtRWxlbWVudHMgPSBudW1FbGVtZW50cztcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXQobmV3T3B0cykudGhlbigocmVzKSA9PiB7XG5cdFx0XHRcdFx0aWYgKCFzdGF0dXNPayhyZXMuYm9keSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiByZWplY3QocmVzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSByZXMuYm9keS5yZXNwb25zZTtcblx0XHRcdFx0XHRjb25zdCBjb3VudCA9IHJlc3BvbnNlLmNvdW50IHx8IDA7XG5cdFx0XHRcdFx0Y29uc3Qgb3V0cHV0VGVybSA9IHJlc3BvbnNlLmRiZ19pbmZvLm91dHB1dF90ZXJtO1xuXHRcdFx0XHRcdGlmICghZmlyc3RPdXRwdXRUZXJtKSB7XG5cdFx0XHRcdFx0XHRmaXJzdE91dHB1dFRlcm0gPSBvdXRwdXRUZXJtO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG51bUVsZW1lbnRzID0gcmVzcG9uc2UubnVtX2VsZW1lbnRzO1xuXG5cdFx0XHRcdFx0dG90YWxUaW1lICs9IHJlc3BvbnNlLmRiZ19pbmZvLnRpbWUgfHwgMDtcblx0XHRcdFx0XHRlbGVtZW50cyA9IGVsZW1lbnRzLmNvbmNhdChyZXNwb25zZVtvdXRwdXRUZXJtXSk7XG5cdFx0XHRcdFx0aWYgKGNvdW50IDw9IHN0YXJ0RWxlbWVudCArIG51bUVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdSZXNwb25zZSA9IF8uYXNzaWduKHt9LCB7XG5cdFx0XHRcdFx0XHRcdGNvdW50OiBlbGVtZW50cy5sZW5ndGgsXG5cdFx0XHRcdFx0XHRcdHN0YXJ0X2VsZW1lbnQ6IDAsXG5cdFx0XHRcdFx0XHRcdG51bV9lbGVtZW50czogZWxlbWVudHMubGVuZ3RoLFxuXHRcdFx0XHRcdFx0XHRkYmdfaW5mbzogXy5hc3NpZ24oe30sIHJlc3BvbnNlLmRiZ19pbmZvLCB7XG5cdFx0XHRcdFx0XHRcdFx0b3V0cHV0X3Rlcm06IGZpcnN0T3V0cHV0VGVybSxcblx0XHRcdFx0XHRcdFx0XHR0aW1lOiB0b3RhbFRpbWUsXG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRuZXdSZXNwb25zZVtmaXJzdE91dHB1dFRlcm1dID0gZWxlbWVudHM7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzb2x2ZSh7IGJvZHk6IHsgcmVzcG9uc2U6IG5ld1Jlc3BvbnNlIH0gfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBnZXRBbGwoc3RhcnRFbGVtZW50ICsgbnVtRWxlbWVudHMpO1xuXHRcdFx0XHR9KS5jYXRjaChyZWplY3QpO1xuXHRcdFx0fTtcblxuXHRcdFx0cmV0dXJuIGdldEFsbCgwKTtcblx0XHR9KTtcblx0fVxuXG5cdHB1YmxpYyBwb3N0KG9wdHM6IElPcHRpb25zV2l0aFBheWxvYWQgfCBzdHJpbmcsIHBheWxvYWQsIGV4dGVuZE9wdHM/OiBJR2VuZXJpY09wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xuXHRcdHJldHVybiB0aGlzLl9yZXF1ZXN0KE1ldGhvZC5QT1NULCBvcHRzLCBleHRlbmRPcHRzLCBwYXlsb2FkKTtcblx0fVxuXG5cdHB1YmxpYyBwdXQob3B0czogSU9wdGlvbnNXaXRoUGF5bG9hZCB8IHN0cmluZywgcGF5bG9hZCwgZXh0ZW5kT3B0cz86IElHZW5lcmljT3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG5cdFx0cmV0dXJuIHRoaXMuX3JlcXVlc3QoTWV0aG9kLlBVVCwgb3B0cywgZXh0ZW5kT3B0cywgcGF5bG9hZCk7XG5cdH1cblxuXHRwdWJsaWMgZGVsZXRlKG9wdHM6IElHZW5lcmljT3B0aW9ucyB8IHN0cmluZywgZXh0ZW5kT3B0cz86IElHZW5lcmljT3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG5cdFx0cmV0dXJuIHRoaXMuX3JlcXVlc3QoTWV0aG9kLkRFTEVURSwgb3B0cywgZXh0ZW5kT3B0cyk7XG5cdH1cblxuXHRwdWJsaWMgbG9naW4odXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgcmVxT3B0cyA9IHtcblx0XHRcdGF1dGg6IHtcblx0XHRcdFx0dXNlcm5hbWUsXG5cdFx0XHRcdHBhc3N3b3JkLFxuXHRcdFx0fSxcblx0XHR9O1xuXHRcdHJldHVybiB0aGlzLnBvc3QoJy9hdXRoJywgcmVxT3B0cykudGhlbigocmVzKSA9PiB7XG5cdFx0XHRpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCAmJiBzdGF0dXNPayhyZXMuYm9keSkpIHtcblx0XHRcdFx0dGhpcy5fY29uZmlnLnRva2VuID0gcmVzLmJvZHkucmVzcG9uc2UudG9rZW47XG5cdFx0XHRcdHJldHVybiB0aGlzLl9jb25maWcudG9rZW47XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBlcnJvcnMuYnVpbGRFcnJvcihyZXFPcHRzLCByZXMpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIHN3aXRjaFVzZXIodXNlcklkOiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xuXHRcdHJldHVybiB0aGlzLnBvc3QoJy9hdXRoJywge1xuXHRcdFx0YXV0aDoge1xuXHRcdFx0XHRzd2l0Y2hfdG9fdXNlcjogdXNlcklkLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG59XG4iXX0= |
@@ -1,55 +0,40 @@ | ||
'use strict'; | ||
var _isUndefined2 = require('lodash/isUndefined'); | ||
var _isUndefined3 = _interopRequireDefault(_isUndefined2); | ||
var _axios = require('axios'); | ||
var _axios2 = _interopRequireDefault(_axios); | ||
var _http = require('axios/lib/adapters/http'); | ||
var _http2 = _interopRequireDefault(_http); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
module.exports = function requestAdaptor(config) { | ||
return function (opts) { | ||
var url = opts.uri; | ||
var axiosOpts = { | ||
timeout: opts.timeout, | ||
method: opts.method.toLowerCase(), | ||
headers: opts.headers | ||
}; | ||
if (config.forceHttpAdaptor) { | ||
axiosOpts.adapter = _http2.default; | ||
} | ||
if (!(0, _isUndefined3.default)(opts.body)) { | ||
axiosOpts.data = opts.body; | ||
} | ||
var startTime = new Date().getTime(); | ||
return (0, _axios2.default)(url, axiosOpts, opts.body).then(function requestSuccess(res) { | ||
return { | ||
statusCode: res.status, | ||
headers: res.headers, | ||
body: res.data, | ||
requestTime: new Date().getTime() - startTime | ||
}; | ||
}).catch(function requestError(res) { | ||
if (!res.response) { | ||
throw res; | ||
} | ||
return { | ||
statusCode: res.response.status, | ||
headers: res.response.headers, | ||
body: res.response.data, | ||
requestTime: new Date().getTime() - startTime | ||
}; | ||
}); | ||
}; | ||
}; | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const axios_1 = require("axios"); | ||
const http_1 = require("axios/lib/adapters/http"); | ||
const _ = require("lodash"); | ||
exports.axiosAdapter = (config) => (opts) => { | ||
const url = opts.uri; | ||
const axiosConfig = { | ||
url, | ||
timeout: opts.timeout, | ||
method: opts.method.toLowerCase(), | ||
headers: opts.headers, | ||
}; | ||
if (config.forceHttpAdaptor) { | ||
axiosConfig.adapter = http_1.default; | ||
} | ||
if (!_.isUndefined(opts.body)) { | ||
axiosConfig.data = opts.body; | ||
} | ||
const startTime = new Date().getTime(); | ||
return axios_1.default(axiosConfig).then((res) => { | ||
return { | ||
statusCode: res.status, | ||
headers: res.headers, | ||
body: res.data, | ||
requestTime: new Date().getTime() - startTime, | ||
}; | ||
}).catch((err) => { | ||
if (!err.response) { | ||
throw err; | ||
} | ||
return { | ||
statusCode: err.response.status, | ||
headers: err.response.headers, | ||
body: err.response.data, | ||
requestTime: new Date().getTime() - startTime, | ||
}; | ||
}); | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXhpb3NBZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2F4aW9zQWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUFrRDtBQUNsRCxrREFBa0Q7QUFDbEQsNEJBQTRCO0FBU2YsUUFBQSxZQUFZLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFzQixFQUFFO0lBQ3BFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDckIsTUFBTSxXQUFXLEdBQXVCO1FBQ3ZDLEdBQUc7UUFDSCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87UUFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFO1FBQ2pDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztLQUNyQixDQUFDO0lBRUYsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7UUFDNUIsV0FBVyxDQUFDLE9BQU8sR0FBRyxjQUFXLENBQUM7S0FDbEM7SUFFRCxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDOUIsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0tBQzdCO0lBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUV2QyxPQUFPLGVBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUN0QyxPQUFPO1lBQ04sVUFBVSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1lBQ3RCLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztZQUNwQixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7WUFDZCxXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxTQUFTO1NBQzdDLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRTtZQUNsQixNQUFNLEdBQUcsQ0FBQztTQUNWO1FBQ0QsT0FBTztZQUNOLFVBQVUsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU07WUFDL0IsT0FBTyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTztZQUM3QixJQUFJLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJO1lBQ3ZCLFdBQVcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLFNBQVM7U0FDN0MsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zLCB7IEF4aW9zUmVxdWVzdENvbmZpZyB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCBodHRwQWRhcHRlciBmcm9tICdheGlvcy9saWIvYWRhcHRlcnMvaHR0cCc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlc3BvbnNlIHtcblx0c3RhdHVzQ29kZTogYW55O1xuXHRoZWFkZXJzOiBhbnk7XG5cdGJvZHk6IGFueTtcblx0cmVxdWVzdFRpbWU6IGFueTtcbn1cblxuZXhwb3J0IGNvbnN0IGF4aW9zQWRhcHRlciA9IChjb25maWcpID0+IChvcHRzKTogUHJvbWlzZTxJUmVzcG9uc2U+ID0+IHtcblx0Y29uc3QgdXJsID0gb3B0cy51cmk7XG5cdGNvbnN0IGF4aW9zQ29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG5cdFx0dXJsLFxuXHRcdHRpbWVvdXQ6IG9wdHMudGltZW91dCxcblx0XHRtZXRob2Q6IG9wdHMubWV0aG9kLnRvTG93ZXJDYXNlKCksXG5cdFx0aGVhZGVyczogb3B0cy5oZWFkZXJzLFxuXHR9O1xuXG5cdGlmIChjb25maWcuZm9yY2VIdHRwQWRhcHRvcikge1xuXHRcdGF4aW9zQ29uZmlnLmFkYXB0ZXIgPSBodHRwQWRhcHRlcjtcblx0fVxuXG5cdGlmICghXy5pc1VuZGVmaW5lZChvcHRzLmJvZHkpKSB7XG5cdFx0YXhpb3NDb25maWcuZGF0YSA9IG9wdHMuYm9keTtcblx0fVxuXG5cdGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG5cdHJldHVybiBheGlvcyhheGlvc0NvbmZpZykudGhlbigocmVzKSA9PiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHN0YXR1c0NvZGU6IHJlcy5zdGF0dXMsXG5cdFx0XHRoZWFkZXJzOiByZXMuaGVhZGVycyxcblx0XHRcdGJvZHk6IHJlcy5kYXRhLFxuXHRcdFx0cmVxdWVzdFRpbWU6IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnRUaW1lLFxuXHRcdH07XG5cdH0pLmNhdGNoKChlcnIpID0+IHtcblx0XHRpZiAoIWVyci5yZXNwb25zZSkge1xuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0c3RhdHVzQ29kZTogZXJyLnJlc3BvbnNlLnN0YXR1cyxcblx0XHRcdGhlYWRlcnM6IGVyci5yZXNwb25zZS5oZWFkZXJzLFxuXHRcdFx0Ym9keTogZXJyLnJlc3BvbnNlLmRhdGEsXG5cdFx0XHRyZXF1ZXN0VGltZTogbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydFRpbWUsXG5cdFx0fTtcblx0fSk7XG59O1xuIl19 |
@@ -1,64 +0,50 @@ | ||
'use strict'; | ||
var _remove2 = require('lodash/remove'); | ||
var _remove3 = _interopRequireDefault(_remove2); | ||
var _assign2 = require('lodash/assign'); | ||
var _assign3 = _interopRequireDefault(_assign2); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function ConcurrencyQueue(options) { | ||
this.options = (0, _assign3.default)({}, options); | ||
this.queue = []; | ||
this.running = []; | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const _ = require("lodash"); | ||
class ConcurrencyQueue { | ||
constructor(options) { | ||
this.options = _.assign({}, options); | ||
this.queue = []; | ||
this.running = []; | ||
} | ||
push(opts) { | ||
if (this.running.length < this.options.limit) { | ||
const requestPromise = this.options.request(opts).then(function success(res) { | ||
this.finished(requestPromise); | ||
return res; | ||
}, function failure(err) { | ||
this.finished(requestPromise); | ||
throw err; | ||
}); | ||
this.running.push(requestPromise); | ||
return requestPromise; | ||
} | ||
return new Promise((resolve, reject) => { | ||
const reqInfo = { opts, resolve, reject }; | ||
this.queue.push(reqInfo); | ||
}); | ||
} | ||
finished(requestPromise) { | ||
_.remove(this.running, requestPromise); | ||
if (this.queue.length > 0) { | ||
this.makeRequest(this.queue.shift()); | ||
} | ||
} | ||
makeRequest(reqInfo) { | ||
const requestPromise = this.options.request(reqInfo.opts).then((res) => { | ||
this.finished(requestPromise); | ||
reqInfo.resolve(res); | ||
return null; | ||
}).catch((err) => { | ||
this.finished(requestPromise); | ||
reqInfo.reject(err); | ||
}); | ||
this.running.push(requestPromise); | ||
} | ||
} | ||
ConcurrencyQueue.prototype.push = function _push(opts) { | ||
var _self = this; | ||
if (_self.running.length < _self.options.limit) { | ||
var requestPromise = _self.options.request(opts).then(function success(res) { | ||
_self.finished(requestPromise); | ||
return res; | ||
}, function failure(err) { | ||
_self.finished(requestPromise); | ||
throw err; | ||
}); | ||
_self.running.push(requestPromise); | ||
return requestPromise; | ||
} | ||
return new Promise(function queuedPromise(resolve, reject) { | ||
var reqInfo = { opts: opts, resolve: resolve, reject: reject }; | ||
_self.queue.push(reqInfo); | ||
}); | ||
exports.ConcurrencyQueue = ConcurrencyQueue; | ||
exports.concurrencyAdapter = (options) => (opts) => { | ||
const concurrencyQueue = new ConcurrencyQueue(options); | ||
return concurrencyQueue.push(opts); | ||
}; | ||
ConcurrencyQueue.prototype.finished = function _finished(requestPromise) { | ||
var _self = this; | ||
(0, _remove3.default)(_self.running, requestPromise); | ||
if (_self.queue.length > 0) { | ||
_self.makeRequest(_self.queue.shift()); | ||
} | ||
}; | ||
ConcurrencyQueue.prototype.makeRequest = function _makeRequest(reqInfo) { | ||
var _self = this; | ||
var requestPromise = _self.options.request(reqInfo.opts).then(function success(res) { | ||
_self.finished(requestPromise); | ||
reqInfo.resolve(res); | ||
return null; | ||
}, function failure(err) { | ||
_self.finished(requestPromise); | ||
reqInfo.reject(err); | ||
}); | ||
_self.running.push(requestPromise); | ||
}; | ||
module.exports = function concurrencyAdapter(options) { | ||
var concurrencyQueue = new ConcurrencyQueue(options); | ||
return function concurrencyLimitedRequest(opts) { | ||
return concurrencyQueue.push(opts); | ||
}; | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY3VycmVuY3lBZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmN1cnJlbmN5QWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDRCQUE0QjtBQUc1QixNQUFhLGdCQUFnQjtJQUs1QixZQUFZLE9BQWdCO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVNLElBQUksQ0FBQyxJQUFJO1FBQ2YsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtZQUM3QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxPQUFPLENBQUMsR0FBRztnQkFDMUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDOUIsT0FBTyxHQUFHLENBQUM7WUFDWixDQUFDLEVBQUUsU0FBUyxPQUFPLENBQUMsR0FBRztnQkFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDOUIsTUFBTSxHQUFHLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sY0FBYyxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN0QyxNQUFNLE9BQU8sR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU0sUUFBUSxDQUFDLGNBQWM7UUFDN0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3JDO0lBQ0YsQ0FBQztJQUVNLFdBQVcsQ0FBQyxPQUFPO1FBQ3pCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN0RSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckIsT0FBTyxJQUFJLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBRUQ7QUFoREQsNENBZ0RDO0FBRVksUUFBQSxrQkFBa0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQWdCLEVBQUU7SUFDckUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IElDb25maWcgfSBmcm9tICcuL2FwaSc7XG5cbmV4cG9ydCBjbGFzcyBDb25jdXJyZW5jeVF1ZXVlIHtcblx0cHJpdmF0ZSBvcHRpb25zOiBhbnk7XG5cdHByaXZhdGUgcXVldWU6IGFueVtdO1xuXHRwcml2YXRlIHJ1bm5pbmc6IGFueVtdO1xuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IElDb25maWcpIHtcblx0XHR0aGlzLm9wdGlvbnMgPSBfLmFzc2lnbih7fSwgb3B0aW9ucyk7XG5cdFx0dGhpcy5xdWV1ZSA9IFtdO1xuXHRcdHRoaXMucnVubmluZyA9IFtdO1xuXHR9XG5cblx0cHVibGljIHB1c2gob3B0cyk6IFByb21pc2U8YW55PiB7XG5cdFx0aWYgKHRoaXMucnVubmluZy5sZW5ndGggPCB0aGlzLm9wdGlvbnMubGltaXQpIHtcblx0XHRcdGNvbnN0IHJlcXVlc3RQcm9taXNlID0gdGhpcy5vcHRpb25zLnJlcXVlc3Qob3B0cykudGhlbihmdW5jdGlvbiBzdWNjZXNzKHJlcykge1xuXHRcdFx0XHR0aGlzLmZpbmlzaGVkKHJlcXVlc3RQcm9taXNlKTtcblx0XHRcdFx0cmV0dXJuIHJlcztcblx0XHRcdH0sIGZ1bmN0aW9uIGZhaWx1cmUoZXJyKSB7XG5cdFx0XHRcdHRoaXMuZmluaXNoZWQocmVxdWVzdFByb21pc2UpO1xuXHRcdFx0XHR0aHJvdyBlcnI7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMucnVubmluZy5wdXNoKHJlcXVlc3RQcm9taXNlKTtcblx0XHRcdHJldHVybiByZXF1ZXN0UHJvbWlzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlcUluZm8gPSB7IG9wdHMsIHJlc29sdmUsIHJlamVjdCB9O1xuXHRcdFx0dGhpcy5xdWV1ZS5wdXNoKHJlcUluZm8pO1xuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIGZpbmlzaGVkKHJlcXVlc3RQcm9taXNlKTogdm9pZCB7XG5cdFx0Xy5yZW1vdmUodGhpcy5ydW5uaW5nLCByZXF1ZXN0UHJvbWlzZSk7XG5cdFx0aWYgKHRoaXMucXVldWUubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5tYWtlUmVxdWVzdCh0aGlzLnF1ZXVlLnNoaWZ0KCkpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBtYWtlUmVxdWVzdChyZXFJbmZvKTogdm9pZCB7XG5cdFx0Y29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLm9wdGlvbnMucmVxdWVzdChyZXFJbmZvLm9wdHMpLnRoZW4oKHJlcykgPT4ge1xuXHRcdFx0dGhpcy5maW5pc2hlZChyZXF1ZXN0UHJvbWlzZSk7XG5cdFx0XHRyZXFJbmZvLnJlc29sdmUocmVzKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0pLmNhdGNoKChlcnIpID0+IHtcblx0XHRcdHRoaXMuZmluaXNoZWQocmVxdWVzdFByb21pc2UpO1xuXHRcdFx0cmVxSW5mby5yZWplY3QoZXJyKTtcblx0XHR9KTtcblx0XHR0aGlzLnJ1bm5pbmcucHVzaChyZXF1ZXN0UHJvbWlzZSk7XG5cdH1cblxufVxuXG5leHBvcnQgY29uc3QgY29uY3VycmVuY3lBZGFwdGVyID0gKG9wdGlvbnMpID0+IChvcHRzKTogUHJvbWlzZTxhbnk+ID0+IHtcblx0Y29uc3QgY29uY3VycmVuY3lRdWV1ZSA9IG5ldyBDb25jdXJyZW5jeVF1ZXVlKG9wdGlvbnMpO1xuXHRyZXR1cm4gY29uY3VycmVuY3lRdWV1ZS5wdXNoKG9wdHMpO1xufTtcbiJdfQ== |
@@ -1,252 +0,226 @@ | ||
'use strict'; | ||
var _isObject2 = require('lodash/isObject'); | ||
var _isObject3 = _interopRequireDefault(_isObject2); | ||
var _util = require('util'); | ||
var _util2 = _interopRequireDefault(_util); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function ApiError(req, res) { | ||
Error.apply(this); | ||
// Error.captureStackTrace not supported in Firefox | ||
Error.captureStackTrace && Error.captureStackTrace(this, this.constructor); | ||
this.name = 'ApiError'; | ||
this.defaultMessage = this.defaultMessage || ''; | ||
var id; | ||
var code; | ||
var message; | ||
var description; | ||
var response; | ||
if ((0, _isObject3.default)(res)) { | ||
// Traverse through general API JSON Response | ||
if (res.body && res.body.response) { | ||
response = res.body.response; // res is raw api response | ||
} else if (res.response) { | ||
response = res.response; // res is body | ||
} else { | ||
response = res; | ||
} | ||
// Extract values from object - duck type check | ||
if (response.hasOwnProperty('error_id')) { | ||
// Api Response | ||
id = response.error_id; | ||
code = response.error_code; | ||
message = response.error; | ||
description = response.error_description; | ||
} else if (response.hasOwnProperty('id')) { | ||
// Simple Object | ||
id = response.id; | ||
code = response.code; | ||
message = response.message; | ||
description = response.description; | ||
} else { | ||
message = res; | ||
} | ||
} else { | ||
message = res; | ||
} | ||
this.id = id; | ||
this.code = code; | ||
this.message = message || this.defaultMessage; | ||
delete this.defaultMessage; | ||
this.description = description || null; | ||
this.req = req; | ||
this.res = res; | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const _ = require("lodash"); | ||
class ApiError extends Error { | ||
constructor(req, res) { | ||
super(); | ||
// Error.captureStackTrace not supported in Firefox | ||
// tslint:disable-next-line | ||
Error.captureStackTrace && Error.captureStackTrace(this, this.constructor); | ||
this.name = 'ApiError'; | ||
this.defaultMessage = this.defaultMessage || ''; | ||
let response; | ||
let id; | ||
let code; | ||
let message; | ||
let description; | ||
if (_.isObject(res)) { | ||
// Traverse through general API JSON Response | ||
if (res.body && res.body.response) { | ||
response = res.body.response; // res is raw api response | ||
} | ||
else if (res.response) { | ||
response = res.response; // res is body | ||
} | ||
else { | ||
response = res; | ||
} | ||
// Extract values from object - duck type check | ||
if (response.hasOwnProperty('error_id')) { // Api Response | ||
id = response.error_id; | ||
code = response.error_code; | ||
message = response.error; | ||
description = response.error_description; | ||
} | ||
else if (response.hasOwnProperty('id')) { // Simple Object | ||
id = response.id; | ||
code = response.code; | ||
message = response.message; | ||
description = response.description; | ||
} | ||
else { | ||
message = res; | ||
} | ||
} | ||
else { | ||
message = res; | ||
} | ||
this.id = id; | ||
this.code = code; | ||
this.message = (message || this.defaultMessage); | ||
delete this.defaultMessage; | ||
this.description = (description || null); | ||
this.req = req; | ||
this.res = res; | ||
} | ||
} | ||
_util2.default.inherits(ApiError, Error); | ||
function NotAuthorizedError() { | ||
this.defaultMessage = 'Authorization failed'; | ||
ApiError.apply(this, arguments); | ||
this.name = 'NotAuthorizedError'; | ||
exports.ApiError = ApiError; | ||
class NotAuthorizedError extends ApiError { | ||
constructor() { | ||
super(...arguments); | ||
this.defaultMessage = 'Authorization failed'; | ||
this.name = 'NotAuthorizedError'; | ||
} | ||
} | ||
_util2.default.inherits(NotAuthorizedError, ApiError); | ||
exports.NotAuthorizedError = NotAuthorizedError; | ||
// NotAuthenticated extends NotAuthorized for backwards compatibility | ||
function NotAuthenticatedError() { | ||
this.defaultMessage = 'Authentication failed'; | ||
NotAuthorizedError.apply(this, arguments); | ||
this.name = 'NotAuthenticatedError'; | ||
class NotAuthenticatedError extends NotAuthorizedError { | ||
constructor() { | ||
super(...arguments); | ||
this.defaultMessage = 'Authentication failed'; | ||
this.name = 'NotAuthenticatedError'; | ||
} | ||
} | ||
_util2.default.inherits(NotAuthenticatedError, NotAuthorizedError); | ||
function RateLimitExceededError(opts, res) { | ||
this.defaultMessage = 'Rate Limit Exceeded'; | ||
ApiError.apply(this, arguments); | ||
this.name = 'RateLimitExceededError'; | ||
this.retryAfter = res.headers && res.headers['retry-after'] && parseInt(res.headers['retry-after'], 10); | ||
exports.NotAuthenticatedError = NotAuthenticatedError; | ||
class RateLimitExceededError extends ApiError { | ||
constructor(opts, res) { | ||
super(opts, res); | ||
this.defaultMessage = 'Rate Limit Exceeded'; | ||
this.name = 'RateLimitExceededError'; | ||
this.retryAfter = res.headers && res.headers['retry-after'] && parseInt(res.headers['retry-after'], 10); | ||
} | ||
} | ||
_util2.default.inherits(NotAuthorizedError, ApiError); | ||
function SystemServiceUnavailableError() { | ||
this.defaultMessage = 'Service Unavailable'; | ||
ApiError.apply(this, arguments); | ||
this.name = 'SystemServiceUnavailableError'; | ||
exports.RateLimitExceededError = RateLimitExceededError; | ||
class SystemServiceUnavailableError extends ApiError { | ||
constructor() { | ||
super(...arguments); | ||
this.defaultMessage = 'Service Unavailable'; | ||
this.name = 'SystemServiceUnavailableError'; | ||
} | ||
} | ||
_util2.default.inherits(SystemServiceUnavailableError, ApiError); | ||
function SystemUnknownError() { | ||
this.defaultMessage = 'Unknown'; | ||
ApiError.apply(this, arguments); | ||
this.name = 'SystemUnknownError'; | ||
exports.SystemServiceUnavailableError = SystemServiceUnavailableError; | ||
class SystemUnknownError extends ApiError { | ||
constructor() { | ||
super(...arguments); | ||
this.defaultMessage = 'Unknown'; | ||
this.name = 'SystemUnknownError'; | ||
} | ||
} | ||
_util2.default.inherits(SystemUnknownError, ApiError); | ||
function NetworkError(opts, err) { | ||
Error.apply(this); | ||
this.message = err.message; | ||
this.req = opts; | ||
this.name = 'NetworkError'; | ||
exports.SystemUnknownError = SystemUnknownError; | ||
class NetworkError extends Error { | ||
constructor(req, err) { | ||
super(); | ||
this.name = 'NetworkError'; | ||
this.req = req; | ||
this.err = err; | ||
} | ||
} | ||
_util2.default.inherits(NetworkError, Error); | ||
function ArgumentError(opts, message) { | ||
Error.apply(this); | ||
this.message = message; | ||
this.req = opts; | ||
this.name = 'ArgumentError'; | ||
exports.NetworkError = NetworkError; | ||
class ArgumentError extends Error { | ||
constructor(req, message) { | ||
super(); | ||
this.name = 'ArgumentError'; | ||
this.message = message; | ||
this.req = req; | ||
} | ||
} | ||
_util2.default.inherits(ArgumentError, Error); | ||
function TargetError() { | ||
ApiError.apply(this, arguments); | ||
this.name = 'TargetError'; | ||
exports.ArgumentError = ArgumentError; | ||
class TargetError extends ApiError { | ||
} | ||
_util2.default.inherits(TargetError, ApiError); | ||
function DNSLookupError(req, err) { | ||
ApiError.apply(this, arguments); | ||
this.name = 'DNSLookupError'; | ||
this.message = 'DNS Lookup Error: ' + err.hostname; | ||
exports.TargetError = TargetError; | ||
class DNSLookupError extends NetworkError { | ||
constructor(req, err) { | ||
super(req, err); | ||
this.name = 'DNSLookupError'; | ||
this.message = 'DNS Lookup Error: ' + err.hostname; | ||
} | ||
} | ||
_util2.default.inherits(DNSLookupError, NetworkError); | ||
function ConnectionAbortedError() { | ||
ApiError.apply(this, arguments); | ||
this.name = 'ConnectionAbortedError'; | ||
this.message = 'Connection Aborted Error'; | ||
exports.DNSLookupError = DNSLookupError; | ||
class ConnectionAbortedError extends NetworkError { | ||
constructor() { | ||
super(...arguments); | ||
this.name = 'ConnectionAbortedError'; | ||
this.message = 'Connection Aborted Error'; | ||
} | ||
} | ||
_util2.default.inherits(ConnectionAbortedError, NetworkError); | ||
function SocketTimeoutError() { | ||
ApiError.apply(this, arguments); | ||
this.name = 'SocketTimeoutError'; | ||
this.message = 'Timeout Error'; | ||
exports.ConnectionAbortedError = ConnectionAbortedError; | ||
class SocketTimeoutError extends NetworkError { | ||
constructor() { | ||
super(...arguments); | ||
this.name = 'SocketTimeoutError'; | ||
this.message = 'Timeout Error'; | ||
} | ||
} | ||
_util2.default.inherits(SocketTimeoutError, NetworkError); | ||
function ConnectionTimeoutError() { | ||
ApiError.apply(this, arguments); | ||
this.name = 'ConnectionTimeoutError'; | ||
this.message = 'Connection Timeout Error'; | ||
exports.SocketTimeoutError = SocketTimeoutError; | ||
class ConnectionTimeoutError extends NetworkError { | ||
constructor() { | ||
super(...arguments); | ||
this.name = 'ConnectionTimeoutError'; | ||
this.message = 'Connection Timeout Error'; | ||
} | ||
} | ||
_util2.default.inherits(ConnectionTimeoutError, NetworkError); | ||
function ConnectionResetError() { | ||
ApiError.apply(this, arguments); | ||
this.name = 'ConnectionResetError'; | ||
this.message = 'Connection Reset Error'; | ||
exports.ConnectionTimeoutError = ConnectionTimeoutError; | ||
class ConnectionResetError extends NetworkError { | ||
constructor() { | ||
super(...arguments); | ||
this.name = 'ConnectionResetError'; | ||
this.message = 'Connection Reset Error'; | ||
} | ||
} | ||
_util2.default.inherits(ConnectionResetError, NetworkError); | ||
function ConnectionRefusedError() { | ||
ApiError.apply(this, arguments); | ||
this.name = 'ConnectionRefusedError'; | ||
this.message = 'Connection Refused Error'; | ||
exports.ConnectionResetError = ConnectionResetError; | ||
class ConnectionRefusedError extends NetworkError { | ||
constructor() { | ||
super(...arguments); | ||
this.name = 'ConnectionRefusedError'; | ||
this.message = 'Connection Refused Error'; | ||
} | ||
} | ||
_util2.default.inherits(ConnectionRefusedError, NetworkError); | ||
exports.ConnectionRefusedError = ConnectionRefusedError; | ||
// Build error from root response | ||
// https://wiki.appnexus.com/display/adnexusdocumentation/API+Semantics#APISemantics-Errors | ||
function buildError(req, res) { | ||
var ErrorType = ApiError; | ||
if (res) { | ||
var statusCode; | ||
var errorId; | ||
var errorCode; | ||
if (res instanceof Error || res.errno) { | ||
if (res.code === 'ENOTFOUND') { | ||
ErrorType = DNSLookupError; | ||
} | ||
if (res.code === 'ECONNABORTED') { | ||
ErrorType = ConnectionAbortedError; | ||
} | ||
if (res.code === 'ECONNREFUSED') { | ||
ErrorType = ConnectionRefusedError; | ||
} | ||
if (res.code === 'ECONNRESET') { | ||
ErrorType = ConnectionResetError; | ||
} | ||
if (res.code === 'ETIMEDOUT') { | ||
ErrorType = ConnectionTimeoutError; | ||
} | ||
if (res.code === 'ESOCKETTIMEDOUT') { | ||
ErrorType = SocketTimeoutError; | ||
} | ||
} | ||
statusCode = res.statusCode; | ||
if (res.body && res.body.response) { | ||
errorId = res.body.response.error_id; | ||
errorCode = res.body.response.error_code; | ||
} | ||
if (statusCode || errorId) { | ||
// Differentiating Authentication vs Authorization [http://stackoverflow.com/a/6937030/2483105] | ||
if (statusCode === 401 || errorId === 'NOAUTH') { | ||
ErrorType = NotAuthenticatedError; | ||
} else if (statusCode === 403 || errorId === 'UNAUTH') { | ||
ErrorType = NotAuthorizedError; | ||
} else if (errorId === 'SYSTEM' && errorCode === 'SERVICE_UNAVAILABLE') { | ||
ErrorType = SystemServiceUnavailableError; | ||
} else if (statusCode === 405 || statusCode === 429) { | ||
// Legacy code 405 | ||
ErrorType = RateLimitExceededError; | ||
} else if (errorId === 'SYSTEM' && errorCode === 'RATE_EXCEEDED') { | ||
// Legacy rate limit detection pre 1.17 | ||
ErrorType = RateLimitExceededError; | ||
} else if (errorId === 'SYSTEM' && errorCode === 'UNKNOWN') { | ||
ErrorType = SystemUnknownError; | ||
} | ||
} | ||
} | ||
return new ErrorType(req, res); | ||
} | ||
module.exports = { | ||
NetworkError: NetworkError, | ||
ArgumentError: ArgumentError, | ||
ApiError: ApiError, | ||
DNSLookupError: DNSLookupError, | ||
NotAuthorizedError: NotAuthorizedError, | ||
NotAuthenticatedError: NotAuthenticatedError, | ||
RateLimitExceededError: RateLimitExceededError, | ||
SystemServiceUnavailableError: SystemServiceUnavailableError, | ||
SystemUnknownError: SystemUnknownError, | ||
TargetError: TargetError, | ||
ConnectionAbortedError: ConnectionAbortedError, | ||
SocketTimeoutError: SocketTimeoutError, | ||
ConnectionTimeoutError: ConnectionTimeoutError, | ||
ConnectionResetError: ConnectionResetError, | ||
ConnectionRefusedError: ConnectionRefusedError, | ||
buildError: buildError | ||
}; | ||
exports.buildError = (req, res) => { | ||
let ErrorType = ApiError; | ||
if (res) { | ||
let statusCode; | ||
let errorId; | ||
let errorCode; | ||
if (res instanceof Error || res.errno) { | ||
if (res.code === 'ENOTFOUND') { | ||
ErrorType = DNSLookupError; | ||
} | ||
if (res.code === 'ECONNABORTED') { | ||
ErrorType = ConnectionAbortedError; | ||
} | ||
if (res.code === 'ECONNREFUSED') { | ||
ErrorType = ConnectionRefusedError; | ||
} | ||
if (res.code === 'ECONNRESET') { | ||
ErrorType = ConnectionResetError; | ||
} | ||
if (res.code === 'ETIMEDOUT') { | ||
ErrorType = ConnectionTimeoutError; | ||
} | ||
if (res.code === 'ESOCKETTIMEDOUT') { | ||
ErrorType = SocketTimeoutError; | ||
} | ||
} | ||
statusCode = res.statusCode; | ||
if (res.body && res.body.response) { | ||
errorId = res.body.response.error_id; | ||
errorCode = res.body.response.error_code; | ||
} | ||
if (statusCode || errorId) { | ||
// Differentiating Authentication vs Authorization [http://stackoverflow.com/a/6937030/2483105] | ||
if (statusCode === 401 || errorId === 'NOAUTH') { | ||
ErrorType = NotAuthenticatedError; | ||
} | ||
else if (statusCode === 403 || errorId === 'UNAUTH') { | ||
ErrorType = NotAuthorizedError; | ||
} | ||
else if (errorId === 'SYSTEM' && errorCode === 'SERVICE_UNAVAILABLE') { | ||
ErrorType = SystemServiceUnavailableError; | ||
} | ||
else if (statusCode === 405 || statusCode === 429) { // Legacy code 405 | ||
ErrorType = RateLimitExceededError; | ||
} | ||
else if (errorId === 'SYSTEM' && errorCode === 'RATE_EXCEEDED') { // Legacy rate limit detection pre 1.17 | ||
ErrorType = RateLimitExceededError; | ||
} | ||
else if (errorId === 'SYSTEM' && errorCode === 'UNKNOWN') { | ||
ErrorType = SystemUnknownError; | ||
} | ||
} | ||
} | ||
return new ErrorType(req, res); | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDRCQUE0QjtBQUU1QixNQUFhLFFBQVMsU0FBUSxLQUFLO0lBU2xDLFlBQVksR0FBSSxFQUFFLEdBQUk7UUFDckIsS0FBSyxFQUFFLENBQUM7UUFFUixtREFBbUQ7UUFDbkQsMkJBQTJCO1FBQzNCLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUUzRSxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztRQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO1FBRWhELElBQUksUUFBUSxDQUFDO1FBQ2IsSUFBSSxFQUFFLENBQUM7UUFDUCxJQUFJLElBQUksQ0FBQztRQUNULElBQUksT0FBTyxDQUFDO1FBQ1osSUFBSSxXQUFXLENBQUM7UUFFaEIsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCLDZDQUE2QztZQUM3QyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xDLFFBQVEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLDBCQUEwQjthQUN4RDtpQkFBTSxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3hCLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYzthQUN2QztpQkFBTTtnQkFDTixRQUFRLEdBQUcsR0FBRyxDQUFDO2FBQ2Y7WUFFRCwrQ0FBK0M7WUFDL0MsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsZUFBZTtnQkFDekQsRUFBRSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENB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QyxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1NBQ3pDO1FBRUQsSUFBSSxVQUFVLElBQUksT0FBTyxFQUFFO1lBQzFCLCtGQUErRjtZQUMvRixJQUFJLFVBQVUsS0FBSyxHQUFHLElBQUksT0FBTyxLQUFLLFFBQVEsRUFBRTtnQkFDL0MsU0FBUyxHQUFHLHFCQUFxQixDQUFDO2FBQ2xDO2lCQUFNLElBQUksVUFBVSxLQUFLLEdBQUcsSUFBSSxPQUFPLEtBQUssUUFBUSxFQUFFO2dCQUN0RCxTQUFTLEdBQUcsa0JBQWtCLENBQUM7YUFDL0I7aUJBQU0sSUFBSSxPQUFPLEtBQUssUUFBUSxJQUFJLFNBQVMsS0FBSyxxQkFBcUIsRUFBRTtnQkFDdkUsU0FBUyxHQUFHLDZCQUE2QixDQUFDO2FBQzFDO2lCQUFNLElBQUksVUFBVSxLQUFLLEdBQUcsSUFBSSxVQUFVLEtBQUssR0FBRyxFQUFFLEVBQUUsa0JBQWtCO2dCQUN4RSxTQUFTLEdBQUcsc0JBQXNCLENBQUM7YUFDbkM7aUJBQU0sSUFBSSxPQUFPLEtBQUssUUFBUSxJQUFJLFNBQVMsS0FBSyxlQUFlLEVBQUUsRUFBRSx1Q0FBdUM7Z0JBQzFHLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQzthQUNuQztpQkFBTSxJQUFJLE9BQU8sS0FBSyxRQUFRLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTtnQkFDM0QsU0FBUyxHQUFHLGtCQUFrQixDQUFDO2FBQy9CO1NBQ0Q7S0FDRDtJQUVELE9BQU8sSUFBSSxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNsYXNzIEFwaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRwdWJsaWMgaWQ7XG5cdHB1YmxpYyBjb2RlO1xuXHRwdWJsaWMgZGVmYXVsdE1lc3NhZ2U7XG5cdHB1YmxpYyBkZXNjcmlwdGlvbjtcblx0cHVibGljIHJlc3BvbnNlO1xuXHRwdWJsaWMgcmVxO1xuXHRwdWJsaWMgcmVzO1xuXG5cdGNvbnN0cnVjdG9yKHJlcT8sIHJlcz8pIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0Ly8gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Ugbm90IHN1cHBvcnRlZCBpbiBGaXJlZm94XG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG5cdFx0RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgJiYgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG5cblx0XHR0aGlzLm5hbWUgPSAnQXBpRXJyb3InO1xuXHRcdHRoaXMuZGVmYXVsdE1lc3NhZ2UgPSB0aGlzLmRlZmF1bHRNZXNzYWdlIHx8ICcnO1xuXG5cdFx0bGV0IHJlc3BvbnNlO1xuXHRcdGxldCBpZDtcblx0XHRsZXQgY29kZTtcblx0XHRsZXQgbWVzc2FnZTtcblx0XHRsZXQgZGVzY3JpcHRpb247XG5cblx0XHRpZiAoXy5pc09iamVjdChyZXMpKSB7XG5cdFx0XHQvLyBUcmF2ZXJzZSB0aHJvdWdoIGdlbmVyYWwgQVBJIEpTT04gUmVzcG9uc2Vcblx0XHRcdGlmIChyZXMuYm9keSAmJiByZXMuYm9keS5yZXNwb25zZSkge1xuXHRcdFx0XHRyZXNwb25zZSA9IHJlcy5ib2R5LnJlc3BvbnNlOyAvLyByZXMgaXMgcmF3IGFwaSByZXNwb25zZVxuXHRcdFx0fSBlbHNlIGlmIChyZXMucmVzcG9uc2UpIHtcblx0XHRcdFx0cmVzcG9uc2UgPSByZXMucmVzcG9uc2U7IC8vIHJlcyBpcyBib2R5XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXNwb25zZSA9IHJlcztcblx0XHRcdH1cblxuXHRcdFx0Ly8gRXh0cmFjdCB2YWx1ZXMgZnJvbSBvYmplY3QgLSBkdWNrIHR5cGUgY2hlY2tcblx0XHRcdGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgnZXJyb3JfaWQnKSkgeyAvLyBBcGkgUmVzcG9uc2Vcblx0XHRcdFx0aWQgPSByZXNwb25zZS5lcnJvcl9pZDtcblx0XHRcdFx0Y29kZSA9IHJlc3BvbnNlLmVycm9yX2NvZGU7XG5cdFx0XHRcdG1lc3NhZ2UgPSByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0ZGVzY3JpcHRpb24gPSByZXNwb25zZS5lcnJvcl9kZXNjcmlwdGlvbjtcblx0XHRcdH0gZWxzZSBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoJ2lkJykpIHsgLy8gU2ltcGxlIE9iamVjdFxuXHRcdFx0XHRpZCA9IHJlc3BvbnNlLmlkO1xuXHRcdFx0XHRjb2RlID0gcmVzcG9uc2UuY29kZTtcblx0XHRcdFx0bWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG5cdFx0XHRcdGRlc2NyaXB0aW9uID0gcmVzcG9uc2UuZGVzY3JpcHRpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZXNzYWdlID0gcmVzO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZXNzYWdlID0gcmVzO1xuXHRcdH1cblxuXHRcdHRoaXMuaWQgPSBpZDtcblx0XHR0aGlzLmNvZGUgPSBjb2RlO1xuXHRcdHRoaXMubWVzc2FnZSA9IChtZXNzYWdlIHx8IHRoaXMuZGVmYXVsdE1lc3NhZ2UpO1xuXHRcdGRlbGV0ZSB0aGlzLmRlZmF1bHRNZXNzYWdlO1xuXHRcdHRoaXMuZGVzY3JpcHRpb24gPSAoZGVzY3JpcHRpb24gfHwgbnVsbCk7XG5cdFx0dGhpcy5yZXEgPSByZXE7XG5cdFx0dGhpcy5yZXMgPSByZXM7XG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdEF1dGhvcml6ZWRFcnJvciBleHRlbmRzIEFwaUVycm9yIHtcblx0cHVibGljIGRlZmF1bHRNZXNzYWdlID0gJ0F1dGhvcml6YXRpb24gZmFpbGVkJztcblx0cHVibGljIG5hbWUgPSAnTm90QXV0aG9yaXplZEVycm9yJztcbn1cblxuLy8gTm90QXV0aGVudGljYXRlZCBleHRlbmRzIE5vdEF1dGhvcml6ZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5leHBvcnQgY2xhc3MgTm90QXV0aGVudGljYXRlZEVycm9yIGV4dGVuZHMgTm90QXV0aG9yaXplZEVycm9yIHtcblx0cHVibGljIGRlZmF1bHRNZXNzYWdlID0gJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCc7XG5cdHB1YmxpYyBuYW1lID0gJ05vdEF1dGhlbnRpY2F0ZWRFcnJvcic7XG59XG5cbmV4cG9ydCBjbGFzcyBSYXRlTGltaXRFeGNlZWRlZEVycm9yIGV4dGVuZHMgQXBpRXJyb3Ige1xuXHRwdWJsaWMgZGVmYXVsdE1lc3NhZ2UgPSAnUmF0ZSBMaW1pdCBFeGNlZWRlZCc7XG5cdHB1YmxpYyBuYW1lID0gJ1JhdGVMaW1pdEV4Y2VlZGVkRXJyb3InO1xuXHRwdWJsaWMgcmV0cnlBZnRlcjtcblx0Y29uc3RydWN0b3Iob3B0cywgcmVzKSB7XG5cdFx0c3VwZXIob3B0cywgcmVzKTtcblx0XHR0aGlzLnJldHJ5QWZ0ZXIgPSByZXMuaGVhZGVycyAmJiByZXMuaGVhZGVyc1sncmV0cnktYWZ0ZXInXSAmJiBwYXJzZUludChyZXMuaGVhZGVyc1sncmV0cnktYWZ0ZXInXSwgMTApO1xuXHR9XG59XG5cbmV4cG9ydCBjbGFzcyBTeXN0ZW1TZXJ2aWNlVW5hdmFpbGFibGVFcnJvciBleHRlbmRzIEFwaUVycm9yIHtcblx0cHVibGljIGRlZmF1bHRNZXNzYWdlID0gJ1NlcnZpY2UgVW5hdmFpbGFibGUnO1xuXHRwdWJsaWMgbmFtZSA9ICdTeXN0ZW1TZXJ2aWNlVW5hdmFpbGFibGVFcnJvcic7XG59XG5cbmV4cG9ydCBjbGFzcyBTeXN0ZW1Vbmtub3duRXJyb3IgZXh0ZW5kcyBBcGlFcnJvciB7XG5cdHB1YmxpYyBkZWZhdWx0TWVzc2FnZSA9ICdVbmtub3duJztcblx0cHVibGljIG5hbWUgPSAnU3lzdGVtVW5rbm93bkVycm9yJztcbn1cblxuZXhwb3J0IGNsYXNzIE5ldHdvcmtFcnJvciBleHRlbmRzIEVycm9yIHtcblx0cHVibGljIG5hbWUgPSAnTmV0d29ya0Vycm9yJztcblx0cHVibGljIHJlcTtcblx0cHVibGljIGVycjtcblx0Y29uc3RydWN0b3IocmVxLCBlcnIpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMucmVxID0gcmVxO1xuXHRcdHRoaXMuZXJyID0gZXJyO1xuXHR9XG59XG5cbmV4cG9ydCBjbGFzcyBBcmd1bWVudEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRwdWJsaWMgbmFtZSA9ICdBcmd1bWVudEVycm9yJztcblx0cHVibGljIHJlcTtcblx0Y29uc3RydWN0b3IocmVxLCBtZXNzYWdlKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuXHRcdHRoaXMucmVxID0gcmVxO1xuXHR9XG59XG5cbmV4cG9ydCBjbGFzcyBUYXJnZXRFcnJvciBleHRlbmRzIEFwaUVycm9yIHt9XG5cbmV4cG9ydCBjbGFzcyBETlNMb29rdXBFcnJvciBleHRlbmRzIE5ldHdvcmtFcnJvciB7XG5cdHB1YmxpYyBuYW1lID0gJ0ROU0xvb2t1cEVycm9yJztcblx0Y29uc3RydWN0b3IocmVxLCBlcnIpIHtcblx0XHRzdXBlcihyZXEsIGVycik7XG5cdFx0dGhpcy5tZXNzYWdlID0gJ0ROUyBMb29rdXAgRXJyb3I6ICcgKyBlcnIuaG9zdG5hbWU7XG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbm5lY3Rpb25BYm9ydGVkRXJyb3IgZXh0ZW5kcyBOZXR3b3JrRXJyb3Ige1xuXHRwdWJsaWMgbmFtZSA9ICdDb25uZWN0aW9uQWJvcnRlZEVycm9yJztcblx0cHVibGljIG1lc3NhZ2UgPSAnQ29ubmVjdGlvbiBBYm9ydGVkIEVycm9yJztcbn1cblxuZXhwb3J0IGNsYXNzIFNvY2tldFRpbWVvdXRFcnJvciBleHRlbmRzIE5ldHdvcmtFcnJvciB7XG5cdHB1YmxpYyBuYW1lID0gJ1NvY2tldFRpbWVvdXRFcnJvcic7XG5cdHB1YmxpYyBtZXNzYWdlID0gJ1RpbWVvdXQgRXJyb3InO1xufVxuXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvblRpbWVvdXRFcnJvciBleHRlbmRzIE5ldHdvcmtFcnJvciB7XG5cdHB1YmxpYyBuYW1lID0gJ0Nvbm5lY3Rpb25UaW1lb3V0RXJyb3InO1xuXHRwdWJsaWMgbWVzc2FnZSA9ICdDb25uZWN0aW9uIFRpbWVvdXQgRXJyb3InO1xufVxuXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvblJlc2V0RXJyb3IgZXh0ZW5kcyBOZXR3b3JrRXJyb3Ige1xuXHRwdWJsaWMgbmFtZSA9ICdDb25uZWN0aW9uUmVzZXRFcnJvcic7XG5cdHB1YmxpYyBtZXNzYWdlID0gJ0Nvbm5lY3Rpb24gUmVzZXQgRXJyb3InO1xufVxuXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvblJlZnVzZWRFcnJvciBleHRlbmRzIE5ldHdvcmtFcnJvciB7XG5cdHB1YmxpYyBuYW1lID0gJ0Nvbm5lY3Rpb25SZWZ1c2VkRXJyb3InO1xuXHRwdWJsaWMgbWVzc2FnZSA9ICdDb25uZWN0aW9uIFJlZnVzZWQgRXJyb3InO1xufVxuXG4vLyBCdWlsZCBlcnJvciBmcm9tIHJvb3QgcmVzcG9uc2Vcbi8vIGh0dHBzOi8vd2lraS5hcHBuZXh1cy5jb20vZGlzcGxheS9hZG5leHVzZG9jdW1lbnRhdGlvbi9BUEkrU2VtYW50aWNzI0FQSVNlbWFudGljcy1FcnJvcnNcbmV4cG9ydCBjb25zdCBidWlsZEVycm9yID0gKHJlcT8sIHJlcz8pOiBBcGlFcnJvciA9PiB7XG5cdGxldCBFcnJvclR5cGU6IGFueSA9IEFwaUVycm9yO1xuXG5cdGlmIChyZXMpIHtcblx0XHRsZXQgc3RhdHVzQ29kZTtcblx0XHRsZXQgZXJyb3JJZDtcblx0XHRsZXQgZXJyb3JDb2RlO1xuXG5cdFx0aWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yIHx8IHJlcy5lcnJubykge1xuXHRcdFx0aWYgKHJlcy5jb2RlID09PSAnRU5PVEZPVU5EJykge1xuXHRcdFx0XHRFcnJvclR5cGUgPSBETlNMb29rdXBFcnJvcjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJlcy5jb2RlID09PSAnRUNPTk5BQk9SVEVEJykge1xuXHRcdFx0XHRFcnJvclR5cGUgPSBDb25uZWN0aW9uQWJvcnRlZEVycm9yO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmVzLmNvZGUgPT09ICdFQ09OTlJFRlVTRUQnKSB7XG5cdFx0XHRcdEVycm9yVHlwZSA9IENvbm5lY3Rpb25SZWZ1c2VkRXJyb3I7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyZXMuY29kZSA9PT0gJ0VDT05OUkVTRVQnKSB7XG5cdFx0XHRcdEVycm9yVHlwZSA9IENvbm5lY3Rpb25SZXNldEVycm9yO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmVzLmNvZGUgPT09ICdFVElNRURPVVQnKSB7XG5cdFx0XHRcdEVycm9yVHlwZSA9IENvbm5lY3Rpb25UaW1lb3V0RXJyb3I7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyZXMuY29kZSA9PT0gJ0VTT0NLRVRUSU1FRE9VVCcpIHtcblx0XHRcdFx0RXJyb3JUeXBlID0gU29ja2V0VGltZW91dEVycm9yO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHN0YXR1c0NvZGUgPSByZXMuc3RhdHVzQ29kZTtcblxuXHRcdGlmIChyZXMuYm9keSAmJiByZXMuYm9keS5yZXNwb25zZSkge1xuXHRcdFx0ZXJyb3JJZCA9IHJlcy5ib2R5LnJlc3BvbnNlLmVycm9yX2lkO1xuXHRcdFx0ZXJyb3JDb2RlID0gcmVzLmJvZHkucmVzcG9uc2UuZXJyb3JfY29kZTtcblx0XHR9XG5cblx0XHRpZiAoc3RhdHVzQ29kZSB8fCBlcnJvcklkKSB7XG5cdFx0XHQvLyBEaWZmZXJlbnRpYXRpbmcgQXV0aGVudGljYXRpb24gdnMgQXV0aG9yaXphdGlvbiBbaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNjkzNzAzMC8yNDgzMTA1XVxuXHRcdFx0aWYgKHN0YXR1c0NvZGUgPT09IDQwMSB8fCBlcnJvcklkID09PSAnTk9BVVRIJykge1xuXHRcdFx0XHRFcnJvclR5cGUgPSBOb3RBdXRoZW50aWNhdGVkRXJyb3I7XG5cdFx0XHR9IGVsc2UgaWYgKHN0YXR1c0NvZGUgPT09IDQwMyB8fCBlcnJvcklkID09PSAnVU5BVVRIJykge1xuXHRcdFx0XHRFcnJvclR5cGUgPSBOb3RBdXRob3JpemVkRXJyb3I7XG5cdFx0XHR9IGVsc2UgaWYgKGVycm9ySWQgPT09ICdTWVNURU0nICYmIGVycm9yQ29kZSA9PT0gJ1NFUlZJQ0VfVU5BVkFJTEFCTEUnKSB7XG5cdFx0XHRcdEVycm9yVHlwZSA9IFN5c3RlbVNlcnZpY2VVbmF2YWlsYWJsZUVycm9yO1xuXHRcdFx0fSBlbHNlIGlmIChzdGF0dXNDb2RlID09PSA0MDUgfHwgc3RhdHVzQ29kZSA9PT0gNDI5KSB7IC8vIExlZ2FjeSBjb2RlIDQwNVxuXHRcdFx0XHRFcnJvclR5cGUgPSBSYXRlTGltaXRFeGNlZWRlZEVycm9yO1xuXHRcdFx0fSBlbHNlIGlmIChlcnJvcklkID09PSAnU1lTVEVNJyAmJiBlcnJvckNvZGUgPT09ICdSQVRFX0VYQ0VFREVEJykgeyAvLyBMZWdhY3kgcmF0ZSBsaW1pdCBkZXRlY3Rpb24gcHJlIDEuMTdcblx0XHRcdFx0RXJyb3JUeXBlID0gUmF0ZUxpbWl0RXhjZWVkZWRFcnJvcjtcblx0XHRcdH0gZWxzZSBpZiAoZXJyb3JJZCA9PT0gJ1NZU1RFTScgJiYgZXJyb3JDb2RlID09PSAnVU5LTk9XTicpIHtcblx0XHRcdFx0RXJyb3JUeXBlID0gU3lzdGVtVW5rbm93bkVycm9yO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXcgRXJyb3JUeXBlKHJlcSwgcmVzKTtcbn07XG4iXX0= |
@@ -1,24 +0,11 @@ | ||
'use strict'; | ||
var _noop2 = require('lodash/noop'); | ||
var _noop3 = _interopRequireDefault(_noop2); | ||
var _partial2 = require('lodash/partial'); | ||
var _partial3 = _interopRequireDefault(_partial2); | ||
var _requestQueue = require('./request-queue'); | ||
var _requestQueue2 = _interopRequireDefault(_requestQueue); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var DEFAULT_READ_LIMIT = 100; | ||
var DEFAULT_READ_LIMIT_SECONDS = 60; | ||
var DEFAULT_READ_LIMIT_HEADER = 'x-ratelimit-read'; | ||
var DEFAULT_WRITE_LIMIT = 60; | ||
var DEFAULT_WRITE_LIMIT_SECONDS = 60; | ||
var DEFAULT_WRITE_LIMIT_HEADER = 'x-ratelimit-write'; | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const _ = require("lodash"); | ||
const request_queue_1 = require("./request-queue"); | ||
const DEFAULT_READ_LIMIT = 100; | ||
const DEFAULT_READ_LIMIT_SECONDS = 60; | ||
const DEFAULT_READ_LIMIT_HEADER = 'x-ratelimit-read'; | ||
const DEFAULT_WRITE_LIMIT = 60; | ||
const DEFAULT_WRITE_LIMIT_SECONDS = 60; | ||
const DEFAULT_WRITE_LIMIT_HEADER = 'x-ratelimit-write'; | ||
// Rate Limit Options: | ||
@@ -33,27 +20,25 @@ // request | ||
// onRateLimitResume | ||
module.exports = function rateLimitAdapter(options) { | ||
var readQueue = new _requestQueue2.default({ | ||
request: options.request, | ||
limit: options.rateLimitRead || DEFAULT_READ_LIMIT, | ||
limitSeconds: options.rateLimitReadSeconds || DEFAULT_READ_LIMIT_SECONDS, | ||
limitHeader: DEFAULT_READ_LIMIT_HEADER, | ||
onRateLimitExceeded: (0, _partial3.default)(options.onRateLimitExceeded || _noop3.default, 'READ'), | ||
onRateLimitPause: (0, _partial3.default)(options.onRateLimitPause || _noop3.default, 'READ'), | ||
onRateLimitResume: (0, _partial3.default)(options.onRateLimitResume || _noop3.default, 'READ') | ||
}); | ||
var writeQueue = new _requestQueue2.default({ | ||
request: options.request, | ||
limit: options.rateLimitWrite || DEFAULT_WRITE_LIMIT, | ||
limitSeconds: options.rateLimitWriteSeconds || DEFAULT_WRITE_LIMIT_SECONDS, | ||
limitHeader: DEFAULT_WRITE_LIMIT_HEADER, | ||
onRateLimitExceeded: (0, _partial3.default)(options.onRateLimitExceeded || _noop3.default, 'WRITE'), | ||
onRateLimitPause: (0, _partial3.default)(options.onRateLimitPause || _noop3.default, 'WRITE'), | ||
onRateLimitResume: (0, _partial3.default)(options.onRateLimitResume || _noop3.default, 'WRITE') | ||
}); | ||
return function rateLimitedRequest(opts) { | ||
return opts.method === 'GET' ? readQueue.enqueue(opts) : writeQueue.enqueue(opts); | ||
}; | ||
}; | ||
exports.rateLimitAdapter = (options) => { | ||
const readQueue = new request_queue_1.RequestQueue({ | ||
request: options.request, | ||
limit: options.rateLimitRead || DEFAULT_READ_LIMIT, | ||
limitSeconds: options.rateLimitReadSeconds || DEFAULT_READ_LIMIT_SECONDS, | ||
limitHeader: DEFAULT_READ_LIMIT_HEADER, | ||
onRateLimitExceeded: _.partial(options.onRateLimitExceeded || _.noop, 'READ'), | ||
onRateLimitPause: _.partial(options.onRateLimitPause || _.noop, 'READ'), | ||
onRateLimitResume: _.partial(options.onRateLimitResume || _.noop, 'READ'), | ||
}); | ||
const writeQueue = new request_queue_1.RequestQueue({ | ||
request: options.request, | ||
limit: options.rateLimitWrite || DEFAULT_WRITE_LIMIT, | ||
limitSeconds: options.rateLimitWriteSeconds || DEFAULT_WRITE_LIMIT_SECONDS, | ||
limitHeader: DEFAULT_WRITE_LIMIT_HEADER, | ||
onRateLimitExceeded: _.partial(options.onRateLimitExceeded || _.noop, 'WRITE'), | ||
onRateLimitPause: _.partial(options.onRateLimitPause || _.noop, 'WRITE'), | ||
onRateLimitResume: _.partial(options.onRateLimitResume || _.noop, 'WRITE'), | ||
}); | ||
return (opts) => { | ||
return opts.method === 'GET' ? readQueue.enqueue(opts) : writeQueue.enqueue(opts); | ||
}; | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZUxpbWl0QWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yYXRlTGltaXRBZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNEJBQTRCO0FBQzVCLG1EQUErQztBQUUvQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztBQUMvQixNQUFNLDBCQUEwQixHQUFHLEVBQUUsQ0FBQztBQUN0QyxNQUFNLHlCQUF5QixHQUFHLGtCQUFrQixDQUFDO0FBQ3JELE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBQy9CLE1BQU0sMkJBQTJCLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLE1BQU0sMEJBQTBCLEdBQUcsbUJBQW1CLENBQUM7QUFFdkQsc0JBQXNCO0FBQ3RCLFVBQVU7QUFDVixnQkFBZ0I7QUFDaEIsdUJBQXVCO0FBQ3ZCLGlCQUFpQjtBQUNqQix3QkFBd0I7QUFDeEIsc0JBQXNCO0FBQ3RCLG1CQUFtQjtBQUNuQixvQkFBb0I7QUFFUCxRQUFBLGdCQUFnQixHQUFHLENBQUMsT0FBTyxFQUFnQyxFQUFFO0lBQ3pFLE1BQU0sU0FBUyxHQUFHLElBQUksNEJBQVksQ0FBQztRQUNsQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDeEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxhQUFhLElBQUksa0JBQWtCO1FBQ2xELFlBQVksRUFBRSxPQUFPLENBQUMsb0JBQW9CLElBQUksMEJBQTBCO1FBQ3hFLFdBQVcsRUFBRSx5QkFBeUI7UUFDdEMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUJBQW1CLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7UUFDN0UsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7UUFDdkUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7S0FDekUsQ0FBQyxDQUFDO0lBRUgsTUFBTSxVQUFVLEdBQUcsSUFBSSw0QkFBWSxDQUFDO1FBQ25DLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixLQUFLLEVBQUUsT0FBTyxDQUFDLGNBQWMsSUFBSSxtQkFBbUI7UUFDcEQsWUFBWSxFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsSUFBSSwyQkFBMkI7UUFDMUUsV0FBVyxFQUFFLDBCQUEwQjtRQUN2QyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQztRQUM5RSxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQztRQUN4RSxpQkFBaUIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQztLQUMxRSxDQUFDLENBQUM7SUFDSCxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDZixPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25GLENBQUMsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFJlcXVlc3RRdWV1ZSB9IGZyb20gJy4vcmVxdWVzdC1xdWV1ZSc7XG5cbmNvbnN0IERFRkFVTFRfUkVBRF9MSU1JVCA9IDEwMDtcbmNvbnN0IERFRkFVTFRfUkVBRF9MSU1JVF9TRUNPTkRTID0gNjA7XG5jb25zdCBERUZBVUxUX1JFQURfTElNSVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXJlYWQnO1xuY29uc3QgREVGQVVMVF9XUklURV9MSU1JVCA9IDYwO1xuY29uc3QgREVGQVVMVF9XUklURV9MSU1JVF9TRUNPTkRTID0gNjA7XG5jb25zdCBERUZBVUxUX1dSSVRFX0xJTUlUX0hFQURFUiA9ICd4LXJhdGVsaW1pdC13cml0ZSc7XG5cbi8vIFJhdGUgTGltaXQgT3B0aW9uczpcbi8vIHJlcXVlc3Rcbi8vIHJhdGVMaW1pdFJlYWRcbi8vIHJhdGVMaW1pdFJlYWRTZWNvbmRzXG4vLyByYXRlTGltaXRXcml0ZVxuLy8gcmF0ZUxpbWl0V3JpdGVTZWNvbmRzXG4vLyBvblJhdGVMaW1pdEV4Y2VlZGVkXG4vLyBvblJhdGVMaW1pdFBhdXNlXG4vLyBvblJhdGVMaW1pdFJlc3VtZVxuXG5leHBvcnQgY29uc3QgcmF0ZUxpbWl0QWRhcHRlciA9IChvcHRpb25zKTogKG9wdHM6IGFueSkgPT4gUHJvbWlzZTx2b2lkPiA9PiB7XG5cdGNvbnN0IHJlYWRRdWV1ZSA9IG5ldyBSZXF1ZXN0UXVldWUoe1xuXHRcdHJlcXVlc3Q6IG9wdGlvbnMucmVxdWVzdCxcblx0XHRsaW1pdDogb3B0aW9ucy5yYXRlTGltaXRSZWFkIHx8IERFRkFVTFRfUkVBRF9MSU1JVCxcblx0XHRsaW1pdFNlY29uZHM6IG9wdGlvbnMucmF0ZUxpbWl0UmVhZFNlY29uZHMgfHwgREVGQVVMVF9SRUFEX0xJTUlUX1NFQ09ORFMsXG5cdFx0bGltaXRIZWFkZXI6IERFRkFVTFRfUkVBRF9MSU1JVF9IRUFERVIsXG5cdFx0b25SYXRlTGltaXRFeGNlZWRlZDogXy5wYXJ0aWFsKG9wdGlvbnMub25SYXRlTGltaXRFeGNlZWRlZCB8fCBfLm5vb3AsICdSRUFEJyksXG5cdFx0b25SYXRlTGltaXRQYXVzZTogXy5wYXJ0aWFsKG9wdGlvbnMub25SYXRlTGltaXRQYXVzZSB8fCBfLm5vb3AsICdSRUFEJyksXG5cdFx0b25SYXRlTGltaXRSZXN1bWU6IF8ucGFydGlhbChvcHRpb25zLm9uUmF0ZUxpbWl0UmVzdW1lIHx8IF8ubm9vcCwgJ1JFQUQnKSxcblx0fSk7XG5cblx0Y29uc3Qgd3JpdGVRdWV1ZSA9IG5ldyBSZXF1ZXN0UXVldWUoe1xuXHRcdHJlcXVlc3Q6IG9wdGlvbnMucmVxdWVzdCxcblx0XHRsaW1pdDogb3B0aW9ucy5yYXRlTGltaXRXcml0ZSB8fCBERUZBVUxUX1dSSVRFX0xJTUlULFxuXHRcdGxpbWl0U2Vjb25kczogb3B0aW9ucy5yYXRlTGltaXRXcml0ZVNlY29uZHMgfHwgREVGQVVMVF9XUklURV9MSU1JVF9TRUNPTkRTLFxuXHRcdGxpbWl0SGVhZGVyOiBERUZBVUxUX1dSSVRFX0xJTUlUX0hFQURFUixcblx0XHRvblJhdGVMaW1pdEV4Y2VlZGVkOiBfLnBhcnRpYWwob3B0aW9ucy5vblJhdGVMaW1pdEV4Y2VlZGVkIHx8IF8ubm9vcCwgJ1dSSVRFJyksXG5cdFx0b25SYXRlTGltaXRQYXVzZTogXy5wYXJ0aWFsKG9wdGlvbnMub25SYXRlTGltaXRQYXVzZSB8fCBfLm5vb3AsICdXUklURScpLFxuXHRcdG9uUmF0ZUxpbWl0UmVzdW1lOiBfLnBhcnRpYWwob3B0aW9ucy5vblJhdGVMaW1pdFJlc3VtZSB8fCBfLm5vb3AsICdXUklURScpLFxuXHR9KTtcblx0cmV0dXJuIChvcHRzKSA9PiB7XG5cdFx0cmV0dXJuIG9wdHMubWV0aG9kID09PSAnR0VUJyA/IHJlYWRRdWV1ZS5lbnF1ZXVlKG9wdHMpIDogd3JpdGVRdWV1ZS5lbnF1ZXVlKG9wdHMpO1xuXHR9O1xufTtcbiJdfQ== |
@@ -1,138 +0,106 @@ | ||
'use strict'; | ||
var _isNil2 = require('lodash/isNil'); | ||
var _isNil3 = _interopRequireDefault(_isNil2); | ||
var _noop2 = require('lodash/noop'); | ||
var _noop3 = _interopRequireDefault(_noop2); | ||
var _assign2 = require('lodash/assign'); | ||
var _assign3 = _interopRequireDefault(_assign2); | ||
var _errors = require('./errors'); | ||
var _errors2 = _interopRequireDefault(_errors); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var DEFAULT_LIMIT = 60; | ||
var DEFAULT_LIMIT_SECONDS = 60; | ||
var DEFAULT_LIMIT_SECONDS_BUFFER = 1; | ||
var DEFAULT_LIMIT_COUNT_BUFFER = 4; | ||
var ONE_SECOND = 1000; | ||
var DEFAULT_RATE_LIMIT_TIMEOUT = DEFAULT_LIMIT_SECONDS * ONE_SECOND; | ||
var RETRY_AFTER_BUFFER_TIME = ONE_SECOND; | ||
function RequestQueue(options) { | ||
this.options = (0, _assign3.default)({ | ||
request: null, | ||
limit: DEFAULT_LIMIT, | ||
limitSeconds: DEFAULT_LIMIT_SECONDS, | ||
onRateLimitExceeded: _noop3.default, | ||
onRateLimitPause: _noop3.default, | ||
onRateLimitResume: _noop3.default | ||
}, options); | ||
this.queue = []; | ||
this.limitCount = 0; | ||
this._resetTimeout(); | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const _ = require("lodash"); | ||
const errors = require("./errors"); | ||
const DEFAULT_LIMIT = 60; | ||
const DEFAULT_LIMIT_SECONDS = 60; | ||
const DEFAULT_LIMIT_SECONDS_BUFFER = 1; | ||
const DEFAULT_LIMIT_COUNT_BUFFER = 4; | ||
const ONE_SECOND = 1000; | ||
const DEFAULT_RATE_LIMIT_TIMEOUT = DEFAULT_LIMIT_SECONDS * ONE_SECOND; | ||
const RETRY_AFTER_BUFFER_TIME = ONE_SECOND; | ||
class RequestQueue { | ||
constructor(options) { | ||
this.options = _.assign({ | ||
request: null, | ||
limit: DEFAULT_LIMIT, | ||
limitSeconds: DEFAULT_LIMIT_SECONDS, | ||
onRateLimitExceeded: _.noop, | ||
onRateLimitPause: _.noop, | ||
onRateLimitResume: _.noop, | ||
}, options); | ||
this.queue = []; | ||
this.limitCount = 0; | ||
this._resetTimeout(); | ||
} | ||
enqueue(opts) { | ||
return new Promise((resolve, reject) => { | ||
this.queue.push({ | ||
opts, | ||
resolve, | ||
reject, | ||
}); | ||
this._processQueue(); | ||
}); | ||
} | ||
dequeue() { | ||
return this.queue.shift(); | ||
} | ||
paused() { | ||
return !!this.timeoutId; | ||
} | ||
_processQueue(retryAfter) { | ||
if (this.queue.length > 0) { // if items left to process | ||
if (this.limitCount < Math.max(this.options.limit - DEFAULT_LIMIT_COUNT_BUFFER, 1)) { // if not over limit | ||
this.limitCount++; | ||
this._execute(this.dequeue()); | ||
this._processQueue(); | ||
} | ||
else if (!this.paused()) { // schedule | ||
this.options.onRateLimitPause(); | ||
this._schedule(retryAfter); | ||
} | ||
} | ||
} | ||
_schedule(retryAfter) { | ||
if (!this.timeoutId) { | ||
const delay = Math.max(retryAfter || (this.expires - Date.now()), 0); | ||
this.timeoutId = setTimeout(() => { | ||
this._resetTimeout(); | ||
this.limitCount = 0; | ||
this.options.onRateLimitResume(); | ||
this._processQueue(); | ||
}, delay); | ||
} | ||
} | ||
_resetTimeout() { | ||
if (this.timeoutId) { | ||
clearTimeout(this.timeoutId); | ||
this.timeoutId = null; | ||
} | ||
this.expires = Date.now() + ((this.options.limitSeconds + DEFAULT_LIMIT_SECONDS_BUFFER) * ONE_SECOND); | ||
} | ||
_execute(reqInfo) { | ||
return this.options.request(reqInfo.opts).then((res) => { | ||
this._checkHeaders(res); | ||
return reqInfo.resolve(res); | ||
}).catch((err) => { | ||
if (err instanceof errors.RateLimitExceededError) { | ||
this.options.onRateLimitExceeded(err); | ||
if (_.isNil(err.retryAfter)) { | ||
// Abort retry due to missing retryAfter | ||
return reqInfo.reject(err); | ||
} | ||
const retryAfter = err.retryAfter ? (err.retryAfter * ONE_SECOND) + RETRY_AFTER_BUFFER_TIME : DEFAULT_RATE_LIMIT_TIMEOUT; | ||
this.limitCount = Infinity; | ||
this.queue.push(reqInfo); | ||
this._processQueue(retryAfter); | ||
} | ||
else { | ||
return reqInfo.reject(err); | ||
} | ||
}); | ||
} | ||
_checkHeaders(res) { | ||
if (res.headers[this.options.limitHeader]) { | ||
const limit = parseInt(res.headers[this.options.limitHeader], 10) || DEFAULT_LIMIT; | ||
if (limit !== this.options.limit) { | ||
this.options.limit = limit; | ||
this._resetTimeout(); | ||
this._processQueue(); | ||
} | ||
} | ||
} | ||
} | ||
RequestQueue.prototype.enqueue = function _enqueue(opts) { | ||
var _self = this; | ||
return new Promise(function queuedPromise(resolve, reject) { | ||
_self.queue.push({ | ||
opts: opts, | ||
resolve: resolve, | ||
reject: reject | ||
}); | ||
_self._processQueue(); | ||
}); | ||
}; | ||
RequestQueue.prototype.dequeue = function _dequeue() { | ||
var _self = this; | ||
return _self.queue.shift(); | ||
}; | ||
RequestQueue.prototype.paused = function paused() { | ||
var _self = this; | ||
return !!_self.timeoutId; | ||
}; | ||
RequestQueue.prototype._processQueue = function _processQueue(retryAfter) { | ||
var _self = this; | ||
if (_self.queue.length > 0) { | ||
// if items left to process | ||
if (_self.limitCount < Math.max(_self.options.limit - DEFAULT_LIMIT_COUNT_BUFFER, 1)) { | ||
// if not over limit | ||
_self.limitCount++; | ||
_self._execute(_self.dequeue()); | ||
_self._processQueue(); | ||
} else if (!_self.paused()) { | ||
// schedule | ||
_self.options.onRateLimitPause(); | ||
_self._schedule(retryAfter); | ||
} | ||
} | ||
}; | ||
RequestQueue.prototype._schedule = function _schedule(retryAfter) { | ||
var _self = this; | ||
if (!this.timeoutId) { | ||
var delay = Math.max(retryAfter || this.expires - Date.now(), 0); | ||
_self.timeoutId = setTimeout(function scheduleRun() { | ||
_self._resetTimeout(); | ||
_self.limitCount = 0; | ||
_self.options.onRateLimitResume(); | ||
_self._processQueue(); | ||
}, delay); | ||
} | ||
}; | ||
RequestQueue.prototype._resetTimeout = function _resetTimeout() { | ||
var _self = this; | ||
if (this.timeoutId) { | ||
clearTimeout(_self.timeoutId); | ||
_self.timeoutId = null; | ||
} | ||
_self.expires = Date.now() + (_self.options.limitSeconds + DEFAULT_LIMIT_SECONDS_BUFFER) * ONE_SECOND; | ||
}; | ||
RequestQueue.prototype._execute = function _execute(reqInfo) { | ||
var _self = this; | ||
return _self.options.request(reqInfo.opts).then(function success(res) { | ||
_self._checkHeaders(res); | ||
return reqInfo.resolve(res); | ||
}).catch(function failure(err) { | ||
if (err instanceof _errors2.default.RateLimitExceededError) { | ||
_self.options.onRateLimitExceeded(err); | ||
if ((0, _isNil3.default)(err.retryAfter)) { | ||
// Abort retry due to missing retryAfter | ||
return reqInfo.reject(err); | ||
} | ||
var retryAfter = err.retryAfter ? err.retryAfter * ONE_SECOND + RETRY_AFTER_BUFFER_TIME : DEFAULT_RATE_LIMIT_TIMEOUT; | ||
_self.limitCount = Infinity; | ||
_self.queue.push(reqInfo); | ||
_self._processQueue(retryAfter); | ||
} else { | ||
return reqInfo.reject(err); | ||
} | ||
}); | ||
}; | ||
RequestQueue.prototype._checkHeaders = function _checkHeaders(res) { | ||
var _self = this; | ||
if (res.headers[_self.options.limitHeader]) { | ||
var limit = parseInt(res.headers[_self.options.limitHeader], 10) || DEFAULT_LIMIT; | ||
if (limit !== _self.options.limit) { | ||
_self.options.limit = limit; | ||
_self._resetTimeout(); | ||
_self._processQueue(); | ||
} | ||
} | ||
}; | ||
module.exports = RequestQueue; | ||
exports.RequestQueue = RequestQueue; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1xdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZXF1ZXN0LXF1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNEJBQTRCO0FBQzVCLG1DQUFtQztBQUVuQyxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDekIsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUM7QUFDakMsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLENBQUM7QUFDdkMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLENBQUM7QUFDckMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLE1BQU0sMEJBQTBCLEdBQUcscUJBQXFCLEdBQUcsVUFBVSxDQUFDO0FBQ3RFLE1BQU0sdUJBQXVCLEdBQUcsVUFBVSxDQUFDO0FBWTNDLE1BQWEsWUFBWTtJQU94QixZQUFZLE9BQTZCO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN2QixPQUFPLEVBQUUsSUFBSTtZQUNiLEtBQUssRUFBRSxhQUFhO1lBQ3BCLFlBQVksRUFBRSxxQkFBcUI7WUFDbkMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLElBQUk7WUFDM0IsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLElBQUk7WUFDeEIsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLElBQUk7U0FDekIsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNaLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU0sT0FBTyxDQUFDLElBQUk7UUFDbEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDZixJQUFJO2dCQUNKLE9BQU87Z0JB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QUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzNCO2dCQUNELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUM7Z0JBQ3pILElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO2dCQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUMvQjtpQkFBTTtnQkFDTixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDM0I7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxhQUFhLENBQUMsR0FBRztRQUN4QixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUMxQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FBQztZQUNuRixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUNyQjtTQUNEO0lBQ0YsQ0FBQztDQUNEO0FBeEdELG9DQXdHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIGVycm9ycyBmcm9tICcuL2Vycm9ycyc7XG5cbmNvbnN0IERFRkFVTFRfTElNSVQgPSA2MDtcbmNvbnN0IERFRkFVTFRfTElNSVRfU0VDT05EUyA9IDYwO1xuY29uc3QgREVGQVVMVF9MSU1JVF9TRUNPTkRTX0JVRkZFUiA9IDE7XG5jb25zdCBERUZBVUxUX0xJTUlUX0NPVU5UX0JVRkZFUiA9IDQ7XG5jb25zdCBPTkVfU0VDT05EID0gMTAwMDtcbmNvbnN0IERFRkFVTFRfUkFURV9MSU1JVF9USU1FT1VUID0gREVGQVVMVF9MSU1JVF9TRUNPTkRTICogT05FX1NFQ09ORDtcbmNvbnN0IFJFVFJZX0FGVEVSX0JVRkZFUl9USU1FID0gT05FX1NFQ09ORDtcblxuZXhwb3J0IGludGVyZmFjZSBJUmVxdWVzdFF1ZXVlT3B0aW9ucyB7XG5cdHJlcXVlc3Q6IGFueTtcblx0bGltaXQ6IG51bWJlcjtcblx0bGltaXRTZWNvbmRzOiBudW1iZXI7XG5cdGxpbWl0SGVhZGVyOiBzdHJpbmc7XG5cdG9uUmF0ZUxpbWl0RXhjZWVkZWQ6IGFueTtcblx0b25SYXRlTGltaXRQYXVzZTogYW55O1xuXHRvblJhdGVMaW1pdFJlc3VtZTogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgUmVxdWVzdFF1ZXVlIHtcblx0cHJpdmF0ZSBvcHRpb25zOiBJUmVxdWVzdFF1ZXVlT3B0aW9ucztcblx0cHJpdmF0ZSBxdWV1ZTogYW55W107XG5cdHByaXZhdGUgbGltaXRDb3VudDogbnVtYmVyO1xuXHRwcml2YXRlIGV4cGlyZXM6IG51bWJlcjtcblx0cHJpdmF0ZSB0aW1lb3V0SWQ6IGFueTtcblxuXHRjb25zdHJ1Y3RvcihvcHRpb25zOiBJUmVxdWVzdFF1ZXVlT3B0aW9ucykge1xuXHRcdHRoaXMub3B0aW9ucyA9IF8uYXNzaWduKHtcblx0XHRcdHJlcXVlc3Q6IG51bGwsXG5cdFx0XHRsaW1pdDogREVGQVVMVF9MSU1JVCxcblx0XHRcdGxpbWl0U2Vjb25kczogREVGQVVMVF9MSU1JVF9TRUNPTkRTLFxuXHRcdFx0b25SYXRlTGltaXRFeGNlZWRlZDogXy5ub29wLFxuXHRcdFx0b25SYXRlTGltaXRQYXVzZTogXy5ub29wLFxuXHRcdFx0b25SYXRlTGltaXRSZXN1bWU6IF8ubm9vcCxcblx0XHR9LCBvcHRpb25zKTtcblx0XHR0aGlzLnF1ZXVlID0gW107XG5cdFx0dGhpcy5saW1pdENvdW50ID0gMDtcblx0XHR0aGlzLl9yZXNldFRpbWVvdXQoKTtcblx0fVxuXG5cdHB1YmxpYyBlbnF1ZXVlKG9wdHMpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5xdWV1ZS5wdXNoKHtcblx0XHRcdFx0b3B0cyxcblx0XHRcdFx0cmVzb2x2ZSxcblx0XHRcdFx0cmVqZWN0LFxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLl9wcm9jZXNzUXVldWUoKTtcblx0XHR9KTtcblx0fVxuXG5cdHB1YmxpYyBkZXF1ZXVlKCk6ICgpID0+IGFueVtdIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuXHR9XG5cblx0cHVibGljIHBhdXNlZCgpOiBhbnkge1xuXHRcdHJldHVybiAhIXRoaXMudGltZW91dElkO1xuXHR9XG5cblx0cHJpdmF0ZSBfcHJvY2Vzc1F1ZXVlKHJldHJ5QWZ0ZXI/KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMucXVldWUubGVuZ3RoID4gMCkgeyAvLyBpZiBpdGVtcyBsZWZ0IHRvIHByb2Nlc3Ncblx0XHRcdGlmICh0aGlzLmxpbWl0Q291bnQgPCBNYXRoLm1heCh0aGlzLm9wdGlvbnMubGltaXQgLSBERUZBVUxUX0xJTUlUX0NPVU5UX0JVRkZFUiwgMSkpIHsgLy8gaWYgbm90IG92ZXIgbGltaXRcblx0XHRcdFx0dGhpcy5saW1pdENvdW50Kys7XG5cdFx0XHRcdHRoaXMuX2V4ZWN1dGUodGhpcy5kZXF1ZXVlKCkpO1xuXHRcdFx0XHR0aGlzLl9wcm9jZXNzUXVldWUoKTtcblx0XHRcdH0gZWxzZSBpZiAoIXRoaXMucGF1c2VkKCkpIHsgLy8gc2NoZWR1bGVcblx0XHRcdFx0dGhpcy5vcHRpb25zLm9uUmF0ZUxpbWl0UGF1c2UoKTtcblx0XHRcdFx0dGhpcy5fc2NoZWR1bGUocmV0cnlBZnRlcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBfc2NoZWR1bGUocmV0cnlBZnRlcj8pOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMudGltZW91dElkKSB7XG5cdFx0XHRjb25zdCBkZWxheSA9IE1hdGgubWF4KHJldHJ5QWZ0ZXIgfHwgKHRoaXMuZXhwaXJlcyAtIERhdGUubm93KCkpLCAwKTtcblx0XHRcdHRoaXMudGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3Jlc2V0VGltZW91dCgpO1xuXHRcdFx0XHR0aGlzLmxpbWl0Q291bnQgPSAwO1xuXHRcdFx0XHR0aGlzLm9wdGlvbnMub25SYXRlTGltaXRSZXN1bWUoKTtcblx0XHRcdFx0dGhpcy5fcHJvY2Vzc1F1ZXVlKCk7XG5cdFx0XHR9LCBkZWxheSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBfcmVzZXRUaW1lb3V0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnRpbWVvdXRJZCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dElkKTtcblx0XHRcdHRoaXMudGltZW91dElkID0gbnVsbDtcblx0XHR9XG5cdFx0dGhpcy5leHBpcmVzID0gRGF0ZS5ub3coKSArICgodGhpcy5vcHRpb25zLmxpbWl0U2Vjb25kcyArIERFRkFVTFRfTElNSVRfU0VDT05EU19CVUZGRVIpICogT05FX1NFQ09ORCk7XG5cdH1cblxuXHRwcml2YXRlIF9leGVjdXRlKHJlcUluZm8pOiAoKSA9PiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm9wdGlvbnMucmVxdWVzdChyZXFJbmZvLm9wdHMpLnRoZW4oKHJlcykgPT4ge1xuXHRcdFx0dGhpcy5fY2hlY2tIZWFkZXJzKHJlcyk7XG5cdFx0XHRyZXR1cm4gcmVxSW5mby5yZXNvbHZlKHJlcyk7XG5cdFx0fSkuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0aWYgKGVyciBpbnN0YW5jZW9mIGVycm9ycy5SYXRlTGltaXRFeGNlZWRlZEVycm9yKSB7XG5cdFx0XHRcdHRoaXMub3B0aW9ucy5vblJhdGVMaW1pdEV4Y2VlZGVkKGVycik7XG5cdFx0XHRcdGlmIChfLmlzTmlsKGVyci5yZXRyeUFmdGVyKSkge1xuXHRcdFx0XHRcdC8vIEFib3J0IHJldHJ5IGR1ZSB0byBtaXNzaW5nIHJldHJ5QWZ0ZXJcblx0XHRcdFx0XHRyZXR1cm4gcmVxSW5mby5yZWplY3QoZXJyKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXRyeUFmdGVyID0gZXJyLnJldHJ5QWZ0ZXIgPyAoZXJyLnJldHJ5QWZ0ZXIgKiBPTkVfU0VDT05EKSArIFJFVFJZX0FGVEVSX0JVRkZFUl9USU1FIDogREVGQVVMVF9SQVRFX0xJTUlUX1RJTUVPVVQ7XG5cdFx0XHRcdHRoaXMubGltaXRDb3VudCA9IEluZmluaXR5O1xuXHRcdFx0XHR0aGlzLnF1ZXVlLnB1c2gocmVxSW5mbyk7XG5cdFx0XHRcdHRoaXMuX3Byb2Nlc3NRdWV1ZShyZXRyeUFmdGVyKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiByZXFJbmZvLnJlamVjdChlcnIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBfY2hlY2tIZWFkZXJzKHJlcyk6IHZvaWQge1xuXHRcdGlmIChyZXMuaGVhZGVyc1t0aGlzLm9wdGlvbnMubGltaXRIZWFkZXJdKSB7XG5cdFx0XHRjb25zdCBsaW1pdCA9IHBhcnNlSW50KHJlcy5oZWFkZXJzW3RoaXMub3B0aW9ucy5saW1pdEhlYWRlcl0sIDEwKSB8fCBERUZBVUxUX0xJTUlUO1xuXHRcdFx0aWYgKGxpbWl0ICE9PSB0aGlzLm9wdGlvbnMubGltaXQpIHtcblx0XHRcdFx0dGhpcy5vcHRpb25zLmxpbWl0ID0gbGltaXQ7XG5cdFx0XHRcdHRoaXMuX3Jlc2V0VGltZW91dCgpO1xuXHRcdFx0XHR0aGlzLl9wcm9jZXNzUXVldWUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiJdfQ== |
@@ -1,43 +0,28 @@ | ||
'use strict'; | ||
var _noop2 = require('lodash/noop'); | ||
var _noop3 = _interopRequireDefault(_noop2); | ||
var _once2 = require('lodash/once'); | ||
var _once3 = _interopRequireDefault(_once2); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
/* eslint no-console: 0 */ | ||
var warnings = { | ||
experimental: {}, | ||
deprecated: {} | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const _ = require("lodash"); | ||
const warnings = { | ||
experimental: {}, | ||
deprecated: {}, | ||
}; | ||
function experimentalMethod(methodName, className) { | ||
if (!warnings.experimental[methodName + className]) { | ||
warnings.experimental[methodName + className] = (0, _once3.default)(function warnOnce() { | ||
var log = (console.warn || console.log || _noop3.default).bind(console); | ||
log('Method ' + className + '.' + methodName + ' is experimental, use with caution.'); | ||
}); | ||
} | ||
warnings.experimental[methodName + className](); | ||
} | ||
function deprecatedMethod(methodName, className, useName) { | ||
if (!warnings.deprecated[methodName + className + useName]) { | ||
warnings.deprecated[methodName + className + useName] = (0, _once3.default)(function warnOnce() { | ||
var log = (console.warn || console.log || _noop3.default).bind(console); | ||
log('Method ' + className + '.' + methodName + ' is deprecated, use `' + className + '.' + useName + '` instead'); | ||
}); | ||
} | ||
warnings.deprecated[methodName + className + useName](); | ||
} | ||
module.exports = { | ||
deprecated: { method: deprecatedMethod }, | ||
experimental: { method: experimentalMethod } | ||
}; | ||
exports.experimentalMethod = (methodName, className) => { | ||
if (!warnings.experimental[methodName + className]) { | ||
warnings.experimental[methodName + className] = _.once(function warnOnce() { | ||
// tslint:disable-next-line:no-console | ||
const log = (console.warn || console.log || _.noop).bind(console); | ||
log(`Method ${className}.${methodName} is experimental, use with caution.`); | ||
}); | ||
} | ||
warnings.experimental[methodName + className](); | ||
}; | ||
exports.deprecatedMethod = (methodName, className, useName) => { | ||
if (!warnings.deprecated[methodName + className + useName]) { | ||
warnings.deprecated[methodName + className + useName] = _.once(function warnOnce() { | ||
// tslint:disable-next-line:no-console | ||
const log = (console.warn || console.log || _.noop).bind(console); | ||
log(`Method ${className}.${methodName} is deprecated, use ${className}.${useName} instead.`); | ||
}); | ||
} | ||
warnings.deprecated[methodName + className + useName](); | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhYmlsaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0YWJpbGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDRCQUE0QjtBQUU1QixNQUFNLFFBQVEsR0FBRztJQUNoQixZQUFZLEVBQUUsRUFBRTtJQUNoQixVQUFVLEVBQUUsRUFBRTtDQUNkLENBQUM7QUFFVyxRQUFBLGtCQUFrQixHQUFHLENBQUMsVUFBa0IsRUFBRSxTQUFpQixFQUFRLEVBQUU7SUFDakYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxFQUFFO1FBQ25ELFFBQVEsQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxRQUFRO1lBQ3ZFLHNDQUFzQztZQUN0QyxNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xFLEdBQUcsQ0FBQyxVQUFVLFNBQVMsSUFBSSxVQUFVLHFDQUFxQyxDQUFDLENBQUM7UUFDN0UsQ0FBQyxDQUFDLENBQUM7S0FDSDtJQUNELFFBQVEsQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUM7QUFDakQsQ0FBQyxDQUFDO0FBRVcsUUFBQSxnQkFBZ0IsR0FBRyxDQUFDLFVBQWtCLEVBQUUsU0FBaUIsRUFBRSxPQUFlLEVBQVEsRUFBRTtJQUNoRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsU0FBUyxHQUFHLE9BQU8sQ0FBQyxFQUFFO1FBQzNELFFBQVEsQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsUUFBUTtZQUMvRSxzQ0FBc0M7WUFDdEMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsRSxHQUFHLENBQUMsVUFBVSxTQUFTLElBQUksVUFBVSx1QkFBdUIsU0FBUyxJQUFJLE9BQVEsV0FBVyxDQUFDLENBQUM7UUFDL0YsQ0FBQyxDQUFDLENBQUM7S0FDSDtJQUNELFFBQVEsQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO0FBQ3pELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcblxuY29uc3Qgd2FybmluZ3MgPSB7XG5cdGV4cGVyaW1lbnRhbDoge30sXG5cdGRlcHJlY2F0ZWQ6IHt9LFxufTtcblxuZXhwb3J0IGNvbnN0IGV4cGVyaW1lbnRhbE1ldGhvZCA9IChtZXRob2ROYW1lOiBzdHJpbmcsIGNsYXNzTmFtZTogc3RyaW5nKTogdm9pZCA9PiB7XG5cdGlmICghd2FybmluZ3MuZXhwZXJpbWVudGFsW21ldGhvZE5hbWUgKyBjbGFzc05hbWVdKSB7XG5cdFx0d2FybmluZ3MuZXhwZXJpbWVudGFsW21ldGhvZE5hbWUgKyBjbGFzc05hbWVdID0gXy5vbmNlKGZ1bmN0aW9uIHdhcm5PbmNlKCkge1xuXHRcdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWNvbnNvbGVcblx0XHRcdGNvbnN0IGxvZyA9IChjb25zb2xlLndhcm4gfHwgY29uc29sZS5sb2cgfHwgXy5ub29wKS5iaW5kKGNvbnNvbGUpO1xuXHRcdFx0bG9nKGBNZXRob2QgJHtjbGFzc05hbWV9LiR7bWV0aG9kTmFtZX0gaXMgZXhwZXJpbWVudGFsLCB1c2Ugd2l0aCBjYXV0aW9uLmApO1xuXHRcdH0pO1xuXHR9XG5cdHdhcm5pbmdzLmV4cGVyaW1lbnRhbFttZXRob2ROYW1lICsgY2xhc3NOYW1lXSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlcHJlY2F0ZWRNZXRob2QgPSAobWV0aG9kTmFtZTogc3RyaW5nLCBjbGFzc05hbWU6IHN0cmluZywgdXNlTmFtZTogc3RyaW5nKTogdm9pZCA9PiB7XG5cdGlmICghd2FybmluZ3MuZGVwcmVjYXRlZFttZXRob2ROYW1lICsgY2xhc3NOYW1lICsgdXNlTmFtZV0pIHtcblx0XHR3YXJuaW5ncy5kZXByZWNhdGVkW21ldGhvZE5hbWUgKyBjbGFzc05hbWUgKyB1c2VOYW1lXSA9IF8ub25jZShmdW5jdGlvbiB3YXJuT25jZSgpIHtcblx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1jb25zb2xlXG5cdFx0XHRjb25zdCBsb2cgPSAoY29uc29sZS53YXJuIHx8IGNvbnNvbGUubG9nIHx8IF8ubm9vcCkuYmluZChjb25zb2xlKTtcblx0XHRcdGxvZyhgTWV0aG9kICR7Y2xhc3NOYW1lfS4ke21ldGhvZE5hbWV9IGlzIGRlcHJlY2F0ZWQsIHVzZSAke2NsYXNzTmFtZX0uJHt1c2VOYW1lIH0gaW5zdGVhZC5gKTtcblx0XHR9KTtcblx0fVxuXHR3YXJuaW5ncy5kZXByZWNhdGVkW21ldGhvZE5hbWUgKyBjbGFzc05hbWUgKyB1c2VOYW1lXSgpO1xufTtcbiJdfQ== |
{ | ||
"name": "anx-api", | ||
"version": "6.1.0", | ||
"version": "7.0.0-1", | ||
"description": "AppNexus Api Wrapper", | ||
"homepage": "https://github.com/appnexus/anx-api", | ||
"bugs": "https://github.com/appnexus/anx-api/issues", | ||
"main": "index.js", | ||
"main": "lib/index.js", | ||
"repository": { | ||
@@ -13,7 +13,8 @@ "type": "git", | ||
"scripts": { | ||
"build": "babel src -d lib", | ||
"build": "npm run clean && tsc", | ||
"clean": "rm -rf coverage && rm -rf lib && mkdir lib", | ||
"cover": "jest src --coverage", | ||
"dependency-check": "npm audit", | ||
"lint": "eslint src --quiet", | ||
"lint-fix": "eslint src --fix", | ||
"lint": "tslint --project tsconfig.json -c tslint.json 'src/**/*.ts'", | ||
"lint-fix": "tslint --project tsconfig.json -c tslint.json 'src/**/*.ts' --fix", | ||
"preversion": "npm run build", | ||
@@ -46,20 +47,40 @@ "test": "jest src", | ||
"devDependencies": { | ||
"babel-cli": "^6.26.0", | ||
"babel-core": "^6.26.3", | ||
"babel-jest": "^23.4.2", | ||
"babel-plugin-lodash": "^3.3.4", | ||
"babel-preset-env": "^1.7.0", | ||
"@types/axios": "^0.14.0", | ||
"@types/jest": "^23.3.1", | ||
"@types/lodash": "^4.14.115", | ||
"@types/node": "^10.5.5", | ||
"@types/qs": "^6.5.1", | ||
"@types/url-join": "^0.8.2", | ||
"coveralls": "^3.0.2", | ||
"eslint": "^5.2.0", | ||
"eslint-config-appnexus": "^1.6.0", | ||
"eslint-plugin-import": "^2.13.0", | ||
"eslint-plugin-lodash": "^2.7.0", | ||
"eslint-plugin-promise": "^3.8.0", | ||
"jest": "^23.4.2", | ||
"nock": "^9.4.4", | ||
"pre-push": "^0.1.1" | ||
"pre-push": "^0.1.1", | ||
"ts-jest": "^23.0.1", | ||
"tslint": "^5.11.0", | ||
"typescript": "^3.0.1" | ||
}, | ||
"jest": { | ||
"testEnvironment": "node" | ||
"testEnvironment": "node", | ||
"coverageDirectory": "../coverage/", | ||
"collectCoverageFrom": [ | ||
"**/*.js", | ||
"**/*.ts", | ||
"!constants/**", | ||
"!generated/**", | ||
"!*.*" | ||
], | ||
"coverageReporters": [ | ||
"html" | ||
], | ||
"rootDir": "src", | ||
"moduleFileExtensions": [ | ||
"ts", | ||
"js", | ||
"json" | ||
], | ||
"testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|js)$", | ||
"transform": { | ||
"^.+\\.ts$": "ts-jest" | ||
} | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
214230
13
47
2907
1
1