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'