* Parses an error response from OpenRouter and returns an OpenRouterError.
( response: Response, )
| 871 | * Parses an error response from OpenRouter and returns an OpenRouterError. |
| 872 | */ |
| 873 | async function parseOpenRouterError( |
| 874 | response: Response, |
| 875 | ): Promise<OpenRouterError> { |
| 876 | const errorText = await response.text() |
| 877 | let errorBody: OpenRouterError['errorBody'] |
| 878 | try { |
| 879 | const parsed = JSON.parse(errorText) |
| 880 | const validated = OpenRouterErrorResponseSchema.safeParse(parsed) |
| 881 | if (validated.success) { |
| 882 | // metadata is not in the schema but OpenRouter includes it for provider errors |
| 883 | const metadata = (parsed as any).error?.metadata as |
| 884 | | { raw?: string; provider_name?: string } |
| 885 | | undefined |
| 886 | const enhancedMessage = buildEnhancedErrorMessage( |
| 887 | validated.data.error.message, |
| 888 | metadata, |
| 889 | ) |
| 890 | errorBody = { |
| 891 | error: { |
| 892 | message: enhancedMessage, |
| 893 | code: validated.data.error.code ?? null, |
| 894 | type: validated.data.error.type, |
| 895 | param: validated.data.error.param, |
| 896 | metadata, |
| 897 | }, |
| 898 | } |
| 899 | } else { |
| 900 | errorBody = { |
| 901 | error: { |
| 902 | message: errorText || response.statusText, |
| 903 | code: response.status, |
| 904 | }, |
| 905 | } |
| 906 | } |
| 907 | } catch { |
| 908 | errorBody = { |
| 909 | error: { |
| 910 | message: errorText || response.statusText, |
| 911 | code: response.status, |
| 912 | }, |
| 913 | } |
| 914 | } |
| 915 | return new OpenRouterError(response.status, response.statusText, errorBody) |
| 916 | } |
| 917 | |
| 918 | /** |
| 919 | * Convert credits (integer cents) back to a cost value that will result in the same |
no test coverage detected