import Redis from 'ioredis'; import { IRequestCounter } from "../types/request.types"; export interface IRequestTrackerService { incrementRequest(app_id: string, workspace_id: string): Promise; getRequestCount(app_id: string, workspace_id: string): Promise; cleanup(maxAge?: number): Promise; disconnect(): Promise; } export default class RequestTrackerService implements IRequestTrackerService { private static instance; private redis; private readonly KEY_PREFIX; private readonly LOCK_PREFIX; constructor(redis_client: Redis, redisUrl?: string); static getInstance(redis_client: Redis, redisUrl?: string): RequestTrackerService; private getUniqueKey; private getRedisKey; private getLockKey; private initializeCounter; private shouldResetCounter; private resetCounterIfNeeded; private getCounterFromRedis; private setCounterInRedis; private acquireLock; private releaseLock; incrementRequest(app_id: string, workspace_id: string): Promise; getRequestCount(app_id: string, workspace_id: string): Promise; cleanup(maxAge?: number): Promise; disconnect(): Promise; healthCheck(): Promise; getConnectionStatus(): string; getMultipleRequestCounts(requests: Array<{ app_id: string; workspace_id: string; }>): Promise>; }