diff --git a/packages/middleware-retry/src/defaultStrategy.ts b/packages/middleware-retry/src/defaultStrategy.ts index 9df2383ca7f63..c2b5d798ed8c0 100644 --- a/packages/middleware-retry/src/defaultStrategy.ts +++ b/packages/middleware-retry/src/defaultStrategy.ts @@ -33,12 +33,26 @@ export interface DelayDecider { (delayBase: number, attempts: number): number; } +/** + * Strategy options to be passed to StandardRetryStrategy + */ +export interface StandardRetryStrategyOptions { + retryDecider?: RetryDecider; + delayDecider?: DelayDecider; +} + export class StandardRetryStrategy implements RetryStrategy { + private retryDecider: RetryDecider; + private delayDecider: DelayDecider; + constructor( public readonly maxAttempts: number, - private retryDecider: RetryDecider = defaultRetryDecider, - private delayDecider: DelayDecider = defaultDelayDecider - ) {} + options?: StandardRetryStrategyOptions + ) { + this.retryDecider = options?.retryDecider ?? defaultRetryDecider; + this.delayDecider = options?.delayDecider ?? defaultDelayDecider; + } + private shouldRetry(error: SdkError, attempts: number) { return attempts < this.maxAttempts && this.retryDecider(error); } diff --git a/packages/middleware-retry/src/index.spec.ts b/packages/middleware-retry/src/index.spec.ts index 02e27d8ed6f5d..3c1f972b120a9 100644 --- a/packages/middleware-retry/src/index.spec.ts +++ b/packages/middleware-retry/src/index.spec.ts @@ -75,7 +75,7 @@ describe("retryMiddleware", () => { "defaultDelayDecider" ); const retryDecider: RetryDecider = (error: SdkError) => true; - const strategy = new StandardRetryStrategy(maxAttempts, retryDecider); + const strategy = new StandardRetryStrategy(maxAttempts, { retryDecider }); const retryHandler = retryMiddleware({ maxAttempts, retryStrategy: strategy