export async function withRetry( operation: () => Promise, maxAttempts = 3, ): Promise { let delay = 500; let lastError: unknown; for (let attempt = 0; attempt < maxAttempts; attempt++) { try { return await operation(); } catch (err) { lastError = err; if (attempt < maxAttempts - 1) { await new Promise((r) => setTimeout(r, delay)); delay *= 2; } } } throw lastError; } export function parseRetryAfter(headers: Headers): number | null { const value = headers.get("retry-after"); if (!value) return null; const seconds = Number(value); return Number.isFinite(seconds) ? seconds * 1000 : null; }