Skip to content

RetryManager

Defined in: packages/core/src/data/retry-manager.ts:151

Retry manager with exponential backoff and jitter.

Implements exponential backoff with the formula:

delay = min(initialDelay * (backoffFactor ^ (attempt - 1)), maxDelay)

With jitter applied as:

delay = delay + (random(-1, 1) * delay * jitterFactor)

Jitter helps prevent thundering herd problems when multiple clients retry simultaneously.

const retry = new RetryManager({
maxRetries: 5,
initialDelay: 1000,
backoffFactor: 2,
});
try {
const result = await retry.execute(
async () => {
const response = await fetch('https://api.example.com/data');
if (!response.ok) throw new Error('Request failed');
return response.json();
},
{
onRetry: (attempt, delay, error) => {
console.log(`Retry ${attempt} in ${delay}ms: ${error.message}`);
},
}
);
console.log('Success:', result);
} catch (error) {
console.error('All retries failed:', error);
}

new RetryManager(config?): RetryManager

Defined in: packages/core/src/data/retry-manager.ts:168

Create a new RetryManager instance

ParameterTypeDescription
config?Partial<RetryConfig>Retry configuration options

RetryManager

calculateDelay(attempt): number

Defined in: packages/core/src/data/retry-manager.ts:253

Calculate delay for a given attempt using exponential backoff

ParameterTypeDescription
attemptnumberCurrent attempt number (1-indexed)

number

Delay in milliseconds

const retry = new RetryManager({ initialDelay: 1000, backoffFactor: 2 });
console.log(retry.calculateDelay(1)); // ~1000ms
console.log(retry.calculateDelay(2)); // ~2000ms
console.log(retry.calculateDelay(3)); // ~4000ms

execute<T>(fn, callbacks?): Promise<T>

Defined in: packages/core/src/data/retry-manager.ts:196

Execute a function with retry logic

Type ParameterDescription
TReturn type of the function
ParameterTypeDescription
fn() => Promise<T>Async function to execute with retries
callbacks?RetryCallbacksOptional lifecycle callbacks

Promise<T>

Promise that resolves with the function’s result

When all retry attempts fail

const data = await retry.execute(
() => fetchData(url),
{
isRetryable: (error) => {
// Don't retry 4xx errors except 429 (rate limit)
if (error.message.includes('429')) return true;
if (error.message.match(/4\d\d/)) return false;
return true;
},
}
);

reset(): void

Defined in: packages/core/src/data/retry-manager.ts:281

Reset internal state

void

Currently this class is stateless, but this method is provided for API consistency and future extensibility.