From 2c1f3ffec19e95716a57647f35c7bd68e8565e5a Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 1 Apr 2024 14:03:50 -0300 Subject: fix #8681 --- packages/taler-util/src/MerchantApiClient.ts | 9 +- packages/taler-util/src/bank-api-client.ts | 3 +- .../taler-util/src/http-client/authentication.ts | 7 +- .../taler-util/src/http-client/bank-conversion.ts | 10 +- packages/taler-util/src/http-client/bank-core.ts | 159 ++++++++++----------- .../taler-util/src/http-client/bank-integration.ts | 22 +-- .../taler-util/src/http-client/bank-revenue.ts | 4 +- packages/taler-util/src/http-client/bank-wire.ts | 12 +- packages/taler-util/src/http-client/exchange.ts | 12 +- packages/taler-util/src/http-client/merchant.ts | 121 ++++++++-------- packages/taler-util/src/operation.ts | 19 ++- packages/taler-util/src/taler-error-codes.ts | 3 + packages/taler-util/src/taleruri.ts | 63 ++++++-- .../src/cta/Withdraw/state.ts | 24 ++-- 14 files changed, 254 insertions(+), 214 deletions(-) diff --git a/packages/taler-util/src/MerchantApiClient.ts b/packages/taler-util/src/MerchantApiClient.ts index fa9a00176..c27f1d582 100644 --- a/packages/taler-util/src/MerchantApiClient.ts +++ b/packages/taler-util/src/MerchantApiClient.ts @@ -25,6 +25,7 @@ import { createPlatformHttpLib, expectSuccessResponseOrThrow, readSuccessResponseJsonOrThrow, + readTalerErrorResponse, } from "./http.js"; import { FacadeCredentials } from "./libeufin-api-types.js"; import { LibtoolVersion } from "./libtool-version.js"; @@ -305,7 +306,7 @@ export class MerchantApiClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -321,7 +322,7 @@ export class MerchantApiClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -342,7 +343,7 @@ export class MerchantApiClient { case HttpStatusCode.Ok: return opSuccessFromHttp(resp, codecForMerchantConfig()); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -362,7 +363,7 @@ export class MerchantApiClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } diff --git a/packages/taler-util/src/bank-api-client.ts b/packages/taler-util/src/bank-api-client.ts index 9c35af948..51359129d 100644 --- a/packages/taler-util/src/bank-api-client.ts +++ b/packages/taler-util/src/bank-api-client.ts @@ -45,6 +45,7 @@ import { createPlatformHttpLib, HttpRequestLibrary, readSuccessResponseJsonOrThrow, + readTalerErrorResponse, } from "@gnu-taler/taler-util/http"; const logger = new Logger("bank-api-client.ts"); @@ -420,7 +421,7 @@ export class TalerCorebankApiClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } diff --git a/packages/taler-util/src/http-client/authentication.ts b/packages/taler-util/src/http-client/authentication.ts index f77df2ed0..b8affee7b 100644 --- a/packages/taler-util/src/http-client/authentication.ts +++ b/packages/taler-util/src/http-client/authentication.ts @@ -22,6 +22,7 @@ import { HttpRequestLibrary, createPlatformHttpLib, makeBasicAuthHeader, + readTalerErrorResponse, } from "../http.js"; import { LibtoolVersion } from "../libtool-version.js"; import { @@ -82,7 +83,7 @@ export class TalerAuthenticationHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -111,7 +112,7 @@ export class TalerAuthenticationHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -130,7 +131,7 @@ export class TalerAuthenticationHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } } diff --git a/packages/taler-util/src/http-client/bank-conversion.ts b/packages/taler-util/src/http-client/bank-conversion.ts index 3db9df101..cb14d8b34 100644 --- a/packages/taler-util/src/http-client/bank-conversion.ts +++ b/packages/taler-util/src/http-client/bank-conversion.ts @@ -18,7 +18,7 @@ * Imports. */ import { AmountJson, Amounts } from "../amounts.js"; -import { HttpRequestLibrary } from "../http-common.js"; +import { HttpRequestLibrary, readTalerErrorResponse } from "../http-common.js"; import { HttpStatusCode } from "../http-status-codes.js"; import { createPlatformHttpLib } from "../http.js"; import { LibtoolVersion } from "../libtool-version.js"; @@ -94,7 +94,7 @@ export class TalerBankConversionHttpClient { case HttpStatusCode.NotImplemented: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -138,7 +138,7 @@ export class TalerBankConversionHttpClient { case HttpStatusCode.NotImplemented: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -185,7 +185,7 @@ export class TalerBankConversionHttpClient { case HttpStatusCode.NotImplemented: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -217,7 +217,7 @@ export class TalerBankConversionHttpClient { case HttpStatusCode.NotImplemented: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } } diff --git a/packages/taler-util/src/http-client/bank-core.ts b/packages/taler-util/src/http-client/bank-core.ts index 7a98b6281..3ef58b2f4 100644 --- a/packages/taler-util/src/http-client/bank-core.ts +++ b/packages/taler-util/src/http-client/bank-core.ts @@ -29,6 +29,7 @@ import { import { HttpRequestLibrary, createPlatformHttpLib, + readTalerErrorResponse, } from "@gnu-taler/taler-util/http"; import { FailCasesByMethod, @@ -127,7 +128,7 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.Ok: return opSuccessFromHttp(resp, codecForCoreBankConfig()); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -165,31 +166,30 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.Unauthorized: return opKnownHttpFailure(resp.status, resp); case HttpStatusCode.Conflict: { - const body = await resp.json(); - const details = codecForTalerErrorDetail().decode(body); + const details = await readTalerErrorResponse(resp); switch (details.code) { case TalerErrorCode.BANK_REGISTER_USERNAME_REUSE: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_REGISTER_PAYTO_URI_REUSE: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_UNALLOWED_DEBIT: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_NON_ADMIN_SET_TAN_CHANNEL: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_MISSING_TAN_INFO: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); default: - return opUnknownFailure(resp, body); + return opUnknownFailure(resp, details); } } default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } /** @@ -219,19 +219,18 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); case HttpStatusCode.Conflict: { - const body = await resp.json(); - const details = codecForTalerErrorDetail().decode(body); + const details = await readTalerErrorResponse(resp); switch (details.code) { case TalerErrorCode.BANK_RESERVED_USERNAME_CONFLICT: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_ACCOUNT_BALANCE_NOT_ZERO: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); default: - return opUnknownFailure(resp, body); + return opUnknownFailure(resp, details); } } default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -267,25 +266,24 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); case HttpStatusCode.Conflict: { - const body = await resp.json(); - const details = codecForTalerErrorDetail().decode(body); + const details = await readTalerErrorResponse(resp); switch (details.code) { case TalerErrorCode.BANK_NON_ADMIN_PATCH_LEGAL_NAME: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_NON_ADMIN_PATCH_CASHOUT: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_NON_ADMIN_PATCH_DEBT_LIMIT: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_TAN_CHANNEL_NOT_SUPPORTED: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_MISSING_TAN_INFO: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); default: - return opUnknownFailure(resp, body); + return opUnknownFailure(resp, details); } } default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -321,19 +319,18 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.Unauthorized: return opKnownHttpFailure(resp.status, resp); case HttpStatusCode.Conflict: { - const body = await resp.json(); - const details = codecForTalerErrorDetail().decode(body); + const details = await readTalerErrorResponse(resp); switch (details.code) { case TalerErrorCode.BANK_NON_ADMIN_PATCH_MISSING_OLD_PASSWORD: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_PATCH_BAD_OLD_PASSWORD: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); default: - return opUnknownFailure(resp, body); + return opUnknownFailure(resp, details); } } default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -361,7 +358,7 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.NotFound: return opFixedSuccess({ public_accounts: [] }); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -393,7 +390,7 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.Unauthorized: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -417,7 +414,7 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -455,7 +452,7 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -482,7 +479,7 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.Unauthorized: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -520,23 +517,22 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); case HttpStatusCode.Conflict: { - const body = await resp.json(); - const details = codecForTalerErrorDetail().decode(body); + const details = await readTalerErrorResponse(resp); switch (details.code) { case TalerErrorCode.BANK_ADMIN_CREDITOR: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_SAME_ACCOUNT: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_UNKNOWN_CREDITOR: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_UNALLOWED_DEBIT: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); default: - return opUnknownFailure(resp, body); + return opUnknownFailure(resp, details); } } default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -574,7 +570,7 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.Unauthorized: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -609,21 +605,20 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); case HttpStatusCode.Conflict: { - const body = await resp.json(); - const details = codecForTalerErrorDetail().decode(body); + const details = await readTalerErrorResponse(resp); switch (details.code) { case TalerErrorCode.BANK_CONFIRM_ABORT_CONFLICT: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_CONFIRM_INCOMPLETE: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_UNALLOWED_DEBIT: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); default: - return opUnknownFailure(resp, body); + return opUnknownFailure(resp, details); } } default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -653,7 +648,7 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -687,7 +682,7 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -725,35 +720,33 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); case HttpStatusCode.Conflict: { - const body = await resp.json(); - const details = codecForTalerErrorDetail().decode(body); + const details = await readTalerErrorResponse(resp); switch (details.code) { case TalerErrorCode.BANK_TRANSFER_REQUEST_UID_REUSED: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_BAD_CONVERSION: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_UNALLOWED_DEBIT: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_CONFIRM_INCOMPLETE: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); default: - return opUnknownFailure(resp, body); + return opUnknownFailure(resp, details); } } case HttpStatusCode.BadGateway: { - const body = await resp.json(); - const details = codecForTalerErrorDetail().decode(body); + const details = await readTalerErrorResponse(resp); switch (details.code) { case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); default: - return opUnknownFailure(resp, body); + return opUnknownFailure(resp, details); } } case HttpStatusCode.NotImplemented: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -780,7 +773,7 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.NotImplemented: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -805,7 +798,7 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.NotImplemented: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -830,7 +823,7 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.NotImplemented: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -861,17 +854,16 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); case HttpStatusCode.BadGateway: { - const body = await resp.json(); - const details = codecForTalerErrorDetail().decode(body); + const details = await readTalerErrorResponse(resp); switch (details.code) { case TalerErrorCode.BANK_TAN_CHANNEL_SCRIPT_FAILED: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); default: - return opUnknownFailure(resp, body); + return opUnknownFailure(resp, details); } } default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -903,21 +895,20 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); case HttpStatusCode.Conflict: { - const body = await resp.json(); - const details = codecForTalerErrorDetail().decode(body); + const details = await readTalerErrorResponse(resp); switch (details.code) { case TalerErrorCode.BANK_TAN_CHALLENGE_EXPIRED: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_TAN_CHALLENGE_FAILED: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); default: - return opUnknownFailure(resp, body); + return opUnknownFailure(resp, details); } } case HttpStatusCode.TooManyRequests: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -960,7 +951,7 @@ export class TalerCoreBankHttpClient { case HttpStatusCode.Unauthorized: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } diff --git a/packages/taler-util/src/http-client/bank-integration.ts b/packages/taler-util/src/http-client/bank-integration.ts index f63fa4445..75e6a627a 100644 --- a/packages/taler-util/src/http-client/bank-integration.ts +++ b/packages/taler-util/src/http-client/bank-integration.ts @@ -14,7 +14,7 @@ GNU Taler; see the file COPYING. If not, see */ -import { HttpRequestLibrary } from "../http-common.js"; +import { HttpRequestLibrary, readTalerErrorResponse } from "../http-common.js"; import { HttpStatusCode } from "../http-status-codes.js"; import { createPlatformHttpLib } from "../http.js"; import { LibtoolVersion } from "../libtool-version.js"; @@ -79,7 +79,7 @@ export class TalerBankIntegrationHttpClient { case HttpStatusCode.Ok: return opSuccessFromHttp(resp, codecForIntegrationBankConfig()); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -110,7 +110,7 @@ export class TalerBankIntegrationHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -136,23 +136,23 @@ export class TalerBankIntegrationHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); case HttpStatusCode.Conflict: { - const body = await resp.json(); + const body = await readTalerErrorResponse(resp); const details = codecForTalerErrorDetail().decode(body); switch (details.code) { case TalerErrorCode.BANK_WITHDRAWAL_OPERATION_RESERVE_SELECTION_CONFLICT: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_DUPLICATE_RESERVE_PUB_SUBJECT: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_UNKNOWN_ACCOUNT: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); case TalerErrorCode.BANK_ACCOUNT_IS_NOT_EXCHANGE: - return opKnownTalerFailure(details.code, resp); + return opKnownTalerFailure(details.code, details); default: - return opUnknownFailure(resp, body); + return opUnknownFailure(resp, details); } } default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -173,7 +173,7 @@ export class TalerBankIntegrationHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } } diff --git a/packages/taler-util/src/http-client/bank-revenue.ts b/packages/taler-util/src/http-client/bank-revenue.ts index 3b6b3c258..d2f0c7000 100644 --- a/packages/taler-util/src/http-client/bank-revenue.ts +++ b/packages/taler-util/src/http-client/bank-revenue.ts @@ -14,7 +14,7 @@ GNU Taler; see the file COPYING. If not, see */ -import { HttpRequestLibrary, makeBasicAuthHeader } from "../http-common.js"; +import { HttpRequestLibrary, makeBasicAuthHeader, readTalerErrorResponse } from "../http-common.js"; import { HttpStatusCode } from "../http-status-codes.js"; import { createPlatformHttpLib } from "../http.js"; import { @@ -98,7 +98,7 @@ export class TalerRevenueHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } } diff --git a/packages/taler-util/src/http-client/bank-wire.ts b/packages/taler-util/src/http-client/bank-wire.ts index 54211fef7..a8c976a80 100644 --- a/packages/taler-util/src/http-client/bank-wire.ts +++ b/packages/taler-util/src/http-client/bank-wire.ts @@ -14,7 +14,7 @@ GNU Taler; see the file COPYING. If not, see */ -import { HttpRequestLibrary, makeBasicAuthHeader } from "../http-common.js"; +import { HttpRequestLibrary, makeBasicAuthHeader, readTalerErrorResponse } from "../http-common.js"; import { HttpStatusCode } from "../http-status-codes.js"; import { createPlatformHttpLib } from "../http.js"; import { @@ -77,7 +77,7 @@ export class TalerWireGatewayHttpClient { // }); // switch (resp.status) { // case HttpStatusCode.Ok: return opSuccess(resp, codecForCoreBankConfig()) - // default: return opUnknownFailure(resp, await resp.text()) + // default: return opUnknownFailure(resp, await readTalerErrorResponse(resp)) // } // } @@ -108,7 +108,7 @@ export class TalerWireGatewayHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -147,7 +147,7 @@ export class TalerWireGatewayHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -186,7 +186,7 @@ export class TalerWireGatewayHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -220,7 +220,7 @@ export class TalerWireGatewayHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } } diff --git a/packages/taler-util/src/http-client/exchange.ts b/packages/taler-util/src/http-client/exchange.ts index c61ba1f8d..befde4d20 100644 --- a/packages/taler-util/src/http-client/exchange.ts +++ b/packages/taler-util/src/http-client/exchange.ts @@ -1,4 +1,4 @@ -import { HttpRequestLibrary } from "../http-common.js"; +import { HttpRequestLibrary, readTalerErrorResponse } from "../http-common.js"; import { HttpStatusCode } from "../http-status-codes.js"; import { createPlatformHttpLib } from "../http.js"; import { LibtoolVersion } from "../libtool-version.js"; @@ -72,7 +72,7 @@ export class TalerExchangeHttpClient { case HttpStatusCode.Ok: return opSuccessFromHttp(resp, codecForExchangeConfig()); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } /** @@ -89,7 +89,7 @@ export class TalerExchangeHttpClient { case HttpStatusCode.Ok: return opSuccessFromHttp(resp, codecForExchangeKeys()); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -136,7 +136,7 @@ export class TalerExchangeHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -169,7 +169,7 @@ export class TalerExchangeHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -203,7 +203,7 @@ export class TalerExchangeHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } } diff --git a/packages/taler-util/src/http-client/merchant.ts b/packages/taler-util/src/http-client/merchant.ts index 7efa90a5f..5fd001555 100644 --- a/packages/taler-util/src/http-client/merchant.ts +++ b/packages/taler-util/src/http-client/merchant.ts @@ -62,6 +62,7 @@ import { HttpRequestLibrary, HttpResponse, createPlatformHttpLib, + readTalerErrorResponse, } from "@gnu-taler/taler-util/http"; import { opSuccessFromHttp, opUnknownFailure } from "../operation.js"; import { @@ -127,7 +128,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.Ok: return opSuccessFromHttp(resp, codecForMerchantConfig()); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -154,7 +155,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -193,7 +194,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.GatewayTimeout: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -255,7 +256,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotAcceptable: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -280,7 +281,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -308,7 +309,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -336,7 +337,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -371,7 +372,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -399,7 +400,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -423,7 +424,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.Ok: return opSuccessFromHttp(resp, codecForQueryInstancesResponse()); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -456,7 +457,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -500,7 +501,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.GatewayTimeout: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -532,7 +533,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -561,7 +562,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -586,7 +587,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -611,7 +612,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -636,7 +637,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -666,7 +667,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -698,7 +699,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -725,7 +726,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -750,7 +751,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -778,7 +779,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.Gone: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -805,7 +806,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -848,7 +849,7 @@ export class TalerMerchantInstanceHttpClient { codecForOutOfStockResponse(), ); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -894,7 +895,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.Ok: return opSuccessFromHttp(resp, codecForOrderHistory()); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -944,7 +945,7 @@ export class TalerMerchantInstanceHttpClient { codecForOutOfStockResponse(), ); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -976,7 +977,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1003,7 +1004,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1039,7 +1040,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1071,7 +1072,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1111,7 +1112,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.Ok: return opSuccessFromHttp(resp, codecForTansferList()); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1138,7 +1139,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1168,7 +1169,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1199,7 +1200,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1223,7 +1224,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1258,7 +1259,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1282,7 +1283,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1311,7 +1312,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1342,7 +1343,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1366,7 +1367,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1390,7 +1391,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1414,7 +1415,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1433,7 +1434,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1480,7 +1481,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1512,7 +1513,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1537,7 +1538,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1561,7 +1562,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1585,7 +1586,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1615,7 +1616,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1644,7 +1645,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1669,7 +1670,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1694,7 +1695,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1718,7 +1719,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1786,7 +1787,7 @@ export class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttp case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1816,7 +1817,7 @@ export class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttp case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1845,7 +1846,7 @@ export class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttp case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1868,7 +1869,7 @@ export class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttp case HttpStatusCode.Ok: return opSuccessFromHttp(resp, codecForInstancesResponse()); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1892,7 +1893,7 @@ export class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttp case HttpStatusCode.Ok: return opSuccessFromHttp(resp, codecForQueryInstancesResponse()); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1924,7 +1925,7 @@ export class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttp case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } @@ -1968,7 +1969,7 @@ export class TalerMerchantManagementHttpClient extends TalerMerchantInstanceHttp case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: - return opUnknownFailure(resp, await resp.text()); + return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } } diff --git a/packages/taler-util/src/operation.ts b/packages/taler-util/src/operation.ts index 07a216fe9..771f5860b 100644 --- a/packages/taler-util/src/operation.ts +++ b/packages/taler-util/src/operation.ts @@ -138,22 +138,21 @@ export async function opKnownHttpFailure( return { type: "fail", case: s, detail }; } -export async function opKnownTalerFailure( +export function opKnownTalerFailure( s: T, - resp: HttpResponse, -): Promise> { - const detail = await readTalerErrorResponse(resp); + detail: TalerErrorDetail, +): OperationFail { return { type: "fail", case: s, detail }; } -export function opUnknownFailure(resp: HttpResponse, text: string): never { +export function opUnknownFailure(resp: HttpResponse, error: TalerErrorDetail): never { throw TalerError.fromDetail( TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR, { requestUrl: resp.requestUrl, requestMethod: resp.requestMethod, httpStatusCode: resp.status, - errorResponse: text, + errorResponse: error, }, `Unexpected HTTP status ${resp.status} in response`, ); @@ -184,10 +183,10 @@ export type ResultByMethod< p extends keyof TT, > = TT[p] extends (...args: any[]) => infer Ret ? Ret extends Promise - ? Result extends OperationResult - ? Result - : never - : never //api always use Promises + ? Result extends OperationResult + ? Result + : never + : never //api always use Promises : never; //error cases just for functions export type FailCasesByMethod = Exclude< diff --git a/packages/taler-util/src/taler-error-codes.ts b/packages/taler-util/src/taler-error-codes.ts index 2c65255df..822388e2b 100644 --- a/packages/taler-util/src/taler-error-codes.ts +++ b/packages/taler-util/src/taler-error-codes.ts @@ -22,6 +22,9 @@ */ export enum TalerErrorCode { + TALER_URI_PREFIX = 1111, + TALER_URI_UNKOWN_ACTION = 1111, + TALER_URI_NO_ENOUGH_COMPONENT = 1112, /** * Special code to indicate success (no error). * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0). diff --git a/packages/taler-util/src/taleruri.ts b/packages/taler-util/src/taleruri.ts index 97b82c061..b56295c3f 100644 --- a/packages/taler-util/src/taleruri.ts +++ b/packages/taler-util/src/taleruri.ts @@ -27,7 +27,8 @@ import { Codec, Context, DecodingError, renderContext } from "./codec.js"; import { canonicalizeBaseUrl } from "./helpers.js"; import { AmountString } from "./taler-types.js"; import { URL, URLSearchParams } from "./url.js"; - +import { opFixedSuccess, opKnownTalerFailure } from "./operation.js"; +import { TalerErrorCode } from "./taler-error-codes.js"; /** * A parsed taler URI. */ @@ -130,15 +131,17 @@ export interface WithdrawExchangeUri { * Parse a taler[+http]://withdraw URI. * Return undefined if not passed a valid URI. */ -export function parseWithdrawUri(s: string): WithdrawUriResult | undefined { - const pi = parseProtoInfo(s, "withdraw"); - if (!pi) { - return undefined; +export function parseWithdrawUriWithError(s: string) { + const pi = parseProtoInfoWithError(s, "withdraw"); + if (pi.type === "fail") { + return pi; } - const parts = pi.rest.split("/"); + const parts = pi.body.rest.split("/"); if (parts.length < 2) { - return undefined; + return opKnownTalerFailure(TalerErrorCode.TALER_URI_NO_ENOUGH_COMPONENT, { + code: TalerErrorCode.TALER_URI_NO_ENOUGH_COMPONENT + }); } const host = parts[0].toLowerCase(); @@ -153,11 +156,22 @@ export function parseWithdrawUri(s: string): WithdrawUriResult | undefined { const withdrawId = parts[parts.length - 1]; const p = [host, ...pathSegments].join("/"); - return { + const result: WithdrawUriResult = { type: TalerUriAction.Withdraw, - bankIntegrationApiBaseUrl: canonicalizeBaseUrl(`${pi.innerProto}://${p}/`), + bankIntegrationApiBaseUrl: canonicalizeBaseUrl(`${pi.body.innerProto}://${p}/`), withdrawalOperationId: withdrawId, - }; + } + return opFixedSuccess(result); +} + +/** + * + * @deprecated use parseWithdrawUriWithError + */ +export function parseWithdrawUri(s: string): WithdrawUriResult | undefined { + const r = parseWithdrawUriWithError(s); + if (r.type === "fail") return undefined; + return r.body; } /** @@ -215,6 +229,35 @@ function parseProtoInfo( } } +function parseProtoInfoWithError( + s: string, + action: string, +) { + if (!s.toLocaleLowerCase().startsWith("taler://") || + !s.toLocaleLowerCase().startsWith("taler+http://")) { + return opKnownTalerFailure(TalerErrorCode.TALER_URI_PREFIX, { + code: TalerErrorCode.TALER_URI_PREFIX, + }); + } + const pfxPlain = `taler://${action}/`; + const pfxHttp = `taler+http://${action}/`; + if (s.toLowerCase().startsWith(pfxPlain)) { + return opFixedSuccess({ + innerProto: "https", + rest: s.substring(pfxPlain.length), + }); + } else if (s.toLowerCase().startsWith(pfxHttp)) { + return opFixedSuccess({ + innerProto: "http", + rest: s.substring(pfxHttp.length), + }); + } else { + return opKnownTalerFailure(TalerErrorCode.TALER_URI_UNKOWN_ACTION, { + code: TalerErrorCode.TALER_URI_UNKOWN_ACTION, + }); + } +} + type Parser = (s: string) => TalerUri | undefined; const parsers: { [A in TalerUriAction]: Parser } = { [TalerUriAction.Pay]: parsePayUri, diff --git a/packages/taler-wallet-webextension/src/cta/Withdraw/state.ts b/packages/taler-wallet-webextension/src/cta/Withdraw/state.ts index 05aef690e..51859d6a7 100644 --- a/packages/taler-wallet-webextension/src/cta/Withdraw/state.ts +++ b/packages/taler-wallet-webextension/src/cta/Withdraw/state.ts @@ -54,7 +54,7 @@ export function useComponentStateFromParams({ : undefined; const exchangeByTalerUri = uri?.exchangeBaseUrl; let ex: ExchangeFullDetails | undefined; - if (exchangeByTalerUri && uri.exchangePub) { + if (exchangeByTalerUri) { await api.wallet.call(WalletApiOperation.AddExchange, { exchangeBaseUrl: exchangeByTalerUri, masterPub: uri.exchangePub, @@ -141,8 +141,8 @@ export function useComponentStateFromParams({ confirm: { onClick: isValid ? pushAlertOnError(async () => { - onAmountChanged(Amounts.stringify(amount)); - }) + onAmountChanged(Amounts.stringify(amount)); + }) : undefined, }, amount: { @@ -439,12 +439,12 @@ function exchangeSelectionState( //TODO: calculate based on exchange info const ageRestriction = ageRestrictionEnabled ? { - list: ageRestrictionOptions, - value: String(ageRestricted), - onChange: pushAlertOnError(async (v: string) => - setAgeRestricted(parseInt(v, 10)), - ), - } + list: ageRestrictionOptions, + value: String(ageRestricted), + onChange: pushAlertOnError(async (v: string) => + setAgeRestricted(parseInt(v, 10)), + ), + } : undefined; const altCurrencies = amountHook.response.accounts @@ -463,9 +463,9 @@ function exchangeSelectionState( const conversionInfo = !convAccount ? undefined : { - spec: convAccount.currencySpecification!, - amount: Amounts.parseOrThrow(convAccount.transferAmount!), - }; + spec: convAccount.currencySpecification!, + amount: Amounts.parseOrThrow(convAccount.transferAmount!), + }; return { status: "success", -- cgit v1.2.3