import { Result } from "../common/result"; import { DomainEvent } from "../domain/domain-event"; import { EventStore } from "./event-store"; export declare enum ReplayStrategy { CHRONOLOGICAL = "chronological", BY_AGGREGATE = "by_aggregate", BY_TYPE = "by_type", BY_CORRELATION = "by_correlation" } export interface ReplayOptions { strategy: ReplayStrategy; fromDate?: Date; toDate?: Date; aggregateIds?: string[]; eventTypes?: string[]; correlationId?: string; includeSnapshots?: boolean; batchSize?: number; reverse?: boolean; } export interface ReplayProgress { totalEvents: number; processedEvents: number; failedEvents: number; progressPercentage: number; startTime: Date; estimatedCompletion?: Date; currentEvent?: DomainEvent; } export interface EventReplayHandler { handleEvent(event: DomainEvent): Promise>; handleBatch(events: DomainEvent[]): Promise>; onReplayStart?(options: ReplayOptions): Promise>; onReplayComplete?(progress: ReplayProgress): Promise>; onReplayError?(error: Error, event?: DomainEvent): Promise>; } export interface EventReplayManager { startReplay(options: ReplayOptions, handler: EventReplayHandler): Promise>; getReplayProgress(replayId: string): Promise>; cancelReplay(replayId: string): Promise>; getActiveReplays(): Promise>; getReplayHistory(): Promise>; } export interface ReplayHistory { readonly replayId: string; readonly options: ReplayOptions; readonly startTime: Date; endTime?: Date; status: 'running' | 'completed' | 'failed' | 'cancelled'; totalEvents: number; processedEvents: number; failedEvents: number; error?: string; } export declare class BaseEventReplayManager implements EventReplayManager { private eventStore; private activeReplays; private replayHistory; constructor(eventStore: EventStore); startReplay(options: ReplayOptions, handler: EventReplayHandler): Promise>; getReplayProgress(replayId: string): Promise>; cancelReplay(replayId: string): Promise>; getActiveReplays(): Promise>; getReplayHistory(): Promise>; private executeReplay; private getEventsForReplay; private createBatches; private generateReplayId; }