aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-util/src/http-client/exchange.ts
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2024-08-26 09:33:48 -0300
committerSebastian <sebasjm@gmail.com>2024-08-26 09:34:03 -0300
commit1f3aac3b57af7f99de6d78fd43acea0b4cfdfcb1 (patch)
treea54e59ac94a04e3eb78761fbddb76b72844ba7a1 /packages/taler-util/src/http-client/exchange.ts
parentc0f4b0d0f206a82d4283735bb661a229a9bfffd3 (diff)
downloadwallet-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.ts693
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));
}