import { JsonValue, UserId, VariantId } from '../advanced/types'; /** * Metric data point. */ export interface MetricDataPoint { /** Metric name */ readonly name: string; /** Metric value */ readonly value: number; /** Associated flag key */ readonly flagKey?: string; /** Associated variant */ readonly variantId?: VariantId; /** User ID */ readonly userId?: UserId; /** Session ID */ readonly sessionId?: string; /** Timestamp */ readonly timestamp: Date; /** Additional dimensions */ readonly dimensions?: Record; } /** * Metric statistics. */ export interface MetricStats { /** Metric name */ readonly name: string; /** Number of data points */ readonly count: number; /** Sum of values */ readonly sum: number; /** Mean value */ readonly mean: number; /** Median value */ readonly median: number; /** Standard deviation */ readonly stdDev: number; /** Minimum value */ readonly min: number; /** Maximum value */ readonly max: number; /** 25th percentile */ readonly p25: number; /** 75th percentile */ readonly p75: number; /** 95th percentile */ readonly p95: number; /** 99th percentile */ readonly p99: number; } /** * Variant comparison results. */ export interface VariantComparison { /** Control variant */ readonly control: VariantId; /** Treatment variant */ readonly treatment: VariantId; /** Metric name */ readonly metric: string; /** Control stats */ readonly controlStats: MetricStats; /** Treatment stats */ readonly treatmentStats: MetricStats; /** Absolute difference */ readonly absoluteDiff: number; /** Relative difference (lift) */ readonly relativeDiff: number; /** P-value from statistical test */ readonly pValue: number; /** Confidence interval */ readonly confidenceInterval: { readonly lower: number; readonly upper: number; readonly level: number; }; /** Is statistically significant */ readonly isSignificant: boolean; /** Recommended action */ readonly recommendation: 'winner' | 'loser' | 'inconclusive' | 'more_data_needed'; } /** * Flag impact analysis result. */ export interface FlagImpactAnalysis { /** Flag key */ readonly flagKey: string; /** Analysis timestamp */ readonly analyzedAt: Date; /** Analysis period start */ readonly periodStart: Date; /** Analysis period end */ readonly periodEnd: Date; /** Total users in analysis */ readonly totalUsers: number; /** Users per variant */ readonly variantUsers: Record; /** Metrics analyzed */ readonly metrics: string[]; /** Metric comparisons */ readonly comparisons: VariantComparison[]; /** Overall impact score (-100 to 100) */ readonly impactScore: number; /** Confidence in results */ readonly confidence: 'low' | 'medium' | 'high'; /** Summary */ readonly summary: string; } /** * Impact analyzer configuration. */ export interface ImpactAnalyzerConfig { /** Enable analysis */ readonly enabled?: boolean; /** Default control variant */ readonly defaultControl?: VariantId; /** Significance threshold (p-value) */ readonly significanceThreshold?: number; /** Minimum sample size for analysis */ readonly minSampleSize?: number; /** Confidence level for intervals */ readonly confidenceLevel?: number; /** Enable debug logging */ readonly debug?: boolean; /** Maximum data points to store per metric */ readonly maxDataPoints?: number; } /** * Input for recording a metric. */ export interface RecordMetricInput { /** Flag key */ readonly flagKey?: string; /** Variant ID */ readonly variantId?: VariantId; /** User ID */ readonly userId?: UserId; /** Session ID */ readonly sessionId?: string; /** Additional dimensions */ readonly dimensions?: Record; } /** * Analyzes the impact of feature flags on metrics. */ export declare class FlagImpactAnalyzer { private config; private metrics; private flagMetrics; constructor(config?: ImpactAnalyzerConfig); /** * Record a metric value. */ recordMetric(name: string, value: number, input?: RecordMetricInput): void; /** * Record multiple metrics at once. */ recordMetrics(metrics: Array<{ name: string; value: number; }>, input?: RecordMetricInput): void; /** * Calculate statistics for a metric. */ getMetricStats(name: string, filter?: (dp: MetricDataPoint) => boolean): MetricStats | null; /** * Calculate statistics for a metric by variant. */ getVariantStats(flagKey: string, metric: string, variantId: VariantId): MetricStats | null; /** * Compare two variants for a metric. */ compareVariants(flagKey: string, metric: string, controlVariant: VariantId, treatmentVariant: VariantId): VariantComparison | null; /** * Analyze impact of a flag across all metrics. */ analyzeImpact(flagKey: string, controlVariant?: VariantId): FlagImpactAnalysis | null; /** * Get all recorded metrics. */ getMetricNames(): string[]; /** * Get all flags with metrics. */ getFlagKeys(): string[]; /** * Get metrics for a flag. */ getFlagMetrics(flagKey: string): string[]; /** * Get variants for a flag. */ getFlagVariants(flagKey: string): VariantId[]; /** * Clear all data. */ clear(): void; /** * Clear data for a specific flag. */ clearFlag(flagKey: string): void; /** * Enable or disable analysis. */ setEnabled(enabled: boolean): void; /** * Export all data as JSON. */ exportData(): { metrics: Record; flagMetrics: Record>; }; private enforceMaxDataPoints; private calculateStats; private getVariantValues; private calculateImpactScore; private determineConfidence; private generateSummary; private log; } /** * Get the singleton impact analyzer instance. */ export declare function getImpactAnalyzer(): FlagImpactAnalyzer; /** * Initialize the singleton with configuration. */ export declare function initImpactAnalyzer(config: ImpactAnalyzerConfig): FlagImpactAnalyzer; /** * Reset the singleton instance. */ export declare function resetImpactAnalyzer(): void;