aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-util/src/http-client/bank-integration.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-util/src/http-client/bank-integration.ts')
-rw-r--r--packages/taler-util/src/http-client/bank-integration.ts42
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())
}
}