mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-12 07:20:45 +00:00
refactor(plugin-sdk): unify channel dedupe primitives
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import { createDedupeCache } from "openclaw/plugin-sdk";
|
||||
|
||||
export type ProcessedMessageTracker = {
|
||||
mark: (id?: string | null) => boolean;
|
||||
has: (id?: string | null) => boolean;
|
||||
@@ -5,29 +7,14 @@ export type ProcessedMessageTracker = {
|
||||
};
|
||||
|
||||
export function createProcessedMessageTracker(limit = 2000): ProcessedMessageTracker {
|
||||
const seen = new Set<string>();
|
||||
const order: string[] = [];
|
||||
const dedupe = createDedupeCache({ ttlMs: 0, maxSize: limit });
|
||||
|
||||
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;
|
||||
return !dedupe.check(trimmed);
|
||||
};
|
||||
|
||||
const has = (id?: string | null) => {
|
||||
@@ -35,12 +22,12 @@ export function createProcessedMessageTracker(limit = 2000): ProcessedMessageTra
|
||||
if (!trimmed) {
|
||||
return false;
|
||||
}
|
||||
return seen.has(trimmed);
|
||||
return dedupe.peek(trimmed);
|
||||
};
|
||||
|
||||
return {
|
||||
mark,
|
||||
has,
|
||||
size: () => seen.size,
|
||||
size: () => dedupe.size(),
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user