aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2023-04-18 14:58:34 -0300
committerSebastian <sebasjm@gmail.com>2023-04-18 14:58:34 -0300
commit7330f0daf907133876baf8831c44ec34cec326e5 (patch)
tree4071520541a2d0e2b66ee0db673395c0fcb772b7
parentb34f3568e8c9dde73f11583a6b46ef1509990397 (diff)
catch json parsing problem and report nicely
-rw-r--r--packages/taler-util/src/http-common.ts83
1 files changed, 78 insertions, 5 deletions
diff --git a/packages/taler-util/src/http-common.ts b/packages/taler-util/src/http-common.ts
index 1329c8a55..9aaad12c7 100644
--- a/packages/taler-util/src/http-common.ts
+++ b/packages/taler-util/src/http-common.ts
@@ -139,7 +139,22 @@ type ResponseOrError<T> =
export async function readTalerErrorResponse(
httpResponse: HttpResponse,
): Promise<TalerErrorDetail> {
- const errJson = await httpResponse.json();
+ let errJson;
+ try {
+ errJson = await httpResponse.json();
+ } catch (e: any) {
+ throw TalerError.fromDetail(
+ TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,
+ {
+ requestUrl: httpResponse.requestUrl,
+ requestMethod: httpResponse.requestMethod,
+ httpStatusCode: httpResponse.status,
+ validationError: e.toString(),
+ },
+ "Couldn't parse JSON format from error response",
+ );
+ }
+
const talerErrorCode = errJson.code;
if (typeof talerErrorCode !== "number") {
logger.warn(
@@ -163,7 +178,21 @@ export async function readTalerErrorResponse(
export async function readUnexpectedResponseDetails(
httpResponse: HttpResponse,
): Promise<TalerErrorDetail> {
- const errJson = await httpResponse.json();
+ let errJson;
+ try {
+ errJson = await httpResponse.json();
+ } catch (e: any) {
+ throw TalerError.fromDetail(
+ TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,
+ {
+ requestUrl: httpResponse.requestUrl,
+ requestMethod: httpResponse.requestMethod,
+ httpStatusCode: httpResponse.status,
+ validationError: e.toString(),
+ },
+ "Couldn't parse JSON format from error response",
+ );
+ }
const talerErrorCode = errJson.code;
if (typeof talerErrorCode !== "number") {
return makeErrorDetail(
@@ -198,7 +227,21 @@ export async function readSuccessResponseJsonOrErrorCode<T>(
talerErrorResponse: await readTalerErrorResponse(httpResponse),
};
}
- const respJson = await httpResponse.json();
+ let respJson;
+ try {
+ respJson = await httpResponse.json();
+ } catch (e: any) {
+ throw TalerError.fromDetail(
+ TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,
+ {
+ requestUrl: httpResponse.requestUrl,
+ requestMethod: httpResponse.requestMethod,
+ httpStatusCode: httpResponse.status,
+ validationError: e.toString(),
+ },
+ "Couldn't parse JSON format from response",
+ );
+ }
let parsedResponse: T;
try {
parsedResponse = codec.decode(respJson);
@@ -267,7 +310,22 @@ export async function readSuccessResponseTextOrErrorCode<T>(
httpResponse: HttpResponse,
): Promise<ResponseOrError<string>> {
if (!(httpResponse.status >= 200 && httpResponse.status < 300)) {
- const errJson = await httpResponse.json();
+ let errJson;
+ try {
+ errJson = await httpResponse.json();
+ } catch (e: any) {
+ throw TalerError.fromDetail(
+ TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,
+ {
+ requestUrl: httpResponse.requestUrl,
+ requestMethod: httpResponse.requestMethod,
+ httpStatusCode: httpResponse.status,
+ validationError: e.toString(),
+ },
+ "Couldn't parse JSON format from error response",
+ );
+ }
+
const talerErrorCode = errJson.code;
if (typeof talerErrorCode !== "number") {
throw TalerError.fromDetail(
@@ -296,7 +354,22 @@ export async function checkSuccessResponseOrThrow(
httpResponse: HttpResponse,
): Promise<void> {
if (!(httpResponse.status >= 200 && httpResponse.status < 300)) {
- const errJson = await httpResponse.json();
+ let errJson;
+ try {
+ errJson = await httpResponse.json();
+ } catch (e: any) {
+ throw TalerError.fromDetail(
+ TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,
+ {
+ requestUrl: httpResponse.requestUrl,
+ requestMethod: httpResponse.requestMethod,
+ httpStatusCode: httpResponse.status,
+ validationError: e.toString(),
+ },
+ "Couldn't parse JSON format from error response",
+ );
+ }
+
const talerErrorCode = errJson.code;
if (typeof talerErrorCode !== "number") {
throw TalerError.fromDetail(