type TRateLimitError = Error & { data?: { details?: string; data?: any; }; }; export declare class RateLimitGuard { static isBatchLimit(error: Error): boolean; static extractBatchLimitFromError(error: Error): number; static isRateLimited(error: TRateLimitError): boolean; /** * @param rate 100/5min 30/sec */ static parseRateLimit(rate: string): ShortEpochRateLimitData[]; static extractRateLimitFromError(error: TRateLimitError): { spanMs: number; spanLimit: number; backoff?: number; }; private awaited; private backoff; private id; private rates; constructor(opts: { id: string; rates: ShortEpochRateLimitData[]; }); status(): { id: string; guards: { wait: number; requests: number; spanStart: number; spanRequests: number; spanMs: number; spanLimit: number; }[]; }; checkWaitTime(): number; updateRateLimitInfo(info: ReturnType): void; private getWaitTimeFor; getSpanLimit(): number; wait(count?: number, now?: number): Promise; onComplete(tick: number): void; private onThrottle; } /** * In short epoch rate limiter (1s, 1m, 1h) we track each request * * sliding(rolling) window | fixed window */ declare class ShortEpochRateLimitData { spanMs: number; spanLimit: number; started: number; counter: number; ticks: number[]; private readonly TOLERANCE; constructor(spanMs: number, spanLimit: number); static parseRateLimit(rate: string): ShortEpochRateLimitData; status(): { wait: number; requests: number; spanStart: number; spanRequests: number; spanMs: number; spanLimit: number; }; printStatus(): void; addRequests(amount: number, time: number): void; /** * The server has own request time, with `addTicks` we save the time BEFORE sending to the server * Here we should update the times AFTER the response received, * otherwise the Request could be removed locally from TimeWindow earlier, as it has been cleared on the backend. */ updateRequests(tick: number, newTick: number): void; getWaitTimeFor(ticksCount: number): number; } export {};