TypeScript Types
Complete TypeScript type definitions for hitlimit.
HitLimitOptions
Main configuration options for the hitlimit function.
interface HitLimitOptions<TRequest = any> {
/** Maximum requests per window */
limit?: number
/** Time window (e.g., '1m', '1h', 60000) */
window?: string | number
/** Key extraction function */
key?: (req: TRequest) => string | Promise<string>
/** Tiered rate limits by tier name */
tiers?: Record<string, { limit: number; window?: string | number }>
/** Resolve tier name per request */
tier?: (req: TRequest) => string | Promise<string>
/** Custom error response body */
response?: object | ((info: HitLimitInfo) => object)
/** Rate limit response headers config */
headers?: HeadersConfig
/** Storage backend */
store?: HitLimitStore
/** Handler called when the store throws */
onStoreError?: (err: unknown, req: TRequest) => void
/** Skip rate limiting for certain requests */
skip?: (req: TRequest) => boolean | Promise<boolean>
/** Logger for internal events */
logger?: { warn(msg: string): void }
/** Ban configuration */
ban?: { threshold: number; duration: string | number }
/** Group identifier for shared rate limits */
group?: string | ((req: TRequest) => string)
} HeadersConfig
interface HeadersConfig {
/** RateLimit-* headers (IETF draft) */
standard?: boolean
/** X-RateLimit-* legacy headers */
legacy?: boolean
/** Retry-After header on 429 responses */
retryAfter?: boolean
} HitLimitInfo
Rate limit state returned with each response.
interface HitLimitInfo {
limit: number
remaining: number
resetIn: number // seconds until window resets
resetAt: number // unix timestamp (ms)
key: string
tier?: string
banned?: boolean
banExpiresAt?: number
violations?: number
group?: string
} HitLimitStore
Interface for rate limit storage backends.
interface HitLimitStore {
hit(key: string, windowMs: number, limit: number): Promise<StoreResult> | StoreResult
reset(key: string): Promise<void> | void
shutdown?(): Promise<void> | void
}
interface StoreResult {
count: number
resetAt: number
} Store Options
SqliteStoreOptions
interface SqliteStoreOptions {
/** Path to SQLite database file (default: ':memory:') */
path?: string
} RedisStoreOptions
interface RedisStoreOptions {
/** Redis connection URL */
url?: string
/** Key prefix (default: 'hitlimit:') */
keyPrefix?: string
} Augmented Request
The request object is augmented with rate limit info:
interface Request {
rateLimit?: {
limit: number
remaining: number
resetAt: number
}
} Usage Example
import type { HitLimitOptions, HitLimitStore } from '@joint-ops/hitlimit'
const options: HitLimitOptions = {
limit: 100,
window: '1m',
headers: { standard: true }
}
const customStore: HitLimitStore = {
hit(key, windowMs) { /* ... */ },
reset(key) { /* ... */ }
}