diff options
Diffstat (limited to 'packages/taler-util/src/http-client/bank-integration.ts')
-rw-r--r-- | packages/taler-util/src/http-client/bank-integration.ts | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/packages/taler-util/src/http-client/bank-integration.ts b/packages/taler-util/src/http-client/bank-integration.ts index e59f6086a..7cddcb9a9 100644 --- a/packages/taler-util/src/http-client/bank-integration.ts +++ b/packages/taler-util/src/http-client/bank-integration.ts @@ -1,11 +1,14 @@ import { HttpRequestLibrary, readSuccessResponseJsonOrThrow } from "../http-common.js"; import { HttpStatusCode } from "../http-status-codes.js"; import { createPlatformHttpLib } from "../http.js"; -import { opSuccess, opUnknownFailure } from "../operation.js"; +import { opKnownFailure, opSuccess, opUnknownFailure } from "../operation.js"; +import { TalerErrorCode } from "../taler-error-codes.js"; +import { codecForTalerErrorDetail } from "../wallet-types.js"; import { TalerBankIntegrationApi, codecForBankWithdrawalOperationPostResponse, - codecForBankWithdrawalOperationStatus + codecForBankWithdrawalOperationStatus, + codecForIntegrationBankConfig } from "./types.js"; export class TalerBankIntegrationHttpClient { @@ -19,10 +22,25 @@ export class TalerBankIntegrationHttpClient { } /** + * https://docs.taler.net/core/api-bank-integration.html#get--config + * + */ + async getConfig() { + const url = new URL(`config`, this.baseUrl); + const resp = await this.httpLib.fetch(url.href, { + method: "GET" + }); + switch (resp.status) { + case HttpStatusCode.Ok: return opSuccess(resp, codecForIntegrationBankConfig()) + default: return opUnknownFailure(resp, await resp.text()) + } + } + + /** * https://docs.taler.net/core/api-bank-integration.html#get-$BANK_API_BASE_URL-withdrawal-operation-$wopid * */ - async getWithdrawalOperationById(woid: string, timeoutMs?: number): Promise<TalerBankIntegrationApi.BankWithdrawalOperationStatus> { + async getWithdrawalOperationById(woid: string, timeoutMs?: number) { const url = new URL(`withdrawal-operation/${woid}`, this.baseUrl); if (timeoutMs) { url.searchParams.set("long_poll_ms", String(timeoutMs)) @@ -30,7 +48,11 @@ export class TalerBankIntegrationHttpClient { const resp = await this.httpLib.fetch(url.href, { method: "GET" }); - return readSuccessResponseJsonOrThrow(resp, codecForBankWithdrawalOperationStatus()); + switch (resp.status) { + case HttpStatusCode.Ok: return opSuccess(resp, codecForBankWithdrawalOperationStatus()) + case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp) + default: return opUnknownFailure(resp, await resp.text()) + } } /** @@ -45,6 +67,18 @@ export class TalerBankIntegrationHttpClient { }); switch (resp.status) { case HttpStatusCode.Ok: return opSuccess(resp, codecForBankWithdrawalOperationPostResponse()) + case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp) + case HttpStatusCode.Conflict: { + const body = await resp.json() + const details = codecForTalerErrorDetail().decode(body) + switch (details.code) { + case TalerErrorCode.BANK_WITHDRAWAL_OPERATION_RESERVE_SELECTION_CONFLICT: return opKnownFailure("already-selected", resp); + case TalerErrorCode.BANK_DUPLICATE_RESERVE_PUB_SUBJECT: return opKnownFailure("duplicated-reserve-id", resp); + // case TalerErrorCode.BANK_ACCOUNT_NOT_FOUND: return opKnownFailure("account-not-found", resp); + case TalerErrorCode.BANK_ACCOUNT_IS_NOT_EXCHANGE: return opKnownFailure("account-not-exchange", resp); + default: return opUnknownFailure(resp, body) + } + } default: return opUnknownFailure(resp, await resp.text()) } } |