import type { RateLimitResult, RateLimitStore } from '../security.js'; /** Minimal ioredis-compatible surface — inject your client, no hard dependency. */ export interface RedisLike { eval(script: string, numKeys: number, ...args: (string | number)[]): Promise; del(...keys: string[]): Promise; } export interface RedisRateLimitStoreOptions { /** Key prefix. Default: 'basalt:ratelimit'. */ prefix?: string; now?: () => number; } /** * Redis-backed `RateLimitStore` — share one rate limit across every instance, * surviving restarts. Inject an ioredis-compatible client: * * ```ts * import Redis from 'ioredis' * securityPlugin({ rateLimit: { limit: 100, windowMs: 60_000, store: new RedisRateLimitStore(new Redis(url)) } }) * ``` */ export declare class RedisRateLimitStore implements RateLimitStore { private readonly redis; private readonly prefix; private readonly now; constructor(redis: RedisLike, options?: RedisRateLimitStoreOptions); private key; hit(key: string, limit: number, windowMs: number): Promise; reset(key: string): Promise; }