diff options
Diffstat (limited to 'packages/web-util/src/utils/request.ts')
-rw-r--r-- | packages/web-util/src/utils/request.ts | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/packages/web-util/src/utils/request.ts b/packages/web-util/src/utils/request.ts index 8c77814f7..7f7063a23 100644 --- a/packages/web-util/src/utils/request.ts +++ b/packages/web-util/src/utils/request.ts @@ -126,11 +126,12 @@ export async function defaultRequestHandler<T>( ); return result; } else { - const error = await buildRequestFailed( - response, + const dataTxt = await response.text(); + const error = buildRequestFailed( _url.href, + dataTxt, + response.status, payload, - !!options.token, options, ); throw new RequestError(error); @@ -292,47 +293,58 @@ async function buildRequestOk<T>( }; } -async function buildRequestFailed<ErrorDetail>( - response: Response, +export function buildRequestFailed<ErrorDetail>( url: string, + dataTxt: string, + status: number, payload: any, - hasToken: boolean, - options: RequestOptions, -): Promise< + maybeOptions?: RequestOptions, +): | HttpResponseClientError<ErrorDetail> | HttpResponseServerError<ErrorDetail> | HttpResponseUnreadableError - | HttpResponseUnexpectedError -> { - const status = response?.status; - + | HttpResponseUnexpectedError { + const options = maybeOptions ?? {}; const info: RequestInfo = { payload, url, - hasToken, + hasToken: !!options.token, options, status: status || 0, }; - const dataTxt = await response.text(); + // const dataTxt = await response.text(); try { const data = dataTxt ? JSON.parse(dataTxt) : undefined; + const errorCode = !data || !data.code ? "" : `(code: ${data.code})`; + const errorHint = + !data || !data.hint ? "Not hint." : `${data.hint} ${errorCode}`; + if (status && status >= 400 && status < 500) { + const message = + data === undefined + ? `Client error (${status}) without data.` + : errorHint; + const error: HttpResponseClientError<ErrorDetail> = { type: ErrorType.CLIENT, status, info, - message: data?.hint, + message, payload: data, }; return error; } if (status && status >= 500 && status < 600) { + const message = + data === undefined + ? `Server error (${status}) without data.` + : errorHint; const error: HttpResponseServerError<ErrorDetail> = { type: ErrorType.SERVER, status, info, - message: `${data?.hint} (code ${data?.code})`, + message, payload: data, }; return error; |