From 503cbfbb95828677b83212816951eb501de2a8fe Mon Sep 17 00:00:00 2001 From: Sebastian Date: Tue, 17 Oct 2023 11:17:18 -0300 Subject: bank api now return typed errors for documented errors --- packages/taler-util/src/http-common.ts | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'packages/taler-util/src/http-common.ts') diff --git a/packages/taler-util/src/http-common.ts b/packages/taler-util/src/http-common.ts index da2fbb9da..817f2367f 100644 --- a/packages/taler-util/src/http-common.ts +++ b/packages/taler-util/src/http-common.ts @@ -180,6 +180,37 @@ export async function readTalerErrorResponse( return errJson; } +export async function readErrorResponse( + httpResponse: HttpResponse, +): Promise<{ detail: TalerErrorDetail | undefined, body: string }> { + let errString: string; + try { + errString = await httpResponse.text(); + } 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", + ); + } + let errJson; + try { + errJson = JSON.parse(errString) + } catch (e) { + errJson = undefined + } + + const talerErrorCode = errJson && errJson.code; + if (typeof talerErrorCode === "number") { + return { detail: errJson, body: errString } + } + return { detail: undefined, body: errString }; +} export async function readUnexpectedResponseDetails( httpResponse: HttpResponse, ): Promise { -- cgit v1.2.3