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.ts131
1 files changed, 92 insertions, 39 deletions
diff --git a/packages/taler-util/src/http-client/bank-integration.ts b/packages/taler-util/src/http-client/bank-integration.ts
index 2264b65bf..938249daf 100644
--- a/packages/taler-util/src/http-client/bank-integration.ts
+++ b/packages/taler-util/src/http-client/bank-integration.ts
@@ -1,8 +1,32 @@
-import { HttpRequestLibrary, readSuccessResponseJsonOrThrow } from "../http-common.js";
+/*
+ This file is part of GNU Taler
+ (C) 2022-2024 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+import { HttpRequestLibrary } from "../http-common.js";
import { HttpStatusCode } from "../http-status-codes.js";
import { createPlatformHttpLib } from "../http.js";
import { LibtoolVersion } from "../libtool-version.js";
-import { FailCasesByMethod, ResultByMethod, opEmptySuccess, opKnownHttpFailure, opKnownTalerFailure, opSuccess, opUnknownFailure } from "../operation.js";
+import {
+ FailCasesByMethod,
+ ResultByMethod,
+ opEmptySuccess,
+ opKnownHttpFailure,
+ opKnownTalerFailure,
+ opSuccess,
+ opUnknownFailure,
+} from "../operation.js";
import { TalerErrorCode } from "../taler-error-codes.js";
import { codecForTalerErrorDetail } from "../wallet-types.js";
import {
@@ -11,12 +35,16 @@ import {
WithdrawalOperationStatus,
codecForBankWithdrawalOperationPostResponse,
codecForBankWithdrawalOperationStatus,
- codecForIntegrationBankConfig
+ codecForIntegrationBankConfig,
} from "./types.js";
import { addLongPollingParam } from "./utils.js";
-export type TalerBankIntegrationResultByMethod<prop extends keyof TalerBankIntegrationHttpClient> = ResultByMethod<TalerBankIntegrationHttpClient, prop>
-export type TalerBankIntegrationErrorsByMethod<prop extends keyof TalerBankIntegrationHttpClient> = FailCasesByMethod<TalerBankIntegrationHttpClient, prop>
+export type TalerBankIntegrationResultByMethod<
+ prop extends keyof TalerBankIntegrationHttpClient,
+> = ResultByMethod<TalerBankIntegrationHttpClient, prop>;
+export type TalerBankIntegrationErrorsByMethod<
+ prop extends keyof TalerBankIntegrationHttpClient,
+> = FailCasesByMethod<TalerBankIntegrationHttpClient, prop>;
/**
* The API is used by the wallets.
@@ -34,78 +62,100 @@ export class TalerBankIntegrationHttpClient {
}
isCompatible(version: string): boolean {
- const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version)
- return compare?.compatible ?? false
+ const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version);
+ return compare?.compatible ?? false;
}
/**
* 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"
+ method: "GET",
});
switch (resp.status) {
- case HttpStatusCode.Ok: return opSuccess(resp, codecForIntegrationBankConfig())
- default: return opUnknownFailure(resp, await resp.text())
+ case HttpStatusCode.Ok:
+ return opSuccess(resp, codecForIntegrationBankConfig());
+ default:
+ return opUnknownFailure(resp, await resp.text());
}
}
/**
* https://docs.taler.net/core/api-bank-integration.html#get--withdrawal-operation-$WITHDRAWAL_ID
- *
+ *
*/
- async getWithdrawalOperationById(woid: string, params?: {
- old_state?: WithdrawalOperationStatus
- } & LongPollParams) {
+ async getWithdrawalOperationById(
+ woid: string,
+ params?: {
+ old_state?: WithdrawalOperationStatus;
+ } & LongPollParams,
+ ) {
const url = new URL(`withdrawal-operation/${woid}`, this.baseUrl);
- addLongPollingParam(url, params)
+ addLongPollingParam(url, params);
if (params) {
- url.searchParams.set("old_state", !params.old_state ? "pending" : params.old_state)
+ url.searchParams.set(
+ "old_state",
+ !params.old_state ? "pending" : params.old_state,
+ );
}
const resp = await this.httpLib.fetch(url.href, {
- method: "GET"
+ method: "GET",
});
switch (resp.status) {
- case HttpStatusCode.Ok: return opSuccess(resp, codecForBankWithdrawalOperationStatus())
- case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp)
- default: return opUnknownFailure(resp, await resp.text())
+ case HttpStatusCode.Ok:
+ return opSuccess(resp, codecForBankWithdrawalOperationStatus());
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
}
}
/**
* https://docs.taler.net/core/api-bank-integration.html#post-$BANK_API_BASE_URL-withdrawal-operation-$wopid
- *
+ *
*/
- async completeWithdrawalOperationById(woid: string, body: TalerBankIntegrationApi.BankWithdrawalOperationPostRequest) {
+ async completeWithdrawalOperationById(
+ woid: string,
+ body: TalerBankIntegrationApi.BankWithdrawalOperationPostRequest,
+ ) {
const url = new URL(`withdrawal-operation/${woid}`, this.baseUrl);
const resp = await this.httpLib.fetch(url.href, {
method: "POST",
body,
});
switch (resp.status) {
- case HttpStatusCode.Ok: return opSuccess(resp, codecForBankWithdrawalOperationPostResponse())
- case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp)
+ case HttpStatusCode.Ok:
+ return opSuccess(resp, codecForBankWithdrawalOperationPostResponse());
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
case HttpStatusCode.Conflict: {
- const body = await resp.json()
- const details = codecForTalerErrorDetail().decode(body)
+ const body = await resp.json();
+ const details = codecForTalerErrorDetail().decode(body);
switch (details.code) {
- case TalerErrorCode.BANK_WITHDRAWAL_OPERATION_RESERVE_SELECTION_CONFLICT: return opKnownTalerFailure(details.code, resp);
- case TalerErrorCode.BANK_DUPLICATE_RESERVE_PUB_SUBJECT: return opKnownTalerFailure(details.code, resp);
- case TalerErrorCode.BANK_UNKNOWN_ACCOUNT: return opKnownTalerFailure(details.code, resp);
- case TalerErrorCode.BANK_ACCOUNT_IS_NOT_EXCHANGE: return opKnownTalerFailure(details.code, resp);
- default: return opUnknownFailure(resp, body)
+ case TalerErrorCode.BANK_WITHDRAWAL_OPERATION_RESERVE_SELECTION_CONFLICT:
+ return opKnownTalerFailure(details.code, resp);
+ case TalerErrorCode.BANK_DUPLICATE_RESERVE_PUB_SUBJECT:
+ return opKnownTalerFailure(details.code, resp);
+ case TalerErrorCode.BANK_UNKNOWN_ACCOUNT:
+ return opKnownTalerFailure(details.code, resp);
+ case TalerErrorCode.BANK_ACCOUNT_IS_NOT_EXCHANGE:
+ return opKnownTalerFailure(details.code, resp);
+ default:
+ return opUnknownFailure(resp, body);
}
}
- default: return opUnknownFailure(resp, await resp.text())
+ default:
+ return opUnknownFailure(resp, await resp.text());
}
}
/**
* https://docs.taler.net/core/api-bank-integration.html#post-$BANK_API_BASE_URL-withdrawal-operation-$wopid
- *
+ *
*/
async abortWithdrawalOperationById(woid: string) {
const url = new URL(`withdrawal-operation/${woid}/abort`, this.baseUrl);
@@ -113,11 +163,14 @@ export class TalerBankIntegrationHttpClient {
method: "POST",
});
switch (resp.status) {
- case HttpStatusCode.NoContent: return opEmptySuccess()
- case HttpStatusCode.NotFound: return opKnownHttpFailure(resp.status, resp)
- case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp);
- default: return opUnknownFailure(resp, await resp.text())
+ case HttpStatusCode.NoContent:
+ return opEmptySuccess(resp);
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ case HttpStatusCode.Conflict:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await resp.text());
}
}
}
-