(error: unknown)
| 155 | } |
| 156 | |
| 157 | function isTransientError(error: unknown): boolean { |
| 158 | if (!axios.isAxiosError(error)) { |
| 159 | return false |
| 160 | } |
| 161 | const code = error.code |
| 162 | if ( |
| 163 | code === 'ECONNABORTED' || |
| 164 | code === 'ETIMEDOUT' || |
| 165 | code === 'ECONNRESET' || |
| 166 | code === 'ENOTFOUND' |
| 167 | ) { |
| 168 | return true |
| 169 | } |
| 170 | const status = error.response?.status ?? 0 |
| 171 | return status >= 500 || status === 429 |
| 172 | } |
| 173 | |
| 174 | async function withTransientRetry<T>( |
| 175 | fn: () => Promise<T>, |
no outgoing calls
no test coverage detected