@allan1361/iota-big3-sdk-middleware
Version:
🏆 A+ Grade Certified Enterprise Middleware Framework - Phase 3 Certified (90/100) with advanced resilience patterns, comprehensive type safety, and production-ready observability
89 lines • 2.81 kB
TypeScript
import { EventEmitter } from 'events';
import { Request, RequestHandler } from 'express';
export interface ABTestConfig {
name: string;
enabled?: boolean;
variants: VariantConfig[];
defaultVariant?: string;
cookieName?: string;
headerName?: string;
userIdExtractor?: (req: Request) => string | undefined;
stickySession?: boolean;
metrics?: MetricsConfig;
segmentation?: SegmentationRule[];
startDate?: Date;
endDate?: Date;
}
export interface VariantConfig {
name: string;
weight: number;
handler?: RequestHandler;
metadata?: Record<string, any>;
}
export interface MetricsConfig {
trackPageViews?: boolean;
trackConversions?: boolean;
trackCustomEvents?: boolean;
customMetrics?: string[];
}
export interface SegmentationRule {
name: string;
condition: (req: Request) => boolean;
variants: Array<{
name: string;
weight: number;
}>;
}
export interface ABTestMetrics {
testName: string;
variant: string;
pageViews: number;
conversions: number;
conversionRate: number;
customEvents: Record<string, number>;
avgResponseTime: number;
errors: number;
startTime: Date;
lastUpdate: Date;
}
export interface ABTestResults {
testName: string;
status: 'active' | 'completed' | 'paused';
startDate: Date;
endDate?: Date;
variants: Record<string, ABTestMetrics>;
winner?: string;
confidence?: number;
sampleSize: number;
}
export declare class ABTestingMiddleware extends EventEmitter {
private tests;
private assignments;
private metrics;
private config;
constructor(config?: {
defaultCookieName?: string;
defaultHeaderName?: string;
persistAssignments?: boolean;
metricsInterval?: number;
});
createTest(config: ABTestConfig): void;
removeTest(testName: string): void;
toggleTest(testName: string, enabled: boolean): void;
private getVariantAssignment;
private selectVariantByWeight;
private storeAssignment;
trackEvent(testName: string, variant: string, eventType: 'pageView' | 'conversion' | 'error' | 'custom', eventName?: string, value?: number): void;
middleware(testName: string): RequestHandler;
getTestResults(testName: string): ABTestResults | null;
getAllResults(): ABTestResults[];
calculateRequiredSampleSize(testName: string, baselineConversionRate: number, minimumDetectableEffect: number, power?: number, significance?: number): number;
destroy(): void;
}
export declare function createABTestingMiddleware(config?: {
defaultCookieName?: string;
defaultHeaderName?: string;
persistAssignments?: boolean;
metricsInterval?: number;
}): ABTestingMiddleware;
//# sourceMappingURL=ab-testing-middleware.d.ts.map