@upstash/context7-mcp
Version:
MCP server for Context7
28 lines (27 loc) • 958 B
JavaScript
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();
},
};
}