aboutsummaryrefslogtreecommitdiff
path: root/packages/web-util/src/utils/request.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/web-util/src/utils/request.ts')
-rw-r--r--packages/web-util/src/utils/request.ts44
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;