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
| Option | Type | Default | Description |
|---|---|---|---|
limit | number | 2 | Maximum number of retries |
methods | string[] | GET, PUT, HEAD, DELETE, OPTIONS | HTTP methods to retry |
statusCodes | number[] | 408, 429, 500, 502, 503, 504 | Status codes that trigger retry |
backoffLimit | number | Infinity | Maximum delay in ms |
delay | (n) => ms | Exponential (0.3 × 2ⁿ⁻¹ × 1000) | Custom delay function |
jitter | boolean | (d) => d | false | Add randomization to delays |
retryOnTimeout | boolean | false | Retry on TimeoutError |
shouldRetry | (err, n) => boolean | — | Custom 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.