aboutsummaryrefslogtreecommitdiffstats
path: root/node_modules/exponential-backoff/src/backoff.ts
diff options
context:
space:
mode:
authorpack <pack@packgekko.xyz>2026-08-09 10:54:08 +0000
committerpack <pack@packgekko.xyz>2026-08-09 10:54:08 +0000
commitd3adc16a08d95d6e331de55d7d3bf05a66a874a8 (patch)
treea2dabd199501e67c547c2ce79e1374ca3aa55443 /node_modules/exponential-backoff/src/backoff.ts
parent55a4f1fc869e41aca748c63d3018f0448b1606e0 (diff)
downloadcrud-d3adc16a08d95d6e331de55d7d3bf05a66a874a8.tar.gz
stop tracking node_modules/
Diffstat (limited to 'node_modules/exponential-backoff/src/backoff.ts')
-rw-r--r--node_modules/exponential-backoff/src/backoff.ts60
1 files changed, 0 insertions, 60 deletions
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();
- }
-}