@simonecoelhosfo/optimizely-mcp-server
Version:
Optimizely MCP Server for AI assistants with integrated CLI tools
101 lines • 2.87 kB
TypeScript
/**
* Invalidation Engine for Intelligent Query Cache
*
* Manages cache invalidation strategies, dependency tracking, and
* integration with the sync process to ensure data consistency.
*/
import { CacheOrchestrator } from './CacheOrchestrator.js';
import EventEmitter from 'events';
export interface InvalidationRule {
entity: string;
dependsOn?: string[];
invalidationPattern: string;
cascadeInvalidation?: boolean;
}
export interface InvalidationEvent {
type: 'entity_changed' | 'entity_deleted' | 'bulk_change' | 'manual';
entity: string;
entityId?: string;
projectId?: string;
timestamp: number;
changeType?: 'create' | 'update' | 'delete';
metadata?: any;
}
export interface InvalidationStats {
totalInvalidations: number;
invalidationsByEntity: Record<string, number>;
cascadeInvalidations: number;
lastInvalidation?: Date;
averageInvalidationsPerMinute: number;
}
export declare class InvalidationEngine extends EventEmitter {
private readonly logger;
private readonly cacheOrchestrator;
private readonly dependencies;
private readonly rules;
private stats;
private invalidationHistory;
private readonly historyWindowMs;
constructor(cacheOrchestrator: CacheOrchestrator);
/**
* Setup default invalidation rules and dependencies
*/
private setupDefaultRules;
/**
* Add an invalidation rule
*/
addRule(rule: InvalidationRule): void;
/**
* Build dependency graph from rules
*/
private buildDependencyGraph;
/**
* Handle entity change event from sync process
*/
handleEntityChange(event: InvalidationEvent): Promise<number>;
/**
* Handle bulk changes (e.g., full sync)
*/
handleBulkChange(entities: string[], projectId?: string): Promise<number>;
/**
* Invalidate specific entity by ID
*/
invalidateEntity(entity: string, entityId: string, projectId?: string): Promise<number>;
/**
* Invalidate all caches for a project
*/
invalidateProject(projectId: string): Promise<number>;
/**
* Get entities that should be invalidated when a given entity changes
*/
private getEntitiesToInvalidate;
/**
* Get invalidation pattern for an entity
*/
private getInvalidationPattern;
/**
* Check if cascade invalidation is enabled for entity
*/
private shouldCascade;
/**
* Update statistics
*/
private updateStats;
/**
* Get invalidation statistics
*/
getStats(): InvalidationStats;
/**
* Reset statistics
*/
resetStats(): void;
/**
* Get dependency information
*/
getDependencies(): Map<string, Set<string>>;
/**
* Shutdown the engine
*/
shutdown(): void;
}
//# sourceMappingURL=InvalidationEngine.d.ts.map