diff --git a/src/main/util/response.ts b/src/main/util/response.ts index e4f3fbc..af8dd9e 100644 --- a/src/main/util/response.ts +++ b/src/main/util/response.ts @@ -1,16 +1,16 @@ import { ResponseSpec, ResponseSpecSchema } from '../schema/ResponseSpec.js'; export function errorToResponse(error: any): ResponseSpec { + const isFetchFailed = error.name === 'TypeError' && error.message === 'fetch failed'; + const isUnknown = !error?.name && !error?.message; + const body = isFetchFailed || isUnknown ? createWrappedErrorBody(error) : createErrorBody(error); + return { status: Number(error?.status) || 500, headers: { 'content-type': ['application/json'], }, - body: { - name: error?.name ?? 'Error', - message: error?.message ?? 'Unknown error', - details: error?.details ?? undefined, - }, + body, }; } @@ -34,3 +34,19 @@ export function resultToResponse(value: any): ResponseSpec { body: value, }; } + +function createErrorBody(error: any) { + return { + name: error?.name ?? 'Error', + message: error?.message ?? 'Unknown error', + details: error?.details ?? undefined, + }; +} + +function createWrappedErrorBody(error: any) { + return { + name: 'ServerError', + message: 'The target server failed to complete the request.', + details: createErrorBody(error) + }; +}