aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/taler-util/src/time.ts4
-rw-r--r--packages/taler-wallet-core/src/operations/pay-peer-pull-credit.ts15
-rw-r--r--packages/taler-wallet-core/src/operations/pay-peer-push-debit.ts14
3 files changed, 21 insertions, 12 deletions
diff --git a/packages/taler-util/src/time.ts b/packages/taler-util/src/time.ts
index cf370fdad..3ecf6f92c 100644
--- a/packages/taler-util/src/time.ts
+++ b/packages/taler-util/src/time.ts
@@ -110,6 +110,10 @@ export namespace TalerProtocolTimestamp {
};
}
+ export function isNever(t: TalerProtocolTimestamp): boolean {
+ return t.t_s === "never";
+ }
+
export function fromSeconds(s: number): TalerProtocolTimestamp {
return {
t_s: s,
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 725e3f3d9..88bdcb90e 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
@@ -29,6 +29,7 @@ import {
NotificationType,
TalerErrorCode,
TalerPreciseTimestamp,
+ TalerProtocolTimestamp,
TalerUriAction,
TransactionAction,
TransactionMajorState,
@@ -64,12 +65,11 @@ import { PendingTaskType } from "../pending-types.js";
import { assertUnreachable } from "../util/assertUnreachable.js";
import { checkDbInvariant } from "../util/invariants.js";
import {
+ LongpollResult,
OperationAttemptResult,
OperationAttemptResultType,
constructTaskIdentifier,
- LongpollResult,
runLongpollAsync,
- runTaskWithErrorReporting,
} from "./common.js";
import {
codecForExchangePurseStatus,
@@ -84,7 +84,6 @@ import {
import {
getExchangeWithdrawalInfo,
internalCreateWithdrawalGroup,
- processWithdrawalGroup,
} from "./withdraw.js";
const logger = new Logger("pay-peer-pull-credit.ts");
@@ -121,7 +120,9 @@ async function queryPurseForPeerPullCredit(
}
}
- if (!result.response.deposit_timestamp) {
+ const depositTimestamp = result.response.deposit_timestamp;
+
+ if (!depositTimestamp || TalerProtocolTimestamp.isNever(depositTimestamp)) {
logger.info("purse not ready yet (no deposit)");
return { ready: false };
}
@@ -314,9 +315,7 @@ async function handlePeerPullCreditWithdrawing(
const transitionInfo = await ws.db
.mktx((x) => [x.peerPullPaymentInitiations, x.withdrawalGroups])
.runReadWrite(async (tx) => {
- const ppi = await tx.peerPullPaymentInitiations.get(
- pullIni.pursePub,
- );
+ const ppi = await tx.peerPullPaymentInitiations.get(pullIni.pursePub);
if (!ppi) {
finished = true;
return;
@@ -653,7 +652,7 @@ export async function checkPeerPullPaymentInitiation(
let numCoins = 0;
for (let i = 0; i < wi.selectedDenoms.selectedDenoms.length; i++) {
numCoins += wi.selectedDenoms.selectedDenoms[i].count;
- }
+ }
return {
exchangeBaseUrl: exchangeUrl,
diff --git a/packages/taler-wallet-core/src/operations/pay-peer-push-debit.ts b/packages/taler-wallet-core/src/operations/pay-peer-push-debit.ts
index a070eea50..424715efa 100644
--- a/packages/taler-wallet-core/src/operations/pay-peer-push-debit.ts
+++ b/packages/taler-wallet-core/src/operations/pay-peer-push-debit.ts
@@ -29,6 +29,7 @@ import {
TalerError,
TalerErrorCode,
TalerPreciseTimestamp,
+ TalerProtocolTimestamp,
TalerProtocolViolationError,
TalerUriAction,
TransactionAction,
@@ -479,8 +480,11 @@ async function processPeerPushDebitReady(
resp,
codecForExchangePurseStatus(),
);
+ const mergeTimestamp = purseStatus.merge_timestamp;
logger.info(`got purse status ${purseStatus}`);
- if (purseStatus.merge_timestamp) {
+ if (!mergeTimestamp || TalerProtocolTimestamp.isNever(mergeTimestamp)) {
+ return { ready: false };
+ } else {
await transitionPeerPushDebitTransaction(
ws,
peerPushInitiation.pursePub,
@@ -505,10 +509,12 @@ async function processPeerPushDebitReady(
return {
ready: true,
};
+ } else {
+ logger.warn(`unexpected HTTP status for purse: ${resp.status}`);
+ return {
+ ready: false,
+ };
}
- return {
- ready: false,
- };
});
logger.trace(
"returning early from peer-push-debit for long-polling in background",