import type { DatabaseSyncLike } from '../../db.js'; /** * Thrown by the ingest afterWrite hook when a concurrent worker has already * inserted slack_event_log for the same event_id. The throw propagates out of * writeEntry's SAVEPOINT, rolling back the duplicate memory write so exactly * one memory row exists per Slack event_id even under two-worker races. * * Caller maps to `{status: 'skipped_duplicate'}` at the public API boundary. */ export declare class DuplicateEventError extends Error { readonly eventId: string; constructor(eventId: string); } export declare function hasSeenEvent(db: DatabaseSyncLike, eventId: string): boolean; export declare function markEventSeen(db: DatabaseSyncLike, eventId: string, memoryId: string | null): void; export declare function lookupMemoryByEvent(db: DatabaseSyncLike, eventId: string): string | null; //# sourceMappingURL=idempotency.d.ts.map