{"version":3,"sources":["../../../src/utils/common/id.ts","../../../src/events/CoreEventManager.ts","../../../src/services/ApiClientService.ts","../../../src/base/observability/BaseAdapter.ts","../../../src/base/observability/LoggerAdapter.ts","../../../src/base/observability/ObservabilityService.ts","../../../src/config/dependencies.ts","../../../src/init/ServiceRegistry.ts","../../../src/events/streaming/StreamConnectionManager.ts","../../../src/events/streaming/StreamBroadcaster.ts","../../../src/events/streaming/auth/BaseAuthAdapter.ts","../../../src/events/streaming/auth/adapters/AnonymousAuthAdapter.ts","../../../src/events/streaming/transports/BaseTransportAdapter.ts","../../../src/events/streaming/transports/adapters/SSETransportAdapter.ts","../../../src/events/streaming/frameworks/BaseFrameworkAdapter.ts","../../../src/events/streaming/frameworks/NextJSFrameworkAdapter.ts","../../../src/events/streaming/frameworks/ExpressFrameworkAdapter.ts","../../../src/events/streaming/frameworks/NestJSFrameworkAdapter.ts","../../../src/events/streaming/StreamServer.ts","../../../src/events/streaming/StreamRegistry.ts","../../../src/utils/runtime.ts","../../../src/init/CoreInitializer.ts","../../../src/init/express/configureExpressApp.ts"],"names":["EventEmitter","PRODUCTION_CONFIG","STAGING_CONFIG","DEVELOPMENT_CONFIG","setDefaultApiClient","ApiPackageError","PACKAGE_STATUS_CODES","API_ERROR_CODES","OPERATIONS","generateRequestId","ERROR_CODES","ERROR_CATEGORY","HTTP_STATUS","CORE_EVENTS","mergeConfigs","createApiClient","PackageLogger","logger","errors","CorePackageError","OBSERVABILITY_METRICS","BACKEND_RUNTIMES","UNIVERSAL_RUNTIMES","FRONTEND_RUNTIMES","TIME_CONSTANTS","DEFAULT_STALE_MINUTES","DEFAULT_MAX_STALE_AGE","StreamPackageError","STREAM_ERROR_CODES","STREAMING_DEFAULTS","CoreLogger","STORE_KEYS","clearEventEmitter","BaseError","state","createStandaloneFeatureFlagStore","initializeErrorSystem","setEventEmitter","initializeGlobalErrorHandler","config","createHttpErrorHandler"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * ID Generation Utilities\n *\n * Provides consistent ID generation across the application.\n * Uses globalThis.crypto when available, with a fallback for environments without it.\n *\n * @fileoverview ID generation utility functions\n */\n\n// Constants for ID generation\nconst RANDOM_ID_RADIX = 36;\nconst RANDOM_ID_SLICE_START = 2;\nconst SHORT_ID_LENGTH = 8;\nconst HEX_RADIX = 16;\nconst HEX_SLICE_START = 2;\nconst HEX_SLICE_END = 18;\nconst SPAN_ID_LENGTH = 16;\n\n/**\n * Generate a UUID v4 string.\n * Uses crypto.randomUUID when available, otherwise falls back to a timestamp-based ID.\n *\n * @returns A UUID v4 string or fallback ID\n *\n * @example\n * ```typescript\n * const id = generateId();\n * // => 'a1b2c3d4-e5f6-7890-abcd-ef1234567890' (crypto available)\n * // => '1701475200000-x7k9m2' (fallback)\n * ```\n */\nexport function generateId(): string {\n  const cryptoApi = globalThis.crypto as { randomUUID?: () => string } | undefined;\n  if (cryptoApi?.randomUUID) {\n    return cryptoApi.randomUUID();\n  }\n  return `${Date.now()}-${Math.random().toString(RANDOM_ID_RADIX).slice(RANDOM_ID_SLICE_START)}`;\n}\n\n/**\n * Generate a short random ID (8 characters).\n * Useful for correlation IDs, short references, etc.\n *\n * @returns A short random string\n *\n * @example\n * ```typescript\n * const shortId = generateShortId();\n * // => 'x7k9m2ab'\n * ```\n */\nexport function generateShortId(): string {\n  const cryptoApi = globalThis.crypto as { randomUUID?: () => string } | undefined;\n  if (cryptoApi?.randomUUID) {\n    return cryptoApi.randomUUID().replace(/-/g, '').slice(0, SHORT_ID_LENGTH);\n  }\n  return Math.random()\n    .toString(RANDOM_ID_RADIX)\n    .slice(RANDOM_ID_SLICE_START, RANDOM_ID_SLICE_START + SHORT_ID_LENGTH);\n}\n\n/**\n * Generate a correlation ID for tracing.\n * Format: timestamp-randomString\n *\n * @returns A correlation ID string\n *\n * @example\n * ```typescript\n * const correlationId = generateCorrelationId();\n * // => '1701475200000-x7k9m2'\n * ```\n */\nexport function generateCorrelationId(): string {\n  return `${Date.now()}-${generateShortId()}`;\n}\n\n/**\n * Generate a trace ID for distributed tracing (32 hex characters / 128 bits).\n *\n * @returns A 32-character hex string\n *\n * @example\n * ```typescript\n * const traceId = generateTraceId();\n * // => 'a1b2c3d4e5f67890abcdef1234567890'\n * ```\n */\nexport function generateTraceId(): string {\n  const cryptoApi = globalThis.crypto as { randomUUID?: () => string } | undefined;\n  if (cryptoApi?.randomUUID) {\n    // Use two UUIDs without dashes to get 64 hex chars, take first 32\n    return cryptoApi.randomUUID().replace(/-/g, '');\n  }\n  // Fallback: concatenate two random hex strings\n  return (\n    Math.random().toString(HEX_RADIX).substring(HEX_SLICE_START, HEX_SLICE_END) +\n    Math.random().toString(HEX_RADIX).substring(HEX_SLICE_START, HEX_SLICE_END)\n  );\n}\n\n/**\n * Generate a span ID for distributed tracing (16 hex characters / 64 bits).\n *\n * @returns A 16-character hex string\n *\n * @example\n * ```typescript\n * const spanId = generateSpanId();\n * // => 'a1b2c3d4e5f67890'\n * ```\n */\nexport function generateSpanId(): string {\n  const cryptoApi = globalThis.crypto as { randomUUID?: () => string } | undefined;\n  if (cryptoApi?.randomUUID) {\n    // Use UUID without dashes, take first 16 chars\n    return cryptoApi.randomUUID().replace(/-/g, '').substring(0, SPAN_ID_LENGTH);\n  }\n  // Fallback: random hex string\n  return Math.random().toString(HEX_RADIX).substring(HEX_SLICE_START, HEX_SLICE_END);\n}\n\n/**\n * UUID v4 regex pattern.\n * Matches standard UUID format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n */\nconst UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n/**\n * Check if a string is a valid UUID v4.\n *\n * @param value - The string to check\n * @returns true if the string is a valid UUID\n *\n * @example\n * ```typescript\n * isValidUUID('a1b2c3d4-e5f6-4890-abcd-ef1234567890'); // true\n * isValidUUID('not-a-uuid'); // false\n * isValidUUID('bulk-upload-123456'); // false\n * ```\n */\nexport function isValidUUID(value: string | null | undefined): boolean {\n  if (!value) return false;\n  return UUID_REGEX.test(value);\n}\n\n/**\n * ID generation utilities object for convenient access.\n */\nexport const IdUtils = {\n  generate: generateId,\n  generateShort: generateShortId,\n  generateCorrelation: generateCorrelationId,\n  generateTraceId,\n  generateSpanId,\n  isValidUUID,\n} as const;\n","/**\n * Core Event Manager\n *\n * Type-safe event system for the Plyaz ecosystem.\n * Services emit events → Store, API cache, and UI subscribe independently.\n *\n * @example\n * ```typescript\n * import { CoreEventManager, CORE_EVENTS } from '@plyaz/core/events';\n *\n * // Type-safe emission (using CORE_EVENTS constants)\n * CoreEventManager.emit(CORE_EVENTS.API.REQUEST_ERROR, {\n *   method: 'GET',\n *   url: '/api/users',\n *   requestId: '123',\n *   error: new Error('Failed'),\n *   duration: 500,\n * });\n *\n * // Type-safe subscription\n * CoreEventManager.on(CORE_EVENTS.AUTH.LOGIN, (event) => {\n *   console.log(event.data.userId); // Typed!\n * });\n *\n * // Custom events (with generic type)\n * CoreEventManager.emit<MyPayload>('custom:event', { custom: 'data' });\n * ```\n */\n\nimport { EventEmitter } from 'events';\nimport type { CoreEventPayloadMap, CoreEventScopeType, CoreEvent } from '@plyaz/types/core';\nimport { generateCorrelationId } from '../utils/common';\n\n/**\n * Core Event Manager\n *\n * Features:\n * - Type-safe event emission and subscription via CORE_EVENTS constants\n * - Scope-based event filtering\n * - Wildcard subscriptions\n * - Auto cleanup on dispose\n * - Correlation IDs for tracing\n *\n * @example\n * ```typescript\n * import { CoreEventManager, CORE_EVENTS } from '@plyaz/core/events';\n *\n * // Type-safe with CORE_EVENTS\n * CoreEventManager.emit(CORE_EVENTS.AUTH.LOGIN, {\n *   userId: '123',\n *   method: 'email',\n * });\n *\n * CoreEventManager.on(CORE_EVENTS.AUTH.LOGIN, (event) => {\n *   console.log(event.data.userId); // Typed as string!\n * });\n *\n * // Custom events with explicit type\n * interface MyPayload { custom: string }\n * CoreEventManager.emit<MyPayload>('custom:event', { custom: 'data' });\n * ```\n */\n\n// Constants\nconst MAX_EVENT_LISTENERS = 100;\n\nclass CoreEventManagerClass {\n  private emitter = new EventEmitter();\n  private subscriptions = new Map<string, Set<(event: CoreEvent<unknown, string>) => void>>();\n\n  constructor() {\n    // Increase max listeners for large apps\n    this.emitter.setMaxListeners(MAX_EVENT_LISTENERS);\n  }\n\n  /**\n   * Emit an event\n   *\n   * @param eventType - Event type from CORE_EVENTS or custom string\n   * @param data - Event payload (type-safe when using CORE_EVENTS)\n   *\n   * @example\n   * ```typescript\n   * // Type-safe with CORE_EVENTS\n   * CoreEventManager.emit(CORE_EVENTS.AUTH.LOGIN, { userId: '123', method: 'email' });\n   *\n   * // Custom event\n   * CoreEventManager.emit<MyPayload>('custom:event', { custom: 'data' });\n   * ```\n   */\n  emit<T extends keyof CoreEventPayloadMap>(eventType: T, data: CoreEventPayloadMap[T]): boolean;\n  emit<TData = unknown>(eventType: string, data?: TData): boolean;\n  emit<TData = unknown>(eventType: string, data?: TData): boolean {\n    const [scope] = eventType.split(':');\n    const event: CoreEvent<TData, string> = {\n      type: eventType,\n      scope: scope ?? 'system',\n      timestamp: Date.now(),\n      correlationId: this.getCorrelationId(),\n      data: data as TData,\n    };\n\n    // Emit to specific listeners\n    this.emitter.emit(eventType, event);\n\n    // Emit to wildcard listeners\n    this.emitter.emit('*', event);\n\n    return true;\n  }\n\n  /**\n   * Subscribe to an event\n   *\n   * @param eventType - Event type from CORE_EVENTS or custom string\n   * @param handler - Event handler (type-safe when using CORE_EVENTS)\n   * @returns Unsubscribe function\n   *\n   * @example\n   * ```typescript\n   * // Type-safe with CORE_EVENTS\n   * const unsub = CoreEventManager.on(CORE_EVENTS.AUTH.LOGIN, (event) => {\n   *   console.log(event.data.userId); // Typed!\n   * });\n   *\n   * // Custom event\n   * CoreEventManager.on<MyPayload>('custom:event', (event) => {\n   *   console.log(event.data.custom);\n   * });\n   * ```\n   */\n  on<T extends keyof CoreEventPayloadMap>(\n    eventType: T,\n    handler: (event: CoreEvent<CoreEventPayloadMap[T], CoreEventScopeType>) => void\n  ): () => void;\n  on<TData = unknown, TScope extends string = string>(\n    eventType: string,\n    handler: (event: CoreEvent<TData, TScope>) => void\n  ): () => void;\n  on<TData = unknown, TScope extends string = string>(\n    eventType: string,\n    handler: (event: CoreEvent<TData, TScope>) => void\n  ): () => void {\n    this.emitter.on(eventType, handler as (event: CoreEvent<unknown, string>) => void);\n\n    // Track for cleanup\n    if (!this.subscriptions.has(eventType)) {\n      this.subscriptions.set(eventType, new Set());\n    }\n    this.subscriptions.get(eventType)!.add(handler as (event: CoreEvent<unknown, string>) => void);\n\n    // Return unsubscribe function\n    return () => {\n      this.emitter.off(eventType, handler as (event: CoreEvent<unknown, string>) => void);\n      this.subscriptions\n        .get(eventType)\n        ?.delete(handler as (event: CoreEvent<unknown, string>) => void);\n    };\n  }\n\n  /**\n   * Subscribe once to an event\n   *\n   * @param eventType - Event type from CORE_EVENTS or custom string\n   * @param handler - Event handler\n   * @returns Unsubscribe function\n   */\n  once<T extends keyof CoreEventPayloadMap>(\n    eventType: T,\n    handler: (event: CoreEvent<CoreEventPayloadMap[T], CoreEventScopeType>) => void\n  ): () => void;\n  once<TData = unknown, TScope extends string = string>(\n    eventType: string,\n    handler: (event: CoreEvent<TData, TScope>) => void\n  ): () => void;\n  once<TData = unknown, TScope extends string = string>(\n    eventType: string,\n    handler: (event: CoreEvent<TData, TScope>) => void\n  ): () => void {\n    const wrappedHandler = (event: CoreEvent<TData, TScope>): void => {\n      handler(event);\n      this.emitter.off(eventType, wrappedHandler as (event: CoreEvent<unknown, string>) => void);\n      this.subscriptions\n        .get(eventType)\n        ?.delete(wrappedHandler as (event: CoreEvent<unknown, string>) => void);\n    };\n\n    this.emitter.on(eventType, wrappedHandler as (event: CoreEvent<unknown, string>) => void);\n\n    // Track for cleanup\n    if (!this.subscriptions.has(eventType)) {\n      this.subscriptions.set(eventType, new Set());\n    }\n    this.subscriptions\n      .get(eventType)!\n      .add(wrappedHandler as (event: CoreEvent<unknown, string>) => void);\n\n    // Return unsubscribe function\n    return () => {\n      this.emitter.off(eventType, wrappedHandler as (event: CoreEvent<unknown, string>) => void);\n      this.subscriptions\n        .get(eventType)\n        ?.delete(wrappedHandler as (event: CoreEvent<unknown, string>) => void);\n    };\n  }\n\n  /**\n   * Subscribe to all events in a scope\n   *\n   * @param scope - Event scope to listen to (e.g., CoreEventScope.AUTH)\n   * @param handler - Event handler\n   * @returns Unsubscribe function\n   *\n   * @example\n   * ```typescript\n   * CoreEventManager.onScope(CoreEventScope.AUTH, (event) => {\n   *   // Handles auth:login, auth:logout, auth:tokenRefresh, etc.\n   *   console.log(`Auth event: ${event.type}`, event.data);\n   * });\n   * ```\n   */\n  onScope<TScope extends string = string, TData = unknown>(\n    scope: TScope,\n    handler: (event: CoreEvent<TData, TScope>) => void\n  ): () => void {\n    const wrappedHandler = (event: CoreEvent<TData, TScope>): void => {\n      if (event.scope === scope) {\n        handler(event);\n      }\n    };\n    return this.on('*', wrappedHandler as (event: CoreEvent<unknown, string>) => void);\n  }\n\n  /**\n   * Remove a specific handler from an event\n   *\n   * @param eventType - Event type\n   * @param handler - Handler to remove\n   */\n  off<TData = unknown, TScope extends string = string>(\n    eventType: string,\n    handler: (event: CoreEvent<TData, TScope>) => void\n  ): void {\n    this.emitter.off(eventType, handler as (event: CoreEvent<unknown, string>) => void);\n    this.subscriptions\n      .get(eventType)\n      ?.delete(handler as (event: CoreEvent<unknown, string>) => void);\n  }\n\n  /**\n   * Dispose all subscriptions\n   */\n  dispose(): void {\n    this.subscriptions.forEach((handlers, eventType) => {\n      handlers.forEach(handler => this.emitter.off(eventType, handler));\n    });\n    this.subscriptions.clear();\n    this.emitter.removeAllListeners();\n  }\n\n  /**\n   * Generate correlation ID for event tracing\n   */\n  private getCorrelationId(): string {\n    return generateCorrelationId();\n  }\n}\n\n/**\n * Global Singleton Pattern using globalThis\n *\n * WHY THIS IS NEEDED:\n * In Next.js (and similar frameworks with module isolation), different parts of the application\n * can have separate module instances. For example:\n * - API routes may run in isolated module contexts\n * - Hot Module Replacement (HMR) during development creates new module instances\n * - Server Components vs API routes may have different module caches\n *\n * This causes a critical issue: if CoreEventManager is instantiated as a simple module-level\n * singleton (`export const X = new XClass()`), each isolated context gets its OWN instance.\n * Events emitted in one context (e.g., API route) won't reach listeners in another context\n * (e.g., streaming endpoints).\n *\n * THE SOLUTION:\n * Using `globalThis` with `Symbol.for()` ensures a TRUE singleton across all module boundaries:\n * - `globalThis` is the global object in any JavaScript environment (Node.js, browsers, workers)\n * - `Symbol.for('key')` returns the SAME symbol from the global symbol registry, even across\n *   different module instances\n * - This combination guarantees ONE instance per process, regardless of how many times the\n *   module is loaded\n *\n * WORKS WITH:\n * - Next.js (API routes, server components, middleware)\n * - Express/NestJS/Fastify (single process, but safe for hot reload)\n * - Bun/Deno (same globalThis semantics)\n *\n * DOES NOT HELP WITH:\n * - Truly isolated serverless functions (each invocation = new process)\n * - Multi-process clusters (need Redis pub/sub or similar for cross-process events)\n */\nconst GLOBAL_KEY = Symbol.for('plyaz.CoreEventManager');\n\nfunction getCoreEventManager(): CoreEventManagerClass {\n  const globalAny = globalThis as unknown as { [key: symbol]: CoreEventManagerClass };\n\n  if (!globalAny[GLOBAL_KEY]) {\n    globalAny[GLOBAL_KEY] = new CoreEventManagerClass();\n  }\n\n  return globalAny[GLOBAL_KEY];\n}\n\nexport const CoreEventManager = getCoreEventManager();\n","/**\n * API Client Singleton Service (@plyaz/core)\n * Manages the API client with environment-specific configurations and intelligent defaults\n *\n * The app reads process.env and constructs ApiClientOptions, then passes to this service.\n * Service never touches process.env directly - all env reading happens in the app layer.\n *\n * @module services/ApiClientService\n */\n\n// Imports from @plyaz/api (dependency)\nimport { createApiClient, mergeConfigs, setDefaultApiClient } from '@plyaz/api/frontend';\nimport type { ApiClientWithEvents, ApiClientOptions, ApiConfig } from '@plyaz/types/api';\nimport { type ClientEventManager, type EndpointsList, ApiPackageError } from '@plyaz/api/frontend';\nimport { PRODUCTION_CONFIG, STAGING_CONFIG, DEVELOPMENT_CONFIG } from '@plyaz/config';\nimport {\n  API_ERROR_CODES,\n  PACKAGE_STATUS_CODES,\n  OPERATIONS,\n  ERROR_CODES,\n  ERROR_CATEGORY,\n  HTTP_STATUS,\n  CORE_EVENTS,\n} from '@plyaz/types';\nimport type { CoreApiRequestErrorPayload, CoreApiEnvironmentConfig } from '@plyaz/types/core';\nimport { CoreEventManager } from '../events/CoreEventManager';\nimport { generateRequestId } from '@plyaz/errors';\nimport type { ResponseError } from 'fetchff';\n// Note: Root store is injected by Core.initialize(), not created here\n\n/**\n * Minimum retry attempts recommended for production environments\n *\n * Production services should have sufficient retries to handle transient failures\n * while maintaining acceptable response times for end users.\n *\n * @constant\n * @default 3\n */\nconst MIN_RETRY_ATTEMPTS_PRODUCTION = 3;\n\n/**\n * Get configuration based on environment\n *\n * Returns environment-specific defaults that will be merged with user configuration.\n * Each environment has optimized settings for its use case:\n *\n * - **Production**: Aggressive retries (5), encryption required, telemetry enabled\n * - **Staging**: Mirrors production for accurate pre-deployment testing\n * - **Development/Test**: Conservative retries (1), encryption optional, full debug mode\n *\n * These defaults come from `@plyaz/config` and can be overridden via the `apiConfig` parameter.\n *\n * @param env - Environment name determining which defaults to apply\n * @returns Environment-specific configuration from @plyaz/config\n *\n * @example\n * ```typescript\n * const prodDefaults = getConfigForEnvironment('production');\n * // Returns PRODUCTION_CONFIG with aggressive retries, encryption, etc.\n *\n * const devDefaults = getConfigForEnvironment('development');\n * // Returns DEVELOPMENT_CONFIG with conservative retries, no encryption\n * ```\n *\n * @see {@link CoreApiEnvironmentConfig.env} - Environment types\n * @internal\n */\nfunction getConfigForEnvironment(env: CoreApiEnvironmentConfig['env']): Partial<ApiConfig> {\n  switch (env) {\n    case 'production':\n      return PRODUCTION_CONFIG as Partial<ApiConfig>;\n    case 'staging':\n      return STAGING_CONFIG as Partial<ApiConfig>;\n    case 'development':\n    case 'test':\n    default:\n      return DEVELOPMENT_CONFIG as Partial<ApiConfig>;\n  }\n}\n\n/**\n * Validate base URL requirement\n *\n * Ensures that a baseURL is provided in the configuration. The baseURL is mandatory\n * for all API clients as it defines where requests should be sent.\n *\n * @param mergedConfig - Merged configuration after applying all defaults\n * @param errors - Error array to append validation errors to\n *\n * @example\n * ```typescript\n * const errors: string[] = [];\n * validateBaseURL(mergedConfig, errors);\n *\n * if (errors.length > 0) {\n *   // baseURL is missing\n * }\n * ```\n *\n * @internal\n */\nfunction validateBaseURL(mergedConfig: ApiClientOptions, errors: string[]): void {\n  // Allow empty string '' for same-origin requests (e.g., Next.js API routes on same host)\n  // Only require baseURL when it's undefined or null\n  if (mergedConfig.baseURL === undefined || mergedConfig.baseURL === null) {\n    errors.push('baseURL is required in API configuration (apiConfig parameter)');\n  }\n}\n\n/**\n * Validate production encryption configuration\n *\n * Production environments MUST have encryption properly configured to protect sensitive data.\n * This function validates that:\n * - If encryption is enabled, an encryption key MUST be provided\n * - If encryption is disabled, a security warning is issued\n *\n * **Why encryption is required in production**:\n * - Compliance: GDPR, CCPA, PIPL, HIPAA regulations require data protection\n * - Security: Protects PII, payment info, health data, crypto wallet addresses\n * - 50+ sensitive field patterns: email, SSN, card numbers, API keys, etc.\n *\n * @param mergedConfig - Merged configuration after applying all defaults\n * @param errors - Error array to append critical validation errors to\n * @param warnings - Warning array to append non-critical warnings to\n *\n * @example\n * ```typescript\n * const errors: string[] = [];\n * const warnings: string[] = [];\n *\n * validateProductionEncryption(mergedConfig, errors, warnings);\n *\n * // If encryption enabled but no key:\n * // errors = ['encryption.key is REQUIRED when encryption is enabled in production...']\n *\n * // If encryption disabled:\n * // warnings = ['[SECURITY WARNING] Encryption is disabled in production...']\n * ```\n *\n * @internal\n */\nfunction validateProductionEncryption(\n  mergedConfig: ApiClientOptions,\n  errors: string[],\n  warnings: string[]\n): void {\n  if (mergedConfig.encryption?.enabled) {\n    if (!mergedConfig.encryption?.key) {\n      errors.push(\n        'encryption.key is REQUIRED when encryption is enabled in production. ' +\n          'Pass it in apiConfig: { encryption: { key: { id: \"prod-key-v1\", key: process.env.ENCRYPTION_KEY!, algorithm: \"AES-GCM\", format: \"raw\" } } }'\n      );\n    }\n  } else {\n    warnings.push(\n      '[SECURITY WARNING] Encryption is disabled in production. ' +\n        'This is not recommended for handling sensitive data (PII, payment info, etc.).'\n    );\n  }\n}\n\n/**\n * Validate production performance settings\n *\n * Validates production configuration for optimal performance, reliability, and monitoring:\n * - **Network-aware features**: Adapts to varying network conditions for better UX\n * - **Telemetry**: Required for production monitoring and alerting\n * - **Retry attempts**: Minimum 3 retries recommended for reliability\n *\n * These are warnings (not errors) as they don't prevent the client from working,\n * but indicate suboptimal production configuration.\n *\n * @param mergedConfig - Merged configuration after applying all defaults\n * @param warnings - Warning array to append performance warnings to\n *\n * @example\n * ```typescript\n * const warnings: string[] = [];\n * validateProductionPerformance(mergedConfig, warnings);\n *\n * // Possible warnings:\n * // - '[PERFORMANCE WARNING] networkAware is disabled in production...'\n * // - '[MONITORING WARNING] telemetry is disabled in production...'\n * // - '[RELIABILITY WARNING] Only 1 retry attempts configured...'\n * ```\n *\n * @internal\n */\nfunction validateProductionPerformance(mergedConfig: ApiClientOptions, warnings: string[]): void {\n  if (!mergedConfig.networkAware?.enabled) {\n    warnings.push(\n      '[PERFORMANCE WARNING] networkAware is disabled in production. ' +\n        'Enable it for better user experience on varying network conditions.'\n    );\n  }\n\n  if (!mergedConfig.tracking?.telemetry) {\n    warnings.push(\n      '[MONITORING WARNING] telemetry is disabled in production. ' +\n        'Enable it for production monitoring and alerting.'\n    );\n  }\n\n  if (\n    mergedConfig.retry &&\n    mergedConfig.retry.attempts !== undefined &&\n    mergedConfig.retry.attempts < MIN_RETRY_ATTEMPTS_PRODUCTION\n  ) {\n    warnings.push(\n      `[RELIABILITY WARNING] Only ${mergedConfig.retry.attempts} retry attempts configured. ` +\n        'Consider increasing to 3-5 for better reliability in production.'\n    );\n  }\n}\n\n/**\n * Validate staging encryption configuration\n *\n * Staging environments should mirror production configuration for accurate pre-deployment testing.\n * This function validates:\n * - If encryption is enabled, an encryption key MUST be provided (same as production)\n * - If encryption is disabled, issues a warning (staging should match production)\n * - Telemetry should be enabled to test monitoring before production\n *\n * **Why staging should mirror production**:\n * - Catches configuration issues before they reach production\n * - Tests encryption/decryption with real-world-like data\n * - Validates monitoring and alerting pipelines\n *\n * @param mergedConfig - Merged configuration after applying all defaults\n * @param errors - Error array to append critical validation errors to\n * @param warnings - Warning array to append configuration warnings to\n *\n * @example\n * ```typescript\n * const errors: string[] = [];\n * const warnings: string[] = [];\n *\n * validateStagingEncryption(mergedConfig, errors, warnings);\n *\n * // If encryption enabled but no key:\n * // errors = ['encryption.key is REQUIRED in staging (aligned with production)...']\n *\n * // If encryption or telemetry disabled:\n * // warnings = ['[SECURITY WARNING] Encryption is disabled in staging...']\n * ```\n *\n * @internal\n */\nfunction validateStagingEncryption(\n  mergedConfig: ApiClientOptions,\n  errors: string[],\n  warnings: string[]\n): void {\n  if (mergedConfig.encryption?.enabled) {\n    if (!mergedConfig.encryption?.key) {\n      errors.push(\n        'encryption.key is REQUIRED in staging (aligned with production). ' +\n          'Pass it in apiConfig: { encryption: { key: { id: \"staging-key-v1\", key: process.env.ENCRYPTION_KEY!, algorithm: \"AES-GCM\", format: \"raw\" } } }'\n      );\n    }\n  } else {\n    warnings.push(\n      '[SECURITY WARNING] Encryption is disabled in staging. ' +\n        'Staging should mirror production for accurate testing.'\n    );\n  }\n\n  if (!mergedConfig.tracking?.telemetry) {\n    warnings.push(\n      '[MONITORING WARNING] telemetry is disabled in staging. ' +\n        'Enable it to test monitoring before production deployment.'\n    );\n  }\n}\n\n/**\n * Validate development encryption configuration\n *\n * Development environments have more relaxed requirements to facilitate rapid development:\n * - Encryption is OPTIONAL (enabled flag can be true, but key is not required)\n * - When encryption is enabled without a key, issues an informational warning\n *\n * **Why encryption is optional in development**:\n * - Faster iteration without needing to manage encryption keys\n * - Easier debugging of request/response payloads\n * - Test data typically doesn't contain real sensitive information\n *\n * @param mergedConfig - Merged configuration after applying all defaults\n * @param warnings - Warning array to append informational messages to\n *\n * @example\n * ```typescript\n * const warnings: string[] = [];\n * validateDevelopmentEncryption(mergedConfig, warnings);\n *\n * // If encryption enabled without key:\n * // warnings = ['[DEV INFO] Encryption is enabled but no key provided...']\n * ```\n *\n * @internal\n */\nfunction validateDevelopmentEncryption(mergedConfig: ApiClientOptions, warnings: string[]): void {\n  if (mergedConfig.encryption?.enabled && !mergedConfig.encryption?.key) {\n    warnings.push(\n      '[DEV INFO] Encryption is enabled but no key provided in apiConfig. ' +\n        'Encryption will be skipped in development (this is normal).'\n    );\n  }\n}\n\n/**\n * Map environment metadata to API configuration structure\n *\n * Converts environment-level metadata from `CoreApiEnvironmentConfig` into `ApiConfig` format\n * that can be merged with other configurations. Currently maps:\n *\n * - **apiKey**: Converted to static header `X-API-Key`\n * - **rateLimit**: Reserved for future use (not currently mapped)\n *\n * **Note**: This mapping is applied AFTER environment defaults but BEFORE user-provided\n * apiConfig, giving it medium priority in the configuration merge hierarchy.\n *\n * @param envConfig - Environment configuration containing metadata\n * @param envDefaults - Environment-specific defaults from @plyaz/config\n * @returns Partial API configuration with mapped environment metadata\n *\n * @example\n * ```typescript\n * const envConfig = { env: 'production', apiKey: 'my-api-key' };\n * const envDefaults = PRODUCTION_CONFIG;\n *\n * const mapped = mapEnvironmentMetadata(envConfig, envDefaults);\n * // Returns: { headers: { static: { 'X-API-Key': 'my-api-key' } } }\n * ```\n *\n * @see {@link CoreApiEnvironmentConfig} - Environment configuration interface\n * @internal\n */\nfunction mapEnvironmentMetadata(\n  envConfig: CoreApiEnvironmentConfig,\n  envDefaults: Partial<ApiConfig>\n): Partial<ApiConfig> {\n  const mapped: Partial<ApiConfig> = {};\n\n  // Add API key to headers if provided\n  if (envConfig.apiKey) {\n    // Extract existing static headers if headers is an object with static property\n    const existingStatic =\n      envDefaults.headers &&\n      typeof envDefaults.headers === 'object' &&\n      'static' in envDefaults.headers &&\n      typeof envDefaults.headers.static === 'object'\n        ? envDefaults.headers.static\n        : {};\n\n    mapped.headers = {\n      static: { ...(existingStatic ?? {}), 'X-API-Key': envConfig.apiKey },\n    };\n  }\n\n  // Note: rateLimit from envConfig is not mapped to ApiConfig\n  // Rate limiting is typically handled at the server/API gateway level\n  // If needed in the future, it should be added to ApiConfig interface first\n\n  return mapped;\n}\n\n/**\n * Apply default client setting to @plyaz/api services and hooks\n *\n * Conditionally calls `setDefaultApiClient()` based on the `setAsDefault` flag in environment config.\n * When enabled, all services and hooks from @plyaz/api will automatically use this client instance\n * without needing to pass it explicitly via `ServiceOptions.apiClient`.\n *\n * **Default behavior**: If `setAsDefault` is not specified, it defaults to `true`.\n *\n * **Use cases**:\n * - `true` (default): Single API client for the entire application (recommended for most apps)\n * - `false`: Multiple API clients (main API, analytics API, etc.) or testing scenarios\n *\n * @param client - The API client instance to set as default\n * @param envConfig - Environment configuration containing the setAsDefault flag\n *\n * @example\n * ```typescript\n * const client = await createApiClient(config);\n * const envConfig = { env: 'production', setAsDefault: true };\n *\n * applyDefaultClientSetting(client, envConfig);\n * // Now all @plyaz/api services use this client automatically\n *\n * const campaigns = await fetchCampaigns({ page: 1 });\n * // No need to pass apiClient - uses the default\n * ```\n *\n * @example\n * ```typescript\n * // Multiple clients scenario\n * const mainClient = await createApiClient(mainConfig);\n * const analyticsClient = await createApiClient(analyticsConfig);\n *\n * applyDefaultClientSetting(mainClient, { env: 'production', setAsDefault: true });\n * applyDefaultClientSetting(analyticsClient, { env: 'production', setAsDefault: false });\n *\n * // Main API uses default\n * const campaigns = await fetchCampaigns({ page: 1 });\n *\n * // Analytics API must be passed explicitly\n * const analytics = await fetchAnalytics(\n *   { date: '2025-10-16' },\n *   { apiClient: analyticsClient }\n * );\n * ```\n *\n * @see {@link CoreApiEnvironmentConfig.setAsDefault} - Flag documentation\n * @see {@link ServiceOptions.apiClient} - How to override the default client\n * @internal\n */\nfunction applyDefaultClientSetting(\n  client: ApiClientWithEvents<ClientEventManager, EndpointsList>,\n  envConfig: CoreApiEnvironmentConfig\n): void {\n  const shouldSetAsDefault = envConfig.setAsDefault !== false;\n  if (shouldSetAsDefault) {\n    setDefaultApiClient(client);\n  }\n}\n\n/**\n * Validate environment configuration for production readiness.\n * Ensures critical settings are properly configured based on environment.\n *\n * @param envConfig - Environment configuration\n * @param mergedConfig - Merged configuration after applying all defaults\n * @throws {ApiPackageError} If validation fails\n */\nfunction validateEnvironmentConfig(\n  envConfig: CoreApiEnvironmentConfig,\n  mergedConfig: ApiClientOptions\n): void {\n  const errors: string[] = [];\n  const warnings: string[] = [];\n\n  // Validate required base URL\n  validateBaseURL(mergedConfig, errors);\n\n  // Environment-specific validation\n  if (envConfig.env === 'production') {\n    validateProductionEncryption(mergedConfig, errors, warnings);\n    validateProductionPerformance(mergedConfig, warnings);\n  } else if (envConfig.env === 'staging') {\n    validateStagingEncryption(mergedConfig, errors, warnings);\n  } else if (envConfig.env === 'development') {\n    validateDevelopmentEncryption(mergedConfig, warnings);\n  }\n\n  // Log warnings (intentional console usage for config validation)\n  if (warnings.length > 0) {\n    globalThis.console.warn('[ApiClientService] Configuration warnings:', warnings);\n  }\n\n  // Throw if there are errors\n  if (errors.length > 0) {\n    throw new ApiPackageError(\n      'service.validation.failed',\n      PACKAGE_STATUS_CODES.INVALID_CONFIGURATION,\n      API_ERROR_CODES.CONFIG_VALIDATION_FAILED,\n      {\n        context: {\n          operation: OPERATIONS.VALIDATION,\n          // Ensure error details conform to ErrorDetail shape (include errorCode)\n          errors: errors.map(err => ({\n            field: 'config',\n            message: err,\n            errorCode: String(API_ERROR_CODES.CONFIG_VALIDATION_FAILED),\n          })),\n          i18n: {\n            errors: errors.join('; '),\n            warnings: warnings.join('; '),\n          },\n        },\n      }\n    );\n  }\n}\n\n/**\n * API Client Singleton Service\n * Manages API client instance lifecycle with environment-specific configurations\n *\n * @example\n * ```typescript\n * // In your app initialization (Next.js, React, etc.)\n * import { ApiClientService } from '@plyaz/core';\n *\n * // Environment metadata\n * const envConfig = {\n *   env: process.env.NODE_ENV as 'production',\n *   apiKey: process.env.API_KEY,\n * };\n *\n * // API configuration with event handlers\n * await ApiClientService.init(envConfig, {\n *   baseURL: process.env.API_URL!,\n *   encryption: {\n *     key: {\n *       id: 'prod-key-v1',\n *       key: process.env.ENCRYPTION_KEY!,\n *       algorithm: 'AES-GCM'\n *     }\n *   },\n *   clientEvents: {\n *     onRequestStart: (event) => apiStore.trackRequest(event),\n *   },\n * });\n *\n * // Later, anywhere in your app\n * const client = ApiClientService.getClient();\n * ```\n */\n/**\n * Global Singleton Pattern using globalThis\n *\n * @see CoreEventManager.ts for detailed explanation of why this pattern is needed.\n *\n * TL;DR: In Next.js and similar frameworks, module isolation can create multiple singleton\n * instances. Using globalThis + Symbol.for() ensures ONE instance per process, preventing\n * issues like multiple API client instances with different configurations across API routes.\n */\ninterface ApiClientServiceState {\n  instance: ApiClientWithEvents<ClientEventManager, EndpointsList> | null;\n  isInitializing: boolean;\n  initPromise: Promise<void> | null;\n}\n\nconst API_CLIENT_SERVICE_KEY = Symbol.for('plyaz.ApiClientService');\n\nfunction getApiClientServiceState(): ApiClientServiceState {\n  const globalAny = globalThis as unknown as { [key: symbol]: ApiClientServiceState };\n  if (!globalAny[API_CLIENT_SERVICE_KEY]) {\n    globalAny[API_CLIENT_SERVICE_KEY] = {\n      instance: null,\n      isInitializing: false,\n      initPromise: null,\n    };\n  }\n  return globalAny[API_CLIENT_SERVICE_KEY];\n}\n\nexport class ApiClientService {\n  // State accessors using globalThis\n  private static get instance(): ApiClientWithEvents<ClientEventManager, EndpointsList> | null {\n    return getApiClientServiceState().instance;\n  }\n  private static set instance(\n    value: ApiClientWithEvents<ClientEventManager, EndpointsList> | null\n  ) {\n    getApiClientServiceState().instance = value;\n  }\n  private static get isInitializing(): boolean {\n    return getApiClientServiceState().isInitializing;\n  }\n  private static set isInitializing(value: boolean) {\n    getApiClientServiceState().isInitializing = value;\n  }\n  private static get initPromise(): Promise<void> | null {\n    return getApiClientServiceState().initPromise;\n  }\n  private static set initPromise(value: Promise<void> | null) {\n    getApiClientServiceState().initPromise = value;\n  }\n\n  /**\n   * Build the core error handler for API clients.\n   * This handler emits errors to CoreEventManager for global error handling.\n   *\n   * Handles:\n   * - Single errors (network, timeout)\n   * - Array of errors from API responses (validation, business logic)\n   * - Serialization to unified SerializedError format\n   * - Event emission to CORE_EVENTS.SYSTEM.ERROR and CORE_EVENTS.API.REQUEST_ERROR\n   *\n   * @returns Error handler function compatible with ApiClientOptions.onError\n   */\n\n  static buildCoreErrorHandler(): (\n    error: ResponseError<unknown, unknown, unknown, unknown>\n  ) => Promise<void> {\n    // eslint-disable-next-line complexity\n    return async (error: ResponseError<unknown, unknown, unknown, unknown>): Promise<void> => {\n      const requestId = generateRequestId();\n      const method = error.config?.method ?? 'UNKNOWN';\n      const url = error.config?.url ?? 'unknown';\n\n      // CRITICAL: Emit error event to Core\n      // Core will handle updating the appropriate store based on runtime context:\n      // - Backend: In-memory store (ServerErrorMiddleware)\n      // - Frontend: Zustand store (useRootStore)\n      try {\n        // API returns ErrorResponse (array of error details)\n        const errorDetails = Array.isArray(error.response?.data) ? error.response.data : [];\n\n        // If no error details from API, create a fallback error\n        if (errorDetails.length === 0) {\n          const serializedError = {\n            id: requestId,\n            code: ERROR_CODES.CORE_API_CLIENT_REQUEST_FAILED,\n            message: error.message ?? 'API request failed',\n            status: error.status,\n            category: ERROR_CATEGORY.Network,\n            timestamp: new Date().toISOString(),\n            isRetryable: error.status ? error.status >= HTTP_STATUS.INTERNAL_SERVER_ERROR : false,\n            source: 'api-client',\n            dismissed: false,\n            context: {\n              method,\n              url,\n              requestId,\n            },\n          };\n\n          // Emit single error to Core\n          CoreEventManager.emit(CORE_EVENTS.SYSTEM.ERROR, { errors: [serializedError] });\n        } else {\n          // Convert ErrorResponse (API error details array) to SerializedError[]\n          const serializedErrors = errorDetails.map(\n            (detail: Record<string, unknown>, index: number) => ({\n              id: `${requestId}-${index}`,\n              code: (detail.errorCode as string) ?? ERROR_CODES.CORE_API_CLIENT_REQUEST_FAILED,\n              message: (detail.message as string) ?? error.message ?? 'API request failed',\n              status: error.status,\n              category: ERROR_CATEGORY.Network,\n              timestamp: new Date().toISOString(),\n              isRetryable: error.status ? error.status >= HTTP_STATUS.INTERNAL_SERVER_ERROR : false,\n              source: 'api-client',\n              dismissed: false,\n              context: {\n                method,\n                url,\n                requestId,\n                field: detail.field as string | undefined,\n                valueGiven: detail.valueGiven,\n                allowedValues: detail.allowedValues,\n                constraints: detail.constraints,\n              },\n            })\n          );\n\n          // Emit array of errors to Core\n          CoreEventManager.emit(CORE_EVENTS.SYSTEM.ERROR, { errors: serializedErrors });\n        }\n      } catch (e) {\n        // If event emission fails, log but don't break the error flow\n        console.error('[ApiClientService] Failed to emit error event:', e);\n      }\n\n      // Also emit API-specific error event for logging, monitoring, etc.\n      ApiClientService.emitApiError(error, {\n        method,\n        url,\n        requestId,\n        status: error.status,\n        duration: 0,\n      });\n    };\n  }\n\n  /**\n   * Initialize the API client with environment config and API options\n   *\n   * @param envConfig - Environment metadata (env, apiKey)\n   * @param apiConfig - API configuration (baseURL, encryption, timeout, event handlers, etc.)\n   * @returns Promise that resolves to the initialized client\n   */\n  static async init(\n    envConfig: CoreApiEnvironmentConfig,\n    apiConfig?: Partial<ApiClientOptions>\n  ): Promise<ApiClientWithEvents<ClientEventManager, EndpointsList>> {\n    // If already initialized, return existing instance\n    if (this.instance) {\n      globalThis.console.warn(\n        '[ApiClientService] Client already initialized. Returning existing instance.'\n      );\n      return this.instance;\n    }\n\n    // If currently initializing, wait for that to complete\n    if (this.isInitializing && this.initPromise) {\n      await this.initPromise;\n      return this.instance!;\n    }\n\n    // Start initialization\n    this.isInitializing = true;\n    this.initPromise = this.createClient(envConfig, apiConfig);\n\n    try {\n      await this.initPromise;\n      return this.instance!;\n    } finally {\n      this.isInitializing = false;\n      this.initPromise = null;\n    }\n  }\n\n  /**\n   * Internal initialization logic\n   * Merges environment-specific defaults with API configuration\n   *\n   * Merge Priority (lowest to highest):\n   * 1. Environment defaults (PRODUCTION_CONFIG / STAGING_CONFIG / DEVELOPMENT_CONFIG)\n   * 2. Environment metadata (envConfig - apiKey)\n   * 3. API configuration (apiConfig - baseURL, encryption, timeout, etc.)\n   */\n  // eslint-disable-next-line complexity\n  private static async createClient(\n    envConfig: CoreApiEnvironmentConfig,\n    apiConfig?: Partial<ApiClientOptions>\n  ): Promise<void> {\n    try {\n      // Step 1: Get environment-specific defaults based on env\n      const envDefaults = getConfigForEnvironment(envConfig.env);\n\n      // Step 2: Build config from envConfig (environment metadata only)\n      const envMetadataMapped = mapEnvironmentMetadata(envConfig, envDefaults);\n\n      // Step 3: Get the core error handler (handles single + array errors, emits to Core)\n      const coreErrorHandler = ApiClientService.buildCoreErrorHandler();\n\n      // Step 4: Merge with priority: envDefaults → envMetadata → apiConfig → coreErrorHandler\n      const userOnError = apiConfig?.onError;\n      const combinedOnError = userOnError\n        ? Array.isArray(userOnError)\n          ? [...userOnError, coreErrorHandler]\n          : [userOnError, coreErrorHandler]\n        : coreErrorHandler;\n\n      const mergedOptions = mergeConfigs(\n        envDefaults, // Environment defaults (lowest priority)\n        envMetadataMapped, // Environment metadata (medium priority)\n        { ...(apiConfig ?? {}), onError: combinedOnError } // API configuration + core error handler\n      ) as ApiClientOptions;\n\n      // Step 5: Validate the merged configuration\n      validateEnvironmentConfig(envConfig, mergedOptions);\n\n      // Step 6: Create the client instance with merged configuration\n      this.instance = await createApiClient(mergedOptions);\n\n      // Step 6: Set as default client for @plyaz/api services and hooks (if enabled)\n      applyDefaultClientSetting(this.instance, envConfig);\n    } catch (error) {\n      throw new ApiPackageError(\n        'service.initialization.failed',\n        PACKAGE_STATUS_CODES.INITIALIZATION_FAILED,\n        API_ERROR_CODES.CLIENT_INITIALIZATION_FAILED,\n        {\n          cause: error instanceof Error ? error : undefined,\n          context: {\n            operation: OPERATIONS.INITIALIZATION,\n            originalError: error instanceof Error ? error.message : String(error),\n            i18n: {\n              error: error instanceof Error ? error.message : String(error),\n            },\n          },\n        }\n      );\n    }\n  }\n\n  /**\n   * Get the initialized client instance\n   *\n   * @throws {ApiPackageError} If client not initialized\n   */\n  static getClient(): ApiClientWithEvents<ClientEventManager, EndpointsList> {\n    if (!this.instance) {\n      throw new ApiPackageError(\n        'service.not_initialized',\n        PACKAGE_STATUS_CODES.INITIALIZATION_FAILED,\n        API_ERROR_CODES.CLIENT_INITIALIZATION_FAILED,\n        {\n          context: {\n            operation: OPERATIONS.INITIALIZATION,\n            i18n: {\n              hint: 'Call ApiClientService.init(envConfig, apiConfig) before accessing the client',\n            },\n          },\n        }\n      );\n    }\n    return this.instance;\n  }\n\n  /**\n   * Check if client is initialized\n   */\n  static isInitialized(): boolean {\n    return this.instance !== null;\n  }\n\n  /**\n   * Reinitialize with new config and options\n   */\n  static async reinitialize(\n    envConfig: CoreApiEnvironmentConfig,\n    apiConfig?: Partial<ApiClientOptions>\n  ): Promise<ApiClientWithEvents<ClientEventManager, EndpointsList>> {\n    this.dispose();\n    return this.init(envConfig, apiConfig);\n  }\n\n  /**\n   * Dispose of the client instance\n   */\n  static dispose(): void {\n    if (this.instance && 'dispose' in this.instance) {\n      this.instance.dispose?.();\n    }\n    this.instance = null;\n    this.isInitializing = false;\n    this.initPromise = null;\n  }\n\n  /**\n   * Emits an API error event via CoreEventManager.\n   * Called when API operations fail to integrate with global error handling.\n   *\n   * **CRITICAL**: This event emission triggers automatic error state updates.\n   * The global error store MUST subscribe to CORE_EVENTS.API.REQUEST_ERROR to:\n   * 1. Capture all API errors automatically\n   * 2. Update global error state for UI display\n   * 3. Ensure individual domain stores remain error-free (only domain data)\n   *\n   * This is the unified error hook that:\n   * - On frontend: Emits event that global error store subscribes to\n   * - On backend: Emits event for logging/monitoring (can be configured to rethrow)\n   *\n   * @param error - The error that occurred\n   * @param options - Additional context for the error\n   * @param options.method - HTTP method (GET, POST, etc.)\n   * @param options.url - Request URL\n   * @param options.requestId - Unique request identifier\n   * @param options.status - HTTP status code (if available)\n   * @param options.duration - Request duration in ms\n   * @param options.rethrow - Whether to rethrow the error after emitting (default: false)\n   *\n   * @example\n   * ```typescript\n   * // Global error store setup (in @plyaz/store)\n   * CoreEventManager.on(CORE_EVENTS.API.REQUEST_ERROR, (payload) => {\n   *   errorStore.setError({\n   *     message: payload.error.message,\n   *     status: payload.status,\n   *     url: payload.url,\n   *     requestId: payload.requestId,\n   *   });\n   * });\n   *\n   * // Frontend usage - emit to store\n   * ApiClientService.emitApiError(error, {\n   *   method: 'GET',\n   *   url: '/api/users',\n   *   requestId: '123',\n   *   duration: 500,\n   * });\n   *\n   * // Backend usage - emit and rethrow\n   * ApiClientService.emitApiError(error, {\n   *   method: 'POST',\n   *   url: '/api/orders',\n   *   requestId: '456',\n   *   duration: 1200,\n   *   rethrow: true,\n   * });\n   * ```\n   */\n  static emitApiError(\n    error: unknown,\n    options: {\n      method: string;\n      url: string;\n      requestId: string;\n      status?: number;\n      duration: number;\n      rethrow?: boolean;\n    }\n  ): void {\n    const payload: CoreApiRequestErrorPayload = {\n      method: options.method,\n      url: options.url,\n      requestId: options.requestId,\n      status: options.status,\n      error,\n      duration: options.duration,\n    };\n\n    CoreEventManager.emit(CORE_EVENTS.API.REQUEST_ERROR, payload);\n\n    // Optionally rethrow for backend error propagation\n    if (options.rethrow && error instanceof Error) {\n      throw error;\n    }\n  }\n\n  /**\n   * Create a dedicated API client instance (NOT the singleton)\n   *\n   * Use this when you need an isolated client with its own configuration\n   * that doesn't affect or get affected by the shared singleton instance.\n   *\n   * @param envConfig - Environment metadata (env, apiKey)\n   * @param apiConfig - API configuration (baseURL, encryption, timeout, etc.)\n   * @returns Promise that resolves to a new dedicated client instance\n   *\n   * @example\n   * ```typescript\n   * // Create a dedicated client for feature flags service\n   * const flagsClient = await ApiClientService.createInstance(\n   *   { env: 'production' },\n   *   {\n   *     baseURL: 'https://flags.example.com',\n   *     timeout: 5000,\n   *   }\n   * );\n   *\n   * // This client is independent from ApiClientService.getClient()\n   * flagsClient.updateConfig({ timeout: 3000 }); // Only affects this instance\n   * ```\n   */\n  // eslint-disable-next-line complexity\n  static async createInstance(\n    envConfig: CoreApiEnvironmentConfig,\n    apiConfig?: Partial<ApiClientOptions>\n  ): Promise<ApiClientWithEvents<ClientEventManager, EndpointsList>> {\n    try {\n      // Step 1: Get environment-specific defaults based on env\n      const envDefaults = getConfigForEnvironment(envConfig.env);\n\n      // Step 2: Build config from envConfig (environment metadata only)\n      const envMetadataMapped = mapEnvironmentMetadata(envConfig, envDefaults);\n\n      // Step 3: Get the core error handler (handles single + array errors, emits to Core)\n      const coreErrorHandler = ApiClientService.buildCoreErrorHandler();\n\n      // Step 4: Merge user onError with core error handler\n      const userOnError = apiConfig?.onError;\n      const combinedOnError = userOnError\n        ? Array.isArray(userOnError)\n          ? [...userOnError, coreErrorHandler]\n          : [userOnError, coreErrorHandler]\n        : coreErrorHandler;\n\n      // Step 5: Merge with priority: envDefaults → envMetadata → apiConfig → coreErrorHandler\n      const mergedOptions = mergeConfigs(envDefaults, envMetadataMapped, {\n        ...(apiConfig ?? {}),\n        onError: combinedOnError,\n      }) as ApiClientOptions;\n\n      // Step 6: Validate the merged configuration\n      validateEnvironmentConfig(envConfig, mergedOptions);\n\n      // Step 7: Create a NEW client instance (not stored as singleton)\n      const dedicatedClient = await createApiClient(mergedOptions);\n\n      // Note: Do NOT call applyDefaultClientSetting - this is a dedicated instance\n      // that should not become the default client for @plyaz/api services\n\n      return dedicatedClient;\n    } catch (error) {\n      throw new ApiPackageError(\n        'service.instance_creation.failed',\n        PACKAGE_STATUS_CODES.INITIALIZATION_FAILED,\n        API_ERROR_CODES.CLIENT_INITIALIZATION_FAILED,\n        {\n          cause: error instanceof Error ? error : undefined,\n          context: {\n            operation: OPERATIONS.INITIALIZATION,\n            originalError: error instanceof Error ? error.message : String(error),\n            i18n: {\n              error: error instanceof Error ? error.message : String(error),\n            },\n          },\n        }\n      );\n    }\n  }\n\n  /**\n   * Create a standalone API client with Core error handling.\n   *\n   * This is a simpler alternative to `createInstance()` that doesn't require\n   * environment config. Use this when you just need the error handling without\n   * environment-specific defaults (production validation, etc.).\n   *\n   * **Use cases:**\n   * - Domain services that need their own API client\n   * - Testing with isolated API clients\n   * - Simple client creation without environment setup\n   *\n   * @param apiConfig - API configuration (baseURL, timeout, etc.)\n   * @returns Promise that resolves to a client with Core error handling\n   *\n   * @example\n   * ```typescript\n   * // In BaseDomainService or any service\n   * const client = await ApiClientService.createStandaloneClient({\n   *   baseURL: '/api/examples',\n   *   timeout: 10000,\n   * });\n   *\n   * // Errors are automatically emitted to CoreEventManager\n   * const response = await client.get('/items');\n   * ```\n   */\n  static async createStandaloneClient(\n    apiConfig: ApiClientOptions\n  ): Promise<ApiClientWithEvents<ClientEventManager, EndpointsList>> {\n    try {\n      // Get the core error handler (handles single + array errors, emits to Core)\n      const coreErrorHandler = ApiClientService.buildCoreErrorHandler();\n\n      // Merge user onError with core error handler\n      const userOnError = apiConfig.onError;\n      const combinedOnError = userOnError\n        ? Array.isArray(userOnError)\n          ? [...userOnError, coreErrorHandler]\n          : [userOnError, coreErrorHandler]\n        : coreErrorHandler;\n\n      // Create client with combined error handler\n      const client = await createApiClient({\n        ...apiConfig,\n        onError: combinedOnError,\n      });\n\n      return client;\n    } catch (error) {\n      throw new ApiPackageError(\n        'service.standalone_client_creation.failed',\n        PACKAGE_STATUS_CODES.INITIALIZATION_FAILED,\n        API_ERROR_CODES.CLIENT_INITIALIZATION_FAILED,\n        {\n          cause: error instanceof Error ? error : undefined,\n          context: {\n            operation: OPERATIONS.INITIALIZATION,\n            originalError: error instanceof Error ? error.message : String(error),\n            i18n: {\n              error: error instanceof Error ? error.message : String(error),\n            },\n          },\n        }\n      );\n    }\n  }\n}\n\n// Export convenience helpers\nexport const getApiClient = (): ApiClientWithEvents<ClientEventManager, EndpointsList> =>\n  ApiClientService.getClient();\n\nexport const initApiClient = (\n  envConfig: CoreApiEnvironmentConfig,\n  apiConfig?: Partial<ApiClientOptions>\n): Promise<ApiClientWithEvents<ClientEventManager, EndpointsList>> =>\n  ApiClientService.init(envConfig, apiConfig);\n\nexport const createApiClientInstance = (\n  envConfig: CoreApiEnvironmentConfig,\n  apiConfig?: Partial<ApiClientOptions>\n): Promise<ApiClientWithEvents<ClientEventManager, EndpointsList>> =>\n  ApiClientService.createInstance(envConfig, apiConfig);\n\nexport const createStandaloneApiClient = (\n  apiConfig: ApiClientOptions\n): Promise<ApiClientWithEvents<ClientEventManager, EndpointsList>> =>\n  ApiClientService.createStandaloneClient(apiConfig);\n","/**\n * Base Observability Adapter\n *\n * Abstract base class for all observability adapters.\n * Provides common functionality and enforces the adapter interface.\n *\n * @module base/observability\n */\n\nimport { PackageLogger } from '@plyaz/logger';\nimport type {\n  ObservabilityAdapter,\n  ObservabilityAdapterConfig,\n  ObservabilityProvider,\n  Metric,\n  SpanOptions,\n  Span,\n  LogEntry,\n  ObservabilityEvent,\n  SpanContext,\n} from '@plyaz/types/observability';\nimport { generateTraceId, generateSpanId } from '@/utils/common';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Abstract Base Adapter\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Abstract base class for observability adapters.\n *\n * Provides common functionality:\n * - Initialization lifecycle\n * - Default tag management\n * - Error handling\n * - Logging\n *\n * Subclasses must implement provider-specific methods.\n */\nexport abstract class BaseAdapter implements ObservabilityAdapter {\n  abstract readonly provider: ObservabilityProvider;\n  abstract readonly name: string;\n\n  protected _isInitialized = false;\n  protected _config: ObservabilityAdapterConfig | null = null;\n  protected readonly logger: PackageLogger;\n\n  constructor() {\n    this.logger = new PackageLogger({\n      packageName: 'core',\n      service: 'ObservabilityAdapter',\n    });\n  }\n\n  get isInitialized(): boolean {\n    return this._isInitialized;\n  }\n\n  get config(): ObservabilityAdapterConfig | null {\n    return this._config;\n  }\n\n  // ─── Lifecycle ─────────────────────────────────────────────────────────────\n\n  async initialize(config: ObservabilityAdapterConfig): Promise<void> {\n    if (this._isInitialized) {\n      this.logger.warn(`${this.name} already initialized`);\n      return;\n    }\n\n    this._config = config;\n\n    if (config.enabled === false) {\n      this.logger.info(`${this.name} disabled by configuration`);\n      return;\n    }\n\n    await this.doInitialize(config);\n    this._isInitialized = true;\n    this.logger.info(`${this.name} initialized`, {\n      provider: this.provider,\n      serviceName: config.serviceName,\n      environment: config.environment,\n    });\n  }\n\n  async shutdown(): Promise<void> {\n    if (!this._isInitialized) {\n      return;\n    }\n\n    await this.flush();\n    await this.doShutdown();\n    this._isInitialized = false;\n    this.logger.info(`${this.name} shut down`);\n  }\n\n  async isHealthy(): Promise<boolean> {\n    if (!this._isInitialized) {\n      return false;\n    }\n    return this.doHealthCheck();\n  }\n\n  // ─── Abstract Methods (Provider-specific) ──────────────────────────────────\n\n  protected abstract doInitialize(config: ObservabilityAdapterConfig): Promise<void>;\n  protected abstract doShutdown(): Promise<void>;\n  protected abstract doHealthCheck(): Promise<boolean>;\n\n  // ─── Metrics ───────────────────────────────────────────────────────────────\n\n  async recordMetric(metric: Metric): Promise<void> {\n    if (!this._isInitialized || this._config?.enabled === false) {\n      return;\n    }\n\n    const metricWithDefaults = this.applyDefaultTags(metric);\n    await this.doRecordMetric(metricWithDefaults);\n  }\n\n  async incrementCounter(\n    name: string,\n    value: number = 1,\n    tags?: Record<string, string>\n  ): Promise<void> {\n    await this.recordMetric({\n      type: 'counter',\n      name,\n      value,\n      tags: { ...this._config?.defaultTags, ...tags },\n    });\n  }\n\n  async setGauge(name: string, value: number, tags?: Record<string, string>): Promise<void> {\n    await this.recordMetric({\n      type: 'gauge',\n      name,\n      value,\n      tags: { ...this._config?.defaultTags, ...tags },\n    });\n  }\n\n  async recordHistogram(name: string, value: number, tags?: Record<string, string>): Promise<void> {\n    await this.recordMetric({\n      type: 'histogram',\n      name,\n      value,\n      tags: { ...this._config?.defaultTags, ...tags },\n    });\n  }\n\n  protected abstract doRecordMetric(metric: Metric): Promise<void>;\n\n  // ─── Tracing ───────────────────────────────────────────────────────────────\n\n  startSpan(options: SpanOptions): Span {\n    if (!this._isInitialized || this._config?.enabled === false) {\n      return this.createNoopSpan(options);\n    }\n\n    // Apply sampling\n    if (this._config?.samplingRate !== undefined && this._config.samplingRate < 1) {\n      if (Math.random() > this._config.samplingRate) {\n        return this.createNoopSpan(options);\n      }\n    }\n\n    return this.doStartSpan(options);\n  }\n\n  getActiveSpan(): Span | null {\n    if (!this._isInitialized) {\n      return null;\n    }\n    return this.doGetActiveSpan();\n  }\n\n  async withSpan<T>(options: SpanOptions, fn: (span: Span) => Promise<T>): Promise<T> {\n    const span = this.startSpan(options);\n    try {\n      const result = await fn(span);\n      span.setStatus('ok');\n      return result;\n    } catch (error) {\n      span.setStatus('error', error instanceof Error ? error.message : String(error));\n      if (error instanceof Error) {\n        span.recordException(error);\n      }\n      throw error;\n    } finally {\n      span.end();\n    }\n  }\n\n  protected abstract doStartSpan(options: SpanOptions): Span;\n  protected abstract doGetActiveSpan(): Span | null;\n\n  // ─── Logging ───────────────────────────────────────────────────────────────\n\n  async log(entry: LogEntry): Promise<void> {\n    if (!this._isInitialized || this._config?.enabled === false) {\n      return;\n    }\n\n    const entryWithDefaults = {\n      ...entry,\n      timestamp: entry.timestamp ?? Date.now(),\n      service: entry.service ?? this._config?.serviceName,\n    };\n\n    await this.doLog(entryWithDefaults);\n  }\n\n  protected abstract doLog(entry: LogEntry): Promise<void>;\n\n  // ─── Events ────────────────────────────────────────────────────────────────\n\n  async sendEvent(event: ObservabilityEvent): Promise<void> {\n    if (!this._isInitialized || this._config?.enabled === false) {\n      return;\n    }\n\n    const eventWithDefaults = {\n      ...event,\n      timestamp: event.timestamp ?? Date.now(),\n      tags: { ...this._config?.defaultTags, ...event.tags },\n    };\n\n    await this.doSendEvent(eventWithDefaults);\n  }\n\n  protected abstract doSendEvent(event: ObservabilityEvent): Promise<void>;\n\n  // ─── Flush ─────────────────────────────────────────────────────────────────\n\n  async flush(): Promise<void> {\n    if (!this._isInitialized) {\n      return;\n    }\n    await this.doFlush();\n  }\n\n  protected abstract doFlush(): Promise<void>;\n\n  // ─── Helpers ───────────────────────────────────────────────────────────────\n\n  /**\n   * Apply default tags to a metric\n   */\n  protected applyDefaultTags(metric: Metric): Metric {\n    if (!this._config?.defaultTags) {\n      return metric;\n    }\n\n    return {\n      ...metric,\n      tags: {\n        ...this._config.defaultTags,\n        ...metric.tags,\n      },\n    };\n  }\n\n  /**\n   * Create a no-op span (for disabled/sampled-out traces)\n   */\n  // eslint-disable-next-line no-unused-vars\n  protected createNoopSpan(_options: SpanOptions): Span {\n    const context: SpanContext = {\n      traceId: generateTraceId(),\n      spanId: generateSpanId(),\n    };\n\n    return {\n      context,\n      setAttribute: () => {},\n      setAttributes: () => {},\n      addEvent: () => {},\n      setStatus: () => {},\n      end: () => {},\n      recordException: () => {},\n    };\n  }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// No-Op Adapter\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * No-op adapter that does nothing.\n * Use when observability is disabled.\n */\nexport class NoopAdapter extends BaseAdapter {\n  readonly provider = 'noop' as const;\n  readonly name = 'NoopAdapter';\n\n  protected async doInitialize(): Promise<void> {}\n  protected async doShutdown(): Promise<void> {}\n  protected async doHealthCheck(): Promise<boolean> {\n    return true;\n  }\n  protected async doRecordMetric(): Promise<void> {}\n  protected doStartSpan(options: SpanOptions): Span {\n    return this.createNoopSpan(options);\n  }\n  protected doGetActiveSpan(): Span | null {\n    return null;\n  }\n  protected async doLog(): Promise<void> {}\n  protected async doSendEvent(): Promise<void> {}\n  protected async doFlush(): Promise<void> {}\n}\n","/**\n * Logger Adapter\n *\n * Uses @plyaz/logger for observability output.\n * Can be used standalone OR alongside other adapters (Datadog, Grafana)\n * to always have console/file logging regardless of external providers.\n *\n * @example Standalone usage\n * ```typescript\n * const logger = new LoggerAdapter();\n * await logger.initialize({ serviceName: 'my-service' });\n * ```\n *\n * @example As console fallback with Datadog\n * ```typescript\n * const observability = new ObservabilityService({\n *   mode: 'parallel',\n *   adapters: [datadogAdapter, loggerAdapter], // Both receive all events\n * });\n * ```\n *\n * @module base/observability\n */\n\nimport { PackageLogger } from '@plyaz/logger';\nimport type {\n  ObservabilityAdapterConfig,\n  Metric,\n  SpanOptions,\n  Span,\n  LogEntry,\n  ObservabilityEvent,\n  SpanContext,\n  SpanAttributes,\n  SpanEvent,\n  SpanStatus,\n  ConsoleAdapterConfig,\n} from '@plyaz/types/observability';\nimport { generateTraceId, generateSpanId } from '@/utils/common';\nimport { BaseAdapter } from './BaseAdapter';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Logger Adapter\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Logger adapter that uses @plyaz/logger for output.\n *\n * This adapter integrates observability with the existing logging infrastructure,\n * providing structured logging for metrics, spans, and events through PackageLogger.\n *\n * Use this adapter:\n * - As standalone for development/debugging\n * - Alongside Datadog/Grafana to always have local console output\n * - As a fallback in priority mode when external providers fail\n */\nexport class LoggerAdapter extends BaseAdapter {\n  readonly provider = 'console' as const;\n  readonly name = 'LoggerAdapter';\n\n  private observabilityLogger!: PackageLogger;\n  private logMetrics = true;\n  private logSpans = true;\n  private logEvents = true;\n\n  protected async doInitialize(config: ObservabilityAdapterConfig): Promise<void> {\n    const consoleConfig = config as ConsoleAdapterConfig;\n\n    // Create dedicated logger for observability output\n    this.observabilityLogger = new PackageLogger({\n      packageName: 'observability',\n      service: config.serviceName ?? 'LoggerAdapter',\n      environment: config.environment as 'development' | 'staging' | 'production' | undefined,\n      minLevel: consoleConfig.logLevel ?? 'debug',\n    });\n\n    // All logging enabled by default\n    this.logMetrics = true;\n    this.logSpans = true;\n    this.logEvents = true;\n  }\n\n  protected async doShutdown(): Promise<void> {\n    // Logger doesn't need explicit shutdown\n  }\n\n  protected async doHealthCheck(): Promise<boolean> {\n    return true;\n  }\n\n  protected async doRecordMetric(metric: Metric): Promise<void> {\n    if (!this.logMetrics) return;\n\n    this.observabilityLogger.debug(`[METRIC] ${metric.type}:${metric.name}`, {\n      metricType: metric.type,\n      metricName: metric.name,\n      value: 'value' in metric ? metric.value : undefined,\n      unit: metric.unit,\n      tags: metric.tags,\n    });\n  }\n\n  protected doStartSpan(options: SpanOptions): Span {\n    const context: SpanContext = {\n      traceId: generateTraceId(),\n      spanId: generateSpanId(),\n      parentSpanId: options.parentContext?.spanId,\n    };\n\n    const startTime = options.startTime ?? Date.now();\n\n    if (this.logSpans) {\n      this.observabilityLogger.debug(`[SPAN START] ${options.name}`, {\n        traceId: context.traceId,\n        spanId: context.spanId,\n        parentSpanId: context.parentSpanId,\n        kind: options.kind,\n        attributes: options.attributes,\n      });\n    }\n\n    const events: SpanEvent[] = [];\n    let attributes: SpanAttributes = { ...options.attributes };\n    let status: SpanStatus = 'unset';\n    let statusMessage: string | undefined;\n\n    const logSpans = this.logSpans;\n    const logger = this.observabilityLogger;\n\n    return {\n      context,\n      setAttribute: (key, value) => {\n        attributes[key] = value;\n      },\n      setAttributes: attrs => {\n        attributes = { ...attributes, ...attrs };\n      },\n      addEvent: event => {\n        events.push(event);\n        if (logSpans) {\n          logger.debug(`[SPAN EVENT] ${options.name}: ${event.name}`, {\n            traceId: context.traceId,\n            spanId: context.spanId,\n            eventAttributes: event.attributes,\n          });\n        }\n      },\n      setStatus: (s, message) => {\n        status = s;\n        statusMessage = message;\n      },\n      end: endTime => {\n        const duration = (endTime ?? Date.now()) - startTime;\n        if (logSpans) {\n          const logMethod = status === 'error' ? 'warn' : 'debug';\n          logger[logMethod](`[SPAN END] ${options.name}`, {\n            traceId: context.traceId,\n            spanId: context.spanId,\n            durationMs: duration,\n            status,\n            statusMessage,\n            attributes,\n            eventCount: events.length,\n          });\n        }\n      },\n      recordException: error => {\n        if (logSpans) {\n          logger.error(`[SPAN ERROR] ${options.name}`, {\n            traceId: context.traceId,\n            spanId: context.spanId,\n            error: error.message,\n            stack: error.stack,\n          });\n        }\n      },\n    };\n  }\n\n  protected doGetActiveSpan(): Span | null {\n    return null; // Logger adapter doesn't track active spans\n  }\n\n  protected async doLog(entry: LogEntry): Promise<void> {\n    const meta = {\n      service: entry.service,\n      traceId: entry.traceId,\n      spanId: entry.spanId,\n      ...entry.context,\n    };\n\n    // Map observability log levels to logger methods\n    switch (entry.level) {\n      case 'debug':\n        this.observabilityLogger.debug(entry.message, meta);\n        break;\n      case 'info':\n        this.observabilityLogger.info(entry.message, meta);\n        break;\n      case 'warn':\n        this.observabilityLogger.warn(entry.message, meta);\n        break;\n      case 'error':\n        this.observabilityLogger.error(entry.message, meta);\n        break;\n      case 'fatal':\n        this.observabilityLogger.fatal(entry.message, meta);\n        break;\n    }\n  }\n\n  protected async doSendEvent(event: ObservabilityEvent): Promise<void> {\n    if (!this.logEvents) return;\n\n    this.observabilityLogger.info(`[EVENT] ${event.name}`, {\n      eventName: event.name,\n      properties: event.properties,\n      tags: event.tags,\n    });\n  }\n\n  protected async doFlush(): Promise<void> {\n    // Logger handles its own buffering/flushing\n  }\n}\n","/**\n * Observability Service\n *\n * Injectable service for observability (metrics, tracing, logging).\n * Works like CacheManager, DatabaseService, and ApiClient - can be injected into domain services.\n *\n * Adapters are initialized separately with their own configs.\n * This service only orchestrates - it doesn't know about adapter-specific configs.\n *\n * @module base/observability\n */\n\nimport { PackageLogger } from '@plyaz/logger';\nimport { CorePackageError } from '@plyaz/errors';\nimport { ERROR_CODES } from '@plyaz/types/errors';\nimport type {\n  ObservabilityAdapter,\n  ObservabilityAdapterConfig,\n  Metric,\n  SpanOptions,\n  Span,\n  LogEntry,\n  ObservabilityEvent,\n  OperationContext,\n  MonitoringOperationResult,\n  AdapterWithPriority,\n  AdapterEntry,\n  ObservabilityServiceConfig,\n  ObservabilityServiceInterface,\n} from '@plyaz/types/observability';\nimport { OBSERVABILITY_METRICS } from '@plyaz/types/observability';\nimport { NoopAdapter } from './BaseAdapter';\nimport { LoggerAdapter } from './LoggerAdapter';\n\n// Default timeout for adapter operations (5 seconds)\nconst DEFAULT_ADAPTER_TIMEOUT_MS = 5000;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Observability Service Implementation\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * ObservabilityService - Main observability service that implements ObservabilityAdapter.\n *\n * This service orchestrates multiple adapters and can be injected into domain services.\n * Logger adapter is always included by default for console output.\n *\n * ```typescript\n * // 1. Initialize adapters separately\n * const datadogAdapter = new DatadogAdapter();\n * await datadogAdapter.initialize({ apiKey: '...', serviceName: 'my-service' });\n *\n * // 2. Create service - logger is auto-added by default\n * const observability = new ObservabilityService();\n * await observability.initialize({\n *   mode: 'parallel',\n *   adapters: [datadogAdapter], // Logger added automatically\n *   serviceName: 'my-service',\n * });\n *\n * // 3. Use in domain services (implements ObservabilityAdapter)\n * await observability.incrementCounter('api.requests', 1);\n * ```\n */\nexport class ObservabilityService implements ObservabilityAdapter, ObservabilityServiceInterface {\n  readonly provider = 'custom' as const;\n  readonly name = 'ObservabilityService';\n\n  private _isInitialized = false;\n  private _config: ObservabilityServiceConfig | null = null;\n  private readonly logger: PackageLogger;\n  private readonly adapterEntries: AdapterEntry[] = [];\n  private mode: 'single' | 'parallel' | 'priority' = 'parallel';\n  private readonly noopAdapter = new NoopAdapter();\n  private loggerAdapter: LoggerAdapter | null = null;\n\n  constructor() {\n    this.logger = new PackageLogger({\n      packageName: 'core',\n      service: 'ObservabilityService',\n    });\n  }\n\n  get isInitialized(): boolean {\n    return this._isInitialized;\n  }\n\n  /**\n   * Check if service has at least one working adapter\n   */\n  get isReady(): boolean {\n    return this.adapterEntries.some(e => e.adapter.isInitialized);\n  }\n\n  /**\n   * Get all adapters (for compatibility)\n   */\n  private get adapters(): ObservabilityAdapter[] {\n    return this.adapterEntries.map(e => e.adapter);\n  }\n\n  /**\n   * Get initialized adapter entries\n   */\n  private get initializedEntries(): AdapterEntry[] {\n    return this.adapterEntries.filter(e => e.adapter.isInitialized);\n  }\n\n  /**\n   * Get primary (non-failover) initialized adapters\n   */\n  private get primaryEntries(): AdapterEntry[] {\n    return this.initializedEntries.filter(e => !e.failover);\n  }\n\n  /**\n   * Get failover initialized adapters\n   */\n  private get failoverEntries(): AdapterEntry[] {\n    return this.initializedEntries.filter(e => e.failover);\n  }\n\n  // ─── Lifecycle ─────────────────────────────────────────────────────────────\n\n  /**\n   * Check if input is an adapter with priority config\n   */\n  private isAdapterWithPriority(\n    input: ObservabilityAdapter | AdapterWithPriority\n  ): input is AdapterWithPriority {\n    return (\n      'adapter' in input &&\n      typeof (input as AdapterWithPriority).adapter?.isInitialized === 'boolean'\n    );\n  }\n\n  /**\n   * Normalize adapter input to adapter with priority and failover config\n   */\n  private normalizeAdapter(\n    input: ObservabilityAdapter | AdapterWithPriority,\n    defaultPriority: number\n  ): { adapter: ObservabilityAdapter; priority: number; failover: boolean } {\n    if (this.isAdapterWithPriority(input)) {\n      return {\n        adapter: input.adapter,\n        priority: input.priority ?? defaultPriority,\n        failover: input.failover ?? false,\n      };\n    }\n    return { adapter: input, priority: defaultPriority, failover: false };\n  }\n\n  /**\n   * Initialize the observability service.\n   * Logger adapter is always added by default unless explicitly disabled.\n   * Adapters are sorted by priority (higher = first), with failover adapters after primary.\n   */\n  async initialize(config: ObservabilityAdapterConfig & ObservabilityServiceConfig): Promise<void> {\n    if (this._isInitialized) {\n      this.logger.warn('ObservabilityService already initialized');\n      return;\n    }\n\n    this._config = config;\n    this.mode = config.mode ?? 'parallel';\n\n    // Collect adapters with priorities\n    const entries: AdapterEntry[] = [];\n\n    // Add provided adapters\n    if (config.adapter) {\n      entries.push(this.normalizeAdapter(config.adapter, 0));\n    }\n    if (config.adapters) {\n      config.adapters.forEach((a, index) => {\n        // Default priority decreases with array position for stable sorting\n        entries.push(this.normalizeAdapter(a, -index));\n      });\n    }\n\n    // Always add logger adapter by default (for console output)\n    // Unless there's already a console/logger adapter\n    const hasLoggerAdapter = entries.some(\n      e => e.adapter.provider === 'console' || e.adapter.name === 'LoggerAdapter'\n    );\n    if (!hasLoggerAdapter) {\n      this.loggerAdapter = new LoggerAdapter();\n      await this.loggerAdapter.initialize({\n        enabled: config.enabled !== false,\n        serviceName: config.serviceName,\n        environment: config.environment,\n        defaultTags: config.defaultTags,\n      });\n      // Logger is a failover by default with lowest priority\n      entries.push({ adapter: this.loggerAdapter, priority: -1000, failover: true });\n    }\n\n    // Sort: primary adapters first (by priority desc), then failover adapters (by priority desc)\n    entries.sort((a, b) => {\n      // Primary adapters come before failover\n      if (a.failover !== b.failover) {\n        return a.failover ? 1 : -1;\n      }\n      // Within same category, sort by priority (higher first)\n      return b.priority - a.priority;\n    });\n\n    // Store sorted entries\n    this.adapterEntries.push(...entries);\n\n    this._isInitialized = true;\n\n    this.logger.debug('ObservabilityService initialized', {\n      mode: this.mode,\n      adapterCount: this.adapterEntries.length,\n      primaryCount: this.primaryEntries.length,\n      failoverCount: this.failoverEntries.length,\n      adapters: this.adapterEntries.map(e => ({\n        name: e.adapter.name,\n        provider: e.adapter.provider,\n        priority: e.priority,\n        failover: e.failover,\n        initialized: e.adapter.isInitialized,\n      })),\n    });\n  }\n\n  async shutdown(): Promise<void> {\n    await Promise.all(this.adapters.map(adapter => adapter.shutdown()));\n    this._isInitialized = false;\n    this.logger.info('ObservabilityService shut down');\n  }\n\n  async isHealthy(): Promise<boolean> {\n    if (this.adapters.length === 0) {\n      return false;\n    }\n\n    const results = await Promise.all(\n      this.adapters.map(adapter => adapter.isHealthy().catch(() => false))\n    );\n\n    // For parallel mode, all must be healthy; for priority/single, at least one\n    return this.mode === 'parallel' ? results.every(Boolean) : results.some(Boolean);\n  }\n\n  async flush(): Promise<void> {\n    await this.executeOnAdapters('flush', adapter => adapter.flush());\n  }\n\n  // ─── Execute on Adapters ───────────────────────────────────────────────────\n\n  private get config(): ObservabilityServiceConfig {\n    return this._config ?? {};\n  }\n\n  private async executeOnAdapters<T>(\n    operation: string,\n    fn: (adapter: ObservabilityAdapter) => Promise<T>\n  ): Promise<void> {\n    const entries = this.initializedEntries;\n    if (entries.length === 0) {\n      return;\n    }\n\n    const timeout = this.config.adapterTimeout ?? DEFAULT_ADAPTER_TIMEOUT_MS;\n\n    switch (this.mode) {\n      case 'parallel':\n        await this.executeParallelWithFailover(operation, fn, timeout);\n        break;\n      case 'priority':\n        await this.executePriorityWithFailover(operation, fn, timeout);\n        break;\n      case 'single':\n      default:\n        await this.executeSingle(operation, entries[0].adapter, fn, timeout);\n        break;\n    }\n  }\n\n  private async executeSingle<T>(\n    operation: string,\n    adapter: ObservabilityAdapter,\n    fn: (adapter: ObservabilityAdapter) => Promise<T>,\n    timeout: number\n  ): Promise<void> {\n    try {\n      await this.withTimeout(fn(adapter), timeout);\n    } catch (error) {\n      this.logger.error(`${operation} failed on ${adapter.name}`, {\n        error: error instanceof Error ? error.message : String(error),\n      });\n    }\n  }\n\n  /**\n   * Execute on primary adapters in parallel.\n   * If all primary adapters fail, execute on failover adapters.\n   */\n  // eslint-disable-next-line complexity\n  private async executeParallelWithFailover<T>(\n    operation: string,\n    fn: (adapter: ObservabilityAdapter) => Promise<T>,\n    timeout: number\n  ): Promise<void> {\n    const primary = this.primaryEntries;\n    const failover = this.failoverEntries;\n\n    // Execute on primary adapters\n    if (primary.length > 0) {\n      const results = await Promise.allSettled(\n        primary.map(e => this.withTimeout(fn(e.adapter), timeout))\n      );\n\n      const errors = results\n        .map((r, i) =>\n          r.status === 'rejected' ? { adapter: primary[i].adapter.name, error: r.reason } : null\n        )\n        .filter(Boolean);\n\n      const allFailed = errors.length === primary.length;\n\n      if (errors.length > 0 && !allFailed) {\n        this.logger.warn(`${operation} failed on some primary adapters`, { errors });\n      }\n\n      // If all primary adapters failed, use failover\n      if (allFailed && failover.length > 0) {\n        this.logger.warn(`${operation} failed on all primary adapters, using failover`, { errors });\n        await this.executeParallel(\n          operation,\n          failover.map(e => e.adapter),\n          fn,\n          timeout\n        );\n        return;\n      }\n\n      if (this.config.failOnAnyError && errors.length > 0) {\n        throw new CorePackageError(\n          `${operation} failed on adapters: ${errors.map(e => e?.adapter).join(', ')}`,\n          ERROR_CODES.CORE_OPERATION_FAILED\n        );\n      }\n    } else if (failover.length > 0) {\n      // No primary adapters, use failover directly\n      await this.executeParallel(\n        operation,\n        failover.map(e => e.adapter),\n        fn,\n        timeout\n      );\n    }\n  }\n\n  private async executeParallel<T>(\n    operation: string,\n    adapters: ObservabilityAdapter[],\n    fn: (adapter: ObservabilityAdapter) => Promise<T>,\n    timeout: number\n  ): Promise<void> {\n    const results = await Promise.allSettled(\n      adapters.map(adapter => this.withTimeout(fn(adapter), timeout))\n    );\n\n    const errors = results\n      .map((r, i) =>\n        r.status === 'rejected' ? { adapter: adapters[i].name, error: r.reason } : null\n      )\n      .filter(Boolean);\n\n    if (errors.length > 0) {\n      this.logger.warn(`${operation} failed on some adapters`, { errors });\n    }\n  }\n\n  /**\n   * Execute on primary adapters in priority order.\n   * If all primary adapters fail, try failover adapters.\n   */\n  // eslint-disable-next-line complexity\n  private async executePriorityWithFailover<T>(\n    operation: string,\n    fn: (adapter: ObservabilityAdapter) => Promise<T>,\n    timeout: number\n  ): Promise<void> {\n    const primary = this.primaryEntries;\n    const failover = this.failoverEntries;\n\n    // Try primary adapters first\n    for (const entry of primary) {\n      try {\n        await this.withTimeout(fn(entry.adapter), timeout);\n        return; // Success - stop trying\n      } catch (error) {\n        const errorName = error instanceof Error ? error.name : 'Error';\n        const shouldFallback =\n          !this.config.fallbackOnErrors || this.config.fallbackOnErrors.includes(errorName);\n\n        if (shouldFallback) {\n          this.logger.warn(`${operation} failed on ${entry.adapter.name}, trying next`, {\n            error: error instanceof Error ? error.message : String(error),\n          });\n          continue;\n        }\n        throw error;\n      }\n    }\n\n    // All primary failed, try failover adapters\n    for (const entry of failover) {\n      try {\n        await this.withTimeout(fn(entry.adapter), timeout);\n        return; // Success\n      } catch (error) {\n        this.logger.warn(`${operation} failed on failover ${entry.adapter.name}`, {\n          error: error instanceof Error ? error.message : String(error),\n        });\n        // Continue to next failover adapter\n      }\n    }\n\n    this.logger.error(`${operation} failed on all adapters (primary and failover)`);\n  }\n\n  private async withTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T> {\n    return Promise.race([\n      promise,\n      new Promise<T>((_, reject) =>\n        setTimeout(() => reject(new Error(`Operation timed out after ${timeoutMs}ms`)), timeoutMs)\n      ),\n    ]);\n  }\n\n  // ─── Metrics ───────────────────────────────────────────────────────────────\n\n  async recordMetric(metric: Metric): Promise<void> {\n    await this.executeOnAdapters('recordMetric', adapter => adapter.recordMetric(metric));\n  }\n\n  async incrementCounter(\n    name: string,\n    value: number = 1,\n    tags?: Record<string, string>\n  ): Promise<void> {\n    await this.executeOnAdapters('incrementCounter', adapter =>\n      adapter.incrementCounter(name, value, tags)\n    );\n  }\n\n  async setGauge(name: string, value: number, tags?: Record<string, string>): Promise<void> {\n    await this.executeOnAdapters('setGauge', adapter => adapter.setGauge(name, value, tags));\n  }\n\n  async recordHistogram(name: string, value: number, tags?: Record<string, string>): Promise<void> {\n    await this.executeOnAdapters('recordHistogram', adapter =>\n      adapter.recordHistogram(name, value, tags)\n    );\n  }\n\n  // ─── Tracing ───────────────────────────────────────────────────────────────\n\n  startSpan(options: SpanOptions): Span {\n    // For tracing, use first initialized adapter\n    const entry = this.initializedEntries[0];\n    return entry?.adapter.startSpan(options) ?? this.noopAdapter.startSpan(options);\n  }\n\n  async withSpan<T>(options: SpanOptions, fn: (span: Span) => Promise<T>): Promise<T> {\n    const entry = this.initializedEntries[0];\n    if (!entry) {\n      return fn(this.noopAdapter.startSpan(options));\n    }\n    return entry.adapter.withSpan(options, fn);\n  }\n\n  getActiveSpan(): Span | null {\n    const entry = this.initializedEntries[0];\n    return entry?.adapter.getActiveSpan() ?? null;\n  }\n\n  // ─── Logging ───────────────────────────────────────────────────────────────\n\n  async log(entry: LogEntry): Promise<void> {\n    await this.executeOnAdapters('log', adapter => adapter.log(entry));\n  }\n\n  // ─── Events ────────────────────────────────────────────────────────────────\n\n  async sendEvent(event: ObservabilityEvent): Promise<void> {\n    await this.executeOnAdapters('sendEvent', adapter => adapter.sendEvent(event));\n  }\n\n  // ─── Service Operation Tracking ────────────────────────────────────────────\n\n  /**\n   * Track a service operation with automatic metrics and tracing.\n   *\n   * @example\n   * ```typescript\n   * const { result, metrics } = await observability.trackOperation(\n   *   {\n   *     serviceName: 'UserService',\n   *     operation: 'create',\n   *     entityType: 'user',\n   *     startTime: Date.now(),\n   *   },\n   *   async () => {\n   *     return await this.repository.create(userData);\n   *   }\n   * );\n   * ```\n   */\n  // eslint-disable-next-line complexity\n  async trackOperation<T>(\n    context: OperationContext,\n    operation: () => Promise<T>\n  ): Promise<{ result: T; metrics: MonitoringOperationResult }> {\n    const startTime = context.startTime ?? Date.now();\n\n    // Start span\n    const span = this.startSpan({\n      name: `${context.serviceName}.${context.operation}`,\n      attributes: {\n        'service.name': context.serviceName,\n        'operation.name': context.operation,\n        ...(context.entityType && { 'entity.type': context.entityType }),\n        ...(context.entityId && { 'entity.id': context.entityId }),\n        ...context.attributes,\n      },\n      parentContext: context.parentContext,\n    });\n\n    // Increment operation counter\n    await this.incrementCounter(OBSERVABILITY_METRICS.SERVICE_OPERATION_COUNT, 1, {\n      service: context.serviceName,\n      operation: context.operation,\n      ...(context.entityType && { entity_type: context.entityType }),\n    });\n\n    try {\n      const result = await operation();\n      const duration = Date.now() - startTime;\n\n      span.setStatus('ok');\n\n      await this.recordHistogram(OBSERVABILITY_METRICS.SERVICE_OPERATION_DURATION, duration, {\n        service: context.serviceName,\n        operation: context.operation,\n        status: 'success',\n      });\n\n      return {\n        result,\n        metrics: { success: true, duration, data: result },\n      };\n    } catch (error) {\n      const duration = Date.now() - startTime;\n\n      span.setStatus('error', error instanceof Error ? error.message : String(error));\n      if (error instanceof Error) {\n        span.recordException(error);\n      }\n\n      await this.incrementCounter(OBSERVABILITY_METRICS.SERVICE_OPERATION_ERROR, 1, {\n        service: context.serviceName,\n        operation: context.operation,\n        error_type: error instanceof Error ? error.name : 'UnknownError',\n      });\n\n      await this.recordHistogram(OBSERVABILITY_METRICS.SERVICE_OPERATION_DURATION, duration, {\n        service: context.serviceName,\n        operation: context.operation,\n        status: 'error',\n      });\n\n      throw error;\n    } finally {\n      span.end();\n    }\n  }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Factory Function\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create an ObservabilityService with pre-initialized adapters.\n *\n * @example\n * ```typescript\n * // Initialize adapters first\n * const datadogAdapter = new DatadogAdapter();\n * await datadogAdapter.initialize({ apiKey: '...', serviceName: 'my-service' });\n *\n * // Create and initialize service (logger auto-added)\n * const observability = await createObservabilityService({\n *   mode: 'parallel',\n *   adapters: [datadogAdapter],\n *   serviceName: 'my-service',\n * });\n *\n * // Priority mode (fallback chain)\n * const observability = await createObservabilityService({\n *   mode: 'priority',\n *   adapters: [datadogAdapter, grafanaAdapter],\n *   serviceName: 'my-service',\n * });\n * ```\n */\nexport async function createObservabilityService(\n  config: ObservabilityServiceConfig & { serviceName?: string; environment?: string } = {}\n): Promise<ObservabilityService> {\n  const service = new ObservabilityService();\n  await service.initialize(config);\n  return service;\n}\n","/**\n * Core Dependencies Configuration\n *\n * Similar to @plyaz/api's setGlobalConfig pattern.\n * Backend services are registered here by entry points, not imported directly.\n *\n * IMPORTANT: This file must NOT import from backend service files (DbService, CacheService, etc.)\n * as that would cause the bundler to include backend dependencies in the frontend bundle.\n *\n * @example\n * ```typescript\n * // entry-backend.ts\n * import { setCoreDependencies } from './config/dependencies';\n * import { DbService } from './services/DbService';\n * import { CacheService } from './services/CacheService';\n *\n * setCoreDependencies({\n *   DbService,\n *   CacheService,\n *   StorageService,\n *   NotificationService,\n * });\n *\n * // entry-frontend.ts\n * // Don't call setCoreDependencies - no backend deps loaded\n * ```\n */\n\nimport type {\n  CoreDbServiceStatic,\n  CoreCacheServiceStatic,\n  CoreStorageServiceStatic,\n  CoreNotificationServiceStatic,\n  CoreServerErrorMiddlewareStatic,\n} from '@plyaz/types/core';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Dependencies Container\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface CoreDependencies {\n  DbService?: CoreDbServiceStatic;\n  CacheService?: CoreCacheServiceStatic;\n  StorageService?: CoreStorageServiceStatic;\n  NotificationService?: CoreNotificationServiceStatic;\n  ServerErrorMiddleware?: CoreServerErrorMiddlewareStatic;\n}\n\n// Global dependencies container\nlet _dependencies: CoreDependencies = {};\n\n/**\n * Set core dependencies (called by entry points)\n *\n * @example\n * ```typescript\n * // entry-backend.ts\n * import { DbService } from './services/DbService';\n * import { CacheService } from './services/CacheService';\n *\n * setCoreDependencies({\n *   DbService,\n *   CacheService,\n * });\n * ```\n */\nexport function setCoreDependencies(deps: CoreDependencies): void {\n  _dependencies = { ..._dependencies, ...deps };\n}\n\n/**\n * Get core dependencies\n */\nexport function getCoreDependencies(): CoreDependencies {\n  return _dependencies;\n}\n\n/**\n * Check if a dependency is available\n */\nexport function hasCoreDependency(key: keyof CoreDependencies): boolean {\n  return _dependencies[key] !== undefined;\n}\n\n/**\n * Get a specific dependency\n */\nexport function getCoreDependency<K extends keyof CoreDependencies>(\n  key: K\n): CoreDependencies[K] | undefined {\n  return _dependencies[key];\n}\n\n/**\n * Clear all dependencies (useful for testing)\n */\nexport function clearCoreDependencies(): void {\n  _dependencies = {};\n}\n","// This eslint disable is an edge-case as we need to ensure that we're able to load CoreInitializer regardless if FE, BE or specific frameworks\n/**\n * Service Registry - Frontend Service Auto-Initialization\n *\n * Provides a generic, scalable pattern for initializing domain services.\n * Services implement the InitializableDomainService interface and are\n * initialized automatically without hardcoded switch statements.\n *\n * @example\n * ```typescript\n * import { ServiceRegistry } from '@plyaz/core';\n * import { FeatureFlagDomainService } from '@plyaz/core/frontend';\n * import { ExampleDomainService } from '@plyaz/core/domain';\n *\n * // Initialize services\n * await ServiceRegistry.initialize({\n *   apiClient: { baseURL: '/api' },\n *   services: [\n *     { service: FeatureFlagDomainService, config: { enabled: true } },\n *     { service: ExampleDomainService, config: { enabled: true, useRealApi: false } },\n *   ],\n * });\n *\n * // Access services by key\n * const flags = ServiceRegistry.get('featureFlags');\n * const isEnabled = await flags.isEnabled('my-flag');\n *\n * // Or get with type safety\n * const example = ServiceRegistry.get<ExampleDomainService>('example');\n * ```\n */\n\nimport { CorePackageError } from '@plyaz/errors';\nimport { ERROR_CODES, BACKEND_RUNTIMES, FRONTEND_RUNTIMES, UNIVERSAL_RUNTIMES } from '@plyaz/types';\nimport { PackageLogger } from '@plyaz/logger';\nimport type { ApiClientOptions } from '@plyaz/types/api';\nimport type { RootStoreSlice } from '@plyaz/types/store';\nimport type {\n  CoreDomainServiceInstance,\n  CoreServiceCreateOptions,\n  CoreServiceEntry,\n  CoreServiceInitConfig,\n  CoreServiceRegistryConfig,\n  CoreCacheConfig,\n  CoreObservabilityConfig,\n  CoreRuntimeEnvironment,\n  CoreDbServiceConfig,\n  CoreStorageConfig,\n  CoreNotificationConfig,\n  // Service instance types (from @plyaz/types, not backend modules)\n  CoreDbServiceInstance,\n  CoreCacheManagerInstance,\n  CoreStorageServiceInstance,\n  CoreNotificationServiceInstance,\n} from '@plyaz/types/core';\nimport type { ObservabilityAdapter } from '@plyaz/types/observability';\nimport { createObservabilityService } from '../base/observability';\nimport { ApiClientService } from '../services/ApiClientService';\nimport { getCoreDependency } from '../config/dependencies';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Internal Types\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface PendingService {\n  entry: CoreServiceEntry;\n  initWhen: CoreServiceInitConfig['initWhen'];\n}\n\ninterface ServiceMetadata {\n  entry: CoreServiceEntry;\n  isSingleton: boolean;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Global Singleton Pattern for Static Class State\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Global Singleton Pattern using globalThis for static class state\n *\n * @see CoreEventManager.ts for detailed explanation of why this pattern is needed.\n *\n * TL;DR: In Next.js and similar frameworks, module isolation can create multiple\n * instances of static class state. Using globalThis + Symbol.for() ensures ONE\n * shared state per process, preventing issues like services being registered in\n * one module context but not accessible from another (e.g., API routes).\n */\n\ninterface ServiceRegistryState {\n  services: Map<string, CoreDomainServiceInstance>;\n  pending: Map<string, PendingService>;\n  metadata: Map<string, ServiceMetadata>;\n  environment: 'production' | 'staging' | 'development' | 'test';\n  runtime: CoreRuntimeEnvironment;\n  apiClientOptions: ApiClientOptions | null;\n  dbConfig: Partial<CoreDbServiceConfig> | null;\n  cacheConfig: CoreCacheConfig | null;\n  observabilityConfig: CoreObservabilityConfig | null;\n  observabilityInstance: ObservabilityAdapter | null;\n  storageConfig: CoreStorageConfig | null;\n  notificationsConfig: CoreNotificationConfig | null;\n  storeRegistry: {\n    getStore<K extends keyof RootStoreSlice>(key: K): RootStoreSlice[K] | undefined;\n  } | null;\n  initPromises: Map<string, Promise<CoreDomainServiceInstance>>;\n}\n\nconst SERVICE_REGISTRY_KEY = Symbol.for('plyaz.ServiceRegistry');\n\nfunction getServiceRegistryState(): ServiceRegistryState {\n  const globalAny = globalThis as unknown as { [key: symbol]: ServiceRegistryState };\n  if (!globalAny[SERVICE_REGISTRY_KEY]) {\n    globalAny[SERVICE_REGISTRY_KEY] = {\n      services: new Map(),\n      pending: new Map(),\n      metadata: new Map(),\n      environment: 'development',\n      runtime: 'node',\n      apiClientOptions: null,\n      dbConfig: null,\n      cacheConfig: null,\n      observabilityConfig: null,\n      observabilityInstance: null,\n      storageConfig: null,\n      notificationsConfig: null,\n      storeRegistry: null,\n      initPromises: new Map(),\n    };\n  }\n  return globalAny[SERVICE_REGISTRY_KEY];\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Service Registry\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Service Registry\n *\n * Manages frontend domain service instances with auto-initialization.\n * Supports immediate, lazy, and conditional initialization.\n *\n * Key features:\n * - Generic: No switch statements, services implement common interface\n * - Scalable: Add new services without modifying registry code\n * - Flexible: Immediate, lazy, or conditional initialization\n * - Type-safe: Get services with proper typing\n */\nexport class ServiceRegistry {\n  private static readonly logger = new PackageLogger({\n    packageName: 'core',\n    service: 'ServiceRegistry',\n  });\n\n  // State accessors using globalThis\n  private static get _services(): Map<string, CoreDomainServiceInstance> {\n    return getServiceRegistryState().services;\n  }\n  private static get _pending(): Map<string, PendingService> {\n    return getServiceRegistryState().pending;\n  }\n  private static get _metadata(): Map<string, ServiceMetadata> {\n    return getServiceRegistryState().metadata;\n  }\n  private static get _environment(): 'production' | 'staging' | 'development' | 'test' {\n    return getServiceRegistryState().environment;\n  }\n  private static set _environment(value: 'production' | 'staging' | 'development' | 'test') {\n    getServiceRegistryState().environment = value;\n  }\n  private static get _runtime(): CoreRuntimeEnvironment {\n    return getServiceRegistryState().runtime;\n  }\n  private static set _runtime(value: CoreRuntimeEnvironment) {\n    getServiceRegistryState().runtime = value;\n  }\n  private static get _apiClientOptions(): ApiClientOptions | null {\n    return getServiceRegistryState().apiClientOptions;\n  }\n  private static set _apiClientOptions(value: ApiClientOptions | null) {\n    getServiceRegistryState().apiClientOptions = value;\n  }\n  private static get _dbConfig(): Partial<CoreDbServiceConfig> | null {\n    return getServiceRegistryState().dbConfig;\n  }\n  private static set _dbConfig(value: Partial<CoreDbServiceConfig> | null) {\n    getServiceRegistryState().dbConfig = value;\n  }\n  private static get _cacheConfig(): CoreCacheConfig | null {\n    return getServiceRegistryState().cacheConfig;\n  }\n  private static set _cacheConfig(value: CoreCacheConfig | null) {\n    getServiceRegistryState().cacheConfig = value;\n  }\n  private static get _observabilityConfig(): CoreObservabilityConfig | null {\n    return getServiceRegistryState().observabilityConfig;\n  }\n  private static set _observabilityConfig(value: CoreObservabilityConfig | null) {\n    getServiceRegistryState().observabilityConfig = value;\n  }\n  private static get _observabilityInstance(): ObservabilityAdapter | null {\n    return getServiceRegistryState().observabilityInstance;\n  }\n  private static set _observabilityInstance(value: ObservabilityAdapter | null) {\n    getServiceRegistryState().observabilityInstance = value;\n  }\n  private static get _storageConfig(): CoreStorageConfig | null {\n    return getServiceRegistryState().storageConfig;\n  }\n  private static set _storageConfig(value: CoreStorageConfig | null) {\n    getServiceRegistryState().storageConfig = value;\n  }\n  private static get _notificationsConfig(): CoreNotificationConfig | null {\n    return getServiceRegistryState().notificationsConfig;\n  }\n  private static set _notificationsConfig(value: CoreNotificationConfig | null) {\n    getServiceRegistryState().notificationsConfig = value;\n  }\n  private static get _storeRegistry(): {\n    getStore<K extends keyof RootStoreSlice>(key: K): RootStoreSlice[K] | undefined;\n  } | null {\n    return getServiceRegistryState().storeRegistry;\n  }\n  private static set _storeRegistry(\n    value: {\n      getStore<K extends keyof RootStoreSlice>(key: K): RootStoreSlice[K] | undefined;\n    } | null\n  ) {\n    getServiceRegistryState().storeRegistry = value;\n  }\n  private static get _initPromises(): Map<string, Promise<CoreDomainServiceInstance>> {\n    return getServiceRegistryState().initPromises;\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Initialization\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Initialize the service registry with the provided configuration.\n   *\n   * @param config - Registry configuration with services to initialize\n   *\n   * @example\n   * ```typescript\n   * await ServiceRegistry.initialize({\n   *   apiClient: { baseURL: '/api' },\n   *   services: [\n   *     { service: FeatureFlagDomainService, config: { enabled: true } },\n   *     { service: ExampleDomainService, config: { enabled: true, initWhen: 'lazy' } },\n   *   ],\n   * });\n   * ```\n   */\n  // eslint-disable-next-line complexity\n  static async initialize(config: CoreServiceRegistryConfig): Promise<void> {\n    ServiceRegistry._environment = config.environment ?? 'development';\n    ServiceRegistry._runtime = config.runtime ?? 'node';\n    ServiceRegistry._apiClientOptions = config.apiClient ?? null;\n    ServiceRegistry._dbConfig = config.db ?? null;\n    ServiceRegistry._cacheConfig = config.cache ?? null;\n    ServiceRegistry._observabilityConfig = config.observability ?? null;\n    ServiceRegistry._storageConfig = config.storage ?? null;\n    ServiceRegistry._notificationsConfig = config.notifications ?? null;\n    ServiceRegistry._storeRegistry = config.stores ?? null;\n\n    const immediatePromises: Promise<void>[] = [];\n\n    for (const entry of config.services) {\n      const serviceKey = entry.service.serviceKey;\n      const initWhen = entry.config.initWhen ?? 'immediate';\n      const enabled = entry.config.enabled !== false;\n      const isSingleton = entry.config.singleton !== false; // Default: true\n\n      // Store metadata for all services (even disabled)\n      ServiceRegistry._metadata.set(serviceKey, { entry, isSingleton });\n\n      // Skip disabled services\n      if (!enabled) {\n        ServiceRegistry.logger.debug(`Service ${serviceKey} is disabled, skipping`);\n        continue;\n      }\n\n      // Handle initialization timing\n      if (initWhen === 'immediate' && isSingleton) {\n        // Only auto-initialize singletons\n        immediatePromises.push(\n          ServiceRegistry.initializeService(entry).then(() => {\n            ServiceRegistry.logger.debug(`Service ${serviceKey} initialized (singleton)`);\n          })\n        );\n      } else if (isSingleton) {\n        // Store for lazy/conditional initialization\n        ServiceRegistry._pending.set(serviceKey, { entry, initWhen });\n        ServiceRegistry.logger.debug(\n          `Service ${serviceKey} registered for ${initWhen} initialization`\n        );\n      } else {\n        // Non-singleton: just store metadata, create on demand via create()\n        ServiceRegistry.logger.debug(\n          `Service ${serviceKey} registered (non-singleton, use create())`\n        );\n      }\n    }\n\n    // Wait for all immediate initializations\n    await Promise.all(immediatePromises);\n\n    const initializedKeys = [...ServiceRegistry._services.keys()];\n    const pendingKeys = [...ServiceRegistry._pending.keys()];\n    const nonSingletonKeys = [...ServiceRegistry._metadata.entries()]\n      .filter(([, meta]) => !meta.isSingleton)\n      .map(([key]) => key);\n\n    ServiceRegistry.logger.info('Service registry initialized', {\n      initialized: initializedKeys,\n      pending: pendingKeys,\n      nonSingleton: nonSingletonKeys,\n    });\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Service Access\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Get a singleton service instance by key (synchronous).\n   * Throws if the service is not initialized or is non-singleton.\n   *\n   * @param key - Service key (e.g., 'featureFlags', 'example')\n   * @returns The service instance\n   * @throws CorePackageError if service not found, not initialized, or non-singleton\n   *\n   * @example\n   * ```typescript\n   * const flags = ServiceRegistry.get<FeatureFlagDomainService>('featureFlags');\n   * const isEnabled = await flags.isEnabled('my-flag');\n   * ```\n   */\n  static get<T extends CoreDomainServiceInstance = CoreDomainServiceInstance>(key: string): T {\n    const service = ServiceRegistry._services.get(key);\n    if (service) {\n      return service as T;\n    }\n\n    // Check if non-singleton (must use create())\n    const metadata = ServiceRegistry._metadata.get(key);\n    if (metadata && !metadata.isSingleton) {\n      throw new CorePackageError(\n        `Service '${key}' is configured as non-singleton. ` +\n          `Use await ServiceRegistry.create('${key}') to create a new instance.`,\n        ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n      );\n    }\n\n    // Check if pending lazy initialization\n    const pending = ServiceRegistry._pending.get(key);\n    if (pending) {\n      throw new CorePackageError(\n        `Service '${key}' is configured for lazy initialization. ` +\n          `Use await ServiceRegistry.getAsync('${key}') instead.`,\n        ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n      );\n    }\n\n    throw new CorePackageError(\n      `Service '${key}' not found. Register it in ServiceRegistry.initialize()`,\n      ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n    );\n  }\n\n  /**\n   * Create a new instance of a service.\n   * Use this for non-singleton services or when you need a fresh instance.\n   *\n   * Note: The caller is responsible for disposing the returned instance.\n   *\n   * @param key - Service key\n   * @param configOverrides - Optional config overrides for this instance\n   * @returns Promise resolving to a new service instance\n   *\n   * @example\n   * ```typescript\n   * // Non-singleton service - always creates new instance\n   * const instance1 = await ServiceRegistry.create<WorkerService>('worker');\n   * const instance2 = await ServiceRegistry.create<WorkerService>('worker');\n   * instance1 !== instance2; // true\n   *\n   * // With config overrides\n   * const customWorker = await ServiceRegistry.create<WorkerService>('worker', {\n   *   apiClient: { baseURL: 'https://custom-api.com' },\n   * });\n   *\n   * // Don't forget to dispose when done!\n   * instance1.dispose();\n   * instance2.dispose();\n   * ```\n   */\n  static async create<T extends CoreDomainServiceInstance = CoreDomainServiceInstance>(\n    key: string,\n    configOverrides?: Partial<CoreServiceInitConfig>\n  ): Promise<T> {\n    const metadata = ServiceRegistry._metadata.get(key);\n    if (!metadata) {\n      throw new CorePackageError(\n        `Service '${key}' not found. Register it in ServiceRegistry.initialize()`,\n        ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n      );\n    }\n\n    // Merge config with overrides\n    const mergedEntry: CoreServiceEntry = {\n      service: metadata.entry.service,\n      config: { ...metadata.entry.config, ...configOverrides },\n    };\n\n    // Create new instance (don't store in registry)\n    return ServiceRegistry.initializeService(mergedEntry, false) as Promise<T>;\n  }\n\n  /**\n   * Get a service instance by key with async initialization if needed.\n   * Use this for lazy-initialized services.\n   *\n   * @param key - Service key\n   * @returns Promise resolving to the service instance\n   *\n   * @example\n   * ```typescript\n   * const example = await ServiceRegistry.getAsync<ExampleDomainService>('example');\n   * const entities = await example.getAll();\n   * ```\n   */\n  static async getAsync<T extends CoreDomainServiceInstance = CoreDomainServiceInstance>(\n    key: string\n  ): Promise<T> {\n    // Return immediately if already initialized\n    const existing = ServiceRegistry._services.get(key);\n    if (existing) {\n      return existing as T;\n    }\n\n    // Check for in-progress initialization\n    const inProgress = ServiceRegistry._initPromises.get(key);\n    if (inProgress) {\n      return (await inProgress) as T;\n    }\n\n    // Check if pending lazy initialization\n    const pending = ServiceRegistry._pending.get(key);\n    if (pending) {\n      // Handle conditional initialization\n      if (typeof pending.initWhen === 'function') {\n        const shouldInit = await pending.initWhen();\n        if (!shouldInit) {\n          throw new CorePackageError(\n            `Service '${key}' initialization condition returned false`,\n            ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n          );\n        }\n      }\n\n      // Initialize and return\n      const service = await ServiceRegistry.initializeService(pending.entry);\n      ServiceRegistry._pending.delete(key);\n      return service as T;\n    }\n\n    throw new CorePackageError(\n      `Service '${key}' not found. Register it in ServiceRegistry.initialize()`,\n      ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n    );\n  }\n\n  /**\n   * Check if a service is registered (either initialized or pending).\n   *\n   * @param key - Service key\n   */\n  static has(key: string): boolean {\n    return ServiceRegistry._services.has(key) || ServiceRegistry._pending.has(key);\n  }\n\n  /**\n   * Check if a service is initialized and ready.\n   *\n   * @param key - Service key\n   */\n  static isInitialized(key: string): boolean {\n    return ServiceRegistry._services.has(key);\n  }\n\n  /**\n   * Get all initialized service keys.\n   */\n  static getInitializedKeys(): string[] {\n    return [...ServiceRegistry._services.keys()];\n  }\n\n  /**\n   * Get all pending (lazy) service keys.\n   */\n  static getPendingKeys(): string[] {\n    return [...ServiceRegistry._pending.keys()];\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Internal: Service Initialization\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /** Build API client options and instance for service */\n  // eslint-disable-next-line complexity\n  private static async buildApiClientOptions(\n    config: CoreServiceInitConfig,\n    entry: CoreServiceEntry\n  ): Promise<{ dedicated: boolean; options?: ApiClientOptions; instance?: unknown } | undefined> {\n    const dedicatedApiClient = config.dedicatedApiClient;\n    const isDedicated = dedicatedApiClient === true || typeof dedicatedApiClient === 'object';\n    const serviceKey = entry.service.serviceKey;\n\n    const options: ApiClientOptions | undefined = isDedicated\n      ? typeof dedicatedApiClient === 'object'\n        ? { ...ServiceRegistry._apiClientOptions, ...dedicatedApiClient }\n        : (ServiceRegistry._apiClientOptions ?? undefined)\n      : (ServiceRegistry._apiClientOptions ?? undefined);\n\n    if (!options) {\n      return undefined;\n    }\n\n    // Get or create API client instance\n    let apiInstance: unknown;\n    if (isDedicated && options) {\n      // Create dedicated API client instance for this service\n      try {\n        // Use the global environment from initialization\n        const envConfig = {\n          env: ServiceRegistry._environment,\n          setAsDefault: false, // Dedicated instances should not become default\n        };\n        apiInstance = await ApiClientService.createInstance(envConfig, options);\n        ServiceRegistry.logger.debug(\n          `Created dedicated API client instance for service '${serviceKey}'`,\n          {\n            environment: ServiceRegistry._environment,\n          }\n        );\n      } catch (error) {\n        ServiceRegistry.logger.warn(\n          `Failed to create dedicated API client for service '${serviceKey}'`,\n          {\n            error: error instanceof Error ? error.message : String(error),\n          }\n        );\n      }\n    } else {\n      // Use global shared API client\n      try {\n        apiInstance = ApiClientService.getClient();\n      } catch {\n        ServiceRegistry.logger.debug(\n          `Global API client not initialized, service '${serviceKey}' will not have API`\n        );\n      }\n    }\n\n    return {\n      dedicated: isDedicated,\n      options,\n      instance: apiInstance,\n    };\n  }\n\n  /** Build DB config and instance for service with runtime validation */\n  // eslint-disable-next-line complexity\n  private static async buildDbConfig(\n    config: CoreServiceInitConfig,\n    entry: CoreServiceEntry\n  ): Promise<\n    | {\n        dedicated: boolean;\n        config?: Partial<CoreDbServiceConfig>;\n        instance?: CoreDbServiceInstance;\n      }\n    | undefined\n  > {\n    const dedicatedDb = config.dedicatedDb;\n    const isDedicated = dedicatedDb === true || typeof dedicatedDb === 'object';\n    const serviceKey = entry.service.serviceKey;\n\n    // Runtime validation: DB should only be injected for backend services (including universal runtimes in backend context)\n    const isBackendRuntime =\n      BACKEND_RUNTIMES.includes(ServiceRegistry._runtime) ||\n      UNIVERSAL_RUNTIMES.includes(ServiceRegistry._runtime);\n\n    if ((isDedicated || ServiceRegistry._dbConfig) && !isBackendRuntime) {\n      ServiceRegistry.logger.warn(\n        `Service '${serviceKey}' is requesting database injection in '${ServiceRegistry._runtime}' runtime. ` +\n          `Database is only available in backend runtimes (${BACKEND_RUNTIMES.join(', ')}) or universal runtimes (${UNIVERSAL_RUNTIMES.join(', ')}). ` +\n          `This service will not have database access.`\n      );\n      return undefined; // Skip DB injection for non-backend runtimes\n    }\n\n    const dbConfig: Partial<CoreDbServiceConfig> | undefined = isDedicated\n      ? typeof dedicatedDb === 'object'\n        ? { ...ServiceRegistry._dbConfig, ...dedicatedDb }\n        : (ServiceRegistry._dbConfig ?? undefined)\n      : (ServiceRegistry._dbConfig ?? undefined);\n\n    if (!dbConfig) {\n      return undefined;\n    }\n\n    const DbService = getCoreDependency('DbService');\n    if (!DbService) {\n      ServiceRegistry.logger.debug(\n        `DbService not registered, service '${serviceKey}' will not have DB`\n      );\n      return undefined;\n    }\n\n    // Get or create DB instance\n    let dbInstance: CoreDbServiceInstance | undefined;\n    if (isDedicated && dbConfig) {\n      // Create dedicated database instance for this service\n      try {\n        dbInstance = await DbService.createInstance?.(dbConfig as CoreDbServiceConfig);\n        ServiceRegistry.logger.debug(\n          `Created dedicated database instance for service '${serviceKey}'`\n        );\n      } catch (error) {\n        ServiceRegistry.logger.warn(\n          `Failed to create dedicated database instance for service '${serviceKey}'`,\n          {\n            error: error instanceof Error ? error.message : String(error),\n          }\n        );\n      }\n    } else {\n      // Use global shared database\n      try {\n        dbInstance = DbService.getInstance();\n      } catch {\n        ServiceRegistry.logger.debug(\n          `Global DB not initialized, service '${serviceKey}' will not have DB`\n        );\n      }\n    }\n\n    return {\n      dedicated: isDedicated,\n      config: dbConfig,\n      instance: dbInstance,\n    };\n  }\n\n  /** Build cache config and instance for service with runtime validation */\n  // eslint-disable-next-line complexity\n  private static async buildCacheConfig(\n    config: CoreServiceInitConfig,\n    entry: CoreServiceEntry\n  ): Promise<\n    | { dedicated: boolean; config?: CoreCacheConfig; instance?: CoreCacheManagerInstance }\n    | undefined\n  > {\n    const dedicatedCache = config.dedicatedCache;\n    const isDedicated = dedicatedCache === true || typeof dedicatedCache === 'object';\n    const serviceKey = entry.service.serviceKey;\n\n    const cacheConfig: CoreCacheConfig | undefined = isDedicated\n      ? typeof dedicatedCache === 'object'\n        ? ({ ...ServiceRegistry._cacheConfig, ...dedicatedCache } as CoreCacheConfig)\n        : (ServiceRegistry._cacheConfig ?? undefined)\n      : (ServiceRegistry._cacheConfig ?? undefined);\n\n    if (!cacheConfig) {\n      return undefined;\n    }\n\n    // Runtime validation: Cache on frontend is not supported (CacheManager uses ioredis which requires Node.js)\n    const isFrontendRuntime = FRONTEND_RUNTIMES.includes(ServiceRegistry._runtime);\n\n    if (isFrontendRuntime) {\n      ServiceRegistry.logger.debug(\n        `Service '${serviceKey}' skipping cache (frontend runtime - use Zustand store + react-query instead)`\n      );\n      return undefined;\n    }\n\n    const CacheService = getCoreDependency('CacheService');\n    if (!CacheService) {\n      ServiceRegistry.logger.debug(\n        `CacheService not registered, service '${serviceKey}' will not have cache`\n      );\n      return undefined;\n    }\n\n    // Backend-only: Get cache manager instance from CacheService\n    let cacheInstance: CoreCacheManagerInstance | undefined;\n    try {\n      cacheInstance = CacheService.getInstance().getCacheManager();\n      if (isDedicated) {\n        ServiceRegistry.logger.debug(\n          `Using shared cache for service '${serviceKey}' (dedicated cache not implemented via DI)`,\n          { strategy: cacheConfig.strategy }\n        );\n      }\n    } catch {\n      ServiceRegistry.logger.debug(\n        `Global cache not initialized, service '${serviceKey}' will not have cache`\n      );\n    }\n\n    return {\n      dedicated: isDedicated,\n      config: cacheConfig,\n      instance: cacheInstance,\n    };\n  }\n\n  /** Build observability config and instance for service */\n  // eslint-disable-next-line complexity\n  private static buildObservabilityConfig(\n    config: CoreServiceInitConfig,\n    // eslint-disable-next-line no-unused-vars\n    _entry: CoreServiceEntry\n  ):\n    | { dedicated: boolean; config?: CoreObservabilityConfig; instance?: ObservabilityAdapter }\n    | undefined {\n    const dedicatedObservability = config.dedicatedObservability;\n    const isDedicated =\n      dedicatedObservability === true || typeof dedicatedObservability === 'object';\n\n    const observabilityConfig: CoreObservabilityConfig | undefined = isDedicated\n      ? typeof dedicatedObservability === 'object'\n        ? ({\n            ...ServiceRegistry._observabilityConfig,\n            ...dedicatedObservability,\n          } as CoreObservabilityConfig)\n        : (ServiceRegistry._observabilityConfig ?? undefined)\n      : (ServiceRegistry._observabilityConfig ?? undefined);\n\n    if (!observabilityConfig) {\n      return undefined;\n    }\n\n    // Instance will be set async if dedicated\n    return {\n      dedicated: isDedicated,\n      config: observabilityConfig,\n      instance: isDedicated ? undefined : (ServiceRegistry._observabilityInstance ?? undefined),\n    };\n  }\n\n  /** Build storage config and instance for service with runtime validation (backend-only) */\n  // eslint-disable-next-line complexity\n  private static async buildStorageConfig(\n    config: CoreServiceInitConfig,\n    entry: CoreServiceEntry\n  ): Promise<\n    | { dedicated: boolean; config?: CoreStorageConfig; instance?: CoreStorageServiceInstance }\n    | undefined\n  > {\n    const dedicatedStorage = config.dedicatedStorage;\n    const isDedicated = dedicatedStorage === true || typeof dedicatedStorage === 'object';\n    const serviceKey = entry.service.serviceKey;\n\n    // Runtime validation: Storage is backend-only (including universal runtimes in backend context)\n    const isBackendRuntime =\n      BACKEND_RUNTIMES.includes(ServiceRegistry._runtime) ||\n      UNIVERSAL_RUNTIMES.includes(ServiceRegistry._runtime);\n\n    if ((isDedicated || ServiceRegistry._storageConfig) && !isBackendRuntime) {\n      ServiceRegistry.logger.warn(\n        `Service '${serviceKey}' is requesting storage injection in '${ServiceRegistry._runtime}' runtime. ` +\n          `Storage is only available in backend runtimes (${BACKEND_RUNTIMES.join(', ')}) or universal runtimes (${UNIVERSAL_RUNTIMES.join(', ')}). ` +\n          `This service will not have storage access.`\n      );\n      return undefined;\n    }\n\n    const storageConfig: CoreStorageConfig | undefined = isDedicated\n      ? typeof dedicatedStorage === 'object'\n        ? { ...ServiceRegistry._storageConfig, ...dedicatedStorage }\n        : (ServiceRegistry._storageConfig ?? undefined)\n      : (ServiceRegistry._storageConfig ?? undefined);\n\n    if (!storageConfig) {\n      return undefined;\n    }\n\n    const StorageService = getCoreDependency('StorageService');\n    if (!StorageService) {\n      ServiceRegistry.logger.debug(\n        `StorageService not registered, service '${serviceKey}' will not have storage`\n      );\n      return undefined;\n    }\n\n    // Get or create storage instance\n    let storageInstance: CoreStorageServiceInstance | undefined;\n    if (isDedicated && storageConfig) {\n      try {\n        storageInstance = await StorageService.createInstance?.(storageConfig);\n        ServiceRegistry.logger.debug(\n          `Created dedicated storage instance for service '${serviceKey}'`\n        );\n      } catch (error) {\n        ServiceRegistry.logger.warn(\n          `Failed to create dedicated storage instance for service '${serviceKey}'`,\n          { error: error instanceof Error ? error.message : String(error) }\n        );\n      }\n    } else {\n      try {\n        storageInstance = StorageService.getInstance();\n      } catch {\n        ServiceRegistry.logger.debug(\n          `Global storage not initialized, service '${serviceKey}' will not have storage`\n        );\n      }\n    }\n\n    return {\n      dedicated: isDedicated,\n      config: storageConfig,\n      instance: storageInstance,\n    };\n  }\n\n  /** Build notifications config and instance for service with runtime validation (backend-only) */\n  // eslint-disable-next-line complexity\n  private static async buildNotificationsConfig(\n    config: CoreServiceInitConfig,\n    entry: CoreServiceEntry\n  ): Promise<\n    | {\n        dedicated: boolean;\n        config?: CoreNotificationConfig;\n        instance?: CoreNotificationServiceInstance;\n      }\n    | undefined\n  > {\n    const dedicatedNotifications = config.dedicatedNotifications;\n    const isDedicated =\n      dedicatedNotifications === true || typeof dedicatedNotifications === 'object';\n    const serviceKey = entry.service.serviceKey;\n\n    // Runtime validation: Notifications is backend-only (including universal runtimes in backend context)\n    const isBackendRuntime =\n      BACKEND_RUNTIMES.includes(ServiceRegistry._runtime) ||\n      UNIVERSAL_RUNTIMES.includes(ServiceRegistry._runtime);\n\n    if ((isDedicated || ServiceRegistry._notificationsConfig) && !isBackendRuntime) {\n      ServiceRegistry.logger.warn(\n        `Service '${serviceKey}' is requesting notifications injection in '${ServiceRegistry._runtime}' runtime. ` +\n          `Notifications is only available in backend runtimes (${BACKEND_RUNTIMES.join(', ')}) or universal runtimes (${UNIVERSAL_RUNTIMES.join(', ')}). ` +\n          `This service will not have notifications access.`\n      );\n      return undefined;\n    }\n\n    const notificationsConfig: CoreNotificationConfig | undefined = isDedicated\n      ? typeof dedicatedNotifications === 'object'\n        ? { ...ServiceRegistry._notificationsConfig, ...dedicatedNotifications }\n        : (ServiceRegistry._notificationsConfig ?? undefined)\n      : (ServiceRegistry._notificationsConfig ?? undefined);\n\n    if (!notificationsConfig) {\n      return undefined;\n    }\n\n    const NotificationService = getCoreDependency('NotificationService');\n    if (!NotificationService) {\n      ServiceRegistry.logger.debug(\n        `NotificationService not registered, service '${serviceKey}' will not have notifications`\n      );\n      return undefined;\n    }\n\n    // Get or create notifications instance\n    let notificationsInstance: CoreNotificationServiceInstance | undefined;\n    if (isDedicated && notificationsConfig) {\n      try {\n        notificationsInstance = await NotificationService.createInstance?.(notificationsConfig);\n        ServiceRegistry.logger.debug(\n          `Created dedicated notifications instance for service '${serviceKey}'`\n        );\n      } catch (error) {\n        ServiceRegistry.logger.warn(\n          `Failed to create dedicated notifications instance for service '${serviceKey}'`,\n          { error: error instanceof Error ? error.message : String(error) }\n        );\n      }\n    } else {\n      try {\n        notificationsInstance = NotificationService.getInstance();\n      } catch {\n        ServiceRegistry.logger.debug(\n          `Global notifications not initialized, service '${serviceKey}' will not have notifications`\n        );\n      }\n    }\n\n    return {\n      dedicated: isDedicated,\n      config: notificationsConfig,\n      instance: notificationsInstance,\n    };\n  }\n\n  /**\n   * Create a dedicated ObservabilityService instance for a service.\n   * Uses the same adapter pattern as global observability but with service-specific config.\n   */\n  private static async createDedicatedObservability(\n    serviceKey: string,\n    config: CoreObservabilityConfig\n  ): Promise<ObservabilityAdapter | undefined> {\n    // Skip if explicitly disabled\n    if (config.enabled === false) {\n      return undefined;\n    }\n\n    try {\n      // createObservabilityService auto-adds LoggerAdapter as failover\n      const dedicatedService = await createObservabilityService({\n        mode: config.mode ?? 'parallel',\n        serviceName: `${config.serviceName ?? 'service'}-${serviceKey}`,\n        environment: config.environment,\n        adapters: config.adapters,\n      });\n\n      ServiceRegistry.logger.debug(\n        `Created dedicated ObservabilityService for service '${serviceKey}'`\n      );\n\n      return dedicatedService;\n    } catch (err) {\n      ServiceRegistry.logger.warn(\n        `Failed to create dedicated observability for '${serviceKey}', falling back to global`,\n        { error: err instanceof Error ? err.message : String(err) }\n      );\n      return ServiceRegistry._observabilityInstance ?? undefined;\n    }\n  }\n\n  /**\n   * Set the global observability adapter instance.\n   * Called by Core.initialize() after creating the adapter.\n   */\n  static setObservabilityInstance(instance: ObservabilityAdapter): void {\n    ServiceRegistry._observabilityInstance = instance;\n    ServiceRegistry.logger.debug('Global observability instance set');\n  }\n\n  /**\n   * Get the global observability adapter instance.\n   */\n  static getObservabilityInstance(): ObservabilityAdapter | null {\n    return ServiceRegistry._observabilityInstance;\n  }\n\n  /**\n   * Initialize a single service from an entry.\n   * Uses the service class's static create() method.\n   * Merges per-service config with global config.\n   */\n  private static async initializeService(\n    entry: CoreServiceEntry,\n    storeSingleton = true\n  ): Promise<CoreDomainServiceInstance> {\n    const { service: ServiceClass, config } = entry;\n    const serviceKey = ServiceClass.serviceKey;\n    const isSingleton = config.singleton !== false;\n\n    // For singletons, check for concurrent initialization\n    if (storeSingleton && isSingleton) {\n      const existingPromise = ServiceRegistry._initPromises.get(serviceKey);\n      if (existingPromise) return existingPromise;\n    }\n\n    const initPromise = ServiceRegistry.doInitializeService(entry, { isSingleton, storeSingleton });\n\n    if (storeSingleton && isSingleton) {\n      ServiceRegistry._initPromises.set(serviceKey, initPromise);\n    }\n\n    return initPromise;\n  }\n\n  /** Build stores for service injection */\n  // eslint-disable-next-line complexity\n  private static buildStoresForService(\n    config: CoreServiceInitConfig,\n    entry: CoreServiceEntry\n  ): Partial<RootStoreSlice> | undefined {\n    const allKeys = new Set<keyof RootStoreSlice>();\n\n    // Add primary store - check config first, then service's static primaryStoreKey\n    if (config.store) {\n      allKeys.add(config.store);\n    } else if (\n      'primaryStoreKey' in entry.service &&\n      typeof entry.service.primaryStoreKey === 'string'\n    ) {\n      // Auto-resolve from service class's static primaryStoreKey property\n      allKeys.add(entry.service.primaryStoreKey as keyof RootStoreSlice);\n      ServiceRegistry.logger.debug(\n        `Auto-resolved store key '${entry.service.primaryStoreKey}' from service class`\n      );\n    }\n\n    // Add read stores\n    if (config.readStores) {\n      config.readStores.forEach(key => allKeys.add(key));\n    }\n\n    if (allKeys.size === 0) {\n      return undefined;\n    }\n\n    if (!ServiceRegistry._storeRegistry) {\n      ServiceRegistry.logger.warn('Store registry not initialized, cannot inject stores');\n      return undefined;\n    }\n\n    const stores: Partial<RootStoreSlice> = {};\n    for (const key of allKeys) {\n      const store = ServiceRegistry._storeRegistry.getStore(key);\n      if (store) {\n        (stores as Record<keyof RootStoreSlice, unknown>)[key] = store;\n        ServiceRegistry.logger.debug(`Injected store '${key}' into service`);\n      } else {\n        ServiceRegistry.logger.warn(`Store '${key}' requested but not found in registry`);\n      }\n    }\n\n    return Object.keys(stores).length > 0 ? stores : undefined;\n  }\n\n  /** Perform the actual service initialization */\n  // eslint-disable-next-line complexity\n  private static async doInitializeService(\n    entry: CoreServiceEntry,\n    options: { isSingleton: boolean; storeSingleton: boolean }\n  ): Promise<CoreDomainServiceInstance> {\n    const { service: serviceClass, config } = entry;\n    const serviceKey = serviceClass.serviceKey;\n    const { isSingleton, storeSingleton } = options;\n\n    try {\n      ServiceRegistry.logger.debug(`Initializing service: ${serviceKey}`);\n\n      // Build dependencies (async operations) with runtime validation\n      const apiClient = await ServiceRegistry.buildApiClientOptions(config, entry);\n      const db = await ServiceRegistry.buildDbConfig(config, entry);\n      const cache = await ServiceRegistry.buildCacheConfig(config, entry);\n      const observability = ServiceRegistry.buildObservabilityConfig(config, entry);\n      const storage = await ServiceRegistry.buildStorageConfig(config, entry);\n      const notifications = await ServiceRegistry.buildNotificationsConfig(config, entry);\n      const stores = ServiceRegistry.buildStoresForService(config, entry);\n\n      // Create dedicated observability instance if requested\n      let observabilityInstance = observability?.instance;\n      if (observability?.dedicated && observability.config) {\n        observabilityInstance = await ServiceRegistry.createDedicatedObservability(\n          serviceKey,\n          observability.config\n        );\n      }\n\n      const createOptions: CoreServiceCreateOptions = {\n        apiClient,\n        db,\n        cache,\n        observability: observability\n          ? { ...observability, instance: observabilityInstance }\n          : undefined,\n        storage,\n        notifications,\n        injected: {\n          ...(stores ? { stores } : {}),\n          cache: cache?.instance,\n          db: db?.instance,\n          api: apiClient?.instance,\n          observability: observabilityInstance,\n          storage: storage?.instance,\n          notifications: notifications?.instance,\n        },\n        isSingleton,\n      };\n\n      ServiceRegistry.logger.debug(`Service ${serviceKey} config:`, {\n        apiClientDedicated: createOptions.apiClient?.dedicated,\n        dbDedicated: createOptions.db?.dedicated,\n        observabilityDedicated: createOptions.observability?.dedicated,\n        storageDedicated: createOptions.storage?.dedicated,\n        notificationsDedicated: createOptions.notifications?.dedicated,\n        injected: {\n          hasCache: !!createOptions.injected?.cache,\n          hasDb: !!createOptions.injected?.db,\n          hasApi: !!createOptions.injected?.api,\n          hasObservability: !!createOptions.injected?.observability,\n          hasStorage: !!createOptions.injected?.storage,\n          hasNotifications: !!createOptions.injected?.notifications,\n          hasStores: !!createOptions.injected?.stores,\n        },\n      });\n\n      const instance = await serviceClass.create(config, createOptions);\n\n      if (storeSingleton && isSingleton) {\n        ServiceRegistry._services.set(serviceKey, instance);\n        ServiceRegistry.logger.info(`Service initialized: ${serviceKey} (singleton)`);\n      } else {\n        ServiceRegistry.logger.info(`Service created: ${serviceKey} (instance)`);\n      }\n\n      return instance;\n    } catch (error) {\n      ServiceRegistry.logger.error(`Failed to initialize service: ${serviceKey}`, {\n        error: error instanceof Error ? error.message : String(error),\n      });\n      throw error;\n    } finally {\n      if (storeSingleton && isSingleton) {\n        ServiceRegistry._initPromises.delete(serviceKey);\n      }\n    }\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Disposal\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Dispose a specific service by key.\n   *\n   * @param key - Service key to dispose\n   */\n  static dispose(key: string): void {\n    const service = ServiceRegistry._services.get(key);\n    if (service) {\n      service.dispose();\n      ServiceRegistry._services.delete(key);\n      ServiceRegistry.logger.info(`Service disposed: ${key}`);\n    }\n    ServiceRegistry._pending.delete(key);\n  }\n\n  /**\n   * Dispose all services and clear the registry.\n   */\n  static disposeAll(): void {\n    // Dispose all initialized services\n    for (const [key, service] of ServiceRegistry._services) {\n      try {\n        service.dispose();\n        ServiceRegistry.logger.debug(`Disposed service: ${key}`);\n      } catch (error) {\n        ServiceRegistry.logger.error(`Error disposing service: ${key}`, {\n          error: error instanceof Error ? error.message : String(error),\n        });\n      }\n    }\n\n    // Clear all state\n    ServiceRegistry._services.clear();\n    ServiceRegistry._pending.clear();\n    ServiceRegistry._metadata.clear();\n    ServiceRegistry._initPromises.clear();\n    ServiceRegistry._apiClientOptions = null;\n    ServiceRegistry._dbConfig = null;\n    ServiceRegistry._cacheConfig = null;\n    ServiceRegistry._observabilityConfig = null;\n    ServiceRegistry._observabilityInstance = null;\n    ServiceRegistry._storageConfig = null;\n    ServiceRegistry._notificationsConfig = null;\n\n    ServiceRegistry.logger.info('Service registry disposed');\n  }\n\n  /**\n   * Check if a service is configured as singleton.\n   *\n   * @param key - Service key\n   * @returns true if singleton (default), false if non-singleton\n   */\n  static isSingleton(key: string): boolean {\n    const metadata = ServiceRegistry._metadata.get(key);\n    return metadata?.isSingleton ?? true;\n  }\n\n  /**\n   * Get all non-singleton service keys.\n   * These services must be created via `create()` method.\n   */\n  static getNonSingletonKeys(): string[] {\n    return [...ServiceRegistry._metadata.entries()]\n      .filter(([, meta]) => !meta.isSingleton)\n      .map(([key]) => key);\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Dynamic Registration\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Register a new service dynamically after initialization.\n   *\n   * @param entry - Service entry to register\n   * @param initNow - Whether to initialize immediately (default: true)\n   *\n   * @example\n   * ```typescript\n   * // Register and initialize immediately\n   * await ServiceRegistry.register({\n   *   service: NewDomainService,\n   *   config: { enabled: true },\n   * });\n   *\n   * // Register for lazy initialization\n   * ServiceRegistry.register({\n   *   service: LazyService,\n   *   config: { enabled: true, initWhen: 'lazy' },\n   * }, false);\n   * ```\n   */\n  static async register(entry: CoreServiceEntry, initNow = true): Promise<void> {\n    const serviceKey = entry.service.serviceKey;\n\n    // Check if already registered\n    if (ServiceRegistry._services.has(serviceKey) || ServiceRegistry._pending.has(serviceKey)) {\n      ServiceRegistry.logger.warn(`Service '${serviceKey}' is already registered`);\n      return;\n    }\n\n    const initWhen = entry.config.initWhen ?? 'immediate';\n\n    if (initNow && initWhen === 'immediate') {\n      await ServiceRegistry.initializeService(entry);\n    } else {\n      ServiceRegistry._pending.set(serviceKey, { entry, initWhen });\n      ServiceRegistry.logger.debug(\n        `Service ${serviceKey} registered for ${initWhen} initialization`\n      );\n    }\n  }\n\n  /**\n   * Unregister a service (dispose if initialized).\n   *\n   * @param key - Service key to unregister\n   */\n  static unregister(key: string): void {\n    ServiceRegistry.dispose(key);\n  }\n}\n","/**\n * Stream Connection Manager\n *\n * Manages active streaming connections and channel subscriptions.\n * Provides connection lifecycle and subscription management.\n */\n\nimport type {\n  StreamChannel,\n  StreamConnection,\n  StreamConnectionInfo,\n  StreamManagerStats,\n  StreamTransportType,\n} from '@plyaz/types/core';\nimport { TIME_CONSTANTS } from '@plyaz/config';\n\n/**\n * Default configuration\n */\nconst DEFAULT_STALE_MINUTES = 5;\nconst DEFAULT_MAX_STALE_AGE = DEFAULT_STALE_MINUTES * TIME_CONSTANTS.MINUTE; // 5 minutes\n\n/**\n * StreamConnectionManager - Manages streaming connections\n *\n * Features:\n * - Connection lifecycle management\n * - Channel-based subscriptions\n * - Activity tracking for stale connection cleanup\n * - Statistics and debugging info\n *\n * @example\n * ```ts\n * const manager = new StreamConnectionManager();\n *\n * // Add connection\n * manager.addConnection({\n *   id: 'conn-1',\n *   transport: 'sse',\n *   channels: new Set(),\n *   createdAt: new Date(),\n *   lastActivity: new Date(),\n * });\n *\n * // Subscribe to channel\n * manager.subscribe('conn-1', 'upload:abc123');\n *\n * // Get connections for broadcasting\n * const connections = manager.getConnectionsByChannel('upload:abc123');\n * ```\n */\nexport class StreamConnectionManager {\n  /** Active connections by ID */\n  private connections = new Map<string, StreamConnection>();\n\n  /** Channel → connection IDs mapping for efficient broadcasting */\n  private channelSubscriptions = new Map<string, Set<string>>();\n\n  /**\n   * Add a new connection\n   *\n   * @param connection - Connection to add\n   */\n  addConnection(connection: StreamConnection): void {\n    this.connections.set(connection.id, connection);\n  }\n\n  /**\n   * Remove a connection and its subscriptions\n   *\n   * @param connectionId - Connection to remove\n   */\n  removeConnection(connectionId: string): void {\n    const connection = this.connections.get(connectionId);\n    if (!connection) return;\n\n    // Remove from all channel subscriptions\n    for (const channel of connection.channels) {\n      this.channelSubscriptions.get(channel)?.delete(connectionId);\n\n      // Clean up empty channel sets\n      if (this.channelSubscriptions.get(channel)?.size === 0) {\n        this.channelSubscriptions.delete(channel);\n      }\n    }\n\n    // Remove connection\n    this.connections.delete(connectionId);\n  }\n\n  /**\n   * Get a connection by ID\n   *\n   * @param connectionId - Connection ID\n   */\n  getConnection(connectionId: string): StreamConnection | undefined {\n    return this.connections.get(connectionId);\n  }\n\n  /**\n   * Check if connection exists\n   *\n   * @param connectionId - Connection ID\n   */\n  hasConnection(connectionId: string): boolean {\n    return this.connections.has(connectionId);\n  }\n\n  /**\n   * Subscribe connection to a channel\n   *\n   * @param connectionId - Connection to subscribe\n   * @param channel - Channel to subscribe to\n   */\n  subscribe(connectionId: string, channel: StreamChannel): void {\n    const connection = this.connections.get(connectionId);\n    if (!connection) return;\n\n    // Add to connection's channels\n    connection.channels.add(channel);\n\n    // Add to channel subscriptions index\n    if (!this.channelSubscriptions.has(channel)) {\n      this.channelSubscriptions.set(channel, new Set());\n    }\n    this.channelSubscriptions.get(channel)!.add(connectionId);\n\n    // Update activity\n    connection.lastActivity = new Date();\n  }\n\n  /**\n   * Unsubscribe connection from a channel\n   *\n   * @param connectionId - Connection to unsubscribe\n   * @param channel - Channel to unsubscribe from\n   */\n  unsubscribe(connectionId: string, channel: StreamChannel): void {\n    const connection = this.connections.get(connectionId);\n    if (!connection) return;\n\n    // Remove from connection's channels\n    connection.channels.delete(channel);\n\n    // Remove from channel subscriptions index\n    this.channelSubscriptions.get(channel)?.delete(connectionId);\n\n    // Clean up empty channel sets\n    if (this.channelSubscriptions.get(channel)?.size === 0) {\n      this.channelSubscriptions.delete(channel);\n    }\n\n    // Update activity\n    connection.lastActivity = new Date();\n  }\n\n  /**\n   * Get all connections subscribed to a channel\n   *\n   * @param channel - Channel to query\n   */\n  getConnectionsByChannel(channel: StreamChannel): StreamConnection[] {\n    const connectionIds = this.channelSubscriptions.get(channel);\n    if (!connectionIds) return [];\n\n    return Array.from(connectionIds)\n      .map(id => this.connections.get(id))\n      .filter((conn): conn is StreamConnection => conn !== undefined);\n  }\n\n  /**\n   * Get all channels a connection is subscribed to\n   *\n   * @param connectionId - Connection ID\n   */\n  getChannelsByConnection(connectionId: string): StreamChannel[] {\n    const connection = this.connections.get(connectionId);\n    if (!connection) return [];\n\n    return Array.from(connection.channels) as StreamChannel[];\n  }\n\n  /**\n   * Update connection's last activity timestamp\n   *\n   * @param connectionId - Connection ID\n   */\n  updateActivity(connectionId: string): void {\n    const connection = this.connections.get(connectionId);\n    if (connection) {\n      connection.lastActivity = new Date();\n    }\n  }\n\n  /**\n   * Clean up stale connections\n   *\n   * @param maxAge - Maximum age in milliseconds (default: 5 minutes)\n   * @returns Removed connection IDs\n   */\n  cleanupStale(maxAge: number = DEFAULT_MAX_STALE_AGE): string[] {\n    const now = Date.now();\n    const removed: string[] = [];\n\n    for (const [id, connection] of this.connections) {\n      const age = now - connection.lastActivity.getTime();\n      if (age > maxAge) {\n        this.removeConnection(id);\n        removed.push(id);\n      }\n    }\n\n    return removed;\n  }\n\n  /**\n   * Get all connection IDs\n   */\n  getConnectionIds(): string[] {\n    return Array.from(this.connections.keys());\n  }\n\n  /**\n   * Get all connections\n   */\n  getAllConnections(): StreamConnection[] {\n    return Array.from(this.connections.values());\n  }\n\n  /**\n   * Get all active channels\n   */\n  getActiveChannels(): StreamChannel[] {\n    return Array.from(this.channelSubscriptions.keys()) as StreamChannel[];\n  }\n\n  /**\n   * Get connection info (serializable)\n   *\n   * @param connectionId - Connection ID\n   */\n  getConnectionInfo(connectionId: string): StreamConnectionInfo | undefined {\n    const connection = this.connections.get(connectionId);\n    if (!connection) return undefined;\n\n    return {\n      id: connection.id,\n      userId: connection.userId,\n      transport: connection.transport,\n      channels: Array.from(connection.channels),\n      createdAt: connection.createdAt.toISOString(),\n      lastActivity: connection.lastActivity.toISOString(),\n      metadata: connection.metadata,\n    };\n  }\n\n  /**\n   * Get manager statistics\n   */\n  getStats(): StreamManagerStats {\n    const connectionsByTransport: Record<StreamTransportType, number> = {\n      sse: 0,\n      websocket: 0,\n    };\n\n    for (const connection of this.connections.values()) {\n      connectionsByTransport[connection.transport]++;\n    }\n\n    return {\n      totalConnections: this.connections.size,\n      connectionsByTransport,\n      totalSubscriptions: Array.from(this.channelSubscriptions.values()).reduce(\n        (sum, set) => sum + set.size,\n        0\n      ),\n      activeChannels: this.channelSubscriptions.size,\n    };\n  }\n\n  /**\n   * Clear all connections (for shutdown)\n   */\n  clear(): void {\n    this.connections.clear();\n    this.channelSubscriptions.clear();\n  }\n}\n","/**\n * Stream Broadcaster\n *\n * Core infrastructure for streaming to clients.\n * Orchestrates auth, transport, and connection management.\n *\n * Note: Event subscriptions are handled by ChannelControllers,\n * not directly by StreamBroadcaster.\n */\nimport type { BaseAuthAdapter } from './auth/BaseAuthAdapter';\nimport type { BaseTransportAdapter } from './transports/BaseTransportAdapter';\nimport { StreamConnectionManager } from './StreamConnectionManager';\nimport type {\n  StreamAuthResult,\n  StreamBroadcasterConfig,\n  StreamChannel,\n  StreamConnection,\n  StreamManagerStats,\n  StreamMessage,\n  StreamTransportType,\n} from '@plyaz/types/core';\nimport { STREAM_ERROR_CODES } from '@plyaz/types';\nimport { TIME_CONSTANTS } from '@plyaz/config';\nimport { StreamPackageError } from '@plyaz/errors';\n\n/**\n * Default configuration\n */\nconst DEFAULT_CLEANUP_INTERVAL = TIME_CONSTANTS.MINUTE; // 1 minute\nconst DEFAULT_STALE_MINUTES = 5;\nconst DEFAULT_MAX_STALE_AGE = DEFAULT_STALE_MINUTES * TIME_CONSTANTS.MINUTE; // 5 minutes\n\n/**\n * StreamBroadcaster - Core streaming infrastructure\n *\n * Features:\n * - Manages connections via StreamConnectionManager\n * - Routes messages through transport adapters (SSE, WebSocket)\n * - Handles auth via adapter\n * - Automatic stale connection cleanup\n * - Channel-based message broadcasting\n *\n * Note: Event subscriptions are handled by endpoint controllers\n * registered via StreamRegistry (e.g., FilesChannelController).\n *\n * @example\n * ```ts\n * const broadcaster = new StreamBroadcaster(\n *   new AnonymousAuthAdapter(),\n *   [new SSETransportAdapter()]\n * );\n *\n * broadcaster.initialize();\n *\n * // Register with StreamRegistry\n * await StreamRegistry.initialize({\n *   broadcaster,\n *   endpoints: [\n *     { endpoint: FilesStreamEndpoint, config: { enabled: true } },\n *   ],\n * });\n *\n * // In API route\n * const authResult = await broadcaster.authenticate(request);\n * const response = await broadcaster.createConnection('conn-1', 'sse', request);\n * broadcaster.subscribe('conn-1', 'upload:abc123', authResult);\n * return response;\n * ```\n */\nexport class StreamBroadcaster {\n  private readonly connectionManager: StreamConnectionManager;\n  private readonly authAdapter: BaseAuthAdapter;\n  private readonly transports: Map<StreamTransportType, BaseTransportAdapter>;\n  private readonly maxStaleAge: number;\n\n  private unsubscribers: (() => void)[] = [];\n  private cleanupTimer?: ReturnType<typeof setInterval>;\n  private initialized = false;\n\n  constructor(\n    authAdapter: BaseAuthAdapter,\n    transports: BaseTransportAdapter[],\n    config?: StreamBroadcasterConfig\n  ) {\n    this.connectionManager = new StreamConnectionManager();\n    this.authAdapter = authAdapter;\n    this.transports = new Map(transports.map(t => [t.type, t]));\n    this.maxStaleAge = config?.maxStaleAge ?? DEFAULT_MAX_STALE_AGE;\n  }\n\n  /**\n   * Initialize cleanup timer\n   * Call once on startup\n   *\n   * Note: Event subscriptions are now handled by endpoint controllers\n   * registered via StreamRegistry (e.g., FilesChannelController, SystemChannelController).\n   */\n  initialize(): void {\n    if (this.initialized) return;\n\n    // Start cleanup timer for stale connections\n    this.cleanupTimer = setInterval(() => {\n      this.cleanupStaleConnections();\n    }, DEFAULT_CLEANUP_INTERVAL);\n\n    this.initialized = true;\n  }\n\n  /**\n   * Authenticate a connection request\n   *\n   * @param request - HTTP request\n   * @returns Authentication result\n   */\n  async authenticate(request: Request): Promise<StreamAuthResult> {\n    return this.authAdapter.authenticate(request);\n  }\n\n  /**\n   * Check if user can subscribe to a channel\n   *\n   * @param authResult - Authentication result\n   * @param channel - Channel to subscribe\n   */\n  canSubscribe(authResult: StreamAuthResult, channel: StreamChannel): boolean {\n    return this.authAdapter.canSubscribe(authResult.userId, channel, authResult.scopes);\n  }\n\n  /**\n   * Create a new streaming connection\n   *\n   * @param connectionId - Unique connection ID\n   * @param transportType - Transport to use (sse or websocket)\n   * @param request - HTTP request\n   * @param authResult - Optional auth result (if already authenticated)\n   * @returns Response (for SSE) or void (for WebSocket)\n   */\n  async createConnection(\n    connectionId: string,\n    transportType: StreamTransportType,\n    request: Request,\n    authResult?: StreamAuthResult\n  ): Promise<Response | void> {\n    const transport = this.transports.get(transportType);\n    if (!transport) {\n      throw new StreamPackageError(\n        `Transport not available: ${transportType}`,\n        STREAM_ERROR_CODES.TRANSPORT_NOT_SUPPORTED,\n        { context: { transport: transportType } }\n      );\n    }\n\n    // Create connection in transport\n    const response = await transport.createConnection(connectionId, request);\n\n    // Track connection\n    const connection: StreamConnection = {\n      id: connectionId,\n      userId: authResult?.userId,\n      transport: transportType,\n      channels: new Set(),\n      createdAt: new Date(),\n      lastActivity: new Date(),\n      metadata: authResult?.metadata,\n    };\n    this.connectionManager.addConnection(connection);\n\n    return response;\n  }\n\n  /**\n   * Subscribe connection to a channel\n   *\n   * @param connectionId - Connection ID\n   * @param channel - Channel to subscribe\n   * @param authResult - Auth result for permission check\n   * @returns Whether subscription succeeded\n   */\n  subscribe(connectionId: string, channel: StreamChannel, authResult?: StreamAuthResult): boolean {\n    // Check permission if auth result provided\n    if (authResult && !this.canSubscribe(authResult, channel)) {\n      return false;\n    }\n\n    this.connectionManager.subscribe(connectionId, channel);\n    return true;\n  }\n\n  /**\n   * Unsubscribe connection from a channel\n   *\n   * @param connectionId - Connection ID\n   * @param channel - Channel to unsubscribe\n   */\n  unsubscribe(connectionId: string, channel: StreamChannel): void {\n    this.connectionManager.unsubscribe(connectionId, channel);\n  }\n\n  /**\n   * Close a connection\n   *\n   * @param connectionId - Connection to close\n   */\n  async closeConnection(connectionId: string): Promise<void> {\n    const connection = this.connectionManager.getConnection(connectionId);\n    if (!connection) return;\n\n    // Close in transport\n    const transport = this.transports.get(connection.transport);\n    if (transport) {\n      await transport.close(connectionId);\n    }\n\n    // Remove from manager\n    this.connectionManager.removeConnection(connectionId);\n  }\n\n  /**\n   * Broadcast message to all connections on a channel\n   *\n   * @param channel - Channel to broadcast to\n   * @param message - Message to send\n   */\n  broadcastToChannel(channel: StreamChannel, message: StreamMessage): void {\n    const connections = this.connectionManager.getConnectionsByChannel(channel);\n\n    for (const conn of connections) {\n      const transport = this.transports.get(conn.transport);\n      if (transport) {\n        transport.send(conn.id, { ...message, channel }).catch(() => {\n          // Connection likely dead, will be cleaned up\n        });\n      }\n    }\n  }\n\n  /**\n   * Send message to a specific connection\n   *\n   * @param connectionId - Connection ID\n   * @param message - Message to send\n   */\n  async sendToConnection(connectionId: string, message: StreamMessage): Promise<void> {\n    const connection = this.connectionManager.getConnection(connectionId);\n    if (!connection) return;\n\n    const transport = this.transports.get(connection.transport);\n    if (transport) {\n      await transport.send(connectionId, message);\n    }\n  }\n\n  /**\n   * Broadcast to all connections (system-wide)\n   *\n   * @param message - Message to send\n   */\n  broadcastToAll(message: StreamMessage): void {\n    for (const connection of this.connectionManager.getAllConnections()) {\n      const transport = this.transports.get(connection.transport);\n      if (transport) {\n        transport.send(connection.id, message).catch(() => {\n          // Connection likely dead\n        });\n      }\n    }\n  }\n\n  /**\n   * Get manager statistics\n   */\n  getStats(): StreamManagerStats {\n    return this.connectionManager.getStats();\n  }\n\n  /**\n   * Dispose broadcaster (for shutdown)\n   */\n  dispose(): void {\n    // Stop event subscriptions\n    this.unsubscribers.forEach(unsub => unsub());\n    this.unsubscribers = [];\n\n    // Stop cleanup timer\n    if (this.cleanupTimer) {\n      clearInterval(this.cleanupTimer);\n      this.cleanupTimer = undefined;\n    }\n\n    // Close all connections\n    for (const [, transport] of this.transports) {\n      if ('closeAll' in transport && typeof transport.closeAll === 'function') {\n        void (transport as { closeAll: () => Promise<void> }).closeAll();\n      }\n    }\n\n    // Clear connection manager\n    this.connectionManager.clear();\n\n    this.initialized = false;\n  }\n\n  /**\n   * Clean up stale connections\n   */\n  private cleanupStaleConnections(): void {\n    const removed = this.connectionManager.cleanupStale(this.maxStaleAge);\n\n    // Also close in transports\n    for (const connectionId of removed) {\n      for (const [, transport] of this.transports) {\n        if (transport.isAlive(connectionId)) {\n          transport.close(connectionId).catch(() => {\n            // Already closed\n          });\n        }\n      }\n    }\n  }\n}\n","/**\n * Base Auth Adapter\n *\n * Abstract base class for stream authentication adapters.\n * Follows the adapter pattern used in @plyaz/storage.\n */\n\nimport type { StreamAuthAdapterConfig, StreamAuthResult, StreamChannel } from '@plyaz/types/core';\n\n/**\n * BaseAuthAdapter - Abstract base class for all stream auth adapters\n *\n * Provides:\n * - Common configuration handling\n * - Interface for authentication and authorization\n *\n * Subclasses must implement:\n * - authenticate() - Validate connection request\n * - canSubscribe() - Check channel subscription permissions\n *\n * @example\n * ```ts\n * class MyAuthAdapter extends BaseAuthAdapter {\n *   async authenticate(request: Request): Promise<StreamAuthResult> {\n *     // Custom authentication logic\n *   }\n *\n *   canSubscribe(userId, channel, scopes): boolean {\n *     // Custom authorization logic\n *   }\n * }\n * ```\n */\nexport abstract class BaseAuthAdapter {\n  /** Adapter name for logging/debugging */\n  readonly name: string;\n\n  /** Whether this adapter is enabled */\n  readonly enabled: boolean;\n\n  constructor(config: StreamAuthAdapterConfig) {\n    this.name = config.name;\n    this.enabled = config.enabled ?? true;\n  }\n\n  /**\n   * Authenticate a connection request\n   *\n   * @param request - HTTP request or WebSocket upgrade request\n   * @returns Authentication result with user info if authenticated\n   */\n  abstract authenticate(request: Request): Promise<StreamAuthResult>;\n\n  /**\n   * Check if user can subscribe to a channel\n   *\n   * @param userId - User ID (undefined for anonymous connections)\n   * @param channel - Channel to subscribe to\n   * @param scopes - User's allowed scopes from authentication\n   * @returns Whether subscription is allowed\n   */\n  abstract canSubscribe(\n    userId: string | undefined,\n    channel: StreamChannel,\n    scopes?: string[]\n  ): boolean;\n\n  /**\n   * Get adapter info for debugging\n   */\n  getAdapterInfo(): { name: string; enabled: boolean } {\n    return {\n      name: this.name,\n      enabled: this.enabled,\n    };\n  }\n}\n","/**\n * Anonymous Auth Adapter\n *\n * No-op authentication adapter for local/development use.\n * Allows all connections and channel subscriptions.\n */\n\nimport type { StreamAuthResult, StreamChannel } from '@plyaz/types/core';\nimport { BaseAuthAdapter } from '../BaseAuthAdapter';\n\n/**\n * AnonymousAuthAdapter - Allows all connections without authentication\n *\n * Use cases:\n * - Local development\n * - Internal services without auth requirements\n * - Testing environments\n *\n * @example\n * ```ts\n * const authAdapter = new AnonymousAuthAdapter();\n *\n * // Always returns authenticated: true\n * const result = await authAdapter.authenticate(request);\n * console.log(result.authenticated); // true\n *\n * // Always allows subscription\n * const canSub = authAdapter.canSubscribe(undefined, 'uploads');\n * console.log(canSub); // true\n * ```\n */\nexport class AnonymousAuthAdapter extends BaseAuthAdapter {\n  constructor() {\n    super({ name: 'anonymous' });\n  }\n\n  /**\n   * Authenticate request (always succeeds)\n   *\n   * @returns Always returns { authenticated: true }\n   */\n  async authenticate(): Promise<StreamAuthResult> {\n    return { authenticated: true };\n  }\n\n  /**\n   * Check subscription permission (always allowed)\n   *\n   * @returns Always returns true\n   */\n  // eslint-disable-next-line  no-unused-vars\n  canSubscribe(_userId: string | undefined, _channel: StreamChannel, _scopes?: string[]): boolean {\n    return true;\n  }\n}\n","/**\n * Base Transport Adapter\n *\n * Abstract base class for stream transport adapters.\n * Follows the adapter pattern used in @plyaz/storage.\n */\n\nimport type {\n  StreamMessage,\n  StreamTransportAdapterConfig,\n  StreamTransportType,\n} from '@plyaz/types/core';\nimport { STREAMING_DEFAULTS } from '@plyaz/config/streaming';\n\n/**\n * BaseTransportAdapter - Abstract base class for all transport adapters\n *\n * Provides:\n * - Common configuration handling\n * - Interface for connection management\n * - Message sending abstraction\n *\n * Subclasses must implement:\n * - createConnection() - Create new connection\n * - send() - Send message to connection\n * - close() - Close connection\n * - isAlive() - Check connection status\n *\n * @example\n * ```ts\n * class MyTransportAdapter extends BaseTransportAdapter {\n *   async createConnection(connectionId: string, request: Request): Promise<Response> {\n *     // Implementation\n *   }\n *   // ... other methods\n * }\n * ```\n */\nexport abstract class BaseTransportAdapter {\n  /** Adapter name for logging/debugging */\n  readonly name: string;\n\n  /** Transport type identifier */\n  readonly type: StreamTransportType;\n\n  /** Heartbeat interval in milliseconds */\n  protected readonly heartbeatInterval: number;\n\n  /** Maximum concurrent connections */\n  protected readonly maxConnections: number;\n\n  constructor(config: StreamTransportAdapterConfig & { type: StreamTransportType }) {\n    this.name = config.name;\n    this.type = config.type;\n    this.heartbeatInterval = config.heartbeatInterval ?? STREAMING_DEFAULTS.HEARTBEAT_INTERVAL_MS;\n    this.maxConnections = config.maxConnections ?? STREAMING_DEFAULTS.MAX_CONNECTIONS;\n  }\n\n  /**\n   * Create a new streaming connection\n   *\n   * For SSE: Returns a Response with streaming body\n   * For WebSocket: Modifies socket directly, returns void\n   *\n   * @param connectionId - Unique connection identifier\n   * @param request - HTTP request or WebSocket upgrade request\n   * @returns Response for SSE, void for WebSocket\n   */\n  abstract createConnection(connectionId: string, request: Request): Promise<Response | void>;\n\n  /**\n   * Send a message to a specific connection\n   *\n   * @param connectionId - Connection to send to\n   * @param message - Message to send\n   */\n  abstract send(connectionId: string, message: StreamMessage): Promise<void>;\n\n  /**\n   * Close a connection\n   *\n   * @param connectionId - Connection to close\n   */\n  abstract close(connectionId: string): Promise<void>;\n\n  /**\n   * Check if a connection is still alive\n   *\n   * @param connectionId - Connection to check\n   * @returns Whether connection is alive\n   */\n  abstract isAlive(connectionId: string): boolean;\n\n  /**\n   * Get current connection count\n   *\n   * @returns Number of active connections\n   */\n  abstract getConnectionCount(): number;\n\n  /**\n   * Get adapter info for debugging\n   */\n  getAdapterInfo(): {\n    name: string;\n    type: StreamTransportType;\n    heartbeatInterval: number;\n    maxConnections: number;\n    connectionCount: number;\n  } {\n    return {\n      name: this.name,\n      type: this.type,\n      heartbeatInterval: this.heartbeatInterval,\n      maxConnections: this.maxConnections,\n      connectionCount: this.getConnectionCount(),\n    };\n  }\n\n  /**\n   * Check if adapter can accept more connections\n   */\n  canAcceptConnection(): boolean {\n    return this.getConnectionCount() < this.maxConnections;\n  }\n}\n","/**\n * SSE Transport Adapter\n *\n * Server-Sent Events transport for real-time streaming.\n * Uses Web Streams API for compatibility with Next.js/Edge runtime.\n */\n\n/* eslint-disable n/no-unsupported-features/node-builtins */\n// ReadableStream and ReadableStreamDefaultController are stable Web APIs,\n// supported in all modern browsers and Edge runtime\n\nimport type { StreamMessage, StreamTransportAdapterConfig } from '@plyaz/types/core';\nimport { BaseTransportAdapter } from '../BaseTransportAdapter';\n\n/**\n * Internal connection state\n */\ninterface SSEConnection {\n  controller: ReadableStreamDefaultController;\n  heartbeatTimer?: ReturnType<typeof setInterval>;\n  createdAt: Date;\n}\n\n/**\n * SSETransportAdapter - Server-Sent Events transport\n *\n * Features:\n * - Web Streams API for Edge runtime compatibility\n * - Automatic heartbeat to keep connections alive\n * - Proper SSE formatting with event, id, retry, data fields\n * - Connection cleanup on disconnect\n *\n * @example\n * ```ts\n * const sseAdapter = new SSETransportAdapter({ heartbeatInterval: 15000 });\n *\n * // In API route\n * const response = await sseAdapter.createConnection(connectionId, request);\n * return response; // Returns SSE stream\n *\n * // Send message\n * await sseAdapter.send(connectionId, {\n *   event: 'progress',\n *   data: { percentage: 50 },\n * });\n * ```\n */\nexport class SSETransportAdapter extends BaseTransportAdapter {\n  private connections = new Map<string, SSEConnection>();\n\n  constructor(config?: Partial<StreamTransportAdapterConfig>) {\n    super({\n      name: config?.name ?? 'sse',\n      type: 'sse',\n      heartbeatInterval: config?.heartbeatInterval,\n      maxConnections: config?.maxConnections,\n    });\n  }\n\n  /**\n   * Create a new SSE connection\n   *\n   * @param connectionId - Unique connection identifier\n   * @returns Response with SSE stream\n   */\n  async createConnection(connectionId: string): Promise<Response> {\n    // Check if we can accept more connections\n    if (!this.canAcceptConnection()) {\n      return new Response('Too many connections', { status: 503 });\n    }\n\n    // Create the SSE stream\n    const stream = new ReadableStream({\n      start: controller => {\n        // Store connection\n        const connection: SSEConnection = {\n          controller,\n          createdAt: new Date(),\n        };\n        this.connections.set(connectionId, connection);\n\n        // Send initial connection message\n        this.sendImmediate(controller, {\n          event: 'connected',\n          data: { connectionId, timestamp: Date.now() },\n        });\n\n        // Start heartbeat\n        connection.heartbeatTimer = setInterval(() => {\n          if (!this.isAlive(connectionId)) {\n            this.cleanup(connectionId);\n            return;\n          }\n          this.sendImmediate(controller, {\n            event: 'heartbeat',\n            data: { timestamp: Date.now() },\n          });\n        }, this.heartbeatInterval);\n      },\n      cancel: () => {\n        this.cleanup(connectionId);\n      },\n    });\n\n    return new Response(stream, {\n      headers: {\n        'Content-Type': 'text/event-stream',\n        'Cache-Control': 'no-cache, no-transform',\n        Connection: 'keep-alive',\n        'X-Accel-Buffering': 'no', // Disable nginx buffering\n      },\n    });\n  }\n\n  /**\n   * Send a message to a connection\n   *\n   * @param connectionId - Connection to send to\n   * @param message - Message to send\n   */\n  async send(connectionId: string, message: StreamMessage): Promise<void> {\n    const connection = this.connections.get(connectionId);\n    if (!connection) return;\n\n    try {\n      this.sendImmediate(connection.controller, message);\n    } catch {\n      // Connection likely closed, cleanup\n      this.cleanup(connectionId);\n    }\n  }\n\n  /**\n   * Close a connection\n   *\n   * @param connectionId - Connection to close\n   */\n  async close(connectionId: string): Promise<void> {\n    const connection = this.connections.get(connectionId);\n    if (!connection) return;\n\n    try {\n      // Send close event before closing\n      this.sendImmediate(connection.controller, {\n        event: 'close',\n        data: { reason: 'server_close' },\n      });\n      connection.controller.close();\n    } catch {\n      // Already closed\n    }\n\n    this.cleanup(connectionId);\n  }\n\n  /**\n   * Check if a connection is alive\n   *\n   * @param connectionId - Connection to check\n   */\n  isAlive(connectionId: string): boolean {\n    return this.connections.has(connectionId);\n  }\n\n  /**\n   * Get current connection count\n   */\n  getConnectionCount(): number {\n    return this.connections.size;\n  }\n\n  /**\n   * Get all connection IDs\n   */\n  getConnectionIds(): string[] {\n    return Array.from(this.connections.keys());\n  }\n\n  /**\n   * Send message immediately to controller\n   */\n  private sendImmediate(controller: ReadableStreamDefaultController, message: StreamMessage): void {\n    const formatted = this.formatSSE(message);\n    controller.enqueue(new TextEncoder().encode(formatted));\n  }\n\n  /**\n   * Format message as SSE\n   *\n   * SSE format:\n   * ```\n   * id: messageId\n   * retry: retryMs\n   * data: {\"event\":\"eventName\",\"channel\":\"channelName\",\"data\":{...}}\n   *\n   * ```\n   *\n   * Note: We intentionally DON'T use SSE named events (event: line) because:\n   * 1. EventSource silently drops events without registered listeners\n   * 2. Hardcoding all possible event names is not scalable\n   * 3. Including event in JSON payload is more flexible\n   *\n   * The client extracts event/channel from the JSON payload in onmessage.\n   */\n  private formatSSE(message: StreamMessage): string {\n    let output = '';\n\n    if (message.id) {\n      output += `id: ${message.id}\\n`;\n    }\n\n    if (message.retry !== undefined) {\n      output += `retry: ${message.retry}\\n`;\n    }\n\n    // Include event and channel in the data payload for the client to extract\n    const payload = {\n      event: message.event,\n      channel: message.channel,\n      data: message.data,\n      timestamp: message.timestamp ?? Date.now(),\n    };\n\n    output += `data: ${JSON.stringify(payload)}\\n`;\n\n    // Double newline to end message\n    output += '\\n';\n\n    return output;\n  }\n\n  /**\n   * Cleanup connection resources\n   */\n  private cleanup(connectionId: string): void {\n    const connection = this.connections.get(connectionId);\n    if (!connection) return;\n\n    // Clear heartbeat timer\n    if (connection.heartbeatTimer) {\n      clearInterval(connection.heartbeatTimer);\n    }\n\n    // Remove from map\n    this.connections.delete(connectionId);\n  }\n\n  /**\n   * Close all connections (for shutdown)\n   */\n  async closeAll(): Promise<void> {\n    const connectionIds = this.getConnectionIds();\n    await Promise.all(connectionIds.map(id => this.close(id)));\n  }\n}\n","/**\n * Base Framework Adapter\n *\n * Abstract base class for framework-specific streaming adapters.\n * Converts framework-specific request/response to Web Request/Response.\n *\n * Follows the adapter pattern used in BaseTransportAdapter and BaseAuthAdapter.\n *\n * @example\n * ```typescript\n * class MyFrameworkAdapter extends BaseFrameworkAdapter {\n *   readonly framework = 'myframework' as const;\n *\n *   createHandler(handleRequest, options) {\n *     return (req, res) => {\n *       const webRequest = this.convertRequest(req);\n *       const response = await handleRequest(webRequest, options?.transport);\n *       await this.handleResponse(response, req, res);\n *     };\n *   }\n *   // ... other methods\n * }\n * ```\n */\n\nimport type {\n  FrameworkType,\n  FrameworkAdapterConfig,\n  FrameworkHandlerOptions,\n  CoreRequestHandler,\n} from '@plyaz/types/core';\n\n/**\n * BaseFrameworkAdapter - Abstract base class for framework adapters\n *\n * Provides:\n * - Common configuration handling\n * - Interface for request/response conversion\n * - Handler creation abstraction\n *\n * Subclasses must implement:\n * - framework - Framework identifier\n * - createHandler() - Create framework-specific handler\n * - convertRequest() - Convert framework request to Web Request\n * - handleResponse() - Handle Web Response for framework\n */\nexport abstract class BaseFrameworkAdapter {\n  /** Adapter name for logging/debugging */\n  readonly name: string;\n\n  /** Framework type identifier */\n  abstract readonly framework: FrameworkType;\n\n  /** Whether adapter is enabled */\n  readonly enabled: boolean;\n\n  constructor(config: FrameworkAdapterConfig = {} as FrameworkAdapterConfig) {\n    this.name = config.name ?? this.constructor.name;\n    this.enabled = config.enabled ?? true;\n  }\n\n  /**\n   * Create a handler function for the framework.\n   *\n   * The returned handler type varies by framework:\n   * - Next.js: `(request: Request) => Promise<Response>`\n   * - Express: `(req: Request, res: Response) => Promise<void>`\n   * - NestJS: `(req: Request, res: Response) => Promise<void>`\n   *\n   * @param handleRequest - Core request handler from StreamServer\n   * @param options - Handler options (transport type, etc.)\n   * @returns Framework-specific handler function\n   *\n   * @example\n   * ```typescript\n   * // Next.js\n   * export const GET = adapter.createHandler(streamServer.handleRequest);\n   *\n   * // Express\n   * app.get('/stream', adapter.createHandler(streamServer.handleRequest));\n   * ```\n   */\n  abstract createHandler(\n    handleRequest: CoreRequestHandler,\n    options?: FrameworkHandlerOptions\n  ): unknown;\n\n  /**\n   * Convert framework-specific request to Web Request.\n   *\n   * @param frameworkRequest - Framework-specific request object\n   * @returns Web Request object\n   */\n  abstract convertRequest(frameworkRequest: unknown): Request;\n\n  /**\n   * Handle Web Response and send to framework response.\n   *\n   * For Next.js/Edge: Returns Response directly\n   * For Express/NestJS: Streams to res object\n   *\n   * @param response - Web Response from core handler\n   * @param frameworkRequest - Original framework request\n   * @param frameworkResponse - Framework response object (for Express-like frameworks)\n   * @returns Response for return-based frameworks, void for stream-based\n   */\n  abstract handleResponse(\n    response: Response,\n    frameworkRequest: unknown,\n    frameworkResponse?: unknown\n  ): Promise<Response | void>;\n\n  /**\n   * Get adapter info for debugging\n   */\n  getAdapterInfo(): {\n    name: string;\n    framework: FrameworkType;\n    enabled: boolean;\n  } {\n    return {\n      name: this.name,\n      framework: this.framework,\n      enabled: this.enabled,\n    };\n  }\n}\n","/**\n * Next.js Framework Adapter\n *\n * Framework adapter for Next.js App Router (Route Handlers).\n * Next.js uses Web Request/Response natively, so this is mostly a passthrough.\n *\n * @example\n * ```typescript\n * // app/api/events/stream/route.ts\n * import { streamServer } from '@/lib/stream';\n *\n * export const GET = streamServer.getHandler('nextjs');\n * ```\n */\n\nimport type {\n  FrameworkAdapterConfig,\n  FrameworkHandlerOptions,\n  CoreRequestHandler,\n  NextJSHandler,\n} from '@plyaz/types/core';\nimport { BaseFrameworkAdapter } from './BaseFrameworkAdapter';\n\n/**\n * NextJSFrameworkAdapter - Next.js App Router adapter\n *\n * Features:\n * - Native Web Request/Response support (zero conversion overhead)\n * - Works with Next.js App Router route handlers\n * - Edge Runtime compatible\n *\n * @example\n * ```typescript\n * const adapter = new NextJSFrameworkAdapter();\n * const handler = adapter.createHandler(streamServer.handleRequest);\n * export const GET = handler;\n * ```\n */\nexport class NextJSFrameworkAdapter extends BaseFrameworkAdapter {\n  readonly framework = 'nextjs' as const;\n\n  constructor(config?: FrameworkAdapterConfig) {\n    super({\n      name: config?.name ?? 'nextjs',\n      enabled: config?.enabled,\n    });\n  }\n\n  /**\n   * Create Next.js route handler.\n   *\n   * @param handleRequest - Core request handler from StreamServer\n   * @param options - Handler options\n   * @returns Next.js route handler function\n   */\n  createHandler(\n    handleRequest: CoreRequestHandler,\n    options?: FrameworkHandlerOptions\n  ): NextJSHandler {\n    const transport = options?.transport ?? 'sse';\n\n    return (request: Request): Promise<Response> => {\n      return handleRequest(request, transport);\n    };\n  }\n\n  /**\n   * Convert Next.js request to Web Request.\n   * Next.js already uses Web Request, so this is a passthrough.\n   *\n   * @param request - Next.js Request (which is a Web Request)\n   * @returns The same Request object\n   */\n  convertRequest(request: Request): Request {\n    return request;\n  }\n\n  /**\n   * Handle Web Response for Next.js.\n   * Next.js returns Response directly, so this is a passthrough.\n   *\n   * @param response - Web Response from core handler\n   * @returns The same Response object\n   */\n  async handleResponse(response: Response): Promise<Response> {\n    return response;\n  }\n}\n","/**\n * Express Framework Adapter\n *\n * Framework adapter for Express.js and compatible frameworks (Fastify, Koa, etc.).\n * Converts Express req/res to Web Request/Response and handles SSE streaming.\n *\n * @example\n * ```typescript\n * import express from 'express';\n * import { streamServer } from './stream';\n *\n * const app = express();\n * app.get('/events/stream', streamServer.getHandler('express'));\n * ```\n */\n\nimport { HTTP_STATUS } from '@plyaz/types';\nimport type {\n  FrameworkAdapterConfig,\n  FrameworkHandlerOptions,\n  CoreRequestHandler,\n  ExpressRequest,\n  ExpressResponse,\n  ExpressHandler,\n} from '@plyaz/types/core';\nimport { BaseFrameworkAdapter } from './BaseFrameworkAdapter';\n\n/**\n * ExpressFrameworkAdapter - Express/Fastify adapter\n *\n * Features:\n * - Converts Express req/res to Web Request/Response\n * - Handles SSE streaming to Express response\n * - Manages connection cleanup on client disconnect\n * - Compatible with Express, Fastify, Koa (with adapters)\n *\n * @example\n * ```typescript\n * const adapter = new ExpressFrameworkAdapter();\n * const handler = adapter.createHandler(streamServer.handleRequest);\n * app.get('/stream', handler);\n * ```\n */\nexport class ExpressFrameworkAdapter extends BaseFrameworkAdapter {\n  readonly framework = 'express' as const;\n\n  constructor(config?: FrameworkAdapterConfig) {\n    super({\n      name: config?.name ?? 'express',\n      enabled: config?.enabled,\n    });\n  }\n\n  /**\n   * Create Express route handler.\n   *\n   * @param handleRequest - Core request handler from StreamServer\n   * @param options - Handler options\n   * @returns Express route handler function\n   */\n  createHandler(\n    handleRequest: CoreRequestHandler,\n    options?: FrameworkHandlerOptions\n  ): ExpressHandler {\n    const transport = options?.transport ?? 'sse';\n\n    return async (req: ExpressRequest, res: ExpressResponse): Promise<void> => {\n      const webRequest = this.convertRequest(req);\n      const response = await handleRequest(webRequest, transport);\n      await this.handleResponse(response, req, res);\n    };\n  }\n\n  /**\n   * Convert Express request to Web Request.\n   *\n   * @param req - Express request object\n   * @returns Web Request object\n   */\n  convertRequest(req: ExpressRequest): Request {\n    const url = new URL(req.url, 'http://localhost');\n\n    // Convert headers, handling array values\n    const headers = new Headers();\n    for (const [key, value] of Object.entries(req.headers)) {\n      if (value !== undefined && value !== null) {\n        if (Array.isArray(value)) {\n          value.forEach(v => headers.append(key, v));\n        } else {\n          headers.set(key, value as string);\n        }\n      }\n    }\n\n    return new Request(url, {\n      headers,\n      method: req.method ?? 'GET',\n    });\n  }\n\n  /**\n   * Handle Web Response and stream to Express response.\n   *\n   * @param response - Web Response from core handler\n   * @param _req - Original Express request (unused)\n   * @param res - Express response object\n   */\n  async handleResponse(response: Response, _req: unknown, res: unknown): Promise<void> {\n    const expressRes = res as ExpressResponse;\n\n    // Write SSE headers\n    expressRes.writeHead(HTTP_STATUS.OK, {\n      'Content-Type': 'text/event-stream',\n      'Cache-Control': 'no-cache',\n      Connection: 'keep-alive',\n    });\n\n    // Stream response body\n    const reader = response.body?.getReader();\n    if (reader) {\n      const pump = async (): Promise<void> => {\n        const { done, value } = await reader.read();\n        if (done) return;\n        expressRes.write(new TextDecoder().decode(value));\n        return pump();\n      };\n      void pump();\n\n      // Handle client disconnect\n      expressRes.on('close', () => {\n        void reader.cancel();\n      });\n    }\n  }\n}\n","/**\n * NestJS Framework Adapter\n *\n * Framework adapter for NestJS controllers.\n * NestJS typically uses Express under the hood, so this adapter handles\n * the Express-style req/res pattern used in NestJS controllers.\n *\n * @example\n * ```typescript\n * // In a NestJS controller\n * @Controller('events')\n * export class StreamingController {\n *   constructor(@Inject(STREAM_SERVER) private streamServer: StreamServer) {}\n *\n *   @Get('stream')\n *   async stream(@Req() req: Request, @Res() res: Response) {\n *     const handler = this.streamServer.getHandler('nestjs');\n *     await handler(req, res);\n *   }\n * }\n * ```\n */\n\nimport { HTTP_STATUS } from '@plyaz/types';\nimport type {\n  FrameworkAdapterConfig,\n  FrameworkHandlerOptions,\n  CoreRequestHandler,\n  NestJSRequest,\n  NestJSResponse,\n  NestJSHandler,\n} from '@plyaz/types/core';\nimport { BaseFrameworkAdapter } from './BaseFrameworkAdapter';\n\n/**\n * NestJSFrameworkAdapter - NestJS adapter\n *\n * Features:\n * - Works with NestJS Express-based controllers\n * - Handles @Req() and @Res() decorated parameters\n * - Supports both writeHead and setHeader patterns\n * - Manages SSE streaming to response\n *\n * @example\n * ```typescript\n * const adapter = new NestJSFrameworkAdapter();\n * const handler = adapter.createHandler(streamServer.handleRequest);\n *\n * // In controller method:\n * await handler(req, res);\n * ```\n */\nexport class NestJSFrameworkAdapter extends BaseFrameworkAdapter {\n  readonly framework = 'nestjs' as const;\n\n  constructor(config?: FrameworkAdapterConfig) {\n    super({\n      name: config?.name ?? 'nestjs',\n      enabled: config?.enabled,\n    });\n  }\n\n  /**\n   * Create NestJS controller handler.\n   *\n   * @param handleRequest - Core request handler from StreamServer\n   * @param options - Handler options\n   * @returns NestJS controller handler function\n   */\n  createHandler(\n    handleRequest: CoreRequestHandler,\n    options?: FrameworkHandlerOptions\n  ): NestJSHandler {\n    const transport = options?.transport ?? 'sse';\n\n    return async (req: NestJSRequest, res: NestJSResponse): Promise<void> => {\n      const webRequest = this.convertRequest(req);\n      const response = await handleRequest(webRequest, transport);\n      await this.handleResponse(response, req, res);\n    };\n  }\n\n  /**\n   * Convert NestJS request to Web Request.\n   *\n   * @param req - NestJS request object\n   * @returns Web Request object\n   */\n  convertRequest(req: NestJSRequest): Request {\n    const url = new URL(req.url, 'http://localhost');\n\n    // Convert headers, handling array values\n    const headers = new Headers();\n    for (const [key, value] of Object.entries(req.headers)) {\n      if (value !== undefined && value !== null) {\n        if (Array.isArray(value)) {\n          value.forEach(v => headers.append(key, v));\n        } else {\n          headers.set(key, value as string);\n        }\n      }\n    }\n\n    return new Request(url, {\n      headers,\n      method: req.method ?? 'GET',\n    });\n  }\n\n  /**\n   * Handle Web Response and stream to NestJS response.\n   *\n   * @param response - Web Response from core handler\n   * @param _req - Original NestJS request (unused)\n   * @param res - NestJS response object\n   */\n  async handleResponse(response: Response, _req: unknown, res: unknown): Promise<void> {\n    const nestRes = res as NestJSResponse;\n\n    // Set SSE headers using available method\n    if (nestRes.writeHead) {\n      nestRes.writeHead(HTTP_STATUS.OK, {\n        'Content-Type': 'text/event-stream',\n        'Cache-Control': 'no-cache',\n        Connection: 'keep-alive',\n      });\n    } else {\n      // Fallback to setHeader for NestJS\n      nestRes.status(HTTP_STATUS.OK);\n      nestRes.setHeader('Content-Type', 'text/event-stream');\n      nestRes.setHeader('Cache-Control', 'no-cache');\n      nestRes.setHeader('Connection', 'keep-alive');\n      // Flush headers to start streaming\n      if (nestRes.flushHeaders) {\n        nestRes.flushHeaders();\n      }\n    }\n\n    // Stream response body\n    const reader = response.body?.getReader();\n    if (reader) {\n      const pump = async (): Promise<void> => {\n        const { done, value } = await reader.read();\n        if (done) return;\n        nestRes.write(new TextDecoder().decode(value));\n        return pump();\n      };\n      void pump();\n\n      // Handle client disconnect\n      nestRes.on('close', () => {\n        void reader.cancel();\n      });\n    }\n  }\n}\n","/**\n * Stream Server\n *\n * Framework-agnostic streaming server factory.\n * Provides easy configuration and integration with Next.js, NestJS, Express, etc.\n *\n * Uses framework adapters for handling different runtimes:\n * - NextJSFrameworkAdapter - Next.js App Router (Web Request/Response)\n * - ExpressFrameworkAdapter - Express/Fastify (req/res pattern)\n * - NestJSFrameworkAdapter - NestJS controllers\n *\n * @example\n * ```ts\n * // Create server with builder pattern\n * const streamServer = StreamServer.create()\n *   .withAuth(new AnonymousAuthAdapter())\n *   .withSSE({ heartbeatInterval: 15000 })\n *   .build();\n *\n * // Use in Next.js\n * export const GET = streamServer.getHandler('nextjs');\n *\n * // Use in Express\n * app.get('/stream', streamServer.getHandler('express'));\n *\n * // Use in NestJS\n * const handler = streamServer.getHandler('nestjs');\n * await handler(req, res);\n * ```\n */\n\nimport { StreamBroadcaster } from './StreamBroadcaster';\nimport type { BaseAuthAdapter } from './auth/BaseAuthAdapter';\nimport { AnonymousAuthAdapter } from './auth/adapters/AnonymousAuthAdapter';\nimport type { BaseTransportAdapter } from './transports/BaseTransportAdapter';\nimport { SSETransportAdapter } from './transports/adapters/SSETransportAdapter';\nimport type { BaseFrameworkAdapter } from './frameworks';\nimport {\n  NextJSFrameworkAdapter,\n  ExpressFrameworkAdapter,\n  NestJSFrameworkAdapter,\n  type FrameworkType,\n  type FrameworkHandlerOptions,\n} from './frameworks';\nimport type {\n  StreamAuthResult,\n  StreamBroadcasterConfig,\n  StreamChannel,\n  StreamManagerStats,\n  StreamTransportType,\n  SSEConfig,\n  WebSocketConfig,\n} from '@plyaz/types/core';\nimport { STREAM_ERROR_CODES } from '@plyaz/types';\nimport { StreamPackageError } from '@plyaz/errors';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Configuration Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Stream server configuration\n */\nexport interface StreamServerConfig {\n  /** Auth adapter to use */\n  auth?: BaseAuthAdapter;\n  /** Transport adapters to use */\n  transports?: BaseTransportAdapter[];\n  /** Broadcaster configuration */\n  broadcaster?: StreamBroadcasterConfig;\n  /** Default channels for new connections */\n  defaultChannels?: StreamChannel[];\n  /** Parse channels from request (default: query param 'channels') */\n  parseChannels?: (request: Request) => StreamChannel[];\n  /** Custom framework adapters (NextJS, Express, NestJS registered by default) */\n  frameworkAdapters?: BaseFrameworkAdapter[];\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Stream Server Builder\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Builder for StreamServer\n */\nexport class StreamServerBuilder {\n  private authAdapter?: BaseAuthAdapter;\n  private transports: BaseTransportAdapter[] = [];\n  private broadcasterConfig?: StreamBroadcasterConfig;\n  private defaultChannels: StreamChannel[] = ['uploads'];\n  private channelParser?: (request: Request) => StreamChannel[];\n\n  /**\n   * Configure authentication\n   */\n  withAuth(adapter: BaseAuthAdapter): this {\n    this.authAdapter = adapter;\n    return this;\n  }\n\n  /**\n   * Enable SSE transport\n   */\n  withSSE(config?: SSEConfig): this {\n    if (config?.enabled === false) return this;\n    this.transports.push(new SSETransportAdapter(config));\n    return this;\n  }\n\n  /**\n   * Enable WebSocket transport (future)\n   */\n  // eslint-disable-next-line no-unused-vars\n  withWebSocket(_config?: WebSocketConfig): this {\n    // Future: this.transports.push(new WebSocketTransportAdapter(config));\n    console.warn('WebSocket transport not yet implemented');\n    return this;\n  }\n\n  /**\n   * Add custom transport\n   */\n  withTransport(adapter: BaseTransportAdapter): this {\n    this.transports.push(adapter);\n    return this;\n  }\n\n  /**\n   * Configure broadcaster\n   */\n  withBroadcaster(config: StreamBroadcasterConfig): this {\n    this.broadcasterConfig = config;\n    return this;\n  }\n\n  /**\n   * Set default channels for new connections\n   */\n  withDefaultChannels(channels: StreamChannel[]): this {\n    this.defaultChannels = channels;\n    return this;\n  }\n\n  /**\n   * Custom channel parser\n   */\n  withChannelParser(parser: (request: Request) => StreamChannel[]): this {\n    this.channelParser = parser;\n    return this;\n  }\n\n  /**\n   * Build the stream server\n   */\n  build(): StreamServer {\n    // Default to anonymous auth if not specified\n    const auth = this.authAdapter ?? new AnonymousAuthAdapter();\n\n    // Default to SSE if no transports specified\n    const transports = this.transports.length > 0 ? this.transports : [new SSETransportAdapter()];\n\n    return new StreamServer({\n      auth,\n      transports,\n      broadcaster: this.broadcasterConfig,\n      defaultChannels: this.defaultChannels,\n      parseChannels: this.channelParser,\n    });\n  }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Stream Server\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * StreamServer - Framework-agnostic streaming server\n *\n * Features:\n * - Builder pattern for easy configuration\n * - Framework adapter pattern for easy integration\n * - Automatic connection lifecycle management\n * - Channel-based subscriptions\n *\n * @example\n * ```ts\n * const server = StreamServer.create()\n *   .withAuth(new TokenAuthAdapter({ verifyToken: myVerifier }))\n *   .withSSE({ heartbeatInterval: 30000 })\n *   .build();\n *\n * // Initialize on startup\n * server.initialize();\n *\n * // Get handler for your framework\n * export const GET = server.getHandler('nextjs');\n * // or\n * app.get('/stream', server.getHandler('express'));\n *\n * // Register endpoints via StreamRegistry\n * await StreamRegistry.initialize({\n *   broadcaster: server.getBroadcaster(),\n *   endpoints: [\n *     { endpoint: FilesStreamEndpoint, config: { enabled: true } },\n *     { endpoint: SystemStreamEndpoint, config: { enabled: true } },\n *   ],\n * });\n * ```\n */\nexport class StreamServer {\n  private readonly broadcaster: StreamBroadcaster;\n  private readonly config: StreamServerConfig;\n  private readonly frameworkAdapters = new Map<FrameworkType, BaseFrameworkAdapter>();\n  private initialized = false;\n\n  constructor(config: StreamServerConfig) {\n    this.config = config;\n\n    // Create broadcaster\n    this.broadcaster = new StreamBroadcaster(\n      config.auth ?? new AnonymousAuthAdapter(),\n      config.transports ?? [new SSETransportAdapter()],\n      config.broadcaster\n    );\n\n    // Register default framework adapters\n    this.registerFrameworkAdapter(new NextJSFrameworkAdapter());\n    this.registerFrameworkAdapter(new ExpressFrameworkAdapter());\n    this.registerFrameworkAdapter(new NestJSFrameworkAdapter());\n\n    // Register custom framework adapters if provided\n    if (config.frameworkAdapters) {\n      for (const adapter of config.frameworkAdapters) {\n        this.registerFrameworkAdapter(adapter);\n      }\n    }\n  }\n\n  /**\n   * Create a new builder\n   */\n  static create(): StreamServerBuilder {\n    return new StreamServerBuilder();\n  }\n\n  /**\n   * Initialize the stream server\n   * Call once on application startup\n   */\n  initialize(): void {\n    if (this.initialized) return;\n    this.broadcaster.initialize();\n    this.initialized = true;\n  }\n\n  /**\n   * Dispose the stream server\n   * Call on application shutdown\n   */\n  dispose(): void {\n    this.broadcaster.dispose();\n    this.initialized = false;\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Request Handling\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Handle a streaming request (framework-agnostic)\n   *\n   * @param request - HTTP request\n   * @param transportType - Transport to use (default: 'sse')\n   */\n  async handleRequest(\n    request: Request,\n    transportType: StreamTransportType = 'sse'\n  ): Promise<Response> {\n    // Ensure initialized\n    if (!this.initialized) {\n      this.initialize();\n    }\n\n    // Parse channels from request\n    const channels = this.parseChannels(request);\n\n    // Authenticate\n    const authResult = await this.broadcaster.authenticate(request);\n\n    // Generate connection ID\n    const connectionId = crypto.randomUUID();\n\n    // Create connection\n    const response = await this.broadcaster.createConnection(\n      connectionId,\n      transportType,\n      request,\n      authResult\n    );\n\n    if (!response) {\n      return new Response('Failed to create connection', { status: 500 });\n    }\n\n    // Subscribe to channels\n    for (const channel of channels) {\n      if (this.broadcaster.canSubscribe(authResult, channel)) {\n        this.broadcaster.subscribe(connectionId, channel, authResult);\n      }\n    }\n\n    return response;\n  }\n\n  /**\n   * Parse channels from request\n   */\n  private parseChannels(request: Request): StreamChannel[] {\n    // Use custom parser if provided\n    if (this.config.parseChannels) {\n      return this.config.parseChannels(request);\n    }\n\n    // Default: parse from query param\n    const { searchParams } = new URL(request.url);\n    const channelsParam = searchParams.get('channels');\n\n    if (!channelsParam) {\n      return this.config.defaultChannels ?? ['uploads'];\n    }\n\n    return channelsParam.split(',').filter(Boolean) as StreamChannel[];\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Framework Adapters\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Register a framework adapter.\n   *\n   * Default adapters (NextJS, Express, NestJS) are registered automatically.\n   * Use this to add custom adapters or override existing ones.\n   *\n   * @param adapter - Framework adapter to register\n   *\n   * @example\n   * ```ts\n   * // Register custom adapter\n   * streamServer.registerFrameworkAdapter(new MyCustomAdapter());\n   *\n   * // Override default adapter\n   * streamServer.registerFrameworkAdapter(new NextJSFrameworkAdapter({ name: 'custom-nextjs' }));\n   * ```\n   */\n  registerFrameworkAdapter(adapter: BaseFrameworkAdapter): void {\n    this.frameworkAdapters.set(adapter.framework, adapter);\n  }\n\n  /**\n   * Get a framework adapter by type.\n   *\n   * @param framework - Framework type to get\n   * @returns Framework adapter or undefined if not registered\n   */\n  getFrameworkAdapter<T extends BaseFrameworkAdapter>(framework: FrameworkType): T | undefined {\n    return this.frameworkAdapters.get(framework) as T | undefined;\n  }\n\n  /**\n   * Get handler for a specific framework.\n   *\n   * This is the primary API for integrating with frameworks.\n   *\n   * @param framework - Framework type ('nextjs', 'express', 'nestjs')\n   * @param options - Handler options (transport type, etc.)\n   * @returns Framework-specific handler function\n   *\n   * @example\n   * ```ts\n   * // Next.js App Router\n   * export const GET = streamServer.getHandler('nextjs');\n   *\n   * // Express\n   * app.get('/stream', streamServer.getHandler('express'));\n   *\n   * // NestJS controller\n   * const handler = streamServer.getHandler('nestjs');\n   * await handler(req, res);\n   *\n   * // With options\n   * export const GET = streamServer.getHandler('nextjs', { transport: 'sse' });\n   * ```\n   */\n  getHandler<T = unknown>(framework: FrameworkType, options?: FrameworkHandlerOptions): T {\n    const adapter = this.frameworkAdapters.get(framework);\n\n    if (!adapter) {\n      throw new StreamPackageError(\n        `Framework adapter '${framework}' not registered. Available adapters: ${Array.from(this.frameworkAdapters.keys()).join(', ')}`,\n        STREAM_ERROR_CODES.ENDPOINT_NOT_FOUND,\n        { context: { framework, availableAdapters: Array.from(this.frameworkAdapters.keys()) } }\n      );\n    }\n\n    if (!adapter.enabled) {\n      throw new StreamPackageError(\n        `Framework adapter '${framework}' is disabled`,\n        STREAM_ERROR_CODES.ENDPOINT_DISABLED,\n        { context: { framework } }\n      );\n    }\n\n    return adapter.createHandler(\n      (request, transport) => this.handleRequest(request, transport),\n      options\n    ) as T;\n  }\n\n  /**\n   * Get list of registered framework adapters.\n   */\n  getRegisteredFrameworks(): FrameworkType[] {\n    return Array.from(this.frameworkAdapters.keys());\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Direct Access\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Get the underlying broadcaster for advanced usage\n   */\n  getBroadcaster(): StreamBroadcaster {\n    return this.broadcaster;\n  }\n\n  /**\n   * Authenticate a request\n   */\n  async authenticate(request: Request): Promise<StreamAuthResult> {\n    return this.broadcaster.authenticate(request);\n  }\n\n  /**\n   * Check if user can subscribe to a channel\n   */\n  canSubscribe(authResult: StreamAuthResult, channel: StreamChannel): boolean {\n    return this.broadcaster.canSubscribe(authResult, channel);\n  }\n\n  /**\n   * Get server statistics\n   */\n  getStats(): StreamManagerStats {\n    return this.broadcaster.getStats();\n  }\n\n  /**\n   * Check if server is initialized\n   */\n  isInitialized(): boolean {\n    return this.initialized;\n  }\n}\n","/**\n * Stream Registry\n *\n * Auto-discovery and initialization for stream endpoints.\n * Similar to ServiceRegistry but for real-time streaming.\n *\n * @example\n * ```typescript\n * import { StreamServer, StreamRegistry } from '@plyaz/core/events/streaming';\n * import { FilesStreamEndpoint } from '@plyaz/core/domain/files/streaming';\n * import { SystemStreamEndpoint } from '@plyaz/core/events/streaming/endpoints';\n *\n * // Create stream server\n * const streamServer = StreamServer.create()\n *   .withAuth(new TokenAuthAdapter({ verifyToken: myVerifier }))\n *   .withSSE({ heartbeatInterval: 15000 })\n *   .build();\n *\n * // Initialize stream registry (like ServiceRegistry)\n * await StreamRegistry.initialize({\n *   broadcaster: streamServer.getBroadcaster(),\n *   endpoints: [\n *     { endpoint: FilesStreamEndpoint, config: { enabled: true } },\n *     { endpoint: SystemStreamEndpoint, config: { enabled: true } },\n *   ],\n * });\n * ```\n */\n\nimport { CoreLogger } from '@plyaz/logger';\nimport { StreamPackageError } from '@plyaz/errors';\nimport { STREAM_ERROR_CODES } from '@plyaz/types/errors';\nimport type {\n  StreamEndpointConfig,\n  StreamRegistryConfig,\n  StreamBroadcasterInterface,\n} from '@plyaz/types/core';\nimport type { BaseStreamEndpoint } from './base/BaseStreamEndpoint';\nimport type { BaseChannelController } from './channels/BaseChannelController';\n\n/**\n * Global Singleton Pattern using globalThis for static class state\n *\n * @see CoreEventManager.ts for detailed explanation of why this pattern is needed.\n *\n * TL;DR: In Next.js and similar frameworks, module isolation can create multiple\n * instances of static class state. Using globalThis + Symbol.for() ensures ONE\n * shared state per process, preventing issues like stream endpoints being registered\n * in one module context but not accessible from another (e.g., API routes).\n */\ninterface StreamRegistryState {\n  endpoints: Map<string, BaseStreamEndpoint>;\n  controllers: Map<string, BaseChannelController>;\n  broadcaster: StreamBroadcasterInterface | null;\n  initialized: boolean;\n}\n\nconst STREAM_REGISTRY_KEY = Symbol.for('plyaz.StreamRegistry');\n\nfunction getStreamRegistryState(): StreamRegistryState {\n  const globalAny = globalThis as unknown as { [key: symbol]: StreamRegistryState };\n  if (!globalAny[STREAM_REGISTRY_KEY]) {\n    globalAny[STREAM_REGISTRY_KEY] = {\n      endpoints: new Map(),\n      controllers: new Map(),\n      broadcaster: null,\n      initialized: false,\n    };\n  }\n  return globalAny[STREAM_REGISTRY_KEY];\n}\n\n/**\n * StreamRegistry - Auto-discovery and initialization for stream endpoints\n *\n * Features:\n * - Auto-initialization of stream endpoints\n * - get() and getAsync() access patterns (like ServiceRegistry)\n * - Lifecycle management\n * - Controller registration with broadcaster\n */\nexport class StreamRegistry {\n  private static readonly logger = new CoreLogger({\n    service: 'StreamRegistry',\n  });\n\n  // State accessors using globalThis\n  private static get _endpoints(): Map<string, BaseStreamEndpoint> {\n    return getStreamRegistryState().endpoints;\n  }\n  private static get _controllers(): Map<string, BaseChannelController> {\n    return getStreamRegistryState().controllers;\n  }\n  private static get _broadcaster(): StreamBroadcasterInterface | null {\n    return getStreamRegistryState().broadcaster;\n  }\n  private static set _broadcaster(value: StreamBroadcasterInterface | null) {\n    getStreamRegistryState().broadcaster = value;\n  }\n  private static get _initialized(): boolean {\n    return getStreamRegistryState().initialized;\n  }\n  private static set _initialized(value: boolean) {\n    getStreamRegistryState().initialized = value;\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────────\n  // Initialization\n  // ─────────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Initialize the stream registry with endpoints.\n   *\n   * @param config - Registry configuration\n   * @throws StreamPackageError if already initialized or endpoint fails\n   *\n   * @example\n   * ```typescript\n   * await StreamRegistry.initialize({\n   *   broadcaster: streamServer.getBroadcaster(),\n   *   endpoints: [\n   *     { endpoint: FilesStreamEndpoint, config: { enabled: true } },\n   *     { endpoint: SystemStreamEndpoint, config: { enabled: true } },\n   *   ],\n   * });\n   * ```\n   */\n  static async initialize(config: StreamRegistryConfig): Promise<void> {\n    if (StreamRegistry._initialized) {\n      StreamRegistry.logger.warn('StreamRegistry already initialized');\n      return;\n    }\n\n    StreamRegistry._broadcaster = config.broadcaster;\n\n    for (const entry of config.endpoints) {\n      const endpointKey = entry.endpoint.endpointKey;\n      const enabled = entry.config.enabled !== false;\n\n      if (!enabled) {\n        StreamRegistry.logger.debug(`Endpoint ${endpointKey} is disabled, skipping`);\n        continue;\n      }\n\n      try {\n        // Create endpoint configuration\n        const endpointConfig: StreamEndpointConfig = {\n          endpointKey,\n          name: entry.config.name ?? endpointKey,\n          channels: entry.config.channels ?? [],\n          enabled: entry.config.enabled,\n          supportedRuntimes: entry.config.supportedRuntimes,\n        };\n\n        // Create endpoint instance via static create()\n        const instance = (await entry.endpoint.create(endpointConfig, {\n          broadcaster: config.broadcaster,\n        })) as BaseStreamEndpoint;\n\n        // Initialize the endpoint\n        instance.initialize();\n\n        // Get the channel controller\n        const controller = instance.getChannelController();\n\n        // Register controller with broadcaster (if it supports this)\n        if ('registerController' in config.broadcaster) {\n          (\n            config.broadcaster as { registerController: (c: BaseChannelController) => void }\n          ).registerController(controller);\n        }\n\n        // Store endpoint and controller\n        StreamRegistry._endpoints.set(endpointKey, instance);\n        StreamRegistry._controllers.set(controller.scope, controller);\n\n        StreamRegistry.logger.info(`Endpoint initialized: ${endpointKey}`, {\n          scope: controller.scope,\n          patterns: controller.getPatterns(),\n        });\n      } catch (error) {\n        StreamRegistry.logger.error(`Failed to initialize endpoint: ${endpointKey}`, { error });\n        throw error;\n      }\n    }\n\n    StreamRegistry._initialized = true;\n    StreamRegistry.logger.info('StreamRegistry initialized', {\n      endpoints: [...StreamRegistry._endpoints.keys()],\n      controllers: [...StreamRegistry._controllers.keys()],\n    });\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────────\n  // Endpoint Access\n  // ─────────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Get an endpoint by key (synchronous).\n   *\n   * @param key - Endpoint key\n   * @returns Endpoint instance\n   * @throws StreamPackageError if endpoint not found\n   *\n   * @example\n   * ```typescript\n   * const filesEndpoint = StreamRegistry.get<FilesStreamEndpoint>('files');\n   * ```\n   */\n  static get<T extends BaseStreamEndpoint>(key: string): T {\n    const endpoint = StreamRegistry._endpoints.get(key);\n    if (!endpoint) {\n      throw new StreamPackageError(\n        `Stream endpoint '${key}' not found. Register it in StreamRegistry.initialize()`,\n        STREAM_ERROR_CODES.ENDPOINT_NOT_FOUND\n      );\n    }\n    return endpoint as T;\n  }\n\n  /**\n   * Get an endpoint by key (async for lazy initialization if needed).\n   *\n   * @param key - Endpoint key\n   * @returns Promise resolving to endpoint instance\n   */\n  static async getAsync<T extends BaseStreamEndpoint>(key: string): Promise<T> {\n    return StreamRegistry.get<T>(key);\n  }\n\n  /**\n   * Check if an endpoint is registered.\n   *\n   * @param key - Endpoint key\n   * @returns true if endpoint is registered\n   */\n  static has(key: string): boolean {\n    return StreamRegistry._endpoints.has(key);\n  }\n\n  /**\n   * Get all registered endpoint keys.\n   *\n   * @returns Array of endpoint keys\n   */\n  static getRegisteredKeys(): string[] {\n    return [...StreamRegistry._endpoints.keys()];\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────────\n  // Controller Access\n  // ─────────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Get a controller by scope.\n   *\n   * @param scope - Controller scope\n   * @returns Controller instance or undefined\n   */\n  static getController(scope: string): BaseChannelController | undefined {\n    return StreamRegistry._controllers.get(scope);\n  }\n\n  /**\n   * Get controller for a channel.\n   *\n   * @param channel - Channel name\n   * @returns Controller that handles the channel, or undefined\n   */\n  static getControllerForChannel(channel: string): BaseChannelController | undefined {\n    for (const controller of StreamRegistry._controllers.values()) {\n      if (controller.handlesChannel(channel)) {\n        return controller;\n      }\n    }\n    return undefined;\n  }\n\n  /**\n   * Get all registered controller scopes.\n   *\n   * @returns Array of controller scopes\n   */\n  static getRegisteredScopes(): string[] {\n    return [...StreamRegistry._controllers.keys()];\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────────\n  // Broadcaster Access\n  // ─────────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Get the broadcaster instance.\n   *\n   * @returns Broadcaster instance\n   * @throws StreamPackageError if not initialized\n   */\n  static getBroadcaster(): StreamBroadcasterInterface {\n    if (!StreamRegistry._broadcaster) {\n      throw new StreamPackageError(\n        'StreamRegistry not initialized. Call StreamRegistry.initialize() first.',\n        STREAM_ERROR_CODES.INITIALIZATION_FAILED\n      );\n    }\n    return StreamRegistry._broadcaster;\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────────\n  // Status\n  // ─────────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Check if registry is initialized.\n   *\n   * @returns true if initialized\n   */\n  static isInitialized(): boolean {\n    return StreamRegistry._initialized;\n  }\n\n  /**\n   * Get registry statistics.\n   *\n   * @returns Statistics object\n   */\n  static getStats(): {\n    initialized: boolean;\n    endpointCount: number;\n    controllerCount: number;\n    endpoints: string[];\n    controllers: string[];\n  } {\n    return {\n      initialized: StreamRegistry._initialized,\n      endpointCount: StreamRegistry._endpoints.size,\n      controllerCount: StreamRegistry._controllers.size,\n      endpoints: StreamRegistry.getRegisteredKeys(),\n      controllers: StreamRegistry.getRegisteredScopes(),\n    };\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────────\n  // Lifecycle\n  // ─────────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Dispose all endpoints and reset registry.\n   */\n  static dispose(): void {\n    StreamRegistry.logger.info('Disposing StreamRegistry');\n\n    // Dispose all endpoints\n    StreamRegistry._endpoints.forEach((endpoint, key) => {\n      try {\n        endpoint.dispose();\n        StreamRegistry.logger.debug(`Disposed endpoint: ${key}`);\n      } catch (error) {\n        StreamRegistry.logger.error(`Error disposing endpoint: ${key}`, { error });\n      }\n    });\n\n    // Clear all maps\n    StreamRegistry._endpoints.clear();\n    StreamRegistry._controllers.clear();\n    StreamRegistry._broadcaster = null;\n    StreamRegistry._initialized = false;\n\n    StreamRegistry.logger.info('StreamRegistry disposed');\n  }\n\n  /**\n   * Reset registry (for testing).\n   */\n  static reset(): void {\n    StreamRegistry.dispose();\n  }\n}\n","/**\n * Runtime Detection Utilities\n *\n * Utilities for detecting the current JavaScript runtime environment.\n */\n\nimport type { CoreRuntimeEnvironment } from '@plyaz/types/core';\nimport { PackageLogger } from '@plyaz/logger';\n\n// Type-safe access to alternative runtime globals\nconst getGlobalProperty = (key: string): unknown => {\n  return (globalThis as Record<string, unknown>)[key];\n};\n\nconst logger = new PackageLogger({ packageName: 'core', service: 'Runtime' });\n\n/**\n * Check if a module is available via require.resolve\n */\nfunction isModuleAvailable(moduleName: string): boolean {\n  const nodeRequire = globalThis.require;\n  if (!nodeRequire) return false;\n\n  const resolveModule = nodeRequire.resolve;\n  if (!resolveModule) return false;\n\n  try {\n    resolveModule(moduleName);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n/** Check for alternative runtimes (Deno, Bun) */\nfunction detectAltRuntime(): CoreRuntimeEnvironment | null {\n  if (typeof getGlobalProperty('Deno') !== 'undefined') return 'deno';\n  if (typeof getGlobalProperty('Bun') !== 'undefined') return 'bun';\n  return null;\n}\n\n/** Check for edge runtime */\nfunction detectEdgeRuntime(): CoreRuntimeEnvironment | null {\n  if (typeof getGlobalProperty('EdgeRuntime') !== 'undefined') return 'edge';\n  const isEdgeLike =\n    typeof globalThis.caches !== 'undefined' &&\n    typeof globalThis.Request !== 'undefined' &&\n    typeof process === 'undefined';\n  return isEdgeLike ? 'edge' : null;\n}\n\n/** Check for browser environment */\nfunction detectBrowser(): CoreRuntimeEnvironment | null {\n  if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n    return 'browser';\n  }\n  return null;\n}\n\n/** Check for Node.js framework */\nfunction detectNodeFramework(): CoreRuntimeEnvironment {\n  // Check for Nuxt (SSR)\n  if (process.env.__NUXT__ || process.env.NUXT_APP) return 'nuxt';\n  // Check for Next.js (SSR)\n  if (process.env.__NEXT_PRIVATE_ORIGIN || process.env.NEXT_RUNTIME) return 'nextjs';\n  // Check for NestJS via module detection\n  if (isModuleAvailable('@nestjs/core')) return 'nestjs';\n  // Check for Express via module detection\n  if (isModuleAvailable('express')) return 'express';\n  return 'node';\n}\n\n/**\n * Detect the current runtime environment\n */\nexport function detectRuntime(): CoreRuntimeEnvironment {\n  // Check alternative runtimes first\n  const altRuntime = detectAltRuntime();\n  if (altRuntime) return altRuntime;\n\n  // Check for edge runtime\n  const edgeRuntime = detectEdgeRuntime();\n  if (edgeRuntime) return edgeRuntime;\n\n  // Check for browser\n  const browser = detectBrowser();\n  if (browser) return browser;\n\n  // Server-side detection (Node.js based)\n  if (typeof process !== 'undefined' && process.versions?.node) {\n    return detectNodeFramework();\n  }\n\n  return 'unknown';\n}\n\n/**\n * Load environment variables from a .env file\n */\nexport async function loadEnvFile(envPath: string, verbose?: boolean): Promise<void> {\n  try {\n    const dotenv = await import('dotenv');\n    const result = dotenv.config({ path: envPath });\n\n    if (result.error) {\n      logger.warn(`Failed to load env file: ${result.error.message}`);\n    } else if (verbose) {\n      logger.info(`Loaded env from: ${envPath}`);\n    }\n  } catch {\n    logger.warn('dotenv not available, skipping .env file loading');\n  }\n}\n","// This eslint disable is an edge-case as we need to ensure that we're able to load CoreInitializer regardless if FE, BE or specific frameworks\n/**\n * CoreInitializer - Unified initialization for @plyaz/core\n *\n * Provides a single entry point to initialize all core services with\n * environment-aware configuration. Works across all JavaScript runtimes.\n *\n * @example Backend with full config\n * ```typescript\n * import { Core } from '@plyaz/core';\n *\n * await Core.initialize({\n *   envPath: '.env',\n *   db: { adapter: 'drizzle' },\n *   api: {\n *     env: 'production',\n *     baseURL: 'https://api.example.com',\n *   },\n * });\n *\n * // Access services\n * const db = Core.db;\n * const api = Core.api;\n * ```\n *\n * @example Frontend (Nuxt/Next.js)\n * ```typescript\n * import { Core } from '@plyaz/core';\n *\n * await Core.initialize({\n *   skipDb: true,\n *   api: { baseURL: 'https://api.example.com' },\n * });\n *\n * const api = Core.api;\n * ```\n *\n * @example NestJS with DI\n * ```typescript\n * // app.module.ts\n * import { CoreModule } from '@plyaz/core/adapters';\n * import { FeatureFlagModule } from '@plyaz/core/backend/featureFlags';\n *\n * @Module({\n *   imports: [\n *     CoreModule.forRoot({ envPath: '.env', db: { adapter: 'drizzle' } }),\n *     FeatureFlagModule.forRoot({ provider: 'database' }),\n *   ],\n * })\n * export class AppModule {}\n * ```\n */\n\nimport { PackageLogger } from '@plyaz/logger';\nimport { ApiClientService } from '../services/ApiClientService';\nimport { CoreEventManager } from '../events/CoreEventManager';\nimport { ServiceRegistry } from './ServiceRegistry';\nimport { StreamRegistry, StreamServer } from '../events/streaming';\nimport { STREAMING_DEFAULTS } from '@plyaz/config/streaming';\nimport type {\n  CoreRuntimeEnvironment,\n  CoreRuntimeContext,\n  CoreEnvVars,\n  CoreAppEnvironment,\n  CoreAppContext,\n  CoreApiInitOptions,\n  CoreServiceRuntime,\n  CoreInitOptionsBase as BaseCoreInitOptions,\n  CoreServicesResultBase,\n  CoreServiceEntry,\n  CoreDomainServiceInstance,\n  CoreSystemErrorPayload,\n  CoreFeatureFlagInitConfig,\n  CoreErrorHandlerInitConfig,\n  CoreCacheConfig,\n  CoreObservabilityConfig,\n  CoreDbServiceConfig,\n  CoreStorageConfig,\n  CoreNotificationConfig,\n  StreamEndpointEntry,\n  CoreDbServiceInstance,\n  CoreCacheServiceInstance,\n  CoreStorageServiceInstance,\n  CoreNotificationServiceInstance,\n} from '@plyaz/types/core';\nimport type { ObservabilityAdapter } from '@plyaz/types/observability';\nimport { ObservabilityService } from '../base/observability/ObservabilityService';\nimport { LoggerAdapter } from '../base/observability/LoggerAdapter';\nimport type { FeatureFlagValue, FeatureFlagStoreSlice } from '@plyaz/types/features';\nimport { ERROR_CODES, BACKEND_RUNTIMES, FRONTEND_RUNTIMES } from '@plyaz/types';\nimport { BaseError, CorePackageError, initializeErrorSystem } from '@plyaz/errors';\n// Core error handling (frontend-safe)\nimport {\n  initializeGlobalErrorHandler,\n  setEventEmitter,\n  clearEventEmitter,\n} from '@plyaz/errors/middleware';\n// ServerErrorMiddleware is backend-only, import dynamically where needed\nimport type {\n  ErrorStoreActions,\n  GlobalErrorHandler,\n  SerializedError,\n  PackageErrorLike,\n} from '@plyaz/types/errors';\nimport { ERROR_CATEGORY } from '@plyaz/types/errors';\nimport { detectRuntime, loadEnvFile } from '../utils/runtime';\nimport { generateId } from '../utils/common';\nimport { createStandaloneFeatureFlagStore, STORE_KEYS, type StoreKey } from '@plyaz/store';\nimport { CORE_EVENTS, type CoreEvent } from '@plyaz/types/core';\nimport type { RootStoreSlice, RootStoreHook } from '@plyaz/types/store';\nimport type { StoreApi } from 'zustand/vanilla';\nimport { getCoreDependency } from '../config/dependencies';\n\n// Constants\nconst DEFAULT_MAX_ERRORS = 100;\n\n/**\n * Core initialization options with specific types for this package\n */\nexport interface CoreInitOptions\n  extends Omit<\n    BaseCoreInitOptions<\n      Partial<CoreDbServiceConfig>,\n      CoreApiInitOptions,\n      CoreStorageConfig,\n      CoreNotificationConfig\n    >,\n    'observability' | 'skipObservability'\n  > {\n  /** Observability configuration */\n  observability?: CoreObservabilityConfig;\n  /** Skip observability initialization */\n  skipObservability?: boolean;\n  /**\n   * Global error handler configuration.\n   * Auto-initializes by default to catch all uncaught errors.\n   * Set `enabled: false` to disable if you want to use your own error handling.\n   *\n   * @example\n   * ```typescript\n   * await Core.initialize({\n   *   errorHandler: {\n   *     enabled: true,\n   *     logToConsole: true,\n   *     maxErrors: 200,\n   *     filter: (error) => error instanceof MyError,\n   *   },\n   * });\n   * ```\n   */\n  errorHandler?: CoreErrorHandlerInitConfig;\n\n  /** Feature flags configuration */\n  featureFlags?: CoreFeatureFlagInitConfig;\n\n  /**\n   * Domain services to auto-initialize (frontend pattern).\n   * Uses ServiceRegistry for automatic initialization.\n   *\n   * @example\n   * ```typescript\n   * await Core.initialize({\n   *   services: [\n   *     { service: FeatureFlagDomainService, config: { enabled: true } },\n   *     { service: ExampleDomainService, config: { enabled: true, useRealApi: true } },\n   *   ],\n   * });\n   *\n   * // Access via ServiceRegistry\n   * const flags = ServiceRegistry.get<FeatureFlagDomainService>('featureFlags');\n   * ```\n   */\n  services?: CoreServiceEntry[];\n}\n\n/**\n * Core initialization result with specific types for this package\n */\nexport type CoreServicesResult = CoreServicesResultBase<\n  CoreDbServiceInstance,\n  typeof ApiClientService,\n  CoreCacheServiceInstance,\n  ObservabilityAdapter,\n  CoreStorageServiceInstance,\n  CoreNotificationServiceInstance\n>;\n\n// Domain store keys are automatically derived from STORE_KEYS\n// Excluding global stores (error, featureFlags) which are read-only by default\n\n/**\n * Function type for getting core domain services.\n * Used by entry points to inject runtime-appropriate services.\n *\n * @internal This is injected by entry points, not used directly.\n */\nexport type GetCoreDomainServicesFn = (isFrontend: boolean) => Promise<CoreServiceEntry[]>;\n\n/**\n * Injected function to get core domain services.\n * Set by entry points (entry-backend.ts) before Core.initialize().\n * Frontend entries don't set this - they just don't load default services.\n */\nlet _getCoreDomainServices: GetCoreDomainServicesFn | null = null;\n\n/**\n * Set the function to get core domain services.\n * Called by entry-backend.ts to inject the backend-aware service loader.\n *\n * @internal Used by entry points only.\n */\nexport function setGetCoreDomainServices(fn: GetCoreDomainServicesFn): void {\n  _getCoreDomainServices = fn;\n}\n\n/**\n * Function type for getting core stream endpoints.\n * Used by entry points to inject backend stream endpoints.\n *\n * @internal This is injected by entry points, not used directly.\n */\nexport type GetCoreStreamEndpointsFn = () => Promise<StreamEndpointEntry[]>;\n\n/**\n * Injected function to get core stream endpoints.\n * Set by entry points (entry-backend.ts) before Core.initialize().\n * Frontend entries don't set this - streaming is backend-only.\n */\nlet _getCoreStreamEndpoints: GetCoreStreamEndpointsFn | null = null;\n\n/**\n * Set the function to get core stream endpoints.\n * Called by entry-backend.ts to inject the backend stream endpoint loader.\n *\n * @internal Used by entry points only.\n */\nexport function setGetCoreStreamEndpoints(fn: GetCoreStreamEndpointsFn): void {\n  _getCoreStreamEndpoints = fn;\n}\n\n/**\n * Global singleton state to handle module duplication with local linking.\n * When packages are linked locally, multiple copies of this module may be loaded.\n * Using globalThis ensures all copies share the same state.\n */\nconst CORE_GLOBAL_KEY = '__PLYAZ_CORE_SINGLETON__';\n\ninterface CoreGlobalState {\n  initialized: boolean;\n  initPromise: Promise<CoreServicesResult> | null;\n  coreServices: CoreServicesResult;\n  initOptions: CoreInitOptions;\n  logger: PackageLogger | null;\n  loggerTransport: 'pino' | 'console';\n}\n\n/** Get or create the global Core state */\nconst state = (): CoreGlobalState => {\n  const g = globalThis as unknown as Record<string, CoreGlobalState>;\n  g[CORE_GLOBAL_KEY] ??= {\n    initialized: false,\n    initPromise: null,\n    coreServices: {\n      db: null,\n      api: null,\n      cache: null,\n      observability: null,\n      storage: null,\n      notifications: null,\n      env: {},\n      runtime: 'unknown',\n      appContext: 'webapp',\n    },\n    initOptions: {},\n    logger: null,\n    loggerTransport: 'pino',\n  };\n  return g[CORE_GLOBAL_KEY];\n};\n\nexport class Core {\n  // ─────────────────────────────────────────────────────────────────────────\n  // Global state accessors (delegates to globalThis for module deduplication)\n  // ─────────────────────────────────────────────────────────────────────────\n\n  private static get initialized(): boolean {\n    return state().initialized;\n  }\n  private static set initialized(value: boolean) {\n    state().initialized = value;\n  }\n\n  private static get _initPromise(): Promise<CoreServicesResult> | null {\n    return state().initPromise;\n  }\n  private static set _initPromise(value: Promise<CoreServicesResult> | null) {\n    state().initPromise = value;\n  }\n\n  private static get _coreServices(): CoreServicesResult {\n    return state().coreServices;\n  }\n  private static set _coreServices(value: CoreServicesResult) {\n    state().coreServices = value;\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Logger (also uses global state)\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /** Get or create the Core logger */\n  private static get logger(): PackageLogger {\n    const s = state();\n    s.logger ??= new PackageLogger({\n      packageName: 'core',\n      service: 'Core',\n      transport: s.loggerTransport,\n    });\n    return s.logger;\n  }\n\n  /** Configure logger transport (call before first log) */\n  private static configureLogger(transport?: 'pino' | 'console'): void {\n    const s = state();\n    if (transport && transport !== s.loggerTransport) {\n      s.loggerTransport = transport;\n      s.logger = null; // Reset so it gets recreated with new transport\n    }\n  }\n\n  /** Get the configured logger transport */\n  static get loggerTransport(): 'pino' | 'console' {\n    return state().loggerTransport;\n  }\n\n  /**\n   * Log a message during initialization.\n   * Uses PackageLogger, respects verbose flag.\n   */\n  private static log(message: string, verbose?: boolean, data?: Record<string, unknown>): void {\n    if (!verbose) return;\n    if (data) {\n      Core.logger.info(message, data);\n    } else {\n      Core.logger.info(message);\n    }\n  }\n\n  /**\n   * Log a debug message during initialization.\n   */\n  private static logDebug(\n    message: string,\n    verbose?: boolean,\n    data?: Record<string, unknown>\n  ): void {\n    if (!verbose) return;\n    if (data) {\n      Core.logger.debug(message, data);\n    } else {\n      Core.logger.debug(message);\n    }\n  }\n\n  /**\n   * Observability configuration\n   */\n  private static _observabilityConfig: CoreObservabilityConfig = {};\n\n  /**\n   * Global error handler instance\n   */\n  private static _errorHandler: GlobalErrorHandler | null = null;\n\n  /**\n   * Error handler configuration\n   */\n  private static _errorConfig: CoreErrorHandlerInitConfig = {};\n\n  /**\n   * HTTP error handler/middleware based on runtime.\n   * Auto-created during initialization.\n   */\n  private static _httpErrorHandler: unknown = null;\n\n  /**\n   * Event listener cleanup functions\n   */\n  private static _eventCleanupFns: (() => void)[] = [];\n\n  /**\n   * Feature flag configuration\n   */\n  private static _flagConfig: CoreFeatureFlagInitConfig = {};\n\n  /** Full init options (from global state for configureNestApp and other runtime config) */\n  private static get _initOptions(): CoreInitOptions {\n    return state().initOptions;\n  }\n  private static set _initOptions(value: CoreInitOptions) {\n    state().initOptions = value;\n  }\n\n  /**\n   * Root store instance (contains errors, feature flags, and all other slices)\n   * Initialized during Core.initialize() - frontend uses React hook store, backend uses vanilla store\n   * All store access should go through Core.rootStore - no separate stores needed\n   */\n  private static _rootStore: StoreApi<RootStoreSlice> | null = null;\n\n  /**\n   * Injected store hook for frontend (set via setRootStoreHook before initialize).\n   * This is used instead of directly importing from @plyaz/store to prevent\n   * duplicate store instances when bundlers create multiple module copies.\n   */\n  private static _injectedStoreHook: RootStoreHook | null = null;\n\n  /**\n   * Set the root store hook for frontend use.\n   * Must be called before Core.initialize() when running in browser.\n   * PlyazProvider calls this automatically with the store prop.\n   *\n   * @param store - The useRootStore hook from @plyaz/store\n   */\n  public static setRootStoreHook(store: RootStoreHook): void {\n    Core._injectedStoreHook = store;\n  }\n\n  /**\n   * Setup environment and context\n   */\n  private static async setupEnvironment(options: CoreInitOptions): Promise<CoreAppEnvironment> {\n    const { envPath, environment, appContext, env, verbose } = options;\n\n    Core._coreServices.appContext = appContext ?? 'webapp';\n    Core.log(`App context: ${Core._coreServices.appContext}`, verbose);\n\n    const globalEnvironment: CoreAppEnvironment =\n      environment ?? (process.env.NODE_ENV as CoreAppEnvironment) ?? 'development';\n    Core.log(`Global environment: ${globalEnvironment}`, verbose);\n\n    Core._coreServices.runtime = detectRuntime();\n    Core.log(`Detected runtime: ${Core._coreServices.runtime}`, verbose);\n\n    if (envPath) await loadEnvFile(envPath, verbose);\n    Core._coreServices.env = { ...process.env, ...env };\n\n    return globalEnvironment;\n  }\n\n  /**\n   * Initialize a service with error handling\n   */\n  private static async initService<T>(\n    name: string,\n    init: () => Promise<T>,\n    verbose?: boolean\n  ): Promise<T | undefined> {\n    try {\n      Core.log(`Initializing ${name}...`, verbose);\n      const result = await init();\n      Core.log(`${name} initialized`, verbose);\n      return result;\n    } catch (error) {\n      Core.logger.error(`Failed to initialize ${name}`, {\n        error: (error as Error).message,\n      });\n      return undefined;\n    }\n  }\n\n  /** Initialize error handler if enabled */\n  private static async initErrorHandlerIfEnabled(options: CoreInitOptions): Promise<void> {\n    const { errorHandler: config, verbose } = options;\n    if (config?.enabled === false) {\n      Core.log('Global error handler disabled by configuration', verbose);\n      return;\n    }\n    await Core.initService(\n      'error handler',\n      async () => {\n        await Core.initializeErrorHandler(config, verbose);\n        Core.subscribeToErrorEvents(verbose);\n      },\n      verbose\n    );\n  }\n\n  /** Initialize API client if not skipped */\n  private static async initApiIfEnabled(\n    options: CoreInitOptions,\n    env: CoreAppEnvironment\n  ): Promise<void> {\n    const { api: apiConfig, skipApi, verbose } = options;\n    if (skipApi) return;\n\n    await Core.initService(\n      'API client',\n      async () => {\n        await Core.initializeApi(apiConfig, env, verbose);\n        Core._coreServices.api = ApiClientService;\n        Core.log('API client service initialized', verbose);\n      },\n      verbose\n    );\n    Core._coreServices.api = ApiClientService;\n  }\n\n  /** Initialize cache service if not skipped (backend-only due to ioredis dependency) */\n  private static async initCacheIfEnabled(options: CoreInitOptions): Promise<void> {\n    const { cache: cacheConfig, skipCache, verbose } = options;\n    if (skipCache) {\n      Core.log('Cache service skipped (skipCache: true)', verbose);\n      return;\n    }\n\n    // Skip cache initialization if no config provided\n    if (!cacheConfig) {\n      Core.log('Cache service skipped (no config provided)', verbose);\n      return;\n    }\n\n    // Skip on frontend runtimes (CacheService pulls in ioredis which requires Node.js)\n    if (Core.isFrontend) {\n      Core.log('Cache service skipped (frontend runtime detected)', verbose);\n      return;\n    }\n\n    await Core.initService(\n      'cache',\n      async () => {\n        await Core.initializeCache(cacheConfig as CoreCacheConfig, verbose);\n        const CacheService = getCoreDependency('CacheService');\n        if (CacheService) {\n          Core._coreServices.cache = CacheService.getInstance();\n          Core.log('Cache service initialized', verbose);\n        }\n      },\n      verbose\n    );\n  }\n\n  /** Initialize observability if not skipped */\n  private static async initObservabilityIfEnabled(\n    options: CoreInitOptions,\n    globalEnvironment: CoreAppEnvironment\n  ): Promise<void> {\n    const { observability: observabilityConfig, skipObservability, verbose } = options;\n    if (skipObservability) {\n      Core.log('Observability service skipped (skipObservability: true)', verbose);\n      return;\n    }\n\n    // Always use ObservabilityService - it adds LoggerAdapter by default\n    const config = observabilityConfig ?? { enabled: true };\n\n    await Core.initService(\n      'observability',\n      async () => {\n        await Core.initializeObservability(config, verbose, globalEnvironment);\n        Core.log('Observability service initialized', verbose);\n      },\n      verbose\n    );\n  }\n\n  /** Initialize storage service if not skipped (backend-only) */\n  private static async initStorageIfEnabled(options: CoreInitOptions): Promise<void> {\n    const { storage: storageConfig, skipStorage, verbose } = options;\n\n    // Skip if explicitly disabled\n    if (skipStorage) {\n      Core.log('Storage service skipped (skipStorage: true)', verbose);\n      return;\n    }\n\n    // Skip if no config provided\n    if (!storageConfig) {\n      Core.log('Storage service skipped (no config provided)', verbose);\n      return;\n    }\n\n    // Skip on frontend runtimes (storage is backend-only)\n    if (Core.isFrontend) {\n      Core.log('Storage service skipped (frontend runtime detected)', verbose);\n      return;\n    }\n\n    await Core.initService(\n      'storage',\n      async () => {\n        const StorageService = getCoreDependency('StorageService');\n        if (!StorageService) {\n          Core.log('Storage service skipped (dependency not registered)', verbose);\n          return;\n        }\n        await StorageService.initialize(storageConfig);\n        Core._coreServices.storage = StorageService.getInstance();\n        Core.log('Storage service initialized', verbose);\n      },\n      verbose\n    );\n  }\n\n  /** Initialize notifications service if not skipped (backend-only) */\n  private static async initNotificationsIfEnabled(options: CoreInitOptions): Promise<void> {\n    const { notifications: notificationsConfig, skipNotifications, verbose } = options;\n\n    // Skip if explicitly disabled\n    if (skipNotifications) {\n      Core.log('Notifications service skipped (skipNotifications: true)', verbose);\n      return;\n    }\n\n    // Skip if no config provided\n    if (!notificationsConfig) {\n      Core.log('Notifications service skipped (no config provided)', verbose);\n      return;\n    }\n\n    // Skip on frontend runtimes (notifications is backend-only)\n    if (Core.isFrontend) {\n      Core.log('Notifications service skipped (frontend runtime detected)', verbose);\n      return;\n    }\n\n    await Core.initService(\n      'notifications',\n      async () => {\n        const NotificationService = getCoreDependency('NotificationService');\n        if (!NotificationService) {\n          Core.log('Notifications service skipped (dependency not registered)', verbose);\n          return;\n        }\n        await NotificationService.initialize(notificationsConfig);\n        Core._coreServices.notifications = NotificationService.getInstance();\n        Core.log('Notifications service initialized', verbose);\n      },\n      verbose\n    );\n  }\n\n  /**\n   * StreamServer instance (created during streaming initialization)\n   */\n  private static _streamServer: InstanceType<typeof StreamServer> | null = null;\n\n  /**\n   * Get the stream server instance (if initialized)\n   */\n  static get streamServer(): InstanceType<typeof StreamServer> | null {\n    return Core._streamServer;\n  }\n\n  /**\n   * Initialize streaming service (SSE/WebSocket real-time events)\n   *\n   * Sets up StreamServer and StreamRegistry with domain endpoints.\n   * Streaming is backend-only for server-sent events.\n   *\n   * @param options - Core init options with streaming config\n   */\n  private static async initStreamingIfConfigured(options: CoreInitOptions): Promise<void> {\n    const { streaming: streamConfig, skipStreaming, verbose } = options;\n\n    // Skip if explicitly disabled\n    if (skipStreaming) {\n      Core.log('Streaming service skipped (skipStreaming: true)', verbose);\n      return;\n    }\n\n    // Skip if no config or disabled\n    if (!streamConfig || streamConfig.enabled === false) {\n      Core.log('Streaming service skipped (not configured or disabled)', verbose);\n      return;\n    }\n\n    // Skip on frontend (streaming is server-side only)\n    if (Core.isFrontend) {\n      Core.log('Streaming service skipped (frontend runtime)', verbose);\n      return;\n    }\n\n    await Core.initService(\n      'streaming',\n      // eslint-disable-next-line complexity\n      async () => {\n        // Create stream server with config\n        const serverConfig = streamConfig.server ?? {};\n        Core._streamServer = StreamServer.create()\n          .withSSE({\n            heartbeatInterval:\n              serverConfig.heartbeatInterval ?? STREAMING_DEFAULTS.HEARTBEAT_INTERVAL_MS,\n            maxConnections: serverConfig.maxConnections ?? STREAMING_DEFAULTS.MAX_CONNECTIONS,\n          })\n          .withDefaultChannels(\n            (serverConfig.defaultChannels ?? STREAMING_DEFAULTS.DEFAULT_CHANNELS) as never\n          )\n          .build();\n\n        // Initialize server\n        Core._streamServer.initialize();\n\n        // Get endpoints from config or use injected defaults\n        let endpoints = streamConfig.endpoints;\n        if (!endpoints && _getCoreStreamEndpoints) {\n          endpoints = await _getCoreStreamEndpoints();\n        }\n\n        // Skip if no endpoints available\n        if (!endpoints || endpoints.length === 0) {\n          Core.log('Streaming: No endpoints configured, skipping StreamRegistry', verbose);\n          return;\n        }\n\n        // Debug: Log endpoints being registered\n        Core.log('Streaming endpoints to register', verbose, {\n          count: endpoints.length,\n          endpoints: endpoints.map(e => ({\n            key: e.endpoint?.endpointKey,\n            enabled: e.config?.enabled,\n            name: e.config?.name,\n            channels: e.config?.channels,\n          })),\n        });\n\n        // Initialize StreamRegistry with endpoints\n        await StreamRegistry.initialize({\n          broadcaster: Core._streamServer.getBroadcaster(),\n          endpoints,\n        });\n\n        Core.log('Streaming service initialized', verbose, {\n          endpoints: StreamRegistry.getRegisteredKeys(),\n          channels: serverConfig.defaultChannels ?? ['uploads', 'system'],\n        });\n      },\n      verbose\n    );\n  }\n\n  /**\n   * Initialize domain services\n   *\n   * Loads core domain services using the injected loader (if available),\n   * then merges with any user-provided services.\n   * User-provided service configs override core defaults.\n   *\n   * Note: Frontend entries don't inject a loader, so they only use user-provided services.\n   */\n  private static async initDomainServicesIfConfigured(\n    options: CoreInitOptions,\n    globalEnvironment: CoreAppEnvironment\n  ): Promise<void> {\n    const { api: apiConfig, services: userServices, verbose } = options;\n    const runtime = Core._coreServices.runtime;\n\n    // Load core services using injected loader (backend sets this, frontend doesn't)\n    const coreDomainServices = _getCoreDomainServices\n      ? await _getCoreDomainServices(Core.isFrontend)\n      : [];\n\n    // Merge core services with user-provided services\n    // User services can override core service configs by using the same service class\n    const coreServiceKeys = new Set(coreDomainServices.map(s => s.service.serviceKey));\n    const userOverrides = (userServices ?? []).filter(s =>\n      coreServiceKeys.has(s.service.serviceKey)\n    );\n    const additionalUserServices = (userServices ?? []).filter(\n      s => !coreServiceKeys.has(s.service.serviceKey)\n    );\n\n    // Build merged services: core (with overrides applied) + additional user services\n    const mergedServices: CoreServiceEntry[] = coreDomainServices\n      .map(coreService => {\n        const override = userOverrides.find(\n          u => u.service.serviceKey === coreService.service.serviceKey\n        );\n        return override\n          ? { ...coreService, config: { ...coreService.config, ...override.config } }\n          : coreService;\n      })\n      .concat(additionalUserServices);\n\n    // Skip if somehow no services\n    if (mergedServices.length === 0) return;\n\n    await Core.initService(\n      'domain services',\n      async () => {\n        Core.log('Initializing domain services via ServiceRegistry...', verbose);\n        Core.logDebug('Core services', verbose, {\n          services: coreDomainServices.map(s => s.service.serviceKey),\n        });\n        if (userServices?.length) {\n          Core.logDebug('User services', verbose, {\n            services: userServices.map(s => s.service.serviceKey),\n          });\n        }\n        await ServiceRegistry.initialize({\n          environment: globalEnvironment,\n          runtime,\n          apiClient: apiConfig ? { baseURL: apiConfig.baseURL, ...apiConfig } : undefined,\n          db: options.db,\n          cache: options.cache,\n          storage: options.storage,\n          notifications: options.notifications,\n          observability: options.observability,\n          services: mergedServices,\n          stores: {\n            // Returns specific slice from namespaced root store (type-safe)\n            getStore: <K extends keyof RootStoreSlice>(key: K): RootStoreSlice[K] | undefined =>\n              Core.getDomainStore(key),\n          },\n        });\n        Core.log('Domain services initialized', verbose, {\n          keys: ServiceRegistry.getInitializedKeys(),\n        });\n      },\n      verbose\n    );\n  }\n\n  /**\n   * Initialize all core services\n   */\n\n  static async initialize(options: CoreInitOptions = {}): Promise<CoreServicesResult> {\n    // Store options for runtime access (e.g., configureNestApp)\n    Core._initOptions = options;\n\n    // Configure logger transport first (before any logs)\n    Core.configureLogger(options.logger?.transport);\n\n    // Already initialized - return immediately\n    if (Core.initialized) {\n      Core.log('Already initialized, returning existing services', options.verbose);\n      return Core._coreServices;\n    }\n\n    // Initialization in progress - return existing promise to avoid race conditions\n    if (Core._initPromise) {\n      Core.log('Initialization in progress, waiting...', options.verbose);\n      return Core._initPromise;\n    }\n\n    // Start initialization and store the promise\n    Core._initPromise = Core.performInitialization(options);\n    return Core._initPromise;\n  }\n\n  /**\n   * Internal initialization logic - called only once\n   */\n  private static async performInitialization(\n    options: CoreInitOptions\n  ): Promise<CoreServicesResult> {\n    const { db: dbConfig, featureFlags: featureFlagsConfig, skipDb, verbose } = options;\n    const globalEnvironment = await Core.setupEnvironment(options);\n\n    await Core.initErrorHandlerIfEnabled(options);\n\n    if (!Core.shouldSkipDbService(skipDb, verbose)) {\n      const db = await Core.initService(\n        'database',\n        () => Core.initializeDb(dbConfig, verbose),\n        verbose\n      );\n      Core._coreServices.db = db ?? null;\n    }\n\n    await Core.initApiIfEnabled(options, globalEnvironment);\n\n    await Core.initCacheIfEnabled(options);\n\n    await Core.initObservabilityIfEnabled(options, globalEnvironment);\n\n    await Core.initStorageIfEnabled(options);\n\n    await Core.initNotificationsIfEnabled(options);\n\n    await Core.initStreamingIfConfigured(options);\n\n    if (featureFlagsConfig?.enabled !== false) {\n      await Core.initService(\n        'feature flags',\n        () => Core.initializeFeatureFlags(featureFlagsConfig, verbose),\n        verbose\n      );\n    }\n\n    await Core.initDomainServicesIfConfigured(options, globalEnvironment);\n\n    Core.initialized = true;\n    Core.log('Initialization complete', verbose);\n    return Core._coreServices;\n  }\n\n  /**\n   * Get initialized domain service keys\n   * Use Core.getService(key) or ServiceRegistry.get(key) to access individual services.\n   *\n   * @example\n   * ```typescript\n   * const keys = Core.serviceKeys;\n   * const exampleService = Core.getService('example');\n   * ```\n   */\n  static get serviceKeys(): string[] {\n    return ServiceRegistry.getInitializedKeys();\n  }\n\n  /**\n   * All stores - unified access to ALL slices from single root store\n   * All stores (global + domain) are slices of ONE Zustand store instance.\n   *\n   * **Auto-generated from STORE_KEYS** - No manual registration needed!\n   *\n   * **Benefits:**\n   * - ✅ Access without hooks (store.getState())\n   * - ✅ Cross-slice subscriptions work automatically\n   * - ✅ Single source of truth\n   * - ✅ Automatically scales with new stores\n   *\n   * @example\n   * const errorStore = Core.stores.error;        // Global slice\n   * const flagsStore = Core.stores.featureFlags; // Global slice\n   * const exampleStore = Core.stores.example;    // Domain slice\n   */\n  static get stores(): Record<StoreKey, RootStoreSlice | undefined> {\n    const rootState = Core._rootStore?.getState();\n\n    // Dynamically generate store accessors from STORE_KEYS\n    return Object.values(STORE_KEYS).reduce(\n      (acc, key) => {\n        Object.defineProperty(acc, key, {\n          get: () => rootState,\n          enumerable: true,\n        });\n        return acc;\n      },\n      {} as Record<StoreKey, RootStoreSlice | undefined>\n    );\n  }\n\n  /**\n   * Get a specific store slice by key (for ServiceRegistry injection).\n   * Returns the actual slice from the namespaced root store.\n   *\n   * @param key - Store key (type-safe: 'example' | 'errors' | 'featureFlags')\n   * @returns Specific store slice or undefined\n   *\n   * @example\n   * ```typescript\n   * const exampleSlice = Core.getDomainStore('example');  // ✅ Returns ExampleFrontendStoreSlice\n   * const errorSlice = Core.getDomainStore('errors');     // ✅ Returns ErrorStoreSlice\n   * const invalid = Core.getDomainStore('invalid');       // ❌ TypeScript error!\n   * ```\n   */\n  static getDomainStore<K extends keyof RootStoreSlice>(key: K): RootStoreSlice[K] | undefined;\n  static getDomainStore<T = RootStoreSlice>(): T | undefined;\n  static getDomainStore<K extends keyof RootStoreSlice>(\n    key?: K\n  ): RootStoreSlice[K] | RootStoreSlice | undefined {\n    const rootState = Core._rootStore?.getState();\n    if (!rootState) return undefined;\n\n    // If no key provided, return entire root store\n    if (!key) return rootState;\n\n    // Return specific slice from namespaced store (type-safe)\n    return rootState[key];\n  }\n\n  /**\n   * Event manager for subscribing to domain events\n   * @example Core.events.on('example:created', handler)\n   */\n  static get events(): typeof CoreEventManager {\n    return CoreEventManager;\n  }\n\n  /**\n   * Get database service instance\n   * @throws Error if not initialized\n   */\n  static get db(): CoreDbServiceInstance {\n    if (!Core._coreServices.db) {\n      throw new CorePackageError(\n        'Database service not initialized. Call Core.initialize() first.',\n        ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n      );\n    }\n    return Core._coreServices.db;\n  }\n\n  /**\n   * Get API client service\n   */\n  static get api(): typeof ApiClientService {\n    if (!Core._coreServices.api) {\n      throw new CorePackageError(\n        'API client service not initialized. Call Core.initialize() first.',\n        ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n      );\n    }\n    return Core._coreServices.api;\n  }\n\n  /**\n   * Get cache service instance (backend-only)\n   * @throws Error if not initialized\n   */\n  static get cache(): CoreCacheServiceInstance {\n    if (!Core._coreServices.cache) {\n      throw new CorePackageError(\n        'Cache service not initialized. Call Core.initialize() with cache config first.',\n        ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n      );\n    }\n    return Core._coreServices.cache;\n  }\n\n  /**\n   * Get observability adapter instance\n   * @throws Error if not initialized\n   *\n   * @example\n   * ```typescript\n   * // Record a metric\n   * await Core.observability.recordMetric({\n   *   type: 'counter',\n   *   name: 'api.requests',\n   *   value: 1,\n   *   tags: { endpoint: '/users' },\n   * });\n   *\n   * // Start a span\n   * const span = Core.observability.startSpan({ name: 'processOrder' });\n   * try {\n   *   // ... do work\n   *   span.setStatus('ok');\n   * } catch (e) {\n   *   span.recordException(e);\n   *   span.setStatus('error');\n   * } finally {\n   *   span.end();\n   * }\n   * ```\n   */\n  static get observability(): ObservabilityAdapter {\n    if (!Core._coreServices.observability) {\n      throw new CorePackageError(\n        'Observability service not initialized. Call Core.initialize() first.',\n        ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n      );\n    }\n    return Core._coreServices.observability;\n  }\n\n  /**\n   * Check if observability is initialized\n   */\n  static get isObservabilityInitialized(): boolean {\n    return Core._coreServices.observability !== null;\n  }\n\n  /**\n   * Get observability configuration\n   */\n  static get observabilityConfig(): CoreObservabilityConfig {\n    return Core._observabilityConfig;\n  }\n\n  /**\n   * Get storage service instance (backend-only)\n   * @throws Error if not initialized\n   *\n   * @example\n   * ```typescript\n   * const storage = Core.storage.getStorage();\n   * await storage.uploadFile({ file, filename: 'doc.pdf' });\n   * ```\n   */\n  static get storage(): CoreStorageServiceInstance {\n    if (!Core._coreServices.storage) {\n      throw new CorePackageError(\n        'Storage service not initialized. Call Core.initialize() with storage config first.',\n        ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n      );\n    }\n    return Core._coreServices.storage;\n  }\n\n  /**\n   * Check if storage is initialized\n   */\n  static get isStorageInitialized(): boolean {\n    return Core._coreServices.storage !== null;\n  }\n\n  /**\n   * Get notifications service instance (backend-only)\n   * @throws Error if not initialized\n   *\n   * @example\n   * ```typescript\n   * const notifications = Core.notifications.getNotifications();\n   * await notifications.sendEmail({ to: 'user@example.com', templateId: 'welcome' });\n   * ```\n   */\n  static get notifications(): CoreNotificationServiceInstance {\n    if (!Core._coreServices.notifications) {\n      throw new CorePackageError(\n        'Notifications service not initialized. Call Core.initialize() with notifications config first.',\n        ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n      );\n    }\n    return Core._coreServices.notifications;\n  }\n\n  /**\n   * Check if notifications is initialized\n   */\n  static get isNotificationsInitialized(): boolean {\n    return Core._coreServices.notifications !== null;\n  }\n\n  /**\n   * Get root store (contains all slices: errors, feature flags, etc.)\n   * Use this to access the full store state and all slice actions globally.\n   *\n   * @example\n   * ```typescript\n   * // Access error actions\n   * const state = Core.rootStore.getState();\n   * state.addError({ ... });\n   *\n   * // Access flags\n   * console.log(state.flags);\n   *\n   * // Subscribe to store changes\n   * Core.rootStore.subscribe((state) => {\n   *   console.log('Errors:', state.errors);\n   *   console.log('Flags:', state.flags);\n   * });\n   * ```\n   */\n  static get rootStore(): StoreApi<RootStoreSlice> {\n    if (!Core._rootStore) {\n      throw new CorePackageError(\n        'Root store not initialized. Call Core.initialize() first.',\n        ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n      );\n    }\n    return Core._rootStore;\n  }\n\n  /**\n   * Get global error store actions.\n   * Provides access to the error store for querying and managing errors.\n   *\n   * @example\n   * ```typescript\n   * // Get all errors\n   * const allErrors = useErrorStore.getState().errors;\n   *\n   * // Clear all errors\n   * Core.errors.clearErrors();\n   *\n   * // Dismiss an error\n   * Core.errors.dismissError(errorId);\n   * ```\n   */\n  static get errors(): ErrorStoreActions {\n    if (!Core._errorHandler) {\n      throw new CorePackageError(\n        'Error handler not initialized. Call Core.initialize() first or set errorHandler.enabled: true.',\n        ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n      );\n    }\n    return Core._errorHandler.getStore();\n  }\n\n  /**\n   * Get feature flags store\n   * Provides synchronous access to feature flag values from the store.\n   *\n   * @example\n   * ```typescript\n   * // Check if a flag is enabled\n   * const isEnabled = Core.flags.isEnabled('NEW_FEATURE');\n   *\n   * // Get a flag value\n   * const provider = Core.flags.getValue<string>('PAYMENT_PROVIDER');\n   *\n   * // Refresh flags from source\n   * await Core.flags.refresh();\n   * ```\n   */\n  static get flags(): FeatureFlagStoreSlice {\n    if (!Core._rootStore) {\n      throw new CorePackageError(\n        'Root store not initialized. Call Core.initialize() first.',\n        ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n      );\n    }\n    // Return the feature flag slice from root store\n    // Root store state includes all flag methods (isEnabled, getValue, refresh, etc.)\n    return Core._rootStore.getState() as unknown as FeatureFlagStoreSlice;\n  }\n\n  /**\n   * Check if error handler is initialized\n   */\n  static get isErrorHandlerInitialized(): boolean {\n    return Core._errorHandler !== null;\n  }\n\n  /**\n   * Get the HTTP error handler/middleware based on runtime.\n   * Returns different types based on detected runtime:\n   *\n   * - **Express**: Error handler middleware function\n   *   ```typescript\n   *   app.use(Core.httpErrorHandler);\n   *   ```\n   *\n   * - **NestJS**: Exception filter class\n   *   ```typescript\n   *   app.useGlobalFilters(new (Core.httpErrorHandler)());\n   *   ```\n   *\n   * - **Next.js**: Object with App Router and Pages Router handlers\n   *   ```typescript\n   *   // App Router\n   *   export const GET = Core.httpErrorHandler.withErrorHandler(handler);\n   *   // Pages Router\n   *   export default Core.httpErrorHandler.createNextApiErrorHandler()(handler);\n   *   ```\n   *\n   * - **Node.js/Bun/Deno**: Object with handleError and createMiddleware\n   *   ```typescript\n   *   Core.httpErrorHandler.handleError(error, req, res);\n   *   ```\n   *\n   * - **Browser**: null (no HTTP handler needed)\n   *\n   * @returns The HTTP error handler for the current runtime\n   */\n  static get httpErrorHandler(): unknown {\n    return Core._httpErrorHandler;\n  }\n\n  /**\n   * Check if feature flags are initialized\n   */\n  static get isFlagsInitialized(): boolean {\n    return Core._rootStore?.getState()?.featureFlags?.isInitialized ?? false;\n  }\n\n  /**\n   * Get error handler configuration\n   */\n  static get errorConfig(): CoreErrorHandlerInitConfig {\n    return Core._errorConfig;\n  }\n\n  /**\n   * Get feature flag configuration\n   */\n  static get flagConfig(): CoreFeatureFlagInitConfig {\n    return Core._flagConfig;\n  }\n\n  /**\n   * Get loaded environment variables\n   */\n  static get env(): CoreEnvVars {\n    return Core._coreServices.env;\n  }\n\n  /**\n   * Get detected runtime environment\n   */\n  static get runtime(): CoreRuntimeEnvironment {\n    return Core._coreServices.runtime;\n  }\n\n  /**\n   * Get current app context\n   */\n  static get appContext(): CoreAppContext {\n    return Core._coreServices.appContext;\n  }\n\n  /**\n   * Check if Core is initialized\n   */\n  static get isInitialized(): boolean {\n    return Core.initialized;\n  }\n\n  /**\n   * Check if running on a backend runtime\n   */\n  static get isBackend(): boolean {\n    return BACKEND_RUNTIMES.includes(Core._coreServices.runtime);\n  }\n\n  /**\n   * Check if running on a frontend runtime\n   */\n  static get isFrontend(): boolean {\n    return FRONTEND_RUNTIMES.includes(Core._coreServices.runtime);\n  }\n\n  /**\n   * Get runtime context (backend, frontend, or universal)\n   * Universal means the runtime can be either (SSR frameworks like Next.js, Nuxt, Edge)\n   */\n  static getRuntimeContext(): CoreRuntimeContext {\n    if (BACKEND_RUNTIMES.includes(Core._coreServices.runtime)) {\n      return 'backend';\n    }\n    if (FRONTEND_RUNTIMES.includes(Core._coreServices.runtime)) {\n      return 'frontend';\n    }\n    return 'universal';\n  }\n\n  /**\n   * Assert that the current runtime matches the expected runtime(s)\n   * Throws an error if the runtime doesn't match\n   *\n   * @param expected - Expected runtime(s) to check against\n   * @param serviceName - Name of the service for error message\n   * @throws CorePackageError if runtime doesn't match\n   *\n   * @example\n   * ```typescript\n   * // Assert backend-only\n   * Core.assertRuntime('backend', 'DatabaseService');\n   *\n   * // Assert multiple runtimes\n   * Core.assertRuntime(['backend', 'universal'], 'CacheService');\n   * ```\n   */\n  static assertRuntime(\n    expected: CoreServiceRuntime | readonly CoreServiceRuntime[],\n    serviceName: string\n  ): void {\n    const runtimes = Array.isArray(expected) ? expected : [expected];\n    const currentContext = Core.getRuntimeContext();\n\n    // Check if current context matches any of the expected runtimes\n    const isAllowed = runtimes.some(runtime => {\n      if (runtime === 'universal') return true;\n      if (runtime === currentContext) return true;\n      // Universal context (SSR) can run both frontend and backend code\n      if (currentContext === 'universal') return true;\n      return false;\n    });\n\n    if (!isAllowed) {\n      throw new CorePackageError(\n        `${serviceName} cannot run in ${currentContext} runtime. ` +\n          `Allowed runtimes: ${runtimes.join(', ')}. ` +\n          `Current runtime: ${Core._coreServices.runtime}`,\n        ERROR_CODES.FEATURE_NOT_SUPPORTED\n      );\n    }\n  }\n\n  /**\n   * Check if a service runtime is compatible with current runtime\n   * Returns true/false instead of throwing\n   *\n   * @param expected - Expected runtime(s) to check against\n   */\n  static isRuntimeCompatible(\n    expected: CoreServiceRuntime | readonly CoreServiceRuntime[]\n  ): boolean {\n    const runtimes = Array.isArray(expected) ? expected : [expected];\n    const currentContext = Core.getRuntimeContext();\n\n    return runtimes.some(runtime => {\n      if (runtime === 'universal') return true;\n      if (runtime === currentContext) return true;\n      if (currentContext === 'universal') return true;\n      return false;\n    });\n  }\n\n  /**\n   * Get initialization options (for internal use by framework adapters)\n   * @internal\n   */\n  static get initOptions(): CoreInitOptions {\n    return Core._initOptions;\n  }\n\n  /**\n   * Get a registered domain service by key.\n   * Convenience method that wraps ServiceRegistry.get().\n   *\n   * @param key - Service key (e.g., 'featureFlags', 'example')\n   * @returns The service instance\n   *\n   * @example\n   * ```typescript\n   * const flags = Core.getService<FeatureFlagDomainService>('featureFlags');\n   * const isEnabled = await flags.isEnabled('my-flag');\n   * ```\n   */\n  static getService<T extends CoreDomainServiceInstance = CoreDomainServiceInstance>(\n    key: string\n  ): T {\n    return ServiceRegistry.get<T>(key);\n  }\n\n  /**\n   * Get a registered domain service by key with async initialization if needed.\n   * Convenience method that wraps ServiceRegistry.getAsync().\n   *\n   * @param key - Service key\n   * @returns Promise resolving to the service instance\n   */\n  static async getServiceAsync<T extends CoreDomainServiceInstance = CoreDomainServiceInstance>(\n    key: string\n  ): Promise<T> {\n    return ServiceRegistry.getAsync<T>(key);\n  }\n\n  /**\n   * Check if a domain service is registered.\n   */\n  static hasService(key: string): boolean {\n    return ServiceRegistry.has(key);\n  }\n\n  /**\n   * Reset Core (useful for testing)\n   */\n  // eslint-disable-next-line complexity\n  static async reset(): Promise<void> {\n    // Close database\n    if (Core._coreServices.db) {\n      await Core._coreServices.db.getDatabase()?.close?.();\n    }\n\n    // Dispose cache\n    if (Core._coreServices.cache) {\n      const CacheService = getCoreDependency('CacheService');\n      CacheService?.reset?.();\n    }\n\n    // Dispose observability\n    if (Core._coreServices.observability) {\n      await Core._coreServices.observability.shutdown();\n    }\n    Core._observabilityConfig = {};\n\n    // Dispose storage\n    if (Core._coreServices.storage) {\n      await Core._coreServices.storage.close();\n      const StorageService = getCoreDependency('StorageService');\n      await StorageService?.reset?.();\n    }\n\n    // Dispose notifications\n    if (Core._coreServices.notifications) {\n      await Core._coreServices.notifications.close();\n      const NotificationService = getCoreDependency('NotificationService');\n      await NotificationService?.reset?.();\n    }\n\n    // Dispose streaming\n    if (Core._streamServer) {\n      Core._streamServer.dispose();\n      Core._streamServer = null;\n    }\n    StreamRegistry.dispose();\n\n    // Dispose error handler\n    if (Core._errorHandler) {\n      Core._errorHandler.destroy();\n      Core._errorHandler = null;\n      clearEventEmitter(); // Clean up global error handler's CoreEventManager integration\n      BaseError.clearEventEmitter(); // Clean up BaseError auto-emit integration\n    }\n    Core._errorConfig = {};\n    Core._httpErrorHandler = null;\n\n    // Cleanup event listeners\n    for (const cleanup of Core._eventCleanupFns) {\n      cleanup();\n    }\n    Core._eventCleanupFns = [];\n\n    // Dispose feature flags slice and reset files store from root store\n    if (Core._rootStore) {\n      const state = Core._rootStore.getState();\n      if (state.featureFlags?.dispose) {\n        state.featureFlags.dispose();\n      }\n      // Reset files store slice\n      if (state.files?.reset) {\n        state.files.reset();\n      }\n      // Reset notifications store slice\n      if (state.notifications?.reset) {\n        state.notifications.reset();\n      }\n      Core._rootStore = null;\n    }\n    Core._flagConfig = {};\n\n    // Dispose all registered services via ServiceRegistry\n    ServiceRegistry.disposeAll();\n\n    // Dispose event manager\n    CoreEventManager.dispose();\n\n    Core._coreServices = {\n      db: null,\n      api: null,\n      cache: null,\n      observability: null,\n      storage: null,\n      notifications: null,\n      env: {},\n      runtime: 'unknown',\n      appContext: 'webapp',\n    };\n    Core.initialized = false;\n    Core._initPromise = null;\n  }\n\n  /**\n   * Determines whether to skip DbService initialization.\n   *\n   * DbService is backend-only and should never be initialized on frontend runtimes.\n   * This method:\n   * - Returns true (skip) if skipDb was explicitly set to true\n   * - Returns true (skip) if running on frontend, with a warning\n   * - Warns if someone explicitly tried to init DbService on frontend (skipDb: false)\n   *\n   * @param skipDb - User-provided skipDb option\n   * @param verbose - Enable verbose logging\n   * @returns true if DbService should be skipped\n   */\n  private static shouldSkipDbService(skipDb: boolean | undefined, verbose?: boolean): boolean {\n    // User explicitly requested to skip\n    if (skipDb === true) {\n      Core.log('Database service skipped (skipDb: true)', verbose);\n      return true;\n    }\n\n    // Check if running on frontend\n    const isFrontend = Core.isFrontend;\n\n    if (isFrontend) {\n      // User explicitly tried to init DbService on frontend (skipDb: false)\n      if (skipDb === false) {\n        Core.logger.warn(\n          'DbService cannot be initialized on frontend runtime. ' +\n            'DbService is backend-only and requires Node.js. ' +\n            'Use API calls from frontend instead. Skipping database initialization.'\n        );\n      } else if (verbose) {\n        // skipDb was undefined (default) - just log that we're skipping\n        Core.log(\n          'Database service skipped (frontend runtime detected). ' +\n            'DbService is only available on backend.',\n          verbose\n        );\n      }\n      return true;\n    }\n\n    // Backend or universal runtime - don't skip\n    return false;\n  }\n\n  /**\n   * Initialize database service\n   * Config validation is handled by DbService\n   */\n  private static async initializeDb(\n    config?: Partial<CoreDbServiceConfig>,\n    verbose?: boolean\n  ): Promise<CoreDbServiceInstance> {\n    Core.log(`Initializing database with adapter: ${config?.adapter ?? 'drizzle'}`, verbose);\n\n    const DbService = getCoreDependency('DbService');\n    if (!DbService) {\n      throw new CorePackageError(\n        'DbService not available. Ensure setCoreDependencies() was called in entry-backend.ts',\n        ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n      );\n    }\n    return DbService.initialize({\n      adapter: 'drizzle',\n      ...config,\n    } as CoreDbServiceConfig);\n  }\n\n  /**\n   * Initialize API client service\n   * Config validation is handled by ApiClientService\n   */\n  private static async initializeApi(\n    config?: CoreApiInitOptions,\n    globalEnvironment?: CoreAppEnvironment,\n    verbose?: boolean\n  ): Promise<void> {\n    const { env: apiEnv, setAsDefault, ...apiClientOptions } = config ?? {};\n    const resolvedEnv = apiEnv ?? globalEnvironment ?? 'development';\n\n    Core.log(`Initializing API client for environment: ${resolvedEnv}`, verbose);\n\n    await ApiClientService.init(\n      {\n        env: resolvedEnv,\n        setAsDefault: setAsDefault ?? true,\n      },\n      apiClientOptions\n    );\n  }\n\n  /**\n   * Initialize cache service (backend-only)\n   * Config validation is handled by CacheService\n   */\n  private static async initializeCache(config: CoreCacheConfig, verbose?: boolean): Promise<void> {\n    Core.log(`Initializing cache with strategy: ${config.strategy}`, verbose);\n\n    const CacheService = getCoreDependency('CacheService');\n    if (!CacheService) {\n      throw new CorePackageError(\n        'CacheService not available. Ensure setCoreDependencies() was called in entry-backend.ts',\n        ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n      );\n    }\n    await CacheService.initialize(config);\n  }\n\n  /**\n   * Initialize observability service based on config.\n   * Always includes LoggerAdapter as failover for console output.\n   */\n  private static async initializeObservability(\n    config: CoreObservabilityConfig,\n    verbose?: boolean,\n    environment?: CoreAppEnvironment\n  ): Promise<void> {\n    Core.log(`Initializing observability with provider: ${config.provider ?? 'auto'}`, verbose);\n\n    // Use environment from config or passed parameter\n    const env = config.environment ?? environment ?? 'development';\n    Core._observabilityConfig = { ...config, environment: env };\n\n    // Collect adapters with priorities\n    const adapters: { adapter: ObservabilityAdapter; priority: number; failover?: boolean }[] = [];\n\n    // Always add LoggerAdapter as failover for console output\n    const loggerAdapter = new LoggerAdapter();\n    await loggerAdapter.initialize({\n      enabled: config.enabled !== false,\n      serviceName: config.serviceName,\n      environment: env,\n      defaultTags: config.defaultTags,\n    });\n    adapters.push({ adapter: loggerAdapter, priority: -100, failover: true });\n\n    // TODO: Add DatadogAdapter when configured (high priority, primary)\n    // if (config.provider === 'datadog' || config.datadog) {\n    //   const datadogAdapter = new DatadogAdapter();\n    //   await datadogAdapter.initialize({\n    //     ...config,\n    //     ...config.datadog,\n    //     environment: env,\n    //   });\n    //   adapters.push({ adapter: datadogAdapter, priority: 100, failover: false });\n    // }\n\n    // Create ObservabilityService with all adapters\n    const observability = new ObservabilityService();\n    await observability.initialize({\n      mode: config.mode ?? 'parallel',\n      adapters,\n      enabled: config.enabled,\n      serviceName: config.serviceName,\n      environment: env,\n      defaultTags: config.defaultTags,\n      samplingRate: config.samplingRate,\n      flushInterval: config.flushInterval,\n      adapterTimeout: config.flushInterval,\n    });\n\n    Core.log(\n      `ObservabilityService initialized with ${adapters.length} adapters (env: ${env})`,\n      verbose\n    );\n\n    Core._coreServices.observability = observability;\n    // Set on ServiceRegistry for injection\n    ServiceRegistry.setObservabilityInstance(observability);\n  }\n\n  /**\n   * Initialize global error handler\n   */\n  /** Create and initialize root store (includes error store + all other slices) */\n  private static async initializeRootStore(\n    config?: CoreErrorHandlerInitConfig,\n    verbose?: boolean\n  ): Promise<void> {\n    const isFrontend = typeof window !== 'undefined';\n\n    if (isFrontend) {\n      if (!Core._injectedStoreHook) {\n        throw new CorePackageError(\n          'Root store hook not set. Call Core.setRootStoreHook(useRootStore) before Core.initialize(), ' +\n            'or use PlyazProvider with the store prop: <PlyazProvider store={useRootStore} ...>',\n          ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n        );\n      }\n      Core.log('Using frontend root store (Zustand) - injected via setRootStoreHook', verbose);\n      // Frontend: use the injected store hook's vanilla store API\n      Core._rootStore = Core._injectedStoreHook as unknown as StoreApi<RootStoreSlice>;\n    } else {\n      Core.log('Creating backend composite store (in-memory)', verbose);\n      const ServerErrorMiddleware = getCoreDependency('ServerErrorMiddleware');\n      if (!ServerErrorMiddleware) {\n        throw new CorePackageError(\n          'ServerErrorMiddleware not available. Ensure setCoreDependencies() was called in entry-backend.ts',\n          ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n        );\n      }\n\n      // Backend: create in-memory error store + feature flag store (NOT Zustand)\n      const backendErrorStore = ServerErrorMiddleware.createErrorStore({\n        maxErrors: config?.maxErrors ?? DEFAULT_MAX_ERRORS,\n        onErrorAdded: config?.onError as ((error: unknown) => void) | undefined,\n      });\n\n      // Create standalone feature flag store for backend\n      const backendFlagStore = createStandaloneFeatureFlagStore();\n\n      // Combine error + feature flag stores to match RootStoreSlice interface\n      // IMPORTANT: Must use namespaced keys (errors, featureFlags) to match frontend structure\n      const compositeStore = {\n        errors: backendErrorStore,\n        featureFlags: backendFlagStore,\n      };\n\n      // Wrap backend composite store to match root store interface (getState() pattern)\n      Core._rootStore = {\n        getState: () => compositeStore,\n        subscribe: () => () => {}, // No-op for backend\n        destroy: () => {\n          backendErrorStore.reset();\n          backendFlagStore.dispose?.();\n        },\n      } as unknown as StoreApi<RootStoreSlice>;\n    }\n  }\n\n  /**\n   * Serialize a PackageErrorLike to SerializedError format.\n   * Used by BaseError.setEventEmitter() to convert errors for the store.\n   */\n  private static serializePackageError(error: PackageErrorLike): SerializedError {\n    const serviceName = typeof error.context?.service === 'string' ? error.context.service : 'core';\n\n    return {\n      id: generateId(),\n      code: (error.errorCode as SerializedError['code']) ?? ERROR_CODES.UNKNOWN_ERROR,\n      message: error.message,\n      status: error.statusCode,\n      category: error.category ?? ERROR_CATEGORY.Server,\n      timestamp: error.timestamp ?? new Date().toISOString(),\n      isRetryable: error.retryable ?? false,\n      source: serviceName,\n      dismissed: false,\n      context: {\n        correlationId: error.correlationId,\n        ...error.context,\n      },\n    };\n  }\n\n  /** Get error store actions from root store */\n  private static getErrorStoreActions(): ErrorStoreActions {\n    if (!Core._rootStore) {\n      throw new CorePackageError(\n        'Root store not initialized. Call Core.initialize() first.',\n        ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n      );\n    }\n    return Core._rootStore.getState().errors;\n  }\n\n  /** Build global error handler config */\n\n  private static buildErrorHandlerConfig(\n    config?: CoreErrorHandlerInitConfig\n  ): Parameters<typeof initializeGlobalErrorHandler>[1] {\n    // Compose filter: skip BaseError instances (they auto-emit via setEventEmitter)\n    // then apply user's custom filter if provided\n    const baseErrorFilter = (error: unknown): boolean => {\n      // Skip BaseError instances - they already emit SYSTEM.ERROR via BaseError.setEventEmitter()\n      // This prevents duplicate entries in the error store for uncaught BaseErrors\n      if (error instanceof BaseError) {\n        return false;\n      }\n      // Apply user's custom filter if provided\n      return config?.filter ? config.filter(error) : true;\n    };\n\n    return {\n      source: config?.source ?? 'global',\n      maxErrors: config?.maxErrors ?? DEFAULT_MAX_ERRORS,\n      filter: baseErrorFilter,\n      onError: config?.onError,\n      logToConsole: config?.logToConsole ?? false,\n    };\n  }\n\n  // eslint-disable-next-line complexity\n  private static async initializeErrorHandler(\n    config?: CoreErrorHandlerInitConfig,\n    verbose?: boolean\n  ): Promise<void> {\n    if (config?.enabled === false) {\n      Core.log('Error handler disabled by configuration', verbose);\n      return;\n    }\n\n    Core._errorConfig = config ?? {};\n    Core.log('Initializing global error handler...', verbose);\n\n    // Initialize error system (translations, catalogs)\n    // This is safe to call multiple times - it checks if already initialized\n    initializeErrorSystem({\n      defaultLocale: Core._errorConfig.localization?.defaultLocale,\n      fallbackLocale: Core._errorConfig.localization?.fallbackLocale,\n      additionalCatalogs: Core._errorConfig.localization?.additionalCatalogs,\n      replaceBuiltIn: Core._errorConfig.localization?.replaceBuiltIn,\n    });\n\n    // Initialize root store (contains error store + all slices)\n    await Core.initializeRootStore(Core._errorConfig, verbose);\n\n    // Wire up CoreEventManager for automatic error event emission\n    // This allows errors captured by the global handler to emit events\n    setEventEmitter(CoreEventManager.emit.bind(CoreEventManager));\n\n    // Wire up BaseError to auto-emit CORE_EVENTS.SYSTEM.ERROR when ANY error is created\n    // This covers ALL BaseError subclasses: CorePackageError, DatabasePackageError,\n    // ValidationError, ApiPackageError, StoragePackageError, NotificationPackageError, etc.\n    BaseError.setEventEmitter(error => {\n      const serializedError = Core.serializePackageError(error);\n      const serviceName = serializedError.source ?? 'core';\n\n      CoreEventManager.emit(CORE_EVENTS.SYSTEM.ERROR, {\n        errors: [serializedError],\n        context: serviceName,\n        recoverable: error.retryable ?? false,\n      } satisfies CoreSystemErrorPayload);\n    });\n\n    const errorStore = Core.getErrorStoreActions();\n    Core._errorHandler = initializeGlobalErrorHandler(\n      errorStore,\n      Core.buildErrorHandlerConfig(Core._errorConfig)\n    );\n\n    // Subscribe to SYSTEM.ERROR events and setup store subscriptions\n    Core.setupErrorEventSubscription(verbose);\n    Core.setupErrorStoreSubscription(verbose);\n\n    Core.log('Global error handler initialized with CoreEventManager integration', verbose);\n\n    // Auto-create HTTP error handler based on runtime (unless disabled)\n    if (Core._errorConfig.httpHandler !== false) {\n      await Core.createHttpErrorHandler(Core._errorConfig, verbose);\n    }\n  }\n\n  /**\n   * Log serialized errors with full details.\n   */\n  private static logErrors(errors: SerializedError[], prefix = 'ErrorStore'): void {\n    for (const err of errors) {\n      Core.logger.error(`[${prefix}] ${err.code}: ${err.message}`, {\n        id: err.id,\n        code: err.code,\n        message: err.message,\n        category: err.category,\n        source: err.source,\n        status: err.status,\n        isRetryable: err.isRetryable,\n        context: err.context,\n        timestamp: err.timestamp,\n      });\n    }\n  }\n\n  /**\n   * Setup SYSTEM.ERROR event subscription for error store updates.\n   * Backend: Also logs errors with full details.\n   * Frontend: Only updates store (logging handled by store subscription).\n   */\n  private static setupErrorEventSubscription(verbose?: boolean): void {\n    const isBackend = BACKEND_RUNTIMES.includes(Core._coreServices.runtime);\n\n    const errorEventCleanup = CoreEventManager.on(\n      CORE_EVENTS.SYSTEM.ERROR,\n      (event: CoreEvent<CoreSystemErrorPayload>) => {\n        if (!Core._rootStore) return;\n\n        try {\n          const { errors } = event.data;\n          if (!errors || errors.length === 0) return;\n\n          Core._rootStore.getState().errors.addErrors(errors);\n          if (isBackend) Core.logErrors(errors);\n          Core.log(`Added ${errors.length} error(s) to store`, verbose);\n        } catch (e) {\n          Core.logger.error('Failed to handle error event', { error: e });\n        }\n      }\n    );\n\n    Core._eventCleanupFns.push(errorEventCleanup);\n  }\n\n  /**\n   * Setup error store subscription for frontend logging.\n   * Logs new errors when they're added to the store.\n   * Only active for non-backend runtimes (browser, nextjs, nuxt, edge).\n   */\n  private static setupErrorStoreSubscription(verbose?: boolean): void {\n    const isFrontend = !BACKEND_RUNTIMES.includes(Core._coreServices.runtime);\n    if (!isFrontend || !Core._rootStore) return;\n\n    let prevErrorCount = 0;\n    const storeUnsubscribe = Core._rootStore.subscribe(state => {\n      const currentCount = state.errors.errorCount;\n      if (currentCount <= prevErrorCount) {\n        prevErrorCount = currentCount;\n        return;\n      }\n      const newErrors = state.errors.errors.slice(0, currentCount - prevErrorCount);\n      Core.logErrors(newErrors, 'ErrorStore:FE');\n      prevErrorCount = currentCount;\n    });\n\n    Core._eventCleanupFns.push(storeUnsubscribe);\n    Core.log('Error store subscription initialized for frontend', verbose);\n  }\n\n  /**\n   * Create HTTP error handler based on detected runtime.\n   * Stores the handler in Core._httpErrorHandler for access via Core.httpErrorHandler\n   */\n  // eslint-disable-next-line complexity\n  private static async createHttpErrorHandler(\n    config?: CoreErrorHandlerInitConfig,\n    verbose?: boolean\n  ): Promise<void> {\n    const runtime = Core._coreServices.runtime;\n    const isProduction = Core._coreServices.env.NODE_ENV === 'production';\n\n    // Skip for browser runtime (no HTTP error handler needed)\n    if (runtime === 'browser') {\n      Core._httpErrorHandler = null;\n      Core.log('Skipping HTTP handler for browser runtime', verbose);\n      return;\n    }\n\n    const ServerErrorMiddleware = getCoreDependency('ServerErrorMiddleware');\n    if (!ServerErrorMiddleware) {\n      Core.log('Skipping HTTP handler (ServerErrorMiddleware not registered)', verbose);\n      return;\n    }\n\n    // Build common config for all HTTP handlers\n    const httpConfig = {\n      source: runtime,\n      includeStack: config?.includeStack ?? !isProduction,\n      logErrors: config?.logger ?? config?.logToConsole ?? true,\n      errorHandler: Core._errorHandler ?? undefined,\n    };\n\n    switch (runtime) {\n      case 'express':\n        Core._httpErrorHandler = ServerErrorMiddleware.createHttpErrorHandler(httpConfig);\n        Core.log('Created Express error handler middleware', verbose);\n        break;\n\n      case 'nestjs':\n        Core._httpErrorHandler = ServerErrorMiddleware.createNestJsExceptionFilter(httpConfig);\n        Core.log('Created NestJS exception filter', verbose);\n        break;\n\n      case 'nextjs':\n        // For Next.js, provide both App Router and Pages Router handlers\n        Core._httpErrorHandler = {\n          /** For App Router: export const GET = withErrorHandler(handler) */\n          withErrorHandler: <T>(handler: T, overrideConfig = {}) =>\n            ServerErrorMiddleware.withErrorHandler(\n              handler as Parameters<typeof ServerErrorMiddleware.withErrorHandler>[0],\n              { ...httpConfig, ...overrideConfig }\n            ),\n          /** For Pages Router: export default createNextApiErrorHandler()(handler) */\n          createNextApiErrorHandler: (overrideConfig = {}) =>\n            ServerErrorMiddleware.createNextApiErrorHandler({ ...httpConfig, ...overrideConfig }),\n        };\n        Core.log('Created Next.js error handlers', verbose);\n        break;\n\n      case 'node':\n      case 'bun':\n      case 'deno':\n        // Generic Node.js handler\n        Core._httpErrorHandler = {\n          /** Handle error: handleNodeError(error, req, res) */\n          handleError: (error: unknown, req: unknown, res: unknown) =>\n            ServerErrorMiddleware.handleNodeError(\n              error,\n              req as Parameters<typeof ServerErrorMiddleware.handleNodeError>[1],\n              // eslint-disable-next-line no-magic-numbers -- Type parameter index for handleNodeError\n              res as Parameters<typeof ServerErrorMiddleware.handleNodeError>[2],\n              httpConfig\n            ),\n          /** Create middleware for use with native http */\n          createMiddleware: () => ServerErrorMiddleware.createHttpErrorHandler(httpConfig),\n        };\n        Core.log(`Created ${runtime} error handler`, verbose);\n        break;\n\n      default:\n        // For unknown runtimes, provide generic handler\n        Core._httpErrorHandler = ServerErrorMiddleware.createHttpErrorHandler(httpConfig);\n        Core.log(`Created generic HTTP error handler for ${runtime}`, verbose);\n    }\n  }\n\n  /**\n   * Subscribe to CoreEventManager error events\n   * Forwards entity, API, validation, database, and auth errors to the global error handler.\n   *\n   * NOTE: SYSTEM.ERROR is NOT subscribed here - it's handled in initializeErrorHandler()\n   * via the BaseError.setEventEmitter() + addErrors() pattern to avoid duplicate subscriptions.\n   *\n   * For non-BaseError errors, domain-specific events (ENTITY.ERROR, API.REQUEST_ERROR, etc.)\n   * are captured here. BaseError instances are skipped (they already auto-emit via SYSTEM.ERROR).\n   *\n   * Database errors (DATABASE.ERROR) are only subscribed on backend runtimes since\n   * DbService is backend-only (skipDb: true on frontend).\n   */\n  private static subscribeToErrorEvents(verbose?: boolean): void {\n    if (!Core._errorHandler) {\n      return;\n    }\n\n    Core.log('Subscribing to error events...', verbose);\n\n    // NOTE: SYSTEM.ERROR subscription is in initializeErrorHandler() to avoid duplicates.\n    // All BaseError instances auto-emit to SYSTEM.ERROR via BaseError.setEventEmitter(),\n    // and that handler adds errors directly via addErrors().\n\n    // Helper: subscribe to error event, skip BaseError (already auto-emits via SYSTEM.ERROR)\n    const subscribeError = (event: string, source: string): (() => void) => {\n      return CoreEventManager.on(event, (e: CoreEvent<{ error?: unknown }>) => {\n        if (Core._errorHandler && e.data?.error && !(e.data.error instanceof BaseError)) {\n          Core._errorHandler.captureError(e.data.error, source);\n        }\n      });\n    };\n\n    // Universal error subscriptions (frontend + backend)\n    Core._eventCleanupFns.push(\n      subscribeError(CORE_EVENTS.ENTITY.ERROR, 'entity'),\n      subscribeError(CORE_EVENTS.API.REQUEST_ERROR, 'api'),\n      subscribeError(CORE_EVENTS.VALIDATION.FAILED, 'validation'),\n      subscribeError(CORE_EVENTS.AUTH.UNAUTHORIZED, 'auth'),\n      subscribeError(CORE_EVENTS.AUTH.SESSION_EXPIRED, 'auth')\n    );\n\n    // Backend-only error subscriptions\n    if (Core.isRuntimeCompatible('backend')) {\n      Core._eventCleanupFns.push(\n        subscribeError(CORE_EVENTS.DATABASE.ERROR, 'database'),\n        subscribeError(CORE_EVENTS.STORAGE.ERROR, 'storage'),\n        subscribeError(CORE_EVENTS.NOTIFICATION.ERROR, 'notification'),\n        subscribeError(CORE_EVENTS.CACHE.ERROR, 'cache')\n      );\n      Core.log(\n        'Subscribed to backend error events (database, storage, notification, cache)',\n        verbose\n      );\n    }\n\n    const eventTypes = ['entity', 'api', 'validation', 'auth'];\n    if (Core.isRuntimeCompatible('backend'))\n      eventTypes.push('database', 'storage', 'notification', 'cache');\n    Core.log(`Subscribed to domain error events: ${eventTypes.join(', ')}`, verbose);\n  }\n\n  /** Handle fetch flags error and return empty flags */\n  private static handleFetchFlagsError(\n    error: unknown,\n    config?: CoreFeatureFlagInitConfig,\n    verbose?: boolean\n  ): Record<string, FeatureFlagValue> {\n    if (verbose) Core.logger.error('Failed to fetch feature flags', { error });\n\n    // If already a package error, use as-is; otherwise wrap it\n    const packageError =\n      error instanceof BaseError\n        ? (error as CorePackageError)\n        : new CorePackageError(\n            error instanceof Error ? error.message : String(error),\n            ERROR_CODES.CORE_FEATURE_FLAG_PROVIDER_ERROR,\n            { cause: error instanceof Error ? error : undefined }\n          );\n    config?.onError?.(packageError);\n    return {};\n  }\n\n  /** Create fetch flags function */\n  private static createFetchFlagsFn(\n    config?: CoreFeatureFlagInitConfig,\n    verbose?: boolean\n  ): () => Promise<Record<string, FeatureFlagValue>> {\n    // eslint-disable-next-line complexity\n    return async () => {\n      // Only fetch from API when provider is explicitly 'api'\n      // All other providers (memory, undefined) use local defaults\n      if (config?.provider !== 'api') {\n        Core.log(\n          `Feature flags using ${config?.provider ?? 'default'} provider (no API fetch)`,\n          verbose\n        );\n        return config?.defaults ?? {};\n      }\n\n      try {\n        const client = ApiClientService.getClient();\n        const endpoint = config?.apiEndpoint ?? '/feature-flags';\n        const response = await client.get<{ flags: Record<string, FeatureFlagValue> }>(endpoint);\n\n        if (!response.isSuccess) {\n          throw new CorePackageError(\n            response.error?.message ?? 'Failed to fetch feature flags',\n            ERROR_CODES.CORE_FEATURE_FLAG_PROVIDER_ERROR\n          );\n        }\n\n        return response.data?.flags ?? {};\n      } catch (error) {\n        return Core.handleFetchFlagsError(error, config, verbose);\n      }\n    };\n  }\n\n  /**\n   * Initialize feature flags slice within root store\n   */\n\n  // eslint-disable-next-line complexity\n  private static async initializeFeatureFlags(\n    config?: CoreFeatureFlagInitConfig,\n    verbose?: boolean\n  ): Promise<void> {\n    if (config?.enabled === false) {\n      Core.log('Feature flags disabled by configuration', verbose);\n      return;\n    }\n\n    if (!Core._rootStore) {\n      throw new CorePackageError(\n        'Root store not initialized. Call Core.initializeErrorHandler() first.',\n        ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n      );\n    }\n\n    Core._flagConfig = config ?? {};\n    const isApiProvider = config?.provider === 'api';\n    Core.log(\n      `Initializing feature flags from root store (provider: ${config?.provider ?? 'default'})...`,\n      verbose\n    );\n\n    // Initialize the feature flag slice within the root store\n    const state = Core._rootStore.getState();\n    await state.featureFlags.initialize({\n      defaults: Core._flagConfig.defaults,\n      // Only enable polling for API provider\n      polling: isApiProvider ? Core._flagConfig.polling : undefined,\n      fetchFn: Core.createFetchFlagsFn(Core._flagConfig, verbose),\n      onFlagChange: Core._flagConfig.onFlagChange,\n      onError: Core._flagConfig.onError,\n    });\n\n    Core.log('Feature flags initialized', verbose);\n  }\n}\n\n// Export for convenience (excluding server-only services - use backend entry for those)\n// Note: CacheService and DEFAULT_ENCRYPTION_FIELDS are only exported from entry-backend.ts\nexport { ApiClientService };\n","/**\n * Express App Configuration Helper\n *\n * Configures an Express application with middleware based on CoreInitOptions.\n * Call this after creating your Express app.\n *\n * @example\n * ```typescript\n * import express from 'express';\n * import { configureExpressApp } from '@plyaz/core/express';\n * import { buildCoreConfig } from './config';\n *\n * async function bootstrap() {\n *   const app = express();\n *   const options = buildCoreConfig();\n *\n *   // Configure middleware, security, etc.\n *   await configureExpressApp(app, options);\n *\n *   app.listen(3000);\n * }\n * ```\n */\n\nimport type { Application, Request, Response, NextFunction } from 'express';\nimport type { ConfigureAppResult, CoreExpressMiddlewareConfig } from '@plyaz/types/core';\nimport { TIME_CONSTANTS } from '@plyaz/config';\nimport { PackageLogger } from '@plyaz/logger';\nimport { createHttpErrorHandler } from '@plyaz/errors/middleware/backend';\nimport { Core, type CoreInitOptions } from '../CoreInitializer';\n\n// Default configuration values\nconst DEFAULTS = {\n  bodyLimit: '10mb',\n  timeout: 30000,\n  shutdownTimeout: 10000,\n  rateLimit: {\n    ttl: 60,\n    limit: 100,\n  },\n} as const;\n\n/**\n * Configure an Express application with middleware based on CoreInitOptions.\n *\n * This function applies:\n * - Compression middleware (if compression: true)\n * - Helmet security headers (if helmet: true)\n * - Rate limiting (if rateLimit config provided)\n * - Body size limits\n * - Request timeout\n * - Raw body parsing for webhooks\n * - CORS configuration\n * - Error handler middleware\n * - Graceful shutdown handlers\n *\n * @param app - Express application instance\n * @param options - Core initialization options (reads express config)\n * @returns Configuration result with enabled/skipped features\n *\n * @example Basic usage\n * ```typescript\n * const app = express();\n * await configureExpressApp(app, {\n *   express: {\n *     compression: true,\n *     helmet: true,\n *     rateLimit: { ttl: 60, limit: 100 },\n *   },\n * });\n * ```\n *\n * @example Full production config\n * ```typescript\n * await configureExpressApp(app, {\n *   express: {\n *     compression: true,\n *     helmet: true,\n *     rateLimit: { ttl: 60, limit: 100 },\n *     bodyLimit: '10mb',\n *     timeout: 30000,\n *     trustProxy: true,\n *     rawBody: { paths: ['/webhooks/*'] },\n *     gracefulShutdown: true,\n *   },\n * });\n * ```\n */\n// eslint-disable-next-line complexity, max-lines-per-function\nexport async function configureExpressApp(\n  app: Application,\n  options: CoreInitOptions\n): Promise<ConfigureAppResult> {\n  const config: CoreExpressMiddlewareConfig = options.express ?? {};\n  const isProduction = options.environment === 'production' || Core.env.NODE_ENV === 'production';\n  const logger = new PackageLogger({\n    packageName: 'core',\n    service: 'Express',\n    transport: Core.loggerTransport,\n  });\n\n  const result: ConfigureAppResult = {\n    enabled: [],\n    skipped: [],\n    warnings: [],\n    paths: {},\n  };\n\n  // ─────────────────────────────────────────────────────────────────────────────\n  // Trust Proxy\n  // ─────────────────────────────────────────────────────────────────────────────\n  if (config.trustProxy !== undefined) {\n    app.set('trust proxy', config.trustProxy);\n    result.enabled.push('trustProxy');\n    logger.debug('Trust proxy configured', { trustProxy: config.trustProxy });\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────────\n  // Compression\n  // ─────────────────────────────────────────────────────────────────────────────\n  if (config.compression === true || (config.compression !== false && isProduction)) {\n    try {\n      const compression = await import('compression');\n      app.use(compression.default());\n      result.enabled.push('compression');\n      logger.debug('Compression middleware enabled');\n    } catch {\n      result.skipped.push('compression');\n      result.warnings.push('compression package not installed - run: pnpm add compression');\n    }\n  } else {\n    result.skipped.push('compression');\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────────\n  // Helmet Security Headers\n  // ─────────────────────────────────────────────────────────────────────────────\n  if (config.helmet !== false) {\n    try {\n      const helmet = await import('helmet');\n      const helmetOptions = typeof config.helmet === 'object' ? config.helmet : {};\n      app.use(helmet.default(helmetOptions));\n      result.enabled.push('helmet');\n      logger.debug('Helmet security headers enabled');\n    } catch {\n      result.skipped.push('helmet');\n      result.warnings.push('helmet package not installed - run: pnpm add helmet');\n    }\n  } else {\n    result.skipped.push('helmet');\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────────\n  // Rate Limiting\n  // ─────────────────────────────────────────────────────────────────────────────\n  if (config.rateLimit !== false) {\n    try {\n      const rateLimit = await import('express-rate-limit');\n      const rateLimitConfig =\n        typeof config.rateLimit === 'object' ? config.rateLimit : DEFAULTS.rateLimit;\n\n      const limiter = rateLimit.default({\n        windowMs:\n          (rateLimitConfig.ttl ?? DEFAULTS.rateLimit.ttl) * TIME_CONSTANTS.MILLISECONDS_PER_SECOND,\n        max: rateLimitConfig.limit ?? DEFAULTS.rateLimit.limit,\n        standardHeaders: true,\n        legacyHeaders: false,\n        skip: 'skipIf' in rateLimitConfig ? rateLimitConfig.skipIf : undefined,\n      });\n\n      app.use(limiter);\n      result.enabled.push('rateLimit');\n      logger.debug('Rate limiting enabled', {\n        ttl: rateLimitConfig.ttl ?? DEFAULTS.rateLimit.ttl,\n        limit: rateLimitConfig.limit ?? DEFAULTS.rateLimit.limit,\n      });\n    } catch {\n      result.skipped.push('rateLimit');\n      result.warnings.push(\n        'express-rate-limit package not installed - run: pnpm add express-rate-limit'\n      );\n    }\n  } else {\n    result.skipped.push('rateLimit');\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────────\n  // Body Parser / Size Limits\n  // ─────────────────────────────────────────────────────────────────────────────\n  try {\n    const bodyParser = await import('body-parser');\n    const limit = config.bodyLimit ?? DEFAULTS.bodyLimit;\n    const extended = config.extendedUrlEncoded ?? true;\n\n    app.use(bodyParser.json({ limit }));\n    app.use(bodyParser.urlencoded({ limit, extended }));\n    result.enabled.push('bodyParser');\n    logger.debug('Body parser configured', { limit, extended });\n  } catch {\n    result.skipped.push('bodyParser');\n    result.warnings.push('body-parser package not installed');\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────────\n  // Raw Body for Webhooks\n  // ─────────────────────────────────────────────────────────────────────────────\n  if (config.rawBody) {\n    try {\n      const bodyParser = await import('body-parser');\n      const rawBodyConfig = typeof config.rawBody === 'object' ? config.rawBody : {};\n      const paths = rawBodyConfig.paths ?? ['/webhooks'];\n\n      // Add raw body parsing middleware\n      app.use(\n        bodyParser.raw({\n          type: 'application/json',\n          verify: (req: unknown, _res: unknown, buf: Buffer) => {\n            // Check if path matches\n            const request = req as { rawBody?: Buffer; originalUrl?: string };\n            const reqPath = request.originalUrl ?? '';\n            if (paths.some((p: string) => reqPath.includes(p.replace('*', '')))) {\n              request.rawBody = buf;\n            }\n          },\n        })\n      );\n\n      result.enabled.push('rawBody');\n      logger.debug('Raw body parsing enabled for paths', { paths });\n    } catch {\n      result.skipped.push('rawBody');\n    }\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────────\n  // CORS\n  // ─────────────────────────────────────────────────────────────────────────────\n  if (config.cors !== false && config.cors !== undefined) {\n    try {\n      const cors = await import('cors');\n      const corsConfig = typeof config.cors === 'object' ? config.cors : {};\n      app.use(\n        cors.default({\n          origin: corsConfig.origin ?? true,\n          credentials: corsConfig.credentials ?? true,\n          methods: corsConfig.methods,\n          allowedHeaders: corsConfig.allowedHeaders,\n        })\n      );\n      result.enabled.push('cors');\n      logger.debug('CORS configured', { ...corsConfig });\n    } catch {\n      result.skipped.push('cors');\n      result.warnings.push('cors package not installed - run: pnpm add cors');\n    }\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────────\n  // Request Timeout\n  // ─────────────────────────────────────────────────────────────────────────────\n  if (config.timeout && config.timeout > 0) {\n    try {\n      const connectTimeout = await import('connect-timeout');\n      app.use(connectTimeout.default(`${config.timeout}ms`));\n      result.enabled.push('timeout');\n      logger.debug('Request timeout configured', { timeout: config.timeout });\n    } catch {\n      result.skipped.push('timeout');\n    }\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────────\n  // Mount path\n  // ─────────────────────────────────────────────────────────────────────────────\n  if (config.mountPath) {\n    result.paths.prefix = config.mountPath;\n    logger.debug('Mount path configured', { path: config.mountPath });\n  }\n\n  // Log summary\n  logger.info('Express app configured', {\n    enabled: result.enabled,\n    skipped: result.skipped.length > 0 ? result.skipped : undefined,\n    warnings: result.warnings.length > 0 ? result.warnings : undefined,\n  });\n\n  return result;\n}\n\n/**\n * Create Express error handler middleware.\n * Must be added AFTER all routes.\n *\n * @param options - Core initialization options\n * @returns Express error handler middleware\n *\n * @example\n * ```typescript\n * const app = express();\n *\n * // Your routes\n * app.get('/api/users', async (req, res) => { ... });\n *\n * // Error handler (must be last)\n * app.use(createExpressErrorHandler(options));\n * ```\n */\nexport function createExpressErrorHandler(\n  options: CoreInitOptions\n): (err: unknown, req: Request, res: Response, next: NextFunction) => void {\n  const isProduction = options.environment === 'production' || Core.env.NODE_ENV === 'production';\n  const errorConfig = Core.errorConfig ?? {};\n\n  return createHttpErrorHandler({\n    source: 'express',\n    includeStack: errorConfig.includeStack ?? !isProduction,\n    logErrors: errorConfig.logger ?? errorConfig.logToConsole ?? true,\n  });\n}\n\n/**\n * Setup graceful shutdown handlers for Express.\n *\n * @param server - HTTP server instance\n * @param options - Core initialization options\n *\n * @example\n * ```typescript\n * const app = express();\n * const server = app.listen(3000);\n * setupGracefulShutdown(server, options);\n * ```\n */\nexport function setupExpressGracefulShutdown(\n  server: { close: (callback?: (err?: Error) => void) => void },\n  options: CoreInitOptions\n): void {\n  const config = options.express ?? {};\n  if (config.gracefulShutdown === false) {\n    return;\n  }\n\n  const timeout = config.shutdownTimeout ?? DEFAULTS.shutdownTimeout;\n  const logger = new PackageLogger({\n    packageName: 'core',\n    service: 'Express',\n    transport: Core.loggerTransport,\n  });\n\n  /* eslint-disable n/no-process-exit -- Graceful shutdown requires process.exit */\n  const shutdown = (signal: string): void => {\n    logger.info(`${signal} received, initiating graceful shutdown...`);\n    const shutdownTimer = setTimeout(() => {\n      logger.warn('Graceful shutdown timeout, forcing exit');\n      process.exit(1);\n    }, timeout);\n\n    server.close(err => {\n      clearTimeout(shutdownTimer);\n      if (err) {\n        logger.error('Error during shutdown', { error: err });\n        process.exit(1);\n      }\n      logger.info('Graceful shutdown complete');\n      process.exit(0);\n    });\n  };\n\n  process.on('SIGTERM', () => shutdown('SIGTERM'));\n  process.on('SIGINT', () => shutdown('SIGINT'));\n  /* eslint-enable n/no-process-exit */\n\n  logger.debug('Graceful shutdown handlers registered', { timeout });\n}\n\n/**\n * Get default Express middleware configuration.\n *\n * @param isProduction - Whether running in production\n * @returns Default configuration\n */\nexport function getDefaultExpressConfig(isProduction = false): CoreExpressMiddlewareConfig {\n  return {\n    compression: isProduction,\n    helmet: true,\n    rateLimit: isProduction ? DEFAULTS.rateLimit : false,\n    bodyLimit: DEFAULTS.bodyLimit,\n    timeout: DEFAULTS.timeout,\n    cors: true,\n    trustProxy: isProduction,\n    gracefulShutdown: true,\n    shutdownTimeout: DEFAULTS.shutdownTimeout,\n  };\n}\n"]}