(error: ReturnType<NamedError["toObject"]>)
| 133 | } |
| 134 | |
| 135 | export function retryable(error: ReturnType<NamedError["toObject"]>) { |
| 136 | if (MessageV2.APIError.isInstance(error)) { |
| 137 | // always retry rate limit errors even if isRetryable is false |
| 138 | if (isRateLimitError(error)) { |
| 139 | if (error.data.message.includes("quota")) return "Rate limit exceeded, waiting for quota reset" |
| 140 | return "Rate limit exceeded" |
| 141 | } |
| 142 | if (!error.data.isRetryable) return undefined |
| 143 | return error.data.message.includes("Overloaded") ? "Provider is overloaded" : error.data.message |
| 144 | } |
| 145 | |
| 146 | if (typeof error.data?.message === "string") { |
| 147 | try { |
| 148 | const json = JSON.parse(error.data.message) |
| 149 | if (json.type === "error" && json.error?.type === "too_many_requests") { |
| 150 | return "Too Many Requests" |
| 151 | } |
| 152 | if (json.code === "Some resource has been exhausted") { |
| 153 | return "Provider is overloaded" |
| 154 | } |
| 155 | } catch {} |
| 156 | } |
| 157 | |
| 158 | return undefined |
| 159 | } |
| 160 | } |
nothing calls this directly
no test coverage detected