Extract a Retry-After value (seconds) if the server provided one.
(err: any)
| 81 | |
| 82 | /** Extract a Retry-After value (seconds) if the server provided one. */ |
| 83 | function retryAfterMs(err: any): number | undefined { |
| 84 | const h = err?.headers ?? err?.response?.headers; |
| 85 | if (!h) return undefined; |
| 86 | const raw = typeof h.get === 'function' ? h.get('retry-after') : h['retry-after']; |
| 87 | if (!raw) return undefined; |
| 88 | const secs = Number(raw); |
| 89 | if (Number.isFinite(secs)) return secs * 1000; |
| 90 | const date = Date.parse(raw); |
| 91 | if (!Number.isNaN(date)) return Math.max(0, date - Date.now()); |
| 92 | return undefined; |
| 93 | } |
| 94 | |
| 95 | const TRANSIENT_CODE_RE = /ECONNREFUSED|ECONNRESET|ETIMEDOUT|EPIPE|EAI_AGAIN|ENOTFOUND|socket hang ?up|network|fetch failed|terminated|aborted by the server|stream (?:closed|disconnected)|premature close/i; |
| 96 |