aboutsummaryrefslogtreecommitdiffstats
path: root/node_modules/exponential-backoff
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/exponential-backoff')
-rw-r--r--node_modules/exponential-backoff/LICENSE202
-rw-r--r--node_modules/exponential-backoff/README.md89
-rw-r--r--node_modules/exponential-backoff/dist/backoff.d.ts9
-rw-r--r--node_modules/exponential-backoff/dist/backoff.js124
-rw-r--r--node_modules/exponential-backoff/dist/delay/always/always.delay.d.ts3
-rw-r--r--node_modules/exponential-backoff/dist/delay/always/always.delay.js25
-rw-r--r--node_modules/exponential-backoff/dist/delay/delay.base.d.ts12
-rw-r--r--node_modules/exponential-backoff/dist/delay/delay.base.js45
-rw-r--r--node_modules/exponential-backoff/dist/delay/delay.factory.d.ts3
-rw-r--r--node_modules/exponential-backoff/dist/delay/delay.factory.js17
-rw-r--r--node_modules/exponential-backoff/dist/delay/delay.interface.d.ts4
-rw-r--r--node_modules/exponential-backoff/dist/delay/delay.interface.js3
-rw-r--r--node_modules/exponential-backoff/dist/delay/skip-first/skip-first.delay.d.ts6
-rw-r--r--node_modules/exponential-backoff/dist/delay/skip-first/skip-first.delay.js82
-rw-r--r--node_modules/exponential-backoff/dist/jitter/full/full.jitter.d.ts1
-rw-r--r--node_modules/exponential-backoff/dist/jitter/full/full.jitter.js8
-rw-r--r--node_modules/exponential-backoff/dist/jitter/jitter.factory.d.ts3
-rw-r--r--node_modules/exponential-backoff/dist/jitter/jitter.factory.js15
-rw-r--r--node_modules/exponential-backoff/dist/jitter/no/no.jitter.d.ts1
-rw-r--r--node_modules/exponential-backoff/dist/jitter/no/no.jitter.js7
-rw-r--r--node_modules/exponential-backoff/dist/options.d.ts55
-rw-r--r--node_modules/exponential-backoff/dist/options.js31
-rw-r--r--node_modules/exponential-backoff/package.json62
-rw-r--r--node_modules/exponential-backoff/src/backoff.spec.ts194
-rw-r--r--node_modules/exponential-backoff/src/backoff.ts60
-rw-r--r--node_modules/exponential-backoff/src/delay/always/always.delay.spec.ts65
-rw-r--r--node_modules/exponential-backoff/src/delay/always/always.delay.ts3
-rw-r--r--node_modules/exponential-backoff/src/delay/delay.base.ts34
-rw-r--r--node_modules/exponential-backoff/src/delay/delay.factory.ts18
-rw-r--r--node_modules/exponential-backoff/src/delay/delay.interface.ts4
-rw-r--r--node_modules/exponential-backoff/src/delay/skip-first/skip-first.delay.ts15
-rw-r--r--node_modules/exponential-backoff/src/jitter/full/full.jitter.spec.ts31
-rw-r--r--node_modules/exponential-backoff/src/jitter/full/full.jitter.ts4
-rw-r--r--node_modules/exponential-backoff/src/jitter/jitter.factory.ts16
-rw-r--r--node_modules/exponential-backoff/src/jitter/no/no.jitter.spec.ts9
-rw-r--r--node_modules/exponential-backoff/src/jitter/no/no.jitter.ts3
-rw-r--r--node_modules/exponential-backoff/src/options.ts76
37 files changed, 0 insertions, 1339 deletions
diff --git a/node_modules/exponential-backoff/LICENSE b/node_modules/exponential-backoff/LICENSE
deleted file mode 100644
index 4be46a9..0000000
--- a/node_modules/exponential-backoff/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright 2019 Coveo Solutions Inc.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/node_modules/exponential-backoff/README.md b/node_modules/exponential-backoff/README.md
deleted file mode 100644
index 10c7568..0000000
--- a/node_modules/exponential-backoff/README.md
+++ /dev/null
@@ -1,89 +0,0 @@
-# exponential-backoff
-
-A utility that allows retrying a function with an exponential delay between attempts.
-
-## Installation
-
-```
-npm i exponential-backoff
-```
-
-## Usage
-
-The `backOff<T>` function takes a promise-returning function to retry, and an optional `BackOffOptions` object. It returns a `Promise<T>`.
-
-```ts
-function backOff<T>(
- request: () => Promise<T>,
- options?: BackOffOptions
-): Promise<T>;
-```
-
-Here is an example retrying a function that calls a hypothetical weather endpoint:
-
-```js
-import { backOff } from "exponential-backoff";
-
-function getWeather() {
- return fetch("weather-endpoint");
-}
-
-async function main() {
- try {
- const response = await backOff(() => getWeather());
- // process response
- } catch (e) {
- // handle error
- }
-}
-
-main();
-```
-
-Migrating across major versions? Here are our [breaking changes](https://github.com/coveo/exponential-backoff/tree/master/doc/migration-guide.md).
-
-### `BackOffOptions`
-
-- `delayFirstAttempt?: boolean`
-
- Decides whether the `startingDelay` should be applied before the first call. If `false`, the first call will occur without a delay.
-
- Default value is `false`.
-
-- `jitter?: JitterType | string`
-
- Decides whether a [jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/) should be applied to the delay. Possible values are `full` and `none`.
-
- Default value is `none`.
-
-- `maxDelay?: number`
-
- The maximum delay, in milliseconds, between two consecutive attempts.
-
- Default value is `Infinity`.
-
-- `numOfAttempts?: number`
-
- The maximum number of times to attempt the function.
-
- Default value is `10`.
-
- Minimum value is `1`.
-
-- `retry?: (e: any, attemptNumber: number) => boolean | Promise<boolean>`
-
- The `retry` function can be used to run logic after every failed attempt (e.g. logging a message, assessing the last error, etc.). It is called with the last error and the upcoming attempt number. Returning `true` will retry the function as long as the `numOfAttempts` has not been exceeded. Returning `false` will end the execution.
-
- Default value is a function that always returns `true`.
-
-- `startingDelay?: number`
-
- The delay, in milliseconds, before executing the function for the first time.
-
- Default value is `100` ms.
-
-- `timeMultiple?: number`
-
- The `startingDelay` is multiplied by the `timeMultiple` to increase the delay between reattempts.
-
- Default value is `2`.
diff --git a/node_modules/exponential-backoff/dist/backoff.d.ts b/node_modules/exponential-backoff/dist/backoff.d.ts
deleted file mode 100644
index 2ea9505..0000000
--- a/node_modules/exponential-backoff/dist/backoff.d.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { IBackOffOptions, BackoffOptions } from "./options";
-export { BackoffOptions, IBackOffOptions };
-/**
- * Executes a function with exponential backoff.
- * @param request the function to be executed
- * @param options options to customize the backoff behavior
- * @returns Promise that resolves to the result of the `request` function
- */
-export declare function backOff<T>(request: () => Promise<T>, options?: BackoffOptions): Promise<T>;
diff --git a/node_modules/exponential-backoff/dist/backoff.js b/node_modules/exponential-backoff/dist/backoff.js
deleted file mode 100644
index 6a1b6bd..0000000
--- a/node_modules/exponential-backoff/dist/backoff.js
+++ /dev/null
@@ -1,124 +0,0 @@
-"use strict";
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
-var __generator = (this && this.__generator) || function (thisArg, body) {
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
- function verb(n) { return function (v) { return step([n, v]); }; }
- function step(op) {
- if (f) throw new TypeError("Generator is already executing.");
- while (_) try {
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
- if (y = 0, t) op = [op[0] & 2, t.value];
- switch (op[0]) {
- case 0: case 1: t = op; break;
- case 4: _.label++; return { value: op[1], done: false };
- case 5: _.label++; y = op[1]; op = [0]; continue;
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
- default:
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
- if (t[2]) _.ops.pop();
- _.trys.pop(); continue;
- }
- op = body.call(thisArg, _);
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
- }
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-var options_1 = require("./options");
-var delay_factory_1 = require("./delay/delay.factory");
-/**
- * Executes a function with exponential backoff.
- * @param request the function to be executed
- * @param options options to customize the backoff behavior
- * @returns Promise that resolves to the result of the `request` function
- */
-function backOff(request, options) {
- if (options === void 0) { options = {}; }
- return __awaiter(this, void 0, void 0, function () {
- var sanitizedOptions, backOff;
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- sanitizedOptions = options_1.getSanitizedOptions(options);
- backOff = new BackOff(request, sanitizedOptions);
- return [4 /*yield*/, backOff.execute()];
- case 1: return [2 /*return*/, _a.sent()];
- }
- });
- });
-}
-exports.backOff = backOff;
-var BackOff = /** @class */ (function () {
- function BackOff(request, options) {
- this.request = request;
- this.options = options;
- this.attemptNumber = 0;
- }
- BackOff.prototype.execute = function () {
- return __awaiter(this, void 0, void 0, function () {
- var e_1, shouldRetry;
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- if (!!this.attemptLimitReached) return [3 /*break*/, 7];
- _a.label = 1;
- case 1:
- _a.trys.push([1, 4, , 6]);
- return [4 /*yield*/, this.applyDelay()];
- case 2:
- _a.sent();
- return [4 /*yield*/, this.request()];
- case 3: return [2 /*return*/, _a.sent()];
- case 4:
- e_1 = _a.sent();
- this.attemptNumber++;
- return [4 /*yield*/, this.options.retry(e_1, this.attemptNumber)];
- case 5:
- shouldRetry = _a.sent();
- if (!shouldRetry || this.attemptLimitReached) {
- throw e_1;
- }
- return [3 /*break*/, 6];
- case 6: return [3 /*break*/, 0];
- case 7: throw new Error("Something went wrong.");
- }
- });
- });
- };
- Object.defineProperty(BackOff.prototype, "attemptLimitReached", {
- get: function () {
- return this.attemptNumber >= this.options.numOfAttempts;
- },
- enumerable: true,
- configurable: true
- });
- BackOff.prototype.applyDelay = function () {
- return __awaiter(this, void 0, void 0, function () {
- var delay;
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- delay = delay_factory_1.DelayFactory(this.options, this.attemptNumber);
- return [4 /*yield*/, delay.apply()];
- case 1:
- _a.sent();
- return [2 /*return*/];
- }
- });
- });
- };
- return BackOff;
-}());
-//# sourceMappingURL=backoff.js.map \ No newline at end of file
diff --git a/node_modules/exponential-backoff/dist/delay/always/always.delay.d.ts b/node_modules/exponential-backoff/dist/delay/always/always.delay.d.ts
deleted file mode 100644
index 641d0bc..0000000
--- a/node_modules/exponential-backoff/dist/delay/always/always.delay.d.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import { Delay } from "../delay.base";
-export declare class AlwaysDelay extends Delay {
-}
diff --git a/node_modules/exponential-backoff/dist/delay/always/always.delay.js b/node_modules/exponential-backoff/dist/delay/always/always.delay.js
deleted file mode 100644
index 40e3407..0000000
--- a/node_modules/exponential-backoff/dist/delay/always/always.delay.js
+++ /dev/null
@@ -1,25 +0,0 @@
-"use strict";
-var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
-})();
-Object.defineProperty(exports, "__esModule", { value: true });
-var delay_base_1 = require("../delay.base");
-var AlwaysDelay = /** @class */ (function (_super) {
- __extends(AlwaysDelay, _super);
- function AlwaysDelay() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- return AlwaysDelay;
-}(delay_base_1.Delay));
-exports.AlwaysDelay = AlwaysDelay;
-//# sourceMappingURL=always.delay.js.map \ No newline at end of file
diff --git a/node_modules/exponential-backoff/dist/delay/delay.base.d.ts b/node_modules/exponential-backoff/dist/delay/delay.base.d.ts
deleted file mode 100644
index 3cdd15d..0000000
--- a/node_modules/exponential-backoff/dist/delay/delay.base.d.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { IDelay } from "./delay.interface";
-import { IBackOffOptions } from "../options";
-export declare abstract class Delay implements IDelay {
- private options;
- protected attempt: number;
- constructor(options: IBackOffOptions);
- apply(): Promise<unknown>;
- setAttemptNumber(attempt: number): void;
- private readonly jitteredDelay;
- private readonly delay;
- protected readonly numOfDelayedAttempts: number;
-}
diff --git a/node_modules/exponential-backoff/dist/delay/delay.base.js b/node_modules/exponential-backoff/dist/delay/delay.base.js
deleted file mode 100644
index b146c2f..0000000
--- a/node_modules/exponential-backoff/dist/delay/delay.base.js
+++ /dev/null
@@ -1,45 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-var jitter_factory_1 = require("../jitter/jitter.factory");
-var Delay = /** @class */ (function () {
- function Delay(options) {
- this.options = options;
- this.attempt = 0;
- }
- Delay.prototype.apply = function () {
- var _this = this;
- return new Promise(function (resolve) { return setTimeout(resolve, _this.jitteredDelay); });
- };
- Delay.prototype.setAttemptNumber = function (attempt) {
- this.attempt = attempt;
- };
- Object.defineProperty(Delay.prototype, "jitteredDelay", {
- get: function () {
- var jitter = jitter_factory_1.JitterFactory(this.options);
- return jitter(this.delay);
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Delay.prototype, "delay", {
- get: function () {
- var constant = this.options.startingDelay;
- var base = this.options.timeMultiple;
- var power = this.numOfDelayedAttempts;
- var delay = constant * Math.pow(base, power);
- return Math.min(delay, this.options.maxDelay);
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Delay.prototype, "numOfDelayedAttempts", {
- get: function () {
- return this.attempt;
- },
- enumerable: true,
- configurable: true
- });
- return Delay;
-}());
-exports.Delay = Delay;
-//# sourceMappingURL=delay.base.js.map \ No newline at end of file
diff --git a/node_modules/exponential-backoff/dist/delay/delay.factory.d.ts b/node_modules/exponential-backoff/dist/delay/delay.factory.d.ts
deleted file mode 100644
index 618ca4e..0000000
--- a/node_modules/exponential-backoff/dist/delay/delay.factory.d.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import { IBackOffOptions } from "../options";
-import { IDelay } from "./delay.interface";
-export declare function DelayFactory(options: IBackOffOptions, attempt: number): IDelay;
diff --git a/node_modules/exponential-backoff/dist/delay/delay.factory.js b/node_modules/exponential-backoff/dist/delay/delay.factory.js
deleted file mode 100644
index 33008db..0000000
--- a/node_modules/exponential-backoff/dist/delay/delay.factory.js
+++ /dev/null
@@ -1,17 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-var skip_first_delay_1 = require("./skip-first/skip-first.delay");
-var always_delay_1 = require("./always/always.delay");
-function DelayFactory(options, attempt) {
- var delay = initDelayClass(options);
- delay.setAttemptNumber(attempt);
- return delay;
-}
-exports.DelayFactory = DelayFactory;
-function initDelayClass(options) {
- if (!options.delayFirstAttempt) {
- return new skip_first_delay_1.SkipFirstDelay(options);
- }
- return new always_delay_1.AlwaysDelay(options);
-}
-//# sourceMappingURL=delay.factory.js.map \ No newline at end of file
diff --git a/node_modules/exponential-backoff/dist/delay/delay.interface.d.ts b/node_modules/exponential-backoff/dist/delay/delay.interface.d.ts
deleted file mode 100644
index 6f2a10b..0000000
--- a/node_modules/exponential-backoff/dist/delay/delay.interface.d.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export interface IDelay {
- apply: () => Promise<unknown>;
- setAttemptNumber: (attempt: number) => void;
-}
diff --git a/node_modules/exponential-backoff/dist/delay/delay.interface.js b/node_modules/exponential-backoff/dist/delay/delay.interface.js
deleted file mode 100644
index 6fe2a5a..0000000
--- a/node_modules/exponential-backoff/dist/delay/delay.interface.js
+++ /dev/null
@@ -1,3 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-//# sourceMappingURL=delay.interface.js.map \ No newline at end of file
diff --git a/node_modules/exponential-backoff/dist/delay/skip-first/skip-first.delay.d.ts b/node_modules/exponential-backoff/dist/delay/skip-first/skip-first.delay.d.ts
deleted file mode 100644
index d4d7caf..0000000
--- a/node_modules/exponential-backoff/dist/delay/skip-first/skip-first.delay.d.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { Delay } from "../delay.base";
-export declare class SkipFirstDelay extends Delay {
- apply(): Promise<unknown>;
- private readonly isFirstAttempt;
- protected readonly numOfDelayedAttempts: number;
-}
diff --git a/node_modules/exponential-backoff/dist/delay/skip-first/skip-first.delay.js b/node_modules/exponential-backoff/dist/delay/skip-first/skip-first.delay.js
deleted file mode 100644
index 73f8841..0000000
--- a/node_modules/exponential-backoff/dist/delay/skip-first/skip-first.delay.js
+++ /dev/null
@@ -1,82 +0,0 @@
-"use strict";
-var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
-})();
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
-var __generator = (this && this.__generator) || function (thisArg, body) {
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
- function verb(n) { return function (v) { return step([n, v]); }; }
- function step(op) {
- if (f) throw new TypeError("Generator is already executing.");
- while (_) try {
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
- if (y = 0, t) op = [op[0] & 2, t.value];
- switch (op[0]) {
- case 0: case 1: t = op; break;
- case 4: _.label++; return { value: op[1], done: false };
- case 5: _.label++; y = op[1]; op = [0]; continue;
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
- default:
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
- if (t[2]) _.ops.pop();
- _.trys.pop(); continue;
- }
- op = body.call(thisArg, _);
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
- }
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-var delay_base_1 = require("../delay.base");
-var SkipFirstDelay = /** @class */ (function (_super) {
- __extends(SkipFirstDelay, _super);
- function SkipFirstDelay() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- SkipFirstDelay.prototype.apply = function () {
- return __awaiter(this, void 0, void 0, function () {
- return __generator(this, function (_a) {
- return [2 /*return*/, this.isFirstAttempt ? true : _super.prototype.apply.call(this)];
- });
- });
- };
- Object.defineProperty(SkipFirstDelay.prototype, "isFirstAttempt", {
- get: function () {
- return this.attempt === 0;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(SkipFirstDelay.prototype, "numOfDelayedAttempts", {
- get: function () {
- return this.attempt - 1;
- },
- enumerable: true,
- configurable: true
- });
- return SkipFirstDelay;
-}(delay_base_1.Delay));
-exports.SkipFirstDelay = SkipFirstDelay;
-//# sourceMappingURL=skip-first.delay.js.map \ No newline at end of file
diff --git a/node_modules/exponential-backoff/dist/jitter/full/full.jitter.d.ts b/node_modules/exponential-backoff/dist/jitter/full/full.jitter.d.ts
deleted file mode 100644
index d034464..0000000
--- a/node_modules/exponential-backoff/dist/jitter/full/full.jitter.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-export declare function fullJitter(delay: number): number;
diff --git a/node_modules/exponential-backoff/dist/jitter/full/full.jitter.js b/node_modules/exponential-backoff/dist/jitter/full/full.jitter.js
deleted file mode 100644
index 16cee36..0000000
--- a/node_modules/exponential-backoff/dist/jitter/full/full.jitter.js
+++ /dev/null
@@ -1,8 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-function fullJitter(delay) {
- var jitteredDelay = Math.random() * delay;
- return Math.round(jitteredDelay);
-}
-exports.fullJitter = fullJitter;
-//# sourceMappingURL=full.jitter.js.map \ No newline at end of file
diff --git a/node_modules/exponential-backoff/dist/jitter/jitter.factory.d.ts b/node_modules/exponential-backoff/dist/jitter/jitter.factory.d.ts
deleted file mode 100644
index f84bdea..0000000
--- a/node_modules/exponential-backoff/dist/jitter/jitter.factory.d.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import { IBackOffOptions } from "../options";
-export declare type Jitter = (delay: number) => number;
-export declare function JitterFactory(options: IBackOffOptions): Jitter;
diff --git a/node_modules/exponential-backoff/dist/jitter/jitter.factory.js b/node_modules/exponential-backoff/dist/jitter/jitter.factory.js
deleted file mode 100644
index 8aafe45..0000000
--- a/node_modules/exponential-backoff/dist/jitter/jitter.factory.js
+++ /dev/null
@@ -1,15 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-var full_jitter_1 = require("./full/full.jitter");
-var no_jitter_1 = require("./no/no.jitter");
-function JitterFactory(options) {
- switch (options.jitter) {
- case "full":
- return full_jitter_1.fullJitter;
- case "none":
- default:
- return no_jitter_1.noJitter;
- }
-}
-exports.JitterFactory = JitterFactory;
-//# sourceMappingURL=jitter.factory.js.map \ No newline at end of file
diff --git a/node_modules/exponential-backoff/dist/jitter/no/no.jitter.d.ts b/node_modules/exponential-backoff/dist/jitter/no/no.jitter.d.ts
deleted file mode 100644
index 3afaddd..0000000
--- a/node_modules/exponential-backoff/dist/jitter/no/no.jitter.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-export declare function noJitter(delay: number): number;
diff --git a/node_modules/exponential-backoff/dist/jitter/no/no.jitter.js b/node_modules/exponential-backoff/dist/jitter/no/no.jitter.js
deleted file mode 100644
index 15a40bb..0000000
--- a/node_modules/exponential-backoff/dist/jitter/no/no.jitter.js
+++ /dev/null
@@ -1,7 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-function noJitter(delay) {
- return delay;
-}
-exports.noJitter = noJitter;
-//# sourceMappingURL=no.jitter.js.map \ No newline at end of file
diff --git a/node_modules/exponential-backoff/dist/options.d.ts b/node_modules/exponential-backoff/dist/options.d.ts
deleted file mode 100644
index 94e0bb4..0000000
--- a/node_modules/exponential-backoff/dist/options.d.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Type of jitter to apply to the delay.
- * - `"none"`: no jitter is applied
- * - `"full"`: full jitter is applied (random value between `0` and `delay`)
- */
-export declare type JitterType = "none" | "full";
-export declare type BackoffOptions = Partial<IBackOffOptions>;
-export interface IBackOffOptions {
- /**
- * Decides whether the `startingDelay` should be applied before the first call.
- * If `false`, the first call will occur without a delay.
- * @defaultValue `false`
- */
- delayFirstAttempt: boolean;
- /**
- * Decides whether a [jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)
- * should be applied to the delay. Possible values are `"full"` and `"none"`.
- * @defaultValue `"none"`
- */
- jitter: JitterType;
- /**
- * The maximum delay, in milliseconds, between two consecutive attempts.
- * @defaultValue `Infinity`
- */
- maxDelay: number;
- /**
- * The maximum number of times to attempt the function.
- * Must be at least `1`.
- * @defaultValue `10`
- */
- numOfAttempts: number;
- /**
- * The `retry` function can be used to run logic after every failed attempt (e.g. logging a message,
- * assessing the last error, etc.).
- * It is called with the last error and the upcoming attempt number.
- * Returning `true` will retry the function as long as the `numOfAttempts` has not been exceeded.
- * Returning `false` will end the execution.
- * @defaultValue a function that always returns `true`.
- * @param e The last error thrown by the function.
- * @param attemptNumber The upcoming attempt number.
- * @returns `true` to retry the function, `false` to end the execution
- */
- retry: (e: any, attemptNumber: number) => boolean | Promise<boolean>;
- /**
- * The delay, in milliseconds, before executing the function for the first time.
- * @defaultValue `100`
- */
- startingDelay: number;
- /**
- * The `startingDelay` is multiplied by the `timeMultiple` to increase the delay between reattempts.
- * @defaultValue `2`
- */
- timeMultiple: number;
-}
-export declare function getSanitizedOptions(options: BackoffOptions): IBackOffOptions;
diff --git a/node_modules/exponential-backoff/dist/options.js b/node_modules/exponential-backoff/dist/options.js
deleted file mode 100644
index 1d2ca17..0000000
--- a/node_modules/exponential-backoff/dist/options.js
+++ /dev/null
@@ -1,31 +0,0 @@
-"use strict";
-var __assign = (this && this.__assign) || function () {
- __assign = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-var defaultOptions = {
- delayFirstAttempt: false,
- jitter: "none",
- maxDelay: Infinity,
- numOfAttempts: 10,
- retry: function () { return true; },
- startingDelay: 100,
- timeMultiple: 2
-};
-function getSanitizedOptions(options) {
- var sanitized = __assign(__assign({}, defaultOptions), options);
- if (sanitized.numOfAttempts < 1) {
- sanitized.numOfAttempts = 1;
- }
- return sanitized;
-}
-exports.getSanitizedOptions = getSanitizedOptions;
-//# sourceMappingURL=options.js.map \ No newline at end of file
diff --git a/node_modules/exponential-backoff/package.json b/node_modules/exponential-backoff/package.json
deleted file mode 100644
index e3e8dc9..0000000
--- a/node_modules/exponential-backoff/package.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- "name": "exponential-backoff",
- "version": "3.1.3",
- "description": "A utility that allows retrying a function with an exponential delay between attempts.",
- "files": [
- "dist/",
- "src/"
- ],
- "main": "dist/backoff.js",
- "types": "dist/backoff.d.ts",
- "scripts": {
- "build": "tsc",
- "test": "jest",
- "test:watch": "jest --watch"
- },
- "husky": {
- "hooks": {
- "pre-commit": "lint-staged"
- }
- },
- "lint-staged": {
- "*.{ts,json,md}": [
- "prettier --write",
- "git add"
- ]
- },
- "jest": {
- "transform": {
- "^.+\\.ts$": "ts-jest"
- },
- "testRegex": "\\.spec\\.ts$",
- "moduleFileExtensions": [
- "ts",
- "js"
- ]
- },
- "repository": {
- "type": "git",
- "url": "git+https://github.com/coveooss/exponential-backoff.git"
- },
- "keywords": [
- "exponential",
- "backoff",
- "retry"
- ],
- "author": "Sami Sayegh",
- "license": "Apache-2.0",
- "bugs": {
- "url": "https://github.com/coveooss/exponential-backoff/issues"
- },
- "homepage": "https://github.com/coveooss/exponential-backoff#readme",
- "devDependencies": {
- "@types/jest": "^24.0.18",
- "@types/node": "^10.14.21",
- "husky": "^3.0.9",
- "jest": "^24.9.0",
- "lint-staged": "^9.4.2",
- "prettier": "^1.18.2",
- "ts-jest": "^24.1.0",
- "typescript": "^3.6.4"
- }
-}
diff --git a/node_modules/exponential-backoff/src/backoff.spec.ts b/node_modules/exponential-backoff/src/backoff.spec.ts
deleted file mode 100644
index 24fd95b..0000000
--- a/node_modules/exponential-backoff/src/backoff.spec.ts
+++ /dev/null
@@ -1,194 +0,0 @@
-import { backOff } from "./backoff";
-import { BackoffOptions } from "./options";
-
-describe("BackOff", () => {
- const mockSuccessResponse = { success: true };
- const mockFailResponse = { success: false };
- let backOffRequest: () => Promise<any>;
- let backOffOptions: BackoffOptions;
-
- function initBackOff() {
- return backOff(backOffRequest, backOffOptions);
- }
-
- function promiseThatIsResolved() {
- return () => Promise.resolve(mockSuccessResponse);
- }
-
- function promiseThatIsRejected() {
- return () => Promise.reject(mockFailResponse);
- }
-
- function promiseThatFailsOnceThenSucceeds() {
- return (() => {
- let firstAttempt = true;
-
- const request = () => {
- if (firstAttempt) {
- firstAttempt = false;
- return Promise.reject(mockFailResponse);
- }
-
- return Promise.resolve(mockSuccessResponse);
- };
-
- return request;
- })();
- }
-
- beforeEach(() => {
- backOffOptions = { startingDelay: 0 };
- backOffRequest = jest.fn(promiseThatIsResolved());
- });
-
- describe("when request function is a promise that resolves", () => {
- it("returns the resolved value", () => {
- const request = initBackOff();
- return request.then(response =>
- expect(response).toBe(mockSuccessResponse)
- );
- });
-
- it("calls the request function only once", () => {
- const request = initBackOff();
- return request.then(() =>
- expect(backOffRequest).toHaveBeenCalledTimes(1)
- );
- });
-
- it(`when the #backOffOptions.numOfAttempts is 0,
- it overrides the value and calls the method only once`, () => {
- backOffOptions.numOfAttempts = 0;
- const request = initBackOff();
-
- return request.then(() =>
- expect(backOffRequest).toHaveBeenCalledTimes(1)
- );
- });
- });
-
- describe(`when the #backOffOptions.startingDelay is 100ms`, () => {
- const startingDelay = 100;
-
- beforeEach(() => (backOffOptions.startingDelay = startingDelay));
-
- it(`does not delay the first attempt`, () => {
- const startTime = Date.now();
- const request = initBackOff();
-
- return request.then(() => {
- const endTime = Date.now();
- const duration = endTime - startTime;
- const roundedDuration = Math.round(duration / 100) * 100;
-
- expect(roundedDuration).toBe(0);
- });
- });
-
- it(`when #backOffOptions.delayFirstAttempt is 'true',
- it delays the first attempt`, () => {
- backOffOptions.delayFirstAttempt = true;
- const startTime = Date.now();
- const request = initBackOff();
-
- return request.then(() => {
- const endTime = Date.now();
- const duration = endTime - startTime;
- const roundedDuration = Math.round(duration / 100) * 100;
-
- expect(roundedDuration).toBe(startingDelay);
- });
- });
- });
-
- describe("when request function is a promise that is rejected", () => {
- beforeEach(() => (backOffRequest = promiseThatIsRejected()));
-
- it("returns the rejected value", () => {
- const request = initBackOff();
- return request.catch(err => expect(err).toBe(mockFailResponse));
- });
-
- it("retries the request as many times as specified in #BackOffOptions.numOfAttempts", async () => {
- const numOfAttemps = 2;
- backOffOptions.numOfAttempts = numOfAttemps;
- backOffRequest = jest.fn(() => Promise.reject(mockFailResponse));
-
- try {
- await initBackOff();
- } catch {
- expect(backOffRequest).toHaveBeenCalledTimes(numOfAttemps);
- }
- });
-
- it(`when the #BackOffOptions.retry function is set to always return false,
- it only calls request function one time`, async () => {
- backOffOptions.retry = () => false;
- backOffOptions.numOfAttempts = 2;
- backOffRequest = jest.fn(() => Promise.reject(mockFailResponse));
-
- try {
- await initBackOff();
- } catch {
- expect(backOffRequest).toHaveBeenCalledTimes(1);
- }
- });
- });
-
- it("when the #BackOffOptions.retry function returns a promise, it awaits it", async () => {
- const retryDuration = 100;
- backOffOptions.retry = () =>
- new Promise(resolve => setTimeout(() => resolve(true), retryDuration));
- backOffRequest = promiseThatFailsOnceThenSucceeds();
-
- const start = Date.now();
- await initBackOff();
- const end = Date.now();
-
- const duration = end - start;
- const roundedDuration =
- Math.round(duration / retryDuration) * retryDuration;
-
- expect(roundedDuration).toBe(retryDuration);
- });
-
- describe(`when calling #backOff with a function that throws an error the first time, and succeeds the second time`, () => {
- beforeEach(
- () => (backOffRequest = jest.fn(promiseThatFailsOnceThenSucceeds()))
- );
-
- it(`returns a successful response`, () => {
- const request = initBackOff();
- return request.then(response =>
- expect(response).toBe(mockSuccessResponse)
- );
- });
-
- it("calls the request function two times", async () => {
- await initBackOff();
- expect(backOffRequest).toHaveBeenCalledTimes(2);
- });
-
- it(`when setting the #BackOffOption.timeMultiple to a value,
- when setting the #BackOffOption.delayFirstAttempt to true,
- it applies a delay between the first and the second call`, async () => {
- const startingDelay = 100;
- const timeMultiple = 3;
- const totalExpectedDelay = startingDelay + timeMultiple * startingDelay;
-
- backOffOptions.startingDelay = startingDelay;
- backOffOptions.timeMultiple = timeMultiple;
- backOffOptions.delayFirstAttempt = true;
-
- const start = Date.now();
- await initBackOff();
- const end = Date.now();
-
- const duration = end - start;
- const roundedDuration =
- Math.round(duration / startingDelay) * startingDelay;
-
- expect(roundedDuration).toBe(totalExpectedDelay);
- });
- });
-});
diff --git a/node_modules/exponential-backoff/src/backoff.ts b/node_modules/exponential-backoff/src/backoff.ts
deleted file mode 100644
index 549770b..0000000
--- a/node_modules/exponential-backoff/src/backoff.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import {
- IBackOffOptions,
- getSanitizedOptions,
- BackoffOptions
-} from "./options";
-import { DelayFactory } from "./delay/delay.factory";
-
-export { BackoffOptions, IBackOffOptions };
-
-/**
- * Executes a function with exponential backoff.
- * @param request the function to be executed
- * @param options options to customize the backoff behavior
- * @returns Promise that resolves to the result of the `request` function
- */
-export async function backOff<T>(
- request: () => Promise<T>,
- options: BackoffOptions = {}
-): Promise<T> {
- const sanitizedOptions = getSanitizedOptions(options);
- const backOff = new BackOff(request, sanitizedOptions);
-
- return await backOff.execute();
-}
-
-class BackOff<T> {
- private attemptNumber = 0;
-
- constructor(
- private request: () => Promise<T>,
- private options: IBackOffOptions
- ) {}
-
- public async execute(): Promise<T> {
- while (!this.attemptLimitReached) {
- try {
- await this.applyDelay();
- return await this.request();
- } catch (e) {
- this.attemptNumber++;
- const shouldRetry = await this.options.retry(e, this.attemptNumber);
-
- if (!shouldRetry || this.attemptLimitReached) {
- throw e;
- }
- }
- }
-
- throw new Error("Something went wrong.");
- }
-
- private get attemptLimitReached() {
- return this.attemptNumber >= this.options.numOfAttempts;
- }
-
- private async applyDelay() {
- const delay = DelayFactory(this.options, this.attemptNumber);
- await delay.apply();
- }
-}
diff --git a/node_modules/exponential-backoff/src/delay/always/always.delay.spec.ts b/node_modules/exponential-backoff/src/delay/always/always.delay.spec.ts
deleted file mode 100644
index 8a08cd8..0000000
--- a/node_modules/exponential-backoff/src/delay/always/always.delay.spec.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-import { AlwaysDelay } from "./always.delay";
-import { IBackOffOptions, getSanitizedOptions } from "../../options";
-
-describe(AlwaysDelay.name, () => {
- let options: IBackOffOptions;
- let delay: AlwaysDelay;
-
- function initClass() {
- delay = new AlwaysDelay(options);
- }
-
- beforeEach(() => {
- options = getSanitizedOptions({});
- initClass();
- jest.useFakeTimers();
- });
-
- it(`when calling #apply, the delay is equal to the starting delay`, async () => {
- const spy = jest.fn();
- delay.apply().then(spy);
- jest.runTimersToTime(options.startingDelay);
- await Promise.resolve();
-
- expect(spy).toHaveBeenCalledTimes(1);
- });
-
- it(`when the attempt number is 1, when calling #apply,
- the delay is equal to the starting delay multiplied by the time multiple`, async () => {
- delay.setAttemptNumber(1);
-
- const spy = jest.fn();
- delay.apply().then(spy);
- jest.runTimersToTime(options.startingDelay * options.timeMultiple);
- await Promise.resolve();
-
- expect(spy).toHaveBeenCalledTimes(1);
- });
-
- it(`when the attempt number is 2, when calling #apply,
- the delay is equal to the starting delay multiplied by the time multiple raised by the attempt number`, async () => {
- const attemptNumber = 2;
- delay.setAttemptNumber(attemptNumber);
-
- const spy = jest.fn();
- delay.apply().then(spy);
- jest.runTimersToTime(
- options.startingDelay * Math.pow(options.timeMultiple, attemptNumber)
- );
- await Promise.resolve();
-
- expect(spy).toHaveBeenCalledTimes(1);
- });
-
- it(`when the #maxDelay is less than #startingDelay, when calling #apply,
- the delay is equal to the #maxDelay`, async () => {
- options.maxDelay = options.startingDelay - 1;
-
- const spy = jest.fn();
- delay.apply().then(spy);
- jest.runTimersToTime(options.maxDelay);
- await Promise.resolve();
-
- expect(spy).toHaveBeenCalledTimes(1);
- });
-});
diff --git a/node_modules/exponential-backoff/src/delay/always/always.delay.ts b/node_modules/exponential-backoff/src/delay/always/always.delay.ts
deleted file mode 100644
index ec86c62..0000000
--- a/node_modules/exponential-backoff/src/delay/always/always.delay.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import { Delay } from "../delay.base";
-
-export class AlwaysDelay extends Delay {} \ No newline at end of file
diff --git a/node_modules/exponential-backoff/src/delay/delay.base.ts b/node_modules/exponential-backoff/src/delay/delay.base.ts
deleted file mode 100644
index bed90d6..0000000
--- a/node_modules/exponential-backoff/src/delay/delay.base.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { IDelay } from "./delay.interface";
-import { IBackOffOptions } from "../options";
-import { JitterFactory } from "../jitter/jitter.factory";
-
-export abstract class Delay implements IDelay {
- protected attempt = 0;
- constructor(private options: IBackOffOptions) {}
-
- public apply() {
- return new Promise(resolve => setTimeout(resolve, this.jitteredDelay));
- }
-
- public setAttemptNumber(attempt: number) {
- this.attempt = attempt;
- }
-
- private get jitteredDelay() {
- const jitter = JitterFactory(this.options);
- return jitter(this.delay);
- }
-
- private get delay() {
- const constant = this.options.startingDelay;
- const base = this.options.timeMultiple;
- const power = this.numOfDelayedAttempts;
- const delay = constant * Math.pow(base, power);
-
- return Math.min(delay, this.options.maxDelay);
- }
-
- protected get numOfDelayedAttempts() {
- return this.attempt;
- }
-}
diff --git a/node_modules/exponential-backoff/src/delay/delay.factory.ts b/node_modules/exponential-backoff/src/delay/delay.factory.ts
deleted file mode 100644
index 95e89fb..0000000
--- a/node_modules/exponential-backoff/src/delay/delay.factory.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { IBackOffOptions } from "../options";
-import { SkipFirstDelay } from "./skip-first/skip-first.delay";
-import { AlwaysDelay } from "./always/always.delay";
-import { IDelay } from "./delay.interface";
-
-export function DelayFactory(options: IBackOffOptions, attempt: number): IDelay {
- const delay = initDelayClass(options);
- delay.setAttemptNumber(attempt);
- return delay;
-}
-
-function initDelayClass(options: IBackOffOptions) {
- if (!options.delayFirstAttempt) {
- return new SkipFirstDelay(options);
- }
-
- return new AlwaysDelay(options);
-} \ No newline at end of file
diff --git a/node_modules/exponential-backoff/src/delay/delay.interface.ts b/node_modules/exponential-backoff/src/delay/delay.interface.ts
deleted file mode 100644
index 6ecc8da..0000000
--- a/node_modules/exponential-backoff/src/delay/delay.interface.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export interface IDelay {
- apply: () => Promise<unknown>;
- setAttemptNumber: (attempt: number) => void;
-}
diff --git a/node_modules/exponential-backoff/src/delay/skip-first/skip-first.delay.ts b/node_modules/exponential-backoff/src/delay/skip-first/skip-first.delay.ts
deleted file mode 100644
index 9f2b7f5..0000000
--- a/node_modules/exponential-backoff/src/delay/skip-first/skip-first.delay.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Delay } from "../delay.base";
-
-export class SkipFirstDelay extends Delay {
- public async apply() {
- return this.isFirstAttempt ? true : super.apply();
- }
-
- private get isFirstAttempt() {
- return this.attempt === 0;
- }
-
- protected get numOfDelayedAttempts() {
- return this.attempt - 1;
- }
-} \ No newline at end of file
diff --git a/node_modules/exponential-backoff/src/jitter/full/full.jitter.spec.ts b/node_modules/exponential-backoff/src/jitter/full/full.jitter.spec.ts
deleted file mode 100644
index 003d08d..0000000
--- a/node_modules/exponential-backoff/src/jitter/full/full.jitter.spec.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { fullJitter } from './full.jitter';
-
-describe(`Testing ${fullJitter.name}`, () => {
- const delay = 100;
-
- function arrayWith5FullJitterDelays() {
- return Array(5).fill(delay).map(fullJitter)
- }
-
- describe(`when calling #fullJitter on the same delay multiple times`, () => {
- it('all the delays are greater than or equal to 0', () => {
- arrayWith5FullJitterDelays()
- .forEach(value => expect(value).toBeGreaterThanOrEqual(0));
- })
-
- it('all the delays are less than or equal to the original delay', () => {
- arrayWith5FullJitterDelays()
- .forEach(value => expect(value).toBeLessThanOrEqual(delay));
- })
-
- it('the delays are not equal to one another', () => {
- const delays = arrayWith5FullJitterDelays();
- expect(new Set(delays).size).not.toBe(1);
- })
-
- it('the delays are integers', () => {
- arrayWith5FullJitterDelays()
- .forEach(value => expect(Number.isInteger(value)).toBe(true))
- })
- })
-}) \ No newline at end of file
diff --git a/node_modules/exponential-backoff/src/jitter/full/full.jitter.ts b/node_modules/exponential-backoff/src/jitter/full/full.jitter.ts
deleted file mode 100644
index b3c447b..0000000
--- a/node_modules/exponential-backoff/src/jitter/full/full.jitter.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export function fullJitter(delay: number) {
- const jitteredDelay = Math.random() * delay;
- return Math.round(jitteredDelay);
-} \ No newline at end of file
diff --git a/node_modules/exponential-backoff/src/jitter/jitter.factory.ts b/node_modules/exponential-backoff/src/jitter/jitter.factory.ts
deleted file mode 100644
index b549887..0000000
--- a/node_modules/exponential-backoff/src/jitter/jitter.factory.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { IBackOffOptions } from "../options";
-import { fullJitter } from "./full/full.jitter";
-import { noJitter } from "./no/no.jitter";
-
-export type Jitter = (delay: number) => number;
-
-export function JitterFactory(options: IBackOffOptions): Jitter {
- switch (options.jitter) {
- case "full":
- return fullJitter;
-
- case "none":
- default:
- return noJitter;
- }
-}
diff --git a/node_modules/exponential-backoff/src/jitter/no/no.jitter.spec.ts b/node_modules/exponential-backoff/src/jitter/no/no.jitter.spec.ts
deleted file mode 100644
index 1d56524..0000000
--- a/node_modules/exponential-backoff/src/jitter/no/no.jitter.spec.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { noJitter } from './no.jitter';
-
-describe(`Testing ${noJitter.name}`, () => {
- it(`when calling #noJitter with a delay,
- it returns the same delay`, () => {
- const delay = 100;
- expect(noJitter(delay)).toBe(delay);
- })
-}) \ No newline at end of file
diff --git a/node_modules/exponential-backoff/src/jitter/no/no.jitter.ts b/node_modules/exponential-backoff/src/jitter/no/no.jitter.ts
deleted file mode 100644
index bc1b56f..0000000
--- a/node_modules/exponential-backoff/src/jitter/no/no.jitter.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export function noJitter(delay: number) {
- return delay;
-} \ No newline at end of file
diff --git a/node_modules/exponential-backoff/src/options.ts b/node_modules/exponential-backoff/src/options.ts
deleted file mode 100644
index ccdee3a..0000000
--- a/node_modules/exponential-backoff/src/options.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Type of jitter to apply to the delay.
- * - `"none"`: no jitter is applied
- * - `"full"`: full jitter is applied (random value between `0` and `delay`)
- */
-export type JitterType = "none" | "full";
-
-export type BackoffOptions = Partial<IBackOffOptions>;
-
-export interface IBackOffOptions {
- /**
- * Decides whether the `startingDelay` should be applied before the first call.
- * If `false`, the first call will occur without a delay.
- * @defaultValue `false`
- */
- delayFirstAttempt: boolean;
- /**
- * Decides whether a [jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)
- * should be applied to the delay. Possible values are `"full"` and `"none"`.
- * @defaultValue `"none"`
- */
- jitter: JitterType;
- /**
- * The maximum delay, in milliseconds, between two consecutive attempts.
- * @defaultValue `Infinity`
- */
- maxDelay: number;
- /**
- * The maximum number of times to attempt the function.
- * Must be at least `1`.
- * @defaultValue `10`
- */
- numOfAttempts: number;
- /**
- * The `retry` function can be used to run logic after every failed attempt (e.g. logging a message,
- * assessing the last error, etc.).
- * It is called with the last error and the upcoming attempt number.
- * Returning `true` will retry the function as long as the `numOfAttempts` has not been exceeded.
- * Returning `false` will end the execution.
- * @defaultValue a function that always returns `true`.
- * @param e The last error thrown by the function.
- * @param attemptNumber The upcoming attempt number.
- * @returns `true` to retry the function, `false` to end the execution
- */
- retry: (e: any, attemptNumber: number) => boolean | Promise<boolean>;
- /**
- * The delay, in milliseconds, before executing the function for the first time.
- * @defaultValue `100`
- */
- startingDelay: number;
- /**
- * The `startingDelay` is multiplied by the `timeMultiple` to increase the delay between reattempts.
- * @defaultValue `2`
- */
- timeMultiple: number;
-}
-
-const defaultOptions: IBackOffOptions = {
- delayFirstAttempt: false,
- jitter: "none",
- maxDelay: Infinity,
- numOfAttempts: 10,
- retry: () => true,
- startingDelay: 100,
- timeMultiple: 2
-};
-
-export function getSanitizedOptions(options: BackoffOptions) {
- const sanitized: IBackOffOptions = { ...defaultOptions, ...options };
-
- if (sanitized.numOfAttempts < 1) {
- sanitized.numOfAttempts = 1;
- }
-
- return sanitized;
-}