/** * Idempotency Store for Storage Webhook Processing * * Prevents duplicate processing of webhook events * Supports both in-memory and external storage (Redis, DB) */ import type { CoreInMemoryIdempotencyAdapterConfig } from '@plyaz/types/core'; import type { LoggerInterface } from '@plyaz/types'; /** * Idempotency Store for Storage Webhooks * * Prevents duplicate processing of webhook events using unique keys */ export declare class InMemoryIdempotencyAdapter { private config; private logger; private store; private cleanupTimer?; private readonly defaultTTL; private readonly cleanupInterval; private readonly maxKeys; constructor(config?: CoreInMemoryIdempotencyAdapterConfig, logger?: LoggerInterface | undefined); /** * Check if key has been processed (idempotency check) * * @param key - Unique idempotency key * @returns True if already processed */ has(key: string): Promise; /** * Mark key as processed * * @param key - Unique idempotency key * @param ttl - Time to live in milliseconds (optional, uses default if not provided) * @param metadata - Additional data to store with the key */ set(key: string, ttl?: number, metadata?: Record): Promise; /** * Remove key from store * * @param key - Idempotency key to remove */ delete(key: string): Promise; /** * Clear all keys (useful for testing) */ clear(): Promise; /** * Get store statistics */ getStats(): { size: number; maxKeys: number; oldestKey?: { key: string; age: number; }; }; /** * Start automatic cleanup of expired keys */ private startCleanup; /** * Stop automatic cleanup */ stop(): void; /** * Clean up expired keys */ private cleanup; /** * Evict oldest keys when maxKeys is exceeded */ private evictOldest; }