aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/operations
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-wallet-core/src/operations')
-rw-r--r--packages/taler-wallet-core/src/operations/pay-peer-common.ts16
-rw-r--r--packages/taler-wallet-core/src/operations/pay-peer-pull-credit.ts2
-rw-r--r--packages/taler-wallet-core/src/operations/testing.ts54
3 files changed, 57 insertions, 15 deletions
diff --git a/packages/taler-wallet-core/src/operations/pay-peer-common.ts b/packages/taler-wallet-core/src/operations/pay-peer-common.ts
index 49f255eb9..9e05e43d8 100644
--- a/packages/taler-wallet-core/src/operations/pay-peer-common.ts
+++ b/packages/taler-wallet-core/src/operations/pay-peer-common.ts
@@ -18,27 +18,16 @@
* Imports.
*/
import {
- AgeCommitmentProof,
AmountJson,
AmountString,
Amounts,
Codec,
- CoinPublicKeyString,
- CoinStatus,
- HttpStatusCode,
Logger,
- NotificationType,
- PayPeerInsufficientBalanceDetails,
- TalerError,
- TalerErrorCode,
TalerProtocolTimestamp,
- UnblindedSignature,
buildCodecForObject,
codecForAmountString,
codecForTimestamp,
codecOptional,
- j2s,
- strcmp,
} from "@gnu-taler/taler-util";
import { SpendCoinDetails } from "../crypto/cryptoImplementation.js";
import {
@@ -47,10 +36,9 @@ import {
ReserveRecord,
} from "../db.js";
import { InternalWalletState } from "../internal-wallet-state.js";
+import type { SelectedPeerCoin } from "../util/coinSelection.js";
import { checkDbInvariant } from "../util/invariants.js";
-import { getPeerPaymentBalanceDetailsInTx } from "./balance.js";
import { getTotalRefreshCost } from "./refresh.js";
-import type { PeerCoinInfo, PeerCoinSelectionRequest, SelectPeerCoinsResult, SelectedPeerCoin } from "../util/coinSelection.js";
const logger = new Logger("operations/peer-to-peer.ts");
@@ -96,8 +84,6 @@ export async function queryCoinInfosForSelection(
return infos;
}
-
-
export async function getTotalPeerPaymentCost(
ws: InternalWalletState,
pcs: SelectedPeerCoin[],
diff --git a/packages/taler-wallet-core/src/operations/pay-peer-pull-credit.ts b/packages/taler-wallet-core/src/operations/pay-peer-pull-credit.ts
index 954300264..29c0fff9e 100644
--- a/packages/taler-wallet-core/src/operations/pay-peer-pull-credit.ts
+++ b/packages/taler-wallet-core/src/operations/pay-peer-pull-credit.ts
@@ -120,6 +120,8 @@ async function queryPurseForPeerPullCredit(
}
}
+ logger.trace(`purse status: ${j2s(result.response)}`);
+
const depositTimestamp = result.response.deposit_timestamp;
if (!depositTimestamp || TalerProtocolTimestamp.isNever(depositTimestamp)) {
diff --git a/packages/taler-wallet-core/src/operations/testing.ts b/packages/taler-wallet-core/src/operations/testing.ts
index aff92622a..1962c965c 100644
--- a/packages/taler-wallet-core/src/operations/testing.ts
+++ b/packages/taler-wallet-core/src/operations/testing.ts
@@ -29,6 +29,7 @@ import {
TestPayResult,
TransactionMajorState,
TransactionMinorState,
+ TransactionType,
WithdrawTestBalanceRequest,
} from "@gnu-taler/taler-util";
import {
@@ -498,6 +499,59 @@ export async function waitUntilDone(ws: InternalWalletState): Promise<void> {
logger.info("done waiting until all transactions are in a final state");
}
+export async function waitUntilRefreshesDone(
+ ws: InternalWalletState,
+): Promise<void> {
+ logger.info("waiting until all refresh transactions are in a final state");
+ ws.ensureTaskLoopRunning();
+ let p: OpenedPromise<void> | undefined = undefined;
+ const cancelNotifs = ws.addNotificationListener((notif) => {
+ if (!p) {
+ return;
+ }
+ if (notif.type === NotificationType.TransactionStateTransition) {
+ switch (notif.newTxState.major) {
+ case TransactionMajorState.Pending:
+ case TransactionMajorState.Aborting:
+ break;
+ default:
+ p.resolve();
+ }
+ }
+ });
+ while (1) {
+ p = openPromise();
+ const txs = await getTransactions(ws, {
+ includeRefreshes: true,
+ filterByState: "nonfinal",
+ });
+ let finished = true;
+ for (const tx of txs.transactions) {
+ if (tx.type !== TransactionType.Refresh) {
+ continue;
+ }
+ switch (tx.txState.major) {
+ case TransactionMajorState.Pending:
+ case TransactionMajorState.Aborting:
+ case TransactionMajorState.Suspended:
+ case TransactionMajorState.SuspendedAborting:
+ finished = false;
+ logger.info(
+ `continuing waiting, ${tx.transactionId} in ${tx.txState.major}(${tx.txState.minor})`,
+ );
+ break;
+ }
+ }
+ if (finished) {
+ break;
+ }
+ // Wait until transaction state changed
+ await p.promise;
+ }
+ cancelNotifs();
+ logger.info("done waiting until all refreshes are in a final state");
+}
+
async function waitUntilPendingReady(
ws: InternalWalletState,
transactionId: string,