diff options
author | Sebastian <sebasjm@gmail.com> | 2023-10-17 11:17:18 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2023-10-17 11:17:41 -0300 |
commit | 503cbfbb95828677b83212816951eb501de2a8fe (patch) | |
tree | 9bbb59300069fba59baca66f543c5145911905b5 /packages/taler-util/src/http-common.ts | |
parent | aca3bc9423f15354913d0114cafbd4bd1782d801 (diff) | |
download | wallet-core-503cbfbb95828677b83212816951eb501de2a8fe.tar.gz wallet-core-503cbfbb95828677b83212816951eb501de2a8fe.tar.bz2 wallet-core-503cbfbb95828677b83212816951eb501de2a8fe.zip |
bank api now return typed errors for documented errors
Diffstat (limited to 'packages/taler-util/src/http-common.ts')
-rw-r--r-- | packages/taler-util/src/http-common.ts | 31 |
1 files changed, 31 insertions, 0 deletions
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<TalerErrorDetail> { |