diff options
author | Sebastian <sebasjm@gmail.com> | 2023-04-18 14:58:34 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2023-04-18 14:58:34 -0300 |
commit | 7330f0daf907133876baf8831c44ec34cec326e5 (patch) | |
tree | 4071520541a2d0e2b66ee0db673395c0fcb772b7 | |
parent | b34f3568e8c9dde73f11583a6b46ef1509990397 (diff) | |
download | wallet-core-7330f0daf907133876baf8831c44ec34cec326e5.tar.xz |
catch json parsing problem and report nicely
-rw-r--r-- | packages/taler-util/src/http-common.ts | 83 |
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( |