/** * Error thrown when the maximum number of retries is hit in an exponential backoff */ export class ExponentialBackoffMaxRetriesHitError extends Error { constructor(errors: Array) { super('Exponential backoff: Max retries hit', { cause: errors }); this.name = 'ExponentialBackoffMaxRetriesHitError'; } } /** * Error thrown when the exponential backoff retries are stopped */ export class ExponentialBackoffStoppedRetriesError extends Error { constructor(reason: unknown) { // Convert the reason to an error if it is not an error const reasonError = reason instanceof Error ? reason : new Error(`${reason}`); super(`Exponential backoff was aborted: "${reasonError.message}"`, { cause: reasonError }); this.name = 'ExponentialBackoffStoppedRetriesError'; } } /** * Error thrown when an exponential backoff option is too small */ export class ExponentialBackoffNumberTooSmallError extends Error { constructor(option: string, value: number, min: number) { super(`Exponential backoff option "${option}" is too small. Must be at least ${min}`); this.name = 'ExponentialBackoffNumberTooSmallError'; } } /** * Error thrown when an exponential backoff option is out of bounds */ export class ExponentialBackoffNumberOutOfBoundsError extends Error { constructor(option: string, value: number, min: number, max: number) { super(`Exponential backoff option "${option}" is out of bounds. Must be between ${min} and ${max}`); this.name = 'ExponentialBackoffNumberOutOfBoundsError'; } } /** * Error thrown when an exponential backoff option is an invalid infinite integer */ export class ExponentialBackoffInvalidInfiniteIntegerError extends Error { constructor(option: string) { super(`Exponential backoff option "${option}" is invalid. Must be a finite number`); this.name = 'ExponentialBackoffInvalidInfiniteIntegerError'; } } /** * Error thrown when an exponential backoff option is not an integer */ export class ExponentialBackoffNonIntegerError extends Error { constructor(option: string) { super(`Exponential backoff option "${option}" is invalid. Must be an integer`); this.name = 'ExponentialBackoffNonIntegerError'; } }