commit 0e733d30458b6e2ffed015f1add906ddda586a79
parent 2ea52bc8370d4c4cc75f5123dd1572fa17f53a3c
Author: Florian Dold <florian@dold.me>
Date: Wed, 7 May 2025 00:37:52 +0200
comments, dce, explicit types
Diffstat:
2 files changed, 108 insertions(+), 766 deletions(-)
diff --git a/packages/taler-util/src/http-client/exchange-client.ts b/packages/taler-util/src/http-client/exchange-client.ts
@@ -14,12 +14,12 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-import { Codec, codecForAny } from "../codec.js";
+import { codecForAny } from "../codec.js";
import {
HttpRequestLibrary,
HttpRequestOptions,
HttpResponse,
- readSuccessResponseJsonOrThrow
+ readSuccessResponseJsonOrThrow,
} from "../http-common.js";
import { HttpStatusCode } from "../http-status-codes.js";
import { createPlatformHttpLib } from "../http.js";
@@ -35,7 +35,7 @@ import {
opKnownAlternativeHttpFailure,
opKnownHttpFailure,
opSuccessFromHttp,
- opUnknownHttpFailure
+ opUnknownHttpFailure,
} from "../operation.js";
import { EddsaPrivP, encodeCrock } from "../taler-crypto.js";
import {
@@ -49,21 +49,28 @@ import {
import {
AccountKycStatus,
AmlDecisionRequest,
- BatchWithdrawResponse,
+ AmlDecisionsResponse,
+ AvailableMeasureSummary,
+ EventCounter,
ExchangeGetContractResponse,
+ ExchangeKeysResponse,
ExchangeKycUploadFormRequest,
- ExchangeLegacyBatchWithdrawRequest,
ExchangeMergeConflictResponse,
ExchangeMergeSuccessResponse,
ExchangePurseDeposits,
ExchangePurseMergeRequest,
ExchangePurseStatus,
ExchangeReservePurseRequest,
+ ExchangeTransferList,
ExchangeVersionResponse,
+ KycAttributes,
+ KycProcessClientInformation,
+ KycProcessStartInformation,
KycRequirementInformationId,
LegitimizationNeededResponse,
PurseConflict,
PurseConflictPartial,
+ WalletKycCheckResponse,
WalletKycRequest,
codecForAccountKycStatus,
codecForAmlDecisionsResponse,
@@ -92,7 +99,6 @@ import {
Amounts,
CancellationToken,
LongpollQueue,
- ReservePub,
signAmlDecision,
signAmlQuery,
signKycAuth,
@@ -100,7 +106,7 @@ import {
} from "../index.js";
import { TalerErrorCode } from "../taler-error-codes.js";
import { AbsoluteTime } from "../time.js";
-import { codecForEmptyObject } from "../types-taler-wallet.js";
+import { EmptyObject, codecForEmptyObject } from "../types-taler-wallet.js";
export type TalerExchangeResultByMethod2<
prop extends keyof TalerExchangeHttpClient2,
@@ -180,19 +186,6 @@ export class TalerExchangeHttpClient2 {
}
}
- // TERMS
-
- /**
- * https://docs.taler.net/core/api-exchange.html#get--seed
- *
- */
- /**
- * https://docs.taler.net/core/api-exchange.html#get--seed
- *
- */
-
- // EXCHANGE INFORMATION
-
/**
* https://docs.taler.net/core/api-exchange.html#get--seed
*
@@ -264,7 +257,7 @@ export class TalerExchangeHttpClient2 {
*
* PARTIALLY IMPLEMENTED!!
*/
- async getKeys() {
+ async getKeys(): Promise<OperationOk<ExchangeKeysResponse>> {
const resp = await this.fetch("keys");
switch (resp.status) {
case HttpStatusCode.Ok:
@@ -274,306 +267,6 @@ export class TalerExchangeHttpClient2 {
}
}
- //
- // MANAGEMENT
- //
-
- /**
- * https://docs.taler.net/core/api-exchange.html#get--management-keys
- *
- */
- async getFutureKeys(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-keys
- *
- */
- async signFutureKeys(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-denominations-$H_DENOM_PUB-revoke
- *
- */
- async revokeFutureDenominationKeys(): Promise<never> {
- throw Error("not yet implemented");
- }
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-signkeys-$EXCHANGE_PUB-revoke
- *
- */
- async revokeFutureSigningKeys(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-auditors
- *
- */
- async enableAuditor(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-auditors-$AUDITOR_PUB-disable
- *
- */
- async disableAuditor(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-wire-fee
- *
- */
- async configWireFee(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-global-fees
- *
- */
- async configGlobalFees(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-wire
- *
- */
- async enableWireMethod(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-wire-disable
- *
- */
- async disableWireMethod(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-drain
- *
- */
- async drainProfits(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-aml-officers
- *
- */
- async updateOfficer(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-partners
- *
- */
- async enablePartner(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- //
- // AUDITOR
- //
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--auditors-$AUDITOR_PUB-$H_DENOM_PUB
- *
- */
- async addAuditor(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- //
- // WITHDRAWAL
- //
-
- /**
- * https://docs.taler.net/core/api-exchange.html#get--reserves-$RESERVE_PUB
- *
- */
- async getReserveInfo(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--csr-withdraw
- *
- */
- async prepareCsrWithdawal(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--reserves-$RESERVE_PUB-batch-withdraw
- *
- */
- async withdraw(rid: ReservePub, body: ExchangeLegacyBatchWithdrawRequest) {
- const resp = await this.fetch(`reserves/${rid}/batch-withdraw`, {
- method: "POST",
- body,
- });
-
- switch (resp.status) {
- case HttpStatusCode.Ok:
- return opSuccessFromHttp(
- resp,
- codecForAny() as Codec<BatchWithdrawResponse>,
- );
- case HttpStatusCode.Forbidden:
- case HttpStatusCode.BadRequest:
- case HttpStatusCode.NotFound:
- case HttpStatusCode.Conflict:
- case HttpStatusCode.Gone:
- return opKnownHttpFailure(resp.status, resp);
- case HttpStatusCode.UnavailableForLegalReasons:
- return opKnownAlternativeHttpFailure(
- resp,
- resp.status,
- codecForLegitimizationNeededResponse(),
- );
- default:
- return opUnknownHttpFailure(resp);
- }
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#withdraw-with-age-restriction
- *
- */
- async withdrawWithAge(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--age-withdraw-$ACH-reveal
- *
- */
- async revealCoinsForAge(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- //
- // RESERVE HISTORY
- //
-
- /**
- * https://docs.taler.net/core/api-exchange.html#get--reserves-$RESERVE_PUB-history
- *
- */
- async getResverveHistory(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- //
- // COIN HISTORY
- //
-
- /**
- * https://docs.taler.net/core/api-exchange.html#get--coins-$COIN_PUB-history
- *
- */
- async getCoinHistory(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- //
- // DEPOSIT
- //
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--batch-deposit
- *
- */
- async deposit(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- //
- // REFRESH
- //
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--csr-melt
- *
- */
- async prepareCsrMelt(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--coins-$COIN_PUB-melt
- *
- */
- async meltCoin(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#get--coins-$COIN_PUB-link
- *
- */
- async linkCoin(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- //
- // RECOUP
- //
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--coins-$COIN_PUB-recoup
- *
- */
- async recoupReserveCoin(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--coins-$COIN_PUB-recoup-refresh
- *
- */
- async recoupRefreshCoin(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- // WIRE TRANSFER
-
- /**
- * https://docs.taler.net/core/api-exchange.html#get--transfers-$WTID
- *
- */
- async getWireTransferInfo(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#get--deposits-$H_WIRE-$MERCHANT_PUB-$H_CONTRACT_TERMS-$COIN_PUB
- *
- */
- async getWireTransferIdForDeposit(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- // REFUND
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--coins-$COIN_PUB-refund
- *
- */
- async refund(): Promise<never> {
- throw Error("not yet implemented");
- }
-
// WALLET TO WALLET
/**
@@ -867,7 +560,18 @@ export class TalerExchangeHttpClient2 {
* https://docs.taler.net/core/api-exchange.html#post--kyc-wallet
*
*/
- async notifyKycBalanceLimit(account: ReserveAccount, balance: AmountString) {
+ async notifyKycBalanceLimit(
+ account: ReserveAccount,
+ balance: AmountString,
+ ): Promise<
+ | OperationOk<void>
+ | OperationFail<HttpStatusCode.Forbidden>
+ | OperationAlternative<
+ HttpStatusCode.UnavailableForLegalReasons,
+ LegitimizationNeededResponse
+ >
+ | OperationOk<WalletKycCheckResponse>
+ > {
const body: WalletKycRequest = {
balance,
reserve_pub: account.id as any,
@@ -964,7 +668,12 @@ export class TalerExchangeHttpClient2 {
token: AccessToken,
known: KycRequirementInformationId[],
longpoll: boolean = false,
- ) {
+ ): Promise<
+ | OperationOk<KycProcessClientInformation>
+ | OperationAlternative<HttpStatusCode.Accepted, EmptyObject>
+ | OperationAlternative<HttpStatusCode.NoContent, EmptyObject>
+ | OperationFail<HttpStatusCode.NotModified>
+ > {
const resp = await this.fetch(
`kyc-info/${token}`,
{
@@ -999,7 +708,12 @@ export class TalerExchangeHttpClient2 {
async uploadKycForm<T extends ExchangeKycUploadFormRequest>(
requirement: KycRequirementInformationId,
body: T,
- ) {
+ ): Promise<
+ | OperationOk<void>
+ | OperationFail<HttpStatusCode.Conflict>
+ | OperationFail<HttpStatusCode.NotFound>
+ | OperationFail<HttpStatusCode.PayloadTooLarge>
+ > {
const resp = await this.fetch(`kyc-upload/${requirement}`, {
method: "POST",
body,
@@ -1028,7 +742,14 @@ export class TalerExchangeHttpClient2 {
async startExternalKycProcess(
requirement: KycRequirementInformationId,
body: object = {},
- ) {
+ ): Promise<
+ | OperationFail<
+ | HttpStatusCode.NotFound
+ | HttpStatusCode.Conflict
+ | HttpStatusCode.PayloadTooLarge
+ >
+ | OperationOk<KycProcessStartInformation>
+ > {
const resp = await this.fetch(`kyc-start/${requirement}`, {
method: "POST",
body,
@@ -1080,7 +801,16 @@ export class TalerExchangeHttpClient2 {
* https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-measures
*
*/
- async getAmlMesasures(auth: OfficerAccount) {
+ async getAmlMeasures(
+ auth: OfficerAccount,
+ ): Promise<
+ | OperationOk<AvailableMeasureSummary>
+ | OperationFail<
+ | HttpStatusCode.Forbidden
+ | HttpStatusCode.NotFound
+ | HttpStatusCode.Conflict
+ >
+ > {
const resp = await this.fetch(`aml/${auth.id}/measures`, {
method: "GET",
headers: {
@@ -1113,7 +843,14 @@ export class TalerExchangeHttpClient2 {
since?: AbsoluteTime;
until?: AbsoluteTime;
} = {},
- ) {
+ ): Promise<
+ | OperationFail<
+ | HttpStatusCode.Forbidden
+ | HttpStatusCode.NotFound
+ | HttpStatusCode.Conflict
+ >
+ | OperationOk<EventCounter>
+ > {
const url = new URL(`aml/${auth.id}/kyc-statistics/${name}`, this.baseUrl);
if (filter.since !== undefined && filter.since.t_ms !== "never") {
@@ -1154,7 +891,14 @@ export class TalerExchangeHttpClient2 {
active?: boolean;
investigation?: boolean;
} = {},
- ) {
+ ): Promise<
+ | OperationFail<
+ | HttpStatusCode.Forbidden
+ | HttpStatusCode.NotFound
+ | HttpStatusCode.Conflict
+ >
+ | OperationOk<AmlDecisionsResponse>
+ > {
const url = new URL(`aml/${auth.id}/decisions`, this.baseUrl);
addPaginationParams(url, params);
@@ -1201,7 +945,14 @@ export class TalerExchangeHttpClient2 {
auth: OfficerAccount,
account: string,
params: PaginationParams = {},
- ) {
+ ): Promise<
+ | OperationOk<KycAttributes>
+ | OperationFail<
+ | HttpStatusCode.Forbidden
+ | HttpStatusCode.NotFound
+ | HttpStatusCode.Conflict
+ >
+ > {
const url = new URL(`aml/${auth.id}/attributes/${account}`, this.baseUrl);
addPaginationParams(url, params);
@@ -1234,7 +985,14 @@ export class TalerExchangeHttpClient2 {
async makeAmlDesicion(
auth: OfficerAccount,
decision: Omit<AmlDecisionRequest, "officer_sig">,
- ) {
+ ): Promise<
+ | OperationOk<void>
+ | OperationFail<
+ | HttpStatusCode.Forbidden
+ | HttpStatusCode.NotFound
+ | HttpStatusCode.Conflict
+ >
+ > {
const body: AmlDecisionRequest = {
officer_sig: encodeCrock(
signAmlDecision(auth.signingKey, decision),
@@ -1275,7 +1033,14 @@ export class TalerExchangeHttpClient2 {
async getTransfersCredit(
auth: OfficerAccount,
params: PaginationParams & { threshold?: AmountJson } = {},
- ) {
+ ): Promise<
+ | OperationOk<ExchangeTransferList>
+ | OperationFail<
+ | HttpStatusCode.Forbidden
+ | HttpStatusCode.NotFound
+ | HttpStatusCode.Conflict
+ >
+ > {
const url = new URL(`aml/${auth.id}/transfers-credit`, this.baseUrl);
addPaginationParams(url, params);
@@ -1313,7 +1078,14 @@ export class TalerExchangeHttpClient2 {
async getTransfersDebit(
auth: OfficerAccount,
params: PaginationParams & { threshold?: AmountJson } = {},
- ) {
+ ): Promise<
+ | OperationOk<ExchangeTransferList>
+ | OperationFail<
+ | HttpStatusCode.Forbidden
+ | HttpStatusCode.NotFound
+ | HttpStatusCode.Conflict
+ >
+ > {
const url = new URL(`aml/${auth.id}/transfers-debit`, this.baseUrl);
addPaginationParams(url, params);
@@ -1343,46 +1115,4 @@ export class TalerExchangeHttpClient2 {
return opUnknownHttpFailure(resp);
}
}
-
- // RESERVE control
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--reserves-$RESERVE_PUB-open
- *
- */
- async reserveOpen(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#get--reserves-attest-$RESERVE_PUB
- *
- */
- async getReserveAttributes(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--reserves-attest-$RESERVE_PUB
- *
- */
- async signReserveAttributes(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--reserves-$RESERVE_PUB-close
- *
- */
- async closeReserve(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#delete--reserves-$RESERVE_PUB
- *
- */
- async deleteReserve(): Promise<never> {
- throw Error("not yet implemented");
- }
}
diff --git a/packages/taler-util/src/http-client/exchange.ts b/packages/taler-util/src/http-client/exchange.ts
@@ -14,7 +14,7 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-import { Codec, codecForAny } from "../codec.js";
+import { codecForAny } from "../codec.js";
import {
HttpRequestLibrary,
readSuccessResponseJsonOrThrow,
@@ -49,9 +49,7 @@ import {
import {
AmlDecisionRequest,
AmlDecisionsResponse,
- BatchWithdrawResponse,
ExchangeKycUploadFormRequest,
- ExchangeLegacyBatchWithdrawRequest,
ExchangePurseDeposits,
ExchangePurseMergeRequest,
ExchangeReservePurseRequest,
@@ -119,14 +117,15 @@ export type KycProcessClientInformationWithEtag =
/**
* Client library for the GNU Taler exchange service.
+ *
+ * FIXME: This client library is currently used by the SPA.
+ * However, we should merge it with the other exchange client implementation.
*/
export class TalerExchangeHttpClient {
public static readonly PROTOCOL_VERSION = "27:0:2";
private httpLib: HttpRequestLibrary;
private cacheEvictor: CacheEvictor<TalerExchangeCacheEviction>;
private preventCompression: boolean;
- private cancelationToken: CancellationToken;
- // private longPollQueue: LongpollQueue;
constructor(
readonly baseUrl: string,
@@ -141,9 +140,6 @@ export class TalerExchangeHttpClient {
this.httpLib = params.httpClient ?? createPlatformHttpLib();
this.cacheEvictor = params.cacheEvictor ?? nullEvictor;
this.preventCompression = !!params.preventCompression;
- this.cancelationToken =
- params.cancelationToken ?? CancellationToken.CONTINUE;
- // this.longPollQueue = params.longPollQueue ?? new LongpollQueue();
}
isCompatible(version: string): boolean {
@@ -154,46 +150,6 @@ export class TalerExchangeHttpClient {
return compare?.compatible ?? false;
}
- // private async fetch(
- // url_or_path: URL | string,
- // opts: HttpRequestOptions = {},
- // longpoll: boolean = false,
- // ): Promise<HttpResponse> {
- // const url =
- // typeof url_or_path == "string"
- // ? new URL(url_or_path, this.baseUrl)
- // : url_or_path;
- // if (longpoll || url.searchParams.has("timeout_ms")) {
- // return this.longPollQueue.run(
- // url,
- // this.cancelationToken,
- // async (timeoutMs) => {
- // url.searchParams.set("timeout_ms", String(timeoutMs));
- // return this.httpLib.fetch(url.href, {
- // cancellationToken: this.cancelationToken,
- // ...opts,
- // });
- // },
- // );
- // } else {
- // return this.httpLib.fetch(url.href, {
- // cancellationToken: this.cancelationToken,
- // ...opts,
- // });
- // }
- // }
-
- // TERMS
-
- /**
- * https://docs.taler.net/core/api-exchange.html#get--seed
- *
- */
- /**
- * https://docs.taler.net/core/api-exchange.html#get--seed
- *
- */
-
// EXCHANGE INFORMATION
/**
@@ -283,308 +239,6 @@ export class TalerExchangeHttpClient {
}
}
- //
- // MANAGEMENT
- //
-
- /**
- * https://docs.taler.net/core/api-exchange.html#get--management-keys
- *
- */
- async getFutureKeys(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-keys
- *
- */
- async signFutureKeys(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-denominations-$H_DENOM_PUB-revoke
- *
- */
- async revokeFutureDenominationKeys(): Promise<never> {
- throw Error("not yet implemented");
- }
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-signkeys-$EXCHANGE_PUB-revoke
- *
- */
- async revokeFutureSigningKeys(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-auditors
- *
- */
- async enableAuditor(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-auditors-$AUDITOR_PUB-disable
- *
- */
- async disableAuditor(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-wire-fee
- *
- */
- async configWireFee(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-global-fees
- *
- */
- async configGlobalFees(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-wire
- *
- */
- async enableWireMethod(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-wire-disable
- *
- */
- async disableWireMethod(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-drain
- *
- */
- async drainProfits(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-aml-officers
- *
- */
- async updateOfficer(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--management-partners
- *
- */
- async enablePartner(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- //
- // AUDITOR
- //
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--auditors-$AUDITOR_PUB-$H_DENOM_PUB
- *
- */
- async addAuditor(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- //
- // WITHDRAWAL
- //
-
- /**
- * https://docs.taler.net/core/api-exchange.html#get--reserves-$RESERVE_PUB
- *
- */
- async getReserveInfo(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--csr-withdraw
- *
- */
- async prepareCsrWithdawal(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--reserves-$RESERVE_PUB-batch-withdraw
- *
- */
- async withdraw(rid: ReservePub, body: ExchangeLegacyBatchWithdrawRequest) {
- const url = new URL(`reserves/${rid}/batch-withdraw`, this.baseUrl);
- const resp = await this.httpLib.fetch(url.href, {
- method: "POST",
- body,
- });
-
- switch (resp.status) {
- case HttpStatusCode.Ok:
- return opSuccessFromHttp(
- resp,
- //FIXME: missing codec for BWR
- codecForAny() as Codec<BatchWithdrawResponse>,
- );
- case HttpStatusCode.Forbidden:
- case HttpStatusCode.BadRequest:
- case HttpStatusCode.NotFound:
- case HttpStatusCode.Conflict:
- case HttpStatusCode.Gone:
- return opKnownHttpFailure(resp.status, resp);
- case HttpStatusCode.UnavailableForLegalReasons:
- return opKnownAlternativeHttpFailure(
- resp,
- resp.status,
- codecForLegitimizationNeededResponse(),
- );
- default:
- return opUnknownHttpFailure(resp);
- }
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#withdraw-with-age-restriction
- *
- */
- async withdrawWithAge(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--age-withdraw-$ACH-reveal
- *
- */
- async revealCoinsForAge(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- //
- // RESERVE HISTORY
- //
-
- /**
- * https://docs.taler.net/core/api-exchange.html#get--reserves-$RESERVE_PUB-history
- *
- */
- async getResverveHistory(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- //
- // COIN HISTORY
- //
-
- /**
- * https://docs.taler.net/core/api-exchange.html#get--coins-$COIN_PUB-history
- *
- */
- async getCoinHistory(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- //
- // DEPOSIT
- //
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--batch-deposit
- *
- */
- async deposit(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- //
- // REFRESH
- //
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--csr-melt
- *
- */
- async prepareCsrMelt(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--coins-$COIN_PUB-melt
- *
- */
- async meltCoin(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#get--coins-$COIN_PUB-link
- *
- */
- async linkCoin(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- //
- // RECOUP
- //
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--coins-$COIN_PUB-recoup
- *
- */
- async recoupReserveCoin(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--coins-$COIN_PUB-recoup-refresh
- *
- */
- async recoupRefreshCoin(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- // WIRE TRANSFER
-
- /**
- * https://docs.taler.net/core/api-exchange.html#get--transfers-$WTID
- *
- */
- async getWireTransferInfo(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#get--deposits-$H_WIRE-$MERCHANT_PUB-$H_CONTRACT_TERMS-$COIN_PUB
- *
- */
- async getWireTransferIdForDeposit(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- // REFUND
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--coins-$COIN_PUB-refund
- *
- */
- async refund(): Promise<never> {
- throw Error("not yet implemented");
- }
-
// WALLET TO WALLET
/**
@@ -1340,46 +994,4 @@ export class TalerExchangeHttpClient {
return opUnknownHttpFailure(resp);
}
}
-
- // RESERVE control
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--reserves-$RESERVE_PUB-open
- *
- */
- async reserveOpen(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#get--reserves-attest-$RESERVE_PUB
- *
- */
- async getReserveAttributes(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--reserves-attest-$RESERVE_PUB
- *
- */
- async signReserveAttributes(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#post--reserves-$RESERVE_PUB-close
- *
- */
- async closeReserve(): Promise<never> {
- throw Error("not yet implemented");
- }
-
- /**
- * https://docs.taler.net/core/api-exchange.html#delete--reserves-$RESERVE_PUB
- *
- */
- async deleteReserve(): Promise<never> {
- throw Error("not yet implemented");
- }
}