feat(core-shared): add NoopRateLimit and InMemoryRateLimit implementations

NoopRateLimit always allows with Infinity remaining — zero-overhead default
for apps without a wired rate-limit impl. InMemoryRateLimit uses a Map-backed
fixed-window with check-at-read expiry and an injected clock for testability.
Both exported from the core-shared barrel.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-20 08:30:35 +00:00
parent e2a5278899
commit 5ddc8e6484
7 changed files with 293 additions and 22 deletions

View File

@@ -0,0 +1,15 @@
import type { IRateLimit, RateLimitDecision } from "./rate-limit.interface";
const EPOCH = new Date(0);
export class NoopRateLimit implements IRateLimit {
async consume(
_budgetName: string,
_key: string,
_weight?: number,
): Promise<RateLimitDecision> {
return { allowed: true, remaining: Infinity, resetAt: EPOCH };
}
async reset(_budgetName: string, _key: string): Promise<void> {}
}