/**
 * Rate limiting implementation to prevent hitting API limits
 */
type TRateLimitConfig = {
    maxRequests: number;
    windowMs: number;
    retryAfter?: number;
};
export declare class RateLimiter {
    private limits;
    private state;
    private defaultConfig;
    constructor(defaultConfig?: Partial<TRateLimitConfig>);
    setLimit(key: string, config: TRateLimitConfig): void;
    private getConfig;
    private getState;
    private cleanOldRequests;
    checkLimit(key: string): Promise<boolean>;
    waitForLimit(key: string): Promise<void>;
    getRemainingRequests(key: string): number;
    getResetTime(key: string): number | null;
    reset(key?: string): void;
}
export declare function createRateLimiter(defaultConfig?: Partial<TRateLimitConfig>): RateLimiter;
export declare const RATE_LIMIT_PRESETS: {
    github: {
        authenticated: {
            maxRequests: number;
            windowMs: number;
        };
        unauthenticated: {
            maxRequests: number;
            windowMs: number;
        };
    };
    spotify: {
        default: {
            maxRequests: number;
            windowMs: number;
        };
    };
    vercel: {
        default: {
            maxRequests: number;
            windowMs: number;
        };
    };
    google: {
        default: {
            maxRequests: number;
            windowMs: number;
        };
    };
};
export type { TRateLimitConfig };
//# sourceMappingURL=rate-limiter.d.ts.map