index.js 1.23 KB
/**
 * `@drama/ratelimit` 公共面(唯一对外入口,§3 契约)。
 *
 * 给烧钱的 AI 端点(LLM 续写 / TTS 合成 / 生图)挂一层基础令牌桶限流,
 * 防止 D0 上线即被脚本按 per-IP / 匿名维度薅穿真金白银。计数状态走注入的
 * store(生产 redis、测试/单机内存);本包不认识 redis、不读 env、不建任何
 * 顶层连接,store 与时钟全部由工厂参数注入。
 *
 * 对外只暴露三个符号:`createRateLimiter`(工厂)、`createMemoryStore`(单机/单测
 * store 实现)、`RateLimitConfigError`(结构化配置错误)。桶数学(token-bucket)、
 * key 构造、规则匹配均为内部细节,不导出。
 *
 * redis store 不在本包——它需要 redis client(建连接),属 composition root 关切。
 * `@app/server` 注入实现 RateLimitStore 接口的 redis 适配(client 仍由 server 注入)。
 *
 * @typedef {import('./rules.js').RateRule} RateRule
 * @typedef {import('./limiter.js').RateQuery} RateQuery
 * @typedef {import('./limiter.js').RateDecision} RateDecision
 */

export { createRateLimiter } from './limiter.js'
export { createMemoryStore } from './memory-store.js'
export { RateLimitConfigError } from './errors.js'