rqlite-js 2.5.5 → 2.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es6/api/data/index.js +6 -0
- package/es6/http-request/index.js +39 -7
- package/es6/index.js +6 -0
- package/jsconfig.json +2 -1
- package/lib/api/backup/index.js +18 -17
- package/lib/api/backup/index.js.map +1 -1
- package/lib/api/client/index.js +10 -9
- package/lib/api/client/index.js.map +1 -1
- package/lib/api/data/index.js +24 -17
- package/lib/api/data/index.js.map +1 -1
- package/lib/api/results/data-result-error.js +2 -1
- package/lib/api/results/data-result-error.js.map +1 -1
- package/lib/api/results/data-result.js +42 -41
- package/lib/api/results/data-result.js.map +1 -1
- package/lib/api/results/data-results.js +20 -19
- package/lib/api/results/data-results.js.map +1 -1
- package/lib/api/results/index.js.map +1 -1
- package/lib/api/status/index.js +9 -8
- package/lib/api/status/index.js.map +1 -1
- package/lib/http-request/content-types.js +4 -4
- package/lib/http-request/content-types.js.map +1 -1
- package/lib/http-request/errors.js +2 -1
- package/lib/http-request/errors.js.map +1 -1
- package/lib/http-request/http-methods.js +13 -13
- package/lib/http-request/http-methods.js.map +1 -1
- package/lib/http-request/index.js +160 -127
- package/lib/http-request/index.js.map +1 -1
- package/lib/http-request/retryable.js +9 -8
- package/lib/http-request/retryable.js.map +1 -1
- package/lib/index.js +10 -3
- package/lib/index.js.map +1 -1
- package/package.json +21 -19
|
@@ -14,10 +14,10 @@ var _contentTypes = require("./content-types");
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
var _errors = require("./errors");
|
|
17
|
-
var _retryable = require("./retryable");function ownKeys(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
var _retryable = require("./retryable");function ownKeys(e, r) {var t = Object.keys(e);if (Object.getOwnPropertySymbols) {var o = Object.getOwnPropertySymbols(e);r && (o = o.filter(function (r) {return Object.getOwnPropertyDescriptor(e, r).enumerable;})), t.push.apply(t, o);}return t;}function _objectSpread(e) {for (var r = 1; r < arguments.length; r++) {var t = null != arguments[r] ? arguments[r] : {};r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {(0, _defineProperty2.default)(e, r, t[r]);}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));});}return e;} /**
|
|
18
|
+
* Plain HTTP client to be used when creating RQLite specific API HTTP clients
|
|
19
|
+
* @module http-request
|
|
20
|
+
*/
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
/**
|
|
@@ -58,18 +58,18 @@ var _retryable = require("./retryable");function ownKeys(object, enumerableOnly)
|
|
|
58
58
|
/**
|
|
59
59
|
* The default timeout value
|
|
60
60
|
*/
|
|
61
|
-
const DEAULT_TIMEOUT = 30000;
|
|
61
|
+
const DEAULT_TIMEOUT = exports.DEAULT_TIMEOUT = 30000;
|
|
62
62
|
|
|
63
63
|
/**
|
|
64
64
|
* The default to retry a request using the next host in the chain
|
|
65
|
-
*/
|
|
66
|
-
const DEAULT_RETRY_DELAY = 30000;
|
|
65
|
+
*/
|
|
66
|
+
const DEAULT_RETRY_DELAY = exports.DEAULT_RETRY_DELAY = 30000;
|
|
67
67
|
|
|
68
68
|
/**
|
|
69
69
|
* Create default header for all HTTP requests
|
|
70
70
|
* @param {Object} [headers={}] HTTP headers to send with the request
|
|
71
71
|
* @returns {Object} The headers with defaults applied
|
|
72
|
-
*/
|
|
72
|
+
*/
|
|
73
73
|
function createDefaultHeaders(headers = {}) {
|
|
74
74
|
const _headers$Accept = headers.Accept,Accept = _headers$Accept === void 0 ? _contentTypes.CONTENT_TYPE_APPLICATION_JSON : _headers$Accept;
|
|
75
75
|
return _objectSpread(_objectSpread({}, headers), {}, { Accept });
|
|
@@ -89,14 +89,14 @@ function cleanPath(path) {
|
|
|
89
89
|
* backoff algorithm.
|
|
90
90
|
* @param {Number} attempt The retry attempt
|
|
91
91
|
* @param {Number} base The base of the exponential backoff
|
|
92
|
-
* @param {Number}
|
|
92
|
+
* @param {Number} exponent The exponential power
|
|
93
93
|
* @returns {Number} The time to wait in milliseconds
|
|
94
94
|
*/
|
|
95
|
-
function getWaitTimeExponential(attempt = 0, base = 100,
|
|
95
|
+
function getWaitTimeExponential(attempt = 0, base = 100, exponent = 2) {
|
|
96
96
|
if (attempt === 0) {
|
|
97
97
|
return 0;
|
|
98
98
|
}
|
|
99
|
-
return Math.pow(
|
|
99
|
+
return Math.pow(exponent, attempt) * base;
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
/**
|
|
@@ -105,78 +105,83 @@ function getWaitTimeExponential(attempt = 0, base = 100, pow = 2) {
|
|
|
105
105
|
* server
|
|
106
106
|
*/
|
|
107
107
|
class HttpRequest {
|
|
108
|
-
/**
|
|
109
|
-
* The index of the host in this.hosts which will be tried
|
|
110
|
-
* first before attempting other hosts
|
|
111
|
-
* @type {Number}
|
|
112
|
-
*/
|
|
113
108
|
|
|
114
109
|
|
|
115
|
-
/**
|
|
116
|
-
* Whether or not the setNextActiveHostIndex() should
|
|
117
|
-
* perform a round robin strategy
|
|
118
|
-
*/
|
|
119
110
|
|
|
120
111
|
|
|
121
|
-
/**
|
|
122
|
-
* The regex pattern to check if a uri is absolute or relative,
|
|
123
|
-
* if it is absolute the host is not appended
|
|
124
|
-
*/
|
|
125
112
|
|
|
126
113
|
|
|
127
|
-
/**
|
|
128
|
-
* A list of hosts that are tried in round robin fashion
|
|
129
|
-
* when certain HTTP responses are received
|
|
130
|
-
* @type {String[]}
|
|
131
|
-
*/
|
|
132
114
|
|
|
133
115
|
|
|
134
|
-
/**
|
|
135
|
-
* @type {import('http').Agent} The http agent if it is set
|
|
136
|
-
*/
|
|
137
116
|
|
|
138
117
|
|
|
139
|
-
/**
|
|
140
|
-
* @type {import('https').Agent} The https agent if it is set
|
|
141
|
-
*/
|
|
142
118
|
|
|
143
119
|
|
|
144
|
-
/**
|
|
145
|
-
* The host list index of the leader node defaults
|
|
146
|
-
* to the first host
|
|
147
|
-
* @type {Number}
|
|
148
|
-
*/
|
|
149
120
|
|
|
150
121
|
|
|
151
|
-
/**
|
|
152
|
-
* Http error codes which are considered retryable
|
|
153
|
-
* @type {Set}
|
|
154
|
-
*/
|
|
155
122
|
|
|
156
123
|
|
|
157
|
-
/**
|
|
158
|
-
* Http status codes which are considered retryable
|
|
159
|
-
* @type {Set}
|
|
160
|
-
*/
|
|
161
124
|
|
|
162
125
|
|
|
163
|
-
/**
|
|
164
|
-
* Http methods which are considered retryable
|
|
165
|
-
* @type {Set}
|
|
166
|
-
*/
|
|
167
126
|
|
|
168
127
|
|
|
169
|
-
/**
|
|
170
|
-
* The exponential backoff base for retries
|
|
171
|
-
*/
|
|
172
128
|
|
|
173
129
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
|
|
180
185
|
|
|
181
186
|
|
|
182
187
|
/**
|
|
@@ -199,58 +204,63 @@ class HttpRequest {
|
|
|
199
204
|
* @param {Set|String[]} [options.retryableHttpMethods] The list of retryable http methods
|
|
200
205
|
* @param {Number} [options.exponentailBackoffBase] The value for exponentail backoff base
|
|
201
206
|
* for retry exponential backoff
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
207
|
+
* @param {Number} [options.exponentailBackoffExponent] Exponent to increase backoff each try
|
|
208
|
+
*/
|
|
209
|
+
constructor(hosts, options = {}) {/**
|
|
210
|
+
* The index of the host in this.hosts which will be tried
|
|
211
|
+
* first before attempting other hosts
|
|
212
|
+
* @type {Number}
|
|
213
|
+
*/(0, _defineProperty2.default)(this, "activeHostIndex", 0); /**
|
|
214
|
+
* Whether or not the setNextActiveHostIndex() should
|
|
215
|
+
* perform a round robin strategy
|
|
216
|
+
*/(0, _defineProperty2.default)(this, "activeHostRoundRobin", true); /**
|
|
217
|
+
* The regex pattern to check if a uri is absolute or relative,
|
|
218
|
+
* if it is absolute the host is not appended
|
|
219
|
+
*/(0, _defineProperty2.default)(this, "absoluteUriPattern", /^https?:\/\//); /**
|
|
220
|
+
* A list of hosts that are tried in round robin fashion
|
|
221
|
+
* when certain HTTP responses are received
|
|
222
|
+
* @type {String[]}
|
|
223
|
+
*/(0, _defineProperty2.default)(this, "hosts", []); /**
|
|
224
|
+
* @type {import('http').Agent} The http agent if it is set
|
|
225
|
+
*/(0, _defineProperty2.default)(this, "httpAgent", void 0); /**
|
|
226
|
+
* @type {import('https').Agent} The https agent if it is set
|
|
227
|
+
*/(0, _defineProperty2.default)(this, "httpsAgent", void 0); /**
|
|
228
|
+
* The host list index of the leader node defaults
|
|
229
|
+
* to the first host
|
|
230
|
+
* @type {Number}
|
|
231
|
+
*/(0, _defineProperty2.default)(this, "leaderHostIndex", 0); /**
|
|
232
|
+
* Http error codes which are considered retryable
|
|
233
|
+
* @type {Set}
|
|
234
|
+
*/(0, _defineProperty2.default)(this, "retryableErrorCodes", _retryable.RETRYABLE_ERROR_CODES); /**
|
|
235
|
+
* Http status codes which are considered retryable
|
|
236
|
+
* @type {Set}
|
|
237
|
+
*/(0, _defineProperty2.default)(this, "retryableStatusCodes", _retryable.RETRYABLE_STATUS_CODES); /**
|
|
238
|
+
* Http methods which are considered retryable
|
|
239
|
+
* @type {Set}
|
|
240
|
+
*/(0, _defineProperty2.default)(this, "retryableHttpMethods", _retryable.RETRYABLE_HTTP_METHODS); /**
|
|
241
|
+
* The exponential backoff base for retries
|
|
242
|
+
*/(0, _defineProperty2.default)(this, "exponentailBackoffBase", 100); /**
|
|
243
|
+
* The exponent to increase backoff each try
|
|
244
|
+
*/(0, _defineProperty2.default)(this, "exponentailBackoffExponent", 1.1); /**
|
|
245
|
+
* Authentication Map
|
|
246
|
+
* @type {Map}
|
|
247
|
+
* @property {String} username
|
|
248
|
+
* @property {String} password
|
|
249
|
+
*/(0, _defineProperty2.default)(this, "authentication", new Map());this.setHosts(hosts);if (this.getTotalHosts() === 0) {throw new Error('At least one host must be provided');}const _options$activeHostRo = options.activeHostRoundRobin,activeHostRoundRobin = _options$activeHostRo === void 0 ? true : _options$activeHostRo,httpAgent = options.httpAgent,httpsAgent = options.httpsAgent,retryableErrorCodes = options.retryableErrorCodes,retryableStatusCodes = options.retryableStatusCodes,retryableHttpMethods = options.retryableHttpMethods,exponentailBackoffExponent = options.exponentailBackoffExponent,exponentailBackoffBase = options.exponentailBackoffBase,authentication = options.authentication;if (typeof authentication === 'object') {const username = authentication.username,password = authentication.password;if (username) {this.authentication.set('username', username);}if (password) {this.authentication.set('password', password);}}if (typeof activeHostRoundRobin !== 'undefined') {this.setActiveHostRoundRobin(activeHostRoundRobin);}if (typeof httpAgent !== 'undefined') {this.setHttpAgent(httpAgent);}if (typeof httpsAgent !== 'undefined') {this.setHttpsAgent(httpsAgent);}if (retryableErrorCodes instanceof Set || Array.isArray(retryableErrorCodes)) {this.setRetryableErrorCodes(Array.isArray(retryableErrorCodes) ? Set(retryableErrorCodes) : retryableErrorCodes);}if (retryableStatusCodes instanceof Set || Array.isArray(retryableStatusCodes)) {this.setRetryableStatusCodes(
|
|
250
|
+
Array.isArray(retryableStatusCodes) ? Set(retryableStatusCodes) : retryableStatusCodes
|
|
251
|
+
);
|
|
245
252
|
}
|
|
246
253
|
if (retryableHttpMethods instanceof Set || Array.isArray(retryableHttpMethods)) {
|
|
247
254
|
this.setRetryableHttpMethods(
|
|
248
|
-
|
|
249
|
-
|
|
255
|
+
Array.isArray(retryableHttpMethods) ? Set(retryableHttpMethods) : retryableHttpMethods
|
|
256
|
+
);
|
|
250
257
|
}
|
|
251
258
|
if (Number.isFinite(exponentailBackoffBase)) {
|
|
252
259
|
this.setExponentailBackoffBase(exponentailBackoffBase);
|
|
253
260
|
}
|
|
261
|
+
if (Number.isFinite(exponentailBackoffExponent)) {
|
|
262
|
+
this.setExponentailBackoffExponent(exponentailBackoffExponent);
|
|
263
|
+
}
|
|
254
264
|
}
|
|
255
265
|
|
|
256
266
|
/**
|
|
@@ -285,6 +295,22 @@ class HttpRequest {
|
|
|
285
295
|
return this.exponentailBackoffBase;
|
|
286
296
|
}
|
|
287
297
|
|
|
298
|
+
/**
|
|
299
|
+
* Set the exponentail backoff exponent
|
|
300
|
+
* @param {Number} exponentailBackoffExponent
|
|
301
|
+
*/
|
|
302
|
+
setExponentailBackoffExponent(exponentailBackoffExponent) {
|
|
303
|
+
this.exponentailBackoffExponent = exponentailBackoffExponent;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Get the exponentail backoff exponent
|
|
308
|
+
* @return {Number} The exponentail backoff exponent
|
|
309
|
+
*/
|
|
310
|
+
getExponentailBackoffExponent() {
|
|
311
|
+
return this.exponentailBackoffExponent;
|
|
312
|
+
}
|
|
313
|
+
|
|
288
314
|
/**
|
|
289
315
|
* Set the retryable error codes
|
|
290
316
|
* @param {Set} retryableErrorCodes
|
|
@@ -552,10 +578,10 @@ class HttpRequest {
|
|
|
552
578
|
*/
|
|
553
579
|
requestIsRetryable(options = {}) {
|
|
554
580
|
const
|
|
555
|
-
|
|
581
|
+
statusCode =
|
|
556
582
|
|
|
557
583
|
|
|
558
|
-
|
|
584
|
+
options.statusCode,errorCode = options.errorCode,httpMethod = options.httpMethod;
|
|
559
585
|
// Honor strictly the http method
|
|
560
586
|
if (!this.getRetryableHttpMethods().has(httpMethod)) {
|
|
561
587
|
return false;
|
|
@@ -578,7 +604,7 @@ class HttpRequest {
|
|
|
578
604
|
*/
|
|
579
605
|
fetch(options = {}) {var _this = this;return (0, _asyncToGenerator2.default)(function* () {
|
|
580
606
|
const
|
|
581
|
-
|
|
607
|
+
body =
|
|
582
608
|
|
|
583
609
|
|
|
584
610
|
|
|
@@ -594,7 +620,8 @@ class HttpRequest {
|
|
|
594
620
|
|
|
595
621
|
|
|
596
622
|
|
|
597
|
-
|
|
623
|
+
|
|
624
|
+
options.body,_options$headers = options.headers,headers = _options$headers === void 0 ? {} : _options$headers,_options$httpMethod = options.httpMethod,httpMethod = _options$httpMethod === void 0 ? _httpMethods.HTTP_METHOD_GET : _options$httpMethod,query = options.query,_options$stream = options.stream,stream = _options$stream === void 0 ? false : _options$stream,_options$timeout = options.timeout,timeout = _options$timeout === void 0 ? DEAULT_TIMEOUT : _options$timeout,_options$useLeader = options.useLeader,useLeader = _options$useLeader === void 0 ? false : _options$useLeader,_options$retries = options.retries,retries = _options$retries === void 0 ? _this.getTotalHosts() * 3 : _options$retries,_options$maxRedirects = options.maxRedirects,maxRedirects = _options$maxRedirects === void 0 ? 10 : _options$maxRedirects,_options$attempt = options.attempt,attempt = _options$attempt === void 0 ? 0 : _options$attempt,_options$retryAttempt = options.retryAttempt,retryAttempt = _options$retryAttempt === void 0 ? 0 : _options$retryAttempt,_options$redirectAtte = options.redirectAttempt,redirectAttempt = _options$redirectAtte === void 0 ? 0 : _options$redirectAtte,attemptHostIndex = options.attemptHostIndex,_options$exponentailB = options.exponentailBackoffExponent,exponentailBackoffExponent = _options$exponentailB === void 0 ? _this.getExponentailBackoffExponent() : _options$exponentailB,_options$exponentailB2 = options.exponentailBackoffBase,exponentailBackoffBase = _options$exponentailB2 === void 0 ? _this.getExponentailBackoffBase() : _options$exponentailB2,_options$httpAgent = options.httpAgent,httpAgent = _options$httpAgent === void 0 ? _this.getHttpAgent() : _options$httpAgent,_options$httpsAgent = options.httpsAgent,httpsAgent = _options$httpsAgent === void 0 ? _this.getHttpsAgent() : _options$httpsAgent;
|
|
598
625
|
// Honor the supplied attemptHostIndex or get the active host
|
|
599
626
|
const activeHost = Number.isFinite(attemptHostIndex) ? _this.getHosts()[attemptHostIndex] :
|
|
600
627
|
_this.getActiveHost(useLeader);
|
|
@@ -608,8 +635,8 @@ class HttpRequest {
|
|
|
608
635
|
if (_this.authentication.size) {
|
|
609
636
|
auth = {
|
|
610
637
|
username: _this.authentication.get('username'),
|
|
611
|
-
password: _this.authentication.get('password')
|
|
612
|
-
|
|
638
|
+
password: _this.authentication.get('password')
|
|
639
|
+
};
|
|
613
640
|
}
|
|
614
641
|
const response = yield (0, _axios.default)({
|
|
615
642
|
url: uri,
|
|
@@ -625,15 +652,15 @@ class HttpRequest {
|
|
|
625
652
|
httpAgent,
|
|
626
653
|
paramsSerializer(params) {
|
|
627
654
|
return (0, _qs.stringify)(params, { arrayFormat: 'brackets' });
|
|
628
|
-
}
|
|
629
|
-
|
|
655
|
+
}
|
|
656
|
+
});
|
|
630
657
|
if (stream) {
|
|
631
658
|
return response.data;
|
|
632
659
|
}
|
|
633
660
|
return {
|
|
634
661
|
body: response.data,
|
|
635
|
-
status: response.status
|
|
636
|
-
|
|
662
|
+
status: response.status
|
|
663
|
+
};
|
|
637
664
|
} catch (e) {
|
|
638
665
|
const _e$response = e.response,response = _e$response === void 0 ? {} : _e$response,errorCode = e.code;
|
|
639
666
|
const responseStatus = response.status,_response$headers = response.headers,responseHeaders = _response$headers === void 0 ? {} : _response$headers;
|
|
@@ -641,8 +668,8 @@ class HttpRequest {
|
|
|
641
668
|
const retryable = _this.requestIsRetryable({
|
|
642
669
|
statusCode: responseStatus,
|
|
643
670
|
errorCode,
|
|
644
|
-
httpMethod
|
|
645
|
-
|
|
671
|
+
httpMethod
|
|
672
|
+
});
|
|
646
673
|
// Save the next active host index and pass it to retry manually
|
|
647
674
|
let nextAttemptHostIndex = Number.isFinite(attemptHostIndex) ? attemptHostIndex :
|
|
648
675
|
_this.getActiveHostIndex();
|
|
@@ -671,21 +698,26 @@ class HttpRequest {
|
|
|
671
698
|
uri: location,
|
|
672
699
|
attempt: attempt + 1,
|
|
673
700
|
redirectAttempt: redirectAttempt + 1,
|
|
674
|
-
attemptHostIndex: nextAttemptHostIndex })
|
|
675
|
-
|
|
701
|
+
attemptHostIndex: nextAttemptHostIndex })
|
|
702
|
+
);
|
|
676
703
|
}
|
|
677
704
|
if (retryable && retryAttempt < retries) {
|
|
678
|
-
const waitTime = getWaitTimeExponential(
|
|
679
|
-
|
|
680
|
-
|
|
705
|
+
const waitTime = getWaitTimeExponential(
|
|
706
|
+
retryAttempt,
|
|
707
|
+
exponentailBackoffBase,
|
|
708
|
+
exponentailBackoffExponent
|
|
709
|
+
);
|
|
710
|
+
yield new Promise((resolve) => {
|
|
711
|
+
setTimeout(() => {
|
|
712
|
+
resolve(undefined);
|
|
713
|
+
}, waitTime);
|
|
681
714
|
});
|
|
682
|
-
yield delayPromise;
|
|
683
715
|
return _this.fetch(_objectSpread(_objectSpread({},
|
|
684
716
|
options), {}, {
|
|
685
717
|
attempt: attempt + 1,
|
|
686
718
|
retryAttempt: retryAttempt + 1,
|
|
687
|
-
attemptHostIndex: nextAttemptHostIndex })
|
|
688
|
-
|
|
719
|
+
attemptHostIndex: nextAttemptHostIndex })
|
|
720
|
+
);
|
|
689
721
|
}
|
|
690
722
|
throw e;
|
|
691
723
|
}})();
|
|
@@ -707,5 +739,6 @@ class HttpRequest {
|
|
|
707
739
|
*/
|
|
708
740
|
post(options = {}) {var _this3 = this;return (0, _asyncToGenerator2.default)(function* () {
|
|
709
741
|
return _this3.fetch(_objectSpread(_objectSpread({}, options), {}, { httpMethod: _httpMethods.HTTP_METHOD_POST }));})();
|
|
710
|
-
}
|
|
742
|
+
}
|
|
743
|
+
}exports.default = HttpRequest;
|
|
711
744
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["DEAULT_TIMEOUT","DEAULT_RETRY_DELAY","createDefaultHeaders","headers","Accept","CONTENT_TYPE_APPLICATION_JSON","cleanPath","path","String","replace","getWaitTimeExponential","attempt","base","pow","HttpRequest","constructor","hosts","options","RETRYABLE_ERROR_CODES","RETRYABLE_STATUS_CODES","RETRYABLE_HTTP_METHODS","Map","setHosts","getTotalHosts","Error","activeHostRoundRobin","httpAgent","httpsAgent","retryableErrorCodes","retryableStatusCodes","retryableHttpMethods","exponentailBackoffBase","authentication","username","password","set","setActiveHostRoundRobin","setHttpAgent","setHttpsAgent","Set","Array","isArray","setRetryableErrorCodes","setRetryableStatusCodes","setRetryableHttpMethods","Number","isFinite","setExponentailBackoffBase","setAuthentication","getExponentailBackoffBase","getRetryableErrorCodes","getRetryableStatusCodes","getRetryableHttpMethods","getHttpAgent","getHttpsAgent","split","reduce","acc","v","host","trim","concat","getHosts","findHostIndex","parsedHostToFind","findIndex","parsedHost","every","field","getActiveHost","useLeader","activeHostIndex","getLeaderHostIndex","getActiveHostIndex","setActiveHostIndex","totalHosts","leaderHostIndex","setLeaderHostIndex","getActiveHostRoundRobin","getNextActiveHostIndex","nextIndex","setNextActiveHostIndex","length","uriIsAbsolute","uri","absoluteUriPattern","test","requestIsRetryable","statusCode","errorCode","httpMethod","has","fetch","body","HTTP_METHOD_GET","query","stream","timeout","retries","maxRedirects","retryAttempt","redirectAttempt","attemptHostIndex","activeHost","auth","size","get","response","url","data","responseType","method","params","paramsSerializer","arrayFormat","status","e","code","responseStatus","responseHeaders","retryable","nextAttemptHostIndex","location","undefined","newLeaderHostIndex","waitTime","delayPromise","Promise","resolve","setTimeout","post","HTTP_METHOD_POST"],"sources":["../../es6/http-request/index.js"],"sourcesContent":["/**\n * Plain HTTP client to be used when creating RQLite specific API HTTP clients\n * @module http-request\n */\nimport axios from 'axios'\nimport { stringify as stringifyQuery } from 'qs'\nimport { parse as parseUrl } from 'url'\nimport {\n HTTP_METHOD_GET,\n HTTP_METHOD_POST,\n} from './http-methods'\nimport {\n CONTENT_TYPE_APPLICATION_JSON,\n // CONTENT_TYPE_APPLICATION_OCTET_STREAM,\n} from './content-types'\nimport { ERROR_HTTP_REQUEST_MAX_REDIRECTS } from './errors'\nimport {\n RETRYABLE_ERROR_CODES,\n RETRYABLE_HTTP_METHODS,\n RETRYABLE_STATUS_CODES,\n} from './retryable'\n\n/**\n * RQliteJS HTTP Request options\n * @typedef HttpRequestOptions\n * @type {Object}\n * @property {Object} [auth] A object for user authentication\n * @property {String} [auth.username] The username for authentication\n * @property {String} [auth.password] The username for authentication\n * @property {Object} [body] The body of the HTTP request\n * @property {Object} [headers={}] HTTP headers to send with the request\n * @property {String} [httpMethod=HTTP_METHOD_GET] The HTTP method for the request\n * i.e. GET or POST\n * @property {Object} [query] An object with the query to send with the HTTP request\n * @property {Boolean} [stream=false] When true the returned value is a request object with\n * stream support instead of a request-promise result\n * @property {Number} [timeout=DEAULT_TIMEOUT] Optional timeout to override default\n * @property {String} uri The uri for the request which can be a relative path to use\n * the currently active host or a full i.e. http://localhost:4001/db/query which is used\n * literally\n * @property {Boolean} [useLeader=false] When true the request will use the master host, the\n * first host in this.hosts, this is ideal for write operations to skip the redirect\n * @property {Number} [retries] The number of retries, defaults to the number of\n * hosts times 3\n * @property {Number} [maxRedirects=10] The maximum number of HTTP redirects to follow before\n * throwing an error\n * @property {Number} [attempt=0] The current attempt count when retrying or redirecting\n * @property {Number} [retryAttempt=0] The current attempt based on retry logic\n * @property {Number} [redirectAttempt=0] The current attempt based on redirect logic\n * @property {Number} [attemptHostIndex] When in a retry state the host index of the last\n * attempt which is used to get the next host index\n * @property {import('http').Agent} [httpAgent] An option http agent, useful for\n * keepalive pools using plain HTTP\n * @property {import('https').Agent} [httpsAgent] An option http agent, useful\n * for keepalive pools using SSL\n */\n\n/**\n * The default timeout value\n */\nexport const DEAULT_TIMEOUT = 30000\n\n/**\n * The default to retry a request using the next host in the chain\n */\nexport const DEAULT_RETRY_DELAY = 30000\n\n/**\n * Create default header for all HTTP requests\n * @param {Object} [headers={}] HTTP headers to send with the request\n * @returns {Object} The headers with defaults applied\n */\nexport function createDefaultHeaders (headers = {}) {\n const { Accept = CONTENT_TYPE_APPLICATION_JSON } = headers\n return { ...headers, Accept }\n}\n\n/**\n * Clean the request path remove / from the beginning\n * @param {String} path The path to clean\n * @returns {String} The clean path\n */\nfunction cleanPath (path) {\n return String(path).replace(/^\\//, '')\n}\n\n/**\n * Returns the next wait interval, in milliseconds, using an exponential\n * backoff algorithm.\n * @param {Number} attempt The retry attempt\n * @param {Number} base The base of the exponential backoff\n * @param {Number} pow The exponential power\n * @returns {Number} The time to wait in milliseconds\n */\nexport function getWaitTimeExponential (attempt = 0, base = 100, pow = 2) {\n if (attempt === 0) {\n return 0\n }\n return (pow ** attempt) * base\n}\n\n/**\n * Generic HTTP Request class which all RQLiteJS client\n * should extend for consistent communitication with an RQLite\n * server\n */\nexport default class HttpRequest {\n /**\n * The index of the host in this.hosts which will be tried\n * first before attempting other hosts\n * @type {Number}\n */\n activeHostIndex = 0\n\n /**\n * Whether or not the setNextActiveHostIndex() should\n * perform a round robin strategy\n */\n activeHostRoundRobin = true\n\n /**\n * The regex pattern to check if a uri is absolute or relative,\n * if it is absolute the host is not appended\n */\n absoluteUriPattern = /^https?:\\/\\//\n\n /**\n * A list of hosts that are tried in round robin fashion\n * when certain HTTP responses are received\n * @type {String[]}\n */\n hosts = []\n\n /**\n * @type {import('http').Agent} The http agent if it is set\n */\n httpAgent\n\n /**\n * @type {import('https').Agent} The https agent if it is set\n */\n httpsAgent\n\n /**\n * The host list index of the leader node defaults\n * to the first host\n * @type {Number}\n */\n leaderHostIndex = 0\n\n /**\n * Http error codes which are considered retryable\n * @type {Set}\n */\n retryableErrorCodes = RETRYABLE_ERROR_CODES\n\n /**\n * Http status codes which are considered retryable\n * @type {Set}\n */\n retryableStatusCodes = RETRYABLE_STATUS_CODES\n\n /**\n * Http methods which are considered retryable\n * @type {Set}\n */\n retryableHttpMethods = RETRYABLE_HTTP_METHODS\n\n /**\n * The exponential backoff base for retries\n */\n exponentailBackoffBase = 100\n\n /**\n * Authentication Map\n * @type {Map}\n * @property {String} username\n * @property {String} password\n */\n authentication = new Map()\n\n /**\n * Construtor for HttpRequest\n * @param {String[]|String} hosts An array of RQLite hosts or a string\n * that will be split on \",\" to create an array of hosts, the first\n * host will be tried first when there are multiple hosts\n * @param {Object} [options={}] Additional options\n * @param {Object} [options.authentication] Authentication options\n * @param {String} [options.authentication.username] The host authentication username\n * @param {String} [options.authentication.password] The host authentication password\n * @param {Boolean} [options.activeHostRoundRobin=true] If true this.setNextActiveHostIndex()\n * will perform a round robin when called\n * @param {import('http').Agent} [options.httpAgent] An option http agent, useful for\n * keepalive pools using plain HTTP\n * @param {import('https').Agent} [options.httpsAgent] An option http agent, useful\n * for keepalive pools using SSL\n * @param {Set|String[]} [options.retryableErrorCodes] The list of retryable error codes\n * @param {Set|Number[]} [options.retryableStatusCodes] The list of retryable http status codes\n * @param {Set|String[]} [options.retryableHttpMethods] The list of retryable http methods\n * @param {Number} [options.exponentailBackoffBase] The value for exponentail backoff base\n * for retry exponential backoff\n */\n constructor (hosts, options = {}) {\n this.setHosts(hosts)\n if (this.getTotalHosts() === 0) {\n throw new Error('At least one host must be provided')\n }\n const {\n activeHostRoundRobin = true,\n httpAgent,\n httpsAgent,\n retryableErrorCodes,\n retryableStatusCodes,\n retryableHttpMethods,\n exponentailBackoffBase,\n authentication,\n } = options\n if (typeof authentication === 'object') {\n const { username, password } = authentication\n if (username) {\n this.authentication.set('username', username)\n }\n if (password) {\n this.authentication.set('password', password)\n }\n }\n if (typeof activeHostRoundRobin !== 'undefined') {\n this.setActiveHostRoundRobin(activeHostRoundRobin)\n }\n if (typeof httpAgent !== 'undefined') {\n this.setHttpAgent(httpAgent)\n }\n if (typeof httpsAgent !== 'undefined') {\n this.setHttpsAgent(httpsAgent)\n }\n if (retryableErrorCodes instanceof Set || Array.isArray(retryableErrorCodes)) {\n this.setRetryableErrorCodes(\n Array.isArray(retryableErrorCodes) ? Set(retryableErrorCodes) : retryableErrorCodes,\n )\n }\n if (retryableStatusCodes instanceof Set || Array.isArray(retryableStatusCodes)) {\n this.setRetryableStatusCodes(\n Array.isArray(retryableStatusCodes) ? Set(retryableStatusCodes) : retryableStatusCodes,\n )\n }\n if (retryableHttpMethods instanceof Set || Array.isArray(retryableHttpMethods)) {\n this.setRetryableHttpMethods(\n Array.isArray(retryableHttpMethods) ? Set(retryableHttpMethods) : retryableHttpMethods,\n )\n }\n if (Number.isFinite(exponentailBackoffBase)) {\n this.setExponentailBackoffBase(exponentailBackoffBase)\n }\n }\n\n /**\n * Set authentication information\n * @param {Object} [authentication] Authentication data\n * @param {String} [authentication.username] The host authentication username\n * @param {String} [authentication.password] The host authentication password\n */\n setAuthentication (authentication = {}) {\n const { username, password } = authentication\n if (username) {\n this.authentication.set('username', username)\n }\n if (password) {\n this.authentication.set('password', password)\n }\n }\n\n /**\n * Set the exponentail backoff base\n * @param {Number} exponentailBackoffBase\n */\n setExponentailBackoffBase (exponentailBackoffBase) {\n this.exponentailBackoffBase = exponentailBackoffBase\n }\n\n /**\n * Get the exponentail backoff base\n * @return {Number} The exponentail backoff base\n */\n getExponentailBackoffBase () {\n return this.exponentailBackoffBase\n }\n\n /**\n * Set the retryable error codes\n * @param {Set} retryableErrorCodes\n */\n setRetryableErrorCodes (retryableErrorCodes) {\n this.retryableErrorCodes = retryableErrorCodes\n }\n\n /**\n * Get the retryable error codes\n * @returns {Set}\n */\n getRetryableErrorCodes () {\n return this.retryableErrorCodes\n }\n\n /**\n * Set the retryable status codes\n * @param {Set} retryableStatusCodes\n */\n setRetryableStatusCodes (retryableStatusCodes) {\n this.retryableStatusCodes = retryableStatusCodes\n }\n\n /**\n * Get the retryable status codes\n * @returns {Set}\n */\n getRetryableStatusCodes () {\n return this.retryableStatusCodes\n }\n\n /**\n * Set the retryable http methods\n * @param {Set} retryableHttpMethods\n */\n setRetryableHttpMethods (retryableHttpMethods) {\n this.retryableHttpMethods = retryableHttpMethods\n }\n\n /**\n * Get the retryable http methods\n * @returns {Set}\n */\n getRetryableHttpMethods () {\n return this.retryableHttpMethods\n }\n\n /**\n * Set an http agent which is useful for http keepalive requests\n * @param {import('http').Agent} httpAgent An http agent\n */\n setHttpAgent (httpAgent) {\n this.httpAgent = httpAgent\n }\n\n /**\n * Get the set http agent\n * @returns {import('http').Agent|undefined} The https agent if it is set\n */\n getHttpAgent () {\n return this.httpAgent\n }\n\n /**\n * Set an https agent which is useful for https keepalive requests\n * @param {import('https').Agent} httpsAgent An https agent\n */\n setHttpsAgent (httpsAgent) {\n this.httpsAgent = httpsAgent\n }\n\n /**\n * Get the set https agent\n * @returns {import('https').Agent|undefined} The https agent if it is set\n */\n getHttpsAgent () {\n return this.httpsAgent\n }\n\n /**\n * Set the list of hosts\n * @param {String[]|String} hosts An array of RQLite hosts or a string\n * that will be split on \",\" to create an array of hosts, the first\n * host will be tried first when there are multiple hosts\n */\n setHosts (hosts) {\n this.hosts = !Array.isArray(hosts) ? String(hosts).split(',') : hosts\n this.hosts = this.hosts.reduce((acc, v) => {\n // Remove trailing slashed from hosts\n const host = String(v).trim().replace(/\\/$/, '')\n if (!host) {\n return acc\n }\n return acc.concat(host)\n }, [])\n }\n\n /**\n * Get the list of hosts\n * @returns {String[]} The list of hosts\n */\n getHosts () {\n return this.hosts\n }\n\n /**\n * Given a host string find the index of that host in the hosts\n * @param {String} host A host to find in hosts\n * @returns {Number} The found host index or -1 if not found\n */\n findHostIndex (host) {\n const parsedHostToFind = parseUrl(host)\n return this.getHosts().findIndex((v) => {\n const parsedHost = parseUrl(v)\n // Find a host where all the parsed fields match the requested host\n return ['hostname', 'protocol', 'port', 'path'].every((field) => parsedHostToFind[field] === parsedHost[field])\n })\n }\n\n /**\n * Get the current active host from the hosts array\n * @param {Boolean} useLeader If true use the first host which is always\n * the master, this is prefered for write operations\n * @returns {String} The active host\n */\n getActiveHost (useLeader) {\n // When useLeader is true we should just use the first host\n const activeHostIndex = useLeader ? this.getLeaderHostIndex() : this.getActiveHostIndex()\n return this.getHosts()[activeHostIndex]\n }\n\n /**\n * Set the active host index with check based on this.hosts\n * @param {Number} activeHostIndex The index\n * @returns {Number} The active host index\n */\n setActiveHostIndex (activeHostIndex) {\n if (!Number.isFinite(activeHostIndex)) {\n throw new Error('The activeHostIndex should be a finite number')\n }\n const totalHosts = this.getTotalHosts()\n if (activeHostIndex < 0) {\n // Don't allow an index less then zero\n this.activeHostIndex = 0\n } else if (activeHostIndex >= totalHosts) {\n // Don't allow an index greater then the length of the hosts\n this.activeHostIndex = totalHosts - 1\n } else {\n this.activeHostIndex = activeHostIndex\n }\n return this.activeHostIndex\n }\n\n /**\n * Get the host index for the leader node\n * @returns {Number} The host index for the leader node\n */\n getLeaderHostIndex () {\n return this.leaderHostIndex\n }\n\n /**\n * Set the index in the host array for the leader node\n * @param {Number} leaderHostIndex The index of the host that is the leader node\n * @returns {Number} The host index for the leader node\n */\n setLeaderHostIndex (leaderHostIndex) {\n if (!Number.isFinite(leaderHostIndex)) {\n throw new Error('The leaderHostIndex should be a finite number')\n }\n const totalHosts = this.getTotalHosts()\n if (leaderHostIndex < 0) {\n this.leaderHostIndex = 0\n } else if (leaderHostIndex > totalHosts) {\n this.leaderHostIndex = totalHosts - 1\n } else {\n this.leaderHostIndex = leaderHostIndex\n }\n return this.leaderHostIndex\n }\n\n /**\n * Get the active host index\n * @returns {Number} The active host index\n */\n getActiveHostIndex () {\n return this.activeHostIndex\n }\n\n /**\n * Set active host round robin value\n * @param {Boolean} activeHostRoundRobin If true setActiveHostIndex() will\n * perform a round robin\n */\n setActiveHostRoundRobin (activeHostRoundRobin) {\n if (typeof activeHostRoundRobin !== 'boolean') {\n throw new Error('The activeHostRoundRobin argument must be boolean')\n }\n this.activeHostRoundRobin = activeHostRoundRobin\n }\n\n /**\n * Get active host round robin value\n * @returns {Boolean} The value of activeHostRoundRobin\n */\n getActiveHostRoundRobin () {\n return this.activeHostRoundRobin\n }\n\n /**\n * Get the next active host index\n * @param {Number} [activeHostIndex] An optional paramater to provide the active host index\n * @returns {Number} The next active host index which will wrap around to zero\n */\n getNextActiveHostIndex (activeHostIndex = this.getActiveHostIndex()) {\n const totalHosts = this.getTotalHosts()\n const nextIndex = activeHostIndex + 1\n // If we are past the last index start back over at 1\n if (totalHosts === nextIndex) {\n return 0\n }\n return nextIndex\n }\n\n /**\n * Set the active host index to the next host using a\n * round robin strategy\n */\n setNextActiveHostIndex () {\n // Don't bother if we only have one host\n if (!this.getActiveHostRoundRobin()) {\n return\n }\n const totalHosts = this.getTotalHosts()\n if (this.getActiveHostRoundRobin() && totalHosts <= 1) {\n return\n }\n this.setActiveHostIndex(this.getNextActiveHostIndex())\n }\n\n /**\n * Get the total number of hosts\n * @returns {Number} The total number of hosts\n */\n getTotalHosts () {\n return this.getHosts().length\n }\n\n /**\n * Returns whether or not the uri passes a test for this.absoluteUriPattern\n * @returns {Boolean} True if the path is absolute\n */\n uriIsAbsolute (uri) {\n return this.absoluteUriPattern.test(uri)\n }\n\n /**\n * Returns true when the HTTP request is retryable\n * @param {Object} options The options\n * @param {Number} options.statusCode The HTTP status code\n * @param {String} options.errorCode The error code\n * @param {String} options.httpMethod The http method\n * @returns {Boolean} True if the request is retry able\n */\n requestIsRetryable (options = {}) {\n const {\n statusCode,\n errorCode,\n httpMethod,\n } = options\n // Honor strictly the http method\n if (!this.getRetryableHttpMethods().has(httpMethod)) {\n return false\n }\n if (statusCode && this.getRetryableStatusCodes().has(statusCode)) {\n return true\n }\n if (errorCode && this.getRetryableErrorCodes().has(errorCode)) {\n return true\n }\n return false\n }\n\n /**\n * Perform an HTTP request using the provided options\n * @param {HttpRequestOptions} [options={}] Options for the HTTP client\n * @returns {Promise<{status: Number, body: Object|String}>} An object with a status and body\n * property when stream is false and a stream when the stream option is true\n * @throws {ERROR_HTTP_REQUEST_MAX_REDIRECTS} When the maximum number of redirect has been reached\n */\n async fetch (options = {}) {\n const {\n body,\n headers = {},\n httpMethod = HTTP_METHOD_GET,\n query,\n stream = false,\n timeout = DEAULT_TIMEOUT,\n useLeader = false,\n retries = this.getTotalHosts() * 3,\n maxRedirects = 10,\n attempt = 0,\n retryAttempt = 0,\n redirectAttempt = 0,\n attemptHostIndex,\n exponentailBackoffBase = this.getExponentailBackoffBase(),\n httpAgent = this.getHttpAgent(),\n httpsAgent = this.getHttpsAgent(),\n } = options\n // Honor the supplied attemptHostIndex or get the active host\n const activeHost = Number.isFinite(attemptHostIndex) ? this.getHosts()[attemptHostIndex]\n : this.getActiveHost(useLeader)\n let { uri } = options\n if (!uri) {\n throw new Error('The uri option is required')\n }\n uri = this.uriIsAbsolute(uri) ? uri : `${activeHost}/${cleanPath(uri)}`\n try {\n let auth\n if (this.authentication.size) {\n auth = {\n username: this.authentication.get('username'),\n password: this.authentication.get('password'),\n }\n }\n const response = await axios({\n url: uri,\n auth,\n data: body,\n maxRedirects: 0, // Handle redirects manually to allow reposting data\n headers: createDefaultHeaders(headers),\n responseType: stream ? 'stream' : 'json',\n method: httpMethod,\n params: query,\n timeout,\n httpsAgent,\n httpAgent,\n paramsSerializer (params) {\n return stringifyQuery(params, { arrayFormat: 'brackets' })\n },\n })\n if (stream) {\n return response.data\n }\n return {\n body: response.data,\n status: response.status,\n }\n } catch (e) {\n const { response = {}, code: errorCode } = e\n const { status: responseStatus, headers: responseHeaders = {} } = response\n // Check if the error was a redirect\n const retryable = this.requestIsRetryable({\n statusCode: responseStatus,\n errorCode,\n httpMethod,\n })\n // Save the next active host index and pass it to retry manually\n let nextAttemptHostIndex = Number.isFinite(attemptHostIndex) ? attemptHostIndex\n : this.getActiveHostIndex()\n nextAttemptHostIndex += 1\n // We go past the last index start from zero\n if (nextAttemptHostIndex === this.getTotalHosts()) {\n nextAttemptHostIndex = 0\n }\n // First check if this is a redirect error\n if (responseStatus === 301 || responseStatus === 302) {\n // We maxed out on redirect attempts\n if (redirectAttempt >= maxRedirects) {\n throw ERROR_HTTP_REQUEST_MAX_REDIRECTS(`The maximum number of redirects ${maxRedirects} has been reached`)\n }\n const location = typeof responseHeaders === 'object' ? responseHeaders.location : undefined\n // If we were asked to use the leader, but got redirect the leader moved so remember it\n if (useLeader) {\n const newLeaderHostIndex = this.findHostIndex(location)\n // If the redirect exists in the hosts list remember it for next time\n if (newLeaderHostIndex > -1) {\n this.setLeaderHostIndex(newLeaderHostIndex)\n }\n }\n return this.fetch({\n ...options,\n uri: location,\n attempt: attempt + 1,\n redirectAttempt: redirectAttempt + 1,\n attemptHostIndex: nextAttemptHostIndex,\n })\n }\n if (retryable && retryAttempt < retries) {\n const waitTime = getWaitTimeExponential(retryAttempt, exponentailBackoffBase)\n const delayPromise = new Promise((resolve) => {\n setTimeout(resolve, waitTime)\n })\n await delayPromise\n return this.fetch({\n ...options,\n attempt: attempt + 1,\n retryAttempt: retryAttempt + 1,\n attemptHostIndex: nextAttemptHostIndex,\n })\n }\n throw e\n }\n }\n\n /**\n * Perform an HTTP GET request\n * @param {HttpRequestOptions} [options={}] The options\n * @see this.fetch() for options\n */\n async get (options = {}) {\n return this.fetch({ ...options, httpMethod: HTTP_METHOD_GET })\n }\n\n /**\n * Perform an HTTP POST request\n * @param {HttpRequestOptions} [options={}] The options\n * @see this.fetch() for options\n */\n async post (options = {}) {\n return this.fetch({ ...options, httpMethod: HTTP_METHOD_POST })\n }\n}\n"],"mappings":";;;;AAIA;AACA;AACA;AACA;;;;AAIA;;;;AAIA;AACA,wC;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO,MAAMA,cAAc,GAAG,KAAvB;;AAEP;AACA;AACA,G;AACO,MAAMC,kBAAkB,GAAG,KAA3B;;AAEP;AACA;AACA;AACA;AACA,G;AACO,SAASC,oBAAT,CAA+BC,OAAO,GAAG,EAAzC,EAA6C;EAClD,wBAAmDA,OAAnD,CAAQC,MAAR,CAAQA,MAAR,gCAAiBC,2CAAjB;EACA,uCAAYF,OAAZ,SAAqBC,MAArB;AACD;;AAED;AACA;AACA;AACA;AACA;AACA,SAASE,SAAT,CAAoBC,IAApB,EAA0B;EACxB,OAAOC,MAAM,CAACD,IAAD,CAAN,CAAaE,OAAb,CAAqB,KAArB,EAA4B,EAA5B,CAAP;AACD;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,sBAAT,CAAiCC,OAAO,GAAG,CAA3C,EAA8CC,IAAI,GAAG,GAArD,EAA0DC,GAAG,GAAG,CAAhE,EAAmE;EACxE,IAAIF,OAAO,KAAK,CAAhB,EAAmB;IACjB,OAAO,CAAP;EACD;EACD,OAAO,SAACE,GAAD,EAAQF,OAAR,IAAmBC,IAA1B;AACD;;AAED;AACA;AACA;AACA;AACA;AACe,MAAME,WAAN,CAAkB;EAC/B;AACF;AACA;AACA;AACA;;;EAGE;AACF;AACA;AACA;;;EAGE;AACF;AACA;AACA;;;EAGE;AACF;AACA;AACA;AACA;;;EAGE;AACF;AACA;;;EAGE;AACF;AACA;;;EAGE;AACF;AACA;AACA;AACA;;;EAGE;AACF;AACA;AACA;;;EAGE;AACF;AACA;AACA;;;EAGE;AACF;AACA;AACA;;;EAGE;AACF;AACA;;;EAGE;AACF;AACA;AACA;AACA;AACA;;;EAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,WAAW,CAAEC,KAAF,EAASC,OAAO,GAAG,EAAnB,EAAuB,wDA1FhB,CA0FgB,8DApFX,IAoFW,4DA9Eb,cA8Ea,+CAvE1B,EAuE0B,4KAtDhB,CAsDgB,6DAhDZC,gCAgDY,8DA1CXC,iCA0CW,8DApCXC,iCAoCW,gEA/BT,GA+BS,wDAvBjB,IAAIC,GAAJ,EAuBiB;IAChC,KAAKC,QAAL,CAAcN,KAAd;IACA,IAAI,KAAKO,aAAL,OAAyB,CAA7B,EAAgC;MAC9B,MAAM,IAAIC,KAAJ,CAAU,oCAAV,CAAN;IACD;IACD;;;;;;;;;IASIP,OATJ,CACEQ,oBADF,CACEA,oBADF,sCACyB,IADzB,yBAEEC,SAFF,GASIT,OATJ,CAEES,SAFF,CAGEC,UAHF,GASIV,OATJ,CAGEU,UAHF,CAIEC,mBAJF,GASIX,OATJ,CAIEW,mBAJF,CAKEC,oBALF,GASIZ,OATJ,CAKEY,oBALF,CAMEC,oBANF,GASIb,OATJ,CAMEa,oBANF,CAOEC,sBAPF,GASId,OATJ,CAOEc,sBAPF,CAQEC,cARF,GASIf,OATJ,CAQEe,cARF;IAUA,IAAI,OAAOA,cAAP,KAA0B,QAA9B,EAAwC;MACtC,MAAQC,QAAR,GAA+BD,cAA/B,CAAQC,QAAR,CAAkBC,QAAlB,GAA+BF,cAA/B,CAAkBE,QAAlB;MACA,IAAID,QAAJ,EAAc;QACZ,KAAKD,cAAL,CAAoBG,GAApB,CAAwB,UAAxB,EAAoCF,QAApC;MACD;MACD,IAAIC,QAAJ,EAAc;QACZ,KAAKF,cAAL,CAAoBG,GAApB,CAAwB,UAAxB,EAAoCD,QAApC;MACD;IACF;IACD,IAAI,OAAOT,oBAAP,KAAgC,WAApC,EAAiD;MAC/C,KAAKW,uBAAL,CAA6BX,oBAA7B;IACD;IACD,IAAI,OAAOC,SAAP,KAAqB,WAAzB,EAAsC;MACpC,KAAKW,YAAL,CAAkBX,SAAlB;IACD;IACD,IAAI,OAAOC,UAAP,KAAsB,WAA1B,EAAuC;MACrC,KAAKW,aAAL,CAAmBX,UAAnB;IACD;IACD,IAAIC,mBAAmB,YAAYW,GAA/B,IAAsCC,KAAK,CAACC,OAAN,CAAcb,mBAAd,CAA1C,EAA8E;MAC5E,KAAKc,sBAAL;MACEF,KAAK,CAACC,OAAN,CAAcb,mBAAd,IAAqCW,GAAG,CAACX,mBAAD,CAAxC,GAAgEA,mBADlE;;IAGD;IACD,IAAIC,oBAAoB,YAAYU,GAAhC,IAAuCC,KAAK,CAACC,OAAN,CAAcZ,oBAAd,CAA3C,EAAgF;MAC9E,KAAKc,uBAAL;MACEH,KAAK,CAACC,OAAN,CAAcZ,oBAAd,IAAsCU,GAAG,CAACV,oBAAD,CAAzC,GAAkEA,oBADpE;;IAGD;IACD,IAAIC,oBAAoB,YAAYS,GAAhC,IAAuCC,KAAK,CAACC,OAAN,CAAcX,oBAAd,CAA3C,EAAgF;MAC9E,KAAKc,uBAAL;MACEJ,KAAK,CAACC,OAAN,CAAcX,oBAAd,IAAsCS,GAAG,CAACT,oBAAD,CAAzC,GAAkEA,oBADpE;;IAGD;IACD,IAAIe,MAAM,CAACC,QAAP,CAAgBf,sBAAhB,CAAJ,EAA6C;MAC3C,KAAKgB,yBAAL,CAA+BhB,sBAA/B;IACD;EACF;;EAED;AACF;AACA;AACA;AACA;AACA;EACEiB,iBAAiB,CAAEhB,cAAc,GAAG,EAAnB,EAAuB;IACtC,MAAQC,QAAR,GAA+BD,cAA/B,CAAQC,QAAR,CAAkBC,QAAlB,GAA+BF,cAA/B,CAAkBE,QAAlB;IACA,IAAID,QAAJ,EAAc;MACZ,KAAKD,cAAL,CAAoBG,GAApB,CAAwB,UAAxB,EAAoCF,QAApC;IACD;IACD,IAAIC,QAAJ,EAAc;MACZ,KAAKF,cAAL,CAAoBG,GAApB,CAAwB,UAAxB,EAAoCD,QAApC;IACD;EACF;;EAED;AACF;AACA;AACA;EACEa,yBAAyB,CAAEhB,sBAAF,EAA0B;IACjD,KAAKA,sBAAL,GAA8BA,sBAA9B;EACD;;EAED;AACF;AACA;AACA;EACEkB,yBAAyB,GAAI;IAC3B,OAAO,KAAKlB,sBAAZ;EACD;;EAED;AACF;AACA;AACA;EACEW,sBAAsB,CAAEd,mBAAF,EAAuB;IAC3C,KAAKA,mBAAL,GAA2BA,mBAA3B;EACD;;EAED;AACF;AACA;AACA;EACEsB,sBAAsB,GAAI;IACxB,OAAO,KAAKtB,mBAAZ;EACD;;EAED;AACF;AACA;AACA;EACEe,uBAAuB,CAAEd,oBAAF,EAAwB;IAC7C,KAAKA,oBAAL,GAA4BA,oBAA5B;EACD;;EAED;AACF;AACA;AACA;EACEsB,uBAAuB,GAAI;IACzB,OAAO,KAAKtB,oBAAZ;EACD;;EAED;AACF;AACA;AACA;EACEe,uBAAuB,CAAEd,oBAAF,EAAwB;IAC7C,KAAKA,oBAAL,GAA4BA,oBAA5B;EACD;;EAED;AACF;AACA;AACA;EACEsB,uBAAuB,GAAI;IACzB,OAAO,KAAKtB,oBAAZ;EACD;;EAED;AACF;AACA;AACA;EACEO,YAAY,CAAEX,SAAF,EAAa;IACvB,KAAKA,SAAL,GAAiBA,SAAjB;EACD;;EAED;AACF;AACA;AACA;EACE2B,YAAY,GAAI;IACd,OAAO,KAAK3B,SAAZ;EACD;;EAED;AACF;AACA;AACA;EACEY,aAAa,CAAEX,UAAF,EAAc;IACzB,KAAKA,UAAL,GAAkBA,UAAlB;EACD;;EAED;AACF;AACA;AACA;EACE2B,aAAa,GAAI;IACf,OAAO,KAAK3B,UAAZ;EACD;;EAED;AACF;AACA;AACA;AACA;AACA;EACEL,QAAQ,CAAEN,KAAF,EAAS;IACf,KAAKA,KAAL,GAAa,CAACwB,KAAK,CAACC,OAAN,CAAczB,KAAd,CAAD,GAAwBR,MAAM,CAACQ,KAAD,CAAN,CAAcuC,KAAd,CAAoB,GAApB,CAAxB,GAAmDvC,KAAhE;IACA,KAAKA,KAAL,GAAa,KAAKA,KAAL,CAAWwC,MAAX,CAAkB,CAACC,GAAD,EAAMC,CAAN,KAAY;MACzC;MACA,MAAMC,IAAI,GAAGnD,MAAM,CAACkD,CAAD,CAAN,CAAUE,IAAV,GAAiBnD,OAAjB,CAAyB,KAAzB,EAAgC,EAAhC,CAAb;MACA,IAAI,CAACkD,IAAL,EAAW;QACT,OAAOF,GAAP;MACD;MACD,OAAOA,GAAG,CAACI,MAAJ,CAAWF,IAAX,CAAP;IACD,CAPY,EAOV,EAPU,CAAb;EAQD;;EAED;AACF;AACA;AACA;EACEG,QAAQ,GAAI;IACV,OAAO,KAAK9C,KAAZ;EACD;;EAED;AACF;AACA;AACA;AACA;EACE+C,aAAa,CAAEJ,IAAF,EAAQ;IACnB,MAAMK,gBAAgB,GAAG,gBAASL,IAAT,CAAzB;IACA,OAAO,KAAKG,QAAL,GAAgBG,SAAhB,CAA0B,CAACP,CAAD,KAAO;MACtC,MAAMQ,UAAU,GAAG,gBAASR,CAAT,CAAnB;MACA;MACA,OAAO,CAAC,UAAD,EAAa,UAAb,EAAyB,MAAzB,EAAiC,MAAjC,EAAyCS,KAAzC,CAA+C,CAACC,KAAD,KAAWJ,gBAAgB,CAACI,KAAD,CAAhB,KAA4BF,UAAU,CAACE,KAAD,CAAhG,CAAP;IACD,CAJM,CAAP;EAKD;;EAED;AACF;AACA;AACA;AACA;AACA;EACEC,aAAa,CAAEC,SAAF,EAAa;IACxB;IACA,MAAMC,eAAe,GAAGD,SAAS,GAAG,KAAKE,kBAAL,EAAH,GAA+B,KAAKC,kBAAL,EAAhE;IACA,OAAO,KAAKX,QAAL,GAAgBS,eAAhB,CAAP;EACD;;EAED;AACF;AACA;AACA;AACA;EACEG,kBAAkB,CAAEH,eAAF,EAAmB;IACnC,IAAI,CAAC1B,MAAM,CAACC,QAAP,CAAgByB,eAAhB,CAAL,EAAuC;MACrC,MAAM,IAAI/C,KAAJ,CAAU,+CAAV,CAAN;IACD;IACD,MAAMmD,UAAU,GAAG,KAAKpD,aAAL,EAAnB;IACA,IAAIgD,eAAe,GAAG,CAAtB,EAAyB;MACvB;MACA,KAAKA,eAAL,GAAuB,CAAvB;IACD,CAHD,MAGO,IAAIA,eAAe,IAAII,UAAvB,EAAmC;MACxC;MACA,KAAKJ,eAAL,GAAuBI,UAAU,GAAG,CAApC;IACD,CAHM,MAGA;MACL,KAAKJ,eAAL,GAAuBA,eAAvB;IACD;IACD,OAAO,KAAKA,eAAZ;EACD;;EAED;AACF;AACA;AACA;EACEC,kBAAkB,GAAI;IACpB,OAAO,KAAKI,eAAZ;EACD;;EAED;AACF;AACA;AACA;AACA;EACEC,kBAAkB,CAAED,eAAF,EAAmB;IACnC,IAAI,CAAC/B,MAAM,CAACC,QAAP,CAAgB8B,eAAhB,CAAL,EAAuC;MACrC,MAAM,IAAIpD,KAAJ,CAAU,+CAAV,CAAN;IACD;IACD,MAAMmD,UAAU,GAAG,KAAKpD,aAAL,EAAnB;IACA,IAAIqD,eAAe,GAAG,CAAtB,EAAyB;MACvB,KAAKA,eAAL,GAAuB,CAAvB;IACD,CAFD,MAEO,IAAIA,eAAe,GAAGD,UAAtB,EAAkC;MACvC,KAAKC,eAAL,GAAuBD,UAAU,GAAG,CAApC;IACD,CAFM,MAEA;MACL,KAAKC,eAAL,GAAuBA,eAAvB;IACD;IACD,OAAO,KAAKA,eAAZ;EACD;;EAED;AACF;AACA;AACA;EACEH,kBAAkB,GAAI;IACpB,OAAO,KAAKF,eAAZ;EACD;;EAED;AACF;AACA;AACA;AACA;EACEnC,uBAAuB,CAAEX,oBAAF,EAAwB;IAC7C,IAAI,OAAOA,oBAAP,KAAgC,SAApC,EAA+C;MAC7C,MAAM,IAAID,KAAJ,CAAU,mDAAV,CAAN;IACD;IACD,KAAKC,oBAAL,GAA4BA,oBAA5B;EACD;;EAED;AACF;AACA;AACA;EACEqD,uBAAuB,GAAI;IACzB,OAAO,KAAKrD,oBAAZ;EACD;;EAED;AACF;AACA;AACA;AACA;EACEsD,sBAAsB,CAAER,eAAe,GAAG,KAAKE,kBAAL,EAApB,EAA+C;IACnE,MAAME,UAAU,GAAG,KAAKpD,aAAL,EAAnB;IACA,MAAMyD,SAAS,GAAGT,eAAe,GAAG,CAApC;IACA;IACA,IAAII,UAAU,KAAKK,SAAnB,EAA8B;MAC5B,OAAO,CAAP;IACD;IACD,OAAOA,SAAP;EACD;;EAED;AACF;AACA;AACA;EACEC,sBAAsB,GAAI;IACxB;IACA,IAAI,CAAC,KAAKH,uBAAL,EAAL,EAAqC;MACnC;IACD;IACD,MAAMH,UAAU,GAAG,KAAKpD,aAAL,EAAnB;IACA,IAAI,KAAKuD,uBAAL,MAAkCH,UAAU,IAAI,CAApD,EAAuD;MACrD;IACD;IACD,KAAKD,kBAAL,CAAwB,KAAKK,sBAAL,EAAxB;EACD;;EAED;AACF;AACA;AACA;EACExD,aAAa,GAAI;IACf,OAAO,KAAKuC,QAAL,GAAgBoB,MAAvB;EACD;;EAED;AACF;AACA;AACA;EACEC,aAAa,CAAEC,GAAF,EAAO;IAClB,OAAO,KAAKC,kBAAL,CAAwBC,IAAxB,CAA6BF,GAA7B,CAAP;EACD;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEG,kBAAkB,CAAEtE,OAAO,GAAG,EAAZ,EAAgB;IAChC;IACEuE,UADF;;;IAIIvE,OAJJ,CACEuE,UADF,CAEEC,SAFF,GAIIxE,OAJJ,CAEEwE,SAFF,CAGEC,UAHF,GAIIzE,OAJJ,CAGEyE,UAHF;IAKA;IACA,IAAI,CAAC,KAAKtC,uBAAL,GAA+BuC,GAA/B,CAAmCD,UAAnC,CAAL,EAAqD;MACnD,OAAO,KAAP;IACD;IACD,IAAIF,UAAU,IAAI,KAAKrC,uBAAL,GAA+BwC,GAA/B,CAAmCH,UAAnC,CAAlB,EAAkE;MAChE,OAAO,IAAP;IACD;IACD,IAAIC,SAAS,IAAI,KAAKvC,sBAAL,GAA8ByC,GAA9B,CAAkCF,SAAlC,CAAjB,EAA+D;MAC7D,OAAO,IAAP;IACD;IACD,OAAO,KAAP;EACD;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACQG,KAAK,CAAE3E,OAAO,GAAG,EAAZ,EAAgB;MACzB;MACE4E,IADF;;;;;;;;;;;;;;;;MAiBI5E,OAjBJ,CACE4E,IADF,oBAiBI5E,OAjBJ,CAEEd,OAFF,CAEEA,OAFF,iCAEY,EAFZ,0CAiBIc,OAjBJ,CAGEyE,UAHF,CAGEA,UAHF,oCAGeI,4BAHf,uBAIEC,KAJF,GAiBI9E,OAjBJ,CAIE8E,KAJF,mBAiBI9E,OAjBJ,CAKE+E,MALF,CAKEA,MALF,gCAKW,KALX,sCAiBI/E,OAjBJ,CAMEgF,OANF,CAMEA,OANF,iCAMYjG,cANZ,yCAiBIiB,OAjBJ,CAOEqD,SAPF,CAOEA,SAPF,mCAOc,KAPd,yCAiBIrD,OAjBJ,CAQEiF,OARF,CAQEA,OARF,iCAQY,KAAI,CAAC3E,aAAL,KAAuB,CARnC,4CAiBIN,OAjBJ,CASEkF,YATF,CASEA,YATF,sCASiB,EATjB,4CAiBIlF,OAjBJ,CAUEN,OAVF,CAUEA,OAVF,iCAUY,CAVZ,4CAiBIM,OAjBJ,CAWEmF,YAXF,CAWEA,YAXF,sCAWiB,CAXjB,iDAiBInF,OAjBJ,CAYEoF,eAZF,CAYEA,eAZF,sCAYoB,CAZpB,yBAaEC,gBAbF,GAiBIrF,OAjBJ,CAaEqF,gBAbF,yBAiBIrF,OAjBJ,CAcEc,sBAdF,CAcEA,sBAdF,sCAc2B,KAAI,CAACkB,yBAAL,EAd3B,8CAiBIhC,OAjBJ,CAeES,SAfF,CAeEA,SAfF,mCAec,KAAI,CAAC2B,YAAL,EAfd,4CAiBIpC,OAjBJ,CAgBEU,UAhBF,CAgBEA,UAhBF,oCAgBe,KAAI,CAAC2B,aAAL,EAhBf;MAkBA;MACA,MAAMiD,UAAU,GAAG1D,MAAM,CAACC,QAAP,CAAgBwD,gBAAhB,IAAoC,KAAI,CAACxC,QAAL,GAAgBwC,gBAAhB,CAApC;MACf,KAAI,CAACjC,aAAL,CAAmBC,SAAnB,CADJ;MAEA,IAAMc,GAAN,GAAcnE,OAAd,CAAMmE,GAAN;MACA,IAAI,CAACA,GAAL,EAAU;QACR,MAAM,IAAI5D,KAAJ,CAAU,4BAAV,CAAN;MACD;MACD4D,GAAG,GAAG,KAAI,CAACD,aAAL,CAAmBC,GAAnB,IAA0BA,GAA1B,GAAiC,GAAEmB,UAAW,IAAGjG,SAAS,CAAC8E,GAAD,CAAM,EAAtE;MACA,IAAI;QACF,IAAIoB,IAAJ;QACA,IAAI,KAAI,CAACxE,cAAL,CAAoByE,IAAxB,EAA8B;UAC5BD,IAAI,GAAG;YACLvE,QAAQ,EAAE,KAAI,CAACD,cAAL,CAAoB0E,GAApB,CAAwB,UAAxB,CADL;YAELxE,QAAQ,EAAE,KAAI,CAACF,cAAL,CAAoB0E,GAApB,CAAwB,UAAxB,CAFL,EAAP;;QAID;QACD,MAAMC,QAAQ,SAAS,oBAAM;UAC3BC,GAAG,EAAExB,GADsB;UAE3BoB,IAF2B;UAG3BK,IAAI,EAAEhB,IAHqB;UAI3BM,YAAY,EAAE,CAJa,EAIV;UACjBhG,OAAO,EAAED,oBAAoB,CAACC,OAAD,CALF;UAM3B2G,YAAY,EAAEd,MAAM,GAAG,QAAH,GAAc,MANP;UAO3Be,MAAM,EAAErB,UAPmB;UAQ3BsB,MAAM,EAAEjB,KARmB;UAS3BE,OAT2B;UAU3BtE,UAV2B;UAW3BD,SAX2B;UAY3BuF,gBAAgB,CAAED,MAAF,EAAU;YACxB,OAAO,mBAAeA,MAAf,EAAuB,EAAEE,WAAW,EAAE,UAAf,EAAvB,CAAP;UACD,CAd0B,EAAN,CAAvB;;QAgBA,IAAIlB,MAAJ,EAAY;UACV,OAAOW,QAAQ,CAACE,IAAhB;QACD;QACD,OAAO;UACLhB,IAAI,EAAEc,QAAQ,CAACE,IADV;UAELM,MAAM,EAAER,QAAQ,CAACQ,MAFZ,EAAP;;MAID,CA/BD,CA+BE,OAAOC,CAAP,EAAU;QACV,oBAA2CA,CAA3C,CAAQT,QAAR,CAAQA,QAAR,4BAAmB,EAAnB,eAA6BlB,SAA7B,GAA2C2B,CAA3C,CAAuBC,IAAvB;QACA,MAAgBC,cAAhB,GAAkEX,QAAlE,CAAQQ,MAAR,qBAAkER,QAAlE,CAAgCxG,OAAhC,CAAyCoH,eAAzC,kCAA2D,EAA3D;QACA;QACA,MAAMC,SAAS,GAAG,KAAI,CAACjC,kBAAL,CAAwB;UACxCC,UAAU,EAAE8B,cAD4B;UAExC7B,SAFwC;UAGxCC,UAHwC,EAAxB,CAAlB;;QAKA;QACA,IAAI+B,oBAAoB,GAAG5E,MAAM,CAACC,QAAP,CAAgBwD,gBAAhB,IAAoCA,gBAApC;QACvB,KAAI,CAAC7B,kBAAL,EADJ;QAEAgD,oBAAoB,IAAI,CAAxB;QACA;QACA,IAAIA,oBAAoB,KAAK,KAAI,CAAClG,aAAL,EAA7B,EAAmD;UACjDkG,oBAAoB,GAAG,CAAvB;QACD;QACD;QACA,IAAIH,cAAc,KAAK,GAAnB,IAA0BA,cAAc,KAAK,GAAjD,EAAsD;UACpD;UACA,IAAIjB,eAAe,IAAIF,YAAvB,EAAqC;YACnC,MAAM,8CAAkC,mCAAkCA,YAAa,mBAAjF,CAAN;UACD;UACD,MAAMuB,QAAQ,GAAG,OAAOH,eAAP,KAA2B,QAA3B,GAAsCA,eAAe,CAACG,QAAtD,GAAiEC,SAAlF;UACA;UACA,IAAIrD,SAAJ,EAAe;YACb,MAAMsD,kBAAkB,GAAG,KAAI,CAAC7D,aAAL,CAAmB2D,QAAnB,CAA3B;YACA;YACA,IAAIE,kBAAkB,GAAG,CAAC,CAA1B,EAA6B;cAC3B,KAAI,CAAC/C,kBAAL,CAAwB+C,kBAAxB;YACD;UACF;UACD,OAAO,KAAI,CAAChC,KAAL;UACF3E,OADE;YAELmE,GAAG,EAAEsC,QAFA;YAGL/G,OAAO,EAAEA,OAAO,GAAG,CAHd;YAIL0F,eAAe,EAAEA,eAAe,GAAG,CAJ9B;YAKLC,gBAAgB,EAAEmB,oBALb,IAAP;;QAOD;QACD,IAAID,SAAS,IAAIpB,YAAY,GAAGF,OAAhC,EAAyC;UACvC,MAAM2B,QAAQ,GAAGnH,sBAAsB,CAAC0F,YAAD,EAAerE,sBAAf,CAAvC;UACA,MAAM+F,YAAY,GAAG,IAAIC,OAAJ,CAAY,CAACC,OAAD,KAAa;YAC5CC,UAAU,CAACD,OAAD,EAAUH,QAAV,CAAV;UACD,CAFoB,CAArB;UAGA,MAAMC,YAAN;UACA,OAAO,KAAI,CAAClC,KAAL;UACF3E,OADE;YAELN,OAAO,EAAEA,OAAO,GAAG,CAFd;YAGLyF,YAAY,EAAEA,YAAY,GAAG,CAHxB;YAILE,gBAAgB,EAAEmB,oBAJb,IAAP;;QAMD;QACD,MAAML,CAAN;MACD,CAhHwB;EAiH1B;;EAED;AACF;AACA;AACA;AACA;EACQV,GAAG,CAAEzF,OAAO,GAAG,EAAZ,EAAgB;MACvB,OAAO,MAAI,CAAC2E,KAAL,iCAAgB3E,OAAhB,SAAyByE,UAAU,EAAEI,4BAArC,IAAP,CADuB;EAExB;;EAED;AACF;AACA;AACA;AACA;EACQoC,IAAI,CAAEjH,OAAO,GAAG,EAAZ,EAAgB;MACxB,OAAO,MAAI,CAAC2E,KAAL,iCAAgB3E,OAAhB,SAAyByE,UAAU,EAAEyC,6BAArC,IAAP,CADwB;EAEzB,CA3lB8B,C"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_axios","_interopRequireDefault","require","_qs","_url","_httpMethods","_contentTypes","_errors","_retryable","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","DEAULT_TIMEOUT","exports","DEAULT_RETRY_DELAY","createDefaultHeaders","headers","_headers$Accept","Accept","CONTENT_TYPE_APPLICATION_JSON","cleanPath","path","String","replace","getWaitTimeExponential","attempt","base","exponent","Math","pow","HttpRequest","constructor","hosts","options","RETRYABLE_ERROR_CODES","RETRYABLE_STATUS_CODES","RETRYABLE_HTTP_METHODS","Map","setHosts","getTotalHosts","Error","_options$activeHostRo","activeHostRoundRobin","httpAgent","httpsAgent","retryableErrorCodes","retryableStatusCodes","retryableHttpMethods","exponentailBackoffExponent","exponentailBackoffBase","authentication","username","password","set","setActiveHostRoundRobin","setHttpAgent","setHttpsAgent","Set","Array","isArray","setRetryableErrorCodes","setRetryableStatusCodes","setRetryableHttpMethods","Number","isFinite","setExponentailBackoffBase","setExponentailBackoffExponent","setAuthentication","getExponentailBackoffBase","getExponentailBackoffExponent","getRetryableErrorCodes","getRetryableStatusCodes","getRetryableHttpMethods","getHttpAgent","getHttpsAgent","split","reduce","acc","v","host","trim","concat","getHosts","findHostIndex","parsedHostToFind","parseUrl","findIndex","parsedHost","every","field","getActiveHost","useLeader","activeHostIndex","getLeaderHostIndex","getActiveHostIndex","setActiveHostIndex","totalHosts","leaderHostIndex","setLeaderHostIndex","getActiveHostRoundRobin","getNextActiveHostIndex","nextIndex","setNextActiveHostIndex","uriIsAbsolute","uri","absoluteUriPattern","test","requestIsRetryable","statusCode","errorCode","httpMethod","has","fetch","_this","_asyncToGenerator2","body","_options$headers","_options$httpMethod","HTTP_METHOD_GET","query","_options$stream","stream","_options$timeout","timeout","_options$useLeader","_options$retries","retries","_options$maxRedirects","maxRedirects","_options$attempt","_options$retryAttempt","retryAttempt","_options$redirectAtte","redirectAttempt","attemptHostIndex","_options$exponentailB","_options$exponentailB2","_options$httpAgent","_options$httpsAgent","activeHost","auth","size","get","response","axios","url","data","responseType","method","params","paramsSerializer","stringifyQuery","arrayFormat","status","_e$response","code","responseStatus","_response$headers","responseHeaders","retryable","nextAttemptHostIndex","ERROR_HTTP_REQUEST_MAX_REDIRECTS","location","undefined","newLeaderHostIndex","waitTime","Promise","resolve","setTimeout","_this2","post","_this3","HTTP_METHOD_POST"],"sources":["../../es6/http-request/index.js"],"sourcesContent":["/**\n * Plain HTTP client to be used when creating RQLite specific API HTTP clients\n * @module http-request\n */\nimport axios from 'axios'\nimport { stringify as stringifyQuery } from 'qs'\nimport { parse as parseUrl } from 'url'\nimport {\n HTTP_METHOD_GET,\n HTTP_METHOD_POST,\n} from './http-methods'\nimport {\n CONTENT_TYPE_APPLICATION_JSON,\n // CONTENT_TYPE_APPLICATION_OCTET_STREAM,\n} from './content-types'\nimport { ERROR_HTTP_REQUEST_MAX_REDIRECTS } from './errors'\nimport {\n RETRYABLE_ERROR_CODES,\n RETRYABLE_HTTP_METHODS,\n RETRYABLE_STATUS_CODES,\n} from './retryable'\n\n/**\n * RQliteJS HTTP Request options\n * @typedef HttpRequestOptions\n * @type {Object}\n * @property {Object} [auth] A object for user authentication\n * @property {String} [auth.username] The username for authentication\n * @property {String} [auth.password] The username for authentication\n * @property {Object} [body] The body of the HTTP request\n * @property {Object} [headers={}] HTTP headers to send with the request\n * @property {String} [httpMethod=HTTP_METHOD_GET] The HTTP method for the request\n * i.e. GET or POST\n * @property {Object} [query] An object with the query to send with the HTTP request\n * @property {Boolean} [stream=false] When true the returned value is a request object with\n * stream support instead of a request-promise result\n * @property {Number} [timeout=DEAULT_TIMEOUT] Optional timeout to override default\n * @property {String} uri The uri for the request which can be a relative path to use\n * the currently active host or a full i.e. http://localhost:4001/db/query which is used\n * literally\n * @property {Boolean} [useLeader=false] When true the request will use the master host, the\n * first host in this.hosts, this is ideal for write operations to skip the redirect\n * @property {Number} [retries] The number of retries, defaults to the number of\n * hosts times 3\n * @property {Number} [maxRedirects=10] The maximum number of HTTP redirects to follow before\n * throwing an error\n * @property {Number} [attempt=0] The current attempt count when retrying or redirecting\n * @property {Number} [retryAttempt=0] The current attempt based on retry logic\n * @property {Number} [redirectAttempt=0] The current attempt based on redirect logic\n * @property {Number} [attemptHostIndex] When in a retry state the host index of the last\n * attempt which is used to get the next host index\n * @property {import('http').Agent} [httpAgent] An option http agent, useful for\n * keepalive pools using plain HTTP\n * @property {import('https').Agent} [httpsAgent] An option http agent, useful\n * for keepalive pools using SSL\n */\n\n/**\n * The default timeout value\n */\nexport const DEAULT_TIMEOUT = 30000\n\n/**\n * The default to retry a request using the next host in the chain\n */\nexport const DEAULT_RETRY_DELAY = 30000\n\n/**\n * Create default header for all HTTP requests\n * @param {Object} [headers={}] HTTP headers to send with the request\n * @returns {Object} The headers with defaults applied\n */\nexport function createDefaultHeaders (headers = {}) {\n const { Accept = CONTENT_TYPE_APPLICATION_JSON } = headers\n return { ...headers, Accept }\n}\n\n/**\n * Clean the request path remove / from the beginning\n * @param {String} path The path to clean\n * @returns {String} The clean path\n */\nfunction cleanPath (path) {\n return String(path).replace(/^\\//, '')\n}\n\n/**\n * Returns the next wait interval, in milliseconds, using an exponential\n * backoff algorithm.\n * @param {Number} attempt The retry attempt\n * @param {Number} base The base of the exponential backoff\n * @param {Number} exponent The exponential power\n * @returns {Number} The time to wait in milliseconds\n */\nexport function getWaitTimeExponential (attempt = 0, base = 100, exponent = 2) {\n if (attempt === 0) {\n return 0\n }\n return (exponent ** attempt) * base\n}\n\n/**\n * Generic HTTP Request class which all RQLiteJS client\n * should extend for consistent communitication with an RQLite\n * server\n */\nexport default class HttpRequest {\n /**\n * The index of the host in this.hosts which will be tried\n * first before attempting other hosts\n * @type {Number}\n */\n activeHostIndex = 0\n\n /**\n * Whether or not the setNextActiveHostIndex() should\n * perform a round robin strategy\n */\n activeHostRoundRobin = true\n\n /**\n * The regex pattern to check if a uri is absolute or relative,\n * if it is absolute the host is not appended\n */\n absoluteUriPattern = /^https?:\\/\\//\n\n /**\n * A list of hosts that are tried in round robin fashion\n * when certain HTTP responses are received\n * @type {String[]}\n */\n hosts = []\n\n /**\n * @type {import('http').Agent} The http agent if it is set\n */\n httpAgent\n\n /**\n * @type {import('https').Agent} The https agent if it is set\n */\n httpsAgent\n\n /**\n * The host list index of the leader node defaults\n * to the first host\n * @type {Number}\n */\n leaderHostIndex = 0\n\n /**\n * Http error codes which are considered retryable\n * @type {Set}\n */\n retryableErrorCodes = RETRYABLE_ERROR_CODES\n\n /**\n * Http status codes which are considered retryable\n * @type {Set}\n */\n retryableStatusCodes = RETRYABLE_STATUS_CODES\n\n /**\n * Http methods which are considered retryable\n * @type {Set}\n */\n retryableHttpMethods = RETRYABLE_HTTP_METHODS\n\n /**\n * The exponential backoff base for retries\n */\n exponentailBackoffBase = 100\n\n /**\n * The exponent to increase backoff each try\n */\n exponentailBackoffExponent = 1.1\n\n /**\n * Authentication Map\n * @type {Map}\n * @property {String} username\n * @property {String} password\n */\n authentication = new Map()\n\n /**\n * Construtor for HttpRequest\n * @param {String[]|String} hosts An array of RQLite hosts or a string\n * that will be split on \",\" to create an array of hosts, the first\n * host will be tried first when there are multiple hosts\n * @param {Object} [options={}] Additional options\n * @param {Object} [options.authentication] Authentication options\n * @param {String} [options.authentication.username] The host authentication username\n * @param {String} [options.authentication.password] The host authentication password\n * @param {Boolean} [options.activeHostRoundRobin=true] If true this.setNextActiveHostIndex()\n * will perform a round robin when called\n * @param {import('http').Agent} [options.httpAgent] An option http agent, useful for\n * keepalive pools using plain HTTP\n * @param {import('https').Agent} [options.httpsAgent] An option http agent, useful\n * for keepalive pools using SSL\n * @param {Set|String[]} [options.retryableErrorCodes] The list of retryable error codes\n * @param {Set|Number[]} [options.retryableStatusCodes] The list of retryable http status codes\n * @param {Set|String[]} [options.retryableHttpMethods] The list of retryable http methods\n * @param {Number} [options.exponentailBackoffBase] The value for exponentail backoff base\n * for retry exponential backoff\n * @param {Number} [options.exponentailBackoffExponent] Exponent to increase backoff each try\n */\n constructor (hosts, options = {}) {\n this.setHosts(hosts)\n if (this.getTotalHosts() === 0) {\n throw new Error('At least one host must be provided')\n }\n const {\n activeHostRoundRobin = true,\n httpAgent,\n httpsAgent,\n retryableErrorCodes,\n retryableStatusCodes,\n retryableHttpMethods,\n exponentailBackoffExponent,\n exponentailBackoffBase,\n authentication,\n } = options\n if (typeof authentication === 'object') {\n const { username, password } = authentication\n if (username) {\n this.authentication.set('username', username)\n }\n if (password) {\n this.authentication.set('password', password)\n }\n }\n if (typeof activeHostRoundRobin !== 'undefined') {\n this.setActiveHostRoundRobin(activeHostRoundRobin)\n }\n if (typeof httpAgent !== 'undefined') {\n this.setHttpAgent(httpAgent)\n }\n if (typeof httpsAgent !== 'undefined') {\n this.setHttpsAgent(httpsAgent)\n }\n if (retryableErrorCodes instanceof Set || Array.isArray(retryableErrorCodes)) {\n this.setRetryableErrorCodes(\n Array.isArray(retryableErrorCodes) ? Set(retryableErrorCodes) : retryableErrorCodes,\n )\n }\n if (retryableStatusCodes instanceof Set || Array.isArray(retryableStatusCodes)) {\n this.setRetryableStatusCodes(\n Array.isArray(retryableStatusCodes) ? Set(retryableStatusCodes) : retryableStatusCodes,\n )\n }\n if (retryableHttpMethods instanceof Set || Array.isArray(retryableHttpMethods)) {\n this.setRetryableHttpMethods(\n Array.isArray(retryableHttpMethods) ? Set(retryableHttpMethods) : retryableHttpMethods,\n )\n }\n if (Number.isFinite(exponentailBackoffBase)) {\n this.setExponentailBackoffBase(exponentailBackoffBase)\n }\n if (Number.isFinite(exponentailBackoffExponent)) {\n this.setExponentailBackoffExponent(exponentailBackoffExponent)\n }\n }\n\n /**\n * Set authentication information\n * @param {Object} [authentication] Authentication data\n * @param {String} [authentication.username] The host authentication username\n * @param {String} [authentication.password] The host authentication password\n */\n setAuthentication (authentication = {}) {\n const { username, password } = authentication\n if (username) {\n this.authentication.set('username', username)\n }\n if (password) {\n this.authentication.set('password', password)\n }\n }\n\n /**\n * Set the exponentail backoff base\n * @param {Number} exponentailBackoffBase\n */\n setExponentailBackoffBase (exponentailBackoffBase) {\n this.exponentailBackoffBase = exponentailBackoffBase\n }\n\n /**\n * Get the exponentail backoff base\n * @return {Number} The exponentail backoff base\n */\n getExponentailBackoffBase () {\n return this.exponentailBackoffBase\n }\n\n /**\n * Set the exponentail backoff exponent\n * @param {Number} exponentailBackoffExponent\n */\n setExponentailBackoffExponent (exponentailBackoffExponent) {\n this.exponentailBackoffExponent = exponentailBackoffExponent\n }\n\n /**\n * Get the exponentail backoff exponent\n * @return {Number} The exponentail backoff exponent\n */\n getExponentailBackoffExponent () {\n return this.exponentailBackoffExponent\n }\n\n /**\n * Set the retryable error codes\n * @param {Set} retryableErrorCodes\n */\n setRetryableErrorCodes (retryableErrorCodes) {\n this.retryableErrorCodes = retryableErrorCodes\n }\n\n /**\n * Get the retryable error codes\n * @returns {Set}\n */\n getRetryableErrorCodes () {\n return this.retryableErrorCodes\n }\n\n /**\n * Set the retryable status codes\n * @param {Set} retryableStatusCodes\n */\n setRetryableStatusCodes (retryableStatusCodes) {\n this.retryableStatusCodes = retryableStatusCodes\n }\n\n /**\n * Get the retryable status codes\n * @returns {Set}\n */\n getRetryableStatusCodes () {\n return this.retryableStatusCodes\n }\n\n /**\n * Set the retryable http methods\n * @param {Set} retryableHttpMethods\n */\n setRetryableHttpMethods (retryableHttpMethods) {\n this.retryableHttpMethods = retryableHttpMethods\n }\n\n /**\n * Get the retryable http methods\n * @returns {Set}\n */\n getRetryableHttpMethods () {\n return this.retryableHttpMethods\n }\n\n /**\n * Set an http agent which is useful for http keepalive requests\n * @param {import('http').Agent} httpAgent An http agent\n */\n setHttpAgent (httpAgent) {\n this.httpAgent = httpAgent\n }\n\n /**\n * Get the set http agent\n * @returns {import('http').Agent|undefined} The https agent if it is set\n */\n getHttpAgent () {\n return this.httpAgent\n }\n\n /**\n * Set an https agent which is useful for https keepalive requests\n * @param {import('https').Agent} httpsAgent An https agent\n */\n setHttpsAgent (httpsAgent) {\n this.httpsAgent = httpsAgent\n }\n\n /**\n * Get the set https agent\n * @returns {import('https').Agent|undefined} The https agent if it is set\n */\n getHttpsAgent () {\n return this.httpsAgent\n }\n\n /**\n * Set the list of hosts\n * @param {String[]|String} hosts An array of RQLite hosts or a string\n * that will be split on \",\" to create an array of hosts, the first\n * host will be tried first when there are multiple hosts\n */\n setHosts (hosts) {\n this.hosts = !Array.isArray(hosts) ? String(hosts).split(',') : hosts\n this.hosts = this.hosts.reduce((acc, v) => {\n // Remove trailing slashed from hosts\n const host = String(v).trim().replace(/\\/$/, '')\n if (!host) {\n return acc\n }\n return acc.concat(host)\n }, [])\n }\n\n /**\n * Get the list of hosts\n * @returns {String[]} The list of hosts\n */\n getHosts () {\n return this.hosts\n }\n\n /**\n * Given a host string find the index of that host in the hosts\n * @param {String} host A host to find in hosts\n * @returns {Number} The found host index or -1 if not found\n */\n findHostIndex (host) {\n const parsedHostToFind = parseUrl(host)\n return this.getHosts().findIndex((v) => {\n const parsedHost = parseUrl(v)\n // Find a host where all the parsed fields match the requested host\n return ['hostname', 'protocol', 'port', 'path'].every((field) => parsedHostToFind[field] === parsedHost[field])\n })\n }\n\n /**\n * Get the current active host from the hosts array\n * @param {Boolean} useLeader If true use the first host which is always\n * the master, this is prefered for write operations\n * @returns {String} The active host\n */\n getActiveHost (useLeader) {\n // When useLeader is true we should just use the first host\n const activeHostIndex = useLeader ? this.getLeaderHostIndex() : this.getActiveHostIndex()\n return this.getHosts()[activeHostIndex]\n }\n\n /**\n * Set the active host index with check based on this.hosts\n * @param {Number} activeHostIndex The index\n * @returns {Number} The active host index\n */\n setActiveHostIndex (activeHostIndex) {\n if (!Number.isFinite(activeHostIndex)) {\n throw new Error('The activeHostIndex should be a finite number')\n }\n const totalHosts = this.getTotalHosts()\n if (activeHostIndex < 0) {\n // Don't allow an index less then zero\n this.activeHostIndex = 0\n } else if (activeHostIndex >= totalHosts) {\n // Don't allow an index greater then the length of the hosts\n this.activeHostIndex = totalHosts - 1\n } else {\n this.activeHostIndex = activeHostIndex\n }\n return this.activeHostIndex\n }\n\n /**\n * Get the host index for the leader node\n * @returns {Number} The host index for the leader node\n */\n getLeaderHostIndex () {\n return this.leaderHostIndex\n }\n\n /**\n * Set the index in the host array for the leader node\n * @param {Number} leaderHostIndex The index of the host that is the leader node\n * @returns {Number} The host index for the leader node\n */\n setLeaderHostIndex (leaderHostIndex) {\n if (!Number.isFinite(leaderHostIndex)) {\n throw new Error('The leaderHostIndex should be a finite number')\n }\n const totalHosts = this.getTotalHosts()\n if (leaderHostIndex < 0) {\n this.leaderHostIndex = 0\n } else if (leaderHostIndex > totalHosts) {\n this.leaderHostIndex = totalHosts - 1\n } else {\n this.leaderHostIndex = leaderHostIndex\n }\n return this.leaderHostIndex\n }\n\n /**\n * Get the active host index\n * @returns {Number} The active host index\n */\n getActiveHostIndex () {\n return this.activeHostIndex\n }\n\n /**\n * Set active host round robin value\n * @param {Boolean} activeHostRoundRobin If true setActiveHostIndex() will\n * perform a round robin\n */\n setActiveHostRoundRobin (activeHostRoundRobin) {\n if (typeof activeHostRoundRobin !== 'boolean') {\n throw new Error('The activeHostRoundRobin argument must be boolean')\n }\n this.activeHostRoundRobin = activeHostRoundRobin\n }\n\n /**\n * Get active host round robin value\n * @returns {Boolean} The value of activeHostRoundRobin\n */\n getActiveHostRoundRobin () {\n return this.activeHostRoundRobin\n }\n\n /**\n * Get the next active host index\n * @param {Number} [activeHostIndex] An optional paramater to provide the active host index\n * @returns {Number} The next active host index which will wrap around to zero\n */\n getNextActiveHostIndex (activeHostIndex = this.getActiveHostIndex()) {\n const totalHosts = this.getTotalHosts()\n const nextIndex = activeHostIndex + 1\n // If we are past the last index start back over at 1\n if (totalHosts === nextIndex) {\n return 0\n }\n return nextIndex\n }\n\n /**\n * Set the active host index to the next host using a\n * round robin strategy\n */\n setNextActiveHostIndex () {\n // Don't bother if we only have one host\n if (!this.getActiveHostRoundRobin()) {\n return\n }\n const totalHosts = this.getTotalHosts()\n if (this.getActiveHostRoundRobin() && totalHosts <= 1) {\n return\n }\n this.setActiveHostIndex(this.getNextActiveHostIndex())\n }\n\n /**\n * Get the total number of hosts\n * @returns {Number} The total number of hosts\n */\n getTotalHosts () {\n return this.getHosts().length\n }\n\n /**\n * Returns whether or not the uri passes a test for this.absoluteUriPattern\n * @returns {Boolean} True if the path is absolute\n */\n uriIsAbsolute (uri) {\n return this.absoluteUriPattern.test(uri)\n }\n\n /**\n * Returns true when the HTTP request is retryable\n * @param {Object} options The options\n * @param {Number} options.statusCode The HTTP status code\n * @param {String} options.errorCode The error code\n * @param {String} options.httpMethod The http method\n * @returns {Boolean} True if the request is retry able\n */\n requestIsRetryable (options = {}) {\n const {\n statusCode,\n errorCode,\n httpMethod,\n } = options\n // Honor strictly the http method\n if (!this.getRetryableHttpMethods().has(httpMethod)) {\n return false\n }\n if (statusCode && this.getRetryableStatusCodes().has(statusCode)) {\n return true\n }\n if (errorCode && this.getRetryableErrorCodes().has(errorCode)) {\n return true\n }\n return false\n }\n\n /**\n * Perform an HTTP request using the provided options\n * @param {HttpRequestOptions} [options={}] Options for the HTTP client\n * @returns {Promise<{status: Number, body: Object|String}>} An object with a status and body\n * property when stream is false and a stream when the stream option is true\n * @throws {ERROR_HTTP_REQUEST_MAX_REDIRECTS} When the maximum number of redirect has been reached\n */\n async fetch (options = {}) {\n const {\n body,\n headers = {},\n httpMethod = HTTP_METHOD_GET,\n query,\n stream = false,\n timeout = DEAULT_TIMEOUT,\n useLeader = false,\n retries = this.getTotalHosts() * 3,\n maxRedirects = 10,\n attempt = 0,\n retryAttempt = 0,\n redirectAttempt = 0,\n attemptHostIndex,\n exponentailBackoffExponent = this.getExponentailBackoffExponent(),\n exponentailBackoffBase = this.getExponentailBackoffBase(),\n httpAgent = this.getHttpAgent(),\n httpsAgent = this.getHttpsAgent(),\n } = options\n // Honor the supplied attemptHostIndex or get the active host\n const activeHost = Number.isFinite(attemptHostIndex) ? this.getHosts()[attemptHostIndex]\n : this.getActiveHost(useLeader)\n let { uri } = options\n if (!uri) {\n throw new Error('The uri option is required')\n }\n uri = this.uriIsAbsolute(uri) ? uri : `${activeHost}/${cleanPath(uri)}`\n try {\n let auth\n if (this.authentication.size) {\n auth = {\n username: this.authentication.get('username'),\n password: this.authentication.get('password'),\n }\n }\n const response = await axios({\n url: uri,\n auth,\n data: body,\n maxRedirects: 0, // Handle redirects manually to allow reposting data\n headers: createDefaultHeaders(headers),\n responseType: stream ? 'stream' : 'json',\n method: httpMethod,\n params: query,\n timeout,\n httpsAgent,\n httpAgent,\n paramsSerializer (params) {\n return stringifyQuery(params, { arrayFormat: 'brackets' })\n },\n })\n if (stream) {\n return response.data\n }\n return {\n body: response.data,\n status: response.status,\n }\n } catch (e) {\n const { response = {}, code: errorCode } = e\n const { status: responseStatus, headers: responseHeaders = {} } = response\n // Check if the error was a redirect\n const retryable = this.requestIsRetryable({\n statusCode: responseStatus,\n errorCode,\n httpMethod,\n })\n // Save the next active host index and pass it to retry manually\n let nextAttemptHostIndex = Number.isFinite(attemptHostIndex) ? attemptHostIndex\n : this.getActiveHostIndex()\n nextAttemptHostIndex += 1\n // We go past the last index start from zero\n if (nextAttemptHostIndex === this.getTotalHosts()) {\n nextAttemptHostIndex = 0\n }\n // First check if this is a redirect error\n if (responseStatus === 301 || responseStatus === 302) {\n // We maxed out on redirect attempts\n if (redirectAttempt >= maxRedirects) {\n throw ERROR_HTTP_REQUEST_MAX_REDIRECTS(`The maximum number of redirects ${maxRedirects} has been reached`)\n }\n const location = typeof responseHeaders === 'object' ? responseHeaders.location : undefined\n // If we were asked to use the leader, but got redirect the leader moved so remember it\n if (useLeader) {\n const newLeaderHostIndex = this.findHostIndex(location)\n // If the redirect exists in the hosts list remember it for next time\n if (newLeaderHostIndex > -1) {\n this.setLeaderHostIndex(newLeaderHostIndex)\n }\n }\n return this.fetch({\n ...options,\n uri: location,\n attempt: attempt + 1,\n redirectAttempt: redirectAttempt + 1,\n attemptHostIndex: nextAttemptHostIndex,\n })\n }\n if (retryable && retryAttempt < retries) {\n const waitTime = getWaitTimeExponential(\n retryAttempt,\n exponentailBackoffBase,\n exponentailBackoffExponent,\n )\n await new Promise((resolve) => {\n setTimeout(() => {\n resolve(undefined)\n }, waitTime)\n })\n return this.fetch({\n ...options,\n attempt: attempt + 1,\n retryAttempt: retryAttempt + 1,\n attemptHostIndex: nextAttemptHostIndex,\n })\n }\n throw e\n }\n }\n\n /**\n * Perform an HTTP GET request\n * @param {HttpRequestOptions} [options={}] The options\n * @see this.fetch() for options\n */\n async get (options = {}) {\n return this.fetch({ ...options, httpMethod: HTTP_METHOD_GET })\n }\n\n /**\n * Perform an HTTP POST request\n * @param {HttpRequestOptions} [options={}] The options\n * @see this.fetch() for options\n */\n async post (options = {}) {\n return this.fetch({ ...options, httpMethod: HTTP_METHOD_POST })\n }\n}\n"],"mappings":"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","ignoreList":[]}
|