diff --git a/src/api/http.ts b/src/api/http.ts index 3ecab50..3d504ce 100644 --- a/src/api/http.ts +++ b/src/api/http.ts @@ -81,7 +81,9 @@ export interface HttpClientOptions { const RETRIABLE_STATUS = new Set([408, 425, 429, 500, 502, 503, 504]); function backoffMs(attempt: number, retryAfterMs?: number): number { - if (retryAfterMs != null) return Math.min(retryAfterMs, 30_000); + // Retry-After کمینه است، نه زمانِ دقیق: وقتی سرور زیرِ بار هزاران گوشی را هم‌زمان رد می‌کند، اگر همه + // دقیقاً بعد از همان چند ثانیه برگردند همان اوج دوباره ساخته می‌شود. پس بینِ ۱ تا ۲ برابرِ آن پخش می‌شوند. + if (retryAfterMs != null) return Math.min(retryAfterMs * (1 + Math.random()), 30_000); return Math.random() * Math.min(1000 * 2 ** attempt, 8000); }