{"version":3,"file":"index.mjs","sources":["../../../src/lib/system/index.ts"],"sourcesContent":["/**\n * @file System Initialization\n * @description Enterprise-grade system initialization and configuration\n * for error handling, memory management, and monitoring\n */\n\nimport { memoryManager, type MemoryPressure } from '../utils/memoryManager';\nimport {\n  performanceMonitor,\n  webVitals,\n  longTaskObserver,\n} from '../utils/performanceMonitor';\nimport { globalEventBus } from '../shared/event-utils';\nimport { ErrorReporter } from '../monitoring/ErrorReporter';\nimport { logger, configureLogger, type LogLevel } from '../utils/logging';\nimport { globalRequestQueue } from '../services/request-queue';\nimport { isDebugModeEnabled } from '../flags/debug-mode';\n\n/**\n * System configuration options\n */\nexport interface SystemConfig {\n  /** Environment (development, staging, production) */\n  environment: 'development' | 'staging' | 'production';\n  \n  /** Enable debug mode */\n  debug?: boolean;\n  \n  /** Log level */\n  logLevel?: LogLevel;\n  \n  /** Error reporting configuration */\n  errorReporting?: {\n    enabled?: boolean;\n    dsn?: string;\n    sampleRate?: number;\n  };\n  \n  /** Performance monitoring configuration */\n  performance?: {\n    enabled?: boolean;\n    sampleRate?: number;\n    collectWebVitals?: boolean;\n    collectLongTasks?: boolean;\n    reporter?: (metrics: unknown[]) => void;\n  };\n  \n  /** Memory monitoring configuration */\n  memory?: {\n    enabled?: boolean;\n    moderateThreshold?: number;\n    criticalThreshold?: number;\n    onPressure?: (level: MemoryPressure) => void;\n  };\n  \n  /** Request queue configuration */\n  requestQueue?: {\n    enabled?: boolean;\n    concurrency?: number;\n    maxQueueSize?: number;\n  };\n}\n\n/**\n * System status\n */\nexport interface SystemStatus {\n  initialized: boolean;\n  environment: string;\n  uptime: number;\n  memory: {\n    usedHeap: number;\n    totalHeap: number;\n    pressure: MemoryPressure;\n  } | null;\n  performance: {\n    webVitals: Record<string, number>;\n    longTaskCount: number;\n  };\n  requestQueue: {\n    queued: number;\n    processing: number;\n  };\n  errors: {\n    total: number;\n    lastHour: number;\n  };\n}\n\n/**\n * System manager class\n */\nclass SystemManager {\n  private config: SystemConfig | null = null;\n  private initTime: number = 0;\n  private errorCount = 0;\n  private hourlyErrors: number[] = [];\n  private cleanupFns: Array<() => void> = [];\n  private _initialized = false;\n\n  /**\n   * Check if system is initialized\n   */\n  get initialized(): boolean {\n    return this._initialized;\n  }\n\n  /**\n   * Initialize the system\n   */\n  initialize(config: SystemConfig): void {\n    if (this._initialized) {\n      logger.warn('[System] Already initialized, skipping');\n      return;\n    }\n\n    this.config = config;\n    this.initTime = Date.now();\n    this._initialized = true;\n\n    logger.info('[System] Initializing...', { environment: config.environment });\n\n    // Configure logging\n    this.setupLogging(config);\n\n    // Setup error reporting\n    this.setupErrorReporting(config);\n\n    // Setup performance monitoring\n    this.setupPerformanceMonitoring(config);\n\n    // Setup memory monitoring\n    this.setupMemoryMonitoring(config);\n\n    // Setup request queue\n    this.setupRequestQueue(config);\n\n    // Setup global error handlers\n    this.setupGlobalErrorHandlers();\n\n    // Setup event handlers\n    this.setupEventHandlers();\n\n    logger.info('[System] Initialization complete');\n  }\n\n  /**\n   * Get system status\n   */\n  getStatus(): SystemStatus {\n    const memoryInfo = memoryManager.monitor.getMemoryInfo();\n    const queueStats = globalRequestQueue.getStats();\n    const vitals = webVitals.getVitals();\n    const longTaskStats = longTaskObserver.getStats();\n\n    // Clean hourly errors\n    const hourAgo = Date.now() - 3600000;\n    this.hourlyErrors = this.hourlyErrors.filter((t) => t > hourAgo);\n\n    return {\n      initialized: this._initialized,\n      environment: this.config?.environment ?? 'unknown',\n      uptime: Date.now() - this.initTime,\n      memory: memoryInfo\n        ? {\n            usedHeap: memoryInfo.usedHeap,\n            totalHeap: memoryInfo.totalHeap,\n            pressure: memoryInfo.pressure,\n          }\n        : null,\n      performance: {\n        webVitals: vitals as Record<string, number>,\n        longTaskCount: longTaskStats.count,\n      },\n      requestQueue: {\n        queued: queueStats.queued,\n        processing: queueStats.processing,\n      },\n      errors: {\n        total: this.errorCount,\n        lastHour: this.hourlyErrors.length,\n      },\n    };\n  }\n\n  /**\n   * Shutdown the system\n   */\n  shutdown(): void {\n    logger.info('[System] Shutting down...');\n\n    // Run cleanup functions\n    for (const cleanup of this.cleanupFns) {\n      try {\n        cleanup();\n      } catch (error) {\n        logger.error('[System] Cleanup error', { error });\n      }\n    }\n    this.cleanupFns = [];\n\n    // Dispose memory manager\n    memoryManager.dispose();\n\n    // Dispose performance monitor\n    performanceMonitor.dispose();\n\n    // Clear request queue\n    globalRequestQueue.clear();\n\n    this._initialized = false;\n    this.config = null;\n\n    logger.info('[System] Shutdown complete');\n  }\n\n  /**\n   * Health check\n   */\n  healthCheck(): {\n    healthy: boolean;\n    checks: Record<string, { status: 'pass' | 'warn' | 'fail'; message?: string }>;\n  } {\n    const checks: Record<string, { status: 'pass' | 'warn' | 'fail'; message?: string }> = {};\n\n    // Check initialization\n    checks.initialized = {\n      status: this._initialized ? 'pass' : 'fail',\n      message: this._initialized ? undefined : 'System not initialized',\n    };\n\n    // Check memory\n    const memoryInfo = memoryManager.monitor.getMemoryInfo();\n    if (memoryInfo !== null && memoryInfo !== undefined) {\n      let memoryStatus: 'pass' | 'warn' | 'fail';\n      if (memoryInfo.pressure === 'none') {\n        memoryStatus = 'pass';\n      } else if (memoryInfo.pressure === 'moderate') {\n        memoryStatus = 'warn';\n      } else {\n        memoryStatus = 'fail';\n      }\n\n      checks.memory = {\n        status: memoryStatus,\n        message: memoryInfo.pressure !== 'none' ? `Memory pressure: ${memoryInfo.pressure}` : undefined,\n      };\n    }\n\n    // Check error rate\n    const hourlyErrorRate = this.hourlyErrors.length;\n    let errorRateStatus: 'pass' | 'warn' | 'fail';\n    if (hourlyErrorRate < 10) {\n      errorRateStatus = 'pass';\n    } else if (hourlyErrorRate < 50) {\n      errorRateStatus = 'warn';\n    } else {\n      errorRateStatus = 'fail';\n    }\n    checks.errorRate = {\n      status: errorRateStatus,\n      message: hourlyErrorRate >= 10 ? `${hourlyErrorRate} errors in last hour` : undefined,\n    };\n\n    // Check request queue\n    const queueStats = globalRequestQueue.getStats();\n    let queueStatus: 'pass' | 'warn' | 'fail';\n    if (queueStats.queued < 50) {\n      queueStatus = 'pass';\n    } else if (queueStats.queued < 100) {\n      queueStatus = 'warn';\n    } else {\n      queueStatus = 'fail';\n    }\n    checks.requestQueue = {\n      status: queueStatus,\n      message: queueStats.queued >= 50 ? `${queueStats.queued} requests queued` : undefined,\n    };\n\n    const healthy = Object.values(checks).every((c) => c.status !== 'fail');\n\n    return { healthy, checks };\n  }\n\n  /**\n   * Configure logging\n   */\n  private setupLogging(config: SystemConfig): void {\n    configureLogger({\n      level: config.logLevel ?? (config.debug === true ? 'debug' : 'info'),\n      console: true,\n      timestamp: true,\n      caller: config.debug,\n    });\n  }\n\n  /**\n   * Setup error reporting\n   */\n  private setupErrorReporting(config: SystemConfig): void {\n    if (config.errorReporting?.enabled === false) {\n      return;\n    }\n\n    ErrorReporter.init({\n      dsn: config.errorReporting?.dsn,\n      environment: config.environment,\n      sampleRate: config.errorReporting?.sampleRate,\n      beforeSend: (event) => {\n        // Increment error counts\n        this.errorCount++;\n        this.hourlyErrors.push(Date.now());\n        return event;\n      },\n    });\n\n    logger.debug('[System] Error reporting configured');\n  }\n\n  /**\n   * Setup performance monitoring\n   */\n  private setupPerformanceMonitoring(config: SystemConfig): void {\n    if (config.performance?.enabled === false) {\n      return;\n    }\n\n    // Configure performance monitor\n    if (config.performance?.reporter !== undefined) {\n      performanceMonitor.dispose();\n      // Create new instance with custom reporter would be done here\n    }\n\n    // Start web vitals collection\n    if (config.performance?.collectWebVitals !== false) {\n      webVitals.start();\n      this.cleanupFns.push(() => webVitals.stop());\n\n      // Report web vitals to performance monitor\n      webVitals.subscribe((vitals) => {\n        Object.entries(vitals).forEach(([name, value]) => {\n          if (value !== undefined && typeof value === 'number') {\n            performanceMonitor.gauge(`web_vitals.${name}`, value);\n          }\n        });\n      });\n    }\n\n    // Start long task observation\n    if (config.performance?.collectLongTasks !== false) {\n      longTaskObserver.start();\n      this.cleanupFns.push(() => longTaskObserver.stop());\n\n      // Report long tasks\n      longTaskObserver.subscribe((task) => {\n        performanceMonitor.timing('long_task', task.duration, {\n          attribution: task.attribution,\n        });\n\n        // Emit performance event if task is very long\n        if (task.duration > 100) {\n          globalEventBus.emitSync('performance:slowOperation', {\n            operation: `long_task:${task.attribution}`,\n            durationMs: task.duration,\n          });\n        }\n      });\n    }\n\n    logger.debug('[System] Performance monitoring configured');\n  }\n\n  /**\n   * Setup memory monitoring\n   */\n  private setupMemoryMonitoring(config: SystemConfig): void {\n    if (config.memory?.enabled === false) {\n      return;\n    }\n\n    // Configure and start memory monitoring\n    const {monitor} = memoryManager;\n\n    if (config.memory?.onPressure) {\n      const unsubscribe = monitor.onPressureChange(config.memory.onPressure);\n      this.cleanupFns.push(unsubscribe);\n    }\n\n    // Default pressure handler\n    const unsubscribe = monitor.onPressureChange((pressure) => {\n      if (pressure !== 'none') {\n        globalEventBus.emitSync('performance:memoryPressure', {\n          level: pressure,\n        });\n\n        if (pressure === 'critical') {\n          logger.warn('[System] Critical memory pressure detected');\n          // Trigger emergency cleanup\n          this.emergencyCleanup();\n        }\n      }\n    });\n    this.cleanupFns.push(unsubscribe);\n\n    memoryManager.startMonitoring();\n    this.cleanupFns.push(() => memoryManager.stopMonitoring());\n\n    logger.debug('[System] Memory monitoring configured');\n  }\n\n  /**\n   * Setup request queue\n   */\n  private setupRequestQueue(config: SystemConfig): void {\n    if (config.requestQueue?.enabled === false) {\n      return;\n    }\n\n    // The global request queue is already initialized\n    // Additional configuration could be done here if needed\n\n    logger.debug('[System] Request queue configured');\n  }\n\n  /**\n   * Setup global error handlers\n   */\n  private setupGlobalErrorHandlers(): void {\n    if (typeof window === 'undefined') return;\n\n    // Unhandled promise rejections\n    const onUnhandledRejection = (event: PromiseRejectionEvent): void => {\n      ErrorReporter.reportError(event.reason, {\n        action: 'unhandled_rejection',\n      });\n\n      globalEventBus.emitSync('error:global', {\n        error: event.reason instanceof Error\n          ? event.reason\n          : new Error(String(event.reason)),\n        context: 'unhandled_rejection',\n      });\n    };\n\n    window.addEventListener('unhandledrejection', onUnhandledRejection);\n    this.cleanupFns.push(() =>\n      window.removeEventListener('unhandledrejection', onUnhandledRejection)\n    );\n\n    // Global errors\n    const onError = (event: ErrorEvent): void => {\n      const error = event.error instanceof Error ? event.error : new Error(event.message);\n      ErrorReporter.reportError(error, {\n        action: 'global_error',\n        metadata: {\n          filename: event.filename,\n          lineno: event.lineno,\n          colno: event.colno,\n        },\n      });\n\n      globalEventBus.emitSync('error:global', {\n        error,\n        context: 'global_error',\n      });\n    };\n\n    window.addEventListener('error', onError);\n    this.cleanupFns.push(() => window.removeEventListener('error', onError));\n\n    logger.debug('[System] Global error handlers configured');\n  }\n\n  /**\n   * Setup event handlers\n   */\n  private setupEventHandlers(): void {\n    // Handle auth events\n    const authLogout = globalEventBus.on('auth:logout', ({ reason }) => {\n      logger.info('[System] User logged out', { reason });\n      // Clear sensitive data\n      this.clearSensitiveData();\n    });\n    this.cleanupFns.push(authLogout);\n\n    const authSessionExpired = globalEventBus.on('auth:sessionExpired', ({ userId }) => {\n      logger.warn('[System] Session expired', { userId });\n    });\n    this.cleanupFns.push(authSessionExpired);\n\n    // Handle data invalidation\n    const dataInvalidate = globalEventBus.on('data:invalidate', ({ keys }) => {\n      logger.debug('[System] Data invalidated', { keys });\n    });\n    this.cleanupFns.push(dataInvalidate);\n\n    logger.debug('[System] Event handlers configured');\n  }\n\n  /**\n   * Emergency cleanup when memory pressure is critical\n   */\n  private emergencyCleanup(): void {\n    logger.warn('[System] Running emergency cleanup');\n\n    // Clear caches\n    globalRequestQueue.clear();\n\n    // Suggest GC\n    memoryManager.monitor.suggestGC();\n\n    // Emit notification\n    globalEventBus.emitSync('ui:notification', {\n      type: 'warning',\n      message: 'Memory usage is high. Some data may be cleared.',\n    });\n  }\n\n  /**\n   * Clear sensitive data\n   */\n  private clearSensitiveData(): void {\n    // Clear request queue\n    globalRequestQueue.clear();\n\n    logger.debug('[System] Sensitive data cleared');\n  }\n}\n\n/**\n * Global system manager instance\n */\nexport const systemManager = new SystemManager();\n\n/**\n * Initialize the system with default configuration\n */\nexport function initializeSystem(config: SystemConfig): void {\n  systemManager.initialize(config);\n}\n\n/**\n * Get system status\n */\nexport function getSystemStatus(): SystemStatus {\n  return systemManager.getStatus();\n}\n\n/**\n * Perform system health check\n */\nexport function systemHealthCheck(): ReturnType<SystemManager['healthCheck']> {\n  return systemManager.healthCheck();\n}\n\n/**\n * Shutdown the system\n */\nexport function shutdownSystem(): void {\n  systemManager.shutdown();\n}\n\n/**\n * Default system configuration\n * Uses feature flag utilities for debug mode detection\n */\nfunction getEnvironment(): 'development' | 'staging' | 'production' {\n  if (import.meta.env.MODE === 'production') {\n    return 'production';\n  } else if (import.meta.env.MODE === 'test') {\n    return 'staging';\n  } else {\n    return 'development';\n  }\n}\n\nexport const defaultSystemConfig: SystemConfig = {\n  environment: getEnvironment(),\n  debug: isDebugModeEnabled(),\n  logLevel: isDebugModeEnabled() ? 'debug' : 'info',\n  errorReporting: {\n    enabled: true,\n    sampleRate: 1.0,\n  },\n  performance: {\n    enabled: true,\n    collectWebVitals: true,\n    collectLongTasks: true,\n  },\n  memory: {\n    enabled: true,\n    moderateThreshold: 0.7,\n    criticalThreshold: 0.9,\n  },\n  requestQueue: {\n    enabled: true,\n    concurrency: 5,\n    maxQueueSize: 100,\n  },\n};\n"],"names":["SystemManager","config","logger","memoryInfo","memoryManager","queueStats","globalRequestQueue","vitals","webVitals","longTaskStats","longTaskObserver","hourAgo","t","cleanup","error","performanceMonitor","checks","memoryStatus","hourlyErrorRate","errorRateStatus","queueStatus","c","configureLogger","ErrorReporter","event","name","value","task","globalEventBus","monitor","unsubscribe","pressure","onUnhandledRejection","onError","authLogout","reason","authSessionExpired","userId","dataInvalidate","keys","systemManager","initializeSystem","getSystemStatus","systemHealthCheck","shutdownSystem","getEnvironment","defaultSystemConfig","isDebugModeEnabled"],"mappings":"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"}