33 lines
1.1 KiB
TypeScript
33 lines
1.1 KiB
TypeScript
import type { Decision } from "../rules.js";
|
|
|
|
export type DecisionRecord = {
|
|
decision: Decision;
|
|
createdAt: number;
|
|
needsRestore?: boolean;
|
|
};
|
|
|
|
export const MAX_SESSION_DECISIONS = 2000;
|
|
export const DECISION_TTL_MS = 5 * 60 * 1000;
|
|
|
|
export const sessionDecision = new Map<string, DecisionRecord>();
|
|
export const sessionAllowed = new Map<string, boolean>();
|
|
export const sessionInjected = new Set<string>();
|
|
export const sessionChannelId = new Map<string, string>();
|
|
export const sessionAccountId = new Map<string, string>();
|
|
export const sessionTurnHandled = new Set<string>();
|
|
export const forceNoReplySessions = new Set<string>();
|
|
|
|
export function pruneDecisionMap(now = Date.now()): void {
|
|
for (const [k, v] of sessionDecision.entries()) {
|
|
if (now - v.createdAt > DECISION_TTL_MS) sessionDecision.delete(k);
|
|
}
|
|
|
|
if (sessionDecision.size <= MAX_SESSION_DECISIONS) return;
|
|
const keys = sessionDecision.keys();
|
|
while (sessionDecision.size > MAX_SESSION_DECISIONS) {
|
|
const k = keys.next();
|
|
if (k.done) break;
|
|
sessionDecision.delete(k.value);
|
|
}
|
|
}
|