summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/operations
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2023-11-30 22:24:56 +0100
committerFlorian Dold <florian@dold.me>2023-11-30 22:24:56 +0100
commit968ca3cb9a18196605f55ae3413dd601e0319829 (patch)
tree81ed9544d2e9e3d184eedbfe8f3b984a2ba72c7a /packages/taler-wallet-core/src/operations
parent4a9a4b9b3bdbadc6c1d16499e76b7f47b8d2cc59 (diff)
downloadwallet-core-968ca3cb9a18196605f55ae3413dd601e0319829.tar.gz
wallet-core-968ca3cb9a18196605f55ae3413dd601e0319829.tar.bz2
wallet-core-968ca3cb9a18196605f55ae3413dd601e0319829.zip
wallet-core: handle peer-pull-credit expiry
Diffstat (limited to 'packages/taler-wallet-core/src/operations')
-rw-r--r--packages/taler-wallet-core/src/operations/pay-peer-pull-credit.ts60
-rw-r--r--packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts2
2 files changed, 45 insertions, 17 deletions
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 3bcfa6643..44c9436b1 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
@@ -107,26 +107,47 @@ async function queryPurseForPeerPullCredit(
timeout: { d_ms: 60000 },
cancellationToken,
});
+ const transactionId = constructTransactionIdentifier({
+ tag: TransactionType.PeerPullCredit,
+ pursePub: pullIni.pursePub,
+ });
logger.info(`purse status code: HTTP ${resp.status}`);
- const result = await readSuccessResponseJsonOrErrorCode(
+ switch (resp.status) {
+ case HttpStatusCode.Gone: {
+ // Exchange says that purse doesn't exist anymore => expired!
+ const transitionInfo = await ws.db
+ .mktx((x) => [x.peerPullCredit])
+ .runReadWrite(async (tx) => {
+ const finPi = await tx.peerPullCredit.get(pullIni.pursePub);
+ if (!finPi) {
+ logger.warn("peerPullCredit not found anymore");
+ return;
+ }
+ const oldTxState = computePeerPullCreditTransactionState(finPi);
+ if (finPi.status === PeerPullPaymentCreditStatus.PendingReady) {
+ finPi.status = PeerPullPaymentCreditStatus.Expired;
+ }
+ await tx.peerPullCredit.put(finPi);
+ const newTxState = computePeerPullCreditTransactionState(finPi);
+ return { oldTxState, newTxState };
+ });
+ notifyTransition(ws, transactionId, transitionInfo);
+ return { ready: true };
+ }
+ case HttpStatusCode.NotFound:
+ return { ready: false };
+ }
+
+ const result = await readSuccessResponseJsonOrThrow(
resp,
codecForExchangePurseStatus(),
);
- if (result.isError) {
- logger.info(`got purse status error, EC=${result.talerErrorResponse.code}`);
- if (resp.status === 404) {
- return { ready: false };
- } else {
- throwUnexpectedRequestError(resp, result.talerErrorResponse);
- }
- }
-
- logger.trace(`purse status: ${j2s(result.response)}`);
+ logger.trace(`purse status: ${j2s(result)}`);
- const depositTimestamp = result.response.deposit_timestamp;
+ const depositTimestamp = result.deposit_timestamp;
if (!depositTimestamp || TalerProtocolTimestamp.isNever(depositTimestamp)) {
logger.info("purse not ready yet (no deposit)");
@@ -157,10 +178,6 @@ async function queryPurseForPeerPullCredit(
pub: reserve.reservePub,
},
});
- const transactionId = constructTransactionIdentifier({
- tag: TransactionType.PeerPullCredit,
- pursePub: pullIni.pursePub,
- });
const transitionInfo = await ws.db
.mktx((x) => [x.peerPullCredit])
.runReadWrite(async (tx) => {
@@ -538,6 +555,7 @@ export async function processPeerPullCredit(
return handlePeerPullCreditWithdrawing(ws, pullIni);
case PeerPullPaymentCreditStatus.Aborted:
case PeerPullPaymentCreditStatus.Failed:
+ case PeerPullPaymentCreditStatus.Expired:
case PeerPullPaymentCreditStatus.SuspendedAbortingDeletePurse:
case PeerPullPaymentCreditStatus.SuspendedCreatePurse:
case PeerPullPaymentCreditStatus.SuspendedMergeKycRequired:
@@ -876,6 +894,7 @@ export async function suspendPeerPullCreditTransaction(
case PeerPullPaymentCreditStatus.SuspendedWithdrawing:
case PeerPullPaymentCreditStatus.Aborted:
case PeerPullPaymentCreditStatus.Failed:
+ case PeerPullPaymentCreditStatus.Expired:
case PeerPullPaymentCreditStatus.SuspendedAbortingDeletePurse:
break;
default:
@@ -936,6 +955,7 @@ export async function abortPeerPullCreditTransaction(
case PeerPullPaymentCreditStatus.Aborted:
case PeerPullPaymentCreditStatus.AbortingDeletePurse:
case PeerPullPaymentCreditStatus.Failed:
+ case PeerPullPaymentCreditStatus.Expired:
case PeerPullPaymentCreditStatus.SuspendedAbortingDeletePurse:
break;
default:
@@ -990,6 +1010,7 @@ export async function failPeerPullCreditTransaction(
case PeerPullPaymentCreditStatus.SuspendedWithdrawing:
case PeerPullPaymentCreditStatus.Aborted:
case PeerPullPaymentCreditStatus.Failed:
+ case PeerPullPaymentCreditStatus.Expired:
break;
case PeerPullPaymentCreditStatus.AbortingDeletePurse:
case PeerPullPaymentCreditStatus.SuspendedAbortingDeletePurse:
@@ -1043,6 +1064,7 @@ export async function resumePeerPullCreditTransaction(
case PeerPullPaymentCreditStatus.AbortingDeletePurse:
case PeerPullPaymentCreditStatus.Done:
case PeerPullPaymentCreditStatus.Failed:
+ case PeerPullPaymentCreditStatus.Expired:
case PeerPullPaymentCreditStatus.Aborted:
break;
case PeerPullPaymentCreditStatus.SuspendedCreatePurse:
@@ -1140,6 +1162,10 @@ export function computePeerPullCreditTransactionState(
return {
major: TransactionMajorState.Failed,
};
+ case PeerPullPaymentCreditStatus.Expired:
+ return {
+ major: TransactionMajorState.Expired,
+ };
case PeerPullPaymentCreditStatus.SuspendedAbortingDeletePurse:
return {
major: TransactionMajorState.Aborting,
@@ -1176,6 +1202,8 @@ export function computePeerPullCreditTransactionActions(
return [TransactionAction.Suspend, TransactionAction.Fail];
case PeerPullPaymentCreditStatus.Failed:
return [TransactionAction.Delete];
+ case PeerPullPaymentCreditStatus.Expired:
+ return [TransactionAction.Delete];
case PeerPullPaymentCreditStatus.SuspendedAbortingDeletePurse:
return [TransactionAction.Resume, TransactionAction.Fail];
}
diff --git a/packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts b/packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts
index e7cf22187..cf5fc355d 100644
--- a/packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts
+++ b/packages/taler-wallet-core/src/operations/pay-peer-pull-debit.ts
@@ -272,7 +272,7 @@ async function processPeerPullDebitPendingDeposit(
tx,
currency,
coinPubs,
- RefreshReason.AbortPeerPushDebit,
+ RefreshReason.AbortPeerPullDebit,
);
pi.status = PeerPullDebitRecordStatus.AbortingRefresh;