All files / src RateLimitsCircuitBreaker.ts

100% Statements 9/9
100% Branches 0/0
100% Functions 4/4
100% Lines 9/9

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 242x 3x     3x 3x       9x       6x     6x 14x     6x      
export class RateLimitsCircuitBreaker {
  events: number[] = [];
 
  constructor(
    readonly interval: number,
    readonly maxEventsCountsInInterval: number
  ) {}
 
  recordEvent() {
    this.events.push(Date.now());
  }
 
  shouldBreakCircuit() {
    const now = Date.now();
 
    // we don't have take into account upper limit because we are single threaded
    this.events = this.events.filter(
      (occurredAt) => occurredAt >= now - this.interval
    );
 
    return this.events.length > this.maxEventsCountsInInterval;
  }
}