@gguf/claw
Version:
WhatsApp gateway CLI (Baileys web) with Pi RPC agent
47 lines (42 loc) • 999 B
text/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,
};
}