[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-wallet-core] 01/02: towards auto-refresh
From: |
gnunet |
Subject: |
[taler-wallet-core] 01/02: towards auto-refresh |
Date: |
Thu, 03 Sep 2020 14:05:11 +0200 |
This is an automated email from the git hooks/post-receive script.
dold pushed a commit to branch master
in repository wallet-core.
commit 09b5bfe0db8271c0c7531e22e3123d7e29e2bb1e
Author: Florian Dold <florian.dold@gmail.com>
AuthorDate: Thu Sep 3 17:29:09 2020 +0530
towards auto-refresh
---
.../taler-wallet-core/src/operations/pending.ts | 3 ++-
.../taler-wallet-core/src/operations/refresh.ts | 5 +++++
.../taler-wallet-core/src/operations/withdraw.ts | 2 ++
packages/taler-wallet-core/src/types/dbTypes.ts | 8 ++++++++
packages/taler-wallet-core/src/types/pending.ts | 11 +++++++++++
packages/taler-wallet-core/src/util/time.ts | 23 ++++++++++++----------
packages/taler-wallet-core/src/wallet.ts | 5 ++++-
7 files changed, 45 insertions(+), 12 deletions(-)
diff --git a/packages/taler-wallet-core/src/operations/pending.ts
b/packages/taler-wallet-core/src/operations/pending.ts
index 8cbc5e56..e24e8fc4 100644
--- a/packages/taler-wallet-core/src/operations/pending.ts
+++ b/packages/taler-wallet-core/src/operations/pending.ts
@@ -92,7 +92,8 @@ async function gatherExchangePending(
},
});
}
- if (e.details && e.details.nextUpdateTime.t_ms < now.t_ms) {
+ const keysUpdateRequired = e.details && e.details.nextUpdateTime.t_ms
< now.t_ms;
+ if (keysUpdateRequired) {
resp.pendingOperations.push({
type: PendingOperationType.ExchangeUpdate,
givesLifeness: false,
diff --git a/packages/taler-wallet-core/src/operations/refresh.ts
b/packages/taler-wallet-core/src/operations/refresh.ts
index 770c67da..6c1e643a 100644
--- a/packages/taler-wallet-core/src/operations/refresh.ts
+++ b/packages/taler-wallet-core/src/operations/refresh.ts
@@ -634,3 +634,8 @@ export async function createRefreshGroup(
refreshGroupId,
};
}
+
+export async function autoRefresh(
+ ws: InternalWalletState,
+ exchangeBaseUrl: string,
+): Promise<void> {}
diff --git a/packages/taler-wallet-core/src/operations/withdraw.ts
b/packages/taler-wallet-core/src/operations/withdraw.ts
index c719f7ab..4070e39f 100644
--- a/packages/taler-wallet-core/src/operations/withdraw.ts
+++ b/packages/taler-wallet-core/src/operations/withdraw.ts
@@ -620,6 +620,8 @@ async function processWithdrawGroupImpl(
return;
}
+ await updateExchangeFromUrl(ws, withdrawalGroup.exchangeBaseUrl);
+
const numTotalCoins = withdrawalGroup.denomsSel.selectedDenoms
.map((x) => x.count)
.reduce((a, b) => a + b);
diff --git a/packages/taler-wallet-core/src/types/dbTypes.ts
b/packages/taler-wallet-core/src/types/dbTypes.ts
index 801bb449..30a56282 100644
--- a/packages/taler-wallet-core/src/types/dbTypes.ts
+++ b/packages/taler-wallet-core/src/types/dbTypes.ts
@@ -648,6 +648,14 @@ export interface ExchangeRecord {
* Retry status for fetching updated information about the exchange.
*/
retryInfo: RetryInfo;
+
+ /**
+ * Next time that we should check if coins need to be refreshed.
+ *
+ * Updated whenever the exchange's denominations are updated or when
+ * the refresh check has been done.
+ */
+ nextRefreshCheck?: Timestamp;
}
diff --git a/packages/taler-wallet-core/src/types/pending.ts
b/packages/taler-wallet-core/src/types/pending.ts
index 69613bec..d07754fe 100644
--- a/packages/taler-wallet-core/src/types/pending.ts
+++ b/packages/taler-wallet-core/src/types/pending.ts
@@ -28,6 +28,7 @@ import { Timestamp, Duration } from "../util/time";
export enum PendingOperationType {
Bug = "bug",
ExchangeUpdate = "exchange-update",
+ ExchangeCheckRefresh = "exchange-check-refresh",
Pay = "pay",
ProposalChoice = "proposal-choice",
ProposalDownload = "proposal-download",
@@ -47,6 +48,7 @@ export type PendingOperationInfo = PendingOperationInfoCommon
&
(
| PendingBugOperation
| PendingExchangeUpdateOperation
+ | PendingExchangeCheckRefreshOperation
| PendingPayOperation
| PendingProposalChoiceOperation
| PendingProposalDownloadOperation
@@ -70,6 +72,15 @@ export interface PendingExchangeUpdateOperation {
lastError: TalerErrorDetails | undefined;
}
+/**
+ * The wallet should check whether coins from this exchange
+ * need to be auto-refreshed.
+ */
+export interface PendingExchangeCheckRefreshOperation {
+ type: PendingOperationType.ExchangeCheckRefresh;
+ exchangeBaseUrl: string;
+}
+
/**
* Some interal error happened in the wallet. This pending operation
* should *only* be reported for problems in the wallet, not when
diff --git a/packages/taler-wallet-core/src/util/time.ts
b/packages/taler-wallet-core/src/util/time.ts
index 1641924a..512d5e90 100644
--- a/packages/taler-wallet-core/src/util/time.ts
+++ b/packages/taler-wallet-core/src/util/time.ts
@@ -89,22 +89,25 @@ export function timestampMax(t1: Timestamp, t2: Timestamp):
Timestamp {
const SECONDS = 1000
const MINUTES = SECONDS * 60;
const HOURS = MINUTES * 60;
+const DAYS = HOURS * 24;
+const MONTHS = DAYS * 30;
+const YEARS = DAYS * 365;
export function durationFromSpec(spec: {
seconds?: number,
- hours?: number,
minutes?: number,
+ hours?: number,
+ days?: number,
+ months?: number,
+ years?: number,
}): Duration {
let d_ms = 0;
- if (spec.seconds) {
- d_ms += spec.seconds * SECONDS;
- }
- if (spec.minutes) {
- d_ms += spec.minutes * MINUTES;
- }
- if (spec.hours) {
- d_ms += spec.hours * HOURS;
- }
+ d_ms += (spec.seconds ?? 0) * SECONDS;
+ d_ms += (spec.minutes ?? 0) * MINUTES;
+ d_ms += (spec.hours ?? 0) * HOURS;
+ d_ms += (spec.days ?? 0) * DAYS;
+ d_ms += (spec.months ?? 0) * MONTHS;
+ d_ms += (spec.years ?? 0) * YEARS;
return { d_ms };
}
diff --git a/packages/taler-wallet-core/src/wallet.ts
b/packages/taler-wallet-core/src/wallet.ts
index b448df64..5ca3581a 100644
--- a/packages/taler-wallet-core/src/wallet.ts
+++ b/packages/taler-wallet-core/src/wallet.ts
@@ -110,7 +110,7 @@ import {
import { InternalWalletState } from "./operations/state";
import { createReserve } from "./operations/reserves";
-import { processRefreshGroup, createRefreshGroup } from "./operations/refresh";
+import { processRefreshGroup, createRefreshGroup, autoRefresh } from
"./operations/refresh";
import { processWithdrawGroup } from "./operations/withdraw";
import { getPendingOperations } from "./operations/pending";
import { getBalances } from "./operations/balance";
@@ -267,6 +267,9 @@ export class Wallet {
case PendingOperationType.Recoup:
await processRecoupGroup(this.ws, pending.recoupGroupId, forceNow);
break;
+ case PendingOperationType.ExchangeCheckRefresh:
+ await autoRefresh(this.ws, pending.exchangeBaseUrl)
+ break;
default:
assertUnreachable(pending);
}
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.