/** * Event Store Persistence (ADR-007) * * Provides persistent storage for domain events using SQLite. * Supports event replay, snapshots, and projections. * * Key Features: * - Append-only event log * - Event versioning per aggregate * - Event filtering and queries * - Snapshot support for performance * - Event replay for projections * - Cross-platform SQLite (sql.js fallback) * * @module v3/shared/events/event-store */ import { EventEmitter } from 'node:events'; import { DomainEvent } from './domain-events.js'; export interface EventStoreConfig { /** Path to SQLite database file (:memory: for in-memory) */ databasePath: string; /** Enable verbose logging */ verbose: boolean; /** Auto-persist interval in milliseconds (0 = manual only) */ autoPersistInterval: number; /** Maximum events before snapshot recommendation */ snapshotThreshold: number; /** Path to sql.js WASM file (optional) */ wasmPath?: string; } export interface EventFilter { /** Filter by aggregate IDs */ aggregateIds?: string[]; /** Filter by aggregate types */ aggregateTypes?: Array<'agent' | 'task' | 'memory' | 'swarm'>; /** Filter by event types */ eventTypes?: string[]; /** Filter events after timestamp */ afterTimestamp?: number; /** Filter events before timestamp */ beforeTimestamp?: number; /** Filter by minimum version */ fromVersion?: number; /** Limit number of results */ limit?: number; /** Offset for pagination */ offset?: number; } export interface EventSnapshot { /** Aggregate ID */ aggregateId: string; /** Aggregate type */ aggregateType: 'agent' | 'task' | 'memory' | 'swarm'; /** Version at snapshot */ version: number; /** Snapshot state */ state: Record; /** Timestamp when snapshot was created */ timestamp: number; } export interface EventStoreStats { totalEvents: number; eventsByType: Record; eventsByAggregate: Record; oldestEvent: number | null; newestEvent: number | null; snapshotCount: number; } export declare class EventStore extends EventEmitter { private config; private db; private initialized; private persistTimer; private SQL; private aggregateVersions; constructor(config?: Partial); /** * Initialize the event store */ initialize(): Promise; /** * Shutdown the event store */ shutdown(): Promise; /** * Append a new event to the store */ append(event: DomainEvent): Promise; /** * Get events for a specific aggregate */ getEvents(aggregateId: string, fromVersion?: number): Promise; /** * Get events by type */ getEventsByType(type: string): Promise; /** * Query events with filters */ query(filter: EventFilter): Promise; /** * Replay events from a specific version */ replay(fromVersion?: number): AsyncIterable; /** * Save a snapshot for an aggregate */ saveSnapshot(snapshot: EventSnapshot): Promise; /** * Get snapshot for an aggregate */ getSnapshot(aggregateId: string): Promise; /** * Get event store statistics */ getStats(): Promise; /** * Persist to disk */ persist(): Promise; private createSchema; private loadAggregateVersions; private rowToEvent; private ensureInitialized; } //# sourceMappingURL=event-store.d.ts.map