[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-wallet-core] branch master updated: update conversion rate info,
From: |
gnunet |
Subject: |
[taler-wallet-core] branch master updated: update conversion rate info, added test-bank-api in taler harness |
Date: |
Mon, 23 Oct 2023 20:50:28 +0200 |
This is an automated email from the git hooks/post-receive script.
sebasjm pushed a commit to branch master
in repository wallet-core.
The following commit(s) were added to refs/heads/master by this push:
new c66f06eb7 update conversion rate info, added test-bank-api in taler
harness
c66f06eb7 is described below
commit c66f06eb73e53a8804b8c2b36ff45972836c633c
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Mon Oct 23 15:49:13 2023 -0300
update conversion rate info, added test-bank-api in taler harness
---
.../src/pages/UpdateAccountPassword.tsx | 6 +-
.../src/pages/business/CreateCashout.tsx | 14 +--
packages/taler-harness/src/index.ts | 87 ++++++++++++++--
packages/taler-util/src/http-client/bank-core.ts | 116 +++++++++------------
packages/taler-util/src/http-client/types.ts | 23 ++--
5 files changed, 151 insertions(+), 95 deletions(-)
diff --git a/packages/demobank-ui/src/pages/UpdateAccountPassword.tsx
b/packages/demobank-ui/src/pages/UpdateAccountPassword.tsx
index ef3737e81..f23285528 100644
--- a/packages/demobank-ui/src/pages/UpdateAccountPassword.tsx
+++ b/packages/demobank-ui/src/pages/UpdateAccountPassword.tsx
@@ -47,7 +47,7 @@ export function UpdateAccountPassword({
if (!!errors || !password || !token) return;
await withRuntimeErrorHandling(i18n, async () => {
const resp = await api.updatePassword({ username: accountName, token }, {
- // old_password: current,
+ old_password: current,
new_password: password,
});
if (resp.type === "ok") {
@@ -61,7 +61,9 @@ export function UpdateAccountPassword({
})
case "no-rights": return notify({
type: "error",
- title: i18n.str`This user have no right on to change the password.`
+ title: current ?
+ i18n.str`This user have no right on to change the password.` :
+ i18n.str`This user have no right on to change the password or
the old password doesn't match.`
})
case "not-found": return notify({
type: "error",
diff --git a/packages/demobank-ui/src/pages/business/CreateCashout.tsx
b/packages/demobank-ui/src/pages/business/CreateCashout.tsx
index 5595d3b51..a3a48eed4 100644
--- a/packages/demobank-ui/src/pages/business/CreateCashout.tsx
+++ b/packages/demobank-ui/src/pages/business/CreateCashout.tsx
@@ -110,14 +110,14 @@ export function CreateCashout({
}
}
- if (resultRatios.type === "fail") {
- switch (resultRatios.case) {
- case "not-supported": return <div>cashout operations are not
supported</div>
- default: assertUnreachable(resultRatios.case)
- }
- }
+ // if (resultRatios.type === "fail") {
+ // switch (resultRatios.case) {
+ // case "not-supported": return <div>cashout operations are not
supported</div>
+ // default: assertUnreachable(resultRatios.case)
+ // }
+ // }
- const ratio = resultRatios.body
+ // const ratio = resultRatios.body
const account = {
balance: Amounts.parseOrThrow(resultAccount.body.balance.amount),
diff --git a/packages/taler-harness/src/index.ts
b/packages/taler-harness/src/index.ts
index 09b953a22..0f93abdbe 100644
--- a/packages/taler-harness/src/index.ts
+++ b/packages/taler-harness/src/index.ts
@@ -18,22 +18,27 @@
* Imports.
*/
import {
- addPaytoQueryParams,
+ AccessToken,
+ AmountString,
Amounts,
- TalerCorebankApiClient,
Configuration,
- decodeCrock,
- j2s,
+ Duration,
+ HttpStatusCode,
+ LibtoolVersion,
Logger,
MerchantApiClient,
- rsaBlind,
- setGlobalLogLevelFromString,
- RegisterAccountRequest,
- HttpStatusCode,
MerchantInstanceConfig,
- Duration,
+ RegisterAccountRequest,
+ TalerCoreBankHttpClient,
+ TalerCorebankApiClient,
+ addPaytoQueryParams,
+ decodeCrock,
+ encodeCrock,
generateIban,
- AmountString,
+ getRandomBytes,
+ j2s,
+ rsaBlind,
+ setGlobalLogLevelFromString,
} from "@gnu-taler/taler-util";
import { clk } from "@gnu-taler/taler-util/clk";
import {
@@ -42,8 +47,8 @@ import {
} from "@gnu-taler/taler-util/http";
import {
CryptoDispatcher,
- downloadExchangeInfo,
SynchronousCryptoWorkerFactoryPlain,
+ downloadExchangeInfo,
topupReserveWithDemobank,
} from "@gnu-taler/taler-wallet-core";
import { deepStrictEqual } from "assert";
@@ -652,6 +657,66 @@ deploymentCli
process.exit(2);
});
+ deploymentCli
+ .subcommand("testBankAPI", "test-bank-api", {
+ help: "test api compatibility.",
+ })
+ .requiredArgument("corebankApiBaseUrl", clk.STRING)
+ .maybeOption("adminPwd", ["--admin-password"], clk.STRING)
+ .action(async (args) => {
+ const httpLib = createPlatformHttpLib();
+ const api = new
TalerCoreBankHttpClient(args.testBankAPI.corebankApiBaseUrl, httpLib);
+
+ {
+ logger.info("compatibility")
+ const resp = await api.getConfig()
+ if (!LibtoolVersion.compare(resp.body.version,
api.PROTOCOL_VERSION)?.compatible) {
+ logger.error("The API client is not compatible with the server",
api.PROTOCOL_VERSION, resp.body.version)
+ process.exit(1)
+ }
+ }
+ if (!args.testBankAPI.adminPwd) {
+ logger.info("test completed")
+ process.exit(0)
+ }
+
+ let token: AccessToken;
+ {
+ logger.info("login admin")
+ const resp = await
api.getAuthenticationAPI("admin").createAccessToken(args.testBankAPI.adminPwd, {
+ scope: "readwrite"
+ })
+ if (resp.type === "fail") {
+ logger.error("login failed", resp.detail)
+ process.exit(1)
+ }
+ token = resp.body.access_token;
+ }
+
+ logger.info("account management")
+ const username = "user-" + encodeCrock(getRandomBytes(10)).toLowerCase();
+ {
+ const resp = await api.createAccount(token, { name: username, password:
"123", username })
+ if (resp.type === "fail") {
+ logger.error("create account failed", resp.detail)
+ process.exit(1)
+ }
+ }
+ {
+ const resp = await api.updateAccount({username, token}, {
challenge_contact_data: {email: "asd"} })
+ if (resp.type === "fail") {
+ logger.error("create account failed", resp.detail)
+ process.exit(1)
+ }
+ }
+
+
+ logger.info("test completed")
+
+ });
+
+
+
deploymentCli
.subcommand("coincfg", "gen-coin-config", {
help: "Generate a coin/denomination configuration for the exchange.",
diff --git a/packages/taler-util/src/http-client/bank-core.ts
b/packages/taler-util/src/http-client/bank-core.ts
index c49a094e4..bd35552f7 100644
--- a/packages/taler-util/src/http-client/bank-core.ts
+++ b/packages/taler-util/src/http-client/bank-core.ts
@@ -74,7 +74,6 @@ export class TalerCoreBankHttpClient {
method: "GET"
});
switch (resp.status) {
- //FIXME: missing in docs
case HttpStatusCode.Ok: return opSuccess(resp, codecForCoreBankConfig())
default: return opUnknownFailure(resp, await resp.text())
}
@@ -98,10 +97,9 @@ export class TalerCoreBankHttpClient {
},
});
switch (resp.status) {
- //FIXME: NOT IN THE DOOOCS
case HttpStatusCode.Created: return opEmptySuccess()
- case HttpStatusCode.NoContent: return opEmptySuccess()
case HttpStatusCode.BadRequest: return opKnownFailure("invalid-input",
resp);
+ //FIXME: check when the server add code spec
case HttpStatusCode.Forbidden: {
if (body.username === "bank" || body.username === "admin") {
return opKnownFailure("unable-to-create", resp);
@@ -128,6 +126,7 @@ export class TalerCoreBankHttpClient {
switch (resp.status) {
case HttpStatusCode.NoContent: return opEmptySuccess()
case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
+ //FIXME: check when the server add code spec
case HttpStatusCode.Forbidden: {
if (auth.username === "bank" || auth.username === "admin") {
return opKnownFailure("unable-to-delete", resp);
@@ -156,7 +155,11 @@ export class TalerCoreBankHttpClient {
switch (resp.status) {
case HttpStatusCode.NoContent: return opEmptySuccess()
case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
- case HttpStatusCode.Forbidden: return opKnownFailure("unauthorized",
resp);
+ case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized",
resp);
+ //FIXME: missing error code for cases:
+ // * change legal name
+ // * admin tries to change its own account
+ case HttpStatusCode.Forbidden: return
opKnownFailure("cant-change-legal-name-or-admin", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -176,12 +179,9 @@ export class TalerCoreBankHttpClient {
});
switch (resp.status) {
case HttpStatusCode.NoContent: return opEmptySuccess()
- //FIXME: missing in docs
case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
- //FIXME: missing in docs
- case HttpStatusCode.Unauthorized: return opKnownFailure("no-rights",
resp);
- //FIXME: missing in docs
- case HttpStatusCode.Forbidden: return opKnownFailure("unauthorized",
resp);
+ case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized",
resp);
+ case HttpStatusCode.Forbidden: return
opKnownFailure("old-password-invalid-or-not-allowed", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -192,7 +192,6 @@ export class TalerCoreBankHttpClient {
*/
async getPublicAccounts(pagination?: PaginationParams) {
const url = new URL(`public-accounts`, this.baseUrl);
- //FIXME: missing pagination in docs
addPaginationParams(url, pagination)
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
@@ -200,10 +199,9 @@ export class TalerCoreBankHttpClient {
},
});
switch (resp.status) {
- //FIXME: missing in docs
case HttpStatusCode.Ok: return opSuccess(resp,
codecForPublicAccountsResponse())
- //FIXME: missing in docs
case HttpStatusCode.NoContent: return opFixedSuccess({ public_accounts:
[] })
+ case HttpStatusCode.ServiceUnavailable: return
opKnownFailure("public-account-not-supported", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -212,9 +210,12 @@ export class TalerCoreBankHttpClient {
* https://docs.taler.net/core/api-corebank.html#get--accounts
*
*/
- async getAccounts(auth: AccessToken, pagination?: PaginationParams) {
+ async getAccounts(auth: AccessToken, filter: {account? : string} = {},
pagination?: PaginationParams) {
const url = new URL(`accounts`, this.baseUrl);
addPaginationParams(url, pagination)
+ if (filter.account) {
+ url.searchParams.set("filter_name", filter.account)
+ }
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
headers: {
@@ -224,7 +225,8 @@ export class TalerCoreBankHttpClient {
switch (resp.status) {
case HttpStatusCode.Ok: return opSuccess(resp,
codecForListBankAccountsResponse())
case HttpStatusCode.NoContent: return opFixedSuccess({ accounts: [] })
- case HttpStatusCode.Forbidden: return opKnownFailure("unauthorized",
resp);
+ case HttpStatusCode.Forbidden: return opKnownFailure("no-rights", resp);
+ case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized",
resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -243,12 +245,9 @@ export class TalerCoreBankHttpClient {
});
switch (resp.status) {
case HttpStatusCode.Ok: return opSuccess(resp, codecForAccountData())
- //FIXME: missing in docs (401 when not found?)
- case HttpStatusCode.Unauthorized: return opKnownFailure("not-found",
resp);
- //FIXME: missing in docs
+ case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized",
resp);
case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
- //FIXME: missing in docs
- case HttpStatusCode.Forbidden: return opKnownFailure("unauthorized",
resp);
+ case HttpStatusCode.Forbidden: return opKnownFailure("no-rights", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -272,12 +271,9 @@ export class TalerCoreBankHttpClient {
});
switch (resp.status) {
case HttpStatusCode.Ok: return opSuccess(resp,
codecForBankAccountTransactionsResponse())
- //FIXME: missing in docs
case HttpStatusCode.NoContent: return opFixedSuccess({ transactions: []
})
- //FIXME: missing in docs
case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
- //FIXME: missing in docs
- case HttpStatusCode.Forbidden: return opKnownFailure("unauthorized",
resp);
+ case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized",
resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -296,10 +292,8 @@ export class TalerCoreBankHttpClient {
});
switch (resp.status) {
case HttpStatusCode.Ok: return opSuccess(resp,
codecForBankAccountTransactionInfo())
- //FIXME: missing in docs
case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
- //FIXME: missing in docs
- case HttpStatusCode.Forbidden: return opKnownFailure("unauthorized",
resp);
+ case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized",
resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -318,12 +312,12 @@ export class TalerCoreBankHttpClient {
body,
});
switch (resp.status) {
- //FIXME: fix docs... it should be NoContent
+ //FIXME: remove this after server has been updated
case HttpStatusCode.Ok: return opEmptySuccess()
case HttpStatusCode.NoContent: return opEmptySuccess()
+ //FIXME: check when the server add codes spec
case HttpStatusCode.BadRequest: return opKnownFailure("invalid-input",
resp);
- //FIXME: missing in docs
- case HttpStatusCode.Forbidden: return opKnownFailure("unauthorized",
resp);
+ case HttpStatusCode.Unauthorized: return opKnownFailure("unauthorized",
resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -346,8 +340,9 @@ export class TalerCoreBankHttpClient {
body,
});
switch (resp.status) {
- //FIXME: missing in docs
case HttpStatusCode.Ok: return opSuccess(resp,
codecForBankAccountCreateWithdrawalResponse())
+ case HttpStatusCode.PreconditionFailed: return
opKnownFailure("insufficient-funds", resp);
+ //FIXME: remove when server is updated
case HttpStatusCode.Forbidden: return
opKnownFailure("insufficient-funds", resp);
default: return opUnknownFailure(resp, await resp.text())
}
@@ -363,7 +358,6 @@ export class TalerCoreBankHttpClient {
method: "GET",
});
switch (resp.status) {
- //FIXME: missing in docs
case HttpStatusCode.Ok: return opSuccess(resp,
codecForBankAccountGetWithdrawalResponse())
case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp)
default: return opUnknownFailure(resp, await resp.text())
@@ -380,7 +374,7 @@ export class TalerCoreBankHttpClient {
method: "POST",
});
switch (resp.status) {
- //FIXME: fix docs... it should be NoContent
+ //FIXME: remove when the server is fixed
case HttpStatusCode.Ok: return opEmptySuccess()
case HttpStatusCode.NoContent: return opEmptySuccess()
case HttpStatusCode.Conflict: return
opKnownFailure("previously-confirmed", resp);
@@ -398,7 +392,7 @@ export class TalerCoreBankHttpClient {
method: "POST",
});
switch (resp.status) {
- //FIXME: fix docs... it should be NoContent
+ //FIXME: remove when the server is fixed
case HttpStatusCode.Ok: return opEmptySuccess()
case HttpStatusCode.NoContent: return opEmptySuccess()
case HttpStatusCode.Conflict: return
opKnownFailure("previously-aborted", resp);
@@ -426,15 +420,14 @@ export class TalerCoreBankHttpClient {
});
switch (resp.status) {
case HttpStatusCode.Accepted: return opSuccess(resp,
codecForCashoutPending())
- //FIXME: it should be precondition-failed
+ //FIXME: change when the server has been updated
case HttpStatusCode.Conflict: return opKnownFailure("no-contact-info",
resp);
//FIXME: missing in the docs
- case HttpStatusCode.Forbidden: return opKnownFailure("no-allowed", resp);
- //FIXME: missing in the docs
case HttpStatusCode.PreconditionFailed: return
opKnownFailure("no-enough-balance", resp);
//FIXME: missing in the docs
case HttpStatusCode.BadRequest: return
opKnownFailure("incorrect-exchange-rate", resp);
- case HttpStatusCode.ServiceUnavailable: return
opKnownFailure("tan-not-supported", resp);
+ //FIXME: check the code response to tell cashout or tan not supported
+ case HttpStatusCode.ServiceUnavailable: return
opKnownFailure("cashout-or-tan-not-supported", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -455,6 +448,7 @@ export class TalerCoreBankHttpClient {
case HttpStatusCode.NoContent: return opEmptySuccess()
case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
case HttpStatusCode.Conflict: return opKnownFailure("already-confirmed",
resp);
+ case HttpStatusCode.ServiceUnavailable: return
opKnownFailure("cashout-not-supported", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -477,6 +471,7 @@ export class TalerCoreBankHttpClient {
case HttpStatusCode.Forbidden: return
opKnownFailure("wrong-tan-or-credential", resp);
case HttpStatusCode.NotFound: return opKnownFailure("not-found", resp);
case HttpStatusCode.Conflict: return
opKnownFailure("cashout-address-changed", resp);
+ case HttpStatusCode.ServiceUnavailable: return
opKnownFailure("cashout-not-supported", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -500,6 +495,7 @@ export class TalerCoreBankHttpClient {
case HttpStatusCode.Ok: return opSuccess(resp,
codecForCashoutConversionResponse())
case HttpStatusCode.BadRequest: return
opKnownFailure("wrong-calculation", resp);
case HttpStatusCode.NotFound: return opKnownFailure("not-supported",
resp);
+ case HttpStatusCode.ServiceUnavailable: return
opKnownFailure("cashout-not-supported", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -508,8 +504,9 @@ export class TalerCoreBankHttpClient {
*
https://docs.taler.net/core/api-corebank.html#get--accounts-$USERNAME-cashouts
*
*/
- async getAccountCashouts(auth: UserAndToken) {
+ async getAccountCashouts(auth: UserAndToken, pagination?: PaginationParams) {
const url = new URL(`accounts/${auth.username}/cashouts`, this.baseUrl);
+ addPaginationParams(url, pagination)
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
headers: {
@@ -518,9 +515,8 @@ export class TalerCoreBankHttpClient {
});
switch (resp.status) {
case HttpStatusCode.Ok: return opSuccess(resp, codecForCashouts())
- // FIXME: not in docs (maybe for admin and bank)
- case HttpStatusCode.NotFound: return opFixedSuccess({ cashouts: [] });
case HttpStatusCode.NoContent: return opFixedSuccess({ cashouts: [] });
+ case HttpStatusCode.ServiceUnavailable: return
opKnownFailure("cashout-not-supported", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -529,8 +525,9 @@ export class TalerCoreBankHttpClient {
* https://docs.taler.net/core/api-corebank.html#get--cashouts
*
*/
- async getGlobalCashouts(auth: AccessToken) {
+ async getGlobalCashouts(auth: AccessToken, pagination?: PaginationParams) {
const url = new URL(`cashouts`, this.baseUrl);
+ addPaginationParams(url, pagination)
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
headers: {
@@ -540,6 +537,7 @@ export class TalerCoreBankHttpClient {
switch (resp.status) {
case HttpStatusCode.Ok: return opSuccess(resp, codecForGlobalCashouts())
case HttpStatusCode.NoContent: return opFixedSuccess({ cashouts: [] });
+ case HttpStatusCode.ServiceUnavailable: return
opKnownFailure("cashout-not-supported", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -557,29 +555,9 @@ export class TalerCoreBankHttpClient {
},
});
switch (resp.status) {
- //FIXME: missing in docs
case HttpStatusCode.Ok: return opSuccess(resp,
codecForCashoutStatusResponse())
case HttpStatusCode.NotFound: return opKnownFailure("already-aborted",
resp);
- default: return opUnknownFailure(resp, await resp.text())
- }
- }
-
- //
- // CONVERSION RATE
- //
-
- /**
- * https://docs.taler.net/core/api-corebank.html#get--conversion-rates
- *
- */
- async getConversionRates() {
- const url = new URL(`conversion-rates`, this.baseUrl);
- const resp = await this.httpLib.fetch(url.href, {
- method: "GET",
- });
- switch (resp.status) {
- case HttpStatusCode.Ok: return opSuccess(resp,
codecForConversionRatesResponse())
- case HttpStatusCode.NotFound: return opKnownFailure("not-supported",
resp);
+ case HttpStatusCode.ServiceUnavailable: return
opKnownFailure("cashout-not-supported", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
@@ -592,17 +570,23 @@ export class TalerCoreBankHttpClient {
* https://docs.taler.net/core/api-corebank.html#get--monitor
*
*/
- async getMonitor(params: { timeframe:
TalerCorebankApi.MonitorTimeframeParam, which: number }) {
+ async getMonitor(params: { timeframe?:
TalerCorebankApi.MonitorTimeframeParam, which?: number }) {
const url = new URL(`monitor`, this.baseUrl);
- url.searchParams.set("timeframe", params.timeframe.toString())
- url.searchParams.set("which", String(params.which))
+ if (params.timeframe) {
+ url.searchParams.set("timeframe", params.timeframe.toString())
+ }
+ if (params.which) {
+ url.searchParams.set("which", String(params.which))
+ }
const resp = await this.httpLib.fetch(url.href, {
method: "GET",
});
switch (resp.status) {
case HttpStatusCode.Ok: return opSuccess(resp, codecForMonitorResponse())
- case HttpStatusCode.NotFound: return opKnownFailure("not-supported",
resp);
case HttpStatusCode.BadRequest: return opKnownFailure("invalid-input",
resp);
+ //FIXME remove when server is updated
+ case HttpStatusCode.NotFound: return
opKnownFailure("monitor-not-supported", resp);
+ case HttpStatusCode.ServiceUnavailable: return
opKnownFailure("monitor-not-supported", resp);
default: return opUnknownFailure(resp, await resp.text())
}
}
diff --git a/packages/taler-util/src/http-client/types.ts
b/packages/taler-util/src/http-client/types.ts
index be6e72a2e..8af134280 100644
--- a/packages/taler-util/src/http-client/types.ts
+++ b/packages/taler-util/src/http-client/types.ts
@@ -263,6 +263,7 @@ export const codecForCoreBankConfig =
.property("have_cashout", codecOptional(codecForBoolean()))
.property("currency", codecForCurrencySpecificiation())
.property("fiat_currency",
codecOptional(codecForCurrencySpecificiation()))
+ .property("conversion_info",
codecOptional(codecForConversionRatesResponse()))
.build("TalerCorebankApi.Config")
const codecForBalance = (): Codec<TalerCorebankApi.Balance> =>
@@ -419,10 +420,10 @@ export const codecForConversionRatesResponse =
export const codecForMonitorResponse =
(): Codec<TalerCorebankApi.MonitorResponse> =>
buildCodecForObject<TalerCorebankApi.MonitorResponse>()
- .property("cashinCount", codecForNumber())
- .property("cashinExternalVolume", codecForAmountString())
- .property("cashoutCount", codecForNumber())
- .property("cashoutExternalVolume", codecForAmountString())
+ .property("cashinCount", codecOptional(codecForNumber()))
+ .property("cashinExternalVolume", codecOptional(codecForAmountString()))
+ .property("cashoutCount", codecOptional(codecForNumber()))
+ .property("cashoutExternalVolume", codecOptional(codecForAmountString()))
.property("talerPayoutCount", codecForNumber())
.property("talerPayoutInternalVolume", codecForAmountString())
.build("TalerCorebankApi.MonitorResponse");
@@ -871,6 +872,11 @@ export namespace TalerCorebankApi {
// cash-out operations ultimately wire money.
// Only applicable if have_cashout=true.
fiat_currency?: CurrencySpecification;
+
+ // Extra conversion rate information.
+ // Only present if conversion is supported and the server opts in
+ // to report the static conversion rate.
+ conversion_info?: ConversionRatesResponse
}
export interface BankAccountCreateWithdrawalRequest {
@@ -1015,7 +1021,6 @@ export namespace TalerCorebankApi {
export interface AccountPasswordChange {
- // FIXME: missing in docs
// New password.
new_password: string;
// Old password. If present, chec that the old password matches.
@@ -1203,23 +1208,23 @@ export namespace TalerCorebankApi {
// This number corresponds to how many withdrawals have
// been initiated by a wallet owner. Note: wallet owners
// are NOT required to be customers of the libeufin-bank.
- cashinCount: number;
+ cashinCount?: number;
// This amount accounts how much external currency has been
// spent to withdraw Taler coins in the internal currency.
// The exact amount of internal currency being created can be
// calculated using the advertised conversion rates.
- cashinExternalVolume: AmountString;
+ cashinExternalVolume?: AmountString;
// This number identifies how many cashout operations were
// confirmed in the timeframe speficied in the request.
- cashoutCount: number;
+ cashoutCount?: number;
// This amount corresponds to how much *external* currency was
// paid by the libeufin-bank administrator to fulfill all the
// confirmed cashouts related to the timeframe specified in the
// request.
- cashoutExternalVolume: AmountString;
+ cashoutExternalVolume?: AmountString;
// This number identifies how many payments were made by a
// Taler exchange to a merchant bank account in the internal
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-wallet-core] branch master updated: update conversion rate info, added test-bank-api in taler harness,
gnunet <=