(request: HttpClientRequest.HttpClientRequest, redactedNames: ReadonlyArray<string | RegExp>)
| 276 | |
| 277 | const statusError = |
| 278 | (request: HttpClientRequest.HttpClientRequest, redactedNames: ReadonlyArray<string | RegExp>) => |
| 279 | (response: HttpClientResponse.HttpClientResponse) => |
| 280 | Effect.gen(function* () { |
| 281 | if (response.status < 400) return response |
| 282 | const body = yield* response.text.pipe(Effect.catch(() => Effect.void)) |
| 283 | const headers = normalizedHeaders(response.headers) |
| 284 | const retryAfter = retryAfterMs(headers) |
| 285 | const rateLimit = rateLimitDetails(headers, retryAfter) |
| 286 | const details = responseBody(body, request) |
| 287 | return yield* new LLMError({ |
| 288 | module: "RequestExecutor", |
| 289 | method: "execute", |
| 290 | reason: statusReason({ |
| 291 | status: response.status, |
| 292 | message: providerMessage(response.status, details), |
| 293 | retryAfterMs: retryAfter, |
| 294 | rateLimit, |
| 295 | http: responseHttp({ |
| 296 | request, |
| 297 | response, |
| 298 | redactedNames, |
| 299 | body: details, |
| 300 | requestId: requestId(headers), |
| 301 | rateLimit, |
| 302 | }), |
| 303 | }), |
| 304 | }) |
| 305 | }) |
| 306 | |
| 307 | const toHttpError = (redactedNames: ReadonlyArray<string | RegExp>) => (error: unknown) => { |
| 308 | const transportError = (input: { |
no test coverage detected