{"version":3,"sources":["../src/base/cache/strategies/redis.ts","../src/utils/common/hash.ts","../src/utils/common/id.ts","../src/utils/common/values.ts","../src/utils/common/typeGuards.ts","../src/utils/common/time.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/domain/base/BaseDomainService.ts","../src/domain/base/BaseFrontendDomainService.ts","../src/domain/base/BaseMapper.ts","../src/domain/base/BaseValidator.ts","../src/utils/mapperUtils.ts","../src/events/FrontendEventPersistenceHandler.ts","../src/base/cache/strategies/memory.ts","../src/base/cache/index.ts","../src/domain/example/mappers/ExampleMapper.ts","../src/domain/example/FrontendExampleDomainService.ts","../src/domain/files/mappers/FilesMapper.ts","../src/domain/files/FrontendFilesDomainService.ts","../src/domain/notifications/mappers/NotificationsMapper.ts","../src/domain/notifications/validators/NotificationsValidator.ts","../src/domain/notifications/FrontendNotificationsDomainService.ts","../src/frontend/components/InitializationError.tsx","../src/frontend/components/InitializationLoading.tsx","../src/utils/featureFlags/context.ts","../src/utils/featureFlags/conditions.ts","../src/engine/featureFlags/engine.ts","../src/domain/featureFlags/provider.ts","../src/domain/featureFlags/providers/api.ts","../src/domain/featureFlags/FrontendFeatureFlagDomainService.ts","../src/frontend/providers/ApiProvider.tsx","../src/events/streaming/hooks/useStreamConnection.ts","../src/frontend/hooks/useStreamManager.ts","../src/frontend/providers/PlyazProvider.tsx","../src/frontend/files/useFiles.ts","../src/frontend/hooks/files/useAllFileProgress.ts","../src/frontend/hooks/files/useHasActiveFileOperations.ts","../src/utils/files.ts","../src/frontend/hooks/files/useFileUpload.ts","../src/frontend/hooks/files/useFileDownload.ts","../src/frontend/hooks/files/useFile.ts","../src/frontend/hooks/files/useFileDelete.ts","../src/frontend/notifications/useNotifications.ts","../src/frontend/store/service-accessors.ts","../src/frontend/store/feature-flags.ts"],"names":["CorePackageError","ERROR_CODES","TIME_CONSTANTS","FNV_CONSTANTS","MATH_CONSTANTS","EventEmitter","PRODUCTION_CONFIG","STAGING_CONFIG","DEVELOPMENT_CONFIG","setDefaultApiClient","ApiPackageError","PACKAGE_STATUS_CODES","API_ERROR_CODES","OPERATIONS","generateRequestId","ERROR_CATEGORY","HTTP_STATUS","CORE_EVENTS","mergeConfigs","createApiClient","PackageLogger","logger","errors","OBSERVABILITY_METRICS","BACKEND_RUNTIMES","UNIVERSAL_RUNTIMES","FRONTEND_RUNTIMES","DEFAULT_STALE_MINUTES","DEFAULT_MAX_STALE_AGE","StreamPackageError","STREAM_ERROR_CODES","STREAMING_DEFAULTS","CoreLogger","STORE_KEYS","clearEventEmitter","BaseError","state","createStandaloneFeatureFlagStore","initializeErrorSystem","setEventEmitter","initializeGlobalErrorHandler","uploadFileFetcher","uploadFilesFetcher","generateDocumentFetcher","ValidateAndFormatErrors","ValidationError","config","CACHE_MAX_SIZE_DEFAULT","CACHE_CLEANUP_INTERVAL_DEFAULT","RedisCacheStrategy","PAGE_SIZES","SERVICE_KEYS","SYSTEM_USER_ID","getFile","deleteFile","downloadFile","getSignedUrl","PAGINATION_DEFAULTS","CreateNotificationsSchema","DeleteNotificationsSchema","QueryNotificationsSchema","z","NotificationPackageError","NOTIFICATION_ERROR_CODES","fetchNotifications","deleteNotification","store","_instance","jsx","Fragment","jsxs","ISO_STANDARDS","apiEvaluateAllFlags","apiCreateFlag","apiUpdateFlag","apiDeleteFlag","apiFetchRules","useState","useEffect","error","useRef","useCallback","DEFAULT_MAX_RECONNECT_ATTEMPTS","serializeError","createContext","createEncryptionConfig","useMemo","ApiProvider","useContext","useUploadProgress","useDownloadProgress","useGenerateProgress","useHasActiveUploads","useHasActiveDownloads","ENTITY_TYPE","FILE_CATEGORY","useOverallUploadProgress","abortRequest","getEndpointUrl","useOverallDownloadProgress","endpointCachePattern"],"mappings":"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","file":"entry-frontend.cjs","sourcesContent":["/**\n * Redis Cache Strategy\n *\n * Redis-based cache implementation for distributed caching.\n * This will be moved to @plyaz/core when the package structure is finalized.\n *\n * @fileoverview Redis cache strategy implementation\n * @version 1.0.0\n */\n\nimport { TIME_CONSTANTS } from '@plyaz/config';\nimport type { CacheStrategy, CacheEntry, CacheStats, RedisCacheConfig } from '@plyaz/types';\nimport { ERROR_CODES } from '@plyaz/types';\nimport { CorePackageError } from '@plyaz/errors';\nimport type { Redis as IoRedisClientType } from 'ioredis';\n\n/**\n * Redis cache strategy implementation.\n * Provides distributed caching for multi-instance applications.\n *\n * @class RedisCacheStrategy\n * @implements {CacheStrategy}\n *\n * @example\n * ```typescript\n * const cache = new RedisCacheStrategy({\n *   url: 'redis://localhost:6379',\n *   keyPrefix: 'app:cache:'\n * });\n *\n * await cache.set('key', entry);\n * const cached = await cache.get('key');\n * ```\n */\nexport class RedisCacheStrategy implements CacheStrategy {\n  private client!: IoRedisClientType;\n  private stats = {\n    hitCount: 0,\n    missCount: 0,\n    setCount: 0,\n    deleteCount: 0,\n  };\n  private isConnected = false;\n  private readonly keyPrefix: string;\n\n  /**\n   * Creates a new Redis cache strategy.\n   *\n   * @param config - Redis cache configuration\n   */\n  constructor(private config: RedisCacheConfig) {\n    if (!config.url) {\n      throw new CorePackageError('Redis URL is required', ERROR_CODES.CLIENT_INVALID_CONFIG);\n    }\n    this.keyPrefix = config.keyPrefix ?? 'cache:';\n  }\n\n  /**\n   * Stores a cache entry in Redis.\n   *\n   * @param key - Cache key\n   * @param entry - Cache entry to store\n   * @returns Promise that resolves when entry is stored\n   */\n  async set<T>(key: string, entry: CacheEntry<T>): Promise<void> {\n    await this.ensureConnected();\n\n    const redisKey = this.buildRedisKey(key);\n    const serializedEntry = JSON.stringify(entry);\n\n    // Calculate TTL in seconds\n    const ttlMs = entry.expiresAt - Date.now();\n    const ttlSeconds = Math.max(1, Math.ceil(ttlMs / TIME_CONSTANTS.MILLISECONDS_PER_SECOND));\n\n    await this.client.set(redisKey, serializedEntry, 'EX', ttlSeconds);\n    this.stats.setCount++;\n  }\n\n  /**\n   * Retrieves a cache entry from Redis.\n   *\n   * @param key - Cache key\n   * @returns Promise that resolves to cache entry or null if not found\n   */\n  async get<T>(key: string): Promise<CacheEntry<T> | null> {\n    await this.ensureConnected();\n\n    const redisKey = this.buildRedisKey(key);\n    const serializedEntry = await this.client.get(redisKey);\n\n    if (!serializedEntry || typeof serializedEntry !== 'string') {\n      this.stats.missCount++;\n      return null;\n    }\n\n    try {\n      const entry = JSON.parse(serializedEntry) as CacheEntry<T>;\n      this.stats.hitCount++;\n      return entry;\n    } catch {\n      // Invalid JSON, remove the corrupted entry\n      await this.client.del(redisKey);\n      this.stats.missCount++;\n      return null;\n    }\n  }\n\n  /**\n   * Removes a cache entry from Redis.\n   *\n   * @param key - Cache key to remove\n   * @returns Promise that resolves when entry is removed\n   */\n  async delete(key: string): Promise<void> {\n    await this.ensureConnected();\n\n    const redisKey = this.buildRedisKey(key);\n    await this.client.del(redisKey);\n    this.stats.deleteCount++;\n  }\n\n  /**\n   * Clears all cache entries from Redis.\n   * This removes all keys with the configured prefix.\n   *\n   * @returns Promise that resolves when cache is cleared\n   */\n  async clear(): Promise<void> {\n    await this.ensureConnected();\n\n    const pattern = `${this.keyPrefix}*`;\n\n    const keys = await this.client.keys(pattern);\n    if (keys.length > 0) {\n      await this.client.del(...keys);\n    }\n\n    this.stats.hitCount = 0;\n    this.stats.missCount = 0;\n  }\n\n  /**\n   * Gets cache statistics.\n   *\n   * @returns Promise that resolves to cache statistics\n   */\n  async getStats(): Promise<CacheStats> {\n    await this.ensureConnected();\n\n    // Get approximate entry count\n    const pattern = `${this.keyPrefix}*`;\n    const keys = await this.client.keys(pattern);\n    const entryCount = Array.isArray(keys) ? keys.length : 0;\n\n    const totalRequests = this.stats.hitCount + this.stats.missCount;\n    const hitRatio = totalRequests > 0 ? this.stats.hitCount / totalRequests : 0;\n\n    return {\n      hits: this.stats.hitCount,\n      misses: this.stats.missCount,\n      sets: this.stats.setCount,\n      deletes: this.stats.deleteCount,\n      size: entryCount,\n      hitRatio,\n    };\n  }\n\n  /**\n   * Disposes of the Redis cache and cleans up resources.\n   *\n   * @returns Promise that resolves when cleanup is complete\n   */\n  async dispose(): Promise<void> {\n    if (this.client && this.isConnected) {\n      await this.client.quit();\n      this.isConnected = false;\n    }\n  }\n\n  /**\n   * Ensures Redis connection is established.\n   *\n   * @private\n   * @returns Promise that resolves when connected\n   */\n  private async ensureConnected(): Promise<void> {\n    if (this.isConnected) return;\n\n    try {\n      this.client = await this.createIoRedisClient();\n      this.isConnected = true;\n    } catch (error) {\n      throw new CorePackageError(\n        `Failed to connect to Redis: ${error instanceof Error ? error.message : 'Unknown error'}`,\n        ERROR_CODES.DB_CONNECTION_FAILED\n      );\n    }\n  }\n\n  /**\n   * Creates an ioredis client.\n   *\n   * @private\n   * @returns Promise that resolves to ioredis client\n   */\n  private async createIoRedisClient(): Promise<IoRedisClientType> {\n    const DEFAULT_TIMEOUT = 5000;\n    const defaultOptions = {\n      connectTimeout: DEFAULT_TIMEOUT,\n      commandTimeout: DEFAULT_TIMEOUT,\n      enableOfflineQueue: false,\n    } satisfies {\n      connectTimeout: number;\n      commandTimeout: number;\n      enableOfflineQueue: boolean;\n    };\n\n    const Redis = await import('ioredis');\n    const client = new Redis.default(this.config.url, {\n      connectTimeout: this.config.connectTimeout ?? defaultOptions.connectTimeout,\n      commandTimeout: this.config.commandTimeout ?? defaultOptions.commandTimeout,\n      enableOfflineQueue: defaultOptions.enableOfflineQueue,\n    });\n\n    // Wait for connection\n    await new Promise((resolve, reject) => {\n      client.on('ready', resolve);\n      client.on('error', reject);\n    });\n\n    return client;\n  }\n\n  /**\n   * Builds a Redis key with the configured prefix.\n   *\n   * @private\n   * @param key - Base cache key\n   * @returns Redis key with prefix\n   */\n  private buildRedisKey(key: string): string {\n    return `${this.keyPrefix}${key}`;\n  }\n}\n","/**\n * Hash Utilities\n *\n * Common hashing functions for consistent data distribution and rollouts.\n *\n * @fileoverview Hash utility functions\n * @version 1.0.0\n */\n\nimport { MATH_CONSTANTS, FNV_CONSTANTS, HASH_SEED_CONSTANTS } from '@plyaz/config';\n\n/**\n * Optimized string hashing function for consistent distribution.\n * Uses FNV-1a hash algorithm for better distribution and performance.\n * FNV-1a provides excellent avalanche properties and is faster than\n * polynomial rolling hash for short to medium strings.\n *\n * @param str - String to hash\n * @returns Positive hash value\n *\n * @example\n * ```typescript\n * const hash = hashString('user123:AUTH_GOOGLE');\n * const bucket = hash % 100; // 0-99\n * ```\n *\n * @remarks\n * FNV-1a algorithm benefits:\n * - Excellent distribution for hash tables\n * - Fast computation with minimal operations\n * - Good avalanche effect (small input changes create large output changes)\n * - Consistent timing reduces timing attack vulnerabilities\n */\nexport function hashString(str: string): number {\n  // Handle empty string edge case early\n  if (str.length === 0) return 0;\n\n  // Use FNV-1a constants from config\n  let hash: number = FNV_CONSTANTS.FNV_32_OFFSET;\n\n  // Process string with FNV-1a algorithm\n  // Using charCodeAt is faster than alternatives and handles Unicode correctly\n  for (let i = 0; i < str.length; i++) {\n    // XOR with byte value then multiply by prime\n    // This order (XOR first) is what makes it FNV-1a vs FNV-1\n    hash ^= str.charCodeAt(i);\n    hash = Math.imul(hash, FNV_CONSTANTS.FNV_32_PRIME) >>> 0; // Ensure 32-bit unsigned\n  }\n\n  // Ensure positive value using >>> 0 for unsigned 32-bit conversion\n  // This is more efficient than Math.abs() and handles edge cases better\n  return hash >>> 0;\n}\n\n/**\n * Determines if a user should be included in a rollout based on percentage.\n * Uses consistent hashing to ensure the same user always gets the same result.\n *\n * @param identifier - Unique identifier for consistency (e.g., userId, flagKey)\n * @param percentage - Rollout percentage (0-100)\n * @returns true if identifier should be included in rollout\n *\n * @example\n * ```typescript\n * const shouldInclude = isInRollout('user123:AUTH_GOOGLE', 25); // 25% rollout\n * ```\n */\nexport function isInRollout(identifier: string, percentage: number): boolean {\n  if (percentage >= MATH_CONSTANTS.PERCENTAGE_MAX) return true;\n  if (percentage <= 0) return false;\n\n  const hash = hashString(identifier);\n  return hash % MATH_CONSTANTS.PERCENTAGE_MAX < percentage;\n}\n\n/**\n * Creates a consistent rollout identifier for a user and feature.\n *\n * @param featureKey - Feature or flag key\n * @param userId - User identifier (defaults to 'anonymous')\n * @returns Consistent identifier for rollout calculations\n *\n * @example\n * ```typescript\n * const identifier = createRolloutIdentifier('AUTH_GOOGLE', 'user123');\n * const inRollout = isInRollout(identifier, 50);\n * ```\n */\nexport function createRolloutIdentifier(featureKey: string, userId?: string): string {\n  const trimmedUserId = userId?.trim();\n  const effectiveUserId = trimmedUserId && trimmedUserId.length > 0 ? trimmedUserId : 'anonymous';\n  return `${featureKey}:${effectiveUserId}`;\n}\n\n/**\n * Hash-based utilities for consistent data operations.\n */\nexport const HashUtils = {\n  /**\n   * Generates a hash-based bucket for load balancing or distribution.\n   *\n   * @param identifier - Unique identifier\n   * @param bucketCount - Number of buckets (default: 10)\n   * @returns Bucket number (0 to bucketCount-1)\n   */\n  getBucket: (identifier: string, bucketCount: number = 10): number => {\n    return hashString(identifier) % bucketCount;\n  },\n\n  /**\n   * Checks if an identifier falls within a specific bucket range.\n   *\n   * @param identifier - Unique identifier\n   * @param startBucket - Starting bucket (inclusive)\n   * @param endBucket - Ending bucket (inclusive)\n   * @param totalBuckets - Total number of buckets (default: 100)\n   * @returns true if identifier is in the bucket range\n   */\n  isInBucketRange: (\n    identifier: string,\n    startBucket: number,\n    endBucket: number,\n    totalBuckets: number = MATH_CONSTANTS.PERCENTAGE_MAX\n  ): boolean => {\n    const bucket = hashString(identifier) % totalBuckets;\n    return bucket >= startBucket && bucket <= endBucket;\n  },\n\n  /**\n   * Creates a deterministic random seed from a string.\n   * Uses the improved hash function and ensures the seed is within\n   * the safe range for JavaScript's Math.random seeding.\n   *\n   * @param str - String to convert to seed\n   * @returns Deterministic seed value (0 to 2^31-1)\n   */\n  createSeed: (str: string): number => {\n    // Use constant from config for consistency\n    return hashString(str) % HASH_SEED_CONSTANTS.MAX_SAFE_SEED;\n  },\n} as const;\n","/**\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","/* eslint-disable complexity */\n/**\n * Value Utilities\n *\n * Common utility functions for working with different value types.\n *\n * @fileoverview Value manipulation utilities\n * @version 1.0.0\n */\n\nimport { MATH_CONSTANTS } from '@plyaz/config';\n\n/**\n * Determines if a value should be considered 'truthy' for feature flags.\n * More strict than JavaScript's built-in truthiness.\n *\n * @param value - The value to check\n * @returns true if the value is considered enabled/truthy\n *\n * @example\n * ```typescript\n * isTruthy(true)        // true\n * isTruthy('enabled')   // true\n * isTruthy('')          // false\n * isTruthy('false')     // false\n * isTruthy(0)           // false\n * isTruthy(42)          // true\n * isTruthy({})          // false\n * ```\n */\n// Helper function to check if a string is falsy\nfunction isStringFalsy(value: string): boolean {\n  if (value === '') return true;\n  const lower = value.toLowerCase().trim();\n  return ['false', 'no', '0', 'off', 'disabled'].includes(lower);\n}\n\n// Helper function to check if an object is truthy\nfunction isObjectTruthy(value: object): boolean {\n  if (Array.isArray(value)) return value.length > 0;\n  if (value instanceof Map || value instanceof Set) return value.size > 0;\n  if (value.constructor === Object) return Object.keys(value).length > 0;\n  return true; // All other objects (Date, RegExp, etc) are truthy\n}\n\nexport function isTruthy(value: unknown): boolean {\n  if (value === null || value === undefined) return false;\n\n  switch (typeof value) {\n    case 'boolean':\n      return value;\n    case 'string':\n      return !isStringFalsy(value);\n    case 'number':\n      return value !== 0 && !isNaN(value);\n    case 'function':\n    case 'symbol':\n      return true;\n    case 'object':\n      return isObjectTruthy(value);\n    default:\n      return false;\n  }\n}\n\n/**\n * Safely converts a value to a boolean with feature flag semantics.\n *\n * @param value - Value to convert\n * @param defaultValue - Default if conversion fails (default: false)\n * @returns Boolean representation\n *\n * @example\n * ```typescript\n * toBoolean('true')     // true\n * toBoolean('yes')      // true\n * toBoolean('1')        // true\n * toBoolean('false')    // false\n * toBoolean('no')       // false\n * toBoolean('0')        // false\n * ```\n */\n// Helper function to parse string to boolean\nfunction parseStringToBoolean(value: string, defaultValue: boolean): boolean {\n  const lower = value.toLowerCase();\n  if (['true', 'yes', '1', 'on', 'enabled'].includes(lower)) return true;\n  if (['false', 'no', '0', 'off', 'disabled'].includes(lower)) return false;\n  return defaultValue;\n}\n\nexport function toBoolean(value: unknown, defaultValue: boolean = false): boolean {\n  if (value === null || value === undefined) return false;\n\n  switch (typeof value) {\n    case 'boolean':\n      return value;\n    case 'string':\n      return parseStringToBoolean(value, defaultValue);\n    case 'number':\n      return value !== 0 && !isNaN(value);\n    case 'object':\n    case 'function':\n      return true;\n    default:\n      return defaultValue;\n  }\n}\n\n/**\n * Safely converts a value to a number.\n * Handles bigint, string, and number types.\n *\n * @param value - Value to convert (bigint, number, or string)\n * @param defaultValue - Default if conversion fails (default: 0)\n * @returns Number representation\n *\n * @example\n * ```typescript\n * toNumber(42)              // 42\n * toNumber(BigInt(100))     // 100\n * toNumber('123')           // 123\n * toNumber('invalid')       // 0 (default)\n * toNumber('invalid', -1)   // -1 (custom default)\n * ```\n */\nexport function toNumber(\n  value: bigint | number | string | unknown,\n  defaultValue: number = 0\n): number {\n  if (value === null || value === undefined) return defaultValue;\n\n  if (typeof value === 'bigint') return Number(value);\n  if (typeof value === 'number') return isNaN(value) ? defaultValue : value;\n  if (typeof value === 'string') {\n    const parsed = Number.parseFloat(value);\n    return isNaN(parsed) ? defaultValue : parsed;\n  }\n\n  return defaultValue;\n}\n\n/**\n * Value validation and conversion utilities.\n */\nexport const ValueUtils = {\n  /**\n   * Checks if a value is a valid percentage (0-100).\n   *\n   * @param value - Value to check\n   * @returns true if valid percentage\n   */\n  isValidPercentage: (value: unknown): boolean => {\n    if (typeof value !== 'number') return false;\n    return !isNaN(value) && isFinite(value) && value >= 0 && value <= MATH_CONSTANTS.PERCENTAGE_MAX;\n  },\n\n  /**\n   * Clamps a number to a specific range.\n   *\n   * @param value - Value to clamp\n   * @param min - Minimum value\n   * @param max - Maximum value\n   * @returns Clamped value\n   */\n  clamp: (value: number, min: number, max: number): number => {\n    return Math.min(Math.max(value, min), max);\n  },\n\n  /**\n   * Checks if a value is empty (null, undefined, empty string, empty array).\n   *\n   * @param value - Value to check\n   * @returns true if empty\n   */\n  isEmpty: (value: unknown): boolean => {\n    if (value === null || value === undefined) return true;\n    if (typeof value === 'string') return value.trim() === '';\n    if (Array.isArray(value)) return value.length === 0;\n    if (typeof value === 'object') return Object.keys(value).length === 0;\n    return false;\n  },\n\n  /**\n   * Safely gets a nested property from an object.\n   *\n   * @param obj - Object to query\n   * @param path - Dot-separated path (e.g., 'user.profile.name')\n   * @param defaultValue - Default if path doesn't exist\n   * @returns Property value or default\n   */\n  getNestedProperty: (obj: unknown, path: string, defaultValue?: unknown): unknown => {\n    if (!obj || typeof obj !== 'object') return defaultValue;\n\n    const keys = path.split('.');\n    let current: unknown = obj;\n\n    for (const key of keys) {\n      if (current == null || typeof current !== 'object') return defaultValue;\n      current = (current as Record<string, unknown>)[key];\n      if (current === undefined) return defaultValue;\n    }\n\n    return current;\n  },\n} as const;\n","/**\n * Type Guards Utilities\n *\n * Common type guard functions for runtime type checking.\n */\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Generic Type Guards\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Check if value is a non-null object\n */\nexport function isObject(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null;\n}\n\n/**\n * Check if object has a specific property\n */\nexport function hasProperty<K extends string>(obj: unknown, key: K): obj is Record<K, unknown> {\n  return isObject(obj) && key in obj;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Type Guard Utilities Class\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Type guard utilities grouped in a class for namespaced access\n */\nexport const TypeGuardUtils = {\n  isObject,\n  hasProperty,\n} as const;\n","/**\n * Time Utilities\n *\n * Utility functions for time-related operations.\n */\n\nimport { TIME_CONSTANTS } from '@plyaz/config/time';\n\n/**\n * Check if current time is within quiet hours.\n *\n * @param quietHoursStart - Start time in HH:MM format\n * @param quietHoursEnd - End time in HH:MM format\n * @param timezone - Timezone string (default: 'UTC')\n * @returns true if currently in quiet hours\n *\n * @example\n * ```typescript\n * // Check if 22:00 - 08:00 quiet hours are active\n * const inQuietHours = isInQuietHours('22:00', '08:00', 'America/New_York');\n * ```\n */\nexport function isInQuietHours(\n  quietHoursStart: string | null | undefined,\n  quietHoursEnd: string | null | undefined,\n  timezone: string = 'UTC'\n): boolean {\n  if (!quietHoursStart || !quietHoursEnd) return false;\n\n  try {\n    const now = new Date();\n    const formatter = new Intl.DateTimeFormat('en-US', {\n      timeZone: timezone,\n      hour: '2-digit',\n      minute: '2-digit',\n      hour12: false,\n    });\n    const parts = formatter.formatToParts(now);\n    const hour = Number.parseInt(parts.find(p => p.type === 'hour')?.value ?? '0', 10);\n    const minute = Number.parseInt(parts.find(p => p.type === 'minute')?.value ?? '0', 10);\n    const currentMinutes = hour * TIME_CONSTANTS.MINUTES_PER_HOUR + minute;\n\n    const [startHour, startMinute] = quietHoursStart.split(':').map(Number);\n    const [endHour, endMinute] = quietHoursEnd.split(':').map(Number);\n    const startMinutes = startHour * TIME_CONSTANTS.MINUTES_PER_HOUR + startMinute;\n    const endMinutes = endHour * TIME_CONSTANTS.MINUTES_PER_HOUR + endMinute;\n\n    // Handle overnight quiet hours (e.g., 22:00 - 08:00)\n    if (startMinutes > endMinutes) {\n      return currentMinutes >= startMinutes || currentMinutes < endMinutes;\n    }\n    return currentMinutes >= startMinutes && currentMinutes < endMinutes;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Check if a campaign is expired based on start date and duration\n */\nexport function isCampaignExpired(\n  startDate: Date | undefined,\n  duration: number | undefined\n): boolean {\n  if (!startDate || !duration) return false;\n  const endDate = new Date(startDate.getTime() + duration * TIME_CONSTANTS.DAY);\n  return new Date() > endDate;\n}\n\n/**\n * Calculate remaining days for a campaign\n */\nexport function getCampaignDaysRemaining(\n  startDate: Date | undefined,\n  duration: number | undefined\n): number {\n  if (!startDate || !duration) return 0;\n  const endDate = new Date(startDate.getTime() + duration * TIME_CONSTANTS.DAY);\n  const now = new Date();\n  const diffTime = endDate.getTime() - now.getTime();\n  return Math.max(0, Math.ceil(diffTime / TIME_CONSTANTS.DAY));\n}\n\n/** Time utilities namespace */\nexport const TimeUtils = {\n  isInQuietHours,\n  isCampaignExpired,\n  getCampaignDaysRemaining,\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 * Base Domain Service\n *\n * Abstract base class for all domain services in @plyaz/core.\n * Follows the same pattern as BaseAdapter in @plyaz/notifications.\n *\n * Provides:\n * - API client initialization via constructor config\n * - Automatic mapper/validator instantiation\n * - Service enabled/disabled state management\n * - Default values handling\n * - Runtime context detection\n * - Lazy logger initialization\n *\n * Subclasses must implement:\n * - isAvailable() - Check if service is configured and ready\n * - dispose() - Cleanup resources\n *\n * @example\n * ```typescript\n * interface MyServiceConfig extends BaseDomainServiceConfig {\n *   apiBasePath?: string;\n * }\n *\n * class MyDomainService extends BaseDomainService<\n *   MyServiceConfig,\n *   MyMapper,\n *   MyValidator\n * > {\n *   constructor(config: MyServiceConfig) {\n *     super({\n *       serviceName: 'MyDomainService',\n *       supportedRuntimes: ['universal'],\n *       serviceConfig: config,\n *       apiClientConfig: {\n *         baseURL: config.apiBasePath || '/api', // Use || to treat empty strings as falsy\n *       },\n *       MapperClass: MyMapperClass,\n *       ValidatorClass: MyValidatorClass,\n *     });\n *   }\n *\n *   isAvailable(): boolean {\n *     return this.config.enabled !== false;\n *   }\n *\n *   dispose(): void {\n *     // Cleanup\n *   }\n *\n *   async create(data: unknown): Promise<MyEntity> {\n *     this.assertReady();\n *     const validated = this.validator.validateCreateOrThrow(data);\n *     const dto = this.mapper.toCreateDTO(validated);\n *     const response = await this.apiClient.post('/entities', dto);\n *     return this.mapper.toDomain(response.data);\n *   }\n * }\n *\n * // Usage\n * const service = new MyDomainService({ enabled: true, apiBasePath: '/api/v1' });\n * await service.ensureApiClientInitialized();\n * const entity = await service.create({ name: 'Test' });\n * ```\n */\n\nimport { PackageLogger } from '@plyaz/logger';\nimport { CorePackageError } from '@plyaz/errors';\nimport { ERROR_CODES } from '@plyaz/types/errors';\nimport { Core } from '../../init/CoreInitializer';\nimport type {\n  CoreBaseMapperInstance,\n  CoreBaseValidatorInstance,\n  CoreServiceRuntime,\n} from '@plyaz/types/core';\nimport type { FeatureFlagValue } from '@plyaz/types/features';\nimport type { ApiClientOptions } from '@plyaz/types/api';\nimport { setDefaultApiClient } from '@plyaz/api/frontend';\nimport { ApiClientService } from '../../services/ApiClientService';\n// Import types we need locally\nimport type {\n  CoreBaseDomainServiceConfig,\n  CoreMapperClass,\n  CoreValidatorClass,\n  CoreBaseServiceConfig,\n  CoreCacheManagerInstance,\n} from '@plyaz/types/core';\nimport type { DatabaseServiceInterface } from '@plyaz/types/db';\nimport type { ObservabilityAdapter, Span } from '@plyaz/types/observability';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * API client type (from @plyaz/core ApiClientService)\n */\nexport type ApiClient = Awaited<ReturnType<typeof ApiClientService.createStandaloneClient>>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Abstract Base Class\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Abstract base class for domain services\n *\n * Uses generics for strong typing:\n * - TConfig: Service configuration type\n * - TMapper: Mapper instance type\n * - TValidator: Validator instance type\n *\n * Subclasses use the super({...}) pattern:\n * ```typescript\n * class MyService extends BaseDomainService<MyConfig, MyMapper, MyValidator> {\n *   constructor(config: MyConfig) {\n *     super({\n *       serviceName: 'MyService',\n *       supportedRuntimes: ['universal'],\n *       serviceConfig: config,\n *       apiClientConfig: { baseURL: '/api' },\n *       MapperClass: MyMapperClass,\n *       ValidatorClass: MyValidatorClass,\n *     });\n *   }\n * }\n * ```\n */\nexport abstract class BaseDomainService<\n  TConfig extends CoreBaseDomainServiceConfig = CoreBaseDomainServiceConfig,\n  TMapper extends CoreBaseMapperInstance<unknown, unknown> = CoreBaseMapperInstance<\n    unknown,\n    unknown\n  >,\n  TValidator extends CoreBaseValidatorInstance = CoreBaseValidatorInstance,\n> {\n  // ─────────────────────────────────────────────────────────────────────────\n  // Instance Properties\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /** Service name for logging and error messages */\n  readonly serviceName: string;\n\n  /** Supported runtimes for this service */\n  readonly supportedRuntimes: readonly CoreServiceRuntime[];\n\n  /** Service configuration */\n  protected readonly config: TConfig;\n\n  /** Logger instance */\n  protected readonly logger: PackageLogger;\n\n  /** Initialization state */\n  protected _initialized: boolean = false;\n\n  // API Client (optional)\n  private _apiClient: ApiClient | null = null;\n  private _clientInitPromise: Promise<void> | null = null;\n  private readonly _apiClientConfig?: ApiClientOptions;\n  private readonly _setAsDefaultClient: boolean;\n\n  // Injected Services (cache, db, api, observability)\n  protected readonly cacheManager?: CoreCacheManagerInstance;\n  protected readonly dbService?: DatabaseServiceInterface;\n  protected readonly apiService?: ApiClient; // Injected ApiClient (different from _apiClient)\n  protected readonly observabilityService?: ObservabilityAdapter;\n\n  /**\n   * Cache prefix for namespacing cache keys (e.g., 'example', 'user', 'product').\n   * Subclasses can override by defining as a property.\n   * If not overridden, defaults to serviceName.toLowerCase().\n   *\n   * @example\n   * ```typescript\n   * protected cachePrefix = 'my-service'; // Override default\n   * ```\n   */\n  protected cachePrefix: string = '';\n\n  // Mapper and Validator instances (lazy)\n  private _mapperInstance: TMapper | null = null;\n  private _validatorInstance: TValidator | null = null;\n  private readonly _MapperClass?: CoreMapperClass<TMapper>;\n  private readonly _ValidatorClass?: CoreValidatorClass<TValidator>;\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Constructor\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Create a new domain service instance\n   *\n   * @param config - Base service configuration (passed via super({...}))\n   */\n  // eslint-disable-next-line complexity\n  constructor(config: CoreBaseServiceConfig<TConfig, TMapper, TValidator>) {\n    this.serviceName = config.serviceName;\n    this.supportedRuntimes = config.supportedRuntimes;\n    this.config = config.serviceConfig;\n    this._setAsDefaultClient = config.setAsDefaultClient ?? false;\n\n    // Initialize logger with Core's configured transport\n    this.logger = new PackageLogger({\n      packageName: 'core',\n      service: this.serviceName,\n      transport: Core.loggerTransport,\n    });\n\n    // Store API client config for lazy initialization\n    this._apiClientConfig = config.apiClientConfig;\n\n    // Store injected services (cache, db, api, observability)\n    // Cast from unknown (types package uses unknown to avoid circular deps)\n    this.cacheManager = config.injected?.cache as CoreCacheManagerInstance | undefined;\n    this.dbService = config.injected?.db as DatabaseServiceInterface | undefined;\n    this.apiService = config.injected?.api as ApiClient | undefined;\n    // observabilityOverride takes precedence over injected observability\n    this.observabilityService = (config.serviceConfig.observabilityOverride ??\n      config.injected?.observability) as ObservabilityAdapter | undefined;\n\n    // Initialize cache prefix to serviceName if not set by subclass\n    // Subclasses can override by setting in their constructor after super()\n    if (!this.cachePrefix) {\n      this.cachePrefix = this.serviceName.toLowerCase();\n    }\n\n    // Store mapper/validator classes for lazy initialization\n    this._MapperClass = config.mapperClass;\n    this._ValidatorClass = config.validatorClass;\n\n    // Initialize API client if config provided\n    if (this._apiClientConfig) {\n      this.initializeApiClient();\n    }\n\n    this.logger.debug(`${this.serviceName} created`, {\n      supportedRuntimes: this.supportedRuntimes,\n      hasApiClient: !!this._apiClientConfig,\n      injected: {\n        cache: !!this.cacheManager,\n        db: !!this.dbService,\n        api: !!this.apiService,\n        observability: !!this.observabilityService,\n      },\n      cachePrefix: this.cachePrefix,\n      hasMapper: !!this._MapperClass,\n      hasValidator: !!this._ValidatorClass,\n    });\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Getters\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Check if the service is enabled\n   * Service is enabled by default unless explicitly disabled\n   */\n  get isServiceEnabled(): boolean {\n    return this.config?.enabled !== false;\n  }\n\n  /**\n   * Check if the service is initialized (API client ready)\n   */\n  get isInitialized(): boolean {\n    return this._initialized;\n  }\n\n  /**\n   * Check if mapper is available\n   */\n  get hasMapper(): boolean {\n    return !!this._MapperClass;\n  }\n\n  /**\n   * Check if validator is available\n   */\n  get hasValidator(): boolean {\n    return !!this._ValidatorClass;\n  }\n\n  /**\n   * Get the mapper instance (lazy initialization)\n   * @throws CorePackageError if MapperClass was not provided\n   */\n  get mapper(): TMapper {\n    if (!this._mapperInstance && this._MapperClass) {\n      this._mapperInstance = new this._MapperClass();\n    }\n    if (!this._mapperInstance) {\n      throw new CorePackageError(\n        `${this.serviceName} does not have a Mapper configured`,\n        ERROR_CODES.FEATURE_NOT_SUPPORTED\n      );\n    }\n    return this._mapperInstance;\n  }\n\n  /**\n   * Set the mapper instance\n   * Allows subclasses to override mapper initialization\n   */\n  set mapper(value: TMapper) {\n    this._mapperInstance = value;\n  }\n\n  /**\n   * Get the validator instance (lazy initialization)\n   * @throws CorePackageError if ValidatorClass was not provided\n   */\n  get validator(): TValidator {\n    if (!this._validatorInstance && this._ValidatorClass) {\n      this._validatorInstance = new this._ValidatorClass();\n    }\n    if (!this._validatorInstance) {\n      throw new CorePackageError(\n        `${this.serviceName} does not have a Validator configured`,\n        ERROR_CODES.FEATURE_NOT_SUPPORTED\n      );\n    }\n    return this._validatorInstance;\n  }\n\n  /**\n   * Set the validator instance\n   * Allows subclasses to override validator initialization\n   */\n  set validator(value: TValidator) {\n    this._validatorInstance = value;\n  }\n\n  /**\n   * Get the API client (after initialization)\n   * @throws CorePackageError if API client was not configured or not initialized\n   */\n  get apiClient(): ApiClient {\n    if (!this._apiClient) {\n      throw new CorePackageError(\n        `${this.serviceName} API client not initialized. Call ensureApiClientInitialized() first.`,\n        ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n      );\n    }\n    return this._apiClient;\n  }\n\n  /**\n   * Get the observability adapter (if injected)\n   * Returns undefined if observability is not enabled\n   */\n  get observability(): ObservabilityAdapter | undefined {\n    return this.observabilityService;\n  }\n\n  /**\n   * Check if observability is available\n   */\n  get hasObservability(): boolean {\n    return !!this.observabilityService;\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // API Client Initialization\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Initialize API client asynchronously\n   * Called from constructor if apiClientConfig is provided\n   *\n   * Uses ApiClientService.createStandaloneClient() which includes:\n   * - Automatic error handling (single errors and arrays)\n   * - Event emission to CORE_EVENTS.SYSTEM.ERROR and CORE_EVENTS.API.REQUEST_ERROR\n   * - Serialization to unified SerializedError format\n   */\n  private initializeApiClient(): void {\n    if (this._clientInitPromise || !this._apiClientConfig) {\n      return;\n    }\n\n    this._clientInitPromise = (async () => {\n      try {\n        // Use ApiClientService.createStandaloneClient() which includes Core error handling\n        // This handles: single errors, error arrays, event emission, serialization\n        this._apiClient = await ApiClientService.createStandaloneClient(this._apiClientConfig!);\n\n        // Set as default client for all fetchers if configured\n        if (this._setAsDefaultClient) {\n          setDefaultApiClient(this._apiClient);\n        }\n\n        this._initialized = true;\n\n        this.logger.debug('API client initialized', {\n          service: this.serviceName,\n          baseURL: this._apiClientConfig!.baseURL,\n        });\n      } catch (error) {\n        this.logger.error('Failed to initialize API client', {\n          service: this.serviceName,\n          error: error instanceof Error ? error.message : String(error),\n        });\n        throw error;\n      }\n    })();\n  }\n\n  /**\n   * Ensure API client is initialized before use.\n   * Call this from methods that need the API client.\n   * Also called by ServiceRegistry.create() for services with async initialization.\n   */\n  async ensureApiClientInitialized(): Promise<void> {\n    if (this._clientInitPromise) {\n      await this._clientInitPromise;\n    }\n    if (this._apiClientConfig && !this._apiClient) {\n      throw new CorePackageError(\n        `${this.serviceName} API client not initialized`,\n        ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n      );\n    }\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Configuration Management\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Get current configuration (immutable copy)\n   */\n  getConfig(): Readonly<TConfig> {\n    return { ...this.config };\n  }\n\n  /**\n   * Get a default value\n   * @param key - The key to get the default for\n   */\n  getDefault<T = FeatureFlagValue>(key: string): T | undefined {\n    return this.config?.defaults?.[key] as T | undefined;\n  }\n\n  /**\n   * Set a default value (mutates config.defaults)\n   * @param key - The key to set the default for\n   * @param value - The default value\n   */\n  setDefault(key: string, value: FeatureFlagValue): void {\n    if (!this.config.defaults) {\n      (this.config as CoreBaseDomainServiceConfig).defaults = {};\n    }\n    this.config.defaults![key] = value;\n  }\n\n  /**\n   * Set multiple default values\n   * @param defaults - Record of default values\n   */\n  setDefaults(defaults: Record<string, FeatureFlagValue>): void {\n    if (!this.config.defaults) {\n      (this.config as CoreBaseDomainServiceConfig).defaults = {};\n    }\n    Object.assign(this.config.defaults!, defaults);\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Assertions\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Assert that the service is available (configured and ready)\n   * @throws CorePackageError if not available\n   */\n  protected assertAvailable(): void {\n    if (!this.isAvailable()) {\n      throw new CorePackageError(\n        `${this.serviceName} is not available. Check configuration.`,\n        ERROR_CODES.CLIENT_INITIALIZATION_FAILED\n      );\n    }\n  }\n\n  /**\n   * Assert that the service is enabled\n   * @throws CorePackageError if disabled\n   */\n  protected assertEnabled(): void {\n    if (!this.isServiceEnabled) {\n      throw new CorePackageError(\n        `${this.serviceName} is disabled. Set enabled: true in configuration.`,\n        ERROR_CODES.FEATURE_NOT_SUPPORTED\n      );\n    }\n  }\n\n  /**\n   * Assert that the service is ready (enabled AND available)\n   * @throws CorePackageError if not ready\n   */\n  protected assertReady(): void {\n    this.assertEnabled();\n    this.assertAvailable();\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Abstract Methods - Must be implemented by subclasses\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Check if service is available (configured and ready)\n   * Subclasses must implement this to check credentials, config, etc.\n   *\n   * @returns true if available\n   */\n  abstract isAvailable(): boolean;\n\n  /**\n   * Dispose/cleanup the service\n   * Subclasses must implement to release resources\n   */\n  abstract dispose(): void;\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Helper Methods\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Log debug message with service context\n   */\n  protected logDebug(message: string, data?: Record<string, unknown>): void {\n    this.logger.debug(message, {\n      service: this.serviceName,\n      ...data,\n    });\n  }\n\n  /**\n   * Log info message with service context\n   */\n  protected logInfo(message: string, data?: Record<string, unknown>): void {\n    this.logger.info(message, {\n      service: this.serviceName,\n      ...data,\n    });\n  }\n\n  /**\n   * Log warning message with service context\n   */\n  protected logWarn(message: string, data?: Record<string, unknown>): void {\n    this.logger.warn(message, {\n      service: this.serviceName,\n      ...data,\n    });\n  }\n\n  /**\n   * Log error message with service context\n   */\n  protected logError(message: string, data?: Record<string, unknown>): void {\n    this.logger.error(message, {\n      service: this.serviceName,\n      ...data,\n    });\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Observability Helpers\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Record a metric (no-op if observability not available)\n   */\n  protected async recordMetric(\n    name: string,\n    value: number,\n    tags?: Record<string, string>\n  ): Promise<void> {\n    if (!this.observabilityService) return;\n    await this.observabilityService.recordHistogram(name, value, {\n      service: this.serviceName,\n      ...tags,\n    });\n  }\n\n  /**\n   * Increment a counter (no-op if observability not available)\n   */\n  protected async incrementCounter(\n    name: string,\n    value = 1,\n    tags?: Record<string, string>\n  ): Promise<void> {\n    if (!this.observabilityService) return;\n    await this.observabilityService.incrementCounter(name, value, {\n      service: this.serviceName,\n      ...tags,\n    });\n  }\n\n  /**\n   * Start a span for tracing (returns noop span if observability not available)\n   */\n  protected startSpan(name: string, attributes?: Record<string, string | number | boolean>): Span {\n    if (!this.observabilityService) {\n      // Return a noop span\n      return {\n        context: { traceId: '', spanId: '' },\n        setAttribute: () => {},\n        setAttributes: () => {},\n        addEvent: () => {},\n        setStatus: () => {},\n        end: () => {},\n        recordException: () => {},\n      };\n    }\n    return this.observabilityService.startSpan({\n      name,\n      attributes: {\n        'service.name': this.serviceName,\n        ...attributes,\n      },\n    });\n  }\n\n  /**\n   * Execute a function within a traced span\n   */\n  protected async withSpan<T>(\n    name: string,\n    fn: (span: Span) => Promise<T>,\n    attributes?: Record<string, string | number | boolean>\n  ): Promise<T> {\n    if (!this.observabilityService) {\n      // Execute without tracing\n      const noopSpan = this.startSpan(name);\n      return fn(noopSpan);\n    }\n    return this.observabilityService.withSpan(\n      {\n        name,\n        attributes: {\n          'service.name': this.serviceName,\n          ...attributes,\n        },\n      },\n      fn\n    );\n  }\n}\n","/**\n * Base Frontend Domain Service\n *\n * Extends BaseDomainService with common frontend patterns:\n * - **Primary/Read Store Pattern**: Services have ONE primary store (mutate) + multiple read stores (read-only)\n * - **Automatic Store Injection**: Stores injected by ServiceRegistry from root store\n * - **Automatic Loading State**: Managed via setStoresLoading() on primary store\n * - **Generic CRUD Operations**: With fetchers from @plyaz/api\n * - **Event Emission**: Typed event payloads via CoreEventManager\n * - **Automatic DTO Mapping**: Via mapper classes\n *\n * ## Store Architecture (NEW)\n *\n * ### Primary Store (Mutate)\n * - Service has ONE primary store defined by `store: 'campaigns'` config\n * - Can call: setData(), updateData(), setLoading()\n * - syncToStores() syncs ONLY to primary store\n * - Access via: this.primaryStore\n *\n * ### Read Stores (Read-Only)\n * - Service can read from multiple stores: `readStores: ['users', 'error', 'featureFlags']`\n * - Can read state but should NOT call mutation methods\n * - Used for cross-domain data access (e.g., campaign service reading user data)\n * - Access via: this.getReadStore('users')\n *\n * ### All Stores from Root Store\n * - All stores (domain + global) are slices of ONE root Zustand store\n * - Automatically reactive - changes propagate to subscribers (React components)\n * - Error/featureFlags are built-in, domain stores added dynamically\n *\n * Frontend domain services should extend this class instead of BaseDomainService\n * to get automatic store integration and CRUD capabilities.\n *\n * All generic type parameters for full type safety:\n * - TConfig: Service configuration type\n * - TStore: Store interface type\n * - TData: Data type for store sync\n * - TEntity: Domain entity type\n * - TResponseDTO: API response DTO type (snake_case)\n * - TCreateDTO: Create request DTO type\n * - TPatchDTO: Patch request DTO type (partial update)\n * - TQueryDTO: Query/filter DTO type for fetchAll\n * - TStoreState: Serializable store state type\n * - TMapper: Mapper instance type\n * - TValidator: Optional validator type\n *\n * @example\n * ```typescript\n * class MyFrontendService extends BaseFrontendDomainService<\n *   MyConfig,\n *   MyStore,\n *   MyStoreData,\n *   MyEntity,\n *   MyResponseDTO,\n *   CreateMyDTO,\n *   PatchMyDTO,\n *   QueryMyDTO,\n *   MyStoreState,\n *   MyMapper\n * > {\n *   protected eventPrefix = 'myDomain';\n *   protected mapper: MyMapper;\n *\n *   constructor(config: MyConfig) {\n *     super({ ... mapperClass: MyMapperClass });\n *     this.mapper = new MyMapperClass();\n *   }\n *\n *   // All CRUD methods inherited!\n *   // - fetchAll(query?)\n *   // - fetchById(id)\n *   // - create(data)\n *   // - update(id, data)\n *   // - delete(id)\n * }\n * ```\n */\n\nimport { BaseDomainService } from './BaseDomainService';\nimport { STORE_KEYS } from '@plyaz/store';\nimport { PackageLogger } from '@plyaz/logger';\nimport { CoreEventManager } from '../../events/CoreEventManager';\nimport { BaseError, CorePackageError } from '@plyaz/errors';\nimport { ERROR_CODES } from '@plyaz/types/errors';\n\nconst logger = new PackageLogger({ packageName: 'core', service: 'BaseFrontendDomainService' });\nimport { OBSERVABILITY_METRICS } from '@plyaz/types/observability';\nimport { Core } from '../../init/CoreInitializer';\nimport type {\n  RootStoreSlice,\n  StreamStoreSlice,\n  StreamMessageHandler,\n  StreamMessageFilter,\n} from '@plyaz/types/store';\nimport type {\n  StreamChannel,\n  CoreStreamStoreGetter,\n  CoreStreamHandlerIds,\n  CoreStreamHandlerDeclaration,\n  CoreEntityCreatingPayload,\n  CoreEntityCreatedPayload,\n  CoreEntityPatchingPayload,\n  CoreEntityPatchedPayload,\n  CoreEntityDeletingPayload,\n  CoreEntityDeletedPayload,\n  CoreEntityErrorPayload,\n  CoreEntityCompletePayload,\n} from '@plyaz/types/core';\n\n// Import types for local use\nimport type {\n  CoreBaseFrontendStore,\n  CoreBaseFrontendServiceConfig,\n  CoreBaseFrontendServiceConstructorConfig,\n  CoreBaseMapperInstance,\n  CoreBaseValidatorInstance,\n  CoreStoreHandlers,\n  CoreOptimisticUpdateConfig,\n} from '@plyaz/types/core';\nimport { HTTP_STATUS } from '@plyaz/types';\nimport type {\n  UploadFileRequest,\n  UploadFileResponse,\n  UploadFilesRequest,\n  UploadFilesResponse,\n  GenerateDocumentRequest,\n  GenerateDocumentResponse,\n  ServiceOptions,\n} from '@plyaz/types/api';\nimport {\n  uploadFile as uploadFileFetcher,\n  uploadFiles as uploadFilesFetcher,\n  generateDocument as generateDocumentFetcher,\n} from '@plyaz/api';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Constants\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Default polling interval in milliseconds (30 seconds) */\nconst DEFAULT_POLLING_INTERVAL_MS = 30000;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Base Event Payload Type\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Base type for frontend event payloads\n * All frontend event payloads should extend this\n */\ntype BaseFrontendEventPayload =\n  | CoreEntityCreatingPayload<unknown>\n  | CoreEntityCreatedPayload<unknown, unknown>\n  | CoreEntityPatchingPayload<unknown>\n  | CoreEntityPatchedPayload<unknown, unknown>\n  | CoreEntityDeletingPayload\n  | CoreEntityDeletedPayload\n  | CoreEntityErrorPayload\n  | CoreEntityCompletePayload\n  | Record<string, unknown>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Abstract Base Class\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Abstract base class for frontend domain services with store integration and CRUD operations.\n *\n * Extends BaseDomainService with:\n * - Multi-store connection management\n * - Automatic sync to connected stores\n * - Loading/error state propagation\n * - Generic CRUD operations (fetchAll, fetchById, create, update, delete)\n * - Event emission with typed payloads\n * - Automatic DTO mapping via mapper\n *\n * @typeParam TConfig - Service configuration type\n * @typeParam TStore - Store interface type\n * @typeParam TData - Data type for store sync\n * @typeParam TEntity - Domain entity type\n * @typeParam TResponseDTO - API response DTO type\n * @typeParam TCreateDTO - Create request DTO type\n * @typeParam TPatchDTO - Patch request DTO type\n * @typeParam TQueryDTO - Query/filter DTO type for fetchAll (default: unknown)\n * @typeParam TStoreState - Serializable store state type\n * @typeParam TMapper - Mapper instance type\n * @typeParam TValidator - Optional validator type\n * @typeParam TDeleteResult - Delete operation result type (default: void for backwards compatibility)\n */\nexport abstract class BaseFrontendDomainService<\n  TConfig extends CoreBaseFrontendServiceConfig<TData, TStore>,\n  TStore extends CoreBaseFrontendStore<TData>,\n  TData = Record<string, unknown>,\n  TEntity = unknown,\n  TResponseDTO = unknown,\n  TCreateDTO = unknown,\n  TPatchDTO extends Partial<unknown> = Partial<TCreateDTO>,\n  TQueryDTO = unknown,\n  TStoreState = TEntity,\n  TMapper extends CoreBaseMapperInstance<\n    TEntity,\n    TResponseDTO,\n    TCreateDTO,\n    TCreateDTO,\n    TPatchDTO,\n    unknown,\n    TStoreState\n  > = CoreBaseMapperInstance<\n    TEntity,\n    TResponseDTO,\n    TCreateDTO,\n    TCreateDTO,\n    TPatchDTO,\n    unknown,\n    TStoreState\n  >,\n  TValidator extends CoreBaseValidatorInstance = CoreBaseValidatorInstance,\n  TDeleteResult = void,\n> extends BaseDomainService<TConfig, TMapper, TValidator> {\n  // ─────────────────────────────────────────────────────────────────────────\n  // Required Properties (Subclasses must provide)\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Event prefix for all events emitted by this service\n   * E.g., 'example' → emits 'example:creating', 'example:created', etc.\n   *\n   * Required by subclasses\n   */\n  protected abstract eventPrefix: string;\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Store Properties\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /** Primary store - the main store this service can mutate */\n  private _primaryStore: TStore | null = null;\n\n  /**\n   * Primary store key - resolved from (in order of precedence):\n   * 1. serviceConfig.store (explicit config)\n   * 2. Static defaultStoreKey on class\n   * 3. undefined (no store integration)\n   *\n   * Override in subclass or set via config.\n   * @example protected primaryStoreKey = STORE_KEYS.EXAMPLE;\n   */\n  protected primaryStoreKey?: string;\n\n  /** Read-only stores - can read but not mutate */\n  private readonly _readStores = new Map<string, unknown>();\n\n  /**\n   * Read-only store keys - always includes error and featureFlags by default\n   * Override in subclass to add additional read stores\n   * @example protected readStoreKeys = [...super.readStoreKeys, STORE_KEYS.CAMPAIGNS];\n   */\n  protected readStoreKeys: string[] = [STORE_KEYS.ERROR, STORE_KEYS.FEATURE_FLAGS];\n\n  /** Store handlers for custom store synchronization */\n  protected readonly storeHandlers?: CoreStoreHandlers<TData, TStore>;\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Optimistic Update Properties\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /** Optimistic update configuration */\n  protected readonly optimisticConfig?: CoreOptimisticUpdateConfig;\n\n  /** Stack of previous states for rollback (LIFO) */\n  private readonly _rollbackStack: Array<{\n    operation: string;\n    previousState: TData | null;\n    timestamp: number;\n  }> = [];\n\n  /** Maximum rollback stack size */\n  private readonly _maxRollbackStackSize = 10;\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Polling Properties\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /** Polling timer reference */\n  private _pollingTimer: ReturnType<typeof setInterval> | null = null;\n\n  /**\n   * Registered stream handler IDs for auto-cleanup on dispose.\n   * IDs are added by registerStreamHandler() and removed on dispose().\n   */\n  private readonly _registeredStreamHandlerIds = new Set<string>();\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Static Stream Handler Properties\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Flag to track if static stream handlers are registered.\n   * Subclasses should set this in their registerStreamHandlers() method.\n   */\n  protected static _streamHandlersRegistered = false;\n\n  /**\n   * Stream handler IDs for auto-cleanup.\n   * Subclasses should define their handler IDs as a readonly object.\n   *\n   * @example\n   * ```typescript\n   * protected static readonly STREAM_HANDLER_IDS: CoreStreamHandlerIds<\n   *   'UPLOAD_PROGRESS' | 'DOWNLOAD_PROGRESS'\n   * > = {\n   *   UPLOAD_PROGRESS: 'files:upload-progress',\n   *   DOWNLOAD_PROGRESS: 'files:download-progress',\n   * } as const;\n   * ```\n   */\n  protected static readonly STREAM_HANDLER_IDS: CoreStreamHandlerIds<string> = {};\n\n  /**\n   * Declarative stream handlers configuration.\n   * Define handlers as an array - they will be auto-registered by registerStreamHandlersFromConfig().\n   *\n   * Each handler config includes:\n   * - id: Unique handler ID (should match a key in STREAM_HANDLER_IDS)\n   * - channels: Channels to listen to\n   * - events: Event types to listen to\n   * - priority: Handler priority (higher = called first)\n   * - handler: Handler function receiving typed message and store getter\n   *\n   * @example\n   * ```typescript\n   * protected static readonly STREAM_HANDLERS: CoreStreamHandlerDeclaration[] = [\n   *   {\n   *     id: 'files:upload-progress',\n   *     channels: ['uploads', 'upload:'],\n   *     events: ['progress', 'upload:progress'],\n   *     priority: 100,\n   *     handler: (message, getStore) => {\n   *       const filesStore = getStore()?.files;\n   *       filesStore?.setUploadProgress(message.data.fileId, { ... });\n   *     },\n   *   },\n   * ];\n   * ```\n   */\n  protected static readonly STREAM_HANDLERS: CoreStreamHandlerDeclaration[] = [];\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Constructor\n  // ─────────────────────────────────────────────────────────────────────────\n\n  // eslint-disable-next-line complexity\n  constructor(\n    config: CoreBaseFrontendServiceConstructorConfig<TConfig, TStore, TData, TMapper, TValidator>\n  ) {\n    // Auto-construct apiClientConfig from serviceConfig.apiBasePath if not provided\n    // This reduces boilerplate in child services - they only need to set apiBasePath\n    const resolvedConfig = BaseFrontendDomainService.resolveApiClientConfig(config);\n\n    super(resolvedConfig);\n\n    this.storeHandlers = config.serviceConfig.storeHandlers;\n    this.optimisticConfig = config.serviceConfig.optimisticUpdates;\n\n    // Initialize mapper if class provided\n    if (config.mapperClass) {\n      this.mapper = new config.mapperClass() as TMapper;\n    }\n\n    const serviceConfig = config.serviceConfig;\n\n    // Resolve primary store key with precedence:\n    // 1. Explicit config (serviceConfig.store) - allows override\n    // 2. Static primaryStoreKey on child class\n    if (serviceConfig.store !== undefined) {\n      this.primaryStoreKey = serviceConfig.store;\n    } else {\n      // Use static primaryStoreKey from child class\n      const staticKey = (this.constructor as { primaryStoreKey?: string }).primaryStoreKey;\n      if (staticKey) {\n        this.primaryStoreKey = staticKey;\n      }\n    }\n\n    // Merge readStores from config with base defaults\n    if (serviceConfig.readStores !== undefined) {\n      // Merge config readStores with base defaults (error, featureFlags)\n      // Use Set to avoid duplicates\n      this.readStoreKeys = Array.from(\n        new Set([\n          ...this.readStoreKeys, // Base defaults: error, featureFlags\n          ...serviceConfig.readStores, // Additional from config\n        ])\n      );\n    }\n\n    // Get injected stores from ServiceRegistry\n    const injectedStores = config.injected?.stores;\n\n    // Connect primary store (can mutate)\n    if (this.primaryStoreKey) {\n      const primaryStore = injectedStores?.[this.primaryStoreKey] as TStore;\n      if (primaryStore) {\n        this._primaryStore = primaryStore;\n        this.logDebug(`Connected primary store: '${this.primaryStoreKey}'`);\n      } else {\n        // Only warn on client - on server (SSR), stores are expected to be unavailable\n        // This is normal during SSR since Zustand stores only exist on the client\n        const isServer = typeof globalThis.window === 'undefined';\n        if (!isServer) {\n          // Warn instead of throw - store integration is optional for services\n          // Services can still work without stores, they just can't use store mutations\n          this.logWarn(\n            `Primary store '${this.primaryStoreKey}' not found. ` +\n              `Store mutations (setData/updateData/setLoading) will be disabled. ` +\n              `Configure stores in PlyazProvider to enable store integration.`\n          );\n        }\n      }\n    }\n\n    // Connect read-only stores (can only read)\n    for (const key of this.readStoreKeys) {\n      const readStore = injectedStores?.[key];\n      if (readStore) {\n        this._readStores.set(key, readStore);\n        this.logDebug(`Connected read-only store: '${key}'`);\n      } else {\n        this.logDebug(`Read-only store '${key}' not found in injected stores`);\n      }\n    }\n\n    // Log warning if no primary store configured\n    if (!this.primaryStoreKey) {\n      this.logWarn(\n        `No primary store configured. ` +\n          `Set 'store' in config to enable store mutations (setData/updateData/setLoading).`\n      );\n    }\n\n    this.logDebug('Frontend service initialized', {\n      primaryStore: this.primaryStoreKey,\n      readStores: this.readStoreKeys,\n    });\n  }\n\n  /**\n   * Auto-resolve apiClientConfig from serviceConfig.apiBasePath if not explicitly provided.\n   * This reduces boilerplate in child services - they only need to set apiBasePath in config.\n   *\n   * Priority:\n   * 1. Explicit apiClientConfig.baseURL (full control)\n   * 2. serviceConfig.apiBasePath (auto-constructed, merged with injected options)\n   * 3. undefined (no API client)\n   *\n   * When auto-constructing, merges injected API options (headers, timeout, etc.)\n   * with the service's apiBasePath as baseURL.\n   */\n  protected static resolveApiClientConfig<\n    T extends {\n      serviceConfig: { apiBasePath?: string };\n      apiClientConfig?: { baseURL?: string };\n      injected?: { api?: unknown };\n    },\n  >(config: T): T {\n    // If apiClientConfig with baseURL is already provided, use it as-is\n    if (config.apiClientConfig?.baseURL) {\n      return config;\n    }\n\n    // If apiBasePath is defined in serviceConfig, auto-construct apiClientConfig\n    const apiBasePath = config.serviceConfig.apiBasePath;\n    if (apiBasePath) {\n      // Merge injected API options (headers, timeout, etc.) with service's baseURL\n      const injectedOptions = config.injected?.api\n        ? {} // If using injected API client, don't merge its options here\n        : (config.apiClientConfig ?? {});\n\n      return {\n        ...config,\n        apiClientConfig: {\n          ...injectedOptions,\n          baseURL: apiBasePath, // Service's apiBasePath always takes precedence\n        },\n      };\n    }\n\n    // No apiClientConfig needed\n    return config;\n  }\n\n  /**\n   * Initialize service and wait for API client to be ready.\n   * Call this in child service's static create() method after constructing the instance.\n   *\n   * @param service - The service instance to initialize\n   * @returns The initialized service (same instance, for chaining)\n   *\n   * @example\n   * ```typescript\n   * static async create(config, options): Promise<MyService> {\n   *   const service = new MyService(config, options);\n   *   return this.initializeService(service);\n   * }\n   * ```\n   */\n  protected static async initializeService<\n    T extends { ensureApiClientInitialized(): Promise<void> },\n  >(service: T): Promise<T> {\n    await service.ensureApiClientInitialized();\n    return service;\n  }\n\n  /**\n   * Ensure service is ready for operations.\n   * Checks enabled/available status AND waits for API client initialization.\n   * Call this at the start of all CRUD methods.\n   *\n   * @throws CorePackageError if service is not enabled or available\n   */\n  protected async ensureReady(): Promise<void> {\n    this.assertReady();\n    await this.ensureApiClientInitialized();\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Store Management (Public API)\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Get the number of connected stores (primary + read stores).\n   */\n  get connectedStoreCount(): number {\n    return (this._primaryStore ? 1 : 0) + this._readStores.size;\n  }\n\n  /**\n   * Check if any stores are connected (primary or read).\n   */\n  get hasConnectedStores(): boolean {\n    return !!this._primaryStore || this._readStores.size > 0;\n  }\n\n  /**\n   * Get primary store (protected).\n   * This is the store the service can mutate.\n   */\n  protected get primaryStore(): TStore | null {\n    return this._primaryStore;\n  }\n\n  /**\n   * Get a read-only store by key (protected).\n   * Can read state but should not call mutation methods.\n   *\n   * @param key - Store key (type-safe)\n   * @returns Store slice or undefined (auto-typed based on key)\n   */\n  protected getReadStore<K extends keyof RootStoreSlice>(key: K): RootStoreSlice[K] | undefined {\n    return this._readStores.get(key) as RootStoreSlice[K] | undefined;\n  }\n\n  /**\n   * Get a specific store slice by key (protected).\n   *\n   * **Namespaced Root Store Architecture:**\n   * - All stores are slices merged into ONE Zustand root store\n   * - Each slice is namespaced (e.g., store.example, store.errors)\n   * - This returns the SPECIFIC slice for the given key\n   * - Type-safe: only valid store keys allowed\n   *\n   * **Usage Guidelines:**\n   * - Can mutate stores that are NOT in readStoreKeys\n   * - Should NOT mutate stores in readStoreKeys (errors, featureFlags by default)\n   * - Useful for cross-domain updates (e.g., campaign service updating user stats)\n   *\n   * @param key - Store key (type-safe: 'example' | 'errors' | 'featureFlags')\n   * @returns Specific store slice (fully typed based on key)\n   *\n   * @example\n   * ```typescript\n   * // In CampaignService\n   * protected async afterCreate(id: string, campaign: Campaign) {\n   *   // Update primary store (campaigns)\n   *   this.primaryStore.addItem(campaign);\n   *\n   *   // Check feature flag (read-only) - auto-typed as FeatureFlagStoreSlice\n   *   const flagsSlice = this.getStore('featureFlags');  // ✅ Type-safe!\n   *   if (flagsSlice?.flags?.['update-user-stats']) {\n   *     // Update user store (cross-domain mutation - OK since not read-only)\n   *     const userSlice = this.getStore('users');  // ✅ Auto-typed!\n   *     userSlice?.incrementCampaignCount(campaign.userId);\n   *   }\n   * }\n   * ```\n   */\n  protected getStore<K extends keyof RootStoreSlice>(key: K): RootStoreSlice[K] | undefined {\n    // Returns specific slice from namespaced root store (type-safe)\n    return Core.getDomainStore(key);\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Store Sync (Protected - for subclasses)\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Sync data to primary store only (read stores are NOT updated).\n   * Uses setData (replace) or updateData (merge) based on `replace` parameter.\n   * If custom store handlers are configured, uses those instead of default behavior.\n   *\n   * @param data - Data to sync to primary store\n   * @param replace - If true, calls setData; if false, calls updateData\n   */\n  // eslint-disable-next-line complexity\n  protected syncToStores(data: TData, replace = false): void {\n    if (!this._primaryStore) {\n      this.logDebug('No primary store to sync to');\n      return;\n    }\n\n    // Check if store sync is disabled\n    if (this.storeHandlers?.disabled) {\n      this.logDebug('Store sync disabled via storeHandlers.disabled');\n      return;\n    }\n\n    try {\n      // Priority 1: Use custom handlers if configured\n      if (replace && this.storeHandlers?.setData) {\n        this.storeHandlers.setData(this._primaryStore, data);\n      } else if (!replace && this.storeHandlers?.updateData) {\n        this.storeHandlers.updateData(this._primaryStore, data as Partial<TData>);\n      }\n      // Priority 2: Use standard store methods\n      else if (replace && this._primaryStore.setData) {\n        this._primaryStore.setData(data);\n      } else if (!replace && this._primaryStore.updateData) {\n        this._primaryStore.updateData(data as Partial<TData>);\n      } else if (this._primaryStore.setData) {\n        // Fallback to setData if updateData not available\n        this._primaryStore.setData(data);\n      }\n\n      this.logDebug('Synced to primary store', {\n        primaryStore: this.primaryStoreKey,\n        replace,\n      });\n    } catch (error) {\n      this.logError('Failed to sync to primary store', { error });\n    }\n  }\n\n  /**\n   * Set loading state on primary store only.\n   * Read stores are NOT affected.\n   *\n   * Automatically called by CRUD methods before and after API calls.\n   *\n   * @param isLoading - Loading state\n   */\n  protected setStoresLoading(isLoading: boolean): void {\n    if (!this._primaryStore) return;\n\n    // Check if store sync is disabled\n    if (this.storeHandlers?.disabled) {\n      return;\n    }\n\n    // Use custom handler if configured\n    if (this.storeHandlers?.setLoading) {\n      this.storeHandlers.setLoading(this._primaryStore, isLoading);\n    }\n    // Fallback to default behavior\n    else if (this._primaryStore.setLoading) {\n      this._primaryStore.setLoading(isLoading);\n    }\n  }\n\n  /**\n   * Add entity to store (for create operations).\n   * Priority: storeHandlers.addData > store.addData\n   *\n   * @param entity - Entity to add\n   * @returns The converted store state (for reuse in event payloads)\n   */\n  protected addEntityToStore(entity: TEntity): TStoreState {\n    const storeState = this.mapper.toStoreState(entity);\n\n    if (this._primaryStore && !this.storeHandlers?.disabled) {\n      try {\n        if (this.storeHandlers?.addData) {\n          this.storeHandlers.addData(this._primaryStore, storeState);\n        } else if (this._primaryStore.addData) {\n          this._primaryStore.addData(storeState);\n        } else {\n          this.logDebug('Store does not support addData - skipping create sync');\n        }\n      } catch (error) {\n        this.logError('Failed to add entity to store', { error });\n      }\n    }\n\n    return storeState;\n  }\n\n  /**\n   * Update entity in store (for update operations).\n   * Priority: storeHandlers.updateDataById > store.updateDataById\n   *\n   * @param id - Entity ID\n   * @param entity - Updated entity\n   * @returns The converted store state (for reuse in event payloads)\n   */\n  protected updateEntityInStore(id: string, entity: TEntity): TStoreState {\n    const storeState = this.mapper.toStoreState(entity);\n\n    if (this._primaryStore && !this.storeHandlers?.disabled) {\n      try {\n        if (this.storeHandlers?.updateDataById) {\n          this.storeHandlers.updateDataById(this._primaryStore, id, storeState);\n        } else if (this._primaryStore.updateDataById) {\n          this._primaryStore.updateDataById(id, storeState);\n        } else {\n          this.logDebug('Store does not support updateDataById - skipping update sync');\n        }\n      } catch (error) {\n        this.logError('Failed to update entity in store', { error });\n      }\n    }\n\n    return storeState;\n  }\n\n  /**\n   * Sync multiple entities to store.\n   * Uses storeDataKey config to wrap entities in the correct structure.\n   *\n   * @param entities - Entities to sync\n   * @returns Array of converted store states\n   */\n  protected syncEntitiesToStore(entities: TEntity[]): TStoreState[] {\n    const storeStates = entities.map(entity => this.mapper.toStoreState(entity));\n\n    if (this._primaryStore && !this.storeHandlers?.disabled) {\n      // Build store data using configured key (default: 'items')\n      const storeDataKey = this.config.storeDataKey ?? 'items';\n      const storeData = this.buildNestedObject(storeDataKey, entities);\n      this.syncToStores(storeData as TData, true); // Replace with full list\n    }\n\n    return storeStates;\n  }\n\n  /**\n   * Build a nested object from a dot-notation key path.\n   * @example buildNestedObject('items', data) => { items: data }\n   * @example buildNestedObject('nested.items', data) => { nested: { items: data } }\n   */\n  private buildNestedObject(keyPath: string, value: unknown): Record<string, unknown> {\n    const keys = keyPath.split('.');\n    const result: Record<string, unknown> = {};\n\n    let current = result;\n    for (let i = 0; i < keys.length - 1; i++) {\n      current[keys[i]] = {};\n      current = current[keys[i]] as Record<string, unknown>;\n    }\n    current[keys[keys.length - 1]] = value;\n\n    return result;\n  }\n\n  /**\n   * Remove entity from store by ID.\n   * Priority: storeHandlers.removeData > store.removeData\n   *\n   * @param id - Entity ID to remove\n   */\n  protected removeEntityFromStore(id: string): void {\n    if (!this._primaryStore || this.storeHandlers?.disabled) return;\n\n    try {\n      // Priority 1: Custom handler for removeData\n      if (this.storeHandlers?.removeData) {\n        this.storeHandlers.removeData(this._primaryStore, id);\n      }\n      // Priority 2: Store's removeData method\n      else if (this._primaryStore.removeData) {\n        this._primaryStore.removeData(id);\n      } else {\n        this.logDebug('Store does not support removeData - skipping delete sync');\n        return;\n      }\n\n      this.logDebug('Removed entity from store', { entityId: id });\n    } catch (error) {\n      this.logError('Failed to remove entity from store', { error, entityId: id });\n    }\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Optimistic Update Helpers\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Check if optimistic updates are enabled for an operation.\n   */\n  protected isOptimisticEnabled(operation: 'create' | 'update' | 'delete'): boolean {\n    if (!this.optimisticConfig?.enabled) return false;\n    const ops = this.optimisticConfig.operations ?? ['create', 'update', 'delete'];\n    return ops.includes(operation);\n  }\n\n  /**\n   * Save current store state for potential rollback.\n   * Call this BEFORE making optimistic changes.\n   */\n  protected saveStateForRollback(operation: string): void {\n    if (!this._primaryStore?.getData) return;\n\n    const previousState = this._primaryStore.getData();\n    this._rollbackStack.push({\n      operation,\n      previousState: previousState ? { ...previousState } : null,\n      timestamp: Date.now(),\n    });\n\n    // Limit stack size\n    if (this._rollbackStack.length > this._maxRollbackStackSize) {\n      this._rollbackStack.shift();\n    }\n\n    this.logDebug('Saved state for rollback', { operation, stackSize: this._rollbackStack.length });\n  }\n\n  /**\n   * Rollback to previous state on error.\n   * Call this when an optimistic update fails.\n   */\n  protected rollbackState(operation: string, error: Error): void {\n    const entry = this._rollbackStack.pop();\n    if (!entry || !this._primaryStore) {\n      this.logWarn('No state to rollback', { operation });\n      return;\n    }\n\n    try {\n      if (entry.previousState && this._primaryStore.setData) {\n        this._primaryStore.setData(entry.previousState);\n        this.logInfo('Rolled back optimistic update', { operation });\n      }\n\n      // Call onRollback callback if configured\n      if (this.optimisticConfig?.onRollback) {\n        this.optimisticConfig.onRollback(operation, error, entry.previousState);\n      }\n\n      // Emit rollback event\n      this.emitEvent('optimistic:rollback', {\n        operation,\n        error: error.message,\n        previousState: entry.previousState,\n      } as Record<string, unknown>);\n    } catch (rollbackError) {\n      this.logError('Failed to rollback state', { error: rollbackError, operation });\n    }\n  }\n\n  /**\n   * Clear rollback state after successful operation.\n   * Call this when API succeeds.\n   */\n  protected clearRollbackState(operation: string): void {\n    // Remove the most recent entry for this operation\n    const index = this._rollbackStack.findIndex(e => e.operation === operation);\n    if (index >= 0) {\n      this._rollbackStack.splice(index, 1);\n    }\n  }\n\n  /**\n   * Resolve conflict between optimistic and server state.\n   */\n  // eslint-disable-next-line complexity\n  protected resolveConflict<T>(optimistic: T, server: T): T {\n    const resolution = this.optimisticConfig?.conflictResolution ?? 'server-wins';\n\n    switch (resolution) {\n      case 'server-wins':\n        return server;\n      case 'client-wins':\n        return optimistic;\n      case 'merge':\n        // Deep merge (simple implementation)\n        if (typeof optimistic === 'object' && typeof server === 'object') {\n          return { ...optimistic, ...server } as T;\n        }\n        return server;\n      case 'manual':\n        if (this.optimisticConfig?.onConflict) {\n          return this.optimisticConfig.onConflict(optimistic, server);\n        }\n        return server;\n      default:\n        return server;\n    }\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Response Unwrapping\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Unwrap response data if responseDataKey is configured.\n   *\n   * Handles wrapped API responses (e.g., SuccessResponseStandard) by extracting\n   * the actual data from a nested property. Supports nested keys with dot notation.\n   *\n   * @param data - Raw response data from fetcher\n   * @returns Unwrapped data or original data if no key configured\n   *\n   * @example\n   * ```typescript\n   * // Simple key: responseDataKey: 'data'\n   * // Input: { success: true, message: '...', data: [...], codeStatus: 200 }\n   * // Output: [...]\n   *\n   * // Nested key: responseDataKey: 'data.items'\n   * // Input: { data: { items: [...], total: 100 } }\n   * // Output: [...]\n   * ```\n   */\n  protected unwrapResponseData<T>(data: unknown): T {\n    const key = this.config.responseDataKey;\n    if (!key) return data as T;\n\n    // Support nested keys with dot notation (e.g., 'data.items')\n    const keys = key.split('.');\n    let result: unknown = data;\n\n    for (const k of keys) {\n      if (result && typeof result === 'object' && k in result) {\n        result = (result as Record<string, unknown>)[k];\n      } else {\n        // Key not found, return original data\n        return data as T;\n      }\n    }\n\n    return result as T;\n  }\n\n  /**\n   * Check if a response indicates success.\n   *\n   * Uses `responseSuccessKey` config if set, otherwise auto-detects from:\n   * - `isSuccess` (internal format)\n   * - `success` (alternative internal format)\n   * - `ok` (fetchff/fetch standard)\n   * - HTTP status code 200-299\n   *\n   * Supports nested keys via dot notation (e.g., `'meta.success'`).\n   *\n   * @param response - Response object from fetcher\n   * @returns true if response indicates success\n   */\n  // eslint-disable-next-line complexity\n  protected isResponseSuccess(response: unknown): boolean {\n    if (!response || typeof response !== 'object') {\n      return false;\n    }\n\n    const resp = response as Record<string, unknown>;\n    const successKey = this.config.responseSuccessKey;\n\n    // If successKey is configured, use it (supports nested keys)\n    if (successKey) {\n      const keys = successKey.split('.');\n      let result: unknown = resp;\n\n      for (const k of keys) {\n        if (result && typeof result === 'object' && k in result) {\n          result = (result as Record<string, unknown>)[k];\n        } else {\n          // Key not found, fall back to auto-detect\n          break;\n        }\n      }\n\n      // If we found a boolean value, use it\n      if (typeof result === 'boolean') {\n        return result;\n      }\n    }\n\n    // Auto-detect: check common success properties in order\n    if ('isSuccess' in resp && typeof resp.isSuccess === 'boolean') {\n      return resp.isSuccess;\n    }\n\n    if ('success' in resp && typeof resp.success === 'boolean') {\n      return resp.success;\n    }\n\n    if ('ok' in resp && typeof resp.ok === 'boolean') {\n      return resp.ok;\n    }\n\n    // Check HTTP status code\n    if ('status' in resp && typeof resp.status === 'number') {\n      return resp.status >= HTTP_STATUS.OK && resp.status < HTTP_STATUS.MULTIPLE_CHOICES;\n    }\n\n    // Default: assume success if we have data and no explicit error\n    return 'data' in resp && !('error' in resp && resp.error);\n  }\n\n  /**\n   * Extract error from API response.\n   *\n   * Uses `responseErrorKey` config if set, otherwise auto-detects from:\n   * - `error` (common format)\n   * - `errors` (array format, e.g., GraphQL)\n   *\n   * Supports nested keys via dot notation (e.g., `'meta.error'`).\n   *\n   * @param response - Response object from fetcher\n   * @returns Extracted error or undefined if not found\n   */\n  // eslint-disable-next-line complexity\n  protected extractResponseError(response: unknown): unknown {\n    if (!response || typeof response !== 'object') {\n      return undefined;\n    }\n\n    const resp = response as Record<string, unknown>;\n    const errorKey = this.config.responseErrorKey;\n\n    // If errorKey is configured, use it (supports nested keys)\n    if (errorKey) {\n      const keys = errorKey.split('.');\n      let result: unknown = resp;\n\n      for (const k of keys) {\n        if (result && typeof result === 'object' && k in result) {\n          result = (result as Record<string, unknown>)[k];\n        } else {\n          // Key not found\n          return undefined;\n        }\n      }\n\n      return result;\n    }\n\n    // Auto-detect: check common error properties\n    if ('error' in resp && resp.error) {\n      return resp.error;\n    }\n\n    if ('errors' in resp && resp.errors) {\n      return resp.errors;\n    }\n\n    return undefined;\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Generic CRUD Operations\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Fetch all entities from API\n   *\n   * Flow:\n   * 1. Assert service is ready\n   * 2. Check fetcher is available\n   * 3. Set stores loading\n   * 4. Emit 'fetching' event\n   * 5. Lifecycle hook: beforeFetchAll\n   * 6. Call fetcher (from @plyaz/api)\n   * 7. Map response DTOs to domain entities\n   * 8. Lifecycle hook: afterFetchAll\n   * 9. Emit 'fetched' event\n   * 10. Return entities\n   *\n   * Error Handling:\n   * - On API error: wrap and emit error event\n   * - Set error on all stores\n   * - Re-throw wrapped error\n   *\n   * @param query - Optional query/filter parameters (e.g., { status: 'active' })\n   * @param options - Optional service options for fetcher\n   * @returns Promise resolving to array of entities\n   * @throws CorePackageError if fetcher not configured or API call fails\n   *\n   * @example\n   * ```typescript\n   * // Fetch all entities\n   * const allItems = await service.fetchAll();\n   *\n   * // Fetch with filters\n   * const activeItems = await service.fetchAll({ status: 'active' });\n   *\n   * // Fetch with pagination\n   * const pagedItems = await service.fetchAll({ page: 2, limit: 10 });\n   * ```\n   */\n  // eslint-disable-next-line complexity\n  async fetchAll(query?: Partial<TQueryDTO>, options?: unknown): Promise<TEntity[]> {\n    await this.ensureReady();\n    const startTime = Date.now();\n\n    if (!this.config.fetchers?.fetchAll) {\n      throw new CorePackageError(\n        'fetchAll fetcher not configured. Pass fetchers.fetchAll in service config.',\n        ERROR_CODES.CORE_OPERATION_FAILED\n      );\n    }\n\n    this.setStoresLoading(true);\n    this.emitEvent('fetching', { query } as Record<string, unknown>);\n\n    try {\n      // 1. Lifecycle hook\n      await this.beforeFetchAll?.(query);\n\n      // 2. Call fetcher with query\n      const response = await this.config.fetchers.fetchAll(query, options);\n\n      // Check for success - support multiple response formats\n      if (!this.isResponseSuccess(response)) {\n        const extractedError = this.extractResponseError(response);\n        throw new CorePackageError(\n          'Failed to fetch entities',\n          ERROR_CODES.CONTEXT_OPERATION_FAILED,\n          {\n            context: { operation: 'fetchAll', query },\n            cause: extractedError instanceof Error ? extractedError : undefined,\n            details: extractedError,\n          }\n        );\n      }\n\n      // 3. Unwrap response data if needed (e.g., SuccessResponseStandard format)\n      const rawData = this.unwrapResponseData<TResponseDTO[]>(response.data);\n\n      // Debug: Log config and response to diagnose issues\n      this.logDebug('fetchAll: checking config keys', {\n        responseSuccessKey: this.config.responseSuccessKey,\n        responseErrorKey: this.config.responseErrorKey,\n        responseDataKey: this.config.responseDataKey,\n        configKeys: Object.keys(this.config),\n      });\n\n      this.logDebug('fetchAll: response structure', {\n        responseType: typeof response,\n        responseKeys: response ? Object.keys(response as object) : [],\n        responseDataType: typeof (response as Record<string, unknown>).data,\n        hasOk: 'ok' in (response as object),\n        hasData: 'data' in (response as object),\n      });\n\n      this.logDebug('fetchAll: after unwrap', {\n        rawDataType: typeof rawData,\n        isArray: Array.isArray(rawData),\n        rawDataKeys: rawData && typeof rawData === 'object' ? Object.keys(rawData as object) : [],\n      });\n\n      // 4. Validate rawData is an array before mapping\n      if (!Array.isArray(rawData)) {\n        this.logWarn('fetchAll: unwrapped data is not an array, check responseDataKey config', {\n          responseDataKey: this.config.responseDataKey,\n          actualType: typeof rawData,\n          // Help debug by showing what we got\n          receivedData: rawData,\n        });\n        // Return empty array to prevent crash - the warning will help debug\n        return [];\n      }\n\n      // 5. Map DTOs to domain entities\n      const entities = rawData.map(dto => this.mapper.toDomain(dto as TResponseDTO));\n\n      // 6. Sync to store and get converted store states (no duplicate toStoreState)\n      this.syncEntitiesToStore(entities);\n\n      // 6. Lifecycle hook\n      await this.afterFetchAll?.(entities, query);\n\n      // 7. Emit success event\n      this.emitEvent('fetched', {\n        count: entities.length,\n        query,\n      } as Record<string, unknown>);\n\n      // Record success metrics\n      await this.recordOperationMetrics('fetchAll', Date.now() - startTime, true);\n\n      this.logInfo('Fetched entities', { count: entities.length, query });\n      return entities;\n    } catch (error) {\n      // Record error metrics\n      await this.recordOperationMetrics('fetchAll', Date.now() - startTime, false);\n\n      const pkgError = this.wrapError(error, 'fetchAll', { query });\n      // Note: Errors are thrown and caught by global error handler\n      // Individual stores should NOT have error state - only global error store\n      this.emitEvent('fetch:error', {\n        error: pkgError,\n        data: { query },\n      } satisfies CoreEntityErrorPayload);\n      throw pkgError;\n    } finally {\n      this.setStoresLoading(false);\n    }\n  }\n\n  /**\n   * Fetch single entity by ID from API\n   *\n   * @param id - Entity ID\n   * @param options - Optional service options for fetcher\n   * @returns Entity or null if not found\n   * @throws CorePackageError if fetcher not configured or API call fails\n   */\n  // eslint-disable-next-line complexity\n  async fetchById<TInput = string, TOptions = unknown>(\n    id: TInput,\n    options?: TOptions\n  ): Promise<TEntity | null> {\n    await this.ensureReady();\n    const startTime = Date.now();\n\n    if (!this.config.fetchers?.fetchById) {\n      throw new CorePackageError(\n        'fetchById fetcher not configured. Pass fetchers.fetchById in service config.',\n        ERROR_CODES.CORE_OPERATION_FAILED\n      );\n    }\n\n    try {\n      // 1. Lifecycle hook\n      await this.beforeFetchById?.(id);\n\n      // 2. Call fetcher\n      const response = await this.config.fetchers.fetchById(String(id), options);\n\n      if (!this.isResponseSuccess(response)) {\n        const extractedError = this.extractResponseError(response);\n        const errorMessage =\n          extractedError instanceof Error ? extractedError.message : String(extractedError ?? '');\n        // Return null for 404 (not found)\n        if (\n          errorMessage.includes('404') ||\n          (response as Record<string, unknown>).status === HTTP_STATUS.NOT_FOUND\n        ) {\n          return null;\n        }\n        throw new CorePackageError('Failed to fetch entity', ERROR_CODES.CONTEXT_OPERATION_FAILED, {\n          context: { operation: 'fetchById', entityId: String(id) },\n          cause: extractedError instanceof Error ? extractedError : undefined,\n          details: extractedError,\n        });\n      }\n\n      // 3. Unwrap and map DTO to domain entity\n      const rawData = this.unwrapResponseData<TResponseDTO>(response.data);\n      const entity = rawData ? this.mapper.toDomain(rawData) : null;\n\n      // 4. Lifecycle hook\n      if (entity) {\n        await this.afterFetchById?.(entity);\n      }\n\n      // Record success metrics\n      await this.recordOperationMetrics('fetchById', Date.now() - startTime, true);\n\n      return entity;\n    } catch (error) {\n      // Record error metrics\n      await this.recordOperationMetrics('fetchById', Date.now() - startTime, false);\n\n      const pkgError = this.wrapError(error, 'fetchById', { entityId: String(id) });\n      throw pkgError;\n    }\n  }\n\n  /**\n   * Create new entity\n   *\n   * Flow:\n   * 1. Assert service is ready\n   * 2. Check fetcher is available\n   * 3. Set stores loading\n   * 4. Emit 'creating' event\n   * 5. Lifecycle hook: beforeCreate\n   * 6. Map input data to create DTO (if mapper available)\n   * 7. [Optimistic] Save state and add to store BEFORE API call\n   * 8. Call create fetcher (from @plyaz/api)\n   * 9. Map response DTO to domain entity\n   * 10. [Optimistic] Resolve conflicts if needed\n   * 11. Lifecycle hook: afterCreate\n   * 12. Emit 'created' event\n   * 13. Return entity\n   *\n   * @param data - Create data (can be partial domain entity or DTO)\n   * @param options - Optional service options for fetcher\n   * @returns Created entity\n   * @throws CorePackageError if fetcher not configured or creation fails\n   */\n  // eslint-disable-next-line complexity, max-lines-per-function\n  async create<TInput = unknown, TOptions = unknown>(\n    data: TInput,\n    options?: TOptions\n  ): Promise<TEntity> {\n    await this.ensureReady();\n    const startTime = Date.now();\n\n    if (!this.config.fetchers?.create) {\n      throw new CorePackageError(\n        'create fetcher not configured. Pass fetchers.create in service config.',\n        ERROR_CODES.CORE_OPERATION_FAILED\n      );\n    }\n\n    const isOptimistic = this.isOptimisticEnabled('create');\n\n    this.setStoresLoading(true);\n    this.emitEvent('creating', {\n      request: data,\n    } satisfies CoreEntityCreatingPayload<TInput>);\n\n    // Save state for rollback if optimistic\n    if (isOptimistic) {\n      this.saveStateForRollback('create');\n    }\n\n    // Create optimistic entity for immediate UI update\n    let optimisticEntity: TEntity | null = null;\n    let optimisticStoreState: TStoreState | null = null;\n\n    try {\n      // 1. Lifecycle hook\n      await this.beforeCreate?.(data);\n\n      // 2. Map to DTO if mapper available (optional - data might already be DTO)\n      const createDTO = this.mapper?.toCreateDTO\n        ? this.mapper.toCreateDTO(data as Partial<TEntity>)\n        : (data as unknown as TCreateDTO);\n\n      // 3. [Optimistic] Add to store BEFORE API call\n      if (isOptimistic) {\n        // Create a temporary entity for optimistic display\n        optimisticEntity = {\n          ...(data as object),\n          id: `temp-${Date.now()}`, // Temporary ID\n          _optimistic: true,\n        } as TEntity;\n        optimisticStoreState = this.addEntityToStore(optimisticEntity);\n\n        this.emitEvent('optimistic:create', {\n          entity: optimisticEntity,\n          storeState: optimisticStoreState,\n        } as Record<string, unknown>);\n      }\n\n      // 4. Call create fetcher\n      const response = await this.config.fetchers.create(createDTO, options);\n\n      if (!this.isResponseSuccess(response)) {\n        const extractedError = this.extractResponseError(response);\n        const errorMessage =\n          extractedError instanceof Error\n            ? extractedError.message\n            : typeof extractedError === 'string'\n              ? extractedError\n              : 'Failed to create entity';\n        throw new CorePackageError(errorMessage, ERROR_CODES.CONTEXT_OPERATION_FAILED, {\n          context: { operation: 'create' },\n          cause: extractedError instanceof Error ? extractedError : undefined,\n          details: extractedError,\n        });\n      }\n\n      // 5. Unwrap and map response to domain entity\n      const rawData = this.unwrapResponseData<TResponseDTO>(response.data);\n      const entity = this.mapper.toDomain(rawData);\n\n      // 6. Update store with real entity (replaces optimistic if used)\n      let storeState: TStoreState;\n      if (isOptimistic && optimisticEntity) {\n        // Remove optimistic entity and add real one\n        const tempId = (optimisticEntity as { id?: string }).id;\n        if (tempId) {\n          this.removeEntityFromStore(tempId);\n        }\n        storeState = this.addEntityToStore(entity);\n        this.clearRollbackState('create');\n      } else {\n        storeState = this.addEntityToStore(entity);\n      }\n\n      // 7. Lifecycle hook\n      await this.afterCreate?.(entity);\n\n      // 8. Emit created event (reuse storeState from sync)\n      this.emitEvent('created', {\n        entity,\n        storeState,\n      } satisfies CoreEntityCreatedPayload<TEntity, TStoreState>);\n\n      this.emitEvent('complete', {\n        success: true,\n      } satisfies CoreEntityCompletePayload);\n\n      // Record success metrics\n      await this.recordOperationMetrics('create', Date.now() - startTime, true);\n\n      this.logInfo('Entity created', { entityId: (entity as { id?: string }).id });\n      return entity;\n    } catch (error) {\n      // Record error metrics\n      await this.recordOperationMetrics('create', Date.now() - startTime, false);\n\n      // Rollback on error if optimistic\n      if (isOptimistic && this.optimisticConfig?.rollbackOnError !== false) {\n        this.rollbackState('create', error instanceof Error ? error : new Error(String(error)));\n      }\n\n      const pkgError = this.wrapError(error, 'create');\n      // Errors thrown to global error handler - not set on individual stores\n      this.emitEvent('create:error', {\n        error: pkgError,\n      } satisfies CoreEntityErrorPayload);\n      throw pkgError;\n    } finally {\n      this.setStoresLoading(false);\n    }\n  }\n\n  /**\n   * Update entity (partial update - PATCH)\n   *\n   * @param id - Entity ID\n   * @param data - Partial update data\n   * @param options - Optional service options for fetcher\n   * @returns Updated entity\n   * @throws CorePackageError if fetcher not configured or update fails\n   */\n  // eslint-disable-next-line complexity, max-lines-per-function\n  async update<TInput = unknown, TOptions = unknown>(\n    id: string,\n    data: TInput,\n    options?: TOptions\n  ): Promise<TEntity> {\n    await this.ensureReady();\n    const startTime = Date.now();\n\n    if (!this.config.fetchers?.update) {\n      throw new CorePackageError(\n        'update fetcher not configured. Pass fetchers.update in service config.',\n        ERROR_CODES.CORE_OPERATION_FAILED\n      );\n    }\n\n    const isOptimistic = this.isOptimisticEnabled('update');\n\n    this.setStoresLoading(true);\n    this.emitEvent('patching', {\n      id,\n      request: data,\n    } satisfies CoreEntityPatchingPayload<TInput>);\n\n    // Save state for rollback if optimistic\n    if (isOptimistic) {\n      this.saveStateForRollback('update');\n    }\n\n    try {\n      // 1. Lifecycle hook\n      await this.beforeUpdate?.(id, data);\n\n      // 2. Map to DTO if mapper available\n      const patchDTO = this.mapper?.toPatchDTO\n        ? this.mapper.toPatchDTO(data as Partial<TEntity>)\n        : (data as unknown as TPatchDTO);\n\n      // 3. [Optimistic] Update store BEFORE API call\n      let optimisticStoreState: TStoreState | null = null;\n      if (isOptimistic) {\n        // Create optimistic entity with merged data\n        const optimisticEntity = {\n          id,\n          ...(data as object),\n          _optimistic: true,\n        } as TEntity;\n        optimisticStoreState = this.updateEntityInStore(id, optimisticEntity);\n\n        this.emitEvent('optimistic:update', {\n          id,\n          entity: optimisticEntity,\n          storeState: optimisticStoreState,\n        } as Record<string, unknown>);\n      }\n\n      // 4. Call update fetcher\n      const response = await this.config.fetchers.update({ id, data: patchDTO }, options);\n\n      if (!this.isResponseSuccess(response)) {\n        const extractedError = this.extractResponseError(response);\n        const errorMessage =\n          extractedError instanceof Error\n            ? extractedError.message\n            : typeof extractedError === 'string'\n              ? extractedError\n              : 'Failed to update entity';\n        throw new CorePackageError(errorMessage, ERROR_CODES.CONTEXT_OPERATION_FAILED, {\n          context: { operation: 'update', entityId: id },\n          cause: extractedError instanceof Error ? extractedError : undefined,\n          details: extractedError,\n        });\n      }\n\n      // 5. Unwrap and map response to domain entity\n      const rawData = this.unwrapResponseData<TResponseDTO>(response.data);\n      const serverEntity = this.mapper.toDomain(rawData);\n\n      // 6. Resolve conflicts and update store with final entity\n      let finalEntity = serverEntity;\n      if (isOptimistic && optimisticStoreState) {\n        // Resolve any conflicts between optimistic and server response\n        finalEntity = this.resolveConflict({ id, ...(data as object) } as TEntity, serverEntity);\n        this.clearRollbackState('update');\n      }\n\n      // 7. Update in store with final entity\n      const storeState = this.updateEntityInStore(id, finalEntity);\n\n      // 8. Lifecycle hook\n      await this.afterUpdate?.(id, finalEntity);\n\n      // 9. Emit updated event (reuse storeState from sync)\n      this.emitEvent('patched', {\n        entity: finalEntity,\n        storeState,\n      } satisfies CoreEntityPatchedPayload<TEntity, TStoreState>);\n\n      this.emitEvent('complete', {\n        success: true,\n        entityId: id,\n      } satisfies CoreEntityCompletePayload);\n\n      // Record success metrics\n      await this.recordOperationMetrics('patch', Date.now() - startTime, true);\n\n      this.logInfo('Entity updated', { entityId: id });\n      return finalEntity;\n    } catch (error) {\n      // Record error metrics\n      await this.recordOperationMetrics('patch', Date.now() - startTime, false);\n\n      // Rollback on error if optimistic\n      if (isOptimistic && this.optimisticConfig?.rollbackOnError !== false) {\n        this.rollbackState('update', error instanceof Error ? error : new Error(String(error)));\n      }\n\n      const pkgError = this.wrapError(error, 'update', { entityId: id });\n      // Errors thrown to global error handler - not set on individual stores\n      this.emitEvent('update:error', {\n        error: pkgError,\n        entityId: id,\n      } satisfies CoreEntityErrorPayload);\n      throw pkgError;\n    } finally {\n      this.setStoresLoading(false);\n    }\n  }\n\n  /**\n   * Delete entity\n   *\n   * @param id - Entity ID\n   * @param options - Optional service options for fetcher\n   * @returns Delete operation result (type specified by TDeleteResult generic)\n   * @throws CorePackageError if fetcher not configured or deletion fails\n   */\n  // eslint-disable-next-line complexity\n  async delete<TInput = string, TOptions = unknown>(\n    id: TInput,\n    options?: TOptions\n  ): Promise<TDeleteResult> {\n    await this.ensureReady();\n    const startTime = Date.now();\n\n    if (!this.config.fetchers?.delete) {\n      throw new CorePackageError(\n        'delete fetcher not configured. Pass fetchers.delete in service config.',\n        ERROR_CODES.CORE_OPERATION_FAILED\n      );\n    }\n\n    const isOptimistic = this.isOptimisticEnabled('delete');\n\n    this.setStoresLoading(true);\n    this.emitEvent('deleting', {\n      id: String(id),\n    } satisfies CoreEntityDeletingPayload);\n\n    // Save state for rollback if optimistic\n    if (isOptimistic) {\n      this.saveStateForRollback('delete');\n    }\n\n    try {\n      // 1. Lifecycle hook\n      await this.beforeDelete?.(id);\n\n      // 2. [Optimistic] Remove from store BEFORE API call\n      if (isOptimistic) {\n        this.removeEntityFromStore(String(id));\n\n        this.emitEvent('optimistic:delete', {\n          id: String(id),\n        } as Record<string, unknown>);\n      }\n\n      // 3. Call delete fetcher\n      const response = await this.config.fetchers.delete(String(id), options);\n\n      if (!this.isResponseSuccess(response)) {\n        const extractedError = this.extractResponseError(response);\n        const errorMessage =\n          extractedError instanceof Error\n            ? extractedError.message\n            : typeof extractedError === 'string'\n              ? extractedError\n              : 'Failed to delete entity';\n        throw new CorePackageError(errorMessage, ERROR_CODES.CONTEXT_OPERATION_FAILED, {\n          context: { operation: 'delete', entityId: String(id) },\n          cause: extractedError instanceof Error ? extractedError : undefined,\n          details: extractedError,\n        });\n      }\n\n      // 4. Remove from store (if not already done optimistically)\n      if (!isOptimistic) {\n        this.removeEntityFromStore(String(id));\n      } else {\n        this.clearRollbackState('delete');\n      }\n\n      // 5. Lifecycle hook\n      await this.afterDelete?.(id);\n\n      // 6. Emit deleted event\n      this.emitEvent('deleted', {\n        id: String(id),\n        soft: false,\n      } satisfies CoreEntityDeletedPayload);\n\n      this.emitEvent('complete', {\n        success: true,\n        entityId: String(id),\n      } satisfies CoreEntityCompletePayload);\n\n      // Record success metrics\n      await this.recordOperationMetrics('delete', Date.now() - startTime, true);\n\n      this.logInfo('Entity deleted', { entityId: String(id) });\n\n      // 7. Return delete result\n      return response.data as TDeleteResult;\n    } catch (error) {\n      // Record error metrics\n      await this.recordOperationMetrics('delete', Date.now() - startTime, false);\n\n      // Rollback on error if optimistic\n      if (isOptimistic && this.optimisticConfig?.rollbackOnError !== false) {\n        this.rollbackState('delete', error instanceof Error ? error : new Error(String(error)));\n      }\n\n      const pkgError = this.wrapError(error, 'delete', { entityId: String(id) });\n      // Errors thrown to global error handler - not set on individual stores\n      this.emitEvent('delete:error', {\n        error: pkgError,\n        entityId: String(id),\n      } satisfies CoreEntityErrorPayload);\n      throw pkgError;\n    } finally {\n      this.setStoresLoading(false);\n    }\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Event Emission (Protected - for subclasses)\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Emit event with automatic prefix\n   * Uses CoreEventManager under the hood\n   *\n   * @param event - Event name (without prefix)\n   * @param payload - Event payload\n   *\n   * @example\n   * ```typescript\n   * // If eventPrefix is 'example', this emits 'example:created'\n   * this.emitEvent('created', { entity, storeState });\n   * ```\n   */\n  protected emitEvent<TPayload extends BaseFrontendEventPayload>(\n    event: string,\n    payload: TPayload\n  ): void {\n    const eventName = `${this.eventPrefix}:${event}`;\n    CoreEventManager.emit(eventName, payload);\n    this.logDebug(`Event emitted: ${eventName}`, payload as unknown as Record<string, unknown>);\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Lifecycle Hooks (Optional - Override in subclasses)\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Called before fetchAll API call\n   * Override to add custom logic (e.g., cache check, validate query)\n   *\n   * @param query - Optional query/filter parameters\n   */\n  protected beforeFetchAll?(query?: Partial<TQueryDTO>): Promise<void>;\n\n  /**\n   * Called after fetchAll success\n   * Override to add custom logic (e.g., cache set, transform entities)\n   *\n   * @param entities - Fetched entities\n   * @param query - Optional query/filter parameters that were used\n   */\n  protected afterFetchAll?(entities: TEntity[], query?: Partial<TQueryDTO>): Promise<void>;\n\n  /**\n   * Called before fetchById API call\n   */\n  protected beforeFetchById?<TInput>(id: TInput): Promise<void>;\n\n  /**\n   * Called after fetchById success\n   */\n  protected afterFetchById?(entity: TEntity): Promise<void>;\n\n  /**\n   * Called before create API call\n   * Use this to modify data or validate before sending to API\n   */\n  protected beforeCreate?<TInput>(data: TInput): Promise<void>;\n\n  /**\n   * Called after create success\n   * Use this to update stores, show notifications, etc.\n   */\n  protected afterCreate?(entity: TEntity): Promise<void>;\n\n  /**\n   * Called before update API call\n   */\n  protected beforeUpdate?<TInput>(id: string, data: TInput): Promise<void>;\n\n  /**\n   * Called after update success\n   */\n  protected afterUpdate?(id: string, entity: TEntity): Promise<void>;\n\n  /**\n   * Called before delete API call\n   */\n  protected beforeDelete?<TInput>(id: TInput): Promise<void>;\n\n  /**\n   * Called after delete success\n   */\n  protected afterDelete?<TInput>(id: TInput): Promise<void>;\n\n  /**\n   * Called before OPTIONS request\n   *\n   * Use for custom logic before checking allowed methods/CORS headers.\n   *\n   * @param resource - Optional resource identifier or URL\n   */\n  protected beforeOptions?<TInput>(resource?: TInput): Promise<void>;\n\n  /**\n   * Called after OPTIONS request success\n   *\n   * Use for processing allowed methods/headers or logging.\n   *\n   * @param resource - Optional resource identifier or URL\n   * @param result - The OPTIONS response (allowed methods, CORS headers, etc.)\n   */\n  protected afterOptions?<TInput>(resource: TInput | undefined, result: unknown): Promise<void>;\n\n  /**\n   * Called before HEAD request\n   *\n   * Use for custom logic before checking resource existence/headers.\n   *\n   * @param resource - Optional resource identifier or URL\n   */\n  protected beforeHead?<TInput>(resource?: TInput): Promise<void>;\n\n  /**\n   * Called after HEAD request success\n   *\n   * Use for processing response headers or logging.\n   * Note: HEAD requests return no body, only headers.\n   *\n   * @param resource - Optional resource identifier or URL\n   * @param headers - Response headers (if available)\n   */\n  protected afterHead?<TInput>(resource: TInput | undefined, headers?: unknown): Promise<void>;\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Polling (Generic Feature)\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Check if polling is currently active.\n   */\n  get isPolling(): boolean {\n    return this._pollingTimer !== null;\n  }\n\n  /**\n   * Start polling for updates.\n   * Uses provided interval, falls back to `config.pollingInterval`, then DEFAULT_POLLING_INTERVAL_MS (30s).\n   * Polling calls fetchAll() at the configured interval.\n   *\n   * Override in subclass for custom polling behavior.\n   *\n   * @param intervalMs - Optional polling interval in milliseconds. Overrides config.pollingInterval.\n   *\n   * @example\n   * ```typescript\n   * // Start polling with default/config interval\n   * service.startPolling();\n   *\n   * // Start polling with custom interval (5 seconds)\n   * service.startPolling(5000);\n   *\n   * // Or override in subclass for custom behavior\n   * startPolling(intervalMs?: number): void {\n   *   super.startPolling(intervalMs);\n   *   // Custom polling logic\n   * }\n   * ```\n   */\n  startPolling(intervalMs?: number): void {\n    if (this._pollingTimer) return;\n\n    // Priority: provided interval > config.pollingInterval > default (30s)\n    // Use || instead of ?? because pollingInterval may be 0 (meaning \"use default\")\n    // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n    const interval = intervalMs || this.config.pollingInterval || DEFAULT_POLLING_INTERVAL_MS;\n    this._pollingTimer = setInterval(() => {\n      this.fetchAll().catch(error => {\n        this.logError('Polling fetch failed', { error });\n      });\n    }, interval);\n\n    this.logDebug('Polling started', { interval });\n  }\n\n  /**\n   * Stop polling.\n   * Safe to call even if polling is not active.\n   */\n  stopPolling(): void {\n    if (this._pollingTimer) {\n      clearInterval(this._pollingTimer);\n      this._pollingTimer = null;\n      this.logDebug('Polling stopped');\n    }\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Lifecycle Management\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Dispose service and cleanup resources.\n   * Stops polling and performs base cleanup.\n   *\n   * Subclasses should override and call super.dispose() to ensure cleanup.\n   *\n   * @example\n   * ```typescript\n   * dispose(): void {\n   *   // Custom cleanup\n   *   this.customCleanup();\n   *   // Always call super\n   *   super.dispose();\n   * }\n   * ```\n   */\n  dispose(): void {\n    this.stopPolling();\n    this.unregisterAllStreamHandlers();\n    this.logInfo('Service disposed');\n  }\n\n  /**\n   * Check if service is available.\n   * Override in subclass for custom availability checks.\n   *\n   * @returns true if service is enabled and in a browser environment\n   */\n  isAvailable(): boolean {\n    return this.isServiceEnabled && typeof window !== 'undefined';\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Error Handling Helpers\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Wrap error in CorePackageError with context\n   *\n   * @param error - Original error\n   * @param operation - Operation that failed\n   * @param context - Additional context\n   * @returns Wrapped error\n   */\n  protected wrapError(\n    error: unknown,\n    operation: string,\n    context?: Record<string, unknown>\n  ): CorePackageError {\n    // If already a package error (BaseError subclass), return as-is\n    if (error instanceof BaseError) {\n      return error as CorePackageError;\n    }\n\n    // Wrap other errors in CorePackageError\n    return new CorePackageError(\n      error instanceof Error ? error.message : 'An unexpected error occurred',\n      ERROR_CODES.CONTEXT_OPERATION_FAILED,\n      {\n        context: { operation, ...context },\n        cause: error instanceof Error ? error : undefined,\n      }\n    );\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Observability Helper Methods\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Track a frontend operation with observability (span + metrics).\n   * Wraps an operation with automatic span creation, duration recording, and error tracking.\n   *\n   * @param operation - Operation name (fetchAll, fetchById, create, delete)\n   * @param entityId - Optional entity ID for context\n   * @param fn - The operation function to execute\n   * @returns Result of the operation\n   *\n   * @example\n   * ```typescript\n   * const entity = await this.trackOperation('create', undefined, async () => {\n   *   return await this.config.fetchers.create(data);\n   * });\n   * ```\n   */\n  protected async trackOperation<T>(\n    operation: 'fetchAll' | 'fetchById' | 'create' | 'patch' | 'delete',\n    entityId: string | undefined,\n    fn: () => Promise<T>\n  ): Promise<T> {\n    const startTime = Date.now();\n    const spanName = `${this.eventPrefix}.${operation}`;\n\n    return this.withSpan(spanName, async span => {\n      if (entityId) {\n        span.setAttribute('entity.id', entityId);\n      }\n      span.setAttribute('service.name', this.serviceName);\n      span.setAttribute('operation.name', operation);\n\n      try {\n        const result = await fn();\n\n        // Record success metrics\n        const duration = Date.now() - startTime;\n        await this.recordOperationMetrics(operation, duration, true);\n\n        span.setStatus('ok');\n        return result;\n      } catch (error) {\n        // Record error metrics\n        const duration = Date.now() - startTime;\n        await this.recordOperationMetrics(operation, duration, false);\n\n        span.recordException(error as Error);\n        span.setStatus('error', (error as Error).message);\n        throw error;\n      }\n    });\n  }\n\n  /**\n   * Record operation metrics (duration and count).\n   * Protected to allow subclasses to record metrics for custom operations.\n   */\n  protected async recordOperationMetrics(\n    operation: string,\n    duration: number,\n    success: boolean\n  ): Promise<void> {\n    if (!this.hasObservability) return;\n\n    const tags = {\n      service: this.serviceName,\n      operation,\n      entity: this.eventPrefix,\n      runtime: 'frontend',\n    };\n\n    // Record duration\n    await this.recordMetric(OBSERVABILITY_METRICS.SERVICE_OPERATION_DURATION, duration, tags);\n\n    // Record count\n    await this.incrementCounter(\n      success\n        ? OBSERVABILITY_METRICS.SERVICE_OPERATION_COUNT\n        : OBSERVABILITY_METRICS.SERVICE_OPERATION_ERROR,\n      1,\n      tags\n    );\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // File Upload (via backend API → @plyaz/storage)\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Upload a file via backend API.\n   *\n   * Uses the uploadFile fetcher from @plyaz/api which calls POST /upload endpoint.\n   * On the backend, this uses @plyaz/storage for actual file operations.\n   *\n   * Supports multiple upload modes:\n   * - **Direct upload**: Provide `base64` content with `mimeType`\n   * - **Template generation**: Provide `templateId` with `templateData`\n   *\n   * @param data - Upload parameters (base64/templateId, category, entityType, entityId)\n   * @param options - Optional service options (apiConfig, etc.)\n   * @returns Promise resolving to upload result with file metadata and URL\n   */\n  async uploadFile(data: UploadFileRequest, options?: ServiceOptions): Promise<UploadFileResponse> {\n    await this.ensureReady();\n    const startTime = Date.now();\n\n    this.setStoresLoading(true);\n    this.emitEvent('upload:uploading', { request: data });\n\n    try {\n      // 1. Lifecycle hook\n      await this.beforeUploadFile?.(data);\n\n      // 2. Call upload fetcher from @plyaz/api\n      // Uses default API client which has file endpoints registered\n      const response = await uploadFileFetcher(data, options);\n\n      // 3. Check response success\n      if (!this.isResponseSuccess(response)) {\n        const error = this.extractResponseError(response);\n        throw new CorePackageError('Failed to upload file', ERROR_CODES.CONTEXT_OPERATION_FAILED, {\n          context: { operation: 'uploadFile' },\n          details: error,\n        });\n      }\n\n      // 4. Unwrap response\n      const result = this.unwrapResponseData<UploadFileResponse>(response.data);\n\n      // 5. Lifecycle hook\n      await this.afterUploadFile?.(result);\n\n      // 6. Emit success event\n      this.emitEvent('upload:uploaded', { result });\n\n      await this.recordOperationMetrics('uploadFile', Date.now() - startTime, true);\n      return result;\n    } catch (error) {\n      await this.recordOperationMetrics('uploadFile', Date.now() - startTime, false);\n      const pkgError = this.wrapError(error, 'uploadFile');\n      this.emitEvent('upload:error', { error: pkgError });\n      throw pkgError;\n    } finally {\n      this.setStoresLoading(false);\n    }\n  }\n\n  /**\n   * Lifecycle hook: called before file upload.\n   * Override in subclass for custom pre-upload logic.\n   */\n  protected beforeUploadFile?(data: UploadFileRequest): Promise<void>;\n\n  /**\n   * Lifecycle hook: called after file upload.\n   * Override in subclass for custom post-upload logic.\n   */\n  protected afterUploadFile?(result: UploadFileResponse): Promise<void>;\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Bulk File Upload (via backend API → @plyaz/storage)\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Upload multiple files via backend API.\n   *\n   * Uses the uploadFiles fetcher from @plyaz/api which calls POST /upload/bulk endpoint.\n   * On the backend, this uses @plyaz/storage for actual file operations.\n   *\n   * @param data - Upload parameters (files array with base64 content)\n   * @param options - Optional service options (apiConfig, etc.)\n   * @returns Promise resolving to bulk upload result with individual file results\n   */\n  async uploadFiles(\n    data: UploadFilesRequest,\n    options?: ServiceOptions\n  ): Promise<UploadFilesResponse> {\n    await this.ensureReady();\n    const startTime = Date.now();\n\n    this.setStoresLoading(true);\n    this.emitEvent('upload:uploading', { request: data, bulk: true });\n\n    try {\n      // 1. Lifecycle hook\n      await this.beforeUploadFiles?.(data);\n\n      // 2. Call uploadFiles fetcher from @plyaz/api\n      const response = await uploadFilesFetcher(data, options);\n\n      // 3. Check response success\n      if (!this.isResponseSuccess(response)) {\n        const error = this.extractResponseError(response);\n        throw new CorePackageError('Failed to upload files', ERROR_CODES.CONTEXT_OPERATION_FAILED, {\n          context: { operation: 'uploadFiles' },\n          details: error,\n        });\n      }\n\n      // 4. Unwrap response\n      const result = this.unwrapResponseData<UploadFilesResponse>(response.data);\n\n      // 5. Lifecycle hook\n      await this.afterUploadFiles?.(result);\n\n      // 6. Emit success event\n      this.emitEvent('upload:uploaded', { result, bulk: true });\n\n      await this.recordOperationMetrics('uploadFiles', Date.now() - startTime, true);\n      return result;\n    } catch (error) {\n      await this.recordOperationMetrics('uploadFiles', Date.now() - startTime, false);\n      const pkgError = this.wrapError(error, 'uploadFiles');\n      this.emitEvent('upload:error', { error: pkgError, bulk: true });\n      throw pkgError;\n    } finally {\n      this.setStoresLoading(false);\n    }\n  }\n\n  /**\n   * Lifecycle hook: called before bulk file upload.\n   * Override in subclass for custom pre-upload logic.\n   */\n  protected beforeUploadFiles?(data: UploadFilesRequest): Promise<void>;\n\n  /**\n   * Lifecycle hook: called after bulk file upload.\n   * Override in subclass for custom post-upload logic.\n   */\n  protected afterUploadFiles?(result: UploadFilesResponse): Promise<void>;\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Document Generation (via backend API → @plyaz/storage)\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Generate a document via backend API (NO upload - returns buffer).\n   *\n   * Uses the generateDocument fetcher from @plyaz/api which calls POST /generate-document.\n   * On the backend, this uses @plyaz/storage template engine.\n   * Returns the document as base64 buffer. Use uploadFile() for generation + upload.\n   *\n   * @param data - Generation parameters (templateId, templateData, outputFormat, etc.)\n   * @param options - Optional service options (apiConfig, etc.)\n   * @returns Promise resolving to generation result { buffer, size }\n   */\n  async generateFile(\n    data: GenerateDocumentRequest,\n    options?: ServiceOptions\n  ): Promise<GenerateDocumentResponse> {\n    await this.ensureReady();\n    const startTime = Date.now();\n\n    this.setStoresLoading(true);\n    this.emitEvent('document:generating', { request: data });\n\n    try {\n      // 1. Lifecycle hook\n      await this.beforeGenerateFile?.(data);\n\n      // 2. Call generateDocument fetcher from @plyaz/api\n      // Uses default API client which has file endpoints registered\n      const response = await generateDocumentFetcher(data, options);\n\n      // 3. Check response success\n      if (!this.isResponseSuccess(response)) {\n        const error = this.extractResponseError(response);\n        throw new CorePackageError(\n          'Failed to generate document',\n          ERROR_CODES.CONTEXT_OPERATION_FAILED,\n          { context: { operation: 'generateFile' }, details: error }\n        );\n      }\n\n      // 4. Unwrap response\n      const result = this.unwrapResponseData<GenerateDocumentResponse>(response.data);\n\n      // 5. Lifecycle hook\n      await this.afterGenerateFile?.(result);\n\n      // 6. Emit success event (include request for store to build GeneratedFileItem)\n      this.emitEvent('document:generated', { result, request: data });\n\n      await this.recordOperationMetrics('generateFile', Date.now() - startTime, true);\n      return result;\n    } catch (error) {\n      await this.recordOperationMetrics('generateFile', Date.now() - startTime, false);\n      const pkgError = this.wrapError(error, 'generateFile');\n      this.emitEvent('document:error', { error: pkgError });\n      throw pkgError;\n    } finally {\n      this.setStoresLoading(false);\n    }\n  }\n\n  /**\n   * Lifecycle hook: called before document generation.\n   * Override in subclass for custom pre-generation logic.\n   */\n  protected beforeGenerateFile?(data: GenerateDocumentRequest): Promise<void>;\n\n  /**\n   * Lifecycle hook: called after document generation.\n   * Override in subclass for custom post-generation logic.\n   */\n  protected afterGenerateFile?(result: GenerateDocumentResponse): Promise<void>;\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Real-Time Streaming (via Stream Store)\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Get the stream store slice for real-time streaming.\n   * Used for subscribing to channels, registering handlers, and accessing stream state.\n   *\n   * @returns Stream store slice or undefined if not available\n   */\n  protected get streamStore(): StreamStoreSlice | undefined {\n    // Access stream slice directly from root store (it's a global slice like errors)\n    return this.getStore('stream' as keyof RootStoreSlice) as StreamStoreSlice | undefined;\n  }\n\n  /**\n   * Check if stream store is available.\n   */\n  protected get hasStreamStore(): boolean {\n    return !!this.streamStore;\n  }\n\n  /**\n   * Subscribe to a stream channel for real-time updates.\n   * Typically used for entity-specific progress (e.g., upload progress for a file).\n   *\n   * @param channel - Channel to subscribe to (e.g., 'upload:abc123')\n   *\n   * @example\n   * ```typescript\n   * // Subscribe to upload progress for a specific file\n   * this.subscribeToChannel(`upload:${fileId}`);\n   *\n   * // Subscribe to all uploads broadcast channel\n   * this.subscribeToChannel('uploads');\n   * ```\n   */\n  protected subscribeToChannel(channel: StreamChannel): void {\n    if (!this.streamStore) {\n      this.logWarn('Stream store not available, cannot subscribe to channel', { channel });\n      return;\n    }\n    this.streamStore.subscribeToChannel(channel);\n    this.logDebug('Subscribed to stream channel', { channel });\n  }\n\n  /**\n   * Subscribe to multiple stream channels at once.\n   *\n   * @param channels - Array of channels to subscribe to\n   */\n  protected subscribeToChannels(channels: StreamChannel[]): void {\n    if (!this.streamStore) {\n      this.logWarn('Stream store not available, cannot subscribe to channels', { channels });\n      return;\n    }\n    this.streamStore.subscribeToChannels(channels);\n    this.logDebug('Subscribed to stream channels', { channels });\n  }\n\n  /**\n   * Unsubscribe from a stream channel.\n   *\n   * @param channel - Channel to unsubscribe from\n   */\n  protected unsubscribeFromChannel(channel: StreamChannel): void {\n    if (!this.streamStore) return;\n    this.streamStore.unsubscribeFromChannel(channel);\n    this.logDebug('Unsubscribed from stream channel', { channel });\n  }\n\n  /**\n   * Subscribe to entity-specific progress channel.\n   * Convenience method that constructs the channel name from prefix and entity ID.\n   *\n   * @param prefix - Channel prefix (e.g., 'upload', 'download', 'generate')\n   * @param entityId - Entity ID (e.g., file ID)\n   *\n   * @example\n   * ```typescript\n   * // Subscribe to upload progress for file 'abc123'\n   * this.subscribeToEntityProgress('upload', 'abc123');\n   * // Subscribes to channel: 'upload:abc123'\n   * ```\n   */\n  protected subscribeToEntityProgress(prefix: string, entityId: string): void {\n    this.subscribeToChannel(`${prefix}:${entityId}` as StreamChannel);\n  }\n\n  /**\n   * Register a message handler for this domain.\n   * The handler will receive stream messages matching the specified filters.\n   *\n   * @param handler - Handler function to process stream messages\n   * @param options - Handler options (channels, events, priority)\n   * @returns Handler ID (use for unregistering)\n   *\n   * @example\n   * ```typescript\n   * // Register handler for upload progress\n   * const handlerId = this.registerStreamHandler(\n   *   (message) => {\n   *     if (message.event === 'upload:progress') {\n   *       this.updateUploadProgress(message.data);\n   *     }\n   *   },\n   *   {\n   *     channels: ['upload:'],\n   *     events: ['upload:progress', 'upload:completed', 'upload:failed'],\n   *   }\n   * );\n   * ```\n   */\n  protected registerStreamHandler<T = unknown>(\n    handler: StreamMessageHandler<T>,\n    options?: {\n      channels?: string[];\n      events?: string[];\n      priority?: number;\n    }\n  ): string {\n    if (!this.streamStore) {\n      this.logWarn('Stream store not available, cannot register handler');\n      return '';\n    }\n\n    // Generate unique handler ID based on service name\n    const handlerId = `${this.serviceName}-${Date.now()}`;\n    this.streamStore.registerHandler(handlerId, handler, options);\n\n    // Track for auto-cleanup on dispose\n    this._registeredStreamHandlerIds.add(handlerId);\n\n    this.logDebug('Registered stream handler', { handlerId, options });\n    return handlerId;\n  }\n\n  /**\n   * Unregister a stream message handler.\n   *\n   * @param handlerId - Handler ID returned by registerStreamHandler\n   */\n  protected unregisterStreamHandler(handlerId: string): void {\n    if (!this.streamStore || !handlerId) return;\n    this.streamStore.unregisterHandler(handlerId);\n\n    // Remove from tracking Set\n    this._registeredStreamHandlerIds.delete(handlerId);\n\n    this.logDebug('Unregistered stream handler', { handlerId });\n  }\n\n  /**\n   * Unregister all stream handlers registered by this service.\n   * Called automatically by dispose(), but can be called manually if needed.\n   */\n  protected unregisterAllStreamHandlers(): void {\n    if (!this.streamStore || this._registeredStreamHandlerIds.size === 0) return;\n\n    this._registeredStreamHandlerIds.forEach(handlerId => {\n      this.streamStore?.unregisterHandler(handlerId);\n    });\n\n    const count = this._registeredStreamHandlerIds.size;\n    this._registeredStreamHandlerIds.clear();\n\n    this.logDebug('Unregistered all stream handlers', { count });\n  }\n\n  /**\n   * Get stream messages filtered by domain scope.\n   * Convenience method that filters messages for this service's event prefix.\n   *\n   * @param filter - Additional filter criteria\n   * @returns Filtered stream messages\n   *\n   * @example\n   * ```typescript\n   * // Get recent upload progress messages for this domain\n   * const messages = this.getDomainStreamMessages({\n   *   subtype: 'upload',\n   *   limit: 10,\n   * });\n   * ```\n   */\n  protected getDomainStreamMessages(filter?: StreamMessageFilter): unknown[] {\n    if (!this.streamStore) return [];\n    // Filter by domain scope (uses eventPrefix as scope)\n    return this.streamStore.getMessages({\n      ...filter,\n      scope: this.eventPrefix as StreamMessageFilter['scope'],\n    });\n  }\n\n  /**\n   * Check if connected to stream server.\n   */\n  protected get isStreamConnected(): boolean {\n    return this.streamStore?.connected ?? false;\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Static Stream Handler Methods\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Get the stream store from Core.rootStore.\n   * Used by static methods that don't have access to instance.\n   */\n  protected static getStreamStore(): StreamStoreSlice | undefined {\n    try {\n      return Core.rootStore?.getState().stream;\n    } catch {\n      return undefined;\n    }\n  }\n\n  /**\n   * Cleanup all stream handlers using STREAM_HANDLER_IDS.\n   * Called by the cleanup function returned from registerStreamHandlers().\n   *\n   * @param handlerIds - Object with handler IDs to unregister\n   * @param onComplete - Optional callback after cleanup\n   */\n  protected static cleanupStreamHandlers(\n    handlerIds: Record<string, string>,\n    onComplete?: () => void\n  ): void {\n    const store = this.getStreamStore();\n    if (store) {\n      Object.values(handlerIds).forEach(handlerId => {\n        store.unregisterHandler(handlerId);\n      });\n    }\n    this._streamHandlersRegistered = false;\n    onComplete?.();\n  }\n\n  /**\n   * Register stream handlers from STREAM_HANDLERS declarative config.\n   *\n   * Call this from your registerStreamHandlers() override to auto-register\n   * all handlers defined in STREAM_HANDLERS.\n   *\n   * @param handlers - Array of handler declarations (defaults to this.STREAM_HANDLERS)\n   * @param verbose - Enable verbose logging\n   *\n   * @example\n   * ```typescript\n   * static override registerStreamHandlers(verbose?: boolean): () => void {\n   *   if (this._streamHandlersRegistered) return () => {};\n   *\n   *   // Auto-register from declarative config\n   *   this.registerStreamHandlersFromConfig(this.STREAM_HANDLERS, verbose);\n   *\n   *   // Optional: Add any custom logic here\n   *\n   *   this._streamHandlersRegistered = true;\n   *   return () => this.cleanupStreamHandlers(this.STREAM_HANDLER_IDS);\n   * }\n   * ```\n   */\n  protected static registerStreamHandlersFromConfig(\n    handlers: CoreStreamHandlerDeclaration[],\n    verbose?: boolean\n  ): void {\n    const streamStore = this.getStreamStore();\n    if (!streamStore) return;\n\n    // Store getter for handlers\n    const getStore: CoreStreamStoreGetter = () => {\n      try {\n        return Core.rootStore?.getState();\n      } catch {\n        return undefined;\n      }\n    };\n\n    const DEFAULT_HANDLER_PRIORITY = 100;\n    handlers.forEach(config => {\n      streamStore.registerHandler(config.id, message => config.handler(message, getStore), {\n        channels: config.channels,\n        events: config.events,\n        priority: config.priority ?? DEFAULT_HANDLER_PRIORITY,\n      });\n\n      if (verbose) {\n        logger.debug(`[StreamHandler] Registered: ${config.id}`, {\n          channels: config.channels,\n          events: config.events,\n        });\n      }\n    });\n  }\n\n  /**\n   * Register stream handlers for this domain service.\n   *\n   * Subclasses should override this static method to register their stream handlers.\n   * Use STREAM_HANDLER_IDS to define handler IDs and cleanupStreamHandlers() for cleanup.\n   *\n   * @param _verbose - Enable verbose logging\n   * @returns Cleanup function to unregister all handlers\n   *\n   * @example\n   * ```typescript\n   * class MyDomainService extends BaseFrontendDomainService<...> {\n   *   protected static readonly STREAM_HANDLER_IDS = {\n   *     MY_EVENT: 'my-domain:my-event',\n   *   } as const;\n   *\n   *   static override registerStreamHandlers(verbose?: boolean): () => void {\n   *     if (this._streamHandlersRegistered) return () => {};\n   *\n   *     const streamStore = this.getStreamStore();\n   *     if (!streamStore) return () => {};\n   *\n   *     streamStore.registerHandler<MyEventType>(\n   *       this.STREAM_HANDLER_IDS.MY_EVENT,\n   *       (message) => { // Handle message.data (typed!)  },\n   *       { channels: ['my-channel'], events: ['my-event'] }\n   *     );\n   *\n   *     this._streamHandlersRegistered = true;\n   *     return () => this.cleanupStreamHandlers(this.STREAM_HANDLER_IDS);\n   *   }\n   * }\n   * ```\n   */\n  static registerStreamHandlers(verbose?: boolean): () => void {\n    // Skip if already registered\n    if (this._streamHandlersRegistered) {\n      if (verbose) {\n        logger.debug(`[${this.name}] Stream handlers already registered`);\n      }\n      return () => {};\n    }\n\n    // Skip if no handlers defined\n    if (!this.STREAM_HANDLERS || this.STREAM_HANDLERS.length === 0) {\n      return () => {};\n    }\n\n    // Get stream store\n    const streamStore = this.getStreamStore();\n    if (!streamStore) {\n      if (verbose) {\n        logger.warn(`[${this.name}] Stream store not available, skipping stream handlers`);\n      }\n      return () => {};\n    }\n\n    // Auto-register from declarative config\n    this.registerStreamHandlersFromConfig(this.STREAM_HANDLERS, verbose);\n\n    this._streamHandlersRegistered = true;\n\n    if (verbose) {\n      logger.info(`[${this.name}] Stream handlers registered`, {\n        handlers: Object.values(this.STREAM_HANDLER_IDS),\n      });\n    }\n\n    // Return cleanup function\n    return () => {\n      this.cleanupStreamHandlers(this.STREAM_HANDLER_IDS, () => {\n        if (verbose) {\n          logger.debug(`[${this.name}] Stream handlers unregistered`);\n        }\n      });\n    };\n  }\n}\n","/**\n * Base Mapper\n *\n * Abstract base class for domain mappers handling data transformation.\n * Supports all HTTP operations with corresponding mapping methods.\n *\n * Mapping concerns:\n * - Request mapping (domain → API DTO for POST, PUT, PATCH, DELETE)\n * - Response mapping (API DTO → domain)\n * - Store mapping (domain ↔ Zustand state)\n * - Query mapping (filters → query params)\n *\n * Note: Validation is handled by BaseValidator, not here.\n *\n * @example\n * ```typescript\n * class ExampleMapper extends BaseMapper<\n *   ExampleEntity,      // Domain model\n *   ExampleResponseDTO, // API response\n *   CreateExampleDTO,   // POST body\n *   UpdateExampleDTO,   // PUT body\n *   PatchExampleDTO,    // PATCH body\n *   QueryExampleDTO,    // GET params\n *   ExampleStoreItem    // Store state\n * > {\n *   toDomain(dto) { ... }\n *   toCreateDTO(data) { ... }\n *   // ... implement needed methods\n * }\n * ```\n */\n// Import for local use\nimport type { CoreBaseMapperInstance } from '@plyaz/types/core';\n\n/**\n * Abstract base mapper with default implementations\n *\n * Required to implement:\n * - toDomain(dto): Convert API response to domain model\n *\n * Optional to implement (based on your needs):\n * - toCreateDTO(data): For POST requests\n * - toUpdateDTO(data): For PUT requests\n * - toPatchDTO(data): For PATCH requests\n * - toQueryDTO(filters): For GET query params\n * - toStoreState(domain): Custom store state shape\n * - fromStoreState(state): Restore domain from store\n */\nexport abstract class BaseMapper<\n  TDomain,\n  TResponseDTO,\n  TCreateDTO = unknown,\n  TUpdateDTO = TCreateDTO,\n  TPatchDTO = Partial<TCreateDTO>,\n  TQueryDTO = unknown,\n  TStoreState = TDomain,\n> implements\n    CoreBaseMapperInstance<\n      TDomain,\n      TResponseDTO,\n      TCreateDTO,\n      TUpdateDTO,\n      TPatchDTO,\n      TQueryDTO,\n      TStoreState\n    >\n{\n  // ─────────────────────────────────────────────────────────────────\n  // Abstract methods - must be implemented\n  // ─────────────────────────────────────────────────────────────────\n\n  /**\n   * Convert API response DTO to domain model\n   * Handle snake_case → camelCase, add computed properties\n   */\n  abstract toDomain(dto: TResponseDTO): TDomain;\n\n  // ─────────────────────────────────────────────────────────────────\n  // Request Mapping - override as needed\n  // ─────────────────────────────────────────────────────────────────\n\n  /**\n   * Convert domain data to create DTO (POST body)\n   * Handle camelCase → snake_case, pick required fields\n   */\n  toCreateDTO?(data: Partial<TDomain>): TCreateDTO;\n\n  /**\n   * Convert domain data to update DTO (PUT body - full replacement)\n   * Default: same as toCreateDTO\n   */\n  toUpdateDTO?(data: Partial<TDomain>): TUpdateDTO;\n\n  /**\n   * Convert domain data to patch DTO (PATCH body - partial)\n   * Default: picks only defined fields\n   */\n  toPatchDTO?(data: Partial<TDomain>): TPatchDTO;\n\n  /**\n   * Convert filter object to query params DTO (GET)\n   * Handle pagination, sorting, filtering\n   */\n  toQueryDTO?(filters: Partial<TQueryDTO>): TQueryDTO;\n\n  // ─────────────────────────────────────────────────────────────────\n  // Response Mapping - default implementations\n  // ─────────────────────────────────────────────────────────────────\n\n  /**\n   * Convert database row/repository result to response DTO\n   * Override to map repository output to API response format\n   * Useful when repository returns different format than API expects\n   */\n  toResponseDTO?(row: unknown): TResponseDTO;\n\n  /**\n   * Map array of DTOs to domain models\n   */\n  toDomainList(dtos: TResponseDTO[]): TDomain[] {\n    return dtos.map(dto => this.toDomain(dto));\n  }\n\n  // ─────────────────────────────────────────────────────────────────\n  // Store Mapping - default implementations\n  // ─────────────────────────────────────────────────────────────────\n\n  /**\n   * Convert domain model to store state (serializable)\n   * Default: strips functions, keeps data\n   */\n  toStoreState(domain: TDomain): TStoreState {\n    const state = {} as Record<string, unknown>;\n    for (const [key, value] of Object.entries(domain as Record<string, unknown>)) {\n      if (typeof value !== 'function') {\n        // Convert Date to ISO string for serialization\n        if (value instanceof Date) {\n          state[key] = value.toISOString();\n        } else {\n          state[key] = value;\n        }\n      }\n    }\n    return state as TStoreState;\n  }\n\n  /**\n   * Convert array of domain models to aggregated store state\n   * Override to customize how multiple items map to store\n   * Default: returns array of individual store states (as Partial since shape may differ)\n   */\n  toStoreStateList?(domains: TDomain[]): Partial<TStoreState> {\n    // Default: map each domain to store state and return as array\n    // Subclasses should override for custom aggregation (e.g., flags → Record<key, value>)\n    return domains.map(d => this.toStoreState(d)) as unknown as Partial<TStoreState>;\n  }\n\n  /**\n   * Restore domain model from store state\n   * Override to restore computed properties/methods\n   */\n  fromStoreState(state: TStoreState): TDomain {\n    return state as unknown as TDomain;\n  }\n}\n","/**\n * Base Validator\n *\n * Abstract base class for domain validators.\n * Handles validation AND sanitization using Zod schemas from @plyaz/types.\n *\n * Supports all HTTP operations:\n * - create (POST)\n * - update (PUT - full replacement)\n * - patch (PATCH - partial update)\n * - delete (DELETE with options)\n * - query (GET params)\n *\n * @example\n * ```typescript\n * import { CreateExampleSchema, PatchExampleSchema } from '@plyaz/types/examples';\n *\n * class ExampleValidator extends BaseValidator<\n *   CreateExampleDTO,   // create\n *   UpdateExampleDTO,   // update (full)\n *   PatchExampleDTO,    // patch (partial)\n *   DeleteExampleDTO,   // delete options\n *   QueryExampleDTO     // query params\n * > {\n *   constructor() {\n *     super({\n *       createSchema: CreateExampleSchema,\n *       patchSchema: PatchExampleSchema,\n *       // ... other schemas\n *     });\n *   }\n * }\n * ```\n */\n\nimport { ValidateAndFormatErrors, ValidationError } from '@plyaz/errors';\nimport type {\n  ValidationIssue,\n  BaseErrorContext,\n  InternalValidationSchema,\n} from '@plyaz/types/errors';\nimport { API_ERROR_CODES } from '@plyaz/types/errors';\nimport { HTTP_STATUS } from '@plyaz/config';\nimport type {\n  CoreValidationResult,\n  CoreValidatorConfig,\n  CoreBaseValidatorInstance,\n} from '@plyaz/types/core';\n\n/**\n * Abstract base validator with default implementations\n */\nexport abstract class BaseValidator<\n  TCreate = unknown,\n  TUpdate = TCreate,\n  TPatch = Partial<TCreate>,\n  TDelete = unknown,\n  TQuery = unknown,\n> implements CoreBaseValidatorInstance<TCreate, TUpdate, TPatch, TDelete, TQuery>\n{\n  protected readonly config: CoreValidatorConfig<TCreate, TUpdate, TPatch, TDelete, TQuery>;\n\n  constructor(config: CoreValidatorConfig<TCreate, TUpdate, TPatch, TDelete, TQuery> = {}) {\n    this.config = config;\n  }\n\n  // ─────────────────────────────────────────────────────────────────\n  // Validation Methods (return ValidationResult)\n  // ─────────────────────────────────────────────────────────────────\n\n  /**\n   * Validate data for create operation (POST)\n   */\n  validateCreate(data: unknown): CoreValidationResult<TCreate> {\n    if (!this.config.createSchema) {\n      return { success: true, data: data as TCreate };\n    }\n    return this.validate(data, this.config.createSchema);\n  }\n\n  /**\n   * Validate data for full update operation (PUT)\n   */\n  validateUpdate(data: unknown): CoreValidationResult<TUpdate> {\n    if (!this.config.updateSchema) {\n      return { success: true, data: data as TUpdate };\n    }\n    return this.validate(data, this.config.updateSchema);\n  }\n\n  /**\n   * Validate data for partial update operation (PATCH)\n   */\n  validatePatch(data: unknown): CoreValidationResult<TPatch> {\n    if (!this.config.patchSchema) {\n      return { success: true, data: data as TPatch };\n    }\n    return this.validate(data, this.config.patchSchema);\n  }\n\n  /**\n   * Validate data for delete operation (DELETE with options)\n   */\n  validateDelete(data: unknown): CoreValidationResult<TDelete> {\n    if (!this.config.deleteSchema) {\n      return { success: true, data: data as TDelete };\n    }\n    return this.validate(data, this.config.deleteSchema);\n  }\n\n  /**\n   * Validate query parameters (GET list)\n   */\n  validateQuery(data: unknown): CoreValidationResult<TQuery> {\n    if (!this.config.querySchema) {\n      return { success: true, data: data as TQuery };\n    }\n    return this.validate(data, this.config.querySchema);\n  }\n\n  // ─────────────────────────────────────────────────────────────────\n  // OrThrow Methods (throw ValidationError on failure)\n  // ─────────────────────────────────────────────────────────────────\n\n  /**\n   * Validate and throw if invalid (for create)\n   * @throws ValidationError[] (array) if validation fails\n   */\n  validateCreateOrThrow(data: unknown): TCreate {\n    const result = this.validateCreate(data);\n    if (!result.success && result.errors) {\n      const validationErrors = this.toValidationErrorArray(result.errors);\n      if (validationErrors.length > 0) {\n        throw validationErrors; // Throw array of errors\n      }\n    }\n    return result.data!;\n  }\n\n  /**\n   * Validate and throw if invalid (for update)\n   * @throws ValidationError[] (array) if validation fails\n   */\n  validateUpdateOrThrow(data: unknown): TUpdate {\n    const result = this.validateUpdate(data);\n    if (!result.success && result.errors) {\n      const validationErrors = this.toValidationErrorArray(result.errors);\n      if (validationErrors.length > 0) {\n        throw validationErrors; // Throw array of errors\n      }\n    }\n    return result.data!;\n  }\n\n  /**\n   * Validate and throw if invalid (for patch)\n   * @throws ValidationError[] (array) if validation fails\n   */\n  validatePatchOrThrow(data: unknown): TPatch {\n    const result = this.validatePatch(data);\n    if (!result.success && result.errors) {\n      const validationErrors = this.toValidationErrorArray(result.errors);\n      if (validationErrors.length > 0) {\n        throw validationErrors; // Throw array of errors\n      }\n    }\n    return result.data!;\n  }\n\n  /**\n   * Validate and throw if invalid (for delete)\n   * @throws ValidationError[] (array) if validation fails\n   */\n  validateDeleteOrThrow(data: unknown): TDelete {\n    const result = this.validateDelete(data);\n    if (!result.success && result.errors) {\n      const validationErrors = this.toValidationErrorArray(result.errors);\n      if (validationErrors.length > 0) {\n        throw validationErrors; // Throw array of errors\n      }\n    }\n    return result.data!;\n  }\n\n  /**\n   * Validate and throw if invalid (for query)\n   * @throws ValidationError[] (array) if validation fails\n   */\n  validateQueryOrThrow(data: unknown): TQuery {\n    const result = this.validateQuery(data);\n    if (!result.success && result.errors) {\n      const validationErrors = this.toValidationErrorArray(result.errors);\n      if (validationErrors.length > 0) {\n        throw validationErrors; // Throw array of errors\n      }\n    }\n    return result.data!;\n  }\n\n  // ─────────────────────────────────────────────────────────────────\n  // Protected Methods\n  // ─────────────────────────────────────────────────────────────────\n\n  /**\n   * Internal validation using ValidateAndFormatErrors from @plyaz/errors\n   * This handles both validation AND sanitization (via Zod transforms)\n   */\n  protected validate<T>(\n    data: unknown,\n    schema: InternalValidationSchema<T>\n  ): CoreValidationResult<T> {\n    const result = ValidateAndFormatErrors(schema, data);\n\n    if (!result.success) {\n      return {\n        success: false,\n        errors: result.errors,\n      };\n    }\n\n    return {\n      success: true,\n      data: result.data as T,\n    };\n  }\n\n  /**\n   * Convert ValidationIssue[] to array of ValidationError objects\n   * Each validation issue becomes a separate ValidationError\n   */\n  protected toValidationErrorArray(issues?: ValidationIssue[]): ValidationError[] {\n    if (!issues || issues.length === 0) {\n      return [];\n    }\n\n    return issues.map(issue => {\n      const field = issue.path.join('.');\n      return new ValidationError(\n        API_ERROR_CODES.VALIDATION_FAILED,\n        HTTP_STATUS.BAD_REQUEST,\n        issue.message,\n        {\n          field,\n          path: issue.path,\n          code: issue.code,\n        }\n      );\n    });\n  }\n\n  /**\n   * Convert ValidationIssue[] to BaseErrorContext (legacy)\n   * @deprecated Use toValidationErrorArray instead\n   */\n  protected toErrorContext(issues?: ValidationIssue[]): BaseErrorContext {\n    if (!issues || issues.length === 0) {\n      return {};\n    }\n    return {\n      errors: issues.map(issue => ({\n        errorCode: issue.code,\n        message: issue.message,\n        field: issue.path.join('.'),\n        context: {\n          path: issue.path,\n        },\n      })),\n    };\n  }\n}\n","/**\n * Mapper Utility Functions\n *\n * Common utilities for data transformation in mappers.\n */\n\n/**\n * Convert snake_case to camelCase\n */\nexport function snakeToCamel(str: string): string {\n  return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n}\n\n/**\n * Convert camelCase to snake_case\n */\nexport function camelToSnake(str: string): string {\n  return str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);\n}\n\n/**\n * Parse ISO date string to Date object\n */\nexport function parseDate(dateString: string | null | undefined): Date | null {\n  if (!dateString) return null;\n  const date = new Date(dateString);\n  return isNaN(date.getTime()) ? null : date;\n}\n\n/**\n * Format Date to ISO string for API\n */\nexport function formatDate(date: Date | null | undefined): string | null {\n  return date?.toISOString() ?? null;\n}\n\n/**\n * Trim string if defined\n */\nexport function trimString(str: string | undefined): string | undefined {\n  return str?.trim();\n}\n\n/**\n * Pick only defined values from object (for PATCH requests)\n */\nexport function pickDefined<T extends Record<string, unknown>>(obj: T): Partial<T> {\n  const result: Partial<T> = {};\n  for (const [key, value] of Object.entries(obj)) {\n    if (value !== undefined) {\n      (result as Record<string, unknown>)[key] = value;\n    }\n  }\n  return result;\n}\n\n/**\n * Convert object keys from snake_case to camelCase\n */\nexport function keysToCamel<T extends Record<string, unknown>>(obj: T): Record<string, unknown> {\n  const result: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(obj)) {\n    result[snakeToCamel(key)] = value;\n  }\n  return result;\n}\n\n/**\n * Convert object keys from camelCase to snake_case\n */\nexport function keysToSnake<T extends Record<string, unknown>>(obj: T): Record<string, unknown> {\n  const result: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(obj)) {\n    result[camelToSnake(key)] = value;\n  }\n  return result;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Nullable/Optional Conversion Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Map nullable DB field to optional response field.\n * Converts null/undefined to undefined for API responses.\n */\nexport function toOptional<T>(value: T | null | undefined): T | undefined {\n  return value ?? undefined;\n}\n\n/**\n * Map optional entity value to nullable DB field.\n * Converts undefined to null for database storage.\n */\nexport function toNullable<T>(value: T | undefined): T | null {\n  return value ?? null;\n}\n\n/**\n * Map optional Date to nullable ISO string for DB storage.\n * Converts Date to ISO string, undefined to null.\n */\nexport function dateToNullable(value: Date | undefined): string | null {\n  return value?.toISOString() ?? null;\n}\n\n/**\n * Get field value from object supporting both snake_case and camelCase keys.\n * Useful for mappers that need to handle responses in either format.\n * Prefers camelCase if both exist.\n */\nexport function getField<T>(\n  data: Record<string, unknown>,\n  snakeKey: string,\n  camelKey: string\n): T | undefined {\n  return (data[camelKey] ?? data[snakeKey]) as T | undefined;\n}\n\n/**\n * Parse date from either string or Date, handling both formats.\n * Returns undefined for invalid dates.\n */\nexport function parseDateSafe(value: unknown): Date | undefined {\n  if (!value) return undefined;\n  if (value instanceof Date) return isNaN(value.getTime()) ? undefined : value;\n  const date = new Date(value as string);\n  return isNaN(date.getTime()) ? undefined : date;\n}\n","/**\n * Frontend Event Persistence Handler\n *\n * Simple, scalable pattern for handling domain events to update frontend store.\n *\n * Features:\n * - Event-driven store updates (works from ANY service via CoreEventManager)\n * - Registration-based (prevents duplicate handlers)\n * - Safe for SSR (store getter called per event)\n * - Proper cleanup tracking\n *\n * @example\n * ```typescript\n * FrontendEventPersistenceHandler.register<FilesFrontendStoreSlice, FilesUploadEventPayload>({\n *   domain: 'files',\n *   events: {\n *     'files:upload:uploading': {\n *       handler: (store) => store.setUploading(true),\n *     },\n *     'files:upload:uploaded': {\n *       handler: (store, payload) => {\n *         store.setUploading(false);\n *         if (payload.result) {\n *           store.addUpload(FilesMapper.toDomain(payload.result));\n *         }\n *       },\n *     },\n *     'files:upload:error': {\n *       handler: (store) => store.setUploading(false),\n *     },\n *   },\n *   getStore: () => Core._rootStore?.getState().files,\n * });\n * ```\n */\n\nimport { PackageLogger } from '@plyaz/logger';\nimport { CoreEventManager } from './CoreEventManager';\nimport type {\n  DomainFrontendEventConfig,\n  CoreEvent,\n  FrontendEventHandlerConfig,\n} from '@plyaz/types/core';\n\nconst logger = new PackageLogger({ packageName: 'core', service: 'FrontendEventPersistence' });\n\n/**\n * Frontend Event Persistence Handler\n *\n * Manages event subscriptions for updating frontend store state.\n * Provides a scalable, reusable pattern for all domains.\n */\nexport class FrontendEventPersistenceHandler {\n  private static registeredDomains = new Map<string, () => void>();\n  private static cleanupFns: Array<() => void> = [];\n\n  /**\n   * Register event handlers for a domain\n   *\n   * @typeParam TStore - Store slice type\n   * @typeParam TPayload - Event payload type\n   * @param config - Domain event configuration\n   */\n  static register<TStore, TPayload = unknown>(\n    config: DomainFrontendEventConfig<TStore, TPayload>\n  ): void {\n    const { domain, events, getStore, verbose } = config;\n\n    // Prevent duplicate registration\n    if (this.registeredDomains.has(domain)) {\n      logger.warn(`Domain '${domain}' already registered for frontend event handling`);\n      return;\n    }\n\n    if (verbose) {\n      logger.info(`Registering frontend event handling for domain: ${domain}`);\n    }\n\n    // Register handlers for each event\n    for (const [eventName, eventConfig] of Object.entries(events)) {\n      const typedConfig = eventConfig as FrontendEventHandlerConfig<TStore, TPayload>;\n\n      const cleanup = CoreEventManager.on<TPayload>(eventName, (event: CoreEvent<TPayload>) => {\n        void (async () => {\n          try {\n            const store = getStore();\n\n            if (!store) {\n              if (verbose) {\n                logger.debug(`Event ${eventName}: Store not available, skipping`);\n              }\n              return;\n            }\n\n            await typedConfig.handler(store, event.data);\n\n            if (verbose) {\n              logger.debug(`Event ${eventName}: Handler executed`);\n            }\n          } catch (error) {\n            logger.error(`Event ${eventName}: Handler failed`, { error, event });\n          }\n        })();\n      });\n\n      this.cleanupFns.push(cleanup);\n    }\n\n    // Store cleanup function for this domain\n    this.registeredDomains.set(domain, () => {\n      if (verbose) {\n        logger.info(`Unregistering frontend event handling for domain: ${domain}`);\n      }\n    });\n  }\n\n  /**\n   * Unregister all event handlers\n   */\n  static unregisterAll(): void {\n    for (const cleanup of this.cleanupFns) {\n      cleanup();\n    }\n    this.cleanupFns = [];\n    this.registeredDomains.clear();\n    logger.info('All frontend event handlers unregistered');\n  }\n\n  /**\n   * Check if a domain is registered\n   */\n  static isRegistered(domain: string): boolean {\n    return this.registeredDomains.has(domain);\n  }\n\n  /**\n   * Get list of registered domains\n   */\n  static getRegisteredDomains(): string[] {\n    return Array.from(this.registeredDomains.keys());\n  }\n}\n","/* eslint-disable no-undef */\n/**\n * Memory Cache Strategy\n *\n * In-memory cache implementation for fast local caching.\n * This will be moved to @plyaz/core when the package structure is finalized.\n *\n * @fileoverview Memory cache strategy implementation\n * @version 1.0.0\n */\n\nimport type { CacheStrategy, CacheEntry, CacheStats, MemoryCacheConfig } from '@plyaz/types';\nimport { CACHE_MAX_SIZE_DEFAULT, CACHE_CLEANUP_INTERVAL_DEFAULT } from '@plyaz/config';\n\n/**\n * In-memory cache strategy implementation.\n * Provides fast caching for single-instance applications.\n *\n * @class MemoryCacheStrategy\n * @implements {CacheStrategy}\n *\n * @example\n * ```typescript\n * const cache = new MemoryCacheStrategy({\n *   maxEntries: 500,\n *   cleanupInterval: 30000\n * });\n *\n * await cache.set('key', entry);\n * const cached = await cache.get('key');\n * ```\n */\nexport class MemoryCacheStrategy implements CacheStrategy {\n  private cache = new Map<string, CacheEntry>();\n  private accessOrder = new Map<string, number>();\n  private stats = {\n    hits: 0,\n    misses: 0,\n    sets: 0,\n    deletes: 0,\n  };\n  private cleanupTimer?: NodeJS.Timeout;\n  private readonly maxSize: number;\n  private readonly cleanupInterval: number;\n  private readonly onEvict?: (key: string, entry: CacheEntry) => void;\n\n  /**\n   * Creates a new memory cache strategy.\n   *\n   * @param config - Memory cache configuration\n   */\n  constructor(config: MemoryCacheConfig = {}) {\n    const defaultConfig = {\n      maxEntries: CACHE_MAX_SIZE_DEFAULT,\n      cleanupInterval: CACHE_CLEANUP_INTERVAL_DEFAULT,\n    };\n\n    this.maxSize = config.maxSize ?? config.maxEntries ?? defaultConfig.maxEntries;\n    this.cleanupInterval = config.cleanupInterval ?? defaultConfig.cleanupInterval;\n    this.onEvict = config.onEvict;\n\n    // Start cleanup timer\n    this.startCleanup();\n  }\n\n  /**\n   * Stores a cache entry in memory.\n   *\n   * @param key - Cache key\n   * @param entry - Cache entry to store\n   * @returns Promise that resolves when entry is stored\n   */\n  async set<T>(key: string, entry: CacheEntry<T>): Promise<void> {\n    // If maxSize is 0, don't store anything\n    if (this.maxSize === 0) {\n      this.stats.sets++;\n      return;\n    }\n\n    // Check if we need to evict entries to make room\n    // Only evict if this is a new key and we're at capacity\n    if (!this.cache.has(key) && this.cache.size >= this.maxSize) {\n      this.evictOldestEntries();\n    }\n\n    this.cache.set(key, entry);\n    this.accessOrder.set(key, Date.now());\n    this.stats.sets++;\n  }\n\n  /**\n   * Retrieves a cache entry from memory.\n   *\n   * @param key - Cache key\n   * @returns Promise that resolves to cache entry or null if not found\n   */\n  async get<T>(key: string): Promise<CacheEntry<T> | null> {\n    const entry = this.cache.get(key) as CacheEntry<T> | undefined;\n\n    if (!entry) {\n      this.stats.misses++;\n      return null;\n    }\n\n    // Update access time for LRU\n    this.accessOrder.set(key, Date.now());\n    this.stats.hits++;\n    return entry;\n  }\n\n  /**\n   * Removes a cache entry from memory.\n   *\n   * @param key - Cache key to remove\n   * @returns Promise that resolves when entry is removed\n   */\n  async delete(key: string): Promise<void> {\n    this.cache.delete(key);\n    this.accessOrder.delete(key);\n    this.stats.deletes++;\n  }\n\n  /**\n   * Clears all cache entries from memory.\n   *\n   * @returns Promise that resolves when cache is cleared\n   */\n  async clear(): Promise<void> {\n    this.cache.clear();\n    this.accessOrder.clear();\n    this.stats.hits = 0;\n    this.stats.misses = 0;\n    this.stats.sets = 0;\n    this.stats.deletes = 0;\n  }\n\n  /**\n   * Gets cache statistics.\n   *\n   * @returns Promise that resolves to cache statistics\n   */\n  async getStats(): Promise<CacheStats> {\n    const totalRequests = this.stats.hits + this.stats.misses;\n    const hitRatio = totalRequests > 0 ? this.stats.hits / totalRequests : 0;\n\n    return {\n      hits: this.stats.hits,\n      misses: this.stats.misses,\n      sets: this.stats.sets,\n      deletes: this.stats.deletes,\n      size: this.cache.size,\n      hitRatio,\n    };\n  }\n\n  /**\n   * Disposes of the memory cache and cleans up resources.\n   *\n   * @returns Promise that resolves when cleanup is complete\n   */\n  async dispose(): Promise<void> {\n    if (this.cleanupTimer) {\n      clearInterval(this.cleanupTimer);\n      this.cleanupTimer = undefined;\n    }\n\n    await this.clear();\n  }\n\n  /**\n   * Starts the periodic cleanup of expired entries.\n   *\n   * @private\n   */\n  private startCleanup(): void {\n    this.cleanupTimer = setInterval(() => {\n      this.cleanupExpiredEntries();\n    }, this.cleanupInterval);\n\n    if (this.cleanupTimer && typeof this.cleanupTimer.unref === 'function') {\n      this.cleanupTimer.unref();\n    }\n  }\n\n  /**\n   * Removes expired entries from the cache.\n   *\n   * @private\n   */\n  private cleanupExpiredEntries(): void {\n    const now = Date.now();\n    const expiredKeys: string[] = [];\n\n    for (const [key, entry] of Array.from(this.cache.entries())) {\n      if (now > entry.expiresAt) {\n        expiredKeys.push(key);\n      }\n    }\n\n    for (const key of expiredKeys) {\n      const entry = this.cache.get(key);\n      this.cache.delete(key);\n      this.accessOrder.delete(key);\n      if (entry && this.onEvict) {\n        this.onEvict(key, entry);\n      }\n    }\n  }\n\n  /**\n   * Evicts the oldest entries when cache is full.\n   * Uses LRU-like eviction by removing the oldest entries by creation time.\n   *\n   * @private\n   */\n  private evictOldestEntries(): void {\n    if (this.maxSize === 0) {\n      // If maxSize is 0, don't store anything\n      this.cache.clear();\n      this.accessOrder.clear();\n      return;\n    }\n\n    const EVICTION_PERCENTAGE = 0.1; // Evict 10% of entries\n    const entriesToEvict = Math.max(1, Math.ceil(this.maxSize * EVICTION_PERCENTAGE));\n\n    // Sort by access time (LRU)\n    const sortedEntries = Array.from(this.accessOrder.entries())\n      .sort(([, timeA], [, timeB]) => timeA - timeB)\n      .slice(0, entriesToEvict);\n\n    for (const [key] of sortedEntries) {\n      const entry = this.cache.get(key);\n      this.cache.delete(key);\n      this.accessOrder.delete(key);\n      if (entry && this.onEvict) {\n        this.onEvict(key, entry);\n      }\n    }\n  }\n}\n","/**\n * Cache Manager - Core Caching Layer\n *\n * Main cache orchestration service that manages different caching strategies.\n * This will be moved to @plyaz/core when the package structure is finalized.\n *\n * @fileoverview Core caching infrastructure\n * @version 1.0.0\n */\n\nimport { TIME_CONSTANTS } from '@plyaz/config';\nimport { ERROR_CODES } from '@plyaz/types';\nimport { CorePackageError } from '@plyaz/errors';\nimport { MemoryCacheStrategy } from './strategies/memory';\nimport type { CacheStrategy, CacheConfig, CacheEntry, CacheManagerStats } from '@plyaz/types';\n\n/**\n * Cache manager that orchestrates different caching strategies.\n * Provides a unified interface for caching across the application.\n *\n * @class CacheManager\n *\n * @example\n * ```typescript\n * const cache = new CacheManager({\n *   isEnabled: true,\n *   ttl: 300,\n *   strategy: 'redis',\n *   redisConfig: { url: 'redis://localhost:6379' }\n * });\n *\n * await cache.set('key', value);\n * const cached = await cache.get('key');\n * ```\n */\nexport class CacheManager {\n  private strategy: CacheStrategy | null = null;\n  private strategyPromise: Promise<CacheStrategy> | null = null;\n\n  /**\n   * Creates a new cache manager with the specified configuration.\n   *\n   * @param config - Cache configuration\n   */\n  constructor(private config: CacheConfig) {\n    // Strategy is created lazily on first use\n  }\n\n  /**\n   * Gets the cache strategy, initializing it if needed.\n   * Uses lazy initialization to support dynamic imports for Redis.\n   */\n  private async getStrategy(): Promise<CacheStrategy> {\n    if (this.strategy) return this.strategy;\n    if (this.strategyPromise) return this.strategyPromise;\n\n    this.strategyPromise = this.createStrategy(this.config);\n    this.strategy = await this.strategyPromise;\n    return this.strategy;\n  }\n\n  /**\n   * Stores a value in the cache.\n   *\n   * @template T - Type of the value to cache\n   * @param key - Cache key\n   * @param value - Value to cache\n   * @param ttl - Optional TTL override in seconds\n   * @returns Promise that resolves when value is cached\n   */\n  async set<T>(key: string, value: T, ttl?: number): Promise<void> {\n    if (!this.config.isEnabled) return;\n\n    const finalTtl = ttl ?? this.config.ttl;\n    const entry: CacheEntry<T> = {\n      data: value,\n      expiresAt: Date.now() + finalTtl * TIME_CONSTANTS.MILLISECONDS_PER_SECOND,\n      createdAt: Date.now(),\n    };\n\n    const strategy = await this.getStrategy();\n    await strategy.set(key, entry);\n  }\n\n  /**\n   * Retrieves a value from the cache.\n   *\n   * @template T - Expected type of the cached value\n   * @param key - Cache key\n   * @returns Promise that resolves to cached value or null if not found/expired\n   */\n  async get<T>(key: string): Promise<T | null> {\n    if (!this.config.isEnabled) return null;\n\n    const strategy = await this.getStrategy();\n    const entry = await strategy.get<T>(key);\n    if (!entry) return null;\n\n    // Check if entry has expired\n    if (Date.now() > entry.expiresAt) {\n      await strategy.delete(key);\n      return null;\n    }\n\n    return entry.data;\n  }\n\n  /**\n   * Removes a value from the cache.\n   *\n   * @param key - Cache key to remove\n   * @returns Promise that resolves when value is removed\n   */\n  async delete(key: string): Promise<void> {\n    if (!this.config.isEnabled) return;\n    const strategy = await this.getStrategy();\n    await strategy.delete(key);\n  }\n\n  /**\n   * Clears all cached values.\n   *\n   * @returns Promise that resolves when cache is cleared\n   */\n  async clear(): Promise<void> {\n    if (!this.config.isEnabled) return;\n    const strategy = await this.getStrategy();\n    await strategy.clear();\n  }\n\n  /**\n   * Checks if a key exists in the cache.\n   *\n   * @param key - Cache key to check\n   * @returns Promise that resolves to true if key exists and is not expired\n   */\n  async has(key: string): Promise<boolean> {\n    if (!this.config.isEnabled) return false;\n\n    const strategy = await this.getStrategy();\n    const entry = await strategy.get(key);\n    if (!entry) return false;\n\n    // Check if entry has expired\n    if (Date.now() > entry.expiresAt) {\n      await strategy.delete(key);\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Gets cache statistics.\n   *\n   * @returns Promise that resolves to cache statistics\n   */\n  async getStats(): Promise<CacheManagerStats> {\n    const strategy = await this.getStrategy();\n    return strategy.getStats();\n  }\n\n  /**\n   * Creates the appropriate cache strategy based on configuration.\n   * Uses dynamic import for Redis to avoid bundling ioredis in frontend.\n   *\n   * @private\n   * @param config - Cache configuration\n   * @returns Promise that resolves to cache strategy instance\n   */\n  private async createStrategy(config: CacheConfig): Promise<CacheStrategy> {\n    switch (config.strategy) {\n      case 'redis': {\n        if (!config.redisConfig) {\n          throw new CorePackageError(\n            'Redis configuration is required for Redis cache strategy',\n            ERROR_CODES.CLIENT_INVALID_CONFIG\n          );\n        }\n        // Dynamic import to avoid bundling ioredis in frontend builds\n        const { RedisCacheStrategy } = await import('./strategies/redis');\n        return new RedisCacheStrategy(config.redisConfig);\n      }\n\n      case 'memory':\n      default:\n        return new MemoryCacheStrategy(config.memoryConfig);\n    }\n  }\n\n  /**\n   * Disposes of the cache manager and cleans up resources.\n   *\n   * @returns Promise that resolves when cleanup is complete\n   */\n  async dispose(): Promise<void> {\n    if (this.strategy) {\n      await this.strategy.dispose?.();\n    }\n  }\n}\n\nexport { CacheKeyBuilder } from './CacheKeyBuilder';\n","/**\n * Example Mapper\n *\n * Demonstrates extending BaseMapper for a domain entity.\n * Uses types from @plyaz/types/examples.\n *\n * Note: Validation is handled by ExampleValidator, not here.\n */\n\nimport { PAGE_SIZES } from '@plyaz/config';\nimport { BaseMapper, trimString } from '../../base';\nimport { getField, parseDateSafe } from '../../../utils/mapperUtils';\nimport type {\n  ExampleEntity,\n  ExampleResponseDTO,\n  ExampleStoreItem,\n  CreateExampleDTO,\n  UpdateExampleDTO,\n  PatchExampleDTO,\n  QueryExampleDTO,\n} from '@plyaz/types/examples';\n\n/** Default pagination values */\nconst PAGINATION_DEFAULTS = {\n  PAGE: 1,\n  LIMIT: PAGE_SIZES.MEDIUM,\n} as const;\n\n/**\n * Example Mapper implementation\n *\n * Supports:\n * - toDomain: API response → Domain\n * - toCreateDTO: Domain → POST body\n * - toPatchDTO: Domain → PATCH body\n * - toStoreState: Domain → Zustand store\n */\nclass ExampleMapperClass extends BaseMapper<\n  ExampleEntity,\n  ExampleResponseDTO,\n  CreateExampleDTO,\n  UpdateExampleDTO,\n  PatchExampleDTO,\n  QueryExampleDTO,\n  ExampleStoreItem\n> {\n  /**\n   * API DTO → Domain Model\n   * Handles both snake_case (DTO) and camelCase (Entity) input formats\n   */\n  toDomain(dto: ExampleResponseDTO | ExampleEntity): ExampleEntity {\n    const data = dto as unknown as Record<string, unknown>;\n\n    return {\n      id: dto.id,\n      name: dto.name,\n      description: dto.description,\n      ownerId: getField<string>(data, 'owner_id', 'ownerId') ?? '',\n      status: dto.status,\n      amount: dto.amount,\n      isVisible: getField<boolean>(data, 'is_visible', 'isVisible') ?? false,\n      createdAt: parseDateSafe(getField(data, 'created_at', 'createdAt')) ?? new Date(),\n      updatedAt: parseDateSafe(getField(data, 'updated_at', 'updatedAt')) ?? new Date(),\n\n      // Computed properties\n      isActive: dto.status === 'active',\n      hasDescription: () => Boolean(dto.description),\n    };\n  }\n\n  /**\n   * Domain data → Create DTO (POST body)\n   */\n  toCreateDTO(data: Partial<ExampleEntity>): CreateExampleDTO {\n    return {\n      name: trimString(data.name) ?? '',\n      amount: data.amount ?? 0,\n      description: data.description ?? '',\n      is_visible: data.isVisible ?? true,\n    };\n  }\n\n  /**\n   * Domain data → Update DTO (PUT body - full)\n   */\n  toUpdateDTO(data: Partial<ExampleEntity>): UpdateExampleDTO {\n    return this.toCreateDTO(data);\n  }\n\n  /**\n   * Domain data → Patch DTO (PATCH body - partial)\n   */\n  toPatchDTO(data: Partial<ExampleEntity>): PatchExampleDTO {\n    const dto: PatchExampleDTO = {};\n\n    if (data.name !== undefined) {\n      dto.name = trimString(data.name);\n    }\n    if (data.amount !== undefined) {\n      dto.amount = data.amount;\n    }\n    if (data.description !== undefined) {\n      dto.description = data.description ?? undefined;\n    }\n    if (data.isVisible !== undefined) {\n      dto.is_visible = data.isVisible;\n    }\n\n    return dto;\n  }\n\n  /**\n   * Filters → Query params DTO (GET)\n   */\n  toQueryDTO(filters: Partial<QueryExampleDTO>): QueryExampleDTO {\n    return {\n      page: filters.page ?? PAGINATION_DEFAULTS.PAGE,\n      limit: filters.limit ?? PAGINATION_DEFAULTS.LIMIT,\n      sort_by: filters.sort_by ?? 'created_at',\n      sort_order: filters.sort_order ?? 'desc',\n      status: filters.status,\n      is_visible: filters.is_visible,\n      min_amount: filters.min_amount,\n      max_amount: filters.max_amount,\n      search: filters.search,\n    };\n  }\n\n  /**\n   * Domain → Store state (serializable)\n   */\n  toStoreState(domain: ExampleEntity): ExampleStoreItem {\n    return {\n      id: domain.id,\n      name: domain.name,\n      description: domain.description,\n      ownerId: domain.ownerId,\n      status: domain.status,\n      amount: domain.amount,\n      isVisible: domain.isVisible,\n      createdAt: domain.createdAt.toISOString(),\n      updatedAt: domain.updatedAt.toISOString(),\n      isActive: domain.isActive,\n      isSelected: false,\n    };\n  }\n\n  /**\n   * Store state → Domain (restore computed props)\n   */\n  fromStoreState(state: ExampleStoreItem): ExampleEntity {\n    return {\n      id: state.id,\n      name: state.name,\n      description: state.description,\n      ownerId: state.ownerId,\n      status: state.status,\n      amount: state.amount,\n      isVisible: state.isVisible,\n      createdAt: new Date(state.createdAt),\n      updatedAt: new Date(state.updatedAt),\n      isActive: state.isActive,\n      hasDescription: () => Boolean(state.description),\n    };\n  }\n\n  /**\n   * Database row → Response DTO\n   * Maps repository output to API response format\n   */\n  toResponseDTO(row: {\n    id: string;\n    name: string;\n    description: string | null;\n    amount: number;\n    owner_id: string;\n    status: string;\n    is_visible: boolean;\n    created_at: string;\n    updated_at: string;\n  }): ExampleResponseDTO {\n    return {\n      id: row.id,\n      name: row.name,\n      description: row.description,\n      amount: row.amount,\n      owner_id: row.owner_id,\n      status: row.status as 'draft' | 'active' | 'archived',\n      is_visible: row.is_visible,\n      created_at: row.created_at,\n      updated_at: row.updated_at,\n    };\n  }\n}\n\n// Export class for BaseDomainService.MapperClass\nexport { ExampleMapperClass };\n\n// Singleton instance (for direct usage)\nexport const ExampleMapper = new ExampleMapperClass();\n","/**\n * Example Frontend Service\n *\n * Demonstrates extending BaseFrontendDomainService which provides:\n * - Automatic CRUD operations (fetchAll, fetchById, create, update, delete)\n * - Store integration (Zustand-compatible)\n * - Error handling with @plyaz/errors\n * - Event emission and subscription\n * - Loading/error state management\n * - Automatic DTO validation and mapping via validator and mapper\n *\n * This service only needs to:\n * - Set eventPrefix for event emission\n * - Add any custom domain methods (e.g., polling)\n * - Override lifecycle hooks if needed\n *\n * All standard CRUD operations are inherited:\n * - fetchAll(query?) - Inherited from BaseFrontendDomainService\n * - fetchById(id) - Inherited from BaseFrontendDomainService\n * - create(data) - Inherited from BaseFrontendDomainService\n * - update(id, data) - Inherited from BaseFrontendDomainService\n * - delete(id) - Inherited from BaseFrontendDomainService\n *\n * Runtime: Frontend only (Browser/React/Next.js)\n *\n * @example\n * ```tsx\n * // Service automatically gets stores via ServiceRegistry injection\n * const service = await ServiceRegistry.getAsync<FrontendExampleDomainService>('example');\n *\n * // Or create directly (stores injected if configured)\n * const service = new FrontendExampleDomainService({\n *   enabled: true,\n *   apiBasePath: '/api/examples',\n * });\n *\n * // Use inherited CRUD methods\n * const items = await service.fetchAll();\n * const activeItems = await service.fetchAll({ status: 'active' });\n * const item = await service.create({ name: 'Test', amount: 100 });\n * const updated = await service.update(item.id, { amount: 200 });\n * await service.delete(item.id);\n * ```\n */\n\nimport { STORE_KEYS } from '@plyaz/store';\nimport { CorePackageError } from '@plyaz/errors';\nimport { ERROR_CODES } from '@plyaz/types';\nimport { SERVICE_KEYS } from '@plyaz/types/core';\nimport type {\n  ExampleEntity,\n  ExampleResponseDTO,\n  CreateExampleDTO,\n  PatchExampleDTO,\n  QueryExampleDTO,\n  ExampleStoreItem,\n  ExampleSendEmailResult,\n} from '@plyaz/types/examples';\nimport { BaseFrontendDomainService } from '../base/BaseFrontendDomainService';\nimport { CoreEventManager } from '../../events/CoreEventManager';\nimport { ExampleMapperClass } from './mappers/ExampleMapper';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Store/Config/Event Types - Re-exported from @plyaz/types\n// ─────────────────────────────────────────────────────────────────────────────\n\n// Re-export types from @plyaz/types\nexport type {\n  ExampleFrontendStoreData,\n  ExampleFrontendStoreSlice,\n  ExampleFrontendServiceConfig,\n  ExampleFrontendEventType,\n} from '@plyaz/types/examples';\n\n// Import for local use\nimport type {\n  ExampleFrontendStoreData,\n  ExampleFrontendStoreSlice,\n  ExampleFrontendServiceConfig as _ExampleFrontendServiceConfig,\n  ExampleFrontendEventType,\n} from '@plyaz/types/examples';\nimport type { CoreServiceCreateOptions } from '@plyaz/types/core';\nimport type { CoreBaseValidatorInstance } from '@plyaz/types/core';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Service\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Example Frontend Service\n *\n * Extends BaseFrontendDomainService with all generic types:\n * - TConfig: ExampleFrontendServiceConfig\n * - TStore: ExampleFrontendStoreSlice\n * - TData: ExampleFrontendStoreData\n * - TEntity: ExampleEntity\n * - TResponseDTO: ExampleResponseDTO\n * - TCreateDTO: CreateExampleDTO\n * - TPatchDTO: PatchExampleDTO\n * - TQueryDTO: QueryExampleDTO\n * - TStoreState: ExampleStoreItem\n * - TMapper: ExampleMapper\n *\n * All CRUD methods are inherited from base class - no need to implement!\n */\nexport class FrontendExampleDomainService extends BaseFrontendDomainService<\n  _ExampleFrontendServiceConfig,\n  ExampleFrontendStoreSlice,\n  ExampleFrontendStoreData,\n  ExampleEntity,\n  ExampleResponseDTO,\n  CreateExampleDTO,\n  PatchExampleDTO,\n  QueryExampleDTO,\n  ExampleStoreItem,\n  InstanceType<typeof ExampleMapperClass>,\n  CoreBaseValidatorInstance,\n  void // TDeleteResult - delete returns void (no response body)\n> {\n  // ─────────────────────────────────────────────────────────────────────────\n  // Required Properties\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Event prefix for all events emitted by this service\n   * Required by BaseFrontendDomainService\n   */\n  protected eventPrefix = 'example';\n\n  /**\n   * Read-only store keys - inherits error and featureFlags from base\n   * No need to redeclare them - they're always included by default\n   */\n  // protected readStoreKeys = [...super.readStoreKeys]; // Already includes ERROR, FEATURE_FLAGS\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Static: Service Registry Interface\n  // ─────────────────────────────────────────────────────────────────────────\n\n  static readonly serviceKey = SERVICE_KEYS.EXAMPLE_FRONTEND;\n\n  /**\n   * Primary store key for this service.\n   * Used by ServiceRegistry to auto-inject the store if not specified in config.\n   * Also used by base class constructor to set instance primaryStoreKey.\n   */\n  static readonly primaryStoreKey = STORE_KEYS.EXAMPLE;\n\n  /**\n   * Factory method for ServiceRegistry auto-initialization.\n   * Creates and initializes the service instance.\n   */\n  static async create(\n    config: _ExampleFrontendServiceConfig,\n    options?: CoreServiceCreateOptions\n  ): Promise<FrontendExampleDomainService> {\n    const mergedConfig: _ExampleFrontendServiceConfig = {\n      ...config,\n      // Use || instead of ?? because api.baseURL may be '' (empty string) for same-origin requests.\n      // The ?? operator only falls through on null/undefined, not empty strings.\n      // An empty string is not a valid API path, so we treat it as \"not provided\" and fall through to default.\n      // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n      apiBasePath: config.apiBasePath || options?.apiClient?.options?.baseURL || '',\n    };\n\n    const service = new FrontendExampleDomainService(mergedConfig, options);\n\n    if (mergedConfig.autoFetch) {\n      await service.fetchAll();\n    }\n\n    return service;\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Constructor\n  // ─────────────────────────────────────────────────────────────────────────\n\n  constructor(config: _ExampleFrontendServiceConfig = {}, options?: CoreServiceCreateOptions) {\n    // Use || instead of ?? because apiBasePath may be '' (empty string) from config.\n    // Empty string is not a valid API path, so treat it as \"not provided\" and use default.\n    // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n    const apiBasePath = config.apiBasePath || '';\n\n    super({\n      serviceName: 'ExampleFrontendService',\n      supportedRuntimes: ['frontend'],\n      serviceConfig: {\n        enabled: true,\n        apiBasePath,\n        autoFetch: false,\n        pollingInterval: 0,\n        ...config,\n        // Fetchff response format: { ok, status, data: { success, message, data, codeStatus }, error }\n        // Use 'ok' for success check (HTTP level)\n        responseSuccessKey: 'ok',\n        // Extract error from fetchff response\n        responseErrorKey: 'error',\n        // Unwrap SuccessResponseStandard: extract 'data' from response.data\n        responseDataKey: 'data',\n        // Store data key: wrap entities as { items: [...] } for store.setData()\n        storeDataKey: 'items',\n\n        // Fetchers - using apiClient directly for testing/example purposes\n        // In production, these would be imported from @plyaz/api services\n        // Note: Validation is handled by validator class, mapping by mapper class\n        // Note: Use relative paths since apiClient.baseURL is already set to apiBasePath\n        fetchers: {\n          fetchAll: async query => {\n            // Empty string = use baseURL directly (e.g., /api/examples)\n            return this.apiClient.get<ExampleResponseDTO[]>('/examples', { params: query });\n          },\n          fetchById: async id => {\n            // Relative path from baseURL (e.g., /api/examples/{id})\n            return this.apiClient.get<ExampleResponseDTO>(`/examples/${id}`);\n          },\n          create: async data => {\n            return this.apiClient.post<ExampleResponseDTO>('/examples', data);\n          },\n          update: async payload => {\n            const { id, data } = payload!;\n            return this.apiClient.patch<ExampleResponseDTO>(`/examples/${id}`, data);\n          },\n          delete: async id => {\n            return this.apiClient.delete(`/examples/${id}`);\n          },\n        },\n        // Store handlers - customize how data syncs to store\n        // Use domain-specific methods or call other stores:\n        // storeHandlers: {\n        //   setData: (store, data) => {\n        //     store.setData(data);\n        //     // Can also call domain-specific methods or other stores\n        //     // store.selectItem(data.selectedId);\n        //     // store.selectItem(data.selectedId);\n        //   },\n        //   updateData: (store, data) => store.updateData(data),\n        //   setLoading: (store, isLoading) => store.setLoading(isLoading),\n        //   addData: (store, item) => store.addData(item),\n        //   updateDataById: (store, id, item) => store.updateDataById(id, item),\n        //   removeData: (store, id) => store.removeData(id),\n        // },\n        // Or disable store sync: storeHandlers: { disabled: true }\n      },\n      mapperClass: ExampleMapperClass,\n      injected: options?.injected,\n    });\n\n    // Start polling if configured\n    if (this.config.pollingInterval && this.config.pollingInterval > 0) {\n      this.startPolling();\n    }\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Lifecycle Hooks (Optional Override Examples)\n  // ─────────────────────────────────────────────────────────────────────────\n  // Note: isAvailable(), dispose(), startPolling(), stopPolling() are inherited\n  // from BaseFrontendDomainService. Override here only if custom behavior needed.\n\n  /**\n   * After fetchAll - emit event (store sync handled automatically)\n   * Note: Base class automatically calls syncToStores() which uses storeHandlers\n   */\n  protected override async afterFetchAll(entities: ExampleEntity[]): Promise<void> {\n    // Store sync happens automatically via base class + storeHandlers\n    // Just emit domain-specific event\n    CoreEventManager.emit('example:store:synced', { items: entities });\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Optional: Manual Store Updates (Alternative to storeHandlers)\n  // ─────────────────────────────────────────────────────────────────────────\n  //\n  // Uncomment these for fine-grained control over store updates:\n  //\n  // protected override async afterCreate(entity: ExampleEntity): Promise<void> {\n  //   // Manual optimistic update for immediate UI feedback\n  //   this.primaryStore.addItem?.(entity);\n  // }\n  //\n  // protected override async afterUpdate(id: string, entity: ExampleEntity): Promise<void> {\n  //   // Targeted update using domain-specific method\n  //   this.primaryStore.updateItem?.(id, entity);\n  // }\n  //\n  // protected override async afterDelete<TInput>(id: TInput): Promise<void> {\n  //   // Remove from store using domain-specific method\n  //   this.primaryStore.removeItem?.(String(id));\n  // }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Custom Domain Methods\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Subscribe to service events\n   *\n   * @example\n   * ```tsx\n   * const unsubscribe = service.on('example:created', (data) => {\n   *   console.log('Item created:', data.entity);\n   * });\n   *\n   * // Later: cleanup\n   * unsubscribe();\n   * ```\n   */\n  on(event: ExampleFrontendEventType, handler: (data: unknown) => void): () => void {\n    return CoreEventManager.on(event, handler);\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Demo Methods - fetchAll() with Query Examples\n  // ─────────────────────────────────────────────────────────────────────────\n  // Note: startPolling() and stopPolling() are inherited from BaseFrontendDomainService\n\n  /**\n   * Demo: Fetch all examples with optional filters\n   * Demonstrates the fetchAll() method with typed query parameters\n   *\n   * @param filters - Optional query filters (status, pagination, sorting)\n   * @returns Promise resolving to array of ExampleEntity\n   *\n   * @example\n   * ```typescript\n   * // Fetch all active examples\n   * const activeExamples = await service.getExamples({ status: 'active' });\n   *\n   * // Fetch archived examples with pagination\n   * const archivedExamples = await service.getExamples({\n   *   status: 'archived',\n   *   page: 2,\n   *   limit: 10\n   * });\n   *\n   * // Fetch all examples sorted by name\n   * const sortedExamples = await service.getExamples({\n   *   sort_by: 'name',\n   *   sort_order: 'asc'\n   * });\n   * ```\n   */\n  async getExamples(filters?: QueryExampleDTO): Promise<ExampleEntity[]> {\n    return this.fetchAll(filters); // Properly typed!\n  }\n\n  /**\n   * Demo: Fetch active examples only\n   * Convenience method demonstrating filtering\n   */\n  async getActiveExamples(): Promise<ExampleEntity[]> {\n    return this.fetchAll({ status: 'active' });\n  }\n\n  /**\n   * Demo: Fetch draft examples only\n   * Convenience method demonstrating filtering\n   */\n  async getDraftExamples(): Promise<ExampleEntity[]> {\n    return this.fetchAll({ status: 'draft' });\n  }\n\n  /**\n   * Demo: Fetch archived examples only\n   * Convenience method demonstrating filtering\n   */\n  async getArchivedExamples(): Promise<ExampleEntity[]> {\n    return this.fetchAll({ status: 'archived' });\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // NOTE: Storage Methods Are Inherited from BaseFrontendDomainService\n  // ─────────────────────────────────────────────────────────────────────────\n  //\n  // Storage Methods (via backend API → @plyaz/storage):\n  // - uploadFile(data, endpoint?) - Upload file (with optional template-based generation)\n  // - generateFile(data, endpoint?) - Generate document from template (returns buffer)\n  //\n  // All methods include:\n  // - Event emission (upload:uploading, document:generating, etc.)\n  // - Lifecycle hooks (beforeUploadFile, afterUploadFile, etc.)\n  // - Metrics recording\n  // - Error handling\n  // ─────────────────────────────────────────────────────────────────────────\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Email Sending (TEST ONLY - via backend API → @plyaz/notifications)\n  // ─────────────────────────────────────────────────────────────────────────\n  //\n  // NOTE: Email sending is a backend-only operation. This method is included\n  // here ONLY for testing/demo purposes. In production, email triggers should\n  // happen on the backend (e.g., after order placement, user registration, etc.)\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Send an email via backend API (TEST/DEMO ONLY).\n   *\n   * Calls POST /api/examples/email which uses @plyaz/notifications template engine.\n   *\n   * **NOTE:** In production, email sending should be triggered from the backend\n   * (e.g., after successful order, user signup, etc.), not from the frontend.\n   * This method is included here only for testing the notification system.\n   *\n   * @typeParam TInput - Email parameters type\n   * @typeParam TOptions - Options type (can include endpoint override)\n   *\n   * @param data - Email parameters (to, templateId, templateData, etc.)\n   * @param options - Options (endpoint, etc.)\n   * @returns Promise resolving to send result\n   */\n  async sendEmail<TInput = unknown, TOptions = unknown>(\n    data: TInput,\n    options?: TOptions\n  ): Promise<ExampleSendEmailResult> {\n    await this.ensureReady();\n    const startTime = Date.now();\n    const endpoint = (options as { endpoint?: string } | undefined)?.endpoint ?? '/email';\n\n    this.setStoresLoading(true);\n    CoreEventManager.emit(`${this.eventPrefix}:email:sending`, { request: data });\n\n    try {\n      // Call backend API\n      const response = await this.apiClient.post<ExampleSendEmailResult>(endpoint, data);\n\n      // Check response success\n      if (!this.isResponseSuccess(response)) {\n        const error = this.extractResponseError(response);\n        throw new CorePackageError(\n          `Failed to send email: ${JSON.stringify(error)}`,\n          ERROR_CODES.CORE_OPERATION_FAILED\n        );\n      }\n\n      // Unwrap response\n      const result = this.unwrapResponseData<ExampleSendEmailResult>(response.data);\n\n      // Emit success event\n      CoreEventManager.emit(`${this.eventPrefix}:email:sent`, { result });\n\n      await this.recordOperationMetrics('sendEmail', Date.now() - startTime, true);\n      return result;\n    } catch (error) {\n      await this.recordOperationMetrics('sendEmail', Date.now() - startTime, false);\n      CoreEventManager.emit(`${this.eventPrefix}:email:error`, { error });\n      throw error;\n    } finally {\n      this.setStoresLoading(false);\n    }\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // NOTE: CRUD Methods Are Inherited from BaseFrontendDomainService\n  // ─────────────────────────────────────────────────────────────────────────\n  //\n  // The following methods are available but NOT implemented here:\n  // - fetchAll(query?: QueryExampleDTO): Promise<ExampleEntity[]>\n  // - fetchById(id: string): Promise<ExampleEntity | null>\n  // - create(data: unknown): Promise<ExampleEntity>\n  // - update(id: string, data: unknown): Promise<ExampleEntity>\n  // - delete(id: string): Promise<void>\n  //\n  // All API calls → validator → mapper → store sync → events are handled automatically!\n  // All events are emitted automatically with 'example:' prefix!\n  // ─────────────────────────────────────────────────────────────────────────\n}\n","/**\n * Files Mapper\n *\n * Maps between:\n * - API responses (UploadFileResponse/GetFileResponse) → FilesEntity\n * - FilesEntity → FilesStoreItem\n * - FilesDatabaseRow → API response (for backend)\n */\n\nimport { BaseMapper } from '../../base';\nimport { toNumber, isObject, isValidUUID } from '../../../utils/common';\nimport { toOptional, toNullable } from '../../../utils/mapperUtils';\nimport type { UploadFileResponse, GetFileResponse } from '@plyaz/types/api';\nimport { SYSTEM_USER_ID } from '@plyaz/types/core';\nimport type { FilesEntity, FilesDatabaseRow, FileType, FilesCreateInput } from '@plyaz/types/core';\nimport type { FilesStoreItem, GeneratedFileItem } from '@plyaz/types/store';\nimport type { UploadResult } from '@plyaz/types/storage';\n\n/**\n * Files Mapper implementation\n *\n * Maps between:\n * - API responses → Domain Entity (toDomain)\n * - Domain Entity → Store State (toStoreState)\n * - Database Row → API Response (toResponseDTO)\n */\nclass FilesMapperClass extends BaseMapper<\n  FilesEntity,\n  GetFileResponse,\n  FilesCreateInput,\n  FilesCreateInput,\n  Partial<FilesCreateInput>,\n  Record<string, unknown>,\n  FilesStoreItem\n> {\n  /**\n   * Type guard for UploadResult from event payloads\n   * Validates that the value has the required structure for DB mapping\n   */\n  static isUploadResult(value: unknown): value is UploadResult {\n    if (!isObject(value)) return false;\n    const obj = value as Record<string, unknown>;\n    if (!isObject(obj.metadata)) return false;\n    const metadata = obj.metadata as Record<string, unknown>;\n    return (\n      typeof metadata.fileId === 'string' &&\n      typeof metadata.filename === 'string' &&\n      typeof metadata.mimeType === 'string' &&\n      typeof metadata.size === 'number' &&\n      typeof metadata.path === 'string'\n    );\n  }\n\n  /**\n   * Infer file type from MIME type\n   * DB ENUM only supports: IMAGE, VIDEO, AUDIO, DOCUMENT\n   * Default to DOCUMENT for unknown types\n   */\n  static inferFileType(mimeType: string): FileType {\n    if (mimeType.startsWith('image/')) return 'IMAGE';\n    if (mimeType.startsWith('video/')) return 'VIDEO';\n    if (mimeType.startsWith('audio/')) return 'AUDIO';\n    // DOCUMENT is the default - covers PDFs, text, office docs, and unknown types\n    // Note: DB ENUM doesn't have 'OTHER', so we use DOCUMENT as fallback\n    return 'DOCUMENT';\n  }\n\n  /**\n   * API Response → Domain Entity\n   */\n  toDomain(dto: GetFileResponse | UploadFileResponse): FilesEntity {\n    const type = FilesMapperClass.inferFileType(dto.mimeType);\n    return {\n      id: dto.id,\n      key: dto.key,\n      filename: dto.filename,\n      mimeType: dto.mimeType,\n      size: dto.size,\n      checksum: dto.checksum,\n      url: dto.url,\n      publicUrl: dto.publicUrl,\n      signedUrl: dto.signedUrl,\n      bucket: dto.bucket,\n      entityType: dto.entityType,\n      entityId: dto.entityId,\n      category: dto.category,\n      uploadedAt: new Date(dto.uploadedAt),\n      expiresAt: dto.expiresAt ? new Date(dto.expiresAt) : undefined,\n      variants: (dto as UploadFileResponse).variants,\n      type,\n      isImage: type === 'IMAGE',\n      isVideo: type === 'VIDEO',\n      isDocument: type === 'DOCUMENT',\n      isAudio: type === 'AUDIO',\n    };\n  }\n\n  /**\n   * Domain Entity → Store State (serializable)\n   */\n  toStoreState(entity: FilesEntity): FilesStoreItem {\n    return {\n      id: entity.id,\n      key: entity.key,\n      filename: entity.filename,\n      mimeType: entity.mimeType,\n      size: entity.size,\n      url: entity.url,\n      publicUrl: entity.publicUrl,\n      bucket: entity.bucket,\n      entityType: entity.entityType,\n      entityId: entity.entityId,\n      category: entity.category,\n      uploadedAt: entity.uploadedAt.toISOString(),\n      type: entity.type,\n      isImage: entity.isImage,\n      isVideo: entity.isVideo,\n      isDocument: entity.isDocument,\n      isAudio: entity.isAudio,\n    };\n  }\n\n  /**\n   * Store State → Domain Entity\n   */\n  fromStoreState(state: FilesStoreItem): FilesEntity {\n    return {\n      id: state.id,\n      key: state.key,\n      filename: state.filename,\n      mimeType: state.mimeType,\n      size: state.size,\n      url: state.url,\n      publicUrl: state.publicUrl,\n      bucket: state.bucket,\n      entityType: state.entityType,\n      entityId: state.entityId,\n      category: state.category,\n      uploadedAt: new Date(state.uploadedAt),\n      type: state.type,\n      isImage: state.isImage,\n      isVideo: state.isVideo,\n      isDocument: state.isDocument,\n      isAudio: state.isAudio,\n    };\n  }\n\n  /**\n   * Database Row → API Response (for backend)\n   */\n  toResponseDTO(row: FilesDatabaseRow): GetFileResponse {\n    return {\n      id: row.id,\n      key: row.storage_path,\n      filename: row.filename,\n      mimeType: row.mime_type,\n      size: toNumber(row.file_size),\n      checksum: undefined,\n      url: toOptional(row.cdn_url),\n      publicUrl: toOptional(row.cdn_url),\n      signedUrl: undefined,\n      bucket: row.bucket ?? 'uploads', // Default bucket for legacy records\n      entityType: toOptional(row.entity_type),\n      entityId: toOptional(row.entity_id),\n      category: undefined,\n      uploadedAt: row.created_at,\n      expiresAt: undefined,\n    };\n  }\n\n  /**\n   * Create GeneratedFileItem from generation result\n   */\n  toGeneratedFileItem(\n    templateId: string,\n    buffer: string,\n    size: number,\n    outputFormat: string = 'pdf'\n  ): GeneratedFileItem {\n    return {\n      id: crypto.randomUUID(),\n      templateId,\n      buffer,\n      size,\n      mimeType: `application/${outputFormat}`,\n      filename: `${templateId}.${outputFormat}`,\n      generatedAt: new Date().toISOString(),\n    };\n  }\n\n  /**\n   * Convert upload result to database row format\n   * Used by event handlers to persist upload results to DB\n   *\n   * @param uploadResult - Result from storage upload\n   * @param userId - User ID who uploaded the file (from auth context)\n   * @returns Partial database row ready for repository.create()\n   */\n  toDbRow(uploadResult: UploadResult, userId?: string): Partial<FilesDatabaseRow> {\n    const { metadata, variants } = uploadResult;\n\n    // Note: We don't set 'id' here - let DB auto-generate UUID\n    // The fileId from storage (path) is stored in storage_path\n    return {\n      // Required fields\n      user_id: userId ?? SYSTEM_USER_ID,\n      type: FilesMapperClass.inferFileType(metadata.mimeType),\n      filename: metadata.filename,\n      original_filename: metadata.filename,\n      mime_type: metadata.mimeType,\n      file_size: metadata.size,\n      storage_path: metadata.path,\n      entity_type: metadata.entityType,\n      access_level: metadata.accessLevel,\n      is_virus_scanned: false,\n      // Optional nullable fields\n      cdn_url: toNullable(metadata.url),\n      width: toNullable(metadata.extractedMetadata?.width),\n      height: toNullable(metadata.extractedMetadata?.height),\n      duration: toNullable(metadata.extractedMetadata?.duration),\n      // DB column is UUID type - only set if value is a valid UUID, otherwise null\n      entity_id: isValidUUID(metadata.entityId) ? metadata.entityId : null,\n      bucket: toNullable(metadata.bucket),\n      virus_scan_result: null,\n      metadata: toNullable(metadata.customMetadata),\n      variants: toNullable(variants),\n    };\n  }\n}\n\nexport { FilesMapperClass };\nexport const FilesMapper = new FilesMapperClass();\n","/**\n * Frontend Files Domain Service\n *\n * Uses inherited methods from BaseFrontendDomainService:\n * - uploadFile() - inherited (POST /upload via @plyaz/api)\n * - uploadFiles() - inherited (POST /upload/bulk via @plyaz/api)\n * - generateFile() - inherited (POST /generate-document via @plyaz/api)\n * - fetchById() - via fetchers.fetchById (GET /files/:id)\n * - delete() - via fetchers.delete (DELETE /files/:id)\n *\n * Custom methods:\n * - download() - GET /files/:id/download\n * - getSignedUrlForFile() - GET /files/:id/signed-url\n */\n\nimport { STORE_KEYS } from '@plyaz/store';\nimport { PackageLogger } from '@plyaz/logger';\nimport { getFile, deleteFile, downloadFile, getSignedUrl } from '@plyaz/api';\nimport { SERVICE_KEYS } from '@plyaz/types/core';\nimport type { CoreBaseValidatorInstance, CoreServiceCreateOptions } from '@plyaz/types/core';\nimport type {\n  DownloadFileRequest,\n  DownloadFileResponse,\n  GetSignedUrlRequest,\n  GetSignedUrlResponse,\n  GetFileResponse,\n  ServiceOptions,\n} from '@plyaz/types/api';\nimport type {\n  FilesEntity,\n  FilesFrontendServiceConfig,\n  FilesCreateInput,\n  FilesUploadEventPayload,\n  FileDocumentGeneratedEventPayload,\n  FilesUploadStreamProgress,\n  FilesDownloadStreamProgress,\n  FilesGenerateStreamProgress,\n} from '@plyaz/types/core';\n\n/** Union of all files event payloads for type-safe handlers */\ntype FilesEventPayload = FilesUploadEventPayload | FileDocumentGeneratedEventPayload | void;\nimport type {\n  FilesFrontendStoreSlice,\n  FilesFrontendStoreData,\n  FilesStoreItem,\n} from '@plyaz/types/store';\nimport { BaseFrontendDomainService } from '../base';\nimport type {\n  CoreStreamHandlerDeclaration,\n  CoreStreamHandlerIds,\n  CoreStreamStoreGetter,\n  StreamMessage,\n} from '@plyaz/types/core';\nimport { FilesMapperClass, FilesMapper } from './mappers/FilesMapper';\nimport { FrontendEventPersistenceHandler } from '../../events/FrontendEventPersistenceHandler';\nimport { Core } from '../../init/CoreInitializer';\n\nconst logger = new PackageLogger({ packageName: 'core', service: 'FrontendFilesDomainService' });\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Service\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Frontend Files Domain Service\n *\n * Inherited from BaseFrontendDomainService:\n * - uploadFile() - upload single file\n * - uploadFiles() - upload multiple files\n * - generateFile() - generate document\n * - fetchById() - get file metadata\n * - delete() - delete file\n *\n * Custom methods:\n * - download() - download file content\n * - getSignedUrlForFile() - get signed URL\n */\nexport class FrontendFilesDomainService extends BaseFrontendDomainService<\n  FilesFrontendServiceConfig,\n  FilesFrontendStoreSlice,\n  FilesFrontendStoreData,\n  FilesEntity,\n  GetFileResponse,\n  FilesCreateInput,\n  Partial<FilesCreateInput>,\n  Record<string, unknown>,\n  FilesStoreItem,\n  InstanceType<typeof FilesMapperClass>,\n  CoreBaseValidatorInstance,\n  void\n> {\n  static readonly serviceKey = SERVICE_KEYS.FILES_FRONTEND;\n\n  /**\n   * Primary store key for this service.\n   * Used by ServiceRegistry to auto-inject the store.\n   * Must be static for base class constructor to access.\n   */\n  static readonly primaryStoreKey = STORE_KEYS.FILES;\n\n  protected eventPrefix = 'files';\n\n  static async create(\n    config: FilesFrontendServiceConfig = {},\n    options?: CoreServiceCreateOptions\n  ): Promise<FrontendFilesDomainService> {\n    // Auto-register event handlers when service is created\n    this.registerEventHandlers();\n\n    const mergedConfig: FilesFrontendServiceConfig = {\n      ...config,\n      // Use || instead of ?? because api.baseURL may be '' (empty string) for same-origin requests.\n      // The ?? operator only falls through on null/undefined, not empty strings.\n      // An empty string is not a valid API path, so we treat it as \"not provided\" and fall through to default.\n      // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n      apiBasePath: config.apiBasePath || options?.apiClient?.options?.baseURL || '',\n    };\n\n    return new FrontendFilesDomainService(mergedConfig, options);\n  }\n\n  constructor(config: FilesFrontendServiceConfig = {}, options?: CoreServiceCreateOptions) {\n    // Use || instead of ?? because apiBasePath may be '' (empty string) from config.\n    // Empty string is not a valid API path, so treat it as \"not provided\" and use default.\n    // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n    const apiBasePath = config.apiBasePath || '';\n\n    super({\n      serviceName: 'FrontendFilesDomainService',\n      supportedRuntimes: ['frontend'],\n      serviceConfig: {\n        enabled: true,\n        apiBasePath,\n        responseDataKey: 'data',\n        ...config,\n        // Configure fetchers for CRUD operations\n        // Note: ID validation handled by base class validator\n        fetchers: {\n          fetchById: async (id?: string) => {\n            return getFile({ id: id! });\n          },\n          delete: async (id?: string) => {\n            return deleteFile({ id: id! });\n          },\n        },\n        // Configure storeHandlers for domain-specific store operations\n        // These are called by base class methods (fetchById, delete, etc.)\n        storeHandlers: {\n          // Use addFile with duplicate check instead of generic addData\n          addData: (store, item) => store.addFile(item as FilesEntity),\n          // Remove from both files list and uploads list\n          removeData: (store, id) => {\n            store.removeFile(id);\n            store.removeUpload(id);\n          },\n        },\n      },\n      mapperClass: FilesMapperClass,\n      injected: options?.injected,\n    });\n  }\n\n  isAvailable(): boolean {\n    return this.isServiceEnabled && typeof window !== 'undefined';\n  }\n\n  dispose(): void {\n    // Call super to auto-cleanup stream handlers and stop polling\n    super.dispose();\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Static Event Registration\n  // ─────────────────────────────────────────────────────────────────────────\n\n  private static _eventHandlersRegistered = false;\n\n  /** Stream handler IDs - overrides base class pattern */\n  protected static override readonly STREAM_HANDLER_IDS: CoreStreamHandlerIds<\n    'UPLOAD_PROGRESS' | 'DOWNLOAD_PROGRESS' | 'GENERATE_PROGRESS'\n  > = {\n    UPLOAD_PROGRESS: 'files:upload-progress',\n    DOWNLOAD_PROGRESS: 'files:download-progress',\n    GENERATE_PROGRESS: 'files:generate-progress',\n  };\n\n  /** Default priority for stream handlers */\n  private static readonly DEFAULT_HANDLER_PRIORITY = 100;\n\n  /**\n   * Declarative stream handlers - auto-registered by base class\n   */\n  /* eslint-disable complexity */\n  protected static override readonly STREAM_HANDLERS: CoreStreamHandlerDeclaration[] = [\n    // Upload progress handler - only handles upload-specific events\n    {\n      id: FrontendFilesDomainService.STREAM_HANDLER_IDS.UPLOAD_PROGRESS,\n      channels: ['uploads', 'upload:'],\n      events: ['upload:progress', 'upload:completed', 'upload:failed'],\n      priority: FrontendFilesDomainService.DEFAULT_HANDLER_PRIORITY,\n      handler: (message: StreamMessage<unknown>, getStore: CoreStreamStoreGetter): void => {\n        const data = message.data as FilesUploadStreamProgress;\n        if (!data?.fileId) return;\n\n        const filesStore = getStore()?.[STORE_KEYS.FILES] as FilesFrontendStoreSlice | undefined;\n        if (!filesStore?.setUploadProgress) return;\n\n        filesStore.setUploadProgress(data.fileId, {\n          fileId: data.fileId,\n          filename: data.filename ?? 'unknown',\n          percentage: data.percentage ?? 0,\n          status: data.status ?? 'uploading',\n          loaded: data.loaded ?? 0,\n          total: data.total ?? 0,\n          speed: data.speed,\n          estimatedTimeRemaining: data.estimatedTimeRemaining,\n          error: data.error,\n        });\n      },\n    },\n    // Download progress handler - only handles download-specific events\n    {\n      id: FrontendFilesDomainService.STREAM_HANDLER_IDS.DOWNLOAD_PROGRESS,\n      channels: ['downloads', 'download:'],\n      events: ['download:progress', 'download:completed', 'download:failed'],\n      priority: FrontendFilesDomainService.DEFAULT_HANDLER_PRIORITY,\n      handler: (message: StreamMessage<unknown>, getStore: CoreStreamStoreGetter): void => {\n        const data = message.data as FilesDownloadStreamProgress;\n        if (!data?.fileId) return;\n\n        const filesStore = getStore()?.[STORE_KEYS.FILES] as FilesFrontendStoreSlice | undefined;\n        if (!filesStore?.setDownloadProgress) return;\n\n        filesStore.setDownloadProgress(data.fileId, {\n          fileId: data.fileId,\n          filename: data.filename ?? 'unknown',\n          percentage: data.percentage ?? 0,\n          status: data.status ?? 'downloading',\n          loaded: data.loaded ?? 0,\n          total: data.total ?? 0,\n          speed: data.speed,\n          estimatedTimeRemaining: data.estimatedTimeRemaining,\n          error: data.error,\n        });\n      },\n    },\n    // Generate progress handler - only handles generate-specific events\n    {\n      id: FrontendFilesDomainService.STREAM_HANDLER_IDS.GENERATE_PROGRESS,\n      channels: ['generations', 'generate:'],\n      events: ['generate:progress', 'generate:completed', 'generate:failed'],\n      priority: FrontendFilesDomainService.DEFAULT_HANDLER_PRIORITY,\n      handler: (message: StreamMessage<unknown>, getStore: CoreStreamStoreGetter): void => {\n        const data = message.data as FilesGenerateStreamProgress;\n        if (!data?.templateId) return;\n\n        const filesStore = getStore()?.[STORE_KEYS.FILES] as FilesFrontendStoreSlice | undefined;\n        if (!filesStore?.setGenerateProgress) return;\n\n        filesStore.setGenerateProgress({\n          templateId: data.templateId,\n          percentage: data.percentage ?? 0,\n          status: data.status ?? 'generating',\n        });\n      },\n    },\n  ];\n  /* eslint-enable complexity */\n\n  /**\n   * Register all frontend event handlers for files domain.\n   *\n   * Handles:\n   * 1. Loading state events (setUploading, setGenerating)\n   * 2. Data persistence events (addUpload, addGenerated)\n   *\n   * Uses CoreEventManager to listen for file events from ANY service.\n   * This ensures a single source of truth via events.\n   *\n   * @param verbose - Enable verbose logging\n   * @returns Cleanup function to unregister all handlers\n   *\n   * @example\n   * ```typescript\n   * // Auto-called during Core.initialize() for frontend\n   * FrontendFilesDomainService.registerEventHandlers(verbose);\n   * ```\n   */\n  static registerEventHandlers(verbose?: boolean): () => void {\n    // Skip if already registered\n    if (this._eventHandlersRegistered) {\n      logger.debug('Files frontend event handlers already registered');\n      return () => {};\n    }\n\n    // Helper to safely get files store\n    const getFilesStore = (): FilesFrontendStoreSlice | undefined => {\n      try {\n        return Core.rootStore?.getState().files;\n      } catch {\n        return undefined;\n      }\n    };\n\n    // Register all files events in one place\n    FrontendEventPersistenceHandler.register<FilesFrontendStoreSlice, FilesEventPayload>({\n      domain: 'files',\n      events: {\n        // Upload events\n        'files:upload:uploading': {\n          handler: (store: FilesFrontendStoreSlice) => store.setUploading(true),\n        },\n        'files:upload:uploaded': {\n          handler: (store: FilesFrontendStoreSlice, payload: FilesEventPayload) => {\n            store.setUploading(false);\n            const p = payload as FilesUploadEventPayload;\n            if (!p?.result) return;\n\n            // Bulk upload: result has results array\n            if (p.bulk) {\n              const entities = p.result.results\n                .filter((r: { success?: boolean; data?: unknown }) => r.success && r.data)\n                .map((r: { data?: unknown }) =>\n                  FilesMapper.toDomain(r.data as Parameters<typeof FilesMapper.toDomain>[0])\n                );\n              store.addUpload(entities);\n            } else {\n              // Single upload\n              store.addUpload(FilesMapper.toDomain(p.result));\n            }\n          },\n        },\n        'files:upload:error': {\n          handler: (store: FilesFrontendStoreSlice) => store.setUploading(false),\n        },\n\n        // Document generation events\n        'files:document:generating': {\n          handler: (store: FilesFrontendStoreSlice) => store.setGenerating(true),\n        },\n        'files:document:generated': {\n          handler: (store: FilesFrontendStoreSlice, payload: FilesEventPayload) => {\n            store.setGenerating(false);\n            const p = payload as FileDocumentGeneratedEventPayload;\n            if (!p?.result?.buffer) return;\n\n            const item = FilesMapper.toGeneratedFileItem(\n              p.request.templateId,\n              p.result.buffer,\n              p.result.size,\n              p.request.outputFormat ?? 'pdf'\n            );\n            store.addGenerated(item);\n          },\n        },\n        'files:document:error': {\n          handler: (store: FilesFrontendStoreSlice) => store.setGenerating(false),\n        },\n      },\n      getStore: getFilesStore,\n      verbose,\n    });\n\n    this._eventHandlersRegistered = true;\n    logger.info('Files frontend event handlers registered');\n\n    // Return cleanup function\n    return () => {\n      FrontendEventPersistenceHandler.unregisterAll();\n      this._eventHandlersRegistered = false;\n    };\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // File Operations (following base class CRUD pattern)\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Download file content\n   * GET /files/:id/download\n   *\n   * Follows same pattern as CRUD methods:\n   * 1. ensureReady\n   * 2. Lifecycle hook: beforeDownload\n   * 3. Call fetcher\n   * 4. Lifecycle hook: afterDownload\n   * 5. Emit events\n   * 6. Record metrics\n   */\n  async download(\n    request: DownloadFileRequest,\n    options?: ServiceOptions\n  ): Promise<DownloadFileResponse> {\n    await this.ensureReady();\n    const startTime = Date.now();\n\n    this.emitEvent('download:downloading', { request });\n\n    try {\n      // 1. Lifecycle hook\n      await this.beforeDownload?.(request);\n\n      // 2. Call fetcher (pass serviceOptions for strategy/config overrides)\n      const response = await downloadFile(request, options);\n\n      // 3. Check response success\n      if (!this.isResponseSuccess(response)) {\n        const error = this.extractResponseError(response);\n        throw this.wrapError(error, 'download');\n      }\n\n      // 4. Unwrap response\n      const result = this.unwrapResponseData<DownloadFileResponse>(response.data);\n\n      // 5. Lifecycle hook\n      await this.afterDownload?.(result);\n\n      // 6. Emit success event\n      this.emitEvent('download:downloaded', { result });\n\n      await this.recordOperationMetrics('download', Date.now() - startTime, true);\n      return result;\n    } catch (error) {\n      await this.recordOperationMetrics('download', Date.now() - startTime, false);\n      this.emitEvent('download:error', { error });\n      throw this.wrapError(error, 'download');\n    }\n  }\n\n  /**\n   * Lifecycle hook: called before download.\n   * Override in subclass for custom pre-download logic.\n   */\n  protected beforeDownload?(request: DownloadFileRequest): Promise<void>;\n\n  /**\n   * Lifecycle hook: called after download.\n   * Override in subclass for custom post-download logic.\n   */\n  protected afterDownload?(result: DownloadFileResponse): Promise<void>;\n\n  /**\n   * Get signed URL for file\n   * GET /files/:id/signed-url\n   *\n   * Follows same pattern as CRUD methods.\n   */\n  async getSignedUrlForFile(request: GetSignedUrlRequest): Promise<GetSignedUrlResponse> {\n    await this.ensureReady();\n    const startTime = Date.now();\n\n    this.emitEvent('signedUrl:requesting', { request });\n\n    try {\n      // 1. Lifecycle hook\n      await this.beforeGetSignedUrl?.(request);\n\n      // 2. Call fetcher\n      const response = await getSignedUrl(request);\n\n      // 3. Check response success\n      if (!this.isResponseSuccess(response)) {\n        const error = this.extractResponseError(response);\n        throw this.wrapError(error, 'getSignedUrl');\n      }\n\n      // 4. Unwrap response\n      const result = this.unwrapResponseData<GetSignedUrlResponse>(response.data);\n\n      // 5. Lifecycle hook\n      await this.afterGetSignedUrl?.(result);\n\n      // 6. Emit success event\n      this.emitEvent('signedUrl:received', { result });\n\n      await this.recordOperationMetrics('getSignedUrl', Date.now() - startTime, true);\n      return result;\n    } catch (error) {\n      await this.recordOperationMetrics('getSignedUrl', Date.now() - startTime, false);\n      this.emitEvent('signedUrl:error', { error });\n      throw this.wrapError(error, 'getSignedUrl');\n    }\n  }\n\n  /**\n   * Lifecycle hook: called before getting signed URL.\n   * Override in subclass for custom pre-signedUrl logic.\n   */\n  protected beforeGetSignedUrl?(request: GetSignedUrlRequest): Promise<void>;\n\n  /**\n   * Lifecycle hook: called after getting signed URL.\n   * Override in subclass for custom post-signedUrl logic.\n   */\n  protected afterGetSignedUrl?(result: GetSignedUrlResponse): Promise<void>;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Singleton\n// ─────────────────────────────────────────────────────────────────────────────\n\nlet _instance: FrontendFilesDomainService | null = null;\n\nexport async function getFrontendFilesDomainService(\n  config?: FilesFrontendServiceConfig,\n  options?: CoreServiceCreateOptions\n): Promise<FrontendFilesDomainService> {\n  _instance ??= await FrontendFilesDomainService.create(config, options);\n  return _instance;\n}\n\nexport function resetFilesFrontendService(): void {\n  if (_instance) {\n    _instance.dispose();\n    _instance = null;\n  }\n}\n","/**\n * Notifications Mapper\n *\n * Transforms data between API DTOs, domain models, and store state.\n * Supports IN_APP notifications only (not email/sms/push).\n *\n * Methods:\n * - toDomain: API DTO → Domain Model\n * - toQueryDTO: Filters → Query params\n * - toStoreState: Domain → Zustand store\n * - fromStoreState: Store → Domain\n * - toDbRow: Domain/Event payload → Database row\n * - toCreateDTO/toUpdateDTO/toPatchDTO: For backend operations\n */\n\nimport { PAGE_SIZES } from '@plyaz/config';\nimport { BaseMapper } from '../../base';\nimport { toOptional, getField, parseDateSafe } from '../../../utils/mapperUtils';\nimport { SYSTEM_USER_ID } from '@plyaz/types/core';\nimport type {\n  NotificationsEntity,\n  NotificationsResponseDTO,\n  NotificationStoreItem,\n  QueryNotificationsDTO,\n  CreateNotificationsDTO,\n  UpdateNotificationsDTO,\n  PatchNotificationsDTO,\n  NotificationsDatabaseRow,\n  NotificationCreatedStreamData,\n} from '@plyaz/types/core';\n\n/** Default pagination values */\nconst PAGINATION_DEFAULTS = {\n  PAGE: 1,\n  LIMIT: PAGE_SIZES.MEDIUM,\n} as const;\n\n/** Valid DB channel values */\nconst DB_CHANNELS = ['IN_APP', 'EMAIL', 'SMS', 'PUSH'] as const;\n\n/** Preference fields that can be toggled */\ntype PreferenceToggleField =\n  | 'marketing_enabled'\n  | 'promotional_enabled'\n  | 'social_enabled'\n  | 'system_enabled';\n\n/**\n * Notifications Mapper implementation\n * Supports IN_APP notifications only\n */\nclass NotificationsMapperClass extends BaseMapper<\n  NotificationsEntity,\n  NotificationsResponseDTO,\n  CreateNotificationsDTO,\n  UpdateNotificationsDTO,\n  PatchNotificationsDTO,\n  QueryNotificationsDTO,\n  NotificationStoreItem\n> {\n  // ─────────────────────────────────────────────────────────────────────────\n  // Static Methods: Channel/Category Conversion\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Map DTO channel to DB channel (uppercase)\n   * DTO: email, sms, push → DB: EMAIL, SMS, PUSH\n   */\n  static mapChannelToDb(channel?: string | null): NotificationsDatabaseRow['channel'] {\n    if (!channel) return 'IN_APP'; // Default to IN_APP\n    const upper = channel.toUpperCase();\n    if (DB_CHANNELS.includes(upper as (typeof DB_CHANNELS)[number])) {\n      return upper as NotificationsDatabaseRow['channel'];\n    }\n    return 'IN_APP';\n  }\n\n  /**\n   * Map category to DB format\n   */\n  static mapCategoryToDb(category?: string | null): NotificationsDatabaseRow['category'] {\n    if (!category) return 'transactional';\n    return category as NotificationsDatabaseRow['category'];\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Instance Methods\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * API DTO → Domain Model\n   * Handles both snake_case (DTO) and camelCase (Entity) input formats\n   */\n  toDomain(dto: NotificationsResponseDTO | NotificationsEntity): NotificationsEntity {\n    const data = dto as unknown as Record<string, unknown>;\n\n    return {\n      id: dto.id,\n      userId: getField<string>(data, 'user_id', 'userId') ?? '',\n      type: dto.type,\n      title: dto.title,\n      message: dto.message,\n      linkUrl: getField<string>(data, 'link_url', 'linkUrl'),\n      referenceId: getField<string>(data, 'reference_id', 'referenceId'),\n      referenceType: getField<string>(data, 'reference_type', 'referenceType'),\n      correlationId: getField<string>(data, 'correlation_id', 'correlationId'),\n      recipientId: getField<string>(data, 'recipient_id', 'recipientId') ?? '',\n      templateId: getField<string>(data, 'template_id', 'templateId'),\n      channel: dto.channel,\n      category: dto.category,\n      provider: dto.provider,\n      providerMessageId: getField<string>(data, 'provider_message_id', 'providerMessageId'),\n      status: dto.status,\n      sentAt: parseDateSafe(getField(data, 'sent_at', 'sentAt')),\n      deliveredAt: parseDateSafe(getField(data, 'delivered_at', 'deliveredAt')),\n      isRead: getField<boolean>(data, 'is_read', 'isRead') ?? false,\n      readAt: parseDateSafe(getField(data, 'read_at', 'readAt')),\n      errorMessage: getField<string>(data, 'error_message', 'errorMessage'),\n      retryCount: getField<number>(data, 'retry_count', 'retryCount') ?? 0,\n      createdAt: parseDateSafe(getField(data, 'created_at', 'createdAt')) ?? new Date(),\n      deletedAt: parseDateSafe(getField(data, 'deleted_at', 'deletedAt')),\n    };\n  }\n\n  /**\n   * Database Row → API Response DTO (for backend)\n   */\n  toResponseDTO(row: NotificationsDatabaseRow): NotificationsResponseDTO {\n    return {\n      // Required fields\n      id: row.id,\n      user_id: row.user_id,\n      type: row.type,\n      title: row.title,\n      message: row.message,\n      recipient_id: row.recipient_id,\n      status: row.status,\n      is_read: row.is_read,\n      retry_count: row.retry_count,\n      created_at: row.created_at,\n      // Optional fields\n      link_url: toOptional(row.link_url),\n      reference_id: toOptional(row.reference_id),\n      reference_type: toOptional(row.reference_type),\n      correlation_id: toOptional(row.correlation_id),\n      template_id: toOptional(row.template_id),\n      channel: toOptional(row.channel),\n      category: toOptional(row.category),\n      provider: toOptional(row.provider),\n      provider_message_id: toOptional(row.provider_message_id),\n      sent_at: toOptional(row.sent_at),\n      delivered_at: toOptional(row.delivered_at),\n      read_at: toOptional(row.read_at),\n      error_message: toOptional(row.error_message),\n      deleted_at: toOptional(row.deleted_at),\n    };\n  }\n\n  /**\n   * Filters → Query params DTO (GET)\n   */\n  toQueryDTO(filters: Partial<QueryNotificationsDTO>): QueryNotificationsDTO {\n    return {\n      page: filters.page ?? PAGINATION_DEFAULTS.PAGE,\n      limit: filters.limit ?? PAGINATION_DEFAULTS.LIMIT,\n      sort_by: filters.sort_by ?? 'created_at',\n      sort_order: filters.sort_order ?? 'desc',\n      user_id: filters.user_id,\n      channel: filters.channel,\n      status: filters.status,\n      category: filters.category,\n      template_id: filters.template_id,\n      recipient_id: filters.recipient_id,\n      type: filters.type,\n      is_read: filters.is_read,\n      created_after: filters.created_after,\n      created_before: filters.created_before,\n    };\n  }\n\n  /**\n   * Domain → Store state (serializable)\n   * For IN_APP notifications store\n   */\n  toStoreState(domain: NotificationsEntity): NotificationStoreItem {\n    return {\n      id: domain.id,\n      type: domain.type,\n      title: domain.title,\n      message: domain.message,\n      linkUrl: domain.linkUrl,\n      referenceId: domain.referenceId,\n      referenceType: domain.referenceType,\n      category: domain.category ?? 'transactional',\n      status: domain.status,\n      isRead: domain.isRead,\n      readAt: domain.readAt?.toISOString(),\n      createdAt: domain.createdAt.toISOString(),\n    };\n  }\n\n  /**\n   * Store state → Domain (restore)\n   */\n  fromStoreState(state: NotificationStoreItem): NotificationsEntity {\n    return {\n      id: state.id,\n      userId: '',\n      type: state.type as NotificationsEntity['type'],\n      title: state.title,\n      message: state.message,\n      linkUrl: state.linkUrl,\n      referenceId: state.referenceId,\n      referenceType: state.referenceType,\n      recipientId: '',\n      category: state.category,\n      status: state.status,\n      isRead: state.isRead,\n      readAt: state.readAt ? new Date(state.readAt) : undefined,\n      retryCount: 0,\n      createdAt: new Date(state.createdAt),\n    };\n  }\n\n  /**\n   * Domain Entity → Create DTO (for backend)\n   */\n  toCreateDTO(entity: NotificationsEntity): CreateNotificationsDTO {\n    return {\n      userId: entity.userId,\n      type: entity.type,\n      title: entity.title,\n      message: entity.message,\n      linkUrl: entity.linkUrl,\n      referenceId: entity.referenceId,\n      referenceType: entity.referenceType,\n      correlationId: entity.correlationId,\n      recipientId: entity.recipientId,\n      templateId: entity.templateId,\n      channel: entity.channel,\n      category: entity.category,\n      provider: entity.provider,\n      providerMessageId: entity.providerMessageId,\n    };\n  }\n\n  /**\n   * Domain Entity → Update DTO (for backend)\n   */\n  toUpdateDTO(entity: NotificationsEntity): UpdateNotificationsDTO {\n    return this.toCreateDTO(entity);\n  }\n\n  /**\n   * Partial Domain → Patch DTO (for backend)\n   */\n  toPatchDTO(partial: Partial<NotificationsEntity>): PatchNotificationsDTO {\n    return {\n      is_read: partial.isRead,\n      read_at: partial.readAt?.toISOString(),\n    };\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Stream Data Conversion\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Domain Entity → Stream Data (for broadcasting via SSE/WebSocket)\n   * Used by backend afterCreate hook to emit notification:created event\n   */\n  toStreamData(entity: NotificationsEntity): NotificationCreatedStreamData {\n    return {\n      notificationId: entity.id,\n      userId: entity.userId,\n      type: entity.type,\n      title: entity.title,\n      message: entity.message,\n      linkUrl: entity.linkUrl,\n      referenceId: entity.referenceId,\n      referenceType: entity.referenceType,\n      category: entity.category ?? 'transactional',\n      status: entity.status,\n      createdAt: entity.createdAt.toISOString(),\n      timestamp: new Date().toISOString(),\n    };\n  }\n\n  /**\n   * Stream Data → Store Item (for frontend store)\n   * Used by frontend stream handler to add notification to store\n   */\n  fromStreamData(streamData: NotificationCreatedStreamData): NotificationStoreItem {\n    return {\n      id: streamData.notificationId,\n      type: streamData.type,\n      title: streamData.title,\n      message: streamData.message,\n      linkUrl: streamData.linkUrl,\n      referenceId: streamData.referenceId,\n      referenceType: streamData.referenceType,\n      category: streamData.category,\n      status: streamData.status,\n      isRead: false,\n      createdAt: streamData.createdAt,\n    };\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Database Row Conversion\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Convert event payload/entity to database row format\n   * Used by event handlers to persist notifications to DB\n   */\n  toDbRow(\n    payload: Partial<NotificationsEntity> | Record<string, unknown>,\n    userId?: string\n  ): Partial<NotificationsDatabaseRow> {\n    const data = payload as Partial<NotificationsEntity>;\n    return {\n      user_id: userId ?? data.userId ?? SYSTEM_USER_ID,\n      type: data.type ?? 'SYSTEM',\n      title: data.title ?? '',\n      message: data.message ?? '',\n      link_url: data.linkUrl ?? null,\n      reference_id: data.referenceId ?? null,\n      reference_type: data.referenceType ?? null,\n      correlation_id: data.correlationId ?? null,\n      recipient_id: data.recipientId ?? '',\n      template_id: data.templateId ?? null,\n      channel: NotificationsMapperClass.mapChannelToDb(data.channel),\n      category: data.category ?? null,\n      provider: data.provider ?? null,\n      provider_message_id: data.providerMessageId ?? null,\n      status: data.status ?? 'queued',\n      sent_at: data.sentAt?.toISOString() ?? null,\n      delivered_at: data.deliveredAt?.toISOString() ?? null,\n      is_read: data.isRead ?? false,\n      read_at: data.readAt?.toISOString() ?? null,\n      error_message: data.errorMessage ?? null,\n      retry_count: data.retryCount ?? 0,\n    };\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────────\n  // Preference Mapping\n  // ─────────────────────────────────────────────────────────────────────────────\n\n  /** Category to preference field mapping */\n  private static readonly CATEGORY_PREFERENCE_MAP: Record<string, PreferenceToggleField> = {\n    marketing: 'marketing_enabled',\n    promotional: 'promotional_enabled',\n    social: 'social_enabled',\n    system: 'system_enabled',\n  };\n\n  /**\n   * Map notification category to preference database field.\n   * Returns the field name to disable for unsubscribe.\n   */\n  static mapCategoryToPreferenceField(category: string): PreferenceToggleField | undefined {\n    return this.CATEGORY_PREFERENCE_MAP[category];\n  }\n}\n\n// Export class for BaseDomainService.MapperClass\nexport { NotificationsMapperClass };\n\n// Singleton instance (for direct usage)\nexport const NotificationsMapper = new NotificationsMapperClass();\n","/**\n * Notifications Validator\n *\n * Validates and sanitizes Notifications DTOs using Zod schemas from @plyaz/types.\n * Supports list/delete operations for frontend, full CRUD for backend.\n *\n * Operations:\n * - delete (DELETE) - validateDelete, validateDeleteOrThrow\n * - query (GET)   - validateQuery, validateQueryOrThrow\n * - create (POST) - validateCreate, validateCreateOrThrow (backend)\n */\n\nimport { z } from 'zod';\nimport { BaseValidator } from '../../base';\nimport {\n  // Schemas (single source of truth from @plyaz/types)\n  DeleteNotificationsSchema,\n  QueryNotificationsSchema,\n  CreateNotificationsSchema,\n} from '@plyaz/types/core';\nimport type {\n  DeleteNotificationsDTO,\n  QueryNotificationsDTO,\n  CreateNotificationsDTO,\n} from '@plyaz/types/core';\nimport type { NotificationCategory, NotificationChannel } from '@plyaz/types/notifications';\nimport { NotificationPackageError } from '@plyaz/errors';\nimport { NOTIFICATION_ERROR_CODES } from '@plyaz/types/errors';\nimport { isInQuietHours } from '../../../utils/common';\nimport type { NotificationPreferencesDatabaseRow } from '../../../models/notifications';\n\n/** Categories that can be unsubscribed from (excludes 'transactional') */\nconst UNSUBSCRIBABLE_CATEGORIES: NotificationCategory[] = [\n  'marketing',\n  'promotional',\n  'social',\n  'system',\n];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Validator Class\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Notifications Validator implementation\n * Supports list/delete for frontend, full CRUD for backend\n *\n * All schemas imported from @plyaz/types/core - single source of truth\n *\n * Available methods:\n * - validateDelete(data) → ValidationResult<DeleteNotificationsDTO>\n * - validateDeleteOrThrow(data) → DeleteNotificationsDTO\n * - validateQuery(data) → ValidationResult<QueryNotificationsDTO>\n * - validateQueryOrThrow(data) → QueryNotificationsDTO\n * - validateCreate(data) → ValidationResult<CreateNotificationsDTO>\n * - validateCreateOrThrow(data) → CreateNotificationsDTO\n */\nclass NotificationsValidatorClass extends BaseValidator<\n  CreateNotificationsDTO,\n  CreateNotificationsDTO, // Update same as create\n  Partial<CreateNotificationsDTO>, // Patch\n  DeleteNotificationsDTO,\n  QueryNotificationsDTO\n> {\n  constructor() {\n    super({\n      createSchema: CreateNotificationsSchema,\n      updateSchema: CreateNotificationsSchema,\n      patchSchema: CreateNotificationsSchema.partial(),\n      deleteSchema: DeleteNotificationsSchema,\n      querySchema: QueryNotificationsSchema,\n    });\n  }\n\n  /**\n   * Validate notification ID for delete\n   */\n  validateNotificationId(id: string): boolean {\n    const result = z.string().uuid().safeParse(id);\n    return result.success;\n  }\n\n  /**\n   * Validate query filters\n   */\n  validateFilters(filters: Partial<QueryNotificationsDTO>): boolean {\n    const result = QueryNotificationsSchema.safeParse(filters);\n    return result.success;\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────────\n  // Unsubscribe Validation\n  // ─────────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Check if category is valid for unsubscribe.\n   */\n  isValidUnsubscribeCategory(category: string): category is NotificationCategory {\n    return UNSUBSCRIBABLE_CATEGORIES.includes(category as NotificationCategory);\n  }\n\n  /**\n   * Validate unsubscribe category - throws if invalid.\n   */\n  validateUnsubscribeCategoryOrThrow(category: string, isFullUnsubscribe: boolean): void {\n    if (!this.isValidUnsubscribeCategory(category) && !isFullUnsubscribe) {\n      throw new NotificationPackageError(\n        NOTIFICATION_ERROR_CODES.VALIDATION_FAILED,\n        NOTIFICATION_ERROR_CODES.VALIDATION_FAILED,\n        { context: { category, validCategories: UNSUBSCRIBABLE_CATEGORIES } }\n      );\n    }\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────────\n  // Preference Validation\n  // ─────────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Check if preferences allow sending a notification.\n   * Validates channel, category, and quiet hours.\n   */\n  checkPreferencesAllowSend(\n    prefs: NotificationPreferencesDatabaseRow,\n    category: NotificationCategory,\n    channel: NotificationChannel\n  ): boolean {\n    // Check channel\n    if (channel === 'email' && !prefs.email_enabled) return false;\n    if (channel === 'sms' && !prefs.sms_enabled) return false;\n    if (channel === 'push' && !prefs.push_enabled) return false;\n\n    // Check category\n    if (category === 'marketing' && !prefs.marketing_enabled) return false;\n    if (category === 'social' && !prefs.social_enabled) return false;\n    if (category === 'system' && !prefs.system_enabled) return false;\n    if (category === 'promotional' && !prefs.promotional_enabled) return false;\n\n    // Check quiet hours\n    if (prefs.quiet_hours_enabled) {\n      const inQuietHours = isInQuietHours(\n        prefs.quiet_hours_start,\n        prefs.quiet_hours_end,\n        prefs.quiet_hours_timezone || 'UTC'\n      );\n      if (inQuietHours) return false;\n    }\n\n    return true;\n  }\n}\n\n// Export class for BaseDomainService.ValidatorClass\nexport { NotificationsValidatorClass };\n\n// Singleton instance (for direct usage)\nexport const NotificationsValidator = new NotificationsValidatorClass();\n","/**\n * Frontend Notifications Domain Service\n *\n * Handles IN_APP notifications only. Email, SMS, and Push notifications\n * are backend-only operations via @plyaz/notifications package.\n *\n * Uses inherited methods from BaseFrontendDomainService:\n * - fetchAll() - inherited (GET /notifications via @plyaz/api)\n * - delete() - inherited (DELETE /notifications/:id via @plyaz/api)\n *\n * Streaming support:\n * - Real-time in-app notification updates (created, updated, deleted, read, unread)\n *\n * Runtime: Frontend (React, Next.js, etc.)\n *\n * @example\n * ```typescript\n * const service = await getFrontendNotificationsDomainService();\n *\n * // List and delete in-app notifications\n * const items = await service.fetchAll({ status: 'queued' });\n * await service.delete('notification-id');\n * ```\n */\n\nimport { STORE_KEYS } from '@plyaz/store';\nimport { PackageLogger } from '@plyaz/logger';\nimport { CorePackageError } from '@plyaz/errors';\nimport { fetchNotifications, deleteNotification } from '@plyaz/api';\nimport { ERROR_CODES } from '@plyaz/types/errors';\nimport { SERVICE_KEYS } from '@plyaz/types/core';\nimport type {\n  CoreServiceCreateOptions,\n  CoreBaseValidatorInstance,\n  CoreStreamHandlerDeclaration,\n  CoreStreamHandlerIds,\n  CoreStreamStoreGetter,\n  StreamMessage,\n} from '@plyaz/types/core';\nimport type {\n  NotificationsFrontendStoreSlice,\n  NotificationsFrontendStoreData,\n  NotificationStoreItem,\n} from '@plyaz/types/store';\nimport { BaseFrontendDomainService } from '../base';\nimport { FrontendEventPersistenceHandler } from '../../events/FrontendEventPersistenceHandler';\nimport { Core } from '../../init/CoreInitializer';\nimport { NotificationsMapperClass, NotificationsMapper } from './mappers/NotificationsMapper';\nimport { NotificationsValidatorClass } from './validators/NotificationsValidator';\n\nconst logger = new PackageLogger({\n  packageName: 'core',\n  service: 'FrontendNotificationsDomainService',\n});\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types (from @plyaz/types - single source of truth)\n// ─────────────────────────────────────────────────────────────────────────────\n\nimport type {\n  NotificationsEntity,\n  NotificationsResponseDTO,\n  CreateNotificationsDTO,\n  PatchNotificationsDTO,\n  QueryNotificationsDTO,\n  NotificationsFrontendServiceConfig,\n  NotificationCreatedStreamData,\n} from '@plyaz/types/core';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Service\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Frontend Notifications Domain Service\n *\n * Extends BaseFrontendDomainService with all generic types.\n * All CRUD methods are inherited from base class.\n *\n * Inherited from BaseFrontendDomainService:\n * - fetchAll() - list all notifications\n * - delete() - delete a notification\n */\nexport class FrontendNotificationsDomainService extends BaseFrontendDomainService<\n  NotificationsFrontendServiceConfig,\n  NotificationsFrontendStoreSlice,\n  NotificationsFrontendStoreData,\n  NotificationsEntity,\n  NotificationsResponseDTO,\n  CreateNotificationsDTO,\n  PatchNotificationsDTO,\n  QueryNotificationsDTO,\n  NotificationStoreItem,\n  InstanceType<typeof NotificationsMapperClass>,\n  CoreBaseValidatorInstance,\n  void // TDeleteResult - delete returns void\n> {\n  // ─────────────────────────────────────────────────────────────────────────\n  // Required Properties\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /** Service key for registry */\n  static readonly serviceKey = SERVICE_KEYS.NOTIFICATIONS_FRONTEND;\n\n  /**\n   * Primary store key for this service.\n   * Used by ServiceRegistry to auto-inject the store.\n   * Must be static for base class constructor to access.\n   */\n  static readonly primaryStoreKey = STORE_KEYS.NOTIFICATIONS;\n\n  /** Event prefix for all events emitted by this service */\n  protected eventPrefix = 'notifications';\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Static Factory Method\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Factory method for ServiceRegistry auto-initialization.\n   * Auto-registers event handlers for store updates.\n   */\n  static async create(\n    config: NotificationsFrontendServiceConfig = {},\n    options?: CoreServiceCreateOptions\n  ): Promise<FrontendNotificationsDomainService> {\n    // Auto-register event handlers when service is created\n    this.registerEventHandlers();\n\n    const mergedConfig: NotificationsFrontendServiceConfig = {\n      ...config,\n      // Use || instead of ?? because api.baseURL may be '' (empty string) for same-origin requests.\n      // The ?? operator only falls through on null/undefined, not empty strings.\n      // An empty string is not a valid API path, so we treat it as \"not provided\" and fall through to default.\n      // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n      apiBasePath: config.apiBasePath || options?.apiClient?.options?.baseURL || '',\n    };\n\n    const service = new FrontendNotificationsDomainService(mergedConfig, options);\n\n    if (mergedConfig.autoFetch) {\n      await service.fetchAll();\n    }\n\n    return service;\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Static: Stream Handlers\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /** Stream handler IDs - overrides base class pattern */\n  protected static override readonly STREAM_HANDLER_IDS: CoreStreamHandlerIds<'LISTENER'> = {\n    LISTENER: 'notifications:listener',\n  };\n\n  /** Default priority for stream handlers */\n  private static readonly DEFAULT_HANDLER_PRIORITY = 100;\n\n  /**\n   * Declarative stream handlers - auto-registered by base class\n   * Handles real-time in-app notification delivery.\n   *\n   * Only notification:created is needed - user receives new notifications.\n   * User subscribes to user:notifications:{userId} channel.\n   */\n  protected static override readonly STREAM_HANDLERS: CoreStreamHandlerDeclaration[] = [\n    {\n      id: FrontendNotificationsDomainService.STREAM_HANDLER_IDS.LISTENER,\n      channels: ['user:notifications:', 'notifications'],\n      events: ['notification:created'],\n      priority: FrontendNotificationsDomainService.DEFAULT_HANDLER_PRIORITY,\n      handler: (message: StreamMessage<unknown>, getStore: CoreStreamStoreGetter): void => {\n        // Stream data is auto-unwrapped by useStreamConnection's parseResponse\n        // So message.data is directly NotificationCreatedStreamData (not wrapped in { success, data })\n        const streamData = message.data as NotificationCreatedStreamData;\n        if (!streamData?.notificationId || !streamData?.userId) return;\n\n        const store = getStore()?.[STORE_KEYS.NOTIFICATIONS] as\n          | NotificationsFrontendStoreSlice\n          | undefined;\n        if (!store) return;\n\n        // Use mapper to convert stream data to store item format\n        const notification = NotificationsMapper.fromStreamData(streamData);\n\n        // Add new notification to store\n        store.addNotification(notification);\n      },\n    },\n  ];\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Static: Event Handlers (for store updates)\n  // ─────────────────────────────────────────────────────────────────────────\n\n  private static _eventHandlersRegistered = false;\n\n  /**\n   * Register event handlers for cross-service event reactions.\n   * Auto-called by create() method when service is initialized.\n   *\n   * IMPORTANT: When to use this vs storeHandlers in service config:\n   *\n   * **Use storeHandlers (service config)** for:\n   * - Simple, automatic store updates (addData, removeData, updateData)\n   * - Loading state management for THIS service's operations\n   * - Primary store population from API responses\n   * - Straightforward CRUD → store sync\n   *\n   * **Use FrontendEventPersistenceHandler (this method)** for:\n   * - Listening to events from OTHER services (cross-domain reactions)\n   * - Updating DIFFERENT stores based on events (not just primary store)\n   * - Complex conditional logic (e.g., block API calls when X event fires)\n   * - Side effects that storeHandlers cannot achieve\n   * - Coordinating multiple stores on a single event\n   *\n   * @example Cross-domain reaction\n   * ```typescript\n   * // When auth:logout fires, clear this domain's cached data\n   * 'auth:logout': {\n   *   handler: (store) => store.clearAll(),\n   * }\n   * ```\n   *\n   * @example Conditional logic\n   * ```typescript\n   * // Disable feature when maintenance mode event fires\n   * 'system:maintenance:started': {\n   *   handler: (store) => store.setDisabled(true),\n   * }\n   * ```\n   *\n   * @param verbose - Enable verbose logging\n   * @returns Cleanup function to unregister all handlers\n   */\n  static registerEventHandlers(verbose?: boolean): () => void {\n    // Skip if already registered\n    if (this._eventHandlersRegistered) {\n      logger.debug('Notifications frontend event handlers already registered');\n      return () => {};\n    }\n\n    // Helper to safely get store (SSR-safe)\n    // NOTE: This can access ANY store slice, not just this domain's primary store.\n    // Use this for cross-domain store updates that storeHandlers cannot achieve.\n    const getNotificationsStore = (): NotificationsFrontendStoreSlice | undefined => {\n      try {\n        return Core.rootStore?.getState().notifications;\n      } catch {\n        return undefined;\n      }\n    };\n\n    // Register cross-domain event handlers\n    // NOTE: For simple loading/CRUD operations on primary store, use storeHandlers instead.\n    // Use this for cross-domain reactions, conditional logic, or multi-store coordination.\n    FrontendEventPersistenceHandler.register<NotificationsFrontendStoreSlice, unknown>({\n      domain: 'notifications',\n      events: {\n        // ─────────────────────────────────────────────────────────────────────\n        // Cross-domain examples (react to OTHER services' events)\n        // ─────────────────────────────────────────────────────────────────────\n        // Example: Clear cache when user logs out\n        // 'auth:logout': {\n        //   handler: (store: NotificationsFrontendStoreSlice) => store.clearAll?.(),\n        // },\n        // Example: Disable operations during maintenance\n        // 'system:maintenance:started': {\n        //   handler: (store: NotificationsFrontendStoreSlice) => store.setDisabled?.(true),\n        // },\n        // 'system:maintenance:ended': {\n        //   handler: (store: NotificationsFrontendStoreSlice) => store.setDisabled?.(false),\n        // },\n        // Example: Refresh data when related domain changes\n        // 'relatedDomain:updated': {\n        //   handler: (store: NotificationsFrontendStoreSlice, payload: unknown) => {\n        //     // Trigger refetch or invalidate cache\n        //     store.setStale?.(true);\n        //   },\n        // },\n        // ─────────────────────────────────────────────────────────────────────\n        // Same-domain examples (only if storeHandlers are insufficient)\n        // ─────────────────────────────────────────────────────────────────────\n        // Example: Complex validation before allowing operation\n        // 'notifications:creating': {\n        //   handler: (store: NotificationsFrontendStoreSlice, payload: unknown) => {\n        //     // Check external conditions, emit blocking events, etc.\n        //   },\n        // },\n      },\n      getStore: getNotificationsStore,\n      verbose,\n    });\n\n    this._eventHandlersRegistered = true;\n    logger.info('Notifications frontend event handlers registered');\n\n    // Return cleanup function\n    return () => {\n      FrontendEventPersistenceHandler.unregisterAll();\n      this._eventHandlersRegistered = false;\n    };\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Constructor\n  // ─────────────────────────────────────────────────────────────────────────\n\n  constructor(config: NotificationsFrontendServiceConfig = {}, options?: CoreServiceCreateOptions) {\n    // Use || instead of ?? because apiBasePath may be '' (empty string) from config.\n    // Empty string is not a valid API path, so treat it as \"not provided\" and use default.\n    // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n    const apiBasePath = config.apiBasePath || '';\n\n    super({\n      serviceName: 'FrontendNotificationsDomainService',\n      supportedRuntimes: ['frontend'],\n      serviceConfig: {\n        enabled: true,\n        apiBasePath,\n        // Extract error from fetchff response\n        responseErrorKey: 'error',\n        // Unwrap API response: extract 'data' from response.data (ListNotificationResponse)\n        responseDataKey: 'data',\n        // Store data key: wrap entities as { notificationsList: [...] } for store.setData()\n        storeDataKey: 'notificationsList',\n        autoFetch: true,\n        pollingInterval: 30000,\n        ...config,\n        fetchers: {\n          fetchAll: async (query: QueryNotificationsDTO | undefined) => {\n            return fetchNotifications(query);\n          },\n          delete: async (id: string | undefined) => {\n            return deleteNotification(id!);\n          },\n        },\n      },\n      mapperClass: NotificationsMapperClass,\n      validatorClass: NotificationsValidatorClass,\n      injected: options?.injected,\n    });\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Abstract Implementations (Required by BaseDomainService)\n  // ─────────────────────────────────────────────────────────────────────────\n\n  isAvailable(): boolean {\n    return this.isServiceEnabled && typeof window !== 'undefined';\n  }\n\n  dispose(): void {\n    super.dispose();\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Lifecycle Hooks (Optional - Override only if needed)\n  // ─────────────────────────────────────────────────────────────────────────\n  //\n  // Available hooks to override:\n  // - protected async beforeFetchAll(query?): Promise<void>\n  // - protected async afterFetchAll(entities, query?): Promise<void>\n  // - protected async beforeFetchById(id): Promise<void>\n  // - protected async afterFetchById(entity): Promise<void>\n  // - protected async beforeCreate(data): Promise<void>\n  // - protected async afterCreate(entity): Promise<void>\n  // - protected async beforeUpdate(id, data): Promise<void>\n  // - protected async afterUpdate(id, entity): Promise<void>\n  // - protected async beforeDelete(id): Promise<void>\n  // - protected async afterDelete(id): Promise<void>\n  //\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Singleton Instance\n// ─────────────────────────────────────────────────────────────────────────────\n\nlet _instance: FrontendNotificationsDomainService | null = null;\n\n/**\n * Get or create singleton instance\n */\nexport async function getFrontendNotificationsDomainService(\n  config?: NotificationsFrontendServiceConfig,\n  options?: CoreServiceCreateOptions\n): Promise<FrontendNotificationsDomainService> {\n  _instance ??= await FrontendNotificationsDomainService.create(config, options);\n  return _instance;\n}\n\n/**\n * Lazy singleton proxy - creates instance on first access\n */\nexport const frontendNotificationsDomainService = new Proxy(\n  {} as FrontendNotificationsDomainService,\n  {\n    get(_, prop) {\n      if (!_instance) {\n        throw new CorePackageError(\n          'FrontendNotificationsDomainService not initialized. Call getFrontendNotificationsDomainService() first.',\n          ERROR_CODES.CORE_PROVIDER_INITIALIZATION_FAILED\n        );\n      }\n      return Reflect.get(_instance, prop);\n    },\n  }\n);\n\n/**\n * Reset singleton (for testing)\n */\nexport function resetNotificationsFrontendService(): void {\n  if (_instance) {\n    _instance.dispose();\n    _instance = null;\n  }\n}\n","/**\n * InitializationError Component\n *\n * Default error display when Plyaz initialization fails.\n * Can be overridden via the `error` prop on PlyazProvider.\n */\n\n'use client';\n\nimport type { CSSProperties, ReactElement } from 'react';\nimport type { CoreInitializationErrorProps as InitializationErrorProps } from '@plyaz/types/core';\n\n/**\n * Default styles for the error container\n */\nconst errorContainerStyle: CSSProperties = {\n  padding: '20px',\n  color: 'red',\n  fontFamily: 'system-ui, -apple-system, sans-serif',\n};\n\n/**\n * Default styles for the error heading\n */\nconst errorHeadingStyle: CSSProperties = {\n  margin: '0 0 10px 0',\n  fontSize: '1.25rem',\n  fontWeight: 600,\n};\n\n/**\n * Default styles for the error message\n */\nconst errorMessageStyle: CSSProperties = {\n  margin: 0,\n  fontSize: '0.875rem',\n};\n\n/**\n * Renders an initialization error state.\n *\n * @example\n * ```tsx\n * // Using default error display\n * <InitializationError error={new Error('Failed to connect')} />\n *\n * // Using custom error component\n * <InitializationError\n *   error={error}\n *   errorComponent={(err) => <CustomErrorBoundary error={err} />}\n * />\n * ```\n */\nexport function InitializationError({\n  error,\n  errorComponent,\n}: InitializationErrorProps): ReactElement {\n  if (errorComponent) {\n    return <>{errorComponent(error)}</>;\n  }\n\n  return (\n    <div style={errorContainerStyle}>\n      <h2 style={errorHeadingStyle}>Plyaz Initialization Failed</h2>\n      <p style={errorMessageStyle}>{error.message}</p>\n    </div>\n  );\n}\n","/**\n * InitializationLoading Component\n *\n * Default loading display while Plyaz is initializing.\n * Can be overridden via the `loading` prop on PlyazProvider.\n */\n\n'use client';\n\nimport type { CSSProperties, ReactElement } from 'react';\nimport type { CoreInitializationLoadingProps as InitializationLoadingProps } from '@plyaz/types/core';\n\n/**\n * Default styles for the loading container\n */\nconst loadingContainerStyle: CSSProperties = {\n  padding: '20px',\n  fontFamily: 'system-ui, -apple-system, sans-serif',\n};\n\n/**\n * Default styles for the loading message\n */\nconst loadingMessageStyle: CSSProperties = {\n  margin: 0,\n  fontSize: '0.875rem',\n  color: '#666',\n};\n\n/**\n * Renders an initialization loading state.\n *\n * @example\n * ```tsx\n * // Using default loading display\n * <InitializationLoading />\n *\n * // Using custom loading component\n * <InitializationLoading loading={<Skeleton />} />\n * ```\n */\nexport function InitializationLoading({ loading }: InitializationLoadingProps): ReactElement {\n  if (loading) {\n    return <>{loading}</>;\n  }\n\n  return (\n    <div style={loadingContainerStyle}>\n      <p style={loadingMessageStyle}>Initializing...</p>\n    </div>\n  );\n}\n","/**\n * Feature Flag Context Utilities\n *\n * Utilities for building, validating, and manipulating feature flag contexts.\n *\n * @fileoverview Feature flag context utilities\n * @version 1.0.0\n */\n\nimport type { FeatureFlagContext } from '@plyaz/types';\nimport { ISO_STANDARDS } from '@plyaz/config';\n\n/**\n * Builder class for creating feature flag evaluation contexts.\n * Provides a fluent interface for setting context properties.\n *\n * @class FeatureFlagContextBuilder\n *\n * @example\n * ```typescript\n * const context = new FeatureFlagContextBuilder()\n *   .setUserId('user123')\n *   .setUserRole('premium')\n *   .setEnvironment('production')\n *   .setPlatform('web')\n *   .setCustom({ subscription: 'premium', betaTester: true })\n *   .build();\n * ```\n */\nexport class FeatureFlagContextBuilder {\n  private context: Partial<FeatureFlagContext> = {};\n\n  /**\n   * Sets the user ID in the context.\n   *\n   * @param userId - User identifier\n   * @returns Builder instance for chaining\n   */\n  setUserId(userId: string): this {\n    this.context.userId = userId;\n    return this;\n  }\n\n  /**\n   * Sets the user email in the context.\n   *\n   * @param userEmail - User email address\n   * @returns Builder instance for chaining\n   */\n  setUserEmail(userEmail: string): this {\n    this.context.userEmail = userEmail;\n    return this;\n  }\n\n  /**\n   * Sets the user role in the context.\n   *\n   * @param userRole - User role or permission level\n   * @returns Builder instance for chaining\n   */\n  setUserRole(userRole: string): this {\n    this.context.userRole = userRole;\n    return this;\n  }\n\n  /**\n   * Sets the country in the context.\n   *\n   * @param country - Country code (ISO 3166-1 alpha-2)\n   * @returns Builder instance for chaining\n   */\n  setCountry(country: string): this {\n    this.context.country = country;\n    return this;\n  }\n\n  /**\n   * Sets the platform in the context.\n   *\n   * @param platform - Platform type\n   * @returns Builder instance for chaining\n   */\n  setPlatform(platform: 'web' | 'mobile' | 'desktop'): this {\n    this.context.platform = platform;\n    return this;\n  }\n\n  /**\n   * Sets the version in the context.\n   *\n   * @param version - Application version\n   * @returns Builder instance for chaining\n   */\n  setVersion(version: string): this {\n    this.context.version = version;\n    return this;\n  }\n\n  /**\n   * Sets the environment in the context.\n   *\n   * @param environment - Current environment\n   * @returns Builder instance for chaining\n   */\n  setEnvironment(environment: 'development' | 'staging' | 'production'): this {\n    this.context.environment = environment;\n    return this;\n  }\n\n  /**\n   * Sets custom context data.\n   *\n   * @param custom - Custom context properties\n   * @returns Builder instance for chaining\n   */\n  setCustom(custom: Record<string, unknown>): this {\n    this.context.custom = { ...this.context.custom, ...custom };\n    return this;\n  }\n\n  /**\n   * Adds a single custom property to the context.\n   *\n   * @param key - Custom property key\n   * @param value - Custom property value\n   * @returns Builder instance for chaining\n   */\n  addCustomProperty(key: string, value: unknown): this {\n    this.context.custom ??= {};\n    this.context.custom[key] = value;\n    return this;\n  }\n\n  /**\n   * Builds the final context object.\n   * Validates required fields and returns the context.\n   *\n   * @returns Complete feature flag context\n   * @throws Error if required environment is not set\n   */\n  build(): FeatureFlagContext {\n    return {\n      environment: this.context.environment ?? 'development',\n      userId: this.context.userId,\n      userEmail: this.context.userEmail,\n      userRole: this.context.userRole,\n      country: this.context.country,\n      platform: this.context.platform,\n      version: this.context.version,\n      custom: this.context.custom,\n    } satisfies FeatureFlagContext;\n  }\n\n  /**\n   * Clears all context data and resets the builder.\n   *\n   * @returns Builder instance for chaining\n   */\n  clear(): this {\n    this.context = {};\n    return this;\n  }\n\n  /**\n   * Creates a copy of the current builder state.\n   *\n   * @returns New builder instance with copied context\n   */\n  clone(): FeatureFlagContextBuilder {\n    const cloned = new FeatureFlagContextBuilder();\n    cloned.context = { ...this.context };\n    if (this.context.custom) {\n      cloned.context.custom = { ...this.context.custom };\n    }\n    return cloned;\n  }\n}\n\n/**\n * Context utilities for common scenarios.\n */\nexport const ContextUtils = {\n  /**\n   * Creates a basic context for anonymous users using the builder.\n   *\n   * @param environment - Target environment\n   * @param platform - User platform\n   * @returns Basic anonymous context\n   */\n  createAnonymousContext(\n    environment: 'development' | 'staging' | 'production',\n    platform: 'web' | 'mobile' | 'desktop' = 'web'\n  ): FeatureFlagContext {\n    return new FeatureFlagContextBuilder()\n      .setEnvironment(environment)\n      .setPlatform(platform)\n      .build();\n  },\n\n  /**\n   * Creates a context for authenticated users using the builder.\n   *\n   * @param params - User context parameters\n   * @returns User context\n   */\n  createUserContext(params: {\n    userId: string;\n    environment: 'development' | 'staging' | 'production';\n    userEmail?: string;\n    userRole?: string;\n    platform?: 'web' | 'mobile' | 'desktop';\n    country?: string;\n    version?: string;\n    custom?: Record<string, unknown>;\n  }): FeatureFlagContext {\n    const builder = new FeatureFlagContextBuilder()\n      .setUserId(params.userId)\n      .setEnvironment(params.environment);\n\n    if (params.userEmail) builder.setUserEmail(params.userEmail);\n    if (params.userRole) builder.setUserRole(params.userRole);\n    if (params.platform) builder.setPlatform(params.platform);\n    if (params.country) builder.setCountry(params.country);\n    if (params.version) builder.setVersion(params.version);\n    if (params.custom) builder.setCustom(params.custom);\n\n    return builder.build();\n  },\n\n  /**\n   * Creates a testing context with minimal required fields.\n   *\n   * @param overrides - Optional context overrides\n   * @returns Testing context\n   */\n  createTestingContext(overrides: Partial<FeatureFlagContext> = {}): FeatureFlagContext {\n    return {\n      environment: 'development',\n      platform: 'web',\n      ...overrides,\n    };\n  },\n\n  /**\n   * Validates if a context object is complete and valid.\n   *\n   * @param context - Context to validate\n   * @returns Validation result\n   */\n  validateContext(context: Partial<FeatureFlagContext>): {\n    isValid: boolean;\n    errors: string[];\n  } {\n    const errors: string[] = [];\n\n    if (!context.environment) {\n      errors.push('Environment is required');\n    } else if (!['development', 'staging', 'production'].includes(context.environment)) {\n      errors.push('Environment must be development, staging, or production');\n    }\n\n    if (context.platform && !['web', 'mobile', 'desktop'].includes(context.platform)) {\n      errors.push('Platform must be web, mobile, or desktop');\n    }\n\n    if (context.country && context.country.length !== ISO_STANDARDS.ISO_COUNTRY_CODE_LENGTH) {\n      errors.push('Country must be a 2-letter ISO country code');\n    }\n\n    return {\n      isValid: errors.length === 0,\n      errors,\n    };\n  },\n\n  /**\n   * Merges multiple context objects, with later contexts taking precedence.\n   *\n   * @param contexts - Array of contexts to merge\n   * @returns Merged context\n   */\n  mergeContexts(...contexts: Partial<FeatureFlagContext>[]): FeatureFlagContext {\n    const merged = contexts.reduce((acc, context) => {\n      const result = {\n        ...acc,\n        ...context,\n      };\n\n      // Only merge custom if either has it\n      if (acc.custom || context.custom) {\n        result.custom = {\n          ...acc.custom,\n          ...context.custom,\n        };\n      }\n\n      return result;\n    }, {} as Partial<FeatureFlagContext>);\n\n    merged.environment ??= 'development';\n\n    return merged as FeatureFlagContext;\n  },\n\n  /**\n   * Extracts a specific field value from a context.\n   *\n   * @param field - Field name to extract\n   * @param context - Context object\n   * @returns Field value or undefined\n   */\n  getContextValue(field: string, context: FeatureFlagContext): unknown {\n    const standardFields = {\n      userId: (ctx: FeatureFlagContext) => ctx.userId,\n      userEmail: (ctx: FeatureFlagContext) => ctx.userEmail,\n      userRole: (ctx: FeatureFlagContext) => ctx.userRole,\n      country: (ctx: FeatureFlagContext) => ctx.country,\n      platform: (ctx: FeatureFlagContext) => ctx.platform,\n      version: (ctx: FeatureFlagContext) => ctx.version,\n      environment: (ctx: FeatureFlagContext) => ctx.environment,\n      custom: (ctx: FeatureFlagContext) => ctx.custom,\n    };\n\n    if (field in standardFields) {\n      return standardFields[field as keyof typeof standardFields](context);\n    }\n\n    return context.custom?.[field];\n  },\n\n  /**\n   * Creates a context fingerprint for caching and consistency.\n   *\n   * @param context - Context to fingerprint\n   * @returns String fingerprint\n   */\n  createFingerprint(context: FeatureFlagContext): string {\n    const relevant = {\n      userId: context.userId,\n      userRole: context.userRole,\n      environment: context.environment,\n      platform: context.platform,\n      country: context.country,\n      version: context.version,\n      custom: context.custom,\n    };\n\n    // Filter out undefined values and sort keys for consistency\n    const filtered = Object.entries(relevant)\n      .filter(([, value]) => value !== undefined)\n      .sort(([a], [b]) => a.localeCompare(b))\n      .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});\n\n    return JSON.stringify(filtered);\n  },\n\n  /**\n   * Sanitizes a context by removing sensitive information.\n   *\n   * @param context - Context to sanitize\n   * @param sensitiveFields - Fields to remove (default: ['userEmail'])\n   * @returns Sanitized context\n   */\n  sanitizeContext(\n    context: FeatureFlagContext,\n    sensitiveFields: string[] = ['userEmail']\n  ): FeatureFlagContext {\n    const sanitized = { ...context };\n\n    // Deep copy custom object if it exists\n    if (context.custom) {\n      sanitized.custom = { ...context.custom };\n    }\n\n    for (const field of sensitiveFields) {\n      if (field in sanitized) {\n        delete (sanitized as Record<string, unknown>)[field];\n      }\n      if (sanitized.custom && field in sanitized.custom) {\n        delete sanitized.custom[field];\n      }\n    }\n\n    return sanitized;\n  },\n} as const;\n\n/**\n * Utility for creating feature flag context for backend applications.\n *\n * @param params - Context parameters\n * @returns Backend-optimized feature flag context\n */\nexport function createBackendContext(params: {\n  userId?: string;\n  userEmail?: string;\n  environment: 'development' | 'staging' | 'production';\n  userRole?: string;\n  platform?: 'api' | 'worker' | 'cron';\n  country?: string;\n  version?: string;\n  custom?: Record<string, unknown>;\n}): {\n  environment: 'development' | 'staging' | 'production';\n  userId?: string;\n  userEmail?: string;\n  userRole?: string;\n  platform: 'api' | 'worker' | 'cron';\n  country?: string;\n  version?: string;\n  custom?: Record<string, unknown>;\n} {\n  return {\n    environment: params.environment,\n    userId: params.userId,\n    userEmail: params.userEmail,\n    userRole: params.userRole,\n    platform: params.platform ?? 'api',\n    country: params.country,\n    version: params.version,\n    custom: params.custom,\n  };\n}\n\n/**\n * Utility for creating feature flag context for frontend applications.\n *\n * @param params - Context parameters\n * @returns Frontend-optimized feature flag context\n */\nexport function createFrontendContext(params: {\n  userId?: string;\n  userEmail?: string;\n  environment: 'development' | 'staging' | 'production';\n  userRole?: string;\n  platform?: 'web' | 'mobile' | 'desktop';\n  country?: string;\n  version?: string;\n  custom?: Record<string, unknown>;\n}): {\n  environment: 'development' | 'staging' | 'production';\n  userId?: string;\n  userEmail?: string;\n  userRole?: string;\n  platform: 'web' | 'mobile' | 'desktop';\n  country?: string;\n  version?: string;\n  custom?: Record<string, unknown>;\n} {\n  return {\n    environment: params.environment,\n    userId: params.userId,\n    userEmail: params.userEmail,\n    userRole: params.userRole,\n    platform: params.platform ?? 'web',\n    country: params.country,\n    version: params.version,\n    custom: params.custom,\n  };\n}\n","/**\n * Feature Flag Condition Utilities\n *\n * Utilities for evaluating feature flag conditions and rules.\n *\n * @fileoverview Condition evaluation utilities\n * @version 1.0.0\n */\n\nimport type { FeatureFlagCondition } from '@plyaz/types';\nimport { ERROR_CODES } from '@plyaz/types';\nimport { CorePackageError } from '@plyaz/errors';\n\n/**\n * Evaluates condition operator against context value.\n *\n * @param condition - The condition to evaluate\n * @param contextValue - The context value to check against\n * @returns true if the condition matches\n */\nexport function evaluateConditionOperator(\n  condition: FeatureFlagCondition,\n  contextValue: unknown\n): boolean {\n  const { operator } = condition;\n\n  if (isEqualityOperator(operator)) {\n    return evaluateEqualityOperator(operator, contextValue, condition.value);\n  }\n\n  if (isStringOperator(operator)) {\n    return evaluateStringOperator(operator, contextValue, condition.value);\n  }\n\n  if (isArrayOperator(operator)) {\n    return evaluateArrayOperator(operator, condition.value, contextValue);\n  }\n\n  if (isNumericOperator(operator)) {\n    return evaluateNumericOperator(operator, contextValue, condition.value);\n  }\n\n  return false;\n}\n\n/**\n * Checks if operator is equality-based.\n *\n * @param operator - The operator to check\n * @returns true if equality operator\n */\nexport function isEqualityOperator(operator: string): boolean {\n  return operator === 'equals' || operator === 'not_equals';\n}\n\n/**\n * Checks if operator is string-based.\n *\n * @param operator - The operator to check\n * @returns true if string operator\n */\nexport function isStringOperator(operator: string): boolean {\n  return operator === 'contains' || operator === 'not_contains';\n}\n\n/**\n * Checks if operator is array-based.\n *\n * @param operator - The operator to check\n * @returns true if array operator\n */\nexport function isArrayOperator(operator: string): boolean {\n  return operator === 'in' || operator === 'not_in';\n}\n\n/**\n * Checks if operator is numeric-based.\n *\n * @param operator - The operator to check\n * @returns true if numeric operator\n */\nexport function isNumericOperator(operator: string): boolean {\n  return operator === 'greater_than' || operator === 'less_than';\n}\n\n/**\n * Evaluates equality operators.\n *\n * @param operator - equals or not_equals\n * @param contextValue - Value from context\n * @param conditionValue - Value from condition\n * @returns Evaluation result\n */\nexport function evaluateEqualityOperator(\n  operator: string,\n  contextValue: unknown,\n  conditionValue: unknown\n): boolean {\n  const isEqual = contextValue === conditionValue;\n  return operator === 'equals' ? isEqual : !isEqual;\n}\n\n/**\n * Evaluates string operators.\n *\n * @param operator - contains or not_contains\n * @param contextValue - Value from context\n * @param conditionValue - Value from condition\n * @returns Evaluation result\n */\nexport function evaluateStringOperator(\n  operator: string,\n  contextValue: unknown,\n  conditionValue: unknown\n): boolean {\n  // Handle string contains\n  if (typeof contextValue === 'string' && typeof conditionValue === 'string') {\n    const contains = contextValue.includes(conditionValue);\n    return operator === 'contains' ? contains : !contains;\n  }\n\n  // Handle array contains\n  if (Array.isArray(contextValue) && typeof conditionValue === 'string') {\n    const contains = contextValue.includes(conditionValue);\n    return operator === 'contains' ? contains : !contains;\n  }\n\n  // For not_contains, if neither string nor array match, return true\n  return operator === 'not_contains';\n}\n\n/**\n * Evaluates array operators.\n *\n * @param operator - in or not_in\n * @param conditionValue - Array value from condition\n * @param contextValue - Value from context\n * @returns Evaluation result\n */\nexport function evaluateArrayOperator(\n  operator: string,\n  conditionValue: unknown,\n  contextValue: unknown\n): boolean {\n  if (!Array.isArray(conditionValue)) {\n    // For not_in operator, if condition value is not an array, return true\n    return operator === 'not_in';\n  }\n\n  const isIncluded = conditionValue.includes(contextValue);\n  return operator === 'in' ? isIncluded : !isIncluded;\n}\n\n/**\n * Evaluates numeric operators.\n *\n * @param operator - greater_than or less_than\n * @param contextValue - Value from context\n * @param conditionValue - Value from condition\n * @returns Evaluation result\n */\nfunction compareValues<T>(operator: string, left: T, right: T): boolean {\n  switch (operator) {\n    case 'greater_than':\n      return left > right;\n    case 'less_than':\n      return left < right;\n    default:\n      return false;\n  }\n}\n\nexport function evaluateNumericOperator(\n  operator: string,\n  contextValue: unknown,\n  conditionValue: unknown\n): boolean {\n  // Try numeric comparison first\n  const contextNum = Number(contextValue);\n  const conditionNum = Number(conditionValue);\n\n  if (!isNaN(contextNum) && !isNaN(conditionNum)) {\n    return compareValues(operator, contextNum, conditionNum);\n  }\n\n  // Fall back to string comparison for non-numeric values\n  if (typeof contextValue === 'string' && typeof conditionValue === 'string') {\n    return compareValues(operator, contextValue, conditionValue);\n  }\n\n  return false;\n}\n\n/**\n * Condition evaluation utilities.\n */\nexport const ConditionUtils = {\n  /**\n   * Evaluates multiple conditions with AND logic.\n   *\n   * @param conditions - Array of conditions\n   * @param contextValue - Context value getter function\n   * @returns true if all conditions match\n   */\n  evaluateConditionsAnd: (\n    conditions: FeatureFlagCondition[],\n    contextValue: (field: string) => unknown\n  ): boolean => {\n    if (conditions.length === 0) return true;\n\n    return conditions.every(condition => {\n      const value = contextValue(condition.field);\n      if (value === undefined) return false;\n      return evaluateConditionOperator(condition, value);\n    });\n  },\n\n  /**\n   * Evaluates multiple conditions with OR logic.\n   *\n   * @param conditions - Array of conditions\n   * @param contextValue - Context value getter function\n   * @returns true if any condition matches\n   */\n  evaluateConditionsOr: (\n    conditions: FeatureFlagCondition[],\n    contextValue: (field: string) => unknown\n  ): boolean => {\n    if (conditions.length === 0) return true;\n\n    return conditions.some(condition => {\n      const value = contextValue(condition.field);\n      if (value === undefined) return false;\n      return evaluateConditionOperator(condition, value);\n    });\n  },\n\n  /**\n   * Validates a condition structure.\n   *\n   * @param condition - Condition to validate\n   * @returns Validation result\n   */\n  validateCondition: (\n    condition: Partial<FeatureFlagCondition>\n  ): {\n    isValid: boolean;\n    errors: string[];\n  } => {\n    const errors: string[] = [];\n\n    if (!condition.field) {\n      errors.push('Field is required');\n    }\n\n    if (!condition.operator) {\n      errors.push('Operator is required');\n    } else {\n      const validOperators = [\n        'equals',\n        'not_equals',\n        'contains',\n        'not_contains',\n        'in',\n        'not_in',\n        'greater_than',\n        'less_than',\n      ];\n      if (!validOperators.includes(condition.operator)) {\n        errors.push(`Invalid operator: ${condition.operator}`);\n      }\n    }\n\n    if (condition.value === undefined) {\n      errors.push('Value is required');\n    }\n\n    return {\n      isValid: errors.length === 0,\n      errors,\n    };\n  },\n\n  /**\n   * Creates a condition object with validation.\n   *\n   * @param field - Context field to evaluate\n   * @param operator - Comparison operator\n   * @param value - Value to compare against\n   * @returns Valid condition object\n   */\n  createCondition: (\n    field: string,\n    operator: FeatureFlagCondition['operator'],\n    value: FeatureFlagCondition['value']\n  ): FeatureFlagCondition => {\n    const condition = { field, operator, value } as FeatureFlagCondition;\n    const validation = ConditionUtils.validateCondition(condition);\n\n    if (!validation.isValid) {\n      throw new CorePackageError(\n        `Invalid condition: ${validation.errors.join(', ')}`,\n        ERROR_CODES.VALIDATION_ERROR\n      );\n    }\n\n    return condition;\n  },\n} as const;\n","/**\n * Feature Flag Evaluation Engine\n *\n * Core engine for evaluating feature flags with rules, targeting, and rollouts.\n * This will be moved to @plyaz/core when the package structure is finalized.\n *\n * @fileoverview Core feature flag evaluation engine\n * @version 1.0.0\n */\n\nimport type {\n  FeatureFlag,\n  FeatureFlagRule,\n  FeatureFlagCondition,\n  FeatureFlagContext,\n  FeatureFlagEvaluation,\n  FeatureFlagValue,\n} from '@plyaz/types';\nimport { PackageLogger } from '@plyaz/logger';\nimport { isInRollout, createRolloutIdentifier, isTruthy } from '@utils/common';\nimport { ContextUtils, evaluateConditionOperator } from '@utils/featureFlags';\n\n/**\n * Core feature flag evaluation engine.\n * Handles all the logic for evaluating feature flags including rules, targeting, and rollouts.\n *\n * @class FeatureFlagEngine\n *\n * @example\n * ```typescript\n * const engine = new FeatureFlagEngine(defaultFlags, true);\n * engine.setFlags(flagsFromDatabase);\n * engine.setRules(rulesFromDatabase);\n *\n * const evaluation = engine.evaluate('AUTH_GOOGLE', context);\n * console.log(evaluation.isEnabled); // true/false\n * ```\n */\nexport class FeatureFlagEngine<FeatureFlagKey extends string> {\n  /** Logger instance */\n  private readonly logger = new PackageLogger({\n    packageName: 'core',\n    service: 'FeatureFlagEngine',\n  });\n\n  /** Storage for active feature flags */\n  private flags: Map<FeatureFlagKey, FeatureFlag<FeatureFlagKey>> = new Map();\n  /** Storage for targeting rules, organized by flag key */\n  private rules: Map<FeatureFlagKey, FeatureFlagRule<FeatureFlagKey>[]> = new Map();\n  /** Storage for manual overrides (useful for testing) */\n  private overrides: Map<FeatureFlagKey, FeatureFlagValue> = new Map();\n\n  /**\n   * Creates a new feature flag evaluation engine.\n   *\n   * @param defaults - Default flag values to fall back to\n   * @param isLoggingEnabled - Whether to enable debug logging\n   */\n  constructor(\n    private defaults: Record<FeatureFlagKey, FeatureFlagValue>,\n    private isLoggingEnabled = false\n  ) {}\n\n  /**\n   * Sets the active feature flags for evaluation.\n   * Clears existing flags and rules before setting new ones.\n   *\n   * @param flags - Array of feature flags to activate\n   */\n  setFlags(flags: FeatureFlag<FeatureFlagKey>[]): void {\n    this.flags.clear();\n    this.rules.clear();\n\n    for (const flag of flags) {\n      this.flags.set(flag.key, flag);\n    }\n\n    this.log('Loaded flags:', this.flags.size);\n  }\n\n  /**\n   * Sets the targeting rules for feature flags.\n   * Rules are automatically sorted by priority (higher numbers first).\n   *\n   * @param rules - Array of feature flag rules\n   */\n  setRules(rules: FeatureFlagRule<FeatureFlagKey>[]): void {\n    this.rules.clear();\n\n    for (const rule of rules) {\n      const existing = this.rules.get(rule.flagKey) ?? [];\n      existing.push(rule);\n      // Sort by priority (higher priority first)\n      existing.sort((a, b) => b.priority - a.priority);\n      this.rules.set(rule.flagKey, existing);\n    }\n\n    this.log('Loaded rules:', rules.length);\n  }\n\n  /**\n   * Gets all targeting rules.\n   *\n   * @returns Array of all feature flag rules\n   */\n  getRules(): FeatureFlagRule<FeatureFlagKey>[] {\n    const allRules: FeatureFlagRule<FeatureFlagKey>[] = [];\n    for (const rules of this.rules.values()) {\n      allRules.push(...rules);\n    }\n    return allRules;\n  }\n\n  /**\n   * Sets a manual override for a specific flag.\n   * Overrides take precedence over all other evaluation logic.\n   *\n   * @param key - The flag key to override\n   * @param value - The value to force for this flag\n   */\n  setOverride(key: FeatureFlagKey, value: FeatureFlagValue): void {\n    this.overrides.set(key, value);\n    this.log('Override set:', key, value);\n  }\n\n  /**\n   * Removes a manual override for a specific flag.\n   *\n   * @param key - The flag key to remove override for\n   */\n  removeOverride(key: FeatureFlagKey): void {\n    this.overrides.delete(key);\n    this.log('Override removed:', key);\n  }\n\n  /**\n   * Updates the default values for feature flags.\n   * This is useful when the FEATURES constant is updated at runtime.\n   *\n   * @param newDefaults - New default values\n   */\n  updateDefaults(newDefaults: Record<FeatureFlagKey, FeatureFlagValue>): void {\n    this.defaults = newDefaults;\n    this.log('Updated default feature values');\n  }\n\n  /**\n   * Clears all manual overrides.\n   */\n  clearOverrides(): void {\n    this.overrides.clear();\n    this.log('All overrides cleared');\n  }\n\n  /**\n   * Gets all current flags.\n   *\n   * @returns Array of all feature flags\n   */\n  getFlags(): FeatureFlag<FeatureFlagKey>[] {\n    return Array.from(this.flags.values());\n  }\n\n  /**\n   * Evaluates a feature flag and returns the complete evaluation result.\n   *\n   * @param key - The feature flag key to evaluate\n   * @param context - Optional context for targeting\n   * @returns Complete evaluation result with value and metadata\n   */\n  evaluate(\n    key: FeatureFlagKey,\n    context?: FeatureFlagContext\n  ): FeatureFlagEvaluation<FeatureFlagKey> {\n    const evaluatedAt = new Date();\n\n    // Check for override first\n    const overrideResult = this.checkOverride(key, evaluatedAt);\n    if (overrideResult) return overrideResult;\n\n    // Get flag from storage\n    const flag = this.flags.get(key);\n    if (!flag) {\n      return this.createDefaultEvaluation(key, evaluatedAt);\n    }\n\n    // Check if flag is disabled\n    if (!flag.isEnabled) {\n      return this.createDisabledEvaluation(key, evaluatedAt);\n    }\n\n    // Check environment\n    if (!this.isEnvironmentMatch(flag, context)) {\n      return this.createDefaultEvaluation(key, evaluatedAt);\n    }\n\n    // Evaluate rules\n    const ruleResult = this.evaluateRules(key, context, evaluatedAt);\n    if (ruleResult) return ruleResult;\n\n    // Check flag-level rollout\n    if (!this.isInFlagRollout(key, flag, context)) {\n      return this.createDefaultEvaluation(key, evaluatedAt);\n    }\n\n    // Return flag value\n    return this.createFlagEvaluation(key, flag, evaluatedAt);\n  }\n\n  /**\n   * Checks for manual override and returns evaluation if found.\n   *\n   * @private\n   * @param key - The feature flag key\n   * @param evaluatedAt - Evaluation timestamp\n   * @returns Evaluation result or null if no override\n   */\n  private checkOverride(\n    key: FeatureFlagKey,\n    evaluatedAt: Date\n  ): FeatureFlagEvaluation<FeatureFlagKey> | null {\n    if (!this.overrides.has(key)) return null;\n\n    const value = this.overrides.get(key)!;\n    return {\n      flagKey: key,\n      value,\n      isEnabled: isTruthy(value),\n      reason: 'override',\n      evaluatedAt,\n    } satisfies FeatureFlagEvaluation<FeatureFlagKey>;\n  }\n\n  /**\n   * Creates default evaluation result.\n   *\n   * @private\n   * @param key - The feature flag key\n   * @param evaluatedAt - Evaluation timestamp\n   * @returns Default evaluation result\n   */\n  private createDefaultEvaluation(\n    key: FeatureFlagKey,\n    evaluatedAt: Date\n  ): FeatureFlagEvaluation<FeatureFlagKey> {\n    const defaultValue = this.defaults[key] ?? false;\n    return {\n      flagKey: key,\n      value: defaultValue,\n      isEnabled: isTruthy(defaultValue),\n      reason: 'default',\n      evaluatedAt,\n    } satisfies FeatureFlagEvaluation<FeatureFlagKey>;\n  }\n\n  /**\n   * Creates disabled evaluation result.\n   *\n   * @private\n   * @param key - The feature flag key\n   * @param evaluatedAt - Evaluation timestamp\n   * @returns Disabled evaluation result\n   */\n  private createDisabledEvaluation(\n    key: FeatureFlagKey,\n    evaluatedAt: Date\n  ): FeatureFlagEvaluation<FeatureFlagKey> {\n    return {\n      flagKey: key,\n      value: false,\n      isEnabled: false,\n      reason: 'disabled',\n      evaluatedAt,\n    } satisfies FeatureFlagEvaluation<FeatureFlagKey>;\n  }\n\n  /**\n   * Creates flag evaluation result.\n   *\n   * @private\n   * @param key - The feature flag key\n   * @param flag - The feature flag\n   * @param evaluatedAt - Evaluation timestamp\n   * @returns Flag evaluation result\n   */\n  private createFlagEvaluation(\n    key: FeatureFlagKey,\n    flag: FeatureFlag<FeatureFlagKey>,\n    evaluatedAt: Date\n  ): FeatureFlagEvaluation<FeatureFlagKey> {\n    return {\n      flagKey: key,\n      value: flag.value,\n      isEnabled: isTruthy(flag.value),\n      reason: 'default',\n      evaluatedAt,\n    } satisfies FeatureFlagEvaluation<FeatureFlagKey>;\n  }\n\n  /**\n   * Checks if environment matches for flag evaluation.\n   *\n   * @private\n   * @param flag - The feature flag\n   * @param context - Evaluation context\n   * @returns true if environment matches\n   */\n  private isEnvironmentMatch(\n    flag: FeatureFlag<FeatureFlagKey>,\n    context?: FeatureFlagContext\n  ): boolean {\n    return flag.environment === 'all' || context?.environment === flag.environment;\n  }\n\n  /**\n   * Checks if user is in flag-level rollout.\n   *\n   * @private\n   * @param key - The feature flag key\n   * @param flag - The feature flag\n   * @param context - Evaluation context\n   * @returns true if user is in rollout\n   */\n  private isInFlagRollout(\n    key: FeatureFlagKey,\n    flag: FeatureFlag<FeatureFlagKey>,\n    context?: FeatureFlagContext\n  ): boolean {\n    if (flag.rolloutPercentage === undefined) return true;\n    const identifier = createRolloutIdentifier(key, context?.userId);\n    return isInRollout(identifier, flag.rolloutPercentage);\n  }\n\n  /**\n   * Evaluates all rules for a flag.\n   *\n   * @private\n   * @param key - The feature flag key\n   * @param context - Evaluation context\n   * @param evaluatedAt - Evaluation timestamp\n   * @returns Rule evaluation result or null if no match\n   */\n  private evaluateRules(\n    key: FeatureFlagKey,\n    context?: FeatureFlagContext,\n    evaluatedAt?: Date\n  ): FeatureFlagEvaluation<FeatureFlagKey> | null {\n    const rules = this.rules.get(key) ?? [];\n\n    for (const rule of rules) {\n      if (!rule.isEnabled) continue;\n\n      const ruleResult = this.evaluateMatchingRule(key, rule, context, evaluatedAt);\n      if (ruleResult) return ruleResult;\n    }\n\n    return null;\n  }\n\n  /**\n   * Evaluates a single matching rule and returns result if it passes.\n   *\n   * @private\n   * @param key - The feature flag key\n   * @param rule - The rule to evaluate\n   * @param context - Evaluation context\n   * @param evaluatedAt - Evaluation timestamp\n   * @returns Rule evaluation result or null if no match\n   */\n  private evaluateMatchingRule(\n    key: FeatureFlagKey,\n    rule: FeatureFlagRule<FeatureFlagKey>,\n    context?: FeatureFlagContext,\n    evaluatedAt?: Date\n  ): FeatureFlagEvaluation<FeatureFlagKey> | null {\n    if (!this.evaluateRule(rule, context)) return null;\n\n    const isInRuleRollout =\n      rule.rolloutPercentage === undefined ||\n      isInRollout(createRolloutIdentifier(key, context?.userId), rule.rolloutPercentage);\n\n    if (!isInRuleRollout) return null;\n\n    return {\n      flagKey: key,\n      value: rule.value,\n      isEnabled: isTruthy(rule.value),\n      reason: 'rule_match',\n      matchedRuleId: rule.id,\n      evaluatedAt: evaluatedAt ?? new Date(),\n    } satisfies FeatureFlagEvaluation<FeatureFlagKey>;\n  }\n\n  /**\n   * Evaluates a single rule against the provided context.\n   * All conditions in the rule must match (AND logic).\n   *\n   * @private\n   * @param rule - The rule to evaluate\n   * @param context - Context to evaluate against\n   * @returns true if the rule matches the context\n   */\n  private evaluateRule(\n    rule: FeatureFlagRule<FeatureFlagKey>,\n    context?: FeatureFlagContext\n  ): boolean {\n    if (rule.conditions.length === 0) return true;\n\n    // All conditions must match (AND logic)\n    return rule.conditions.every(condition => this.evaluateCondition(condition, context));\n  }\n\n  /**\n   * Evaluates a single condition against the provided context.\n   *\n   * @private\n   * @param condition - The condition to evaluate\n   * @param context - Context to evaluate against\n   * @returns true if the condition matches\n   */\n  private evaluateCondition(\n    condition: FeatureFlagCondition,\n    context?: FeatureFlagContext\n  ): boolean {\n    if (!context) return false;\n\n    const contextValue = ContextUtils.getContextValue(condition.field, context);\n    if (contextValue === undefined) return false;\n\n    return evaluateConditionOperator(condition, contextValue);\n  }\n\n  /**\n   * Logs debug information if logging is enabled.\n   *\n   * @private\n   * @param args - Arguments to log\n   */\n  private log(...args: unknown[]): void {\n    if (this.isLoggingEnabled) {\n      this.logger.debug(args.map(arg => String(arg)).join(' '));\n    }\n  }\n}\n","/**\n * Feature Flag Provider - Core Implementation\n *\n * Main provider class that orchestrates feature flag evaluation and management.\n * This will be moved to @plyaz/core when the package structure is finalized.\n *\n * @fileoverview Core feature flag provider implementation\n * @version 1.0.0\n */\n\nimport type {\n  FeatureFlagProvider as IFeatureFlagProvider,\n  FeatureFlagConfig,\n  FeatureFlagContext,\n  FeatureFlagEvaluation,\n  FeatureFlagValue,\n  FetchFeatureFlagDataResponse,\n  FeatureFlag,\n  FeatureFlagRule,\n  CreateFlagRequest,\n} from '@plyaz/types';\nimport { FeatureFlagEngine } from '@engine/featureFlags/engine';\nimport { CacheManager } from '@base/cache/index';\nimport { TIME_CONSTANTS } from '@plyaz/config';\n\n/**\n * Subscription callback function type\n */\nexport type SubscriptionCallback = () => void;\n\n/**\n * Core feature flag provider that implements the main business logic.\n * This class orchestrates between the evaluation engine, caching, and data providers.\n *\n * @class FeatureFlagProvider\n * @implements {IFeatureFlagProvider}\n *\n * @example\n * ```typescript\n * const provider = new MemoryFeatureFlagProvider<MyFeatureFlags>(config, FEATURES);\n * await provider.initialize();\n *\n * const isEnabled = await provider.isEnabled('AUTH_GOOGLE', context);\n * const value = await provider.getValue('ROLLOUT_PERCENTAGE', context);\n * ```\n */\nexport abstract class FeatureFlagProvider<FeatureFlagKey extends string>\n  implements IFeatureFlagProvider<FeatureFlagKey>\n{\n  protected engine: FeatureFlagEngine<FeatureFlagKey>;\n  protected cacheManager: CacheManager;\n  protected subscribers = new Set<SubscriptionCallback>();\n  protected refreshTimer?: ReturnType<typeof setInterval>;\n  protected isInitialized = false;\n  protected features: Record<FeatureFlagKey, FeatureFlagValue>;\n  protected initializePromise?: Promise<void>;\n\n  /**\n   * Creates a new feature flag provider.\n   *\n   * @param config - Provider configuration\n   * @param features - Record of feature flag keys to their default values\n   */\n  constructor(\n    protected config: FeatureFlagConfig<FeatureFlagKey>,\n    features: Record<FeatureFlagKey, FeatureFlagValue>\n  ) {\n    this.features = features;\n    // Initialize engine with defaults from FEATURES constant\n    this.engine = new FeatureFlagEngine<FeatureFlagKey>(features, config.isLoggingEnabled ?? false);\n\n    // Initialize cache manager\n    this.cacheManager = new CacheManager({\n      isEnabled: config.isCacheEnabled,\n      ttl: config.cacheTtl,\n      strategy: 'memory', // Default to memory, can be overridden\n    });\n\n    this.setupRefreshTimer();\n  }\n\n  /**\n   * Abstract method to fetch flags and rules from the provider's data source.\n   * Must be implemented by concrete provider classes.\n   *\n   * @protected\n   * @abstract\n   * @returns Promise resolving to flags and rules\n   */\n  protected abstract fetchData(): Promise<FetchFeatureFlagDataResponse<FeatureFlagKey>>;\n\n  /**\n   * Initializes the provider by loading initial data.\n   *\n   * @returns Promise that resolves when initialization is complete\n   */\n  async initialize(): Promise<void> {\n    if (this.isInitialized) {\n      return;\n    }\n\n    // If already initializing, wait for that to complete\n    if (this.initializePromise) {\n      return this.initializePromise;\n    }\n\n    // Create and store the initialization promise\n    this.initializePromise = this.doInitialize();\n    return this.initializePromise;\n  }\n\n  /**\n   * Performs the actual initialization work.\n   *\n   * @private\n   * @returns Promise that resolves when initialization is complete\n   */\n  private async doInitialize(): Promise<void> {\n    try {\n      await this.refresh();\n      this.isInitialized = true;\n      this.log('Provider initialized successfully');\n    } catch (error) {\n      this.log('Failed to initialize provider:', error);\n      // Clear the promise so initialization can be retried\n      this.initializePromise = undefined;\n      throw error;\n    }\n  }\n\n  /**\n   * Gets a feature flag evaluation for the specified key and context.\n   *\n   * @param key - The feature flag key\n   * @param context - Optional context for evaluation\n   * @returns Promise resolving to the flag evaluation\n   */\n  async getFlag(\n    key: FeatureFlagKey,\n    context?: FeatureFlagContext\n  ): Promise<FeatureFlagEvaluation<FeatureFlagKey>> {\n    if (!this.isInitialized) {\n      await this.initialize();\n    }\n\n    // Check cache first if enabled\n    if (this.config.isCacheEnabled) {\n      const cacheKey = this.generateCacheKey(key, context);\n      const cached = await this.cacheManager.get<FeatureFlagEvaluation<FeatureFlagKey>>(cacheKey);\n      if (cached) {\n        return cached;\n      }\n\n      // Evaluate and cache the result\n      const evaluation = this.engine.evaluate(key, context);\n      await this.cacheManager.set(cacheKey, evaluation);\n      return evaluation;\n    }\n\n    // Direct evaluation without caching\n    return this.engine.evaluate(key, context);\n  }\n\n  /**\n   * Checks if a feature flag is enabled.\n   *\n   * @param key - The feature flag key\n   * @param context - Optional context for evaluation\n   * @returns Promise resolving to boolean indicating if flag is enabled\n   */\n  async isEnabled(key: FeatureFlagKey, context?: FeatureFlagContext): Promise<boolean> {\n    const evaluation = await this.getFlag(key, context);\n    return evaluation.isEnabled;\n  }\n\n  /**\n   * Gets the value of a feature flag.\n   *\n   * @template T - The expected type of the flag value\n   * @param key - The feature flag key\n   * @param context - Optional context for evaluation\n   * @returns Promise resolving to the flag value\n   */\n  async getValue<T = FeatureFlagValue>(\n    key: FeatureFlagKey,\n    context?: FeatureFlagContext\n  ): Promise<T> {\n    const evaluation = await this.getFlag(key, context);\n    return evaluation.value as T;\n  }\n\n  /**\n   * Gets all feature flag evaluations for the given context.\n   *\n   * @param context - Optional context for evaluation\n   * @returns Promise resolving to record of flag evaluations\n   */\n  async getAllFlags(\n    context?: FeatureFlagContext\n  ): Promise<Record<string, FeatureFlagEvaluation<FeatureFlagKey>>> {\n    if (!this.isInitialized) {\n      await this.initialize();\n    }\n\n    const results: Record<string, FeatureFlagEvaluation<FeatureFlagKey>> = {};\n\n    // First, evaluate all default flags from FEATURES\n    for (const key of Object.keys(this.features) as FeatureFlagKey[]) {\n      results[key] = await this.getFlag(key, context);\n    }\n\n    // Then, evaluate any additional flags from the engine\n    const engineFlags = this.engine.getFlags();\n    for (const flag of engineFlags) {\n      if (!(flag.key in results)) {\n        results[flag.key] = await this.getFlag(flag.key, context);\n      }\n    }\n\n    return results;\n  }\n\n  /**\n   * Refreshes the provider by fetching latest data from the source.\n   *\n   * @returns Promise that resolves when refresh is complete\n   */\n  async refresh(): Promise<void> {\n    try {\n      const { flags, rules } = await this.fetchData();\n\n      this.engine.setFlags(flags);\n      this.engine.setRules(rules);\n\n      // Clear cache after refresh\n      await this.cacheManager.clear();\n\n      // Notify subscribers\n      this.notifySubscribers();\n\n      this.log(`Refreshed with ${flags.length} flags and ${rules.length} rules`);\n    } catch (error) {\n      this.log('Failed to refresh provider:', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Subscribes to provider updates.\n   *\n   * @param callback - Function to call when provider updates\n   * @returns Unsubscribe function\n   */\n  subscribe(callback: SubscriptionCallback): () => void {\n    this.subscribers.add(callback);\n    return () => {\n      this.subscribers.delete(callback);\n    };\n  }\n\n  /**\n   * Sets an override for a specific flag key.\n   *\n   * @param key - The flag key to override\n   * @param value - The value to force for this flag\n   */\n  setOverride(key: FeatureFlagKey, value: FeatureFlagValue): void {\n    this.engine.setOverride(key, value);\n    void this.cacheManager.clear(); // Clear cache to ensure overrides take effect\n    this.notifySubscribers();\n  }\n\n  /**\n   * Removes an override for a specific flag key.\n   *\n   * @param key - The flag key to remove override for\n   */\n  removeOverride(key: FeatureFlagKey): void {\n    this.engine.removeOverride(key);\n    void this.cacheManager.clear();\n    this.notifySubscribers();\n  }\n\n  /**\n   * Clears all overrides.\n   */\n  clearOverrides(): void {\n    this.engine.clearOverrides();\n    void this.cacheManager.clear();\n    this.notifySubscribers();\n  }\n\n  /**\n   * Disposes of the provider, cleaning up resources.\n   */\n  dispose(): void {\n    if (this.refreshTimer) {\n      clearInterval(this.refreshTimer);\n      this.refreshTimer = undefined;\n    }\n\n    this.subscribers.clear();\n    void this.cacheManager.clear();\n    this.isInitialized = false;\n\n    this.log('Provider disposed');\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Flag Management Operations\n  // Each provider implements these based on its storage backend:\n  // - Memory: in-memory storage (ephemeral)\n  // - File: JSON/YAML file storage\n  // - Redis: Redis storage\n  // - API: External API calls\n  // - Database: Database storage\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Creates a new feature flag.\n   * Abstract - each provider implements based on its storage backend.\n   *\n   * @param data - Flag creation data\n   * @returns The created feature flag\n   */\n  abstract createFlag(\n    data: CreateFlagRequest<FeatureFlagKey>\n  ): Promise<FeatureFlag<FeatureFlagKey>>;\n\n  /**\n   * Updates an existing feature flag.\n   * Abstract - each provider implements based on its storage backend.\n   *\n   * @param key - Flag key to update\n   * @param data - Partial flag data to update\n   * @returns The updated feature flag\n   */\n  abstract updateFlag(\n    key: FeatureFlagKey,\n    data: Partial<CreateFlagRequest<FeatureFlagKey>>\n  ): Promise<FeatureFlag<FeatureFlagKey>>;\n\n  /**\n   * Deletes a feature flag.\n   * Abstract - each provider implements based on its storage backend.\n   *\n   * @param key - Flag key to delete\n   */\n  abstract deleteFlag(key: FeatureFlagKey): Promise<void>;\n\n  /**\n   * Gets all rules for a specific flag.\n   * Abstract - each provider implements based on its storage backend.\n   *\n   * @param key - Flag key to get rules for\n   * @returns Array of rules for the flag\n   */\n  abstract getRules(key: FeatureFlagKey): Promise<FeatureFlagRule<FeatureFlagKey>[]>;\n\n  /**\n   * Gets all enabled rules across all flags.\n   * Abstract - each provider implements based on its storage backend.\n   *\n   * @returns Array of all enabled rules\n   */\n  abstract getAllRules(): Promise<FeatureFlagRule<FeatureFlagKey>[]>;\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Optional Extensions\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Optional method to sync features at runtime.\n   * This is useful for providers that can update their features dynamically.\n   *\n   * @param newFeatures - New features to sync\n   * @returns Promise that resolves when sync is complete\n   */\n  syncFeatures?(newFeatures: Record<FeatureFlagKey, FeatureFlagValue>): Promise<void>;\n\n  /**\n   * Generates a cache key for flag evaluation.\n   *\n   * @protected\n   * @param key - Feature flag key\n   * @param context - Evaluation context\n   * @returns Cache key string\n   */\n  protected generateCacheKey(key: FeatureFlagKey, context?: FeatureFlagContext): string {\n    if (!context) {\n      return key;\n    }\n\n    // Create a stable cache key from context\n    const contextKey = JSON.stringify({\n      userId: context.userId,\n      userRole: context.userRole,\n      environment: context.environment,\n      platform: context.platform,\n      country: context.country,\n      version: context.version,\n    });\n\n    return `${key}:${contextKey}`;\n  }\n\n  /**\n   * Sets up the automatic refresh timer if configured.\n   *\n   * @protected\n   */\n  protected setupRefreshTimer(): void {\n    if (this.config.refreshInterval > 0) {\n      this.refreshTimer = setInterval(() => {\n        void this.refresh().catch(error => {\n          this.log('Auto-refresh failed:', error);\n        });\n      }, this.config.refreshInterval * TIME_CONSTANTS.MILLISECONDS_PER_SECOND);\n    }\n  }\n\n  /**\n   * Notifies all subscribers of provider updates.\n   *\n   * @protected\n   */\n  protected notifySubscribers(): void {\n    for (const callback of Array.from(this.subscribers)) {\n      try {\n        callback();\n      } catch (error) {\n        this.log('Subscriber callback error:', error);\n      }\n    }\n  }\n\n  /**\n   * Logs a message if logging is enabled.\n   *\n   * @protected\n   * @param args - Arguments to log\n   */\n  protected log(...args: unknown[]): void {\n    if (this.config.isLoggingEnabled) {\n      console.log('[FeatureFlagProvider]', ...args);\n    }\n  }\n}\n","/**\n * API Feature Flag Provider\n *\n * Provider adapter that uses @plyaz/api services with an injected API client\n * to fetch feature flags from a remote API. This provider extends the base\n * FeatureFlagProvider and implements fetchData() using the API services.\n *\n * @fileoverview API provider adapter for feature flags\n * @version 2.0.0\n */\n\nimport type {\n  FeatureFlag,\n  FeatureFlagRule,\n  FeatureFlagValue,\n  CreateFlagRequest,\n} from '@plyaz/types';\nimport { ERROR_CODES } from '@plyaz/types';\nimport { BaseError, CorePackageError } from '@plyaz/errors';\nimport { FeatureFlagProvider } from '../provider';\n\n// Import API services from @plyaz/api\nimport {\n  createFeatureFlag as apiCreateFlag,\n  updateFeatureFlag as apiUpdateFlag,\n  deleteFeatureFlag as apiDeleteFlag,\n  evaluateAllFeatureFlags as apiEvaluateAllFlags,\n  fetchFeatureFlagRules as apiFetchRules,\n} from '@plyaz/api/frontend';\nimport type { ServiceOptions } from '@plyaz/types/api';\nimport type { ApiFeatureFlagConfig as _ApiFeatureFlagConfig } from '@plyaz/types/features';\n\n// API client type from ServiceOptions\ntype ApiClientType = NonNullable<ServiceOptions['apiClient']>;\n\n/**\n * API response type for fetching flags and rules\n */\ninterface ApiFetchResponse<TKey extends string> {\n  flags: FeatureFlag<TKey>[];\n  rules: FeatureFlagRule<TKey>[];\n}\n\n/**\n * API-based feature flag provider\n *\n * Uses @plyaz/api services with an injected API client to communicate with the backend.\n * Pass your configured API client via the config.\n *\n * @class ApiFeatureFlagProvider\n * @extends {FeatureFlagProvider}\n *\n * @example\n * ```typescript\n * // Get client from ApiClientService\n * const apiClient = ApiClientService.getClient();\n *\n * const provider = new ApiFeatureFlagProvider({\n *   provider: 'api',\n *   apiClient,\n *   isCacheEnabled: true,\n *   cacheTtl: 300,\n * }, FEATURES);\n *\n * await provider.initialize();\n * const isEnabled = await provider.isEnabled('new-feature');\n * ```\n */\nexport class ApiFeatureFlagProvider<\n  FeatureFlagKey extends string,\n> extends FeatureFlagProvider<FeatureFlagKey> {\n  protected readonly apiClient: ApiClientType;\n\n  /**\n   * Creates a new API feature flag provider.\n   *\n   * @param config - Provider configuration with API client\n   * @param features - Record of feature flag keys to default values\n   */\n  constructor(\n    config: _ApiFeatureFlagConfig<FeatureFlagKey>,\n    features: Record<FeatureFlagKey, FeatureFlagValue>\n  ) {\n    super(config, features);\n\n    if (!config.apiClient) {\n      throw new CorePackageError(\n        'API provider requires apiClient in config',\n        ERROR_CODES.CLIENT_INVALID_CONFIG\n      );\n    }\n\n    this.apiClient = config.apiClient;\n    this.validateConfig();\n  }\n\n  /**\n   * Get service options with injected client\n   */\n  private getServiceOptions(): ServiceOptions {\n    return { apiClient: this.apiClient };\n  }\n\n  /** Wrap error in CorePackageError if not already a package error */\n  private wrapError(error: unknown): CorePackageError {\n    // If already a package error (BaseError subclass), return as-is\n    if (error instanceof BaseError) {\n      return error as CorePackageError;\n    }\n    // Wrap other errors\n    return new CorePackageError(\n      `API request failed: ${error instanceof Error ? error.message : String(error)}`,\n      ERROR_CODES.NETWORK_ERROR,\n      { cause: error instanceof Error ? error : undefined }\n    );\n  }\n\n  /** Transform API response to flags/rules */\n  private transformResponse(data: ApiFetchResponse<FeatureFlagKey> | undefined): {\n    flags: FeatureFlag<FeatureFlagKey>[];\n    rules: FeatureFlagRule<FeatureFlagKey>[];\n  } {\n    const flags = data?.flags ?? [];\n    const rules = data?.rules ?? [];\n    this.log(`Fetched ${flags.length} flags and ${rules.length} rules from API`);\n    return { flags, rules };\n  }\n\n  /**\n   * Fetches flags and rules from the API endpoint using @plyaz/api services.\n   *\n   * @protected\n   * @returns Promise resolving to flags and rules data\n   */\n  protected async fetchData(): Promise<{\n    flags: FeatureFlag<FeatureFlagKey>[];\n    rules: FeatureFlagRule<FeatureFlagKey>[];\n  }> {\n    try {\n      const apiConfig = this.config as _ApiFeatureFlagConfig<FeatureFlagKey>;\n      const response = await apiEvaluateAllFlags<FeatureFlagKey>(\n        { context: apiConfig.context },\n        this.getServiceOptions()\n      );\n\n      if (!response.isSuccess) {\n        throw new CorePackageError(\n          `Failed to fetch feature flags: ${response.error?.message}`,\n          ERROR_CODES.NETWORK_ERROR\n        );\n      }\n\n      const data = response.data as unknown as ApiFetchResponse<FeatureFlagKey>;\n      return this.transformResponse(data);\n    } catch (error) {\n      throw this.wrapError(error);\n    }\n  }\n\n  /**\n   * Validates the API provider configuration.\n   *\n   * @private\n   */\n  private validateConfig(): void {\n    if (this.config.provider !== 'api') {\n      throw new CorePackageError(\n        'API provider requires provider to be set to \"api\"',\n        ERROR_CODES.CLIENT_INVALID_CONFIG\n      );\n    }\n\n    this.log('API provider configured');\n  }\n\n  /**\n   * Gets API provider status and configuration info.\n   */\n  getApiInfo(): {\n    hasApiClient: boolean;\n  } {\n    return {\n      hasApiClient: Boolean(this.apiClient),\n    };\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Flag Management Operations (using @plyaz/api services)\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Creates a new feature flag via API\n   */\n  async createFlag(data: CreateFlagRequest<FeatureFlagKey>): Promise<FeatureFlag<FeatureFlagKey>> {\n    const requestData = {\n      ...data,\n      isEnabled: data.isEnabled ?? true,\n      environment: data.environment ?? 'development',\n      description: data.description ?? '',\n    };\n    const response = await apiCreateFlag<FeatureFlagKey>(requestData, this.getServiceOptions());\n\n    if (!response.isSuccess) {\n      throw new CorePackageError(\n        `Failed to create flag: ${response.error?.message}`,\n        ERROR_CODES.CONTEXT_OPERATION_FAILED\n      );\n    }\n\n    await this.refresh();\n    return response.data as unknown as FeatureFlag<FeatureFlagKey>;\n  }\n\n  /**\n   * Updates a feature flag via API\n   */\n  async updateFlag(\n    key: FeatureFlagKey,\n    data: Partial<CreateFlagRequest<FeatureFlagKey>>\n  ): Promise<FeatureFlag<FeatureFlagKey>> {\n    const response = await apiUpdateFlag<FeatureFlagKey>({ key, data }, this.getServiceOptions());\n\n    if (!response.isSuccess) {\n      throw new CorePackageError(\n        `Failed to update flag: ${response.error?.message}`,\n        ERROR_CODES.CONTEXT_OPERATION_FAILED\n      );\n    }\n\n    await this.refresh();\n    return response.data as unknown as FeatureFlag<FeatureFlagKey>;\n  }\n\n  /**\n   * Deletes a feature flag via API\n   */\n  async deleteFlag(key: FeatureFlagKey): Promise<void> {\n    const response = await apiDeleteFlag<FeatureFlagKey>(key, this.getServiceOptions());\n\n    if (!response.isSuccess) {\n      throw new CorePackageError(\n        `Failed to delete flag: ${response.error?.message}`,\n        ERROR_CODES.CONTEXT_OPERATION_FAILED\n      );\n    }\n\n    await this.refresh();\n  }\n\n  /**\n   * Gets rules for a specific flag via API\n   */\n  async getRules(key: FeatureFlagKey): Promise<FeatureFlagRule<FeatureFlagKey>[]> {\n    const response = await apiFetchRules<FeatureFlagKey>(key, this.getServiceOptions());\n\n    if (!response.isSuccess) {\n      throw new CorePackageError(\n        `Failed to get rules: ${response.error?.message}`,\n        ERROR_CODES.CONTEXT_OPERATION_FAILED\n      );\n    }\n\n    return (response.data as unknown as { rules: FeatureFlagRule<FeatureFlagKey>[] })?.rules ?? [];\n  }\n\n  /**\n   * Gets all rules via API\n   * Note: This requires fetching rules for all flags individually or a dedicated endpoint\n   */\n  async getAllRules(): Promise<FeatureFlagRule<FeatureFlagKey>[]> {\n    // For now, return the rules from the engine (populated by fetchData)\n    // A dedicated API endpoint would be needed for a direct call\n    return this.engine.getRules();\n  }\n}\n","/**\n * Feature Flag Domain Service (Frontend)\n *\n * Frontend-specific domain service for feature flag management.\n * Implements FeatureFlagServiceInterface for clean dependency injection.\n *\n * @example\n * ```tsx\n * // With ServiceRegistry (auto-initialization)\n * await ServiceRegistry.initialize({\n *   services: [{ service: FeatureFlagDomainService, config: { cacheTtl: 300 } }],\n * });\n * const service = ServiceRegistry.get<FeatureFlagServiceInterface>('featureFlags');\n *\n * // Manual creation with provider\n * const service = new FeatureFlagDomainService({\n *   provider,\n *   store: useFeatureFlagStore.getState(),\n * });\n * await service.fetchAndSyncAll({ userId: user.id });\n * ```\n */\n\nimport type {\n  FeatureFlag,\n  FeatureFlagKey,\n  FeatureFlagRule,\n  FeatureFlagContext,\n  FeatureFlagValue,\n  FeatureFlagEvaluation,\n  CreateFlagRequest,\n} from '@plyaz/types';\nimport { CoreEventManager } from '../../events/CoreEventManager';\nimport { createApiClient } from '@plyaz/api/frontend';\nimport { ApiFeatureFlagProvider } from '../../domain/featureFlags/providers/api';\nimport { BaseFrontendDomainService } from '../base/BaseFrontendDomainService';\nimport { SERVICE_KEYS } from '@plyaz/types/core';\nimport type {\n  CoreFrontendFeatureFlagEventType,\n  CoreFeatureFlagStore,\n  CoreFeatureFlagServiceConfig,\n  CoreFeatureFlagServiceInitConfig,\n  CoreFeatureFlagServiceInterface,\n  CoreServiceCreateOptions,\n} from '@plyaz/types/core';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Constants\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Default cache TTL in seconds (5 minutes) */\nconst DEFAULT_CACHE_TTL_SECONDS = 300;\n/** Default refresh interval in milliseconds (1 minute) */\nconst DEFAULT_REFRESH_INTERVAL_MS = 60000;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Service Implementation\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Feature Flag Domain Service (Frontend)\n *\n * Frontend-specific domain service for feature flag management.\n * Implements FeatureFlagServiceInterface for clean dependency injection.\n *\n * @example\n * ```tsx\n * // With ServiceRegistry (auto-initialization)\n * await ServiceRegistry.initialize({\n *   services: [{ service: FeatureFlagDomainService, config: { cacheTtl: 300 } }],\n * });\n * const service = ServiceRegistry.get<FeatureFlagServiceInterface>('featureFlags');\n *\n * // Manual creation with provider\n * const service = new FeatureFlagDomainService({\n *   provider,\n *   store: useFeatureFlagStore.getState(),\n * });\n * await service.fetchAndSyncAll({ userId: user.id });\n * ```\n */\nexport class FrontendFeatureFlagDomainService\n  extends BaseFrontendDomainService<\n    CoreFeatureFlagServiceConfig,\n    CoreFeatureFlagStore,\n    Record<string, FeatureFlagValue>\n  >\n  implements CoreFeatureFlagServiceInterface\n{\n  // ─────────────────────────────────────────────────────────────────────────\n  // Static: ServiceRegistry Interface\n  // ─────────────────────────────────────────────────────────────────────────\n\n  static readonly serviceKey = SERVICE_KEYS.FEATURE_FLAGS;\n\n  /** Build API client for feature flags */\n  private static async buildApiClient(\n    config: CoreFeatureFlagServiceInitConfig,\n    options?: CoreServiceCreateOptions\n  ): Promise<ReturnType<typeof createApiClient>> {\n    // Use || instead of ?? because api.baseURL may be '' (empty string) for same-origin requests.\n    // The ?? operator only falls through on null/undefined, not empty strings.\n    // An empty string is not a valid API path, so we treat it as \"not provided\" and fall through to default.\n\n    const apiBasePath =\n      // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n      config.apiBasePath || options?.apiClient?.options?.baseURL || '/feature-flags';\n    return createApiClient({ ...options?.apiClient?.options, baseURL: apiBasePath });\n  }\n\n  /** Build feature flag provider */\n  private static buildProvider(\n    config: CoreFeatureFlagServiceInitConfig,\n    apiClient: Awaited<ReturnType<typeof createApiClient>>\n  ): ApiFeatureFlagProvider<FeatureFlagKey> {\n    return new ApiFeatureFlagProvider<FeatureFlagKey>(\n      {\n        provider: 'api',\n        apiClient,\n        isCacheEnabled: true,\n        cacheTtl: config.cacheTtl ?? DEFAULT_CACHE_TTL_SECONDS,\n        context: config.defaultContext,\n        refreshInterval: config.refreshInterval ?? DEFAULT_REFRESH_INTERVAL_MS,\n        shouldFallbackToDefaults: config.shouldFallbackToDefaults ?? true,\n      },\n      config.featureKeys ?? {}\n    );\n  }\n\n  /**\n   * Factory method for ServiceRegistry auto-initialization.\n   */\n  static async create(\n    config: CoreFeatureFlagServiceInitConfig,\n    options?: CoreServiceCreateOptions\n  ): Promise<FrontendFeatureFlagDomainService> {\n    const apiClient = await FrontendFeatureFlagDomainService.buildApiClient(config, options);\n    const provider = FrontendFeatureFlagDomainService.buildProvider(config, apiClient);\n    await provider.initialize();\n\n    return new FrontendFeatureFlagDomainService({\n      enabled: config.enabled ?? true,\n      provider,\n      defaultContext: config.defaultContext,\n      defaults: config.defaults,\n      store: config.store,\n      readStores: config.readStores,\n    });\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Instance\n  // ─────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Event prefix for all events emitted by this service\n   * Required by BaseFrontendDomainService\n   */\n  protected eventPrefix = 'featureFlag';\n\n  private readonly provider: CoreFeatureFlagServiceConfig['provider'];\n\n  constructor(config: CoreFeatureFlagServiceConfig) {\n    super({\n      serviceName: 'FeatureFlagDomainService',\n      supportedRuntimes: ['frontend', 'universal'],\n      serviceConfig: { enabled: true, defaults: {}, ...config },\n    });\n\n    this.provider = config.provider;\n    this._initialized = true;\n\n    this.logInfo('Service initialized', { storeCount: this.connectedStoreCount });\n    CoreEventManager.emit('featureFlag:provider:initialized', { providerType: 'api' });\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // IFeatureFlagService: Lifecycle\n  // ─────────────────────────────────────────────────────────────────────────\n\n  isAvailable(): boolean {\n    return this.isServiceEnabled && this.provider !== null;\n  }\n\n  dispose(): void {\n    this.provider?.dispose();\n    CoreEventManager.emit('featureFlag:provider:disposed', {});\n    this.logInfo('Service disposed');\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // IFeatureFlagService: Provider Operations\n  // ─────────────────────────────────────────────────────────────────────────\n\n  async refresh(): Promise<void> {\n    this.assertReady();\n    this.setStoresLoading(true);\n\n    try {\n      await this.provider.refresh();\n      CoreEventManager.emit('featureFlag:provider:refreshed', {});\n\n      if (this.hasConnectedStores) {\n        const evaluations = await this.provider.getAllFlags(this.config.defaultContext);\n        this.syncToStores(this.toValues(evaluations));\n      }\n\n      this.logDebug('Provider refreshed and synced');\n    } finally {\n      this.setStoresLoading(false);\n    }\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // IFeatureFlagService: Evaluation\n  // ─────────────────────────────────────────────────────────────────────────\n\n  async evaluate<TKey extends string = string>(\n    key: TKey,\n    context?: FeatureFlagContext\n  ): Promise<FeatureFlagEvaluation<TKey>> {\n    this.assertReady();\n    const ctx = context ?? this.config.defaultContext;\n\n    CoreEventManager.emit('featureFlag:evaluating', { key, context: ctx });\n\n    try {\n      const result = await this.provider.getFlag(key, ctx);\n      CoreEventManager.emit('featureFlag:evaluated', { key, result });\n\n      if (this.hasConnectedStores) {\n        this.syncToStores({ [key]: result.value });\n      }\n\n      return result as FeatureFlagEvaluation<TKey>;\n    } catch (error) {\n      CoreEventManager.emit('featureFlag:evaluate:error', { key, error });\n      throw error;\n    }\n  }\n\n  async isEnabled<TKey extends string = string>(\n    key: TKey,\n    context?: FeatureFlagContext\n  ): Promise<boolean> {\n    this.assertReady();\n    return this.provider.isEnabled(key, context ?? this.config.defaultContext);\n  }\n\n  async getValue<T = FeatureFlagValue, TKey extends string = string>(\n    key: TKey,\n    context?: FeatureFlagContext\n  ): Promise<T> {\n    this.assertReady();\n    return this.provider.getValue<T>(key, context ?? this.config.defaultContext);\n  }\n\n  async evaluateAll<TKey extends string = string>(\n    context?: FeatureFlagContext\n  ): Promise<Record<string, FeatureFlagEvaluation<TKey>>> {\n    this.assertReady();\n    this.setStoresLoading(true);\n\n    try {\n      const result = await this.provider.getAllFlags(context ?? this.config.defaultContext);\n\n      if (this.hasConnectedStores) {\n        this.syncToStores(this.toValues(result));\n      }\n\n      return result as Record<string, FeatureFlagEvaluation<TKey>>;\n    } catch (error) {\n      this.logError('Failed to evaluate all flags', { error });\n      throw error;\n    } finally {\n      this.setStoresLoading(false);\n    }\n  }\n\n  async fetchAndSyncAll(context?: FeatureFlagContext): Promise<Record<string, FeatureFlagValue>> {\n    const evaluations = await this.evaluateAll(context);\n    return this.toValues(evaluations);\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // IFeatureFlagService: CRUD (renamed to avoid base class conflicts)\n  // ─────────────────────────────────────────────────────────────────────────\n\n  async createFlag<TKey extends string = string>(\n    data: CreateFlagRequest<TKey>\n  ): Promise<FeatureFlag<TKey>> {\n    this.assertReady();\n    CoreEventManager.emit('featureFlag:creating', { data });\n\n    try {\n      const flag = await this.provider.createFlag(data);\n      CoreEventManager.emit('featureFlag:created', { flag });\n      this.logInfo('Flag created', { key: data.key });\n\n      if (this.hasConnectedStores) {\n        this.syncToStores({ [data.key]: flag.value });\n      }\n\n      return flag as FeatureFlag<TKey>;\n    } catch (error) {\n      CoreEventManager.emit('featureFlag:create:error', { error, data });\n      throw error;\n    }\n  }\n\n  async updateFlag<TKey extends string = string>(\n    key: TKey,\n    data: Partial<CreateFlagRequest<TKey>>\n  ): Promise<FeatureFlag<TKey>> {\n    this.assertReady();\n    CoreEventManager.emit('featureFlag:updating', { key, data });\n\n    try {\n      const flag = await this.provider.updateFlag(key, data);\n      CoreEventManager.emit('featureFlag:updated', { flag });\n      this.logInfo('Flag updated', { key });\n\n      if (this.hasConnectedStores) {\n        this.syncToStores({ [key]: flag.value });\n      }\n\n      return flag as FeatureFlag<TKey>;\n    } catch (error) {\n      CoreEventManager.emit('featureFlag:update:error', { error, key });\n      throw error;\n    }\n  }\n\n  async deleteFlag<TKey extends string = string>(key: TKey): Promise<void> {\n    this.assertReady();\n    CoreEventManager.emit('featureFlag:deleting', { key });\n\n    try {\n      await this.provider.deleteFlag(key);\n      CoreEventManager.emit('featureFlag:deleted', { key });\n      this.logInfo('Flag deleted', { key });\n\n      // Refresh all to remove deleted flag from stores\n      if (this.hasConnectedStores) {\n        const evaluations = await this.provider.getAllFlags(this.config.defaultContext);\n        this.syncToStores(this.toValues(evaluations), true);\n      }\n    } catch (error) {\n      CoreEventManager.emit('featureFlag:delete:error', { error, key });\n      throw error;\n    }\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // IFeatureFlagService: Rules\n  // ─────────────────────────────────────────────────────────────────────────\n\n  async getRules<TKey extends string = string>(key: TKey): Promise<FeatureFlagRule<TKey>[]> {\n    this.assertReady();\n    return this.provider.getRules(key) as Promise<FeatureFlagRule<TKey>[]>;\n  }\n\n  async getAllRules<TKey extends string = string>(): Promise<FeatureFlagRule<TKey>[]> {\n    this.assertReady();\n    return this.provider.getAllRules() as Promise<FeatureFlagRule<TKey>[]>;\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // IFeatureFlagService: Overrides\n  // ─────────────────────────────────────────────────────────────────────────\n\n  setOverride<TKey extends string = string>(key: TKey, value: FeatureFlagValue): void {\n    this.assertReady();\n    CoreEventManager.emit('featureFlag:override:setting', { key, value });\n    this.provider.setOverride(key, value);\n    CoreEventManager.emit('featureFlag:override:set', { key, value });\n  }\n\n  removeOverride<TKey extends string = string>(key: TKey): void {\n    this.assertReady();\n    CoreEventManager.emit('featureFlag:override:removing', { key });\n    this.provider.removeOverride(key);\n    CoreEventManager.emit('featureFlag:override:removed', { key });\n  }\n\n  clearOverrides(): void {\n    this.assertReady();\n    this.provider.clearOverrides();\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // IFeatureFlagService: Subscription\n  // ─────────────────────────────────────────────────────────────────────────\n\n  subscribe(callback: () => void): () => void {\n    this.assertReady();\n    return this.provider.subscribe(callback);\n  }\n\n  on(event: CoreFrontendFeatureFlagEventType, handler: (data: unknown) => void): () => void {\n    return CoreEventManager.on(event, handler);\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Protected: Store Sync Override\n  // ─────────────────────────────────────────────────────────────────────────\n\n  protected override syncToStores(flags: Record<string, FeatureFlagValue>, replace = false): void {\n    if (!this.primaryStore) return;\n\n    try {\n      if (!replace && this.primaryStore.updateFlags) {\n        this.primaryStore.updateFlags(flags);\n      } else {\n        this.primaryStore.setFlags(flags);\n      }\n    } catch (error) {\n      this.logError('Store sync failed', { error });\n    }\n\n    this.logDebug('Synced to stores', {\n      count: this.connectedStoreCount,\n      flags: Object.keys(flags).length,\n    });\n  }\n\n  // ─────────────────────────────────────────────────────────────────────────\n  // Private: Helpers\n  // ─────────────────────────────────────────────────────────────────────────\n\n  private toValues(\n    evaluations: Record<string, FeatureFlagEvaluation<string>>\n  ): Record<string, FeatureFlagValue> {\n    const values: Record<string, FeatureFlagValue> = {};\n    for (const [key, evaluation] of Object.entries(evaluations)) {\n      values[key] = evaluation.value;\n    }\n    return values;\n  }\n}\n","/**\n * API Provider Component for React/Next.js\n * Initializes the API client service with environment configuration and event handlers\n *\n * @module frontend/providers/ApiProvider\n */\n\n'use client';\n\nimport { useEffect, useState, type ReactElement } from 'react';\nimport { ApiClientService } from '../../services/ApiClientService';\nimport type { CoreApiProviderProps } from '@plyaz/types/core';\n\n/**\n * API Provider Component\n * IMPORTANT: For client components, pass sensitive config from server-side props/actions\n * Initializes the API client service for React/Next.js applications\n *\n * @example\n * ```tsx\n * // In your app layout or _app.tsx\n * import { ApiProvider } from '@plyaz/core';\n *\n * export default function RootLayout({ children }) {\n *   const envConfig = {\n *     env: process.env.NODE_ENV as 'production',\n *     apiKey: process.env.API_KEY,\n *   };\n *\n *   const apiConfig = {\n *     baseURL: process.env.API_URL!,\n *     clientEvents: {\n *       onRequestStart: (event) => console.log('Request started:', event),\n *     },\n *   };\n *\n *   return (\n *     <ApiProvider envConfig={envConfig} apiConfig={apiConfig}>\n *       {children}\n *     </ApiProvider>\n *   );\n * }\n * ```\n */\nexport function ApiProvider({\n  children,\n  envConfig,\n  apiConfig,\n  loadingComponent,\n  errorComponent,\n  onInitialized,\n  onError,\n}: CoreApiProviderProps): ReactElement {\n  const [isReady, setIsReady] = useState(false);\n  const [error, setError] = useState<Error | null>(null);\n\n  useEffect(() => {\n    // Initialize API client service once on mount\n    // The singleton pattern in ApiClientService ensures only one instance is created\n    // If already initialized, it returns the existing instance with a warning\n    ApiClientService.init(envConfig, apiConfig)\n      .then(() => {\n        setIsReady(true);\n        onInitialized?.();\n      })\n      .catch((err: unknown) => {\n        const error = err instanceof Error ? err : new Error(String(err));\n        setError(error);\n        onError?.(error);\n        globalThis.console.error('[ApiProvider] Failed to initialize API client:', error);\n      });\n\n    // Cleanup on unmount\n    return () => {\n      // Don't dispose the client on unmount - it's a singleton\n      // Only dispose if you're sure you want to tear down the client\n    };\n  }, []); // Initialize once on mount - config changes are not supported after initialization\n\n  // Show error component if initialization failed\n  if (error) {\n    if (errorComponent) {\n      return <>{errorComponent(error)}</>;\n    }\n    return (\n      <div style={{ padding: '20px', color: 'red' }}>\n        <h2>API Client Initialization Failed</h2>\n        <p>{error.message}</p>\n      </div>\n    );\n  }\n\n  // Show loading component while initializing\n  if (!isReady) {\n    if (loadingComponent) {\n      return <>{loadingComponent}</>;\n    }\n    return (\n      <div style={{ padding: '20px' }}>\n        <p>Initializing API client...</p>\n      </div>\n    );\n  }\n\n  // Render children when ready\n  return <>{children}</>;\n}\n","/**\n * Stream Connection Hook\n *\n * React hook for SSE connections to stream events.\n * Works with Next.js client components.\n */\n\n/* eslint-disable n/no-unsupported-features/node-builtins */\n/* eslint-disable max-lines-per-function */\n\n// EventSource is a stable browser API, this is a client-side hook\n\n'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport type {\n  StreamChannel,\n  StreamMessage,\n  FilesUploadStreamProgress,\n  UseStreamConnectionOptions,\n  UseStreamConnectionResult,\n} from '@plyaz/types/core';\nimport { STREAM_ERROR_CODES } from '@plyaz/types/errors';\nimport { StreamPackageError } from '@plyaz/errors';\n\n/**\n * Default configuration\n */\nconst DEFAULT_ENDPOINT = '/api/events/stream';\nconst DEFAULT_RECONNECT_DELAY = 1000;\nconst DEFAULT_MAX_RECONNECT_ATTEMPTS = 5;\nconst EXPONENTIAL_BACKOFF_BASE = 2;\n\n/**\n * useStreamConnection - React hook for SSE connections\n *\n * Features:\n * - Auto-connect on mount\n * - Auto-reconnect on disconnect\n * - Channel subscription via query params\n * - Message event handling\n * - Connection state management\n *\n * @example\n * ```tsx\n * function UploadProgress({ fileId }: { fileId: string }) {\n *   const [progress, setProgress] = useState(0);\n *\n *   // Use generic to get properly typed message.data\n *   const { connected, error } = useStreamConnection<FilesUploadStreamProgress>({\n *     channels: [`upload:${fileId}`],\n *     onMessage: (message) => {\n *       if (message.event === 'progress') {\n *         // message.data is typed as FilesUploadStreamProgress\n *         setProgress(message.data.percentage);\n *       }\n *     },\n *   });\n *\n *   if (error) return <div>Connection error</div>;\n *   if (!connected) return <div>Connecting...</div>;\n *\n *   return <div>Progress: {progress}%</div>;\n * }\n * ```\n */\nexport function useStreamConnection<T = unknown>(\n  options: UseStreamConnectionOptions<T>\n): UseStreamConnectionResult {\n  const {\n    channels,\n    endpoint = DEFAULT_ENDPOINT,\n    autoConnect = true,\n    autoReconnect = true,\n    maxReconnectAttempts = DEFAULT_MAX_RECONNECT_ATTEMPTS,\n    reconnectDelay = DEFAULT_RECONNECT_DELAY,\n    onConnect,\n    onDisconnect,\n    onError,\n    onMessage,\n    // Response parsing options\n    unwrapSuccessResponse = true,\n    responseParser,\n  } = options;\n\n  const [connected, setConnected] = useState(false);\n\n  const eventSourceRef = useRef<EventSource | null>(null);\n  const reconnectAttemptsRef = useRef(0);\n  const reconnectTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n  /**\n   * Build URL with channel query params\n   */\n  const buildUrl = useCallback(() => {\n    const url = new URL(endpoint, globalThis.window.location.origin);\n    if (channels.length > 0) {\n      url.searchParams.set('channels', channels.join(','));\n    }\n    return url.toString();\n  }, [endpoint, channels]);\n\n  /**\n   * Parse response data with configurable unwrapping.\n   *\n   * Priority:\n   * 1. Custom responseParser (full control)\n   * 2. Auto-unwrap SuccessResponse if enabled (default)\n   * 3. Return raw data as-is\n   */\n  const parseResponse = useCallback(\n    <D>(parsed: unknown): D => {\n      // Custom parser takes priority\n      if (responseParser) {\n        return responseParser(parsed) as unknown as D;\n      }\n\n      // Auto-unwrap SuccessResponse format if enabled\n      if (\n        unwrapSuccessResponse &&\n        parsed &&\n        typeof parsed === 'object' &&\n        'success' in parsed &&\n        'data' in parsed &&\n        (parsed as { success: boolean }).success === true\n      ) {\n        return (parsed as { data: D }).data;\n      }\n\n      // Return raw data\n      return parsed as D;\n    },\n    [responseParser, unwrapSuccessResponse]\n  );\n\n  /**\n   * Handle SSE message\n   */\n  const handleMessage = useCallback(\n    (event: MessageEvent) => {\n      try {\n        const parsed = JSON.parse(event.data);\n        // Extract event/channel from parsed data if available (server sends { event, channel, data })\n        const message: StreamMessage<T> = {\n          event: parsed.event ?? 'message',\n          channel: parsed.channel,\n          data: parseResponse<T>(parsed.data ?? parsed),\n        };\n        onMessage?.(message);\n      } catch {\n        // Invalid JSON, ignore\n      }\n    },\n    [onMessage, parseResponse]\n  );\n\n  /**\n   * Connect to SSE endpoint\n   */\n  const connect = useCallback(() => {\n    // Only run on client\n    if (typeof window === 'undefined') return;\n\n    // Close existing connection\n    if (eventSourceRef.current) {\n      eventSourceRef.current.close();\n    }\n\n    const url = buildUrl();\n    const eventSource = new EventSource(url);\n    eventSourceRef.current = eventSource;\n\n    eventSource.onopen = () => {\n      setConnected(true);\n      reconnectAttemptsRef.current = 0;\n      onConnect?.();\n    };\n\n    eventSource.onerror = () => {\n      setConnected(false);\n\n      // Create error - auto-populates to global error store via scoped event emission\n      const err = new StreamPackageError(\n        'SSE connection failed',\n        STREAM_ERROR_CODES.CONNECTION_FAILED,\n        {\n          context: {\n            endpoint,\n            channels,\n            reconnectAttempt: reconnectAttemptsRef.current,\n          },\n        }\n      );\n\n      onError?.(err);\n      onDisconnect?.();\n\n      // Close the broken connection\n      eventSource.close();\n      eventSourceRef.current = null;\n\n      // Attempt reconnect\n      if (autoReconnect && reconnectAttemptsRef.current < maxReconnectAttempts) {\n        reconnectAttemptsRef.current++;\n        const delay =\n          reconnectDelay * Math.pow(EXPONENTIAL_BACKOFF_BASE, reconnectAttemptsRef.current - 1);\n        reconnectTimerRef.current = setTimeout(connect, delay);\n      }\n    };\n\n    // All messages come through onmessage - event type is in JSON payload\n    // This is more scalable than hardcoding SSE named event listeners\n    eventSource.onmessage = handleMessage;\n  }, [\n    buildUrl,\n    handleMessage,\n    autoReconnect,\n    maxReconnectAttempts,\n    reconnectDelay,\n    onConnect,\n    onDisconnect,\n    onError,\n    endpoint,\n    channels,\n  ]);\n\n  /**\n   * Disconnect from SSE endpoint\n   */\n  const disconnect = useCallback(() => {\n    // Clear reconnect timer\n    if (reconnectTimerRef.current) {\n      clearTimeout(reconnectTimerRef.current);\n      reconnectTimerRef.current = null;\n    }\n\n    // Close connection\n    if (eventSourceRef.current) {\n      eventSourceRef.current.close();\n      eventSourceRef.current = null;\n    }\n\n    setConnected(false);\n    onDisconnect?.();\n  }, [onDisconnect]);\n\n  /**\n   * Reconnect (disconnect then connect)\n   */\n  const reconnect = useCallback(() => {\n    reconnectAttemptsRef.current = 0;\n    disconnect();\n    connect();\n  }, [disconnect, connect]);\n\n  /**\n   * Auto-connect on mount, cleanup on unmount\n   */\n  useEffect(() => {\n    if (autoConnect) {\n      connect();\n    }\n\n    return () => {\n      disconnect();\n    };\n  }, []);\n\n  /**\n   * Reconnect when channels change\n   */\n  useEffect(() => {\n    if (connected && eventSourceRef.current) {\n      reconnect();\n    }\n  }, [channels.join(',')]);\n\n  return {\n    connected,\n    reconnect,\n    disconnect,\n  };\n}\n\n/**\n * useUploadProgress - Convenience hook for upload progress\n *\n * @example\n * ```tsx\n * function Upload({ fileId }: { fileId: string }) {\n *   const { progress, status, connected } = useUploadProgress(fileId);\n *\n *   return (\n *     <div>\n *       <div>Status: {status}</div>\n *       <progress value={progress} max={100} />\n *     </div>\n *   );\n * }\n * ```\n */\nexport function useUploadProgress(fileId: string): {\n  progress: number;\n  status: FilesUploadStreamProgress['status'];\n  loaded: number;\n  total: number;\n  speed?: number;\n  error?: string;\n  connected: boolean;\n} {\n  const [progressData, setProgressData] = useState<FilesUploadStreamProgress>({\n    fileId,\n    filename: '',\n    percentage: 0,\n    status: 'pending',\n    loaded: 0,\n    total: 0,\n  });\n\n  const { connected } = useStreamConnection<FilesUploadStreamProgress>({\n    channels: [`upload:${fileId}` as StreamChannel],\n    onMessage: message => {\n      if (\n        message.event === 'progress' ||\n        message.event === 'completed' ||\n        message.event === 'error'\n      ) {\n        // message.data is properly typed as FilesUploadStreamProgress\n        setProgressData(prev => ({ ...prev, ...message.data }));\n      }\n    },\n  });\n\n  return {\n    progress: progressData.percentage,\n    status: progressData.status,\n    loaded: progressData.loaded,\n    total: progressData.total,\n    speed: progressData.speed,\n    error: progressData.error,\n    connected,\n  };\n}\n","'use client';\n\n/* eslint-disable max-lines-per-function */\n/* eslint-disable complexity */\n\n/**\n * useStreamManager - Hook for managing SSE connection and stream handlers\n *\n * This hook handles:\n * 1. Establishing SSE connection when streaming is enabled\n * 2. Routing incoming messages to the stream store\n * 3. Managing connection state and reconnection\n * 4. Registering domain services' stream handlers\n *\n * @internal Used by PlyazProvider\n */\n\nimport { useEffect, useCallback, useRef } from 'react';\nimport { PackageLogger } from '@plyaz/logger';\nimport { StreamPackageError } from '@plyaz/errors';\nimport { serializeError } from '@plyaz/errors/middleware';\nimport { STREAM_ERROR_CODES } from '@plyaz/types/errors';\nimport { useStreamConnection } from '../../events/streaming/hooks';\nimport { FrontendFilesDomainService } from '../../domain/files/FrontendFilesDomainService';\nimport { FrontendNotificationsDomainService } from '../../domain/notifications/FrontendNotificationsDomainService';\nimport type { StreamChannel, StreamMessage } from '@plyaz/types/core';\nimport type { UseStreamManagerOptions, UseStreamManagerResult } from '@plyaz/types/core';\nimport type { PackageErrorLike } from '@plyaz/types/errors';\n\nconst logger = new PackageLogger({ packageName: 'core', service: 'useStreamManager' });\n\n/**\n * Default reconnect configuration\n */\nconst DEFAULT_MAX_RECONNECT_ATTEMPTS = 10;\nconst DEFAULT_RECONNECT_DELAY_MS = 1000;\n\n/**\n * Default channels for streaming\n */\nconst DEFAULT_CHANNELS: StreamChannel[] = [\n  'uploads' as StreamChannel,\n  'downloads' as StreamChannel,\n  'generations' as StreamChannel,\n  'notifications' as StreamChannel,\n  'system' as StreamChannel,\n];\n\n/**\n * Hook for managing SSE connection lifecycle and message routing.\n *\n * @param options - Stream manager options\n * @returns Connection state\n *\n * @example\n * ```tsx\n * const { connected, enabled } = useStreamManager({\n *   config: streamConfig,\n *   store: useRootStore,\n *   enabled: true,\n *   verbose: true,\n * });\n * // Errors are in global error store - use useErrorStore or error hooks\n * ```\n */\nexport function useStreamManager({\n  config,\n  store,\n  verbose,\n  enabled = false,\n}: UseStreamManagerOptions): UseStreamManagerResult {\n  const isConnectedRef = useRef(false);\n  const debug = config?.debug ?? verbose ?? false;\n\n  // Get stream store from root store\n  const streamStore = store.getState()?.stream;\n\n  /**\n   * Handle incoming SSE messages\n   * Routes to stream store's handleMessage for handler dispatch\n   */\n  const handleMessage = useCallback(\n    (message: StreamMessage<unknown>) => {\n      if (!enabled) return;\n\n      if (debug) {\n        logger.debug('Message received', { event: message.event });\n      }\n\n      // Get fresh stream store reference\n      const currentStreamStore = store.getState()?.stream;\n      if (!currentStreamStore) {\n        if (debug) {\n          logger.warn('Stream store not available');\n        }\n        return;\n      }\n\n      // Route message to stream store handlers\n      currentStreamStore.handleMessage({\n        event: message.event,\n        channel: message.channel,\n        data: message.data,\n        timestamp: Date.now(),\n      });\n    },\n    [store, debug, enabled]\n  );\n\n  /**\n   * Handle connection state changes\n   */\n  const handleConnect = useCallback(() => {\n    if (!enabled) return;\n\n    if (debug) {\n      logger.info('Connected to SSE');\n    }\n\n    const currentStreamStore = store.getState()?.stream;\n    if (currentStreamStore) {\n      currentStreamStore.setConnected(true);\n      currentStreamStore.setTransport('sse');\n    }\n\n    config?.onConnect?.();\n  }, [store, config, debug, enabled]);\n\n  const handleDisconnect = useCallback(() => {\n    if (!enabled) return;\n\n    if (debug) {\n      logger.info('Disconnected from SSE');\n    }\n\n    const currentStreamStore = store.getState()?.stream;\n    if (currentStreamStore) {\n      currentStreamStore.setConnected(false);\n      currentStreamStore.setTransport(null);\n    }\n\n    config?.onDisconnect?.();\n  }, [store, config, debug, enabled]);\n\n  const handleError = useCallback(\n    (error: PackageErrorLike) => {\n      if (!enabled) return;\n\n      logger.error('Connection error', { error: error.message });\n\n      // Add error to global errors store with 'stream' source\n      const errorsSlice = store.getState()?.errors;\n      if (errorsSlice) {\n        const streamError =\n          error instanceof StreamPackageError\n            ? error\n            : StreamPackageError.fromError(error, STREAM_ERROR_CODES.CONNECTION_FAILED);\n        const serialized = serializeError(streamError, 'stream');\n        errorsSlice.addError(serialized);\n      }\n\n      config?.onError?.(error);\n    },\n    [store, config, enabled]\n  );\n\n  /**\n   * Build channels array from config\n   */\n  const channels = (config?.channels ?? DEFAULT_CHANNELS) as StreamChannel[];\n\n  /**\n   * Establish SSE connection (only when enabled)\n   */\n  const { connected } = useStreamConnection<unknown>({\n    channels,\n    endpoint: config?.endpoint ?? '/api/events/stream',\n    autoConnect: enabled && (config?.autoConnect ?? true),\n    autoReconnect: enabled && (config?.reconnect?.enabled ?? true),\n    maxReconnectAttempts: config?.reconnect?.maxAttempts ?? DEFAULT_MAX_RECONNECT_ATTEMPTS,\n    reconnectDelay: config?.reconnect?.delay ?? DEFAULT_RECONNECT_DELAY_MS,\n    onConnect: handleConnect,\n    onDisconnect: handleDisconnect,\n    onError: handleError,\n    onMessage: handleMessage,\n  });\n\n  /**\n   * Track connection state\n   */\n  useEffect(() => {\n    isConnectedRef.current = connected;\n  }, [connected]);\n\n  /**\n   * Subscribe to channels in stream store\n   */\n  useEffect(() => {\n    if (!enabled || !streamStore) return;\n\n    streamStore.subscribeToChannels(channels as string[]);\n\n    return () => {\n      streamStore.unsubscribeFromAllChannels();\n    };\n  }, [enabled, streamStore, channels]);\n\n  /**\n   * Register domain stream handlers\n   *\n   * Each domain service registers its own handlers via its static\n   * registerStreamHandlers() method. This keeps domain logic in domain services.\n   */\n  useEffect(() => {\n    if (!enabled || !streamStore) return;\n\n    const cleanupFns: (() => void)[] = [];\n\n    // Register files domain stream handlers\n    try {\n      const cleanupFiles = FrontendFilesDomainService.registerStreamHandlers(debug);\n      cleanupFns.push(cleanupFiles);\n      if (debug) {\n        logger.debug('Registered files stream handlers');\n      }\n    } catch (err) {\n      logger.warn('Failed to register files stream handlers', {\n        error: err instanceof Error ? err.message : String(err),\n      });\n    }\n\n    // Register notifications domain stream handlers\n    try {\n      const cleanupNotifications = FrontendNotificationsDomainService.registerStreamHandlers(debug);\n      cleanupFns.push(cleanupNotifications);\n      if (debug) {\n        logger.debug('Registered notifications stream handlers');\n      }\n    } catch (err) {\n      logger.warn('Failed to register notifications stream handlers', {\n        error: err instanceof Error ? err.message : String(err),\n      });\n    }\n\n    return () => {\n      // Cleanup all domain handlers\n      cleanupFns.forEach(cleanup => {\n        try {\n          cleanup();\n        } catch {\n          // Ignore cleanup errors\n        }\n      });\n    };\n  }, [enabled, streamStore, debug]);\n\n  /**\n   * Log connection status\n   */\n  useEffect(() => {\n    if (!enabled) return;\n\n    if (debug && connected) {\n      logger.info('Ready - subscribed to channels', { channels });\n    }\n  }, [enabled, connected, channels, debug]);\n\n  return {\n    connected: enabled ? connected : false,\n    channels,\n    enabled,\n  };\n}\n\nexport default useStreamManager;\n","/* eslint-disable max-lines-per-function */\n\n/**\n * PlyazProvider - Unified React Provider for Plyaz Core Services\n *\n * A single provider that initializes and provides access to all frontend-safe\n * Plyaz services. Designed for ease of use without unnecessary limitations.\n *\n * @module frontend/providers/PlyazProvider\n *\n * @example Basic usage\n * ```tsx\n * import { PlyazProvider } from '@plyaz/core/frontend';\n *\n * export default function App({ children }) {\n *   return (\n *     <PlyazProvider\n *       config={{\n *         api: {\n *           baseURL: process.env.NEXT_PUBLIC_API_URL!,\n *           env: 'production',\n *         },\n *       }}\n *     >\n *       {children}\n *     </PlyazProvider>\n *   );\n * }\n * ```\n *\n * @example With all options\n * ```tsx\n * <PlyazProvider\n *   config={{\n *     api: {\n *       baseURL: 'https://api.example.com',\n *       env: 'production',\n *       apiKey: process.env.NEXT_PUBLIC_API_KEY,\n *     },\n *     featureFlags: {\n *       provider: 'api',\n *       refreshInterval: 60000,\n *     },\n *     appContext: 'webapp',\n *     verbose: process.env.NODE_ENV === 'development',\n *   }}\n *   onReady={(services) => console.log('Services ready:', services)}\n *   onError={(error) => Sentry.captureException(error)}\n *   loading={<Skeleton />}\n *   error={(err) => <ErrorBoundary error={err} />}\n * >\n *   {children}\n * </PlyazProvider>\n * ```\n *\n * @example Accessing services in components\n * ```tsx\n * import { usePlyaz, useApi, useEvents, useFeatureFlag } from '@plyaz/core/frontend';\n *\n * function MyComponent() {\n *   // Full access to all services\n *   const { api, events, isReady } = usePlyaz();\n *\n *   // Or use specific hooks\n *   const apiClient = useApi();\n *   const events = useEvents();\n *   const { value: darkMode } = useFeatureFlag('DARK_MODE');\n *\n *   // Make API calls\n *   const fetchData = async () => {\n *     const response = await apiClient.get('/users');\n *     return response.data;\n *   };\n *\n *   // Subscribe to events\n *   useEffect(() => {\n *     const unsubscribe = events.on('user:updated', (event) => {\n *       console.log('User updated:', event.data);\n *     });\n *     return unsubscribe;\n *   }, [events]);\n *\n *   return <div>...</div>;\n * }\n * ```\n */\n\n'use client';\n\nimport {\n  createContext,\n  useContext,\n  useEffect,\n  useState,\n  useCallback,\n  useMemo,\n  type ReactElement,\n} from 'react';\nimport { ApiProvider } from '@plyaz/api/frontend';\nimport { PackageLogger } from '@plyaz/logger';\nimport { CorePackageError } from '@plyaz/errors';\nimport { ERROR_CODES } from '@plyaz/types';\nimport type { RootStoreSlice, RootStoreHook } from '@plyaz/types/store';\nimport { Core } from '../../init/CoreInitializer';\nimport { ServiceRegistry } from '../../init/ServiceRegistry';\nimport { detectRuntime } from '../../utils/runtime';\nimport { ApiClientService } from '../../services/ApiClientService';\nimport { CoreEventManager } from '../../events/CoreEventManager';\nimport type {\n  CoreAppContext,\n  CoreAppEnvironment,\n  CorePlyazConfig,\n  CorePlyazFeatureFlagConfig,\n  CorePlyazServices,\n  CorePlyazContextValue,\n  CorePlyazProviderProps as PlyazProviderProps,\n  CoreDomainServiceInstance,\n} from '@plyaz/types/core';\nimport type { ApiClientOptions, PackageErrorLike } from '@plyaz/types/api';\nimport { createEncryptionConfig } from '@plyaz/config/api';\nimport { InitializationError } from '../components/InitializationError';\nimport { InitializationLoading } from '../components/InitializationLoading';\nimport { useStreamManager } from '../hooks/useStreamManager';\n\nconst logger = new PackageLogger({ packageName: 'core', service: 'PlyazProvider' });\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Implementation-specific context value.\n * Extends CorePlyazContextValue with concrete implementation references.\n */\ninterface PlyazContextValue extends Omit<CorePlyazContextValue, 'api' | 'events' | 'core'> {\n  /** API client for making HTTP requests */\n  api: typeof ApiClientService | null;\n  /** Event manager for pub/sub */\n  events: typeof CoreEventManager;\n  /** Core initializer reference */\n  core: typeof Core;\n}\n\n/**\n * Implementation-specific services for callbacks.\n */\ninterface PlyazServices extends Omit<CorePlyazServices, never> {\n  /** API client for making HTTP requests */\n  api: typeof ApiClientService | null;\n  /** Event manager for pub/sub */\n  events: typeof CoreEventManager;\n  /** Core initializer reference */\n  core: typeof Core;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst PlyazContext = createContext<PlyazContextValue | null>(null);\n\n// ============================================================================\n// Feature Flag Store (Simple in-memory implementation for frontend)\n// ============================================================================\n\n/**\n * Frontend Feature Flag Store\n *\n * Manages feature flags in frontend context with two provider options:\n * - 'memory': Flags stored in-memory (default, resets on refresh)\n * - 'api': Flags fetched from API endpoint\n *\n * For backend/server-side feature flags, use Core.initialize() with\n * database, redis, or file providers instead.\n */\nclass FeatureFlagStore {\n  private flags: Record<string, boolean> = {};\n  private config: CorePlyazFeatureFlagConfig;\n  private apiClient: typeof ApiClientService | null = null;\n  private refreshTimer: ReturnType<typeof globalThis.setInterval> | null = null;\n\n  constructor(config: CorePlyazFeatureFlagConfig = {}) {\n    this.config = config;\n    this.flags = config.defaults ?? {};\n  }\n\n  setApiClient(client: typeof ApiClientService | null): void {\n    this.apiClient = client;\n  }\n\n  get(key: string, defaultValue = false): boolean {\n    return this.flags[key] ?? defaultValue;\n  }\n\n  getAll(): Record<string, boolean> {\n    return { ...this.flags };\n  }\n\n  set(key: string, value: boolean): void {\n    this.flags[key] = value;\n  }\n\n  setAll(flags: Record<string, boolean>): void {\n    this.flags = { ...this.flags, ...flags };\n  }\n\n  async refresh(): Promise<void> {\n    // Only 'api' provider needs refresh - 'memory' is local only\n    if (this.config.provider === 'api' && this.apiClient?.isInitialized()) {\n      try {\n        const endpoint = this.config.apiEndpoint ?? '/feature-flags';\n        const client = this.apiClient.getClient();\n        const response = await client.get<{ flags?: Record<string, boolean> }>(endpoint);\n        if (response.data?.flags) {\n          this.flags = { ...this.flags, ...response.data.flags };\n        }\n      } catch (error) {\n        globalThis.console.warn('[PlyazProvider] Failed to refresh feature flags:', error);\n      }\n    }\n    // 'memory' provider: no-op, flags are managed locally\n  }\n\n  startAutoRefresh(): void {\n    // Only start auto-refresh for 'api' provider\n    if (\n      this.config.provider === 'api' &&\n      this.config.refreshInterval &&\n      this.config.refreshInterval > 0\n    ) {\n      this.refreshTimer = globalThis.setInterval(() => {\n        this.refresh().catch(() => {});\n      }, this.config.refreshInterval);\n    }\n  }\n\n  stopAutoRefresh(): void {\n    if (this.refreshTimer) {\n      globalThis.clearInterval(this.refreshTimer);\n      this.refreshTimer = null;\n    }\n  }\n\n  dispose(): void {\n    this.stopAutoRefresh();\n    this.flags = {};\n  }\n}\n\n// ============================================================================\n// Provider Component\n// ============================================================================\n\n/**\n * PlyazProvider - Unified provider for all Plyaz frontend services\n *\n * Initializes and provides access to:\n * - API Client (HTTP requests)\n * - Event Manager (pub/sub)\n * - Feature Flags\n * - Core utilities\n */\n\n/**\n * Build API client configuration from provider config\n */\nfunction buildApiConfig(config: CorePlyazConfig): Partial<ApiClientOptions> {\n  return {\n    baseURL: config.api.baseURL,\n    timeout: config.api.timeout,\n    headers: config.api.headers ? { static: config.api.headers } : undefined,\n    retry: config.api.retry,\n    encryption:\n      config.api.encryption?.enabled && config.api.encryption?.key\n        ? createEncryptionConfig(config.api.encryption.key)\n        : undefined,\n  };\n}\n\n/** Initialize Core with frontend config */\nasync function initializeCore(config: CorePlyazConfig): Promise<void> {\n  const apiConfig = buildApiConfig(config);\n\n  await Core.initialize({\n    skipDb: true,\n    appContext: config.appContext ?? 'webapp',\n    verbose: config.verbose,\n    api: {\n      env: config.api.env ?? 'development',\n      apiKey: config.api.apiKey,\n      setAsDefault: true,\n      ...apiConfig,\n    },\n    // Feature flags config (passed to Core for memory provider setup)\n    featureFlags: config.featureFlags,\n    // Error handler is auto-initialized by Core.initialize()\n    // Store (Zustand) is auto-connected via useRootStore in Core.initializeRootStore()\n  });\n}\n\n/**\n * Create a store registry that wraps the Zustand root store.\n * This allows ServiceRegistry to inject stores into domain services.\n *\n * @param store - The root store hook from @plyaz/store, passed via PlyazProvider props\n */\nfunction createStoreRegistry(store: RootStoreHook): {\n  getStore<K extends keyof RootStoreSlice>(key: K): RootStoreSlice[K] | undefined;\n} {\n  return {\n    getStore<K extends keyof RootStoreSlice>(key: K): RootStoreSlice[K] | undefined {\n      const state = store.getState();\n      if (!state) {\n        logger.warn(\n          'Store state is undefined - store may not be hydrated yet. This can cause side effects if called during SSR or before initialization.'\n        );\n        return undefined;\n      }\n      const slice = state[key] as RootStoreSlice[K] | undefined;\n      logger.debug(`[StoreRegistry] getStore('${key}')`, {\n        hasSlice: !!slice,\n        sliceKeys: slice ? Object.keys(slice) : [],\n      });\n      return slice;\n    },\n  };\n}\n\n/** Initialize ServiceRegistry if services are configured */\nasync function initializeServices(config: CorePlyazConfig, store: RootStoreHook): Promise<void> {\n  if (!config.services || config.services.length === 0) return;\n\n  if (config.verbose) {\n    globalThis.console.log('[PlyazProvider] Initializing domain services...');\n  }\n\n  await ServiceRegistry.initialize({\n    environment: config.environment,\n    runtime: config.runtime ?? detectRuntime(),\n    apiClient: { baseURL: config.api.baseURL },\n    observability: config.observability,\n    services: config.services,\n    // Provide store registry for injecting stores into services\n    stores: createStoreRegistry(store),\n  });\n\n  if (config.verbose) {\n    globalThis.console.log(\n      '[PlyazProvider] Services initialized:',\n      ServiceRegistry.getInitializedKeys()\n    );\n  }\n}\n\n/** Initialize feature flags store */\nasync function initializeFeatureFlags(featureFlagStore: FeatureFlagStore): Promise<void> {\n  featureFlagStore.setApiClient(ApiClientService);\n  await featureFlagStore.refresh();\n  featureFlagStore.startAutoRefresh();\n}\n\n/**\n * Create PlyazServices object for callbacks\n */\nfunction createServicesObject(\n  config: CorePlyazConfig,\n  featureFlagStore: FeatureFlagStore\n): PlyazServices {\n  return {\n    api: ApiClientService,\n    events: CoreEventManager,\n    core: Core,\n    featureFlags: {\n      get: (key, def) => featureFlagStore.get(key, def),\n      getAll: () => featureFlagStore.getAll(),\n      refresh: () => featureFlagStore.refresh(),\n    },\n    appContext: config.appContext ?? 'webapp',\n    environment: config.api.env ?? 'development',\n    getService: <T extends CoreDomainServiceInstance>(key: string) => ServiceRegistry.get<T>(key),\n    getServiceAsync: <T extends CoreDomainServiceInstance>(key: string) =>\n      ServiceRegistry.getAsync<T>(key),\n    hasService: (key: string) => ServiceRegistry.has(key),\n    getServiceKeys: () => ServiceRegistry.getInitializedKeys(),\n  };\n}\n\nexport function PlyazProvider({\n  children,\n  store,\n  config,\n  loading,\n  error: errorComponent,\n  onReady,\n  onError,\n  skipLoadingState = false,\n}: PlyazProviderProps): ReactElement {\n  const [isReady, setIsReady] = useState(false);\n  const [error, setError] = useState<PackageErrorLike | null>(null);\n  const [featureFlagStore] = useState(() => new FeatureFlagStore(config.featureFlags));\n\n  // Initialize services\n  const initialize = useCallback(async () => {\n    try {\n      setError(null);\n\n      // Inject store into Core before initialization\n      Core.setRootStoreHook(store);\n\n      await initializeCore(config);\n      await initializeServices(config, store);\n      await initializeFeatureFlags(featureFlagStore);\n\n      setIsReady(true);\n      onReady?.(createServicesObject(config, featureFlagStore));\n    } catch (err) {\n      const initError =\n        err instanceof CorePackageError\n          ? err\n          : new CorePackageError(\n              err instanceof Error ? err.message : String(err),\n              ERROR_CODES.CORE_INITIALIZATION_FAILED\n            );\n      setError(initError);\n      onError?.(initError);\n      globalThis.console.error('[PlyazProvider] Initialization failed:', initError);\n    }\n  }, [config, store, featureFlagStore, onReady, onError]);\n\n  // Reinitialize function\n  const reinitialize = useCallback(async () => {\n    setIsReady(false);\n    ServiceRegistry.disposeAll();\n    await Core.reset();\n    await initialize();\n  }, [initialize]);\n\n  // Initialize on mount\n  useEffect(() => {\n    void initialize();\n\n    return () => {\n      featureFlagStore.dispose();\n      ServiceRegistry.disposeAll();\n    };\n  }, []); // Only run once on mount\n\n  // Build context value\n  const contextValue = useMemo<PlyazContextValue>(\n    () => ({\n      api: isReady ? ApiClientService : null,\n      events: CoreEventManager,\n      core: Core,\n      featureFlags: {\n        get: (key, def) => featureFlagStore.get(key, def),\n        getAll: () => featureFlagStore.getAll(),\n        refresh: () => featureFlagStore.refresh(),\n      },\n      appContext: config.appContext ?? 'webapp',\n      environment: config.api.env ?? 'development',\n      isReady,\n      error,\n      reinitialize,\n      // ServiceRegistry access\n      getService: <T extends CoreDomainServiceInstance>(key: string) => ServiceRegistry.get<T>(key),\n      getServiceAsync: <T extends CoreDomainServiceInstance>(key: string) =>\n        ServiceRegistry.getAsync<T>(key),\n      hasService: (key: string) => ServiceRegistry.has(key),\n      getServiceKeys: () => ServiceRegistry.getInitializedKeys(),\n    }),\n    [isReady, error, config.appContext, config.api.env, featureFlagStore, reinitialize]\n  );\n\n  // Handle error state\n  if (error && !skipLoadingState) {\n    return (\n      <ApiProvider>\n        <InitializationError error={error} errorComponent={errorComponent} />\n      </ApiProvider>\n    );\n  }\n\n  // Check if streaming is enabled\n  const streamingEnabled = config.streaming?.enabled ?? false;\n\n  // Initialize streaming (hook is always called, but only active when enabled)\n  useStreamManager({\n    config: config.streaming,\n    store,\n    verbose: config.verbose,\n    enabled: streamingEnabled,\n  });\n\n  // Handle loading state\n  if (!isReady && !skipLoadingState) {\n    return (\n      <ApiProvider>\n        <InitializationLoading loading={loading} />\n      </ApiProvider>\n    );\n  }\n\n  // Render children with context and React Query\n  return (\n    <ApiProvider>\n      <PlyazContext.Provider value={contextValue}>{children}</PlyazContext.Provider>\n    </ApiProvider>\n  );\n}\n\n// ============================================================================\n// Hooks\n// ============================================================================\n\n/**\n * Access all Plyaz services\n *\n * @example\n * ```tsx\n * function MyComponent() {\n *   const { api, events, isReady, featureFlags } = usePlyaz();\n *\n *   if (!isReady) return <Loading />;\n *\n *   const handleClick = async () => {\n *     const response = await api.getClient().get('/data');\n *     events.emit('data:fetched', { data: response.data });\n *   };\n *\n *   return <button onClick={handleClick}>Fetch</button>;\n * }\n * ```\n */\nexport function usePlyaz(): PlyazContextValue {\n  const context = useContext(PlyazContext);\n  if (!context) {\n    throw new CorePackageError(\n      'usePlyaz must be used within a PlyazProvider. ' +\n        'Wrap your app with <PlyazProvider config={...}>...</PlyazProvider>',\n      ERROR_CODES.CORE_PROVIDER_NOT_FOUND\n    );\n  }\n  return context;\n}\n\n/**\n * Access API client directly\n *\n * @example\n * ```tsx\n * function UserList() {\n *   const api = useApi();\n *   const [users, setUsers] = useState([]);\n *\n *   useEffect(() => {\n *     api.getClient().get('/users').then(res => setUsers(res.data));\n *   }, [api]);\n *\n *   return <ul>{users.map(u => <li key={u.id}>{u.name}</li>)}</ul>;\n * }\n * ```\n */\nexport function useApi(): typeof ApiClientService {\n  const { api, isReady } = usePlyaz();\n  if (!isReady || !api) {\n    throw new CorePackageError(\n      'API client is not ready. Make sure PlyazProvider has finished initializing.',\n      ERROR_CODES.CORE_PROVIDER_INITIALIZATION_FAILED\n    );\n  }\n  return api;\n}\n\n/**\n * Access API client safely (returns null if not ready)\n */\nexport function useApiSafe(): typeof ApiClientService | null {\n  const { api } = usePlyaz();\n  return api;\n}\n\n/**\n * Access event manager\n *\n * @example\n * ```tsx\n * function NotificationListener() {\n *   const events = useEvents();\n *\n *   useEffect(() => {\n *     const unsubscribe = events.on('notification:received', (event) => {\n *       toast.show(event.data.message);\n *     });\n *     return unsubscribe;\n *   }, [events]);\n *\n *   return null;\n * }\n * ```\n */\nexport function useEvents(): typeof CoreEventManager {\n  const { events } = usePlyaz();\n  return events;\n}\n\n/**\n * Check if a feature flag is enabled\n *\n * @example\n * ```tsx\n * function FeatureComponent() {\n *   const isEnabled = useFlag('NEW_DASHBOARD');\n *\n *   if (!isEnabled) return null;\n *   return <NewDashboard />;\n * }\n * ```\n */\nexport function useFlag(key: string, defaultValue = false): boolean {\n  const { featureFlags } = usePlyaz();\n  return featureFlags.get(key, defaultValue);\n}\n\n/**\n * Access feature flag utilities\n *\n * @example\n * ```tsx\n * function FlagManager() {\n *   const flags = useFeatureFlags();\n *   const allFlags = flags.getAll();\n *\n *   return (\n *     <div>\n *       <pre>{JSON.stringify(allFlags, null, 2)}</pre>\n *       <button onClick={flags.refresh}>Refresh Flags</button>\n *     </div>\n *   );\n * }\n * ```\n */\nexport function useFeatureFlags(): PlyazContextValue['featureFlags'] {\n  const { featureFlags } = usePlyaz();\n  return featureFlags;\n}\n\n/**\n * Check if Plyaz services are ready\n *\n * @example\n * ```tsx\n * function LoadingAwareComponent() {\n *   const isReady = usePlyazReady();\n *\n *   if (!isReady) return <Skeleton />;\n *   return <ActualContent />;\n * }\n * ```\n */\nexport function usePlyazReady(): boolean {\n  const { isReady } = usePlyaz();\n  return isReady;\n}\n\n/**\n * Get current app context\n */\nexport function useAppContext(): CoreAppContext {\n  const { appContext } = usePlyaz();\n  return appContext;\n}\n\n/**\n * Get current environment\n */\nexport function useEnvironment(): CoreAppEnvironment {\n  const { environment } = usePlyaz();\n  return environment;\n}\n\n/**\n * Get a domain service by key.\n * Services must be registered in the `services` config.\n *\n * @param key - Service key (e.g., 'featureFlags', 'example')\n * @returns The service instance\n * @throws If service is not initialized or not found\n *\n * @example\n * ```tsx\n * function MyComponent() {\n *   const flagService = useService<FeatureFlagDomainService>('featureFlags');\n *\n *   useEffect(() => {\n *     flagService.isEnabled('my-flag').then(console.log);\n *   }, [flagService]);\n *\n *   return <div>...</div>;\n * }\n * ```\n */\nexport function useService<T extends CoreDomainServiceInstance = CoreDomainServiceInstance>(\n  key: string\n): T {\n  const { getService, isReady } = usePlyaz();\n\n  if (!isReady) {\n    throw new CorePackageError(\n      `PlyazProvider not ready. Cannot get service '${key}'.`,\n      ERROR_CODES.CORE_PROVIDER_INITIALIZATION_FAILED\n    );\n  }\n\n  return useMemo(() => getService<T>(key), [getService, key]);\n}\n\n/**\n * Get a domain service by key with loading state.\n * Useful for lazy-initialized services.\n *\n * @param key - Service key\n * @returns Object with service, loading state, and error\n *\n * @example\n * ```tsx\n * function MyComponent() {\n *   const { service, isLoading, error } = useServiceAsync<ExampleDomainService>('example');\n *\n *   if (isLoading) return <Spinner />;\n *   if (error) return <Error message={error.message} />;\n *\n *   return <div>{service?.serviceName}</div>;\n * }\n * ```\n */\nexport function useServiceAsync<T extends CoreDomainServiceInstance = CoreDomainServiceInstance>(\n  key: string\n): { service: T | null; isLoading: boolean; error: Error | null } {\n  const { getServiceAsync, isReady } = usePlyaz();\n  const [service, setService] = useState<T | null>(null);\n  const [isLoading, setIsLoading] = useState(true);\n  const [error, setError] = useState<Error | null>(null);\n\n  useEffect(() => {\n    if (!isReady) return;\n\n    let mounted = true;\n\n    const loadService = async (): Promise<void> => {\n      try {\n        setIsLoading(true);\n        const svc = await getServiceAsync<T>(key);\n        if (mounted) {\n          setService(svc);\n          setIsLoading(false);\n        }\n      } catch (err) {\n        if (mounted) {\n          setError(err instanceof Error ? err : new Error(String(err)));\n          setIsLoading(false);\n        }\n      }\n    };\n\n    void loadService();\n\n    return () => {\n      mounted = false;\n    };\n  }, [key, getServiceAsync, isReady]);\n\n  return { service, isLoading, error };\n}\n\n/**\n * Check if a service is registered and available\n *\n * @example\n * ```tsx\n * function MyComponent() {\n *   const hasFlags = useHasService('featureFlags');\n *\n *   if (!hasFlags) {\n *     return <div>Feature flags not configured</div>;\n *   }\n *\n *   return <FeatureFlagUI />;\n * }\n * ```\n */\nexport function useHasService(key: string): boolean {\n  const { hasService } = usePlyaz();\n  return hasService(key);\n}\n\n/**\n * Get all initialized service keys\n *\n * @example\n * ```tsx\n * function DebugPanel() {\n *   const serviceKeys = useServiceKeys();\n *\n *   return (\n *     <div>\n *       <h3>Loaded Services:</h3>\n *       <ul>\n *         {serviceKeys.map(key => <li key={key}>{key}</li>)}\n *       </ul>\n *     </div>\n *   );\n * }\n * ```\n */\nexport function useServiceKeys(): string[] {\n  const { getServiceKeys } = usePlyaz();\n  return getServiceKeys();\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport { PlyazContext };\nexport { Core };\n","/**\n * Files Hook\n *\n * React hook for accessing Files service operations.\n * Uses ServiceRegistry for service access - the service handles all\n * data transformation, validation, and API calls.\n *\n * For most cases, use hooks directly from @plyaz/api/src/services.\n * This hook is for cases where you need integration with the domain service.\n *\n * @example\n * ```typescript\n * const { service, isLoading, error } = useFilesService();\n *\n * // Use service methods\n * const items = await service.fetchAll();\n * const item = await service.create({ name: 'New' });\n * ```\n */\n\nimport { useServiceAsync, useService } from '../providers';\nimport { ServiceRegistry } from '../../init/ServiceRegistry';\nimport type { FrontendFilesDomainService } from '../../domain/files';\nimport type { UseServiceAsyncResult } from '@plyaz/types/core';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Service Key\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Service key for Files in ServiceRegistry */\nexport const FILES_SERVICE_KEY = 'files';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Hooks\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Hook for Files service (async - with loading state)\n *\n * Use this when the service may be lazily initialized.\n * Returns { service, isLoading, error }.\n *\n * @example\n * ```typescript\n * const { service, isLoading, error } = useFilesService();\n * const items = await service.fetchAll();\n * ```\n */\nexport function useFilesService(): UseServiceAsyncResult<FrontendFilesDomainService> {\n  return useServiceAsync<FrontendFilesDomainService>(FILES_SERVICE_KEY);\n}\n\n/**\n * Hook for Files service (sync - throws if not ready)\n *\n * Use this when you're sure the service is already initialized.\n * Throws if service is not available.\n *\n * @example\n * ```typescript\n * const service = useFilesServiceSync();\n * const item = await service.create({ name: 'New' });\n * ```\n */\nexport function useFilesServiceSync(): FrontendFilesDomainService {\n  return useService<FrontendFilesDomainService>(FILES_SERVICE_KEY);\n}\n\n/**\n * Get Files service directly from registry (non-hook)\n *\n * Use this in callbacks or outside React components.\n *\n * @example\n * ```typescript\n * // In a callback\n * const handleSubmit = async () => {\n *   const service = await getFilesService();\n *   await service.create(data);\n * };\n *\n * // In a store action\n * const myStore = create((set) => ({\n *   create: async (data) => {\n *     const service = await getFilesService();\n *     const entity = await service.create(data);\n *     set({ entity });\n *   },\n * }));\n * ```\n */\nexport async function getFilesService(): Promise<FrontendFilesDomainService> {\n  return ServiceRegistry.getAsync<FrontendFilesDomainService>(FILES_SERVICE_KEY);\n}\n\n/**\n * Create service accessor for Zustand stores\n *\n * @example\n * ```typescript\n * import { createFilesServiceAccessor } from './useFiles';\n *\n * const getFiles = createFilesServiceAccessor();\n *\n * const myStore = create((set) => ({\n *   items: [],\n *   fetch: async () => {\n *     const service = await getFiles();\n *     const items = await service.fetchAll();\n *     set({ items });\n *   },\n * }));\n * ```\n */\nexport function createFilesServiceAccessor(): () => Promise<FrontendFilesDomainService> {\n  return () => ServiceRegistry.getAsync<FrontendFilesDomainService>(FILES_SERVICE_KEY);\n}\n","/**\n * useAllFileProgress Hook\n *\n * Composite hook that merges upload, download, and generate progress into a unified format.\n * Reduces complexity in components that need to track multiple file operations.\n *\n * @example Basic usage\n * ```typescript\n * const { items, hasActive, overallPercentage } = useAllFileProgress();\n *\n * if (hasActive) {\n *   return <ProgressBar value={overallPercentage} />;\n * }\n * ```\n *\n * @example With filtering\n * ```typescript\n * const { items } = useAllFileProgress({\n *   types: ['upload', 'download'],\n *   includeCompleted: false,\n *   filterByIds: ['file-123', 'file-456'],\n * });\n * ```\n */\n\nimport { useMemo } from 'react';\nimport { useUploadProgress, useDownloadProgress, useGenerateProgress } from '@plyaz/store';\nimport type {\n  CoreAllFileProgressOptions,\n  CoreAllFileProgressResult,\n  CoreFileProgressItem,\n  CoreFileOperationStatus,\n} from '@plyaz/types/core';\n\n/**\n * Composite hook for tracking all file operation progress.\n *\n * Merges upload, download, and generate progress from the store into a\n * unified format for easier UI rendering.\n *\n * @param options - Filter and display options\n * @returns Unified progress items and aggregate stats\n */\nexport function useAllFileProgress(\n  options: CoreAllFileProgressOptions = {}\n): CoreAllFileProgressResult {\n  const { filterByIds, includeCompleted = false, includeFailed = true, types } = options;\n\n  const uploadProgress = useUploadProgress();\n  const downloadProgress = useDownloadProgress();\n  const generateProgress = useGenerateProgress();\n\n  return useMemo(() => {\n    const items: CoreFileProgressItem[] = [];\n\n    // Process upload progress\n    if (!types || types.includes('upload')) {\n      for (const [id, progress] of Object.entries(uploadProgress)) {\n        if (filterByIds && !filterByIds.includes(id)) continue;\n        if (!includeCompleted && progress.status === 'completed') continue;\n        if (!includeFailed && progress.status === 'failed') continue;\n\n        items.push({\n          id,\n          type: 'upload',\n          percentage: progress.percentage ?? 0,\n          loaded: progress.loaded ?? 0,\n          total: progress.total ?? 0,\n          status: progress.status as CoreFileOperationStatus,\n          filename: progress.filename,\n          error: progress.error,\n        });\n      }\n    }\n\n    // Process download progress\n    if (!types || types.includes('download')) {\n      for (const [id, progress] of Object.entries(downloadProgress)) {\n        if (filterByIds && !filterByIds.includes(id)) continue;\n        if (!includeCompleted && progress.status === 'completed') continue;\n        if (!includeFailed && progress.status === 'failed') continue;\n\n        items.push({\n          id,\n          type: 'download',\n          percentage: progress.percentage ?? 0,\n          loaded: progress.loaded ?? 0,\n          total: progress.total ?? 0,\n          status: progress.status as CoreFileOperationStatus,\n          filename: progress.filename,\n          error: progress.error,\n        });\n      }\n    }\n\n    // Process generate progress\n    if (generateProgress && (!types || types.includes('generate'))) {\n      const shouldInclude =\n        (!filterByIds || filterByIds.includes(generateProgress.templateId)) &&\n        (includeCompleted || generateProgress.status !== 'completed') &&\n        (includeFailed || generateProgress.status !== 'failed');\n\n      if (shouldInclude) {\n        items.push({\n          id: generateProgress.templateId,\n          type: 'generate',\n          percentage: generateProgress.percentage ?? 0,\n          loaded: 0,\n          total: 0,\n          status: generateProgress.status as CoreFileOperationStatus,\n          error: generateProgress.error,\n        });\n      }\n    }\n\n    // Calculate counts\n    const counts = {\n      upload: items.filter(i => i.type === 'upload').length,\n      download: items.filter(i => i.type === 'download').length,\n      generate: items.filter(i => i.type === 'generate').length,\n      total: items.length,\n    };\n\n    // Calculate overall progress\n    const activeItems = items.filter(i => !['completed', 'failed', 'cancelled'].includes(i.status));\n    const overallPercentage =\n      activeItems.length > 0\n        ? Math.round(activeItems.reduce((sum, i) => sum + i.percentage, 0) / activeItems.length)\n        : 0;\n\n    return {\n      items,\n      counts,\n      hasActive: activeItems.length > 0,\n      overallPercentage,\n    };\n  }, [\n    uploadProgress,\n    downloadProgress,\n    generateProgress,\n    filterByIds,\n    includeCompleted,\n    includeFailed,\n    types,\n  ]);\n}\n","/**\n * useHasActiveFileOperations Hook\n *\n * Simple hook to check if any file operations (upload/download/generate) are active.\n * Useful for disabling UI elements or showing global loading indicators.\n *\n * @example\n * ```typescript\n * const hasActiveOps = useHasActiveFileOperations();\n *\n * return (\n *   <button disabled={hasActiveOps}>\n *     {hasActiveOps ? 'Working...' : 'Submit'}\n *   </button>\n * );\n * ```\n */\n\nimport { useHasActiveUploads, useHasActiveDownloads, useGenerateProgress } from '@plyaz/store';\n\n/**\n * Check if any file operations are currently active.\n *\n * @returns true if any upload, download, or generate operation is in progress\n */\nexport function useHasActiveFileOperations(): boolean {\n  const hasActiveUploads = useHasActiveUploads();\n  const hasActiveDownloads = useHasActiveDownloads();\n  const generateProgress = useGenerateProgress();\n\n  const hasActiveGenerate =\n    generateProgress !== null &&\n    !['completed', 'failed', 'cancelled'].includes(generateProgress.status);\n\n  return hasActiveUploads || hasActiveDownloads || hasActiveGenerate;\n}\n","/**\n * ============================================================================\n * FILE OPERATION UTILITIES\n * ============================================================================\n *\n * Framework-agnostic utilities for common file operations:\n * - Base64 encoding/decoding\n * - Blob creation and download triggering\n * - File key parsing\n * - Filename generation\n *\n * These utilities work in both browser and Node.js environments.\n */\n\nimport {\n  MIME_TYPE_EXTENSIONS,\n  FILE_SIZE_UNITS,\n  FILE_SIZE_MULTIPLIERS,\n  type ParsedFileKey,\n} from '@plyaz/types/core';\n\n// File key path segment counts\nconst FILE_KEY_FULL_PATH_SEGMENTS = 4;\nconst FILE_KEY_THREE_SEGMENTS = 3;\nconst FILE_KEY_TWO_SEGMENTS = 2;\nconst MIME_TYPE_PARTS = 2;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// BASE64 CONVERSION\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Convert a File to base64 string (browser only).\n *\n * @param file - The File object to convert\n * @returns Promise resolving to base64 encoded string (without data URL prefix)\n *\n * @example\n * ```typescript\n * const base64 = await fileToBase64(file);\n * // Use for API upload\n * ```\n */\nexport function fileToBase64(file: File): Promise<string> {\n  return new Promise((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onload = () => {\n      const result = reader.result as string;\n      // Remove data URL prefix (e.g., \"data:application/pdf;base64,\")\n      const base64 = result.split(',')[1] || result;\n      resolve(base64);\n    };\n    reader.onerror = () => reject(reader.error);\n    reader.readAsDataURL(file);\n  });\n}\n\n/**\n * Convert a base64 string to a Blob (browser only).\n *\n * @param base64 - The base64 encoded string\n * @param mimeType - The MIME type for the blob (default: 'application/octet-stream')\n * @returns A Blob containing the decoded data\n *\n * @example\n * ```typescript\n * const blob = base64ToBlob(downloadResult.buffer, 'application/pdf');\n * downloadBlob(blob, 'document.pdf');\n * ```\n */\nexport function base64ToBlob(base64: string, mimeType = 'application/octet-stream'): Blob {\n  const binary = atob(base64);\n  const bytes = new Uint8Array(binary.length);\n  for (let i = 0; i < binary.length; i++) {\n    bytes[i] = binary.charCodeAt(i);\n  }\n  return new Blob([bytes], { type: mimeType });\n}\n\n/**\n * Convert a base64 string to a Buffer (Node.js only).\n *\n * @param base64 - The base64 encoded string\n * @returns A Buffer containing the decoded data\n *\n * @example\n * ```typescript\n * const buffer = base64ToBuffer(encodedData);\n * fs.writeFileSync('output.pdf', buffer);\n * ```\n */\nexport function base64ToBuffer(base64: string): Buffer {\n  return Buffer.from(base64, 'base64');\n}\n\n/**\n * Convert a Buffer or Uint8Array to a base64 string.\n *\n * @param data - The binary data to encode\n * @returns The base64 encoded string\n *\n * @example\n * ```typescript\n * const base64 = bufferToBase64(fileBuffer);\n * ```\n */\nexport function bufferToBase64(data: Buffer | Uint8Array): string {\n  if (Buffer.isBuffer(data)) {\n    return data.toString('base64');\n  }\n  return Buffer.from(data).toString('base64');\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// BROWSER DOWNLOAD\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Trigger a browser download of a Blob.\n *\n * Creates a temporary anchor element to trigger the download,\n * then cleans up the object URL.\n *\n * @param blob - The Blob to download\n * @param filename - The filename to save as\n *\n * @example\n * ```typescript\n * const blob = base64ToBlob(data, 'application/pdf');\n * downloadBlob(blob, 'invoice.pdf');\n * ```\n */\nexport function downloadBlob(blob: Blob, filename: string): void {\n  // Browser-only function - check if we're in a browser environment\n  const win = globalThis as typeof globalThis & { document?: Document };\n  if (!win.document) return;\n\n  const url = URL.createObjectURL(blob);\n  const a = win.document.createElement('a');\n  a.href = url;\n  a.download = filename;\n  win.document.body.appendChild(a);\n  a.click();\n  win.document.body.removeChild(a);\n  URL.revokeObjectURL(url);\n}\n\n/**\n * Download a base64-encoded file in the browser.\n * Combines base64ToBlob and downloadBlob for convenience.\n *\n * @param base64 - The base64 encoded data\n * @param filename - The filename to save as\n * @param mimeType - The MIME type (default: 'application/octet-stream')\n *\n * @example\n * ```typescript\n * downloadBase64(response.data, 'report.pdf', 'application/pdf');\n * ```\n */\nexport function downloadBase64(\n  base64: string,\n  filename: string,\n  mimeType = 'application/octet-stream'\n): void {\n  const blob = base64ToBlob(base64, mimeType);\n  downloadBlob(blob, filename);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// FILE KEY PARSING\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Parse a storage file key into its components.\n *\n * Supports various key formats:\n * - `entityType/entityId/category/filename`\n * - `entityType/entityId/filename`\n * - `category/filename`\n * - `filename`\n *\n * @param key - The storage key to parse\n * @returns Parsed components\n *\n * @example\n * ```typescript\n * const parsed = parseFileKey('user/123/documents/invoice.pdf');\n * // { entityType: 'user', entityId: '123', category: 'documents', filename: 'invoice.pdf' }\n * ```\n */\nexport function parseFileKey(key: string): ParsedFileKey {\n  const parts = key.split('/');\n  const result: ParsedFileKey = { raw: key };\n\n  if (parts.length >= FILE_KEY_FULL_PATH_SEGMENTS) {\n    // Full path: entityType/entityId/category/filename\n    result.entityType = parts[0];\n    result.entityId = parts[1];\n    result.category = parts[2];\n    result.filename = parts.slice(FILE_KEY_THREE_SEGMENTS).join('/');\n  } else if (parts.length === FILE_KEY_THREE_SEGMENTS) {\n    // entityType/entityId/filename or category/subcategory/filename\n    result.entityType = parts[0];\n    result.entityId = parts[1];\n    result.filename = parts[FILE_KEY_TWO_SEGMENTS];\n  } else if (parts.length === FILE_KEY_TWO_SEGMENTS) {\n    // category/filename\n    result.category = parts[0];\n    result.filename = parts[1];\n  } else {\n    // Just filename\n    result.filename = parts[0];\n  }\n\n  return result;\n}\n\n/**\n * Extract just the filename from a file key or path.\n *\n * @param key - The file key or path\n * @returns The filename portion\n *\n * @example\n * ```typescript\n * getFilenameFromKey('user/123/docs/invoice.pdf'); // 'invoice.pdf'\n * ```\n */\nexport function getFilenameFromKey(key: string): string {\n  return key.split('/').pop() ?? key;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// FILENAME GENERATION\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Generate a filename from a template ID and output format.\n *\n * @param templateId - The template ID (may include path separators)\n * @param outputFormat - The desired output format (e.g., 'pdf', 'docx')\n * @returns A generated filename\n *\n * @example\n * ```typescript\n * generateFilename('invoices/default', 'pdf');\n * // 'default.pdf'\n * ```\n */\nexport function generateFilename(templateId: string, outputFormat: string): string {\n  const baseName = templateId.split('/').pop() ?? 'document';\n  return `${baseName}.${outputFormat}`;\n}\n\n/**\n * Generate a unique filename with timestamp.\n *\n * @param prefix - Filename prefix (default: 'file')\n * @param extension - File extension (default: 'bin')\n * @returns A unique filename\n *\n * @example\n * ```typescript\n * generateUniqueFilename('download', 'pdf');\n * // 'download-1704067200000.pdf'\n * ```\n */\nexport function generateUniqueFilename(prefix = 'file', extension = 'bin'): string {\n  return `${prefix}-${Date.now()}.${extension}`;\n}\n\n/**\n * Infer file extension from MIME type.\n *\n * @param mimeType - The MIME type\n * @returns The inferred extension (without dot)\n *\n * @example\n * ```typescript\n * inferExtensionFromMimeType('application/pdf'); // 'pdf'\n * inferExtensionFromMimeType('image/png'); // 'png'\n * ```\n */\nexport function inferExtensionFromMimeType(mimeType: string): string {\n  // Check exact match first using shared constants\n  if (MIME_TYPE_EXTENSIONS[mimeType]) {\n    return MIME_TYPE_EXTENSIONS[mimeType];\n  }\n\n  // Fallback: try to extract from mime type (e.g., 'image/png' -> 'png')\n  const parts = mimeType.split('/');\n  if (parts.length === MIME_TYPE_PARTS) {\n    return parts[1].split(';')[0].trim();\n  }\n\n  return 'bin';\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// FILE SIZE FORMATTING\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Format file size in human-readable format.\n *\n * @param bytes - Size in bytes\n * @param decimals - Number of decimal places (default: 2)\n * @returns Formatted size string\n *\n * @example\n * ```typescript\n * formatFileSize(1024); // '1 KB'\n * formatFileSize(1536000); // '1.46 MB'\n * ```\n */\nexport function formatFileSize(bytes: number, decimals = 2): string {\n  if (bytes === 0) return '0 Bytes';\n\n  const k = 1024;\n  const dm = decimals < 0 ? 0 : decimals;\n\n  const i = Math.floor(Math.log(bytes) / Math.log(k));\n  const size = Number.parseFloat((bytes / Math.pow(k, i)).toFixed(dm));\n\n  return `${size} ${FILE_SIZE_UNITS[i]}`;\n}\n\n/**\n * Parse a human-readable file size to bytes.\n *\n * @param sizeString - Size string (e.g., '1.5 MB', '100KB')\n * @returns Size in bytes\n *\n * @example\n * ```typescript\n * parseFileSize('1.5 MB'); // 1572864\n * parseFileSize('100KB'); // 102400\n * ```\n */\nexport function parseFileSize(sizeString: string): number {\n  const match = sizeString.trim().match(/^([\\d.]+)\\s*([A-Z]+)$/i);\n  if (!match) {\n    return Number.parseInt(sizeString, 10) || 0;\n  }\n\n  const value = Number.parseFloat(match[1]);\n  const unit = match[2].toUpperCase();\n\n  return Math.round(value * (FILE_SIZE_MULTIPLIERS[unit] ?? 1));\n}\n","/**\n * useFileUpload Hook\n *\n * Hook for uploading files with progress tracking.\n * Progress is tracked globally via store (updated by streams).\n * Errors propagate through global error handling (error boundaries, global error store).\n *\n * @returns {CoreFileUploadResult} Object containing:\n * - `upload` - Upload a single file\n * - `uploadMultiple` - Upload multiple files in parallel\n * - `isUploading` - Whether any upload is in progress\n * - `currentFileIds` - IDs of files currently uploading\n * - `progress` - Overall upload progress (0-100)\n * - `cancel` - Cancel all active uploads\n *\n * @example Basic usage\n * ```typescript\n * const { upload, uploadMultiple, isUploading, currentFileIds, progress, cancel } = useFileUpload();\n *\n * const handleUpload = async (file: File) => {\n *   const result = await upload(file, {\n *     entityType: 'user',\n *     entityId: '123',\n *     category: 'documents',\n *   });\n *   console.log('Uploaded:', result);\n * };\n *\n * return (\n *   <button onClick={() => handleUpload(file)} disabled={isUploading}>\n *     {isUploading ? `Uploading ${progress}%` : 'Upload'}\n *   </button>\n * );\n * ```\n *\n * @example Bulk upload\n * ```typescript\n * const { uploadMultiple, isUploading, cancel } = useFileUpload();\n *\n * const handleBulkUpload = async (files: FileList) => {\n *   const results = await uploadMultiple(Array.from(files), {\n *     entityType: 'project',\n *     entityId: 'proj-456',\n *   });\n * };\n *\n * // Cancel all uploads\n * cancel();\n * ```\n */\n\nimport { useCallback, useMemo } from 'react';\nimport { useHasActiveUploads, useOverallUploadProgress, useUploadProgress } from '@plyaz/store';\nimport { abortRequest, getEndpointUrl } from '@plyaz/api';\nimport type { ServiceOptions } from '@plyaz/types/api';\nimport {\n  SERVICE_KEYS,\n  type CoreFileUploadOptions,\n  type CoreFileUploadResult,\n  type CoreTemplateUploadOptions,\n  type CoreGenerateOptions,\n  type CoreBulkTemplateUploadOptions,\n} from '@plyaz/types/core';\nimport { FILE_CATEGORY, ENTITY_TYPE } from '@plyaz/types/storage';\nimport type { FrontendFilesDomainService } from '../../../domain/files';\nimport { useService } from '../../providers/PlyazProvider';\nimport { fileToBase64 } from '../../../utils/files';\n\n/** Options for building upload params */\ninterface BuildUploadParamsOptions {\n  entityType: ENTITY_TYPE;\n  entityId: string;\n  category: FILE_CATEGORY;\n  isPublic: boolean;\n}\n\n/** Upload params result from buildUploadParams */\ninterface UploadParams {\n  base64: string;\n  filename: string;\n  mimeType: string;\n  isPublic: boolean;\n  entityType: ENTITY_TYPE;\n  entityId: string;\n  category: FILE_CATEGORY;\n}\n\n/** Build upload params from file and options */\nasync function buildUploadParams(\n  file: File,\n  options: BuildUploadParamsOptions\n): Promise<UploadParams> {\n  return {\n    base64: await fileToBase64(file),\n    filename: file.name,\n    mimeType: file.type || 'application/octet-stream',\n    isPublic: options.isPublic,\n    entityType: options.entityType,\n    entityId: options.entityId,\n    category: options.category,\n  };\n}\n\n/** Create upload from template handler */\nfunction createUploadFromTemplate(filesService: FrontendFilesDomainService) {\n  return async (\n    options: CoreTemplateUploadOptions,\n    serviceOptions?: ServiceOptions\n  ): Promise<unknown> => {\n    const {\n      templateId,\n      templateData,\n      outputFormat = 'pdf',\n      locale = 'en',\n      pdfOptions,\n      entityType = ENTITY_TYPE.SYSTEM,\n      entityId = 'default',\n      category = FILE_CATEGORY.DOCUMENT,\n    } = options;\n    return filesService.uploadFile(\n      {\n        templateId,\n        templateData,\n        outputFormat,\n        locale,\n        pdfOptions,\n        entityType,\n        entityId,\n        category,\n      },\n      serviceOptions\n    );\n  };\n}\n\n/** Create bulk template upload handler */\nfunction createUploadMultipleFromTemplate(filesService: FrontendFilesDomainService) {\n  return async (\n    bulkOptions: CoreBulkTemplateUploadOptions,\n    serviceOptions?: ServiceOptions\n  ): Promise<unknown[]> => {\n    const { files, options = {} } = bulkOptions;\n    const { concurrency = 2, continueOnError = true } = options;\n    const uploadItems = files.map(file => ({\n      templateId: file.templateId,\n      templateData: file.templateData,\n      outputFormat: file.outputFormat ?? 'pdf',\n      locale: file.locale ?? 'en',\n      pdfOptions: file.pdfOptions,\n      entityType: file.entityType ?? ENTITY_TYPE.SYSTEM,\n      entityId: file.entityId ?? 'default',\n      category: file.category ?? FILE_CATEGORY.DOCUMENT,\n      filename: file.filename,\n      mimeType: file.mimeType,\n    }));\n    const response = await filesService.uploadFiles(\n      {\n        files: uploadItems,\n        options: { concurrency, continueOnError },\n      },\n      serviceOptions\n    );\n    return response.results ?? [];\n  };\n}\n\n/** Create generate document handler */\nfunction createGenerate(filesService: FrontendFilesDomainService) {\n  return async (\n    options: CoreGenerateOptions,\n    serviceOptions?: ServiceOptions\n  ): Promise<{ buffer: string; size: number }> => {\n    const {\n      templateId,\n      templateData,\n      outputFormat = 'pdf',\n      locale = 'en',\n      pdfOptions,\n      rendererName,\n      validation,\n    } = options;\n    return filesService.generateFile(\n      {\n        templateId,\n        templateData,\n        outputFormat,\n        locale,\n        pdfOptions,\n        ...(rendererName ? { rendererName } : {}),\n        ...(validation ? { validation } : {}),\n      },\n      serviceOptions\n    );\n  };\n}\n\n/**\n * Hook for uploading files with progress tracking.\n * @returns Upload functions and state\n */\nexport function useFileUpload(): CoreFileUploadResult {\n  const filesService = useService<FrontendFilesDomainService>(SERVICE_KEYS.FILES_FRONTEND);\n  const isUploading = useHasActiveUploads();\n  const progress = useOverallUploadProgress();\n  const uploadProgress = useUploadProgress();\n\n  const currentFileIds = useMemo(\n    () =>\n      Object.keys(uploadProgress).filter(\n        id => uploadProgress[id]?.status !== 'completed' && uploadProgress[id]?.status !== 'failed'\n      ),\n    [uploadProgress]\n  );\n\n  const upload = useCallback(\n    async (\n      file: File,\n      options: CoreFileUploadOptions = {},\n      serviceOptions?: ServiceOptions\n    ): Promise<unknown> => {\n      const {\n        entityType = ENTITY_TYPE.SYSTEM,\n        entityId = 'default',\n        category = FILE_CATEGORY.ATTACHMENT,\n        isPublic = false,\n      } = options;\n      const uploadParams = await buildUploadParams(file, {\n        entityType,\n        entityId,\n        category,\n        isPublic,\n      });\n      return filesService.uploadFile(uploadParams, serviceOptions);\n    },\n    [filesService]\n  );\n\n  const uploadMultiple = useCallback(\n    async (\n      files: File[],\n      options: CoreFileUploadOptions = {},\n      serviceOptions?: ServiceOptions\n    ): Promise<unknown[]> => {\n      const {\n        entityType = ENTITY_TYPE.SYSTEM,\n        entityId = 'default',\n        category = FILE_CATEGORY.ATTACHMENT,\n        isPublic = false,\n      } = options;\n      const buildOptions = { entityType, entityId, category, isPublic };\n      const uploadItems = await Promise.all(\n        files.map(file => buildUploadParams(file, buildOptions))\n      );\n      const response = await filesService.uploadFiles({ files: uploadItems }, serviceOptions);\n      return response.results ?? [];\n    },\n    [filesService]\n  );\n\n  // Use extracted helper functions for template operations (memoized)\n  const uploadFromTemplate = useMemo(() => createUploadFromTemplate(filesService), [filesService]);\n  const uploadMultipleFromTemplate = useMemo(\n    () => createUploadMultipleFromTemplate(filesService),\n    [filesService]\n  );\n  const generate = useMemo(() => createGenerate(filesService), [filesService]);\n\n  const cancel = useCallback(() => {\n    void abortRequest(getEndpointUrl('uploadFile'));\n    void abortRequest(getEndpointUrl('uploadFiles'));\n    void abortRequest(getEndpointUrl('generateDocument'));\n  }, []);\n\n  return {\n    upload,\n    uploadMultiple,\n    uploadFromTemplate,\n    uploadMultipleFromTemplate,\n    generate,\n    isUploading,\n    currentFileIds,\n    progress,\n    cancel,\n  };\n}\n","/**\n * useFileDownload Hook\n *\n * Hook for downloading files with progress tracking and browser download triggering.\n * Progress is tracked globally via store (updated by streams).\n * Errors propagate through global error handling (error boundaries, global error store).\n *\n * @returns {CoreFileDownloadResult} Object containing:\n * - `download` - Download a file by ID, returns Blob or null\n * - `isDownloading` - Whether any download is in progress\n * - `currentFileId` - ID of file currently downloading (or null)\n * - `progress` - Overall download progress (0-100)\n * - `cancel` - Cancel all active downloads\n *\n * @example Basic usage\n * ```typescript\n * const { download, isDownloading, progress, cancel } = useFileDownload();\n *\n * const handleDownload = async () => {\n *   const blob = await download('file-123');\n *   if (blob) console.log('Downloaded', blob.size, 'bytes');\n * };\n *\n * return (\n *   <button onClick={handleDownload} disabled={isDownloading}>\n *     {isDownloading ? `Downloading ${progress}%` : 'Download'}\n *   </button>\n * );\n * ```\n *\n * @example With custom filename\n * ```typescript\n * await download('file-123', { filename: 'custom-name.pdf' });\n * ```\n */\n\nimport { useCallback, useMemo } from 'react';\nimport {\n  useHasActiveDownloads,\n  useDownloadProgress,\n  useOverallDownloadProgress,\n} from '@plyaz/store';\nimport { abortRequest, endpointCachePattern } from '@plyaz/api';\nimport type { ServiceOptions } from '@plyaz/types/api';\nimport { base64ToBlob, downloadBlob, getFilenameFromKey } from '../../../utils/files';\nimport {\n  SERVICE_KEYS,\n  type CoreFileDownloadOptions,\n  type CoreFileDownloadResult,\n} from '@plyaz/types/core';\nimport type { FrontendFilesDomainService } from '../../../domain/files';\nimport { useService } from '../../providers/PlyazProvider';\n\n/**\n * Hook for downloading files with progress tracking.\n *\n * Features:\n * - Tracks download progress in real-time via store (updated by streams)\n * - Auto-triggers browser download on completion\n * - Supports custom filenames\n * - Provides cancel functionality via @plyaz/api\n * - Errors propagate to global error handling\n *\n * @returns Download function and state\n */\nexport function useFileDownload(): CoreFileDownloadResult {\n  // Get files service via useService\n  const filesService = useService<FrontendFilesDomainService>(SERVICE_KEYS.FILES_FRONTEND);\n\n  // Get state from store hooks (updated by streams)\n  const isDownloading = useHasActiveDownloads();\n  const progress = useOverallDownloadProgress();\n  const downloadProgress = useDownloadProgress();\n\n  // Derive current file ID from active downloads in store\n  const currentFileId = useMemo(\n    () =>\n      Object.keys(downloadProgress).find(\n        id =>\n          downloadProgress[id]?.status === 'downloading' ||\n          downloadProgress[id]?.status === 'pending'\n      ) ?? null,\n    [downloadProgress]\n  );\n\n  const download = useCallback(\n    async (\n      fileId: string,\n      options: CoreFileDownloadOptions = {},\n      serviceOptions?: ServiceOptions\n    ): Promise<Blob | null> => {\n      const { autoDownload = true, filename } = options;\n\n      // Call download method - store is updated automatically by service/streams\n      // Errors propagate to global error handling\n      const response = await filesService.download({ id: fileId }, serviceOptions);\n\n      // Convert base64 to blob\n      const blob = base64ToBlob(response.buffer, response.mimeType);\n\n      // Determine filename\n      const downloadFilename = filename ?? response.filename ?? getFilenameFromKey(fileId);\n\n      // Trigger browser download if autoDownload is enabled\n      if (autoDownload) {\n        downloadBlob(blob, downloadFilename);\n      }\n\n      return blob;\n    },\n    [filesService]\n  );\n\n  const cancel = useCallback(() => {\n    // Abort all download requests via @plyaz/api using endpoint patterns\n    void abortRequest(endpointCachePattern('downloadFile'));\n  }, []);\n\n  return {\n    download,\n    isDownloading,\n    currentFileId,\n    progress,\n    cancel,\n  };\n}\n","/**\n * useFile Hook\n *\n * Hook for file metadata operations (read-only).\n * Provides fetchById, getSignedUrl, and exists methods.\n *\n * @returns {CoreFileResult} Object containing:\n * - `fetchById` - Fetch file metadata by ID\n * - `getSignedUrl` - Get signed URL for a file\n * - `exists` - Check if a file exists\n *\n * @example Basic usage\n * ```typescript\n * const { fetchById, getSignedUrl, exists } = useFile();\n *\n * const metadata = await fetchById('file-123');\n * const { url, expiresAt } = await getSignedUrl('file-123');\n * const fileExists = await exists('file-123');\n * ```\n */\n\nimport { useCallback } from 'react';\nimport { SERVICE_KEYS, type CoreFileResult } from '@plyaz/types/core';\nimport type { FrontendFilesDomainService } from '../../../domain/files';\nimport { useService } from '../../providers/PlyazProvider';\n\n/**\n * Hook for file metadata operations.\n * @returns Metadata functions\n */\nexport function useFile(): CoreFileResult {\n  const filesService = useService<FrontendFilesDomainService>(SERVICE_KEYS.FILES_FRONTEND);\n\n  /**\n   * Fetch file metadata by ID\n   */\n  const fetchById = useCallback(\n    async (fileId: string): Promise<unknown> => {\n      return filesService.fetchById(fileId);\n    },\n    [filesService]\n  );\n\n  /**\n   * Get signed URL for a file\n   */\n  const getSignedUrl = useCallback(\n    async (fileId: string): Promise<{ url: string; expiresAt: string }> => {\n      return filesService.getSignedUrlForFile({ id: fileId });\n    },\n    [filesService]\n  );\n\n  /**\n   * Check if a file exists\n   */\n  const exists = useCallback(\n    async (fileId: string): Promise<boolean> => {\n      try {\n        await filesService.fetchById(fileId);\n        return true;\n      } catch {\n        return false;\n      }\n    },\n    [filesService]\n  );\n\n  return {\n    fetchById,\n    getSignedUrl,\n    exists,\n  };\n}\n","/**\n * useFileDelete Hook\n *\n * Hook for file deletion operations.\n * Provides deleteFile and deleteMultiple methods.\n *\n * @returns {CoreFileDeleteResult} Object containing:\n * - `deleteFile` - Delete a file by ID\n * - `deleteMultiple` - Delete multiple files by IDs\n * - `isDeleting` - Whether currently deleting\n *\n * @example Basic usage\n * ```typescript\n * const { deleteFile, deleteMultiple, isDeleting } = useFileDelete();\n *\n * await deleteFile('file-123');\n * await deleteMultiple(['file-1', 'file-2'], { soft: true });\n * ```\n */\n\nimport { useCallback, useState } from 'react';\nimport { SERVICE_KEYS, type CoreFileDeleteResult } from '@plyaz/types/core';\nimport type { FrontendFilesDomainService } from '../../../domain/files';\nimport { useService } from '../../providers/PlyazProvider';\n\n/**\n * Hook for file deletion operations.\n * @returns Delete functions and state\n */\nexport function useFileDelete(): CoreFileDeleteResult {\n  const filesService = useService<FrontendFilesDomainService>(SERVICE_KEYS.FILES_FRONTEND);\n  const [isDeleting, setIsDeleting] = useState(false);\n\n  /**\n   * Delete a file by ID\n   */\n  const deleteFile = useCallback(\n    async (fileId: string): Promise<void> => {\n      setIsDeleting(true);\n      try {\n        await filesService.delete(fileId);\n      } finally {\n        setIsDeleting(false);\n      }\n    },\n    [filesService]\n  );\n\n  /**\n   * Delete multiple files by IDs\n   */\n  const deleteMultiple = useCallback(\n    async (fileIds: string[], options?: { soft?: boolean }): Promise<unknown> => {\n      setIsDeleting(true);\n      try {\n        // Use bulk delete API endpoint\n        const response = await fetch('/api/files/bulk', {\n          method: 'DELETE',\n          headers: { 'Content-Type': 'application/json' },\n          body: JSON.stringify({ ids: fileIds, soft: options?.soft ?? false }),\n        });\n        return response.json();\n      } finally {\n        setIsDeleting(false);\n      }\n    },\n    []\n  );\n\n  return {\n    deleteFile,\n    deleteMultiple,\n    isDeleting,\n  };\n}\n","/**\n * Notifications Hook\n *\n * React hook for accessing Notifications service operations.\n * Uses ServiceRegistry for service access - the service handles all\n * data transformation, validation, and API calls.\n *\n * For most cases, use hooks directly from @plyaz/api/src/services.\n * This hook is for cases where you need integration with the domain service.\n *\n * @example\n * ```typescript\n * const { service, isLoading, error } = useNotificationsService();\n *\n * // Use service methods\n * const items = await service.fetchAll();\n * const item = await service.create({ name: 'New' });\n * ```\n */\n\nimport { useServiceAsync, useService } from '../providers';\nimport { ServiceRegistry } from '../../init/ServiceRegistry';\nimport type { FrontendNotificationsDomainService } from '../../domain/notifications';\nimport type { UseServiceAsyncResult } from '@plyaz/types/core';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Service Key\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Service key for Notifications in ServiceRegistry */\nexport const NOTIFICATIONS_SERVICE_KEY = 'notifications';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Hooks\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Hook for Notifications service (async - with loading state)\n *\n * Use this when the service may be lazily initialized.\n * Returns { service, isLoading, error }.\n *\n * @example\n * ```typescript\n * const { service, isLoading, error } = useNotificationsService();\n * const items = await service.fetchAll();\n * ```\n */\nexport function useNotificationsService(): UseServiceAsyncResult<FrontendNotificationsDomainService> {\n  return useServiceAsync<FrontendNotificationsDomainService>(NOTIFICATIONS_SERVICE_KEY);\n}\n\n/**\n * Hook for Notifications service (sync - throws if not ready)\n *\n * Use this when you're sure the service is already initialized.\n * Throws if service is not available.\n *\n * @example\n * ```typescript\n * const service = useNotificationsServiceSync();\n * const item = await service.create({ name: 'New' });\n * ```\n */\nexport function useNotificationsServiceSync(): FrontendNotificationsDomainService {\n  return useService<FrontendNotificationsDomainService>(NOTIFICATIONS_SERVICE_KEY);\n}\n\n/**\n * Get Notifications service directly from registry (non-hook)\n *\n * Use this in callbacks or outside React components.\n *\n * @example\n * ```typescript\n * // In a callback\n * const handleSubmit = async () => {\n *   const service = await getNotificationsService();\n *   await service.create(data);\n * };\n *\n * // In a store action\n * const myStore = create((set) => ({\n *   create: async (data) => {\n *     const service = await getNotificationsService();\n *     const entity = await service.create(data);\n *     set({ entity });\n *   },\n * }));\n * ```\n */\nexport async function getNotificationsService(): Promise<FrontendNotificationsDomainService> {\n  return ServiceRegistry.getAsync<FrontendNotificationsDomainService>(NOTIFICATIONS_SERVICE_KEY);\n}\n\n/**\n * Create service accessor for Zustand stores\n *\n * @example\n * ```typescript\n * import { createNotificationsServiceAccessor } from './useNotifications';\n *\n * const getNotifications = createNotificationsServiceAccessor();\n *\n * const myStore = create((set) => ({\n *   items: [],\n *   fetch: async () => {\n *     const service = await getNotifications();\n *     const items = await service.fetchAll();\n *     set({ items });\n *   },\n * }));\n * ```\n */\nexport function createNotificationsServiceAccessor(): () => Promise<FrontendNotificationsDomainService> {\n  return (): Promise<FrontendNotificationsDomainService> =>\n    ServiceRegistry.getAsync<FrontendNotificationsDomainService>(NOTIFICATIONS_SERVICE_KEY);\n}\n","/**\n * Service Accessors (Generic)\n *\n * Generic utilities for accessing services from stores.\n * These work with any domain service, not just feature flags.\n */\n\nimport type { CoreDomainServiceInstance } from '@plyaz/types/core';\nimport { ServiceRegistry } from '../../init/ServiceRegistry';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Service Accessors\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create a service accessor function for use in stores.\n *\n * @param serviceKey - Key of the service in the registry\n * @returns Async function that returns the service instance\n *\n * @example\n * ```typescript\n * const getExampleService = createServiceAccessor<ExampleDomainService>('example');\n *\n * const myStoreSlice = {\n *   async createEntity(data) {\n *     const service = await getExampleService();\n *     return service.create(data);\n *   },\n * };\n * ```\n */\nexport function createServiceAccessor<T extends CoreDomainServiceInstance>(\n  serviceKey: string\n): () => Promise<T> {\n  return () => ServiceRegistry.getAsync<T>(serviceKey);\n}\n\n/**\n * Create multiple service accessors at once.\n *\n * @param keys - Object mapping accessor names to service keys\n * @returns Object with accessor functions\n *\n * @example\n * ```typescript\n * const services = createServiceAccessors({\n *   flags: 'featureFlags',\n *   examples: 'example',\n *   users: 'users',\n * });\n *\n * const flags = await services.flags();\n * const example = await services.examples();\n * ```\n */\nexport function createServiceAccessors<T extends Record<string, string>>(\n  keys: T\n): { [K in keyof T]: () => Promise<CoreDomainServiceInstance> } {\n  const accessors = {} as { [K in keyof T]: () => Promise<CoreDomainServiceInstance> };\n\n  for (const [name, key] of Object.entries(keys)) {\n    accessors[name as keyof T] = createServiceAccessor(key);\n  }\n\n  return accessors;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Zustand Middleware\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create a Zustand middleware that injects services into store actions.\n *\n * @param serviceKeys - Service keys to inject\n * @returns Zustand middleware function\n *\n * @example\n * ```typescript\n * import { create } from 'zustand';\n * import { withServices } from '@plyaz/core/frontend';\n *\n * interface MyStore {\n *   items: Item[];\n *   services: { example: ExampleDomainService };\n *   fetchItems: () => Promise<void>;\n * }\n *\n * const useMyStore = create<MyStore>(\n *   withServices(['example'], (set, get, services) => ({\n *     items: [],\n *     services,\n *     fetchItems: async () => {\n *       const items = await services.example.getAll();\n *       set({ items });\n *     },\n *   }))\n * );\n * ```\n */\nexport function withServices<TServices extends Record<string, CoreDomainServiceInstance>>(\n  serviceKeys: string[],\n  createStore: (set: (partial: unknown) => void, get: () => unknown, services: TServices) => unknown\n): (set: (partial: unknown) => void, get: () => unknown) => unknown {\n  return (set: (partial: unknown) => void, get: () => unknown): unknown => {\n    // Create lazy service proxies\n    const services = {} as TServices;\n\n    for (const key of serviceKeys) {\n      Object.defineProperty(services, key, {\n        get: () => ServiceRegistry.get(key),\n        enumerable: true,\n      });\n    }\n\n    return createStore(set, get, services);\n  };\n}\n","/**\n * Feature Flag Store Integration\n *\n * Utilities for integrating feature flags with Zustand stores.\n * Implements the \"pull\" pattern where stores fetch from services.\n */\n\nimport { ServiceRegistry } from '../../init/ServiceRegistry';\nimport type { FeatureFlagValue, FeatureFlagContext } from '@plyaz/types/features';\n\n// Re-export types from @plyaz/types/core\nexport type {\n  CoreFeatureFlagServiceLike,\n  CoreFeatureFlagFetcherOptions,\n  CoreFeatureFlagStoreInitConfig,\n} from '@plyaz/types/core';\n\n// Import for local use\nimport type {\n  CoreFeatureFlagServiceLike,\n  CoreFeatureFlagFetcherOptions,\n  CoreFeatureFlagStoreInitConfig,\n} from '@plyaz/types/core';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Fetcher Factory\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create a fetchFn for feature flag store that uses ServiceRegistry.\n *\n * This bridges the ServiceRegistry with the store's callback-based pattern.\n * Use this for polling or manual refresh scenarios.\n *\n * @param options - Fetcher options\n * @returns A function compatible with store initialization\n *\n * @example\n * ```typescript\n * // Basic usage\n * const fetchFn = createFeatureFlagFetcher();\n *\n * // With context\n * const fetchFn = createFeatureFlagFetcher({\n *   context: { userId: currentUser.id },\n * });\n *\n * // Use in store initializer\n * useFeatureFlagInitializer({ fetchFn });\n * ```\n */\nexport function createFeatureFlagFetcher(\n  options: CoreFeatureFlagFetcherOptions = {}\n): () => Promise<Record<string, FeatureFlagValue>> {\n  const { serviceKey = 'featureFlags', context, transform } = options;\n\n  return async (): Promise<Record<string, FeatureFlagValue>> => {\n    const service = await ServiceRegistry.getAsync<CoreFeatureFlagServiceLike>(serviceKey);\n    const flags = await service.evaluateAll(context);\n\n    // Extract values from evaluations\n    const values: Record<string, FeatureFlagValue> = {};\n    for (const [key, evaluation] of Object.entries(flags)) {\n      if (evaluation && typeof evaluation === 'object' && 'value' in evaluation) {\n        values[key] = (evaluation as { value: FeatureFlagValue }).value;\n      } else {\n        values[key] = evaluation as FeatureFlagValue;\n      }\n    }\n\n    return transform ? transform(values) : values;\n  };\n}\n\n/**\n * Create full store initialization config with ServiceRegistry integration.\n *\n * @param options - Configuration options\n * @returns Config object for store initialization\n *\n * @example\n * ```typescript\n * const storeConfig = createFeatureFlagStoreConfig({\n *   context: { userId: user.id },\n *   defaults: { 'MY_FLAG': false },\n *   polling: { enabled: true, interval: 30000 },\n *   onFlagChange: (key, prev, next) => console.log(`${key}: ${prev} → ${next}`),\n * });\n *\n * useFeatureFlagInitializer(storeConfig);\n * ```\n */\nexport function createFeatureFlagStoreConfig(options: {\n  serviceKey?: string;\n  context?: FeatureFlagContext;\n  defaults?: Record<string, FeatureFlagValue>;\n  polling?: { enabled?: boolean; interval?: number };\n  onFlagChange?: (\n    key: string,\n    prevValue: FeatureFlagValue | undefined,\n    newValue: FeatureFlagValue\n  ) => void;\n  onError?: (error: unknown) => void;\n}): CoreFeatureFlagStoreInitConfig {\n  const { serviceKey, context, defaults, polling, onFlagChange, onError } = options;\n\n  return {\n    fetchFn: createFeatureFlagFetcher({ serviceKey, context }),\n    defaults,\n    polling,\n    onFlagChange,\n    onError,\n  };\n}\n"]}