openclaw/extensions/tlon/src/monitor/processed-messages.ts
2026-01-24 00:25:39 +00:00

39 lines
935 B
TypeScript

export type ProcessedMessageTracker = {
mark: (id?: string | null) => boolean;
has: (id?: string | null) => boolean;
size: () => number;
};
export function createProcessedMessageTracker(limit = 2000): ProcessedMessageTracker {
const seen = new Set<string>();
const order: string[] = [];
const mark = (id?: string | null) => {
const trimmed = id?.trim();
if (!trimmed) return true;
if (seen.has(trimmed)) return false;
seen.add(trimmed);
order.push(trimmed);
if (order.length > limit) {
const overflow = order.length - limit;
for (let i = 0; i < overflow; i += 1) {
const oldest = order.shift();
if (oldest) seen.delete(oldest);
}
}
return true;
};
const has = (id?: string | null) => {
const trimmed = id?.trim();
if (!trimmed) return false;
return seen.has(trimmed);
};
return {
mark,
has,
size: () => seen.size,
};
}