import { EventEmitter } from './event-emitter'; /** * Per-flag metrics summary. */ export interface FlagMetric { evaluations: number; cacheHits: number; cacheMisses: number; changes: number; lastEvaluatedAt: number; latencies: number[]; } /** * Experiment exposure summary. */ export interface ExperimentMetric { experimentId: string; exposures: number; variationCounts: Record; } /** * Full metrics snapshot returned by `getSnapshot()`. */ export interface MetricsSnapshot { totalEvaluations: number; totalCacheHits: number; totalCacheMisses: number; cacheHitRate: number; flags: Record; experiments: Record; latency: { p50: number; p95: number; p99: number; avg: number; }; collectedSince: number; } /** * Passive impact metrics collector. * * Subscribes to SDK events and aggregates per-flag evaluation counts, * cache hit/miss ratios, latency percentiles, change frequency, * and experiment exposure counts. No network calls, no external dependencies. * * @example * ```ts * const metrics = client.getImpactMetrics(); * console.log(metrics.cacheHitRate); // 0.87 * console.log(metrics.latency.p95); // 12ms * console.log(metrics.flags['my-flag'].evaluations); // 42 * ``` */ export declare class ImpactMetrics { private totalEvaluations; private totalCacheHits; private totalCacheMisses; private readonly flags; private readonly experiments; private readonly latencies; private readonly collectedSince; private readonly unsubscribers; constructor(events: EventEmitter); /** * Returns a full immutable snapshot of all collected metrics. */ getSnapshot(): MetricsSnapshot; /** * Reset all collected metrics. */ reset(): void; /** * Unsubscribe from all events. Called on client dispose. */ destroy(): void; private getOrCreateFlag; private getOrCreateExperiment; private computeLatencyPercentiles; }