summaryrefslogtreecommitdiff
path: root/packages/taler-util/src/http-common.ts
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2023-10-17 11:17:18 -0300
committerSebastian <sebasjm@gmail.com>2023-10-17 11:17:41 -0300
commit503cbfbb95828677b83212816951eb501de2a8fe (patch)
tree9bbb59300069fba59baca66f543c5145911905b5 /packages/taler-util/src/http-common.ts
parentaca3bc9423f15354913d0114cafbd4bd1782d801 (diff)
downloadwallet-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.ts31
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> {