summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/taler-wallet-core/src/util/RequestThrottler.ts17
1 files changed, 9 insertions, 8 deletions
diff --git a/packages/taler-wallet-core/src/util/RequestThrottler.ts b/packages/taler-wallet-core/src/util/RequestThrottler.ts
index f01e4395c..8c9f304e0 100644
--- a/packages/taler-wallet-core/src/util/RequestThrottler.ts
+++ b/packages/taler-wallet-core/src/util/RequestThrottler.ts
@@ -21,7 +21,7 @@
/**
* Imports.
*/
-import { getTimestampNow, timestampDifference } from "../util/time";
+import { getTimestampNow, timestampDifference, timestampCmp } from "../util/time";
import { URL } from "./url";
import { Logger } from "./logging";
@@ -53,25 +53,26 @@ class OriginState {
private refill(): void {
const now = getTimestampNow();
+ if (timestampCmp(now, this.lastUpdate) < 0) {
+ // Did the system time change?
+ this.lastUpdate = now;
+ return;
+ }
const d = timestampDifference(now, this.lastUpdate);
if (d.d_ms === "forever") {
throw Error("assertion failed");
}
- if (d.d_ms < 0) {
- return;
- }
- const d_s = d.d_ms / 1000;
this.tokensSecond = Math.min(
MAX_PER_SECOND,
- this.tokensSecond + d_s / 1000,
+ this.tokensSecond + d.d_ms / 1000,
);
this.tokensMinute = Math.min(
MAX_PER_MINUTE,
- this.tokensMinute + (d_s / 1000) * 60,
+ this.tokensMinute + d.d_ms / 1000 / 60,
);
this.tokensHour = Math.min(
MAX_PER_HOUR,
- this.tokensHour + (d_s / 1000) * 60 * 60,
+ this.tokensHour + d.d_ms / 1000 / 60 / 60,
);
this.lastUpdate = now;
}