diff options
author | Sebastian <sebasjm@gmail.com> | 2024-08-26 09:33:48 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2024-08-26 09:34:03 -0300 |
commit | 1f3aac3b57af7f99de6d78fd43acea0b4cfdfcb1 (patch) | |
tree | a54e59ac94a04e3eb78761fbddb76b72844ba7a1 /packages/taler-util/src/http-client/exchange.ts | |
parent | c0f4b0d0f206a82d4283735bb661a229a9bfffd3 (diff) | |
download | wallet-core-1f3aac3b57af7f99de6d78fd43acea0b4cfdfcb1.tar.xz |
exchange api
Diffstat (limited to 'packages/taler-util/src/http-client/exchange.ts')
-rw-r--r-- | packages/taler-util/src/http-client/exchange.ts | 693 |
1 files changed, 531 insertions, 162 deletions
diff --git a/packages/taler-util/src/http-client/exchange.ts b/packages/taler-util/src/http-client/exchange.ts index 9b7635cb4..c9d2975d1 100644 --- a/packages/taler-util/src/http-client/exchange.ts +++ b/packages/taler-util/src/http-client/exchange.ts @@ -17,8 +17,9 @@ import { opKnownAlternativeFailure, opKnownHttpFailure, opSuccessFromHttp, - opUnknownFailure + opUnknownFailure, } from "../operation.js"; +import { Codec, codecForAny } from "../codec.js"; import { TalerSignaturePurpose, buildSigPS, @@ -26,7 +27,7 @@ import { eddsaSign, encodeCrock, stringToBytes, - timestampRoundedToBuffer + timestampRoundedToBuffer, } from "../taler-crypto.js"; import { AccessToken, @@ -35,10 +36,12 @@ import { PaginationParams, ReserveAccount, SigningKey, - codecForTalerCommonConfigResponse + codecForTalerCommonConfigResponse, } from "../types-taler-common.js"; import { AmlDecisionRequest, + BatchWithdrawResponse, + ExchangeBatchWithdrawRequest, ExchangeVersionResponse, KycRequirementInformationId, WalletKycRequest, @@ -52,9 +55,13 @@ import { codecForExchangeKeys, codecForKycProcessClientInformation, codecForKycProcessStartInformation, - codecForLegitimizationNeededResponse + codecForLegitimizationNeededResponse, } from "../types-taler-exchange.js"; -import { CacheEvictor, addMerchantPaginationParams, nullEvictor } from "./utils.js"; +import { + CacheEvictor, + addMerchantPaginationParams, + nullEvictor, +} from "./utils.js"; import { TalerError } from "../errors.js"; import { TalerErrorCode } from "../taler-error-codes.js"; @@ -71,6 +78,8 @@ export enum TalerExchangeCacheEviction { CREATE_DESCISION, } +declare const __pubId: unique symbol; +export type ReservePub = string & { [__pubId]: true }; /** */ export class TalerExchangeHttpClient { @@ -91,6 +100,20 @@ export class TalerExchangeHttpClient { const compare = LibtoolVersion.compare(this.PROTOCOL_VERSION, version); return compare?.compatible ?? false; } + + // 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 * @@ -163,6 +186,7 @@ export class TalerExchangeHttpClient { return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } } + /** * https://docs.taler.net/core/api-merchant.html#get--config * @@ -181,10 +205,390 @@ export class TalerExchangeHttpClient { } } - // TERMS + // + // 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: ExchangeBatchWithdrawRequest) { + 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, + codecForAny() as Codec<BatchWithdrawResponse>, + ); + case HttpStatusCode.Forbidden: + return opKnownHttpFailure(resp.status, resp); + case HttpStatusCode.BadRequest: + return opKnownHttpFailure(resp.status, resp); + case HttpStatusCode.NotFound: + return opKnownHttpFailure(resp.status, resp); + case HttpStatusCode.Conflict: + return opKnownHttpFailure(resp.status, resp); + case HttpStatusCode.Gone: + return opKnownHttpFailure(resp.status, resp); + case HttpStatusCode.UnavailableForLegalReasons: + return opKnownAlternativeFailure( + resp, + resp.status, + codecForLegitimizationNeededResponse(), + ); + default: + return opUnknownFailure(resp, await readTalerErrorResponse(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 // - // KYC operations + + /** + * 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#post--refreshes-$RCH-reveal + * + */ + async releaveCoin(): 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 + + /** + * https://docs.taler.net/core/api-exchange.html#get--purses-$PURSE_PUB-merge + * + */ + async getPurseInfoAtMerge(): Promise<never> { + throw Error("not yet implemented"); + } + + /** + * https://docs.taler.net/core/api-exchange.html#get--purses-$PURSE_PUB-deposit + * + */ + async getPurseInfoAtDeposit(): Promise<never> { + throw Error("not yet implemented"); + } + + /** + * https://docs.taler.net/core/api-exchange.html#post--purses-$PURSE_PUB-create + * + */ + async createPurseFromDeposit(): Promise<never> { + throw Error("not yet implemented"); + } + + /** + * https://docs.taler.net/core/api-exchange.html#delete--purses-$PURSE_PUB + * + */ + async deletePurse(): Promise<never> { + throw Error("not yet implemented"); + } + + /** + * https://docs.taler.net/core/api-exchange.html#post--purses-$PURSE_PUB-merge + * + */ + async mergePurse(): Promise<never> { + throw Error("not yet implemented"); + } + + /** + * https://docs.taler.net/core/api-exchange.html#post--reserves-$RESERVE_PUB-purse + * + */ + async createPurseFromReserve(): Promise<never> { + throw Error("not yet implemented"); + } + + /** + * https://docs.taler.net/core/api-exchange.html#post--purses-$PURSE_PUB-deposit + * + */ + async depositIntoPurse(): Promise<never> { + throw Error("not yet implemented"); + } + + // WADS + + /** + * https://docs.taler.net/core/api-exchange.html#get--wads-$WAD_ID + * + */ + async getWadInfo(): Promise<never> { + throw Error("not yet implemented"); + } + + // + // KYC // /** @@ -198,7 +602,7 @@ export class TalerExchangeHttpClient { balance, reserve_pub: account.id, reserve_sig: encodeCrock(account.signingKey), - } + }; const resp = await this.httpLib.fetch(url.href, { method: "POST", @@ -213,7 +617,11 @@ export class TalerExchangeHttpClient { case HttpStatusCode.Forbidden: return opKnownHttpFailure(resp.status, resp); case HttpStatusCode.UnavailableForLegalReasons: - return opKnownAlternativeFailure(resp, resp.status, codecForLegitimizationNeededResponse()); + return opKnownAlternativeFailure( + resp, + resp.status, + codecForLegitimizationNeededResponse(), + ); default: return opUnknownFailure(resp, await readTalerErrorResponse(resp)); } @@ -223,9 +631,13 @@ export class TalerExchangeHttpClient { * https://docs.taler.net/core/api-exchange.html#post--kyc-wallet * */ - async checkKycStatus(account: ReserveAccount, requirementId: number, params: { - timeout?: number, - } = {}) { + async checkKycStatus( + account: ReserveAccount, + requirementId: number, + params: { + timeout?: number; + } = {}, + ) { const url = new URL(`kyc-check/${String(requirementId)}`, this.baseUrl); if (params.timeout !== undefined) { @@ -243,7 +655,11 @@ export class TalerExchangeHttpClient { case HttpStatusCode.Ok: return opSuccessFromHttp(resp, codecForAccountKycStatus()); case HttpStatusCode.Accepted: - return opKnownAlternativeFailure(resp, resp.status, codecForAccountKycStatus()); + return opKnownAlternativeFailure( + resp, + resp.status, + codecForAccountKycStatus(), + ); case HttpStatusCode.NoContent: return opEmptySuccess(resp); case HttpStatusCode.Forbidden: @@ -258,12 +674,16 @@ export class TalerExchangeHttpClient { } /** - * https://docs.taler.net/core/api-exchange.html#get--kyc-info-$ACCESS_TOKEN - * - */ - async checkKycInfo(token: AccessToken, known: KycRequirementInformationId[], params: { - timeout?: number, - } = {}) { + * https://docs.taler.net/core/api-exchange.html#get--kyc-info-$ACCESS_TOKEN + * + */ + async checkKycInfo( + token: AccessToken, + known: KycRequirementInformationId[], + params: { + timeout?: number; + } = {}, + ) { const url = new URL(`kyc-info/${token}`, this.baseUrl); if (params.timeout !== undefined) { @@ -273,15 +693,19 @@ export class TalerExchangeHttpClient { const resp = await this.httpLib.fetch(url.href, { method: "GET", headers: { - "If-None-Match": known.length ? known.join(",") : undefined - } + "If-None-Match": known.length ? known.join(",") : undefined, + }, }); switch (resp.status) { case HttpStatusCode.Ok: return opSuccessFromHttp(resp, codecForKycProcessClientInformation()); case HttpStatusCode.NoContent: - return opKnownAlternativeFailure(resp, HttpStatusCode.NoContent, codecForEmptyObject()); + return opKnownAlternativeFailure( + resp, + HttpStatusCode.NoContent, + codecForEmptyObject(), + ); case HttpStatusCode.NotModified: return opKnownHttpFailure(resp.status, resp); default: @@ -289,7 +713,6 @@ export class TalerExchangeHttpClient { } } - /** * https://docs.taler.net/core/api-exchange.html#post--kyc-upload-$ID * @@ -320,13 +743,15 @@ export class TalerExchangeHttpClient { * https://docs.taler.net/core/api-exchange.html#post--kyc-start-$ID * */ - async startKycProcess(requirement: KycRequirementInformationId, body: object = {}) { + async startExternalKycProcess( + requirement: KycRequirementInformationId, + body: object = {}, + ) { const url = new URL(`kyc-start/${requirement}`, this.baseUrl); - const resp = await this.httpLib.fetch(url.href, { method: "POST", - body + body, }); switch (resp.status) { @@ -343,119 +768,17 @@ export class TalerExchangeHttpClient { } } + /** + * https://docs.taler.net/core/api-exchange.html#get--kyc-proof-$PROVIDER_NAME?state=$H_PAYTO + * + */ + async completeExternalKycProcess(provider: string, state: string) {} + // // AML operations // /** - * https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-decisions-$STATE - * - */ - // async getDecisionsByState( - // auth: OfficerAccount, - // state: TalerExchangeApi.AmlState, - // pagination?: PaginationParams, - // ) { - // const url = new URL( - // `aml/${auth.id}/decisions/${TalerExchangeApi.AmlState[state]}`, - // this.baseUrl, - // ); - // addPaginationParams(url, pagination); - - // const resp = await this.httpLib.fetch(url.href, { - // method: "GET", - // headers: { - // "Taler-AML-Officer-Signature": buildQuerySignature(auth.signingKey), - // }, - // }); - - // switch (resp.status) { - // case HttpStatusCode.Ok: - // return opSuccessFromHttp(resp, codecForAmlRecords()); - // case HttpStatusCode.NoContent: - // return opFixedSuccess({ records: [] }); - // //this should be unauthorized - // case HttpStatusCode.Forbidden: - // return opKnownHttpFailure(resp.status, resp); - // case HttpStatusCode.Unauthorized: - // return opKnownHttpFailure(resp.status, resp); - // case HttpStatusCode.NotFound: - // return opKnownHttpFailure(resp.status, resp); - // case HttpStatusCode.Conflict: - // return opKnownHttpFailure(resp.status, resp); - // default: - // return opUnknownFailure(resp, await readTalerErrorResponse(resp)); - // } - // } - - // /** - // * https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-decision-$H_PAYTO - // * - // */ - // async getDecisionDetails(auth: OfficerAccount, account: string) { - // const url = new URL(`aml/${auth.id}/decision/${account}`, this.baseUrl); - - // const resp = await this.httpLib.fetch(url.href, { - // method: "GET", - // headers: { - // "Taler-AML-Officer-Signature": buildQuerySignature(auth.signingKey), - // }, - // }); - - // switch (resp.status) { - // case HttpStatusCode.Ok: - // return opSuccessFromHttp(resp, codecForAmlDecisionDetails()); - // case HttpStatusCode.NoContent: - // return opFixedSuccess({ aml_history: [], kyc_attributes: [] }); - // //this should be unauthorized - // case HttpStatusCode.Forbidden: - // return opKnownHttpFailure(resp.status, resp); - // case HttpStatusCode.Unauthorized: - // return opKnownHttpFailure(resp.status, resp); - // case HttpStatusCode.NotFound: - // return opKnownHttpFailure(resp.status, resp); - // case HttpStatusCode.Conflict: - // return opKnownHttpFailure(resp.status, resp); - // default: - // return opUnknownFailure(resp, await readTalerErrorResponse(resp)); - // } - // } - - // /** - // * https://docs.taler.net/core/api-exchange.html#post--aml-$OFFICER_PUB-decision - // * - // */ - // async addDecisionDetails( - // auth: OfficerAccount, - // decision: Omit<TalerExchangeApi.AmlDecision, "officer_sig">, - // ) { - // const url = new URL(`aml/${auth.id}/decision`, this.baseUrl); - - // const body = buildDecisionSignature(auth.signingKey, decision); - // const resp = await this.httpLib.fetch(url.href, { - // method: "POST", - // body, - // }); - - // switch (resp.status) { - // case HttpStatusCode.NoContent: - // return opEmptySuccess(resp); - // //FIXME: this should be unauthorized - // case HttpStatusCode.Forbidden: - // return opKnownHttpFailure(resp.status, resp); - // case HttpStatusCode.Unauthorized: - // return opKnownHttpFailure(resp.status, resp); - // //FIXME: this two need to be split by error code - // case HttpStatusCode.NotFound: - // return opKnownHttpFailure(resp.status, resp); - // case HttpStatusCode.Conflict: - // return opKnownHttpFailure(resp.status, resp); - // default: - // return opUnknownFailure(resp, await readTalerErrorResponse(resp)); - // } - // } - - /** * https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-measures * */ @@ -481,26 +804,23 @@ export class TalerExchangeHttpClient { * https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-measures * */ - async getAmlKycStatistics(auth: OfficerAccount, name: string, filter: { - since?: Date - until?: Date - } = {}) { + async getAmlKycStatistics( + auth: OfficerAccount, + name: string, + filter: { + since?: Date; + until?: Date; + } = {}, + ) { const url = new URL(`aml/${auth.id}/kyc-statistics/${name}`, this.baseUrl); if (filter.since !== undefined) { - url.searchParams.set( - "start_date", - String(filter.since.getTime()) - ); + url.searchParams.set("start_date", String(filter.since.getTime())); } if (filter.until !== undefined) { - url.searchParams.set( - "end_date", - String(filter.until.getTime()) - ); + url.searchParams.set("end_date", String(filter.until.getTime())); } - const resp = await this.httpLib.fetch(url.href, { method: "GET", headers: { @@ -519,11 +839,14 @@ export class TalerExchangeHttpClient { * https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-decisions * */ - async getAmlDecisions(auth: OfficerAccount, params: PaginationParams & { - account?: string, - active?: boolean, - investigation?: boolean, - } = {}) { + async getAmlDecisions( + auth: OfficerAccount, + params: PaginationParams & { + account?: string; + active?: boolean; + investigation?: boolean; + } = {}, + ) { const url = new URL(`aml/${auth.id}/decisions`, this.baseUrl); addMerchantPaginationParams(url, params); @@ -534,7 +857,10 @@ export class TalerExchangeHttpClient { url.searchParams.set("active", params.active ? "YES" : "NO"); } if (params.investigation !== undefined) { - url.searchParams.set("investigation", params.investigation ? "YES" : "NO"); + url.searchParams.set( + "investigation", + params.investigation ? "YES" : "NO", + ); } const resp = await this.httpLib.fetch(url.href, { @@ -564,7 +890,11 @@ export class TalerExchangeHttpClient { * https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-attributes-$H_PAYTO * */ - async getAmlAttributesForAccount(auth: OfficerAccount, account: string, params: PaginationParams = {}) { + async getAmlAttributesForAccount( + auth: OfficerAccount, + account: string, + params: PaginationParams = {}, + ) { const url = new URL(`aml/${auth.id}/attributes/${account}`, this.baseUrl); addMerchantPaginationParams(url, params); @@ -591,12 +921,14 @@ export class TalerExchangeHttpClient { } } - /** * https://docs.taler.net/core/api-exchange.html#get--aml-$OFFICER_PUB-attributes-$H_PAYTO * */ - async makeAmlDesicion(auth: OfficerAccount, decision: Omit<AmlDecisionRequest, "officer_sig">) { + async makeAmlDesicion( + auth: OfficerAccount, + decision: Omit<AmlDecisionRequest, "officer_sig">, + ) { const url = new URL(`aml/${auth.id}/decision`, this.baseUrl); const body = buildAMLDecisionSignature(auth.signingKey, decision); @@ -622,20 +954,57 @@ export class TalerExchangeHttpClient { } } + // 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"); + } } function buildKYCQuerySignature(key: SigningKey): string { - const sigBlob = buildSigPS( - TalerSignaturePurpose.AML_QUERY, - ).build(); + const sigBlob = buildSigPS(TalerSignaturePurpose.AML_QUERY).build(); return encodeCrock(eddsaSign(sigBlob, key)); } function buildAMLQuerySignature(key: SigningKey): string { - const sigBlob = buildSigPS( - TalerSignaturePurpose.AML_QUERY, - ).build(); + const sigBlob = buildSigPS(TalerSignaturePurpose.AML_QUERY).build(); return encodeCrock(eddsaSign(sigBlob, key)); } |