UNPKG

@upstash/context7-mcp

Version:
28 lines (27 loc) • 958 B
import { createHash } from "node:crypto"; export function createPerTokenLogWindow(windowMs, maxEntries = 10_000) { const entries = new Map(); return { admit(token, now = Date.now()) { const key = createHash("sha256").update(token).digest("hex"); const entry = entries.get(key); if (entry && now - entry.loggedAt < windowMs) { entry.suppressed += 1; return undefined; } const suppressed = entry?.suppressed ?? 0; entries.delete(key); while (entries.size >= maxEntries) { const oldest = entries.keys().next().value; if (oldest === undefined) break; entries.delete(oldest); } entries.set(key, { loggedAt: now, suppressed: 0 }); return suppressed; }, reset() { entries.clear(); }, }; }