/**
 * Rate limiting interfaces
 */
export interface RateLimitOptions {
    /**
     * Maximum number of requests
     */
    max: number;
    /**
     * Time window in milliseconds
     */
    window: number;
    /**
     * Key generator function
     */
    keyGenerator?: (context: any) => string;
    /**
     * Skip rate limiting for certain conditions
     */
    skip?: (context: any) => boolean;
}
export interface RateLimitResult {
    /**
     * Whether the request is allowed
     */
    allowed: boolean;
    /**
     * Number of remaining requests in the window
     */
    remaining: number;
    /**
     * Time when the window resets (timestamp)
     */
    reset: number;
    /**
     * Total limit
     */
    limit: number;
}
export interface IRateLimiter {
    /**
     * Check if a request is allowed
     */
    check(key: string): Promise<RateLimitResult>;
    /**
     * Consume a request
     */
    consume(key: string, tokens?: number): Promise<RateLimitResult>;
    /**
     * Reset rate limit for a key
     */
    reset(key: string): Promise<void>;
    /**
     * Get current status for a key
     */
    status(key: string): Promise<RateLimitResult>;
}
/**
 * Token bucket implementation for rate limiting
 */
export interface TokenBucket {
    /**
     * Current number of tokens
     */
    tokens: number;
    /**
     * Last refill timestamp
     */
    lastRefill: number;
    /**
     * Maximum capacity
     */
    capacity: number;
    /**
     * Refill rate (tokens per second)
     */
    refillRate: number;
}
//# sourceMappingURL=interface.d.ts.map