import { FlagLifecycle, FlagLifecycleState, FeatureFlag, FlagId } from './types'; /** * Options for state transitions. */ export interface TransitionOptions { /** User making the change */ readonly user: string; /** Reason for transition */ readonly reason?: string; /** Scheduled date for next transition */ readonly scheduledDate?: Date; } /** * Lifecycle event. */ export interface LifecycleEvent { readonly type: 'created' | 'activated' | 'paused' | 'deprecated' | 'archived'; readonly flagId: FlagId; readonly previousState?: FlagLifecycleState; readonly newState: FlagLifecycleState; readonly timestamp: Date; readonly user: string; readonly reason?: string; } /** * Cleanup report for technical debt management. */ export interface CleanupReport { /** Flags that are overdue for review */ readonly overdueForReview: FlagId[]; /** Flags that are deprecated and should be removed */ readonly readyForRemoval: FlagId[]; /** Flags that have been enabled for everyone (100% rollout) */ readonly fullyRolledOut: FlagId[]; /** Flags with no activity in specified period */ readonly dormant: FlagId[]; /** Flags approaching their deprecation date */ readonly approachingDeprecation: FlagId[]; /** Total technical debt score */ readonly technicalDebtScore: number; /** Recommendations */ readonly recommendations: CleanupRecommendation[]; } /** * A cleanup recommendation. */ export interface CleanupRecommendation { readonly flagId: FlagId; readonly action: 'remove' | 'review' | 'deprecate' | 'archive'; readonly reason: string; readonly priority: 'high' | 'medium' | 'low'; readonly estimatedEffort: 'minimal' | 'moderate' | 'significant'; } /** * Flag health status. */ export interface FlagHealth { readonly flagId: FlagId; readonly state: FlagLifecycleState; readonly ageInDays: number; readonly isOverdueForReview: boolean; readonly isApproachingDeprecation: boolean; readonly isStale: boolean; readonly lastActivityDaysAgo?: number; readonly healthScore: number; readonly issues: string[]; } /** * Check if a state transition is valid. */ export declare function isValidTransition(from: FlagLifecycleState, to: FlagLifecycleState): boolean; /** * Manager for feature flag lifecycle operations. */ export declare class LifecycleManager { private eventListeners; private activityLog; /** * Create initial lifecycle metadata. */ createLifecycle(createdBy: string, options?: { ticketId?: string; documentationUrl?: string; owner?: string; reviewDate?: Date; }): FlagLifecycle; /** * Activate a flag. */ activate(lifecycle: FlagLifecycle, user: string, reason?: string): FlagLifecycle; /** * Pause a flag (temporarily disable). */ pause(lifecycle: FlagLifecycle, user: string, _reason?: string): FlagLifecycle; /** * Deprecate a flag. */ deprecate(lifecycle: FlagLifecycle, user: string, options?: { deprecationDate?: Date; removalDate?: Date; reason?: string; }): FlagLifecycle; /** * Archive a flag. */ archive(lifecycle: FlagLifecycle, user: string, _reason?: string): FlagLifecycle; /** * Update review date. */ setReviewDate(lifecycle: FlagLifecycle, reviewDate: Date, user: string): FlagLifecycle; /** * Update owner. */ setOwner(lifecycle: FlagLifecycle, owner: string, user: string): FlagLifecycle; /** * Record activity for a flag. */ recordActivity(flagId: FlagId): void; /** * Get last activity date for a flag. */ getLastActivity(flagId: FlagId): Date | undefined; /** * Get health status for a flag. */ getFlagHealth(flag: FeatureFlag): FlagHealth; /** * Get stale flags (no activity in specified days). */ getStaleFlags(flags: readonly FeatureFlag[], staleDays?: number): FeatureFlag[]; /** * Get flags that are overdue for review. */ getOverdueFlags(flags: readonly FeatureFlag[]): FeatureFlag[]; /** * Get deprecated flags ready for removal. */ getFlagsReadyForRemoval(flags: readonly FeatureFlag[]): FeatureFlag[]; /** * Generate a comprehensive cleanup report. */ generateCleanupReport(flags: readonly FeatureFlag[]): CleanupReport; /** * Add event listener. */ addEventListener(listener: (event: LifecycleEvent) => void): void; /** * Remove event listener. */ removeEventListener(listener: (event: LifecycleEvent) => void): void; private validateTransition; private getDefaultReviewDate; private getDefaultRemovalDate; private emitEvent; } /** * Fluent builder for creating lifecycle metadata. */ export declare class LifecycleBuilder { private lifecycle; constructor(createdBy: string); /** * Set ticket/issue reference. */ ticket(ticketId: string): this; /** * Set documentation URL. */ documentation(url: string): this; /** * Set owner. */ owner(owner: string): this; /** * Set review date. */ reviewDate(date: Date): this; /** * Set deprecation date. */ deprecationDate(date: Date): this; /** * Set removal date. */ removalDate(date: Date): this; /** * Build the lifecycle metadata. */ build(): FlagLifecycle; } /** * Create a lifecycle builder. */ export declare function createLifecycle(createdBy: string): LifecycleBuilder; /** * Get the singleton lifecycle manager instance. */ export declare function getLifecycleManager(): LifecycleManager; /** * Reset the singleton instance. */ export declare function resetLifecycleManager(): void;