Retry Middleware

Automatically retry failed requests with exponential backoff, jitter, and Retry-After support

Basic Usage

import { retry } from '@cleverbrush/client/retry';

const client = createClient(api, {
    middlewares: [retry()],
});

Options

OptionTypeDefaultDescription
limitnumber2Maximum number of retries
methodsstring[]GET, PUT, HEAD, DELETE, OPTIONSHTTP methods to retry
statusCodesnumber[]408, 429, 500, 502, 503, 504Status codes that trigger retry
backoffLimitnumberInfinityMaximum delay in ms
delay(n) => msExponential (0.3 × 2ⁿ⁻¹ × 1000)Custom delay function
jitterboolean | (d) => dfalseAdd randomization to delays
retryOnTimeoutbooleanfalseRetry on TimeoutError
shouldRetry(err, n) => booleanCustom predicate

Advanced Example

retry({
    limit: 5,
    backoffLimit: 30000,
    jitter: true,
    retryOnTimeout: true,
    shouldRetry: (error, attempt) => {
        // Don't retry client errors
        if ('status' in error && error.status < 500) return false;
        return attempt < 5;
    },
})

The retry middleware automatically respects Retry-After headers on 429 and 503 responses, supporting both seconds and HTTP-date formats.