duplicate saftey
[KisSync.git] / src / util / token-bucket.js
blob1fb840252c0c04d06d42f36343d5fa8790866d7e
1 class TokenBucket {
2     constructor(capacity, refillRate) {
3         if (typeof refillRate !== 'function') {
4             const _refillRate = refillRate;
5             refillRate = () => _refillRate;
6         }
7         if (typeof capacity !== 'function') {
8             const _capacity = capacity;
9             capacity = () => _capacity;
10         }
12         this.capacity = capacity;
13         this.refillRate = refillRate;
14         this.count = capacity();
15         this.lastRefill = Date.now();
16     }
18     throttle() {
19         const now = Date.now();
20         const delta = Math.floor(
21             (now - this.lastRefill) / 1000 * this.refillRate()
22         );
23         if (delta > 0) {
24             this.count = Math.min(this.capacity(), this.count + delta);
25             this.lastRefill = now;
26         }
28         if (this.count === 0) {
29             return true;
30         } else {
31             this.count--;
32             return false;
33         }
34     }
37 export { TokenBucket };