taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit cffc4347a0b3a7b6024b4d274e7225f49f75eb08
parent ba5f8ad3867adc114e3b580090767fe95b68a146
Author: Florian Dold <florian@dold.me>
Date:   Mon, 19 Sep 2022 11:28:47 +0200

wallet-core: add wire method check in new coin selection

Diffstat:
Mpackages/taler-wallet-cli/src/integrationtests/test-wallet-balance.ts | 8+-------
Mpackages/taler-wallet-core/src/operations/pay.ts | 14++++++++++++++
2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/packages/taler-wallet-cli/src/integrationtests/test-wallet-balance.ts b/packages/taler-wallet-cli/src/integrationtests/test-wallet-balance.ts @@ -21,10 +21,8 @@ import { Duration, PreparePayResultType } from "@gnu-taler/taler-util"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; import { CoinConfig, defaultCoinConfig } from "../harness/denomStructures.js"; import { - BankService, ExchangeService, FakebankService, - getPayto, getRandomIban, GlobalTestState, MerchantPrivateApi, @@ -32,11 +30,7 @@ import { setupDb, WalletCli, } from "../harness/harness.js"; -import { - createSimpleTestkudosEnvironment, - withdrawViaBank, - makeTestPayment, -} from "../harness/helpers.js"; +import { withdrawViaBank } from "../harness/helpers.js"; /** * Test for wallet balance error messages / different types of insufficient balance. diff --git a/packages/taler-wallet-core/src/operations/pay.ts b/packages/taler-wallet-core/src/operations/pay.ts @@ -47,6 +47,7 @@ import { j2s, Logger, NotificationType, + parsePaytoUri, parsePayUri, PayCoinSelection, PreparePayResult, @@ -898,6 +899,19 @@ export async function selectCandidates( if (exchangeDetails?.currency !== req.contractTermsAmount.currency) { continue; } + let wireMethodSupported = false; + for (const acc of exchangeDetails.wireInfo.accounts) { + const pp = parsePaytoUri(acc.payto_uri); + checkLogicInvariant(!!pp); + if (pp.targetType === req.wireMethod) { + wireMethodSupported = true; + break; + } + } + if (!wireMethodSupported) { + break; + } + exchangeDetails.wireInfo.accounts; let accepted = false; for (const allowedExchange of req.exchanges) { if (allowedExchange.exchangePub === exchangeDetails.masterPublicKey) {