@omni-api/plugin-ratelimit
v0.0.2
Published
Rate limit middleware for OmniAPI (in-memory, pluggable store)
Readme
@omni/plugin-ratelimit
OmniAPI 限流中间件。固定窗口计数算法,可插拔后端(默认内存)。
用法
import { rateLimit, createMemoryStore } from '@omni/plugin-ratelimit';
defineProcedure({
name: 'order.create',
middleware: [rateLimit({ rpm: 30 })], // 每分钟 30 次
// ...
});
// 自定义 key(按租户)
rateLimit({ limit: 100, windowMs: 60_000, key: (ctx) => ctx.state.tenant as string });
// 自定义 store(如 Redis)
rateLimit({ rpm: 100, store: myRedisStore });注意
- 默认共享 module-level 内存 store —— 单进程足够;多实例部署需替换为分布式 store。
- 算法是固定窗口,不保证严格平滑;需要平滑请用令牌桶/漏桶(社区扩展)。
- key 自动加上
procedureName:前缀,不同 procedure 互不影响。
