@message-in-the-middle/core
Version:
Framework-agnostic middleware pattern for message queue processing. Core package with all middlewares.
36 lines (35 loc) • 1.28 kB
TypeScript
import { InboundMiddleware, MessageContext } from '../types';
export interface DeduplicationStore {
has(key: string): Promise<boolean>;
set(key: string, ttlSeconds?: number): Promise<void>;
destroy?(): Promise<void> | void;
}
export declare class DeduplicateInboundMiddleware<T = any> implements InboundMiddleware<T> {
private readonly store;
private readonly options;
constructor(store: DeduplicationStore, options?: {
keyExtractor?: (context: MessageContext<T>) => string;
ttlSeconds?: number;
throwOnDuplicate?: boolean;
});
process(context: MessageContext<T>, next: () => Promise<void>): Promise<void>;
}
export interface InMemoryDeduplicationStoreOptions {
cleanupIntervalMs?: number;
maxSize?: number;
}
export declare class InMemoryDeduplicationStore implements DeduplicationStore {
private store;
private cleanupInterval;
private readonly cleanupIntervalMs;
private readonly maxSize;
constructor(options?: InMemoryDeduplicationStoreOptions);
has(key: string): Promise<boolean>;
set(key: string, ttlSeconds?: number): Promise<void>;
destroy(): Promise<void>;
cleanup(): number;
size(): number;
clear(): void;
private startCleanup;
private evictOldest;
}