summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/operations/pending.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-wallet-core/src/operations/pending.ts')
-rw-r--r--packages/taler-wallet-core/src/operations/pending.ts29
1 files changed, 22 insertions, 7 deletions
diff --git a/packages/taler-wallet-core/src/operations/pending.ts b/packages/taler-wallet-core/src/operations/pending.ts
index 282f84ad7..a9d6c5595 100644
--- a/packages/taler-wallet-core/src/operations/pending.ts
+++ b/packages/taler-wallet-core/src/operations/pending.ts
@@ -22,12 +22,17 @@
* Imports.
*/
import { GlobalIDB } from "@gnu-taler/idb-bridge";
-import { AbsoluteTime, TransactionRecordFilter } from "@gnu-taler/taler-util";
+import {
+ AbsoluteTime,
+ TalerErrorDetail,
+ TalerPreciseTimestamp,
+ TransactionRecordFilter,
+} from "@gnu-taler/taler-util";
import {
BackupProviderStateTag,
+ DbPreciseTimestamp,
DepositElementStatus,
DepositGroupRecord,
- DepositOperationStatus,
ExchangeEntryDbUpdateStatus,
PeerPullCreditRecord,
PeerPullDebitRecordStatus,
@@ -48,7 +53,6 @@ import {
RewardRecordStatus,
WalletStoresV1,
WithdrawalGroupRecord,
- WithdrawalGroupStatus,
depositOperationNonfinalStatusRange,
timestampAbsoluteFromDb,
timestampOptionalAbsoluteFromDb,
@@ -94,18 +98,29 @@ async function gatherExchangePending(
now: AbsoluteTime,
resp: PendingOperationsResponse,
): Promise<void> {
- // FIXME: We should do a range query here based on the update time
- // and/or the entry state.
+ let timestampDue: DbPreciseTimestamp | undefined = undefined;
await tx.exchanges.iter().forEachAsync(async (exch) => {
switch (exch.updateStatus) {
case ExchangeEntryDbUpdateStatus.Initial:
case ExchangeEntryDbUpdateStatus.Suspended:
- case ExchangeEntryDbUpdateStatus.Failed:
return;
}
const opUpdateExchangeTag = TaskIdentifiers.forExchangeUpdate(exch);
let opr = await tx.operationRetries.get(opUpdateExchangeTag);
- const timestampDue = opr?.retryInfo.nextRetry ?? exch.nextRefreshCheckStamp;
+
+ switch (exch.updateStatus) {
+ case ExchangeEntryDbUpdateStatus.Ready:
+ timestampDue = opr?.retryInfo.nextRetry ?? exch.nextRefreshCheckStamp;
+ break;
+ case ExchangeEntryDbUpdateStatus.ReadyUpdate:
+ case ExchangeEntryDbUpdateStatus.InitialUpdate:
+ case ExchangeEntryDbUpdateStatus.UnavailableUpdate:
+ timestampDue =
+ opr?.retryInfo.nextRetry ??
+ timestampPreciseToDb(TalerPreciseTimestamp.now());
+ break;
+ }
+
resp.pendingOperations.push({
type: PendingTaskType.ExchangeUpdate,
...getPendingCommon(