wallet-core: handle 'never' timestamp in purse status

This commit is contained in:
Florian Dold 2023-06-28 11:10:35 +02:00
parent 4e3e17edd1
commit 5bbf41ce1c
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
3 changed files with 21 additions and 12 deletions

View File

@ -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,

View File

@ -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;

View File

@ -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",