summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2024-03-07 11:46:31 +0100
committerFlorian Dold <florian@dold.me>2024-03-07 11:46:31 +0100
commit53120dfc3ec05d49fc6f94bb498c66238225dd6b (patch)
tree374a582f38bf1eb0cb3d8d0c221ffc20af886804
parent26a2a1c094194fed84c3227bc0b91540d31637cc (diff)
downloadwallet-core-53120dfc3ec05d49fc6f94bb498c66238225dd6b.tar.gz
wallet-core-53120dfc3ec05d49fc6f94bb498c66238225dd6b.tar.bz2
wallet-core-53120dfc3ec05d49fc6f94bb498c66238225dd6b.zip
rename insufficient balance fields to work for both merchant and p2p payments
-rw-r--r--packages/taler-harness/src/integrationtests/test-wallet-balance.ts4
-rw-r--r--packages/taler-util/src/wallet-types.ts12
-rw-r--r--packages/taler-wallet-core/src/balance.ts30
-rw-r--r--packages/taler-wallet-core/src/coinSelection.ts18
-rw-r--r--packages/taler-wallet-webextension/src/components/PaymentButtons.tsx8
-rw-r--r--packages/taler-wallet-webextension/src/cta/Payment/stories.tsx24
6 files changed, 46 insertions, 50 deletions
diff --git a/packages/taler-harness/src/integrationtests/test-wallet-balance.ts b/packages/taler-harness/src/integrationtests/test-wallet-balance.ts
index 0e4452892..eb7359781 100644
--- a/packages/taler-harness/src/integrationtests/test-wallet-balance.ts
+++ b/packages/taler-harness/src/integrationtests/test-wallet-balance.ts
@@ -113,12 +113,12 @@ export async function runWalletBalanceTest(t: GlobalTestState) {
t.assertTrue(
Amounts.isNonZero(
- preparePayResult.balanceDetails.balanceMerchantAcceptable,
+ preparePayResult.balanceDetails.balanceReceiverAcceptable,
),
);
t.assertTrue(
- Amounts.isZero(preparePayResult.balanceDetails.balanceMerchantDepositable),
+ Amounts.isZero(preparePayResult.balanceDetails.balanceReceiverDepositable),
);
console.log("waiting for transactions to finalize");
diff --git a/packages/taler-util/src/wallet-types.ts b/packages/taler-util/src/wallet-types.ts
index cfbed04dc..69811969c 100644
--- a/packages/taler-util/src/wallet-types.ts
+++ b/packages/taler-util/src/wallet-types.ts
@@ -862,12 +862,12 @@ export interface PaymentInsufficientBalanceDetails {
/**
* Balance of type "merchant-acceptable" (see balance.ts for definition).
*/
- balanceMerchantAcceptable: AmountString;
+ balanceReceiverAcceptable: AmountString;
/**
* Balance of type "merchant-depositable" (see balance.ts for definition).
*/
- balanceMerchantDepositable: AmountString;
+ balanceReceiverDepositable: AmountString;
balanceExchangeDepositable: AmountString;
@@ -883,8 +883,8 @@ export interface PaymentInsufficientBalanceDetails {
balanceMaterial: AmountString;
balanceExchangeDepositable: AmountString;
balanceAgeAcceptable: AmountString;
- balanceMerchantAcceptable: AmountString;
- balanceMerchantDepositable: AmountString;
+ balanceReceiverAcceptable: AmountString;
+ balanceReceiverDepositable: AmountString;
maxEffectiveSpendAmount: AmountString;
};
};
@@ -897,8 +897,8 @@ export const codecForPayMerchantInsufficientBalanceDetails =
.property("balanceAgeAcceptable", codecForAmountString())
.property("balanceAvailable", codecForAmountString())
.property("balanceMaterial", codecForAmountString())
- .property("balanceMerchantAcceptable", codecForAmountString())
- .property("balanceMerchantDepositable", codecForAmountString())
+ .property("balanceReceiverAcceptable", codecForAmountString())
+ .property("balanceReceiverDepositable", codecForAmountString())
.property("balanceExchangeDepositable", codecForAmountString())
.property("perExchange", codecForAny())
.property("maxEffectiveSpendAmount", codecForAmountString())
diff --git a/packages/taler-wallet-core/src/balance.ts b/packages/taler-wallet-core/src/balance.ts
index 26d348b39..5e3562ba2 100644
--- a/packages/taler-wallet-core/src/balance.ts
+++ b/packages/taler-wallet-core/src/balance.ts
@@ -51,8 +51,6 @@
*/
import { GlobalIDB } from "@gnu-taler/idb-bridge";
import {
- AllowedAuditorInfo,
- AllowedExchangeInfo,
AmountJson,
AmountLike,
Amounts,
@@ -60,12 +58,13 @@ import {
BalanceFlag,
BalancesResponse,
GetBalanceDetailRequest,
+ j2s,
Logger,
parsePaytoUri,
ScopeInfo,
ScopeType,
} from "@gnu-taler/taler-util";
-import { findMatchingWire } from "./coinSelection.js";
+import { ExchangeRestrictionSpec, findMatchingWire } from "./coinSelection.js";
import {
DepositOperationStatus,
OPERATION_STATUS_ACTIVE_FIRST,
@@ -462,12 +461,7 @@ export async function getBalances(
export interface PaymentRestrictionsForBalance {
currency: string;
minAge: number;
- restrictExchanges:
- | {
- exchanges: AllowedExchangeInfo[];
- auditors: AllowedAuditorInfo[];
- }
- | undefined;
+ restrictExchanges: ExchangeRestrictionSpec | undefined;
restrictWireMethods: string[] | undefined;
depositPaytoUri: string | undefined;
}
@@ -504,12 +498,12 @@ export interface PaymentBalanceDetails {
/**
* Balance of type "merchant-acceptable" (see balance.ts for definition).
*/
- balanceMerchantAcceptable: AmountJson;
+ balanceReceiverAcceptable: AmountJson;
/**
* Balance of type "merchant-depositable" (see balance.ts for definition).
*/
- balanceMerchantDepositable: AmountJson;
+ balanceReceiverDepositable: AmountJson;
/**
* Balance that's depositable with the exchange.
@@ -556,12 +550,14 @@ export async function getPaymentBalanceDetailsInTx(
balanceAvailable: Amounts.zeroOfCurrency(req.currency),
balanceMaterial: Amounts.zeroOfCurrency(req.currency),
balanceAgeAcceptable: Amounts.zeroOfCurrency(req.currency),
- balanceMerchantAcceptable: Amounts.zeroOfCurrency(req.currency),
- balanceMerchantDepositable: Amounts.zeroOfCurrency(req.currency),
+ balanceReceiverAcceptable: Amounts.zeroOfCurrency(req.currency),
+ balanceReceiverDepositable: Amounts.zeroOfCurrency(req.currency),
maxEffectiveSpendAmount: Amounts.zeroOfCurrency(req.currency),
balanceExchangeDepositable: Amounts.zeroOfCurrency(req.currency),
};
+ logger.info(`computing balance details for ${j2s(req)}`);
+
const availableCoins = await tx.coinAvailability.getAll();
for (const ca of availableCoins) {
@@ -646,13 +642,13 @@ export async function getPaymentBalanceDetailsInTx(
coinAmount,
).amount;
if (merchantExchangeAcceptable) {
- d.balanceMerchantAcceptable = Amounts.add(
- d.balanceMerchantAcceptable,
+ d.balanceReceiverAcceptable = Amounts.add(
+ d.balanceReceiverAcceptable,
coinAmount,
).amount;
if (merchantExchangeDepositable) {
- d.balanceMerchantDepositable = Amounts.add(
- d.balanceMerchantDepositable,
+ d.balanceReceiverDepositable = Amounts.add(
+ d.balanceReceiverDepositable,
coinAmount,
).amount;
}
diff --git a/packages/taler-wallet-core/src/coinSelection.ts b/packages/taler-wallet-core/src/coinSelection.ts
index 98fd0dec1..50965fd6c 100644
--- a/packages/taler-wallet-core/src/coinSelection.ts
+++ b/packages/taler-wallet-core/src/coinSelection.ts
@@ -392,7 +392,7 @@ export async function reportInsufficientBalanceDetails(
): Promise<PaymentInsufficientBalanceDetails> {
const details = await getPaymentBalanceDetailsInTx(wex, tx, {
restrictExchanges: req.restrictExchanges,
- restrictWireMethods: req.wireMethod ? [req.wireMethod] : [],
+ restrictWireMethods: req.wireMethod ? [req.wireMethod] : undefined,
currency: Amounts.currencyOf(req.instructedAmount),
minAge: req.requiredMinimumAge ?? 0,
depositPaytoUri: req.depositPaytoUri,
@@ -426,11 +426,11 @@ export async function reportInsufficientBalanceDetails(
exchDet.balanceExchangeDepositable,
),
balanceAgeAcceptable: Amounts.stringify(exchDet.balanceAgeAcceptable),
- balanceMerchantAcceptable: Amounts.stringify(
- exchDet.balanceMerchantAcceptable,
+ balanceReceiverAcceptable: Amounts.stringify(
+ exchDet.balanceReceiverAcceptable,
),
- balanceMerchantDepositable: Amounts.stringify(
- exchDet.balanceMerchantDepositable,
+ balanceReceiverDepositable: Amounts.stringify(
+ exchDet.balanceReceiverDepositable,
),
maxEffectiveSpendAmount: Amounts.stringify(
exchDet.maxEffectiveSpendAmount,
@@ -443,14 +443,14 @@ export async function reportInsufficientBalanceDetails(
balanceAgeAcceptable: Amounts.stringify(details.balanceAgeAcceptable),
balanceAvailable: Amounts.stringify(details.balanceAvailable),
balanceMaterial: Amounts.stringify(details.balanceMaterial),
- balanceMerchantAcceptable: Amounts.stringify(
- details.balanceMerchantAcceptable,
+ balanceReceiverAcceptable: Amounts.stringify(
+ details.balanceReceiverAcceptable,
),
balanceExchangeDepositable: Amounts.stringify(
details.balanceExchangeDepositable,
),
- balanceMerchantDepositable: Amounts.stringify(
- details.balanceMerchantDepositable,
+ balanceReceiverDepositable: Amounts.stringify(
+ details.balanceReceiverDepositable,
),
maxEffectiveSpendAmount: Amounts.stringify(details.maxEffectiveSpendAmount),
perExchange,
diff --git a/packages/taler-wallet-webextension/src/components/PaymentButtons.tsx b/packages/taler-wallet-webextension/src/components/PaymentButtons.tsx
index e7c4fbba4..21ee4d3d2 100644
--- a/packages/taler-wallet-webextension/src/components/PaymentButtons.tsx
+++ b/packages/taler-wallet-webextension/src/components/PaymentButtons.tsx
@@ -93,7 +93,7 @@ export function PaymentButtons({
}
case "merchant-acceptable": {
BalanceMessage = i18n.str`Balance is not enough because merchant will just accept ${Amounts.stringifyValue(
- payStatus.balanceDetails.balanceMerchantAcceptable,
+ payStatus.balanceDetails.balanceReceiverAcceptable,
)} ${
amount.currency
} . To know more you can check which exchange and auditors the merchant trust.`;
@@ -101,7 +101,7 @@ export function PaymentButtons({
}
case "merchant-depositable": {
BalanceMessage = i18n.str`Balance is not enough because merchant will just accept ${Amounts.stringifyValue(
- payStatus.balanceDetails.balanceMerchantDepositable,
+ payStatus.balanceDetails.balanceReceiverDepositable,
)} ${
amount.currency
} . To know more you can check which wire methods the merchant accepts.`;
@@ -232,10 +232,10 @@ function getReason(
if (Amounts.cmp(info.amountRequested, info.balanceAgeAcceptable) > 0) {
return "age-acceptable";
}
- if (Amounts.cmp(info.amountRequested, info.balanceMerchantAcceptable) > 0) {
+ if (Amounts.cmp(info.amountRequested, info.balanceReceiverAcceptable) > 0) {
return "merchant-acceptable";
}
- if (Amounts.cmp(info.amountRequested, info.balanceMerchantDepositable) > 0) {
+ if (Amounts.cmp(info.amountRequested, info.balanceReceiverDepositable) > 0) {
return "merchant-depositable";
}
return "fee-gap";
diff --git a/packages/taler-wallet-webextension/src/cta/Payment/stories.tsx b/packages/taler-wallet-webextension/src/cta/Payment/stories.tsx
index 93b96c836..d03f48746 100644
--- a/packages/taler-wallet-webextension/src/cta/Payment/stories.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Payment/stories.tsx
@@ -57,8 +57,8 @@ export const NoEnoughBalanceAvailable = tests.createExample(BaseView, {
balanceAvailable: "USD:9" as AmountString,
balanceMaterial: "USD:9" as AmountString,
balanceAgeAcceptable: "USD:9" as AmountString,
- balanceMerchantAcceptable: "USD:9" as AmountString,
- balanceMerchantDepositable: "USD:9" as AmountString,
+ balanceReceiverAcceptable: "USD:9" as AmountString,
+ balanceReceiverDepositable: "USD:9" as AmountString,
maxEffectiveSpendAmount: "USD:9.5" as AmountString,
balanceExchangeDepositable: "USD:9.5" as AmountString,
perExchange: {},
@@ -99,8 +99,8 @@ export const NoEnoughBalanceMaterial = tests.createExample(BaseView, {
balanceAvailable: "USD:10" as AmountString,
balanceMaterial: "USD:9" as AmountString,
balanceAgeAcceptable: "USD:9" as AmountString,
- balanceMerchantAcceptable: "USD:9" as AmountString,
- balanceMerchantDepositable: "USD:0" as AmountString,
+ balanceReceiverAcceptable: "USD:9" as AmountString,
+ balanceReceiverDepositable: "USD:0" as AmountString,
maxEffectiveSpendAmount: "USD:9.5" as AmountString,
balanceExchangeDepositable: "USD:9.5" as AmountString,
perExchange: {},
@@ -141,8 +141,8 @@ export const NoEnoughBalanceAgeAcceptable = tests.createExample(BaseView, {
balanceAvailable: "USD:10" as AmountString,
balanceMaterial: "USD:10" as AmountString,
balanceAgeAcceptable: "USD:9" as AmountString,
- balanceMerchantAcceptable: "USD:9" as AmountString,
- balanceMerchantDepositable: "USD:9" as AmountString,
+ balanceReceiverAcceptable: "USD:9" as AmountString,
+ balanceReceiverDepositable: "USD:9" as AmountString,
maxEffectiveSpendAmount: "USD:9.5" as AmountString,
balanceExchangeDepositable: "USD:9.5" as AmountString,
perExchange: {},
@@ -184,8 +184,8 @@ export const NoEnoughBalanceMerchantAcceptable = tests.createExample(BaseView, {
balanceAvailable: "USD:10" as AmountString,
balanceMaterial: "USD:10" as AmountString,
balanceAgeAcceptable: "USD:10" as AmountString,
- balanceMerchantAcceptable: "USD:9" as AmountString,
- balanceMerchantDepositable: "USD:9" as AmountString,
+ balanceReceiverAcceptable: "USD:9" as AmountString,
+ balanceReceiverDepositable: "USD:9" as AmountString,
maxEffectiveSpendAmount: "USD:9.5" as AmountString,
balanceExchangeDepositable: "USD:9.5" as AmountString,
perExchange: {},
@@ -228,8 +228,8 @@ export const NoEnoughBalanceMerchantDepositable = tests.createExample(
balanceAvailable: "USD:10" as AmountString,
balanceMaterial: "USD:10" as AmountString,
balanceAgeAcceptable: "USD:10" as AmountString,
- balanceMerchantAcceptable: "USD:10" as AmountString,
- balanceMerchantDepositable: "USD:9" as AmountString,
+ balanceReceiverAcceptable: "USD:10" as AmountString,
+ balanceReceiverDepositable: "USD:9" as AmountString,
maxEffectiveSpendAmount: "USD:9.5" as AmountString,
balanceExchangeDepositable: "USD:9.5" as AmountString,
perExchange: {},
@@ -271,8 +271,8 @@ export const NoEnoughBalanceFeeGap = tests.createExample(BaseView, {
balanceAvailable: "USD:10" as AmountString,
balanceMaterial: "USD:10" as AmountString,
balanceAgeAcceptable: "USD:10" as AmountString,
- balanceMerchantAcceptable: "USD:10" as AmountString,
- balanceMerchantDepositable: "USD:10" as AmountString,
+ balanceReceiverAcceptable: "USD:10" as AmountString,
+ balanceReceiverDepositable: "USD:10" as AmountString,
maxEffectiveSpendAmount: "USD:9.5" as AmountString,
balanceExchangeDepositable: "USD:9.5" as AmountString,
perExchange: {},