summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/operations/pay.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2021-06-25 13:27:06 +0200
committerFlorian Dold <florian@dold.me>2021-06-25 13:27:06 +0200
commit42fe57632002e8f6dbf175b4e984b2fa1013bbe9 (patch)
treebb672ac371e5c448b12bbf287f62dfff00495596 /packages/taler-wallet-core/src/operations/pay.ts
parent3603a6866977600e9cb16f5e94488fde9cfb02a5 (diff)
downloadwallet-core-42fe57632002e8f6dbf175b4e984b2fa1013bbe9.tar.gz
wallet-core-42fe57632002e8f6dbf175b4e984b2fa1013bbe9.tar.bz2
wallet-core-42fe57632002e8f6dbf175b4e984b2fa1013bbe9.zip
implement backup scheduling, other tweaks
Diffstat (limited to 'packages/taler-wallet-core/src/operations/pay.ts')
-rw-r--r--packages/taler-wallet-core/src/operations/pay.ts29
1 files changed, 26 insertions, 3 deletions
diff --git a/packages/taler-wallet-core/src/operations/pay.ts b/packages/taler-wallet-core/src/operations/pay.ts
index 2cd3f7594..33d3bc83c 100644
--- a/packages/taler-wallet-core/src/operations/pay.ts
+++ b/packages/taler-wallet-core/src/operations/pay.ts
@@ -77,6 +77,7 @@ import {
AbortStatus,
AllowedAuditorInfo,
AllowedExchangeInfo,
+ BackupProviderStateTag,
CoinRecord,
CoinStatus,
DenominationRecord,
@@ -489,7 +490,7 @@ async function recordConfirmPay(
if (p) {
p.proposalStatus = ProposalStatus.ACCEPTED;
delete p.lastError;
- p.retryInfo = initRetryInfo(false);
+ p.retryInfo = initRetryInfo();
await tx.proposals.put(p);
}
await tx.purchases.put(t);
@@ -942,7 +943,7 @@ async function storeFirstPaySuccess(
purchase.paymentSubmitPending = false;
purchase.lastPayError = undefined;
purchase.lastSessionId = sessionId;
- purchase.payRetryInfo = initRetryInfo(false);
+ purchase.payRetryInfo = initRetryInfo();
purchase.merchantPaySig = paySig;
if (isFirst) {
const ar = purchase.download.contractData.autoRefund;
@@ -978,7 +979,7 @@ async function storePayReplaySuccess(
}
purchase.paymentSubmitPending = false;
purchase.lastPayError = undefined;
- purchase.payRetryInfo = initRetryInfo(false);
+ purchase.payRetryInfo = initRetryInfo();
purchase.lastSessionId = sessionId;
await tx.purchases.put(purchase);
});
@@ -1100,6 +1101,26 @@ async function handleInsufficientFunds(
});
}
+async function unblockBackup(
+ ws: InternalWalletState,
+ proposalId: string,
+): Promise<void> {
+ await ws.db
+ .mktx((x) => ({ backupProviders: x.backupProviders }))
+ .runReadWrite(async (tx) => {
+ const bp = await tx.backupProviders.indexes.byPaymentProposalId
+ .iter(proposalId)
+ .forEachAsync(async (bp) => {
+ if (bp.state.tag === BackupProviderStateTag.Retrying) {
+ bp.state = {
+ tag: BackupProviderStateTag.Ready,
+ nextBackupTimestamp: getTimestampNow(),
+ };
+ }
+ });
+ });
+}
+
/**
* Submit a payment to the merchant.
*
@@ -1228,6 +1249,7 @@ async function submitPay(
}
await storeFirstPaySuccess(ws, proposalId, sessionId, merchantResp.sig);
+ await unblockBackup(ws, proposalId);
} else {
const payAgainUrl = new URL(
`orders/${purchase.download.contractData.orderId}/paid`,
@@ -1266,6 +1288,7 @@ async function submitPay(
);
}
await storePayReplaySuccess(ws, proposalId, sessionId);
+ await unblockBackup(ws, proposalId);
}
ws.notify({