@plyaz/types 1.40.0 → 1.40.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -525,6 +525,10 @@ var SERVICE_KEYS = {
525
525
  EXAMPLE: "example",
526
526
  /** Example domain service (frontend) */
527
527
  EXAMPLE_FRONTEND: "example-frontend",
528
+ /** Files domain service (backend) */
529
+ FILES: "files",
530
+ /** Files domain service (frontend) */
531
+ FILES_FRONTEND: "files-frontend",
528
532
  /** Feature flags service */
529
533
  FEATURE_FLAGS: "featureFlags",
530
534
  /** Campaign domain service */
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/modules.ts","../../src/core/tables/enum.ts","../../src/core/featureFlag/enums.ts","../../src/core/featureFlag/constants.ts","../../src/core/events/enums.ts","../../src/core/domain/files/enums.ts","../../src/core/domain/files/streaming.ts","../../src/core/domain/files/schemas.ts","../../src/core/events/streaming/types.ts","../../src/core/services/keys.ts","../../src/core/frameworks/route-types.ts","../../src/core/frameworks/file-types.ts"],"names":["TABLES","SORT_DIRECTION","FEATURE_FLAG_TABLE","FEATURE_FLAG_FIELD","FEATURE_FLAG_RULE_FIELD","FEATURE_FLAG_PROVIDERS","NODE_ENVIRONMENTS","DATABASE_FIELDS","SYSTEM_USERS","EVALUATION_REASONS","FEATURE_FLAG_TYPES","z"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Core Module System Types\n *\n * Framework-agnostic module interface for @plyaz/core.\n * Modules implement this contract to integrate with Core.\n */\n\nimport type { DatabaseServiceInterface } from '../db/databaseService';\nimport type { HttpMethod } from '../api/config/types';\nimport type {\n Type,\n DynamicModule,\n ForwardReference,\n InjectionToken,\n OptionalFactoryDependency,\n ModuleMetadata,\n} from '@nestjs/common';\n\n// Re-export HttpMethod for convenience\nexport type { HttpMethod };\n\n/**\n * Core services available to modules\n */\nexport interface CoreServices {\n db: DatabaseServiceInterface;\n // api: ApiClientService;\n // cache: CacheService;\n // logger: LoggerService;\n env: Record<string, string | undefined>;\n}\n\n/**\n * Route handler context\n */\nexport interface CoreRouteContext {\n params: Record<string, string>;\n query: Record<string, string | string[]>;\n body: unknown;\n headers: Record<string, string>;\n services: CoreServices;\n}\n\n/**\n * Route handler function\n */\nexport type CoreRouteHandler = (ctx: CoreRouteContext) => Promise<{\n status?: number;\n body?: unknown;\n headers?: Record<string, string>;\n}>;\n\n/**\n * Route definition - framework agnostic\n */\nexport interface CoreRouteDefinition {\n method: HttpMethod;\n path: string;\n handler: CoreRouteHandler;\n middleware?: string[];\n description?: string;\n}\n\n/**\n * Module configuration schema (optional)\n */\nexport interface CoreModuleConfigSchema<T = unknown> {\n parse: (config: unknown) => T;\n safeParse: (config: unknown) => { success: boolean; data?: T; error?: Error };\n}\n\n/**\n * Service factory for creating module services\n */\nexport type CoreServiceFactory<T = unknown> = (\n services: CoreServices,\n config?: unknown\n) => T | Promise<T>;\n\n/**\n * Module lifecycle hooks\n */\nexport interface CoreModuleLifecycle {\n /**\n * Called when module is initialized\n * Use for setup, connections, etc.\n */\n onInit?(services: CoreServices): Promise<void>;\n\n /**\n * Called when module is being destroyed\n * Use for cleanup, closing connections, etc.\n */\n onDestroy?(): Promise<void>;\n\n /**\n * Called when Core is fully initialized (all modules loaded)\n */\n onReady?(services: CoreServices): Promise<void>;\n}\n\n/**\n * Core module definition - framework agnostic contract\n *\n * @example\n * ```typescript\n * const FeatureFlagModule: CoreModuleDefinition = {\n * name: 'featureFlags',\n * version: '1.0.0',\n * dependencies: ['db'],\n *\n * routes: [\n * { method: 'GET', path: '/flags', handler: listFlags },\n * { method: 'GET', path: '/flags/:key', handler: getFlag },\n * ],\n *\n * services: {\n * featureFlagService: (core) => new FeatureFlagService(core.db),\n * },\n *\n * async onInit(services) {\n * // Initialize feature flag provider\n * },\n * };\n * ```\n */\nexport interface CoreModuleDefinition<TConfig = unknown> extends CoreModuleLifecycle {\n /**\n * Unique module name (used for registration and access)\n */\n name: string;\n\n /**\n * Module version\n */\n version?: string;\n\n /**\n * Core services this module depends on\n */\n dependencies?: ('db' | 'api' | 'cache' | 'logger')[];\n\n /**\n * HTTP routes provided by this module\n */\n routes?: CoreRouteDefinition[];\n\n /**\n * Services exposed by this module\n */\n services?: Record<string, CoreServiceFactory>;\n\n /**\n * Configuration schema for validation\n */\n configSchema?: CoreModuleConfigSchema<TConfig>;\n\n /**\n * Default configuration\n */\n defaultConfig?: Partial<TConfig>;\n}\n\n/**\n * Registered module instance (after initialization)\n */\nexport interface CoreRegisteredModule<TConfig = unknown> {\n definition: CoreModuleDefinition<TConfig>;\n config: TConfig;\n services: Record<string, unknown>;\n initialized: boolean;\n}\n\n/**\n * Module with configuration (result of .forRoot())\n */\nexport interface CoreConfiguredModule<TConfig = unknown> {\n definition: CoreModuleDefinition<TConfig>;\n config: TConfig;\n}\n\n/**\n * Helper to create a module definition with forRoot pattern\n */\nexport interface CoreModuleFactory<TConfig = unknown> {\n /**\n * Module definition\n */\n definition: CoreModuleDefinition<TConfig>;\n\n /**\n * Configure module with options\n */\n forRoot(config?: Partial<TConfig>): CoreConfiguredModule<TConfig>;\n\n /**\n * Use module with default config\n */\n default: CoreConfiguredModule<TConfig>;\n}\n\n/**\n * Supported HTTP frameworks for server mode\n */\nexport type CoreFrameworkType =\n | 'node' // Plain Node.js http module\n | 'express' // Express.js\n | 'nestjs' // NestJS\n | 'nextjs'; // Next.js API routes (SSR/Edge)\n\n/**\n * Server configuration\n */\nexport interface CoreServerConfig {\n port: number;\n host?: string;\n framework?: CoreFrameworkType;\n prefix?: string; // API prefix like '/api/v1'\n cors?: {\n enabled: boolean;\n origins?: string[];\n };\n}\n\n/**\n * Framework adapter interface\n */\nexport interface CoreFrameworkAdapter {\n /**\n * Framework name\n */\n name: CoreFrameworkType;\n\n /**\n * Register routes from modules\n */\n registerRoutes(\n routes: Array<{ moduleName: string; routes: CoreRouteDefinition[] }>,\n services: CoreServices\n ): void | Promise<void>;\n\n /**\n * Start the server\n */\n start(config: CoreServerConfig): Promise<void>;\n\n /**\n * Stop the server\n */\n stop(): Promise<void>;\n\n /**\n * Get the underlying framework instance (express app, fastify instance, etc.)\n */\n getInstance(): unknown;\n}\n\n/**\n * Adapter factory function\n */\nexport type CoreAdapterFactory = () => CoreFrameworkAdapter;\n\n/**\n * Runtime environment detection\n */\nexport type CoreRuntimeEnvironment =\n | 'node' // Plain Node.js\n | 'nestjs' // NestJS backend\n | 'express' // Express.js\n | 'nuxt' // Nuxt.js (Vue SSR)\n | 'nextjs' // Next.js (React SSR)\n | 'browser' // Browser/SPA\n | 'edge' // Edge runtime (Cloudflare, Vercel Edge)\n | 'deno' // Deno runtime\n | 'bun' // Bun runtime\n | 'unknown';\n\n/**\n * Runtime context type\n */\nexport type CoreRuntimeContext = 'backend' | 'frontend' | 'universal';\n\n/**\n * Backend runtimes - always server-side\n */\nexport const BACKEND_RUNTIMES: readonly CoreRuntimeEnvironment[] = [\n 'node',\n 'nestjs',\n 'express',\n 'deno',\n 'bun',\n] as const;\n\n/**\n * Frontend runtimes - always client-side\n */\nexport const FRONTEND_RUNTIMES: readonly CoreRuntimeEnvironment[] = ['browser'] as const;\n\n/**\n * Universal runtimes - can be either (SSR)\n */\nexport const UNIVERSAL_RUNTIMES: readonly CoreRuntimeEnvironment[] = [\n 'nextjs',\n 'nuxt',\n 'edge',\n] as const;\n\n// ============================================================================\n// Next.js Handler Types\n// ============================================================================\n\n/**\n * Handler context for Next.js API routes\n * Provides services and parsed request data\n */\nexport interface CoreNextJsHandlerContext {\n /** Database service */\n db: unknown; // DbService - imported dynamically to avoid circular deps\n /** URL parameters (from dynamic routes like [id]) */\n params: Record<string, string>;\n /** Query string parameters */\n query: Record<string, string | string[]>;\n /** Request body (parsed JSON) */\n body: unknown;\n /** Request headers */\n headers: Record<string, string>;\n /** Original Request object */\n request: Request;\n}\n\n/**\n * Handler return type for Next.js API routes\n */\nexport interface CoreNextJsHandlerResult {\n /** Response body (will be JSON serialized) */\n [key: string]: unknown;\n /** HTTP status code (default: 200) */\n status?: number;\n /** Response headers */\n headers?: Record<string, string>;\n}\n\n/**\n * Handler function type for Next.js API routes\n */\nexport type CoreNextJsHandler = (\n ctx: CoreNextJsHandlerContext\n) => Promise<CoreNextJsHandlerResult | Response>;\n\n/**\n * Options for Next.js createHandler\n */\nexport interface CoreNextJsHandlerOptions {\n /** Core initialization options (used on first request) */\n coreOptions?: Record<string, unknown>;\n}\n\n// ============================================================================\n// Core Initialization Types\n// ============================================================================\n\n/**\n * Core environment variables\n */\nexport interface CoreEnvVars {\n DATABASE_URL?: string;\n SUPABASE_URL?: string;\n SUPABASE_SERVICE_ROLE_KEY?: string;\n SUPABASE_ANON_PUBLIC_KEY?: string;\n ENCRYPTION_KEY?: string;\n API_BASE_URL?: string;\n API_TIMEOUT?: string;\n NODE_ENV?: string;\n [key: string]: string | undefined;\n}\n\n/**\n * Application environment type\n */\nexport type CoreAppEnvironment = 'development' | 'staging' | 'production' | 'test';\n\n/**\n * API client initialization options\n * Extends ApiClientOptions with Core-specific settings\n */\nexport interface CoreApiInitOptions {\n /** Environment for API client configuration */\n env?: CoreAppEnvironment;\n /** Set this client as the default */\n setAsDefault?: boolean;\n /** Base URL for API requests */\n baseURL?: string;\n /** Request timeout in milliseconds */\n timeout?: number;\n /** Additional options passed to ApiClientService */\n [key: string]: unknown;\n}\n\n/**\n * Core initialization options\n */\nexport interface CoreInitOptions<\n TDbConfig = unknown,\n TApiConfig = CoreApiInitOptions,\n TCacheConfig = unknown,\n TStorageConfig = unknown,\n TNotificationsConfig = unknown,\n> {\n /** Path to .env file */\n envPath?: string;\n /** Global application environment */\n environment?: CoreAppEnvironment;\n /** Application context (webapp, backoffice, mobile, etc.) */\n appContext?: CoreAppContext;\n /** Explicit environment variables */\n env?: CoreEnvVars;\n /** Database configuration */\n db?: TDbConfig;\n /** API client configuration */\n api?: TApiConfig;\n /** Cache configuration */\n cache?: TCacheConfig;\n /** Storage configuration (backend only) */\n storage?: TStorageConfig;\n /** Notifications configuration (backend only) */\n notifications?: TNotificationsConfig;\n /** Skip database initialization */\n skipDb?: boolean;\n /** Skip API client initialization */\n skipApi?: boolean;\n /** Skip cache initialization */\n skipCache?: boolean;\n /** Skip storage initialization */\n skipStorage?: boolean;\n /** Skip notifications initialization */\n skipNotifications?: boolean;\n /** Enable verbose logging */\n verbose?: boolean;\n /**\n * Logger configuration for Core's internal PackageLogger.\n * - 'pino': JSON structured logs (default)\n * - 'console': Human-readable output (for development)\n */\n logger?: {\n transport?: 'pino' | 'console';\n };\n}\n\n/**\n * Core initialization result\n */\nexport interface CoreServicesResult<\n TDb = unknown,\n TApi = unknown,\n TCache = unknown,\n TStorage = unknown,\n TNotifications = unknown,\n> {\n db: TDb | null;\n api: TApi | null;\n cache: TCache | null;\n storage: TStorage | null;\n notifications: TNotifications | null;\n env: CoreEnvVars;\n runtime: CoreRuntimeEnvironment;\n appContext: CoreAppContext;\n}\n\n// ============================================================================\n// NestJS Module Types\n// ============================================================================\n\n/**\n * Core module options for NestJS\n */\nexport interface CoreNestJsModuleOptions {\n /** Path to .env file */\n envPath?: string;\n /** Database configuration */\n db?: Record<string, unknown>;\n /** Whether to make Core services globally available */\n isGlobal?: boolean;\n}\n\n/**\n * Async options for NestJS CoreModule (adapters/nestjs.ts pattern)\n * Uses NestJS-specific types for proper DI integration.\n */\nexport interface CoreNestJsModuleAsyncOptions {\n /** Modules to import for dependency resolution */\n imports?: Array<Type<unknown> | DynamicModule | Promise<DynamicModule> | ForwardReference>;\n /** Tokens to inject into the factory */\n inject?: Array<InjectionToken | OptionalFactoryDependency>;\n /** Factory function to create module options */\n useFactory: (...args: unknown[]) => CoreNestJsModuleOptions | Promise<CoreNestJsModuleOptions>;\n /** Whether to make Core services globally available */\n isGlobal?: boolean;\n}\n\n/**\n * Async options for NestJS CoreModule (init/nestjs pattern)\n * Extends ModuleMetadata for full NestJS integration.\n */\nexport interface CoreNestJsCoreModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {\n /** Factory function to create init options */\n useFactory: (...args: unknown[]) => CoreInitOptions | Promise<CoreInitOptions>;\n /** Tokens to inject into the factory */\n inject?: Array<Type<unknown> | string | symbol>;\n}\n\n// ============================================================================\n// App Context Types\n// ============================================================================\n\n/**\n * Application context type\n *\n * Identifies which type of application is running.\n * Different apps may have different feature flags, API endpoints, or UI behaviors.\n */\nexport type CoreAppContext =\n | 'webapp' // Main web application\n | 'backoffice' // Admin/back-office portal\n | 'mobile' // Mobile apps (React Native, Capacitor, etc.)\n | 'microapp' // Embedded micro frontends\n | 'cli'; // CLI tools\n\n/**\n * App context constants for type-safe comparisons\n */\nexport const APP_CONTEXTS: readonly CoreAppContext[] = [\n 'webapp',\n 'backoffice',\n 'mobile',\n 'microapp',\n 'cli',\n] as const;\n\n// ============================================================================\n// Domain Service Types\n// ============================================================================\n\n/**\n * Service runtime compatibility\n *\n * Declares which runtimes a service can execute on.\n * Services can be restricted to specific runtimes for security\n * (e.g., backend-only services should never be bundled for frontend).\n */\nexport type CoreServiceRuntime =\n | 'frontend' // Browser, React, Vue, etc. (no DB access)\n | 'backend' // Node.js, NestJS, Express (has DB access)\n | 'universal'; // Works everywhere (SSR, Edge)\n\n/**\n * Domain service configuration\n *\n * Declares service metadata including runtime compatibility\n * and feature flag requirements.\n *\n * @example\n * ```typescript\n * class CampaignDomainService {\n * static readonly config: CoreDomainServiceConfig = {\n * name: 'CampaignDomainService',\n * runtimes: ['frontend', 'backend'],\n * requiresFeatureFlag: 'campaigns:enabled',\n * };\n * }\n * ```\n */\nexport interface CoreDomainServiceConfig {\n /** Service name for logging and debugging */\n name: string;\n\n /** Runtimes this service can run on */\n runtimes: readonly CoreServiceRuntime[];\n\n /** Feature flag required to use this service (optional) */\n requiresFeatureFlag?: string;\n\n /** App contexts this service is available in (optional, all if not specified) */\n appContexts?: readonly CoreAppContext[];\n}\n","export enum TABLES {\n User = 'users',\n}\n","/**\n * Sort direction for database queries\n */\nexport enum SORT_DIRECTION {\n Asc = 'asc',\n Desc = 'desc',\n}\n\n/**\n * Feature flag database table names enumeration\n */\nexport enum FEATURE_FLAG_TABLE {\n FeatureFlags = 'feature_flags',\n FeatureFlagRules = 'feature_flag_rules',\n FeatureFlagEvaluations = 'feature_flag_evaluations',\n FeatureFlagOverrides = 'feature_flag_overrides',\n}\n\n/**\n * Database field names for feature flags table\n */\nexport enum FEATURE_FLAG_FIELD {\n Key = 'key',\n Name = 'name',\n Value = 'value',\n Type = 'type',\n IsEnabled = 'is_enabled',\n Environments = 'environments',\n Description = 'description',\n CreatedAt = 'created_at',\n UpdatedAt = 'updated_at',\n}\n\n/**\n * Database field names for feature flag rules table\n */\nexport enum FEATURE_FLAG_RULE_FIELD {\n Id = 'id',\n FlagKey = 'flag_key',\n Name = 'name',\n Conditions = 'conditions',\n Value = 'value',\n Priority = 'priority',\n IsEnabled = 'is_enabled',\n}\n\n/**\n * Feature Flag Provider Types\n */\nexport enum FEATURE_FLAG_PROVIDERS {\n MEMORY = 'memory',\n FILE = 'file',\n REDIS = 'redis',\n API = 'api',\n DATABASE = 'database',\n}\n\n/**\n * Node Environment Types\n */\nexport enum NODE_ENVIRONMENTS {\n DEVELOPMENT = 'development',\n PRODUCTION = 'production',\n STAGING = 'staging',\n TEST = 'test',\n}\n\n/**\n * Database Field Names\n */\nexport enum DATABASE_FIELDS {\n Key = 'key',\n FlagKey = 'flag_key',\n UserId = 'user_id',\n IsEnabled = 'is_enabled',\n CreatedAt = 'created_at',\n UpdatedAt = 'updated_at',\n ExpiresAt = 'expires_at',\n EvaluatedAt = 'evaluated_at',\n}\n\n/**\n * System User Constants\n */\nexport enum SYSTEM_USERS {\n SYSTEM = 'system',\n}\n\n/**\n * Evaluation Reasons\n * Must match database enum: evaluation_reason\n * Used when logging feature flag evaluations to audit table\n */\nexport enum EVALUATION_REASONS {\n Default = 'default', // Default flag value used\n RuleMatch = 'rule_match', // Matched a targeting rule\n Rollout = 'rollout', // Matched rollout percentage\n Override = 'override', // User-specific override applied\n Disabled = 'disabled', // Flag is disabled\n}\n\n/**\n * Feature Flag Types\n */\nexport enum FEATURE_FLAG_TYPES {\n BOOLEAN = 'boolean',\n STRING = 'string',\n NUMBER = 'number',\n OBJECT = 'object',\n}\n","/**\n * Default Configuration Values\n */\nexport const FEATURE_FLAG_DEFAULTS = {\n CACHE_TTL: 300,\n REFRESH_INTERVAL: 0,\n POOL_SIZE: 10,\n TIMEOUT: 30000,\n TABLE_NAME: 'feature_flags',\n} as const;\n\n/**\n * Metadata keys used for attaching feature flag information\n * to route handlers via decorators.\n */\nexport const FEATURE_FLAG_METADATA = {\n FLAG_CHECK: 'plyaz:feature_flag_check', // Single feature flag check\n RESOLVE_FLAGS: 'plyaz:resolve_feature_flags', // Multiple flags resolved at once\n};\n","/**\n * Core Event Enums and Constants\n *\n * Type-safe event definitions for the CoreEventManager.\n * All event types follow the pattern: SCOPE:ACTION\n *\n * @example\n * ```typescript\n * import { CoreEventType, CORE_EVENTS } from '@plyaz/types/core';\n *\n * // Use constants for type-safe event emission\n * CoreEventManager.emit(CORE_EVENTS.ENTITY.CREATED, payload);\n *\n * // Subscribe with typed payloads\n * CoreEventManager.on<EntityCreatedPayload>(CORE_EVENTS.ENTITY.CREATED, handler);\n * ```\n */\n\n// ─────────────────────────────────────────────────────────────────\n// Event Scopes\n// ─────────────────────────────────────────────────────────────────\n\n/**\n * Event scope categories\n */\nexport const CoreEventScope = {\n SYSTEM: 'system',\n ENTITY: 'entity',\n VALIDATION: 'validation',\n SANITIZATION: 'sanitization',\n API: 'api',\n CACHE: 'cache',\n AUTH: 'auth',\n DATABASE: 'database',\n FEATURE_FLAG: 'featureFlag',\n STORE: 'store',\n STORAGE: 'storage',\n NOTIFICATION: 'notification',\n} as const;\n\nexport type CoreEventScopeType = (typeof CoreEventScope)[keyof typeof CoreEventScope];\n\n// ─────────────────────────────────────────────────────────────────\n// Event Actions per Scope\n// ─────────────────────────────────────────────────────────────────\n\n/**\n * System event actions\n */\nexport const SystemEventAction = {\n INITIALIZED: 'initialized',\n READY: 'ready',\n SHUTDOWN: 'shutdown',\n ERROR: 'error',\n WARNING: 'warning',\n} as const;\n\n/**\n * Entity CRUD event actions\n */\nexport const EntityEventAction = {\n // Lifecycle (before API call)\n CREATING: 'creating',\n UPDATING: 'updating',\n PATCHING: 'patching',\n DELETING: 'deleting',\n // Completed (after API call)\n CREATED: 'created',\n UPDATED: 'updated',\n PATCHED: 'patched',\n DELETED: 'deleted',\n // Error/Complete\n ERROR: 'error',\n COMPLETE: 'complete',\n // Bulk operations\n BULK_CREATED: 'bulkCreated',\n BULK_DELETED: 'bulkDeleted',\n} as const;\n\n/**\n * Validation event actions\n */\nexport const ValidationEventAction = {\n STARTED: 'started',\n SUCCESS: 'success',\n FAILED: 'failed',\n} as const;\n\n/**\n * Sanitization event actions\n */\nexport const SanitizationEventAction = {\n STARTED: 'started',\n SUCCESS: 'success',\n FAILED: 'failed',\n} as const;\n\n/**\n * API event actions\n */\nexport const ApiEventAction = {\n REQUEST_START: 'requestStart',\n REQUEST_SUCCESS: 'requestSuccess',\n REQUEST_ERROR: 'requestError',\n RETRY: 'retry',\n TIMEOUT: 'timeout',\n} as const;\n\n/**\n * Cache event actions\n */\nexport const CacheEventAction = {\n HIT: 'hit',\n MISS: 'miss',\n SET: 'set',\n DELETE: 'delete',\n CLEAR: 'clear',\n EXPIRED: 'expired',\n ERROR: 'error',\n} as const;\n\n/**\n * Auth event actions\n */\nexport const AuthEventAction = {\n LOGIN: 'login',\n LOGOUT: 'logout',\n TOKEN_REFRESH: 'tokenRefresh',\n SESSION_EXPIRED: 'sessionExpired',\n UNAUTHORIZED: 'unauthorized',\n} as const;\n\n/**\n * Database event actions\n */\nexport const DatabaseEventAction = {\n CONNECTED: 'connected',\n DISCONNECTED: 'disconnected',\n QUERY: 'query',\n ERROR: 'error',\n TRANSACTION_START: 'transactionStart',\n TRANSACTION_COMMIT: 'transactionCommit',\n TRANSACTION_ROLLBACK: 'transactionRollback',\n} as const;\n\n/**\n * Feature flag event actions\n */\nexport const FeatureFlagEventAction = {\n CHANGED: 'changed',\n EVALUATED: 'evaluated',\n REFRESHED: 'refreshed',\n} as const;\n\n/**\n * Store event actions\n */\nexport const StoreEventAction = {\n UPDATED: 'updated',\n RESET: 'reset',\n HYDRATED: 'hydrated',\n} as const;\n\n/**\n * Storage event actions (file uploads, downloads, deletions)\n */\nexport const StorageEventAction = {\n UPLOADED: 'uploaded',\n DOWNLOADED: 'downloaded',\n DELETED: 'deleted',\n ERROR: 'error',\n HEALTH_CHECK: 'healthCheck',\n} as const;\n\n/**\n * Notification event actions (email, sms, push)\n */\nexport const NotificationEventAction = {\n SENT: 'sent',\n FAILED: 'failed',\n DELIVERED: 'delivered',\n OPENED: 'opened',\n CLICKED: 'clicked',\n ERROR: 'error',\n HEALTH_CHECK: 'healthCheck',\n} as const;\n\n// ─────────────────────────────────────────────────────────────────\n// Full Event Types (scope:action constants)\n// ─────────────────────────────────────────────────────────────────\n\n/**\n * All core event type constants\n *\n * @example\n * ```typescript\n * CoreEventManager.emit(CORE_EVENTS.ENTITY.CREATED, { entity, storeState });\n * CoreEventManager.on(CORE_EVENTS.API.REQUEST_ERROR, handleApiError);\n * ```\n */\nexport const CORE_EVENTS = {\n SYSTEM: {\n INITIALIZED: `${CoreEventScope.SYSTEM}:${SystemEventAction.INITIALIZED}`,\n READY: `${CoreEventScope.SYSTEM}:${SystemEventAction.READY}`,\n SHUTDOWN: `${CoreEventScope.SYSTEM}:${SystemEventAction.SHUTDOWN}`,\n ERROR: `${CoreEventScope.SYSTEM}:${SystemEventAction.ERROR}`,\n WARNING: `${CoreEventScope.SYSTEM}:${SystemEventAction.WARNING}`,\n },\n ENTITY: {\n CREATING: `${CoreEventScope.ENTITY}:${EntityEventAction.CREATING}`,\n UPDATING: `${CoreEventScope.ENTITY}:${EntityEventAction.UPDATING}`,\n PATCHING: `${CoreEventScope.ENTITY}:${EntityEventAction.PATCHING}`,\n DELETING: `${CoreEventScope.ENTITY}:${EntityEventAction.DELETING}`,\n CREATED: `${CoreEventScope.ENTITY}:${EntityEventAction.CREATED}`,\n UPDATED: `${CoreEventScope.ENTITY}:${EntityEventAction.UPDATED}`,\n PATCHED: `${CoreEventScope.ENTITY}:${EntityEventAction.PATCHED}`,\n DELETED: `${CoreEventScope.ENTITY}:${EntityEventAction.DELETED}`,\n ERROR: `${CoreEventScope.ENTITY}:${EntityEventAction.ERROR}`,\n COMPLETE: `${CoreEventScope.ENTITY}:${EntityEventAction.COMPLETE}`,\n BULK_CREATED: `${CoreEventScope.ENTITY}:${EntityEventAction.BULK_CREATED}`,\n BULK_DELETED: `${CoreEventScope.ENTITY}:${EntityEventAction.BULK_DELETED}`,\n },\n VALIDATION: {\n STARTED: `${CoreEventScope.VALIDATION}:${ValidationEventAction.STARTED}`,\n SUCCESS: `${CoreEventScope.VALIDATION}:${ValidationEventAction.SUCCESS}`,\n FAILED: `${CoreEventScope.VALIDATION}:${ValidationEventAction.FAILED}`,\n },\n SANITIZATION: {\n STARTED: `${CoreEventScope.SANITIZATION}:${SanitizationEventAction.STARTED}`,\n SUCCESS: `${CoreEventScope.SANITIZATION}:${SanitizationEventAction.SUCCESS}`,\n FAILED: `${CoreEventScope.SANITIZATION}:${SanitizationEventAction.FAILED}`,\n },\n API: {\n REQUEST_START: `${CoreEventScope.API}:${ApiEventAction.REQUEST_START}`,\n REQUEST_SUCCESS: `${CoreEventScope.API}:${ApiEventAction.REQUEST_SUCCESS}`,\n REQUEST_ERROR: `${CoreEventScope.API}:${ApiEventAction.REQUEST_ERROR}`,\n RETRY: `${CoreEventScope.API}:${ApiEventAction.RETRY}`,\n TIMEOUT: `${CoreEventScope.API}:${ApiEventAction.TIMEOUT}`,\n },\n CACHE: {\n HIT: `${CoreEventScope.CACHE}:${CacheEventAction.HIT}`,\n MISS: `${CoreEventScope.CACHE}:${CacheEventAction.MISS}`,\n SET: `${CoreEventScope.CACHE}:${CacheEventAction.SET}`,\n DELETE: `${CoreEventScope.CACHE}:${CacheEventAction.DELETE}`,\n CLEAR: `${CoreEventScope.CACHE}:${CacheEventAction.CLEAR}`,\n EXPIRED: `${CoreEventScope.CACHE}:${CacheEventAction.EXPIRED}`,\n ERROR: `${CoreEventScope.CACHE}:${CacheEventAction.ERROR}`,\n },\n AUTH: {\n LOGIN: `${CoreEventScope.AUTH}:${AuthEventAction.LOGIN}`,\n LOGOUT: `${CoreEventScope.AUTH}:${AuthEventAction.LOGOUT}`,\n TOKEN_REFRESH: `${CoreEventScope.AUTH}:${AuthEventAction.TOKEN_REFRESH}`,\n SESSION_EXPIRED: `${CoreEventScope.AUTH}:${AuthEventAction.SESSION_EXPIRED}`,\n UNAUTHORIZED: `${CoreEventScope.AUTH}:${AuthEventAction.UNAUTHORIZED}`,\n },\n DATABASE: {\n CONNECTED: `${CoreEventScope.DATABASE}:${DatabaseEventAction.CONNECTED}`,\n DISCONNECTED: `${CoreEventScope.DATABASE}:${DatabaseEventAction.DISCONNECTED}`,\n QUERY: `${CoreEventScope.DATABASE}:${DatabaseEventAction.QUERY}`,\n ERROR: `${CoreEventScope.DATABASE}:${DatabaseEventAction.ERROR}`,\n TRANSACTION_START: `${CoreEventScope.DATABASE}:${DatabaseEventAction.TRANSACTION_START}`,\n TRANSACTION_COMMIT: `${CoreEventScope.DATABASE}:${DatabaseEventAction.TRANSACTION_COMMIT}`,\n TRANSACTION_ROLLBACK: `${CoreEventScope.DATABASE}:${DatabaseEventAction.TRANSACTION_ROLLBACK}`,\n },\n FEATURE_FLAG: {\n CHANGED: `${CoreEventScope.FEATURE_FLAG}:${FeatureFlagEventAction.CHANGED}`,\n EVALUATED: `${CoreEventScope.FEATURE_FLAG}:${FeatureFlagEventAction.EVALUATED}`,\n REFRESHED: `${CoreEventScope.FEATURE_FLAG}:${FeatureFlagEventAction.REFRESHED}`,\n },\n STORE: {\n UPDATED: `${CoreEventScope.STORE}:${StoreEventAction.UPDATED}`,\n RESET: `${CoreEventScope.STORE}:${StoreEventAction.RESET}`,\n HYDRATED: `${CoreEventScope.STORE}:${StoreEventAction.HYDRATED}`,\n },\n STORAGE: {\n UPLOADED: `${CoreEventScope.STORAGE}:${StorageEventAction.UPLOADED}`,\n DOWNLOADED: `${CoreEventScope.STORAGE}:${StorageEventAction.DOWNLOADED}`,\n DELETED: `${CoreEventScope.STORAGE}:${StorageEventAction.DELETED}`,\n ERROR: `${CoreEventScope.STORAGE}:${StorageEventAction.ERROR}`,\n HEALTH_CHECK: `${CoreEventScope.STORAGE}:${StorageEventAction.HEALTH_CHECK}`,\n },\n NOTIFICATION: {\n SENT: `${CoreEventScope.NOTIFICATION}:${NotificationEventAction.SENT}`,\n FAILED: `${CoreEventScope.NOTIFICATION}:${NotificationEventAction.FAILED}`,\n DELIVERED: `${CoreEventScope.NOTIFICATION}:${NotificationEventAction.DELIVERED}`,\n OPENED: `${CoreEventScope.NOTIFICATION}:${NotificationEventAction.OPENED}`,\n CLICKED: `${CoreEventScope.NOTIFICATION}:${NotificationEventAction.CLICKED}`,\n ERROR: `${CoreEventScope.NOTIFICATION}:${NotificationEventAction.ERROR}`,\n HEALTH_CHECK: `${CoreEventScope.NOTIFICATION}:${NotificationEventAction.HEALTH_CHECK}`,\n },\n} as const;\n\n// ─────────────────────────────────────────────────────────────────\n// Event Type Union\n// ─────────────────────────────────────────────────────────────────\n\n/** All system event types */\nexport type SystemEventType = (typeof CORE_EVENTS.SYSTEM)[keyof typeof CORE_EVENTS.SYSTEM];\n\n/** All entity event types */\nexport type EntityEventType = (typeof CORE_EVENTS.ENTITY)[keyof typeof CORE_EVENTS.ENTITY];\n\n/** All validation event types */\nexport type ValidationEventType =\n (typeof CORE_EVENTS.VALIDATION)[keyof typeof CORE_EVENTS.VALIDATION];\n\n/** All sanitization event types */\nexport type SanitizationEventType =\n (typeof CORE_EVENTS.SANITIZATION)[keyof typeof CORE_EVENTS.SANITIZATION];\n\n/** All API event types */\nexport type ApiEventType = (typeof CORE_EVENTS.API)[keyof typeof CORE_EVENTS.API];\n\n/** All cache event types */\nexport type CacheEventType = (typeof CORE_EVENTS.CACHE)[keyof typeof CORE_EVENTS.CACHE];\n\n/** All auth event types */\nexport type AuthEventType = (typeof CORE_EVENTS.AUTH)[keyof typeof CORE_EVENTS.AUTH];\n\n/** All database event types */\nexport type DatabaseEventType = (typeof CORE_EVENTS.DATABASE)[keyof typeof CORE_EVENTS.DATABASE];\n\n/** All feature flag event types */\nexport type FeatureFlagEventType =\n (typeof CORE_EVENTS.FEATURE_FLAG)[keyof typeof CORE_EVENTS.FEATURE_FLAG];\n\n/** All store event types */\nexport type StoreEventType = (typeof CORE_EVENTS.STORE)[keyof typeof CORE_EVENTS.STORE];\n\n/**\n * Union of all core event types\n */\nexport type CoreEventType =\n | SystemEventType\n | EntityEventType\n | ValidationEventType\n | SanitizationEventType\n | ApiEventType\n | CacheEventType\n | AuthEventType\n | DatabaseEventType\n | FeatureFlagEventType\n | StoreEventType;\n","/**\n * Files Domain Enums and Constants\n *\n * Runtime constants for files/media operations.\n */\n\n// ─────────────────────────────────────────────────────────────────────────────\n// System Constants\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * System user UUID for uploads without user context.\n * Used for:\n * - Generated documents (no auth context)\n * - System-initiated uploads\n * - Background jobs\n *\n * Must be a valid UUID as media.user_id has FK constraint to users table.\n * This UUID should exist in the users table or FK checks should be disabled.\n */\nexport const SYSTEM_USER_ID = '00000000-0000-0000-0000-000000000000';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// File Type Constants\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * File types supported by the DB ENUM\n * Use these when creating records - 'OTHER' is NOT in the DB ENUM\n */\nexport const FILE_TYPES = {\n IMAGE: 'IMAGE',\n VIDEO: 'VIDEO',\n AUDIO: 'AUDIO',\n DOCUMENT: 'DOCUMENT',\n} as const;\n\nexport type FileTypeValue = (typeof FILE_TYPES)[keyof typeof FILE_TYPES];\n\n/**\n * Access levels for files\n */\nexport const FILE_ACCESS_LEVELS = {\n PUBLIC: 'public',\n PRIVATE: 'private',\n PROTECTED: 'protected',\n} as const;\n\nexport type FileAccessLevelValue = (typeof FILE_ACCESS_LEVELS)[keyof typeof FILE_ACCESS_LEVELS];\n","/**\n * Files Domain Streaming Types\n *\n * Stream message types specific to the files domain.\n * These extend from existing storage types and are merged into global streaming types.\n *\n * Architecture:\n * - FilesStreamProgressData extends UploadProgressEvent (from storage)\n * - Constants (FILES_STREAM_*) are domain-specific\n * - Global types in @plyaz/types/core/events/streaming merge these with other domains\n */\n\nimport type { UploadProgressEvent } from '../../../storage';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Files Stream Message Types (Constants)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Message type categories specific to files domain.\n * These get merged into global STREAM_MESSAGE_TYPE.\n */\nexport const FILES_STREAM_MESSAGE_TYPE = {\n PROGRESS: 'progress',\n STATUS: 'status',\n ERROR: 'error',\n} as const;\n\nexport type FilesStreamMessageType =\n (typeof FILES_STREAM_MESSAGE_TYPE)[keyof typeof FILES_STREAM_MESSAGE_TYPE];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Files Stream Message Subtypes (Constants)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Stream message subtypes for files domain.\n * Defines the specific operations that can be streamed.\n */\nexport const FILES_STREAM_SUBTYPE = {\n UPLOAD: 'upload',\n DOWNLOAD: 'download',\n GENERATE: 'generate',\n} as const;\n\nexport type FilesStreamSubtype = (typeof FILES_STREAM_SUBTYPE)[keyof typeof FILES_STREAM_SUBTYPE];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Files Stream Progress Status (Constants)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Progress status values for files streaming operations.\n * Aligned with storage UPLOAD_STATUS enum values.\n */\nexport const FILES_STREAM_PROGRESS_STATUS = {\n PENDING: 'pending',\n UPLOADING: 'uploading',\n DOWNLOADING: 'downloading',\n PROCESSING: 'processing',\n GENERATING: 'generating',\n COMPLETED: 'completed',\n FAILED: 'failed',\n CANCELLED: 'cancelled',\n} as const;\n\nexport type FilesStreamProgressStatus =\n (typeof FILES_STREAM_PROGRESS_STATUS)[keyof typeof FILES_STREAM_PROGRESS_STATUS];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Files Stream Event Names (Constants)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * SSE/WebSocket event names for files domain.\n * These map to the `event` field in StreamMessage.\n */\nexport const FILES_STREAM_EVENT = {\n // Upload events\n UPLOAD_PROGRESS: 'upload:progress',\n UPLOAD_COMPLETED: 'upload:completed',\n UPLOAD_FAILED: 'upload:failed',\n UPLOAD_CANCELLED: 'upload:cancelled',\n // Download events\n DOWNLOAD_PROGRESS: 'download:progress',\n DOWNLOAD_COMPLETED: 'download:completed',\n DOWNLOAD_FAILED: 'download:failed',\n DOWNLOAD_CANCELLED: 'download:cancelled',\n // Generation events\n GENERATE_PROGRESS: 'generate:progress',\n GENERATE_COMPLETED: 'generate:completed',\n GENERATE_FAILED: 'generate:failed',\n} as const;\n\nexport type FilesStreamEventName = (typeof FILES_STREAM_EVENT)[keyof typeof FILES_STREAM_EVENT];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Files Stream Channel Patterns (Constants)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Channel prefixes for files domain subscriptions.\n * Used for per-resource channels (upload:fileId, download:fileId, etc.)\n */\nexport const FILES_STREAM_CHANNEL_PREFIX = {\n UPLOAD: 'upload:',\n DOWNLOAD: 'download:',\n GENERATE: 'generate:',\n} as const;\n\nexport type FilesStreamChannelPrefix =\n (typeof FILES_STREAM_CHANNEL_PREFIX)[keyof typeof FILES_STREAM_CHANNEL_PREFIX];\n\n/**\n * Broadcast channels for files domain (user-scoped).\n * Used for subscribing to all events of a type.\n */\nexport const FILES_STREAM_BROADCAST_CHANNEL = {\n UPLOADS: 'uploads',\n DOWNLOADS: 'downloads',\n GENERATIONS: 'generations',\n} as const;\n\nexport type FilesStreamBroadcastChannel =\n (typeof FILES_STREAM_BROADCAST_CHANNEL)[keyof typeof FILES_STREAM_BROADCAST_CHANNEL];\n\n/**\n * All files stream channels (prefixes + broadcast).\n */\nexport const FILES_STREAM_CHANNEL = {\n // Prefixes (for building per-resource channels)\n PREFIX: FILES_STREAM_CHANNEL_PREFIX,\n // Broadcast channels\n BROADCAST: FILES_STREAM_BROADCAST_CHANNEL,\n} as const;\n\n/**\n * Channel patterns for files domain subscriptions.\n *\n * - `upload:{fileId}` - Per-file upload progress\n * - `download:{fileId}` - Per-file download progress\n * - `generate:{templateId}` - Per-template generation progress\n * - `uploads` - All uploads for current user\n * - `downloads` - All downloads for current user\n * - `generations` - All generations for current user\n */\nexport type FilesStreamChannel =\n | `upload:${string}`\n | `download:${string}`\n | `generate:${string}`\n | FilesStreamBroadcastChannel;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Files Stream Progress Data\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Base progress data extending storage's UploadProgressEvent.\n * Used for upload progress streaming.\n */\nexport interface FilesUploadStreamProgress extends UploadProgressEvent {\n /** Current status */\n status: FilesStreamProgressStatus;\n /** Error message (if status is 'failed') */\n error?: string;\n}\n\n/**\n * Download progress data.\n * Similar to upload but for downloads.\n */\nexport interface FilesDownloadStreamProgress {\n /** File ID */\n fileId: string;\n /** Filename */\n filename: string;\n /** Bytes downloaded */\n loaded: number;\n /** Total bytes */\n total: number;\n /** Progress percentage (0-100) */\n percentage: number;\n /** Download speed in bytes/second */\n speed?: number;\n /** Estimated time remaining in seconds */\n estimatedTimeRemaining?: number;\n /** Current status */\n status: FilesStreamProgressStatus;\n /** Error message (if status is 'failed') */\n error?: string;\n}\n\n/**\n * Document generation progress data.\n */\nexport interface FilesGenerateStreamProgress {\n /** Template ID being generated */\n templateId: string;\n /** Progress percentage (0-100) */\n percentage: number;\n /** Current status */\n status: FilesStreamProgressStatus;\n /** Error message (if status is 'failed') */\n error?: string;\n /** Output filename (when completed) */\n outputFilename?: string;\n /** Output file ID (when completed) */\n outputFileId?: string;\n}\n\n/**\n * Union of all files stream progress data types.\n * Use this for generic handling of any files progress message.\n */\nexport type FilesStreamProgressData =\n | FilesUploadStreamProgress\n | FilesDownloadStreamProgress\n | FilesGenerateStreamProgress;\n","/**\n * Files Domain Schemas\n *\n * Zod validation schemas for files/media operations.\n * Single source of truth - types are inferred from schemas.\n *\n * Used by:\n * - FilesValidator in @plyaz/core for validation\n * - FilesRepository for type safety\n * - FilesMapper for transformations\n */\n\nimport { z } from 'zod';\nimport { SYSTEM_USER_ID } from './enums';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// File Type Schemas\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Media type enum - matches media.type DB ENUM\n * Note: DB only has IMAGE, VIDEO, AUDIO, DOCUMENT (no OTHER)\n * Use this for DB operations and validation\n */\nexport const MediaTypeSchema = z.enum(['IMAGE', 'VIDEO', 'AUDIO', 'DOCUMENT']);\nexport type MediaType = z.infer<typeof MediaTypeSchema>;\n\n/**\n * File type enum - for domain layer (includes OTHER for unknown types)\n * Use this for domain entities and frontend display.\n * Note: OTHER is not in the DB ENUM, mapper should convert to DOCUMENT for DB ops.\n */\nexport const FileTypeSchema = z.enum(['IMAGE', 'VIDEO', 'DOCUMENT', 'AUDIO', 'OTHER']);\nexport type FileType = z.infer<typeof FileTypeSchema>;\n\n/**\n * Access level schema - matches DB constraints\n */\nexport const MediaAccessLevelSchema = z.enum(['public', 'private', 'protected']).nullable();\nexport type MediaAccessLevel = z.infer<typeof MediaAccessLevelSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Database Row Schema (Full media table row)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Full media database row schema\n * Includes all fields including auto-generated ones\n * Used by FilesRepository for query results\n */\nexport const FilesDatabaseRowSchema = z.object({\n // Auto-generated fields\n id: z.string().uuid(),\n created_at: z.string(),\n updated_at: z.string(),\n deleted_at: z.string().nullable(),\n\n // Required fields\n user_id: z.string().uuid(),\n type: z.string(), // String in DB, validated as MediaType on create\n filename: z.string(),\n original_filename: z.string(),\n mime_type: z.string(),\n file_size: z.union([z.bigint(), z.number()]),\n storage_path: z.string(),\n\n // Optional fields\n cdn_url: z.string().nullable(),\n width: z.number().nullable(),\n height: z.number().nullable(),\n duration: z.number().nullable(),\n is_virus_scanned: z.boolean(),\n virus_scan_result: z.string().nullable(),\n metadata: z.record(z.string(), z.unknown()).nullable(),\n variants: z.record(z.string(), z.unknown()).nullable(),\n entity_type: z.string().nullable(),\n entity_id: z.string().nullable(),\n access_level: z.string().nullable(),\n bucket: z.string().nullable(),\n});\n\n/**\n * Database row type - inferred from schema\n * Used by FilesRepository, mapped to FilesEntity by FilesMapper\n */\nexport type FilesDatabaseRow = z.infer<typeof FilesDatabaseRowSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Create Media Schema (for DB insert validation)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Schema for creating a file/media record in the database\n * Validates data before repository.create()\n *\n * Auto-generated fields (id, created_at, updated_at, deleted_at)\n * are handled by the repository.\n */\nexport const CreateFilesSchema = z.object({\n // Required fields with defaults for optional scenarios\n user_id: z.string().uuid().default(SYSTEM_USER_ID),\n type: MediaTypeSchema.default('DOCUMENT'),\n filename: z.string().min(1, 'Filename is required'),\n original_filename: z.string().min(1, 'Original filename is required'),\n mime_type: z.string().min(1, 'MIME type is required'),\n file_size: z\n .union([z.bigint(), z.number()])\n .refine(val => Number(val) >= 0, 'File size must be non-negative'),\n storage_path: z.string().min(1, 'Storage path is required'),\n\n // Optional fields with defaults\n cdn_url: z.string().url().nullable().default(null),\n width: z.number().positive().nullable().default(null),\n height: z.number().positive().nullable().default(null),\n duration: z.number().positive().nullable().default(null),\n is_virus_scanned: z.boolean().default(false),\n virus_scan_result: z.string().nullable().default(null),\n metadata: z.record(z.string(), z.unknown()).nullable().default(null),\n variants: z.record(z.string(), z.unknown()).nullable().default(null),\n entity_type: z.string().nullable().default(null),\n entity_id: z.string().nullable().default(null),\n access_level: MediaAccessLevelSchema.default(null),\n bucket: z.string().nullable().default(null),\n});\n\n/** Input type for creating files (before defaults applied) */\nexport type FilesCreateInput = z.input<typeof CreateFilesSchema>;\n/** Output type for creating files (after defaults applied) */\nexport type FilesCreateOutput = z.output<typeof CreateFilesSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Patch Files Schema (for updates)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Schema for partial update of a file/media record\n * All fields optional\n */\nexport const PatchFilesSchema = CreateFilesSchema.partial();\n\nexport type FilesPatchInput = z.input<typeof PatchFilesSchema>;\nexport type FilesPatchOutput = z.output<typeof PatchFilesSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Media Variants Schema\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Full media_variants database row schema\n */\nexport const MediaVariantsDatabaseRowSchema = z.object({\n id: z.string().uuid(),\n media_id: z.string().uuid(),\n variant_name: z.string(),\n file_path: z.string(),\n cdn_url: z.string().nullable(),\n width: z.number().nullable(),\n height: z.number().nullable(),\n file_size: z.number().nullable(),\n created_at: z.string(),\n});\n\nexport type MediaVariantsDatabaseRow = z.infer<typeof MediaVariantsDatabaseRowSchema>;\n\n/**\n * Schema for creating a media variant record\n */\nexport const CreateMediaVariantSchema = MediaVariantsDatabaseRowSchema.omit({\n id: true,\n created_at: true,\n});\n\nexport type MediaVariantsCreateInput = z.input<typeof CreateMediaVariantSchema>;\n","/**\n * Streaming Types\n *\n * Global types for real-time event streaming via SSE/WebSocket.\n *\n * Architecture:\n * - Domain services define their own streaming constants (e.g., FILES_STREAM_SUBTYPE)\n * - Global constants here MERGE domain-specific constants\n * - System constants (heartbeat, connection) are defined here as base\n *\n * To add a new domain:\n * 1. Create streaming constants in the domain folder (e.g., /domain/payments/streaming.ts)\n * 2. Import domain constants here\n * 3. Merge into global constants (STREAM_MESSAGE_TYPE, STREAM_SUBTYPE, etc.)\n */\n\nimport {\n FILES_STREAM_MESSAGE_TYPE,\n FILES_STREAM_SUBTYPE,\n FILES_STREAM_PROGRESS_STATUS,\n FILES_STREAM_EVENT,\n FILES_STREAM_CHANNEL_PREFIX,\n FILES_STREAM_BROADCAST_CHANNEL,\n} from '../../domain/files';\n\nimport type {\n FilesStreamMessageType,\n FilesStreamSubtype,\n FilesStreamProgressStatus,\n FilesUploadStreamProgress,\n FilesDownloadStreamProgress,\n FilesGenerateStreamProgress,\n FilesStreamProgressData,\n FilesStreamChannel,\n} from '../../domain/files';\nimport type { CorePlyazStreamConfig } from '../../frontend';\nimport type { RootStoreHook } from '../../../store';\nimport type { PackageErrorLike } from '../../../errors';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Transport Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Supported transport types for streaming connections\n */\nexport const STREAM_TRANSPORT = {\n SSE: 'sse',\n WEBSOCKET: 'websocket',\n} as const;\n\nexport type StreamTransportType = (typeof STREAM_TRANSPORT)[keyof typeof STREAM_TRANSPORT];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// System Message Types (Base - non-domain)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * System-level message type categories.\n * Used for connection lifecycle and system-wide events.\n */\nexport const SYSTEM_STREAM_MESSAGE_TYPE = {\n SYSTEM: 'system',\n NOTIFICATION: 'notification',\n DATA: 'data',\n} as const;\n\nexport type SystemStreamMessageType =\n (typeof SYSTEM_STREAM_MESSAGE_TYPE)[keyof typeof SYSTEM_STREAM_MESSAGE_TYPE];\n\n/**\n * System-level message subtypes (not domain-specific).\n * Used for connection lifecycle and system events.\n */\nexport const SYSTEM_STREAM_SUBTYPE = {\n HEARTBEAT: 'heartbeat',\n CONNECTED: 'connected',\n DISCONNECTED: 'disconnected',\n RECONNECTING: 'reconnecting',\n} as const;\n\nexport type SystemStreamSubtype =\n (typeof SYSTEM_STREAM_SUBTYPE)[keyof typeof SYSTEM_STREAM_SUBTYPE];\n\n/**\n * System channel for connection-level events.\n */\nexport const SYSTEM_STREAM_CHANNEL = {\n SYSTEM: 'system',\n} as const;\n\nexport type SystemStreamChannel =\n (typeof SYSTEM_STREAM_CHANNEL)[keyof typeof SYSTEM_STREAM_CHANNEL];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Message Types (Merged from all domains)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * All message type categories.\n * Merged from system + all domain-specific types.\n *\n * To add a new domain's message types:\n * 1. Define `{DOMAIN}_STREAM_MESSAGE_TYPE` in the domain's streaming module\n * 2. Import and spread into this object\n */\nexport const STREAM_MESSAGE_TYPE = {\n ...SYSTEM_STREAM_MESSAGE_TYPE,\n ...FILES_STREAM_MESSAGE_TYPE,\n} as const;\n\nexport type StreamMessageType = SystemStreamMessageType | FilesStreamMessageType;\n\n/**\n * All message subtypes.\n * Merged from system + all domain-specific subtypes.\n *\n * To add a new domain's subtypes:\n * 1. Define `{DOMAIN}_STREAM_SUBTYPE` in the domain's streaming module\n * 2. Import and spread into this object\n */\nexport const STREAM_SUBTYPE = {\n ...SYSTEM_STREAM_SUBTYPE,\n ...FILES_STREAM_SUBTYPE,\n} as const;\n\nexport type StreamMessageSubtype = SystemStreamSubtype | FilesStreamSubtype;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Message Scope (Domain Identifier)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Message scope identifies the domain that owns the message.\n * Used for routing messages to the correct domain store.\n *\n * To add a new domain:\n * 1. Add the domain name to this constant\n * 2. Create domain streaming types in the domain's types folder\n */\nexport const STREAM_SCOPE = {\n FILES: 'files',\n SYSTEM: 'system',\n} as const;\n\nexport type StreamMessageScope = (typeof STREAM_SCOPE)[keyof typeof STREAM_SCOPE];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Stream Events (Merged from all domains)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * System stream events.\n */\nexport const SYSTEM_STREAM_EVENT = {\n CONNECTED: 'connected',\n DISCONNECTED: 'disconnected',\n HEARTBEAT: 'heartbeat',\n ERROR: 'error',\n} as const;\n\n/**\n * All stream events.\n * Merged from system + all domain-specific events.\n */\nexport const STREAM_EVENT = {\n ...SYSTEM_STREAM_EVENT,\n ...FILES_STREAM_EVENT,\n} as const;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Channel Constants (Merged from all domains)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * All channel prefixes (for subscription matching).\n */\nexport const STREAM_CHANNEL_PREFIX = {\n ...FILES_STREAM_CHANNEL_PREFIX,\n} as const;\n\n/**\n * All broadcast channels (user-scoped).\n */\nexport const STREAM_BROADCAST_CHANNEL = {\n ...SYSTEM_STREAM_CHANNEL,\n ...FILES_STREAM_BROADCAST_CHANNEL,\n} as const;\n\n/**\n * All possible channel patterns.\n * Union of system channel + all domain-specific channels.\n */\nexport type StreamChannel = SystemStreamChannel | FilesStreamChannel;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Connection Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Represents an active streaming connection\n */\nexport interface StreamConnection {\n /** Unique connection identifier */\n id: string;\n /** Authenticated user ID (undefined for anonymous) */\n userId?: string;\n /** Transport type (SSE or WebSocket) */\n transport: StreamTransportType;\n /** Subscribed channels */\n channels: Set<string>;\n /** Connection creation timestamp */\n createdAt: Date;\n /** Last activity timestamp (for cleanup) */\n lastActivity: Date;\n /** Additional connection metadata */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Serializable version of StreamConnection for storage/transmission\n */\nexport interface StreamConnectionInfo {\n id: string;\n userId?: string;\n transport: StreamTransportType;\n channels: string[];\n createdAt: string;\n lastActivity: string;\n metadata?: Record<string, unknown>;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Stream Message\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Message sent to streaming clients.\n *\n * @typeParam T - Payload data type (defaults to unknown)\n */\nexport interface StreamMessage<T = unknown> {\n /** Event name (e.g., 'upload:progress', 'connected', 'heartbeat') */\n event: string;\n /** Event payload data */\n data: T;\n /** Optional message ID (for SSE reconnection) */\n id?: string;\n /** Optional retry interval in ms (for SSE) */\n retry?: number;\n /** Channel this message was sent to */\n channel?: string;\n\n // ─────────────────────────────────────────────────────────────────────────\n // Metadata for filtering/routing\n // ─────────────────────────────────────────────────────────────────────────\n\n /** Message type category */\n type?: StreamMessageType;\n /** Message subtype for granular filtering */\n subtype?: StreamMessageSubtype;\n /** Domain scope for routing to domain stores */\n scope?: StreamMessageScope;\n /** Transport used (sse or websocket) */\n transport?: StreamTransportType;\n /** Timestamp when message was created */\n timestamp?: number;\n /** Correlation ID for request tracing */\n correlationId?: string;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Progress Types (Re-export from domains)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Progress data union type.\n * Currently files-only, will expand as domains add streaming support.\n */\nexport type StreamProgressData = FilesStreamProgressData;\n\n/**\n * Progress status union type.\n * Currently files-only, will expand as domains add streaming support.\n */\nexport type StreamProgressStatus = FilesStreamProgressStatus;\n\n/**\n * All progress status constants.\n */\nexport const STREAM_PROGRESS_STATUS = {\n ...FILES_STREAM_PROGRESS_STATUS,\n} as const;\n\n// Re-export specific progress types for convenience\nexport type { FilesUploadStreamProgress, FilesDownloadStreamProgress, FilesGenerateStreamProgress };\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Channel Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Channel subscription record\n */\nexport interface ChannelSubscription {\n /** Channel name */\n channel: string;\n /** Connection ID */\n connectionId: string;\n /** Subscription timestamp */\n subscribedAt: Date;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Auth Adapter Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Result of authentication attempt\n */\nexport interface StreamAuthResult {\n /** Whether authentication succeeded */\n authenticated: boolean;\n /** User ID (if authenticated) */\n userId?: string;\n /** Allowed channel patterns (e.g., ['upload:', 'generate:']) */\n scopes?: string[];\n /** Additional auth metadata */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Base configuration for auth adapters\n */\nexport interface StreamAuthAdapterConfig {\n /** Adapter name for logging */\n name: string;\n /** Whether adapter is enabled */\n enabled?: boolean;\n}\n\n/**\n * Configuration for token-based auth adapter\n */\nexport interface TokenAuthAdapterConfig extends StreamAuthAdapterConfig {\n /** Token verification function */\n verifyToken: (token: string) => Promise<{\n valid: boolean;\n userId?: string;\n scopes?: string[];\n }>;\n /** Header name for token (default: 'Authorization') */\n headerName?: string;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Transport Adapter Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Base configuration for transport adapters\n */\nexport interface StreamTransportAdapterConfig {\n /** Adapter name for logging */\n name: string;\n /** Heartbeat interval in ms (default: 30000) */\n heartbeatInterval?: number;\n /** Maximum concurrent connections (default: 1000) */\n maxConnections?: number;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Manager Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Configuration for StreamBroadcaster\n */\nexport interface StreamBroadcasterConfig {\n /** Heartbeat interval in ms */\n heartbeatInterval?: number;\n /** Connection timeout in ms (for cleanup) */\n connectionTimeout?: number;\n /** Maximum stale connection age in ms before cleanup */\n maxStaleAge?: number;\n}\n\n/**\n * Statistics for stream manager\n */\nexport interface StreamManagerStats {\n /** Total active connections */\n totalConnections: number;\n /** Connections by transport type */\n connectionsByTransport: Record<StreamTransportType, number>;\n /** Total channel subscriptions */\n totalSubscriptions: number;\n /** Unique channels with subscribers */\n activeChannels: number;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Hook Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Return type for useStreamConnection hook\n *\n * Note: Errors are added to the global error store automatically.\n * Use useErrorStore or error hooks to access connection errors.\n */\nexport interface UseStreamConnectionResult {\n /** Whether connection is established */\n connected: boolean;\n /** Reconnect function */\n reconnect: () => void;\n /** Disconnect function */\n disconnect: () => void;\n}\n\n/**\n * Options for useStreamConnection hook\n *\n * @template T - The expected message data type (defaults to unknown)\n *\n * @example\n * ```typescript\n * // Without generic (message.data is unknown)\n * useStreamConnection({\n * channels: ['uploads'],\n * onMessage: (message) => { ... }\n * });\n *\n * // With generic (message.data is properly typed)\n * useStreamConnection<FilesUploadStreamProgress>({\n * channels: [`upload:${fileId}`],\n * onMessage: (message) => {\n * // message.data is FilesUploadStreamProgress\n * console.log(message.data.percentage);\n * }\n * });\n * ```\n */\nexport interface UseStreamConnectionOptions<T = unknown> {\n /** Channels to subscribe to */\n channels: StreamChannel[];\n /** API endpoint URL (default: '/api/events/stream') */\n endpoint?: string;\n /** Whether to auto-connect on mount (default: true) */\n autoConnect?: boolean;\n /** Reconnect on error (default: true) */\n autoReconnect?: boolean;\n /** Max reconnect attempts (default: 5) */\n maxReconnectAttempts?: number;\n /** Reconnect delay in ms (default: 1000) */\n reconnectDelay?: number;\n /** Callback when connected */\n onConnect?: () => void;\n /** Callback when disconnected */\n onDisconnect?: () => void;\n /** Callback on error */\n onError?: (error: PackageErrorLike) => void;\n /** Callback on message received (message.data is typed as T) */\n onMessage?: (message: StreamMessage<T>) => void;\n\n // ─────────────────────────────────────────────────────────────────────────\n // Response Parsing Options\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Auto-unwrap SuccessResponse format ({ success, data, ... } → data).\n * Default: true (for Plyaz internal services).\n * Set to false for 3rd party services that don't use this format.\n */\n unwrapSuccessResponse?: boolean;\n\n /**\n * Custom response parser for full control over data extraction.\n * When provided, overrides `unwrapSuccessResponse`.\n * Useful for 3rd party services with different response formats.\n *\n * @example\n * ```typescript\n * // 3rd party service returns { result: { ... } }\n * responseParser: (raw) => (raw as { result: T }).result\n * ```\n */\n responseParser?: (rawData: unknown) => T;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// useStreamManager Hook Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Options for useStreamManager hook\n *\n * Used by PlyazProvider to manage SSE connection lifecycle.\n */\nexport interface UseStreamManagerOptions {\n /** Streaming configuration (required when enabled) */\n config?: CorePlyazStreamConfig;\n /** Root store hook for accessing stream store */\n store: RootStoreHook;\n /** Enable verbose logging */\n verbose?: boolean;\n /** Whether streaming is enabled (default: false) */\n enabled?: boolean;\n}\n\n/**\n * Result type for useStreamManager hook\n *\n * Note: Errors are added to the global error store automatically.\n * Use useErrorStore or error hooks to access connection errors.\n */\nexport interface UseStreamManagerResult {\n /** Whether connected to SSE */\n connected: boolean;\n /** Subscribed channels */\n channels: StreamChannel[];\n /** Whether streaming is enabled */\n enabled: boolean;\n}\n","/**\n * Service Keys Constants\n *\n * Centralized service key constants for service registry and dependency injection.\n * Use these constants instead of string literals for type safety and consistency.\n *\n * @example\n * ```typescript\n * import { SERVICE_KEYS } from '@plyaz/types/core/services';\n *\n * class MyService {\n * static readonly serviceKey = SERVICE_KEYS.EXAMPLE;\n * }\n *\n * // Use in service registry\n * const service = ServiceRegistry.get(SERVICE_KEYS.EXAMPLE);\n * ```\n */\n\n/**\n * Keys for all available domain services .\n * These keys are used for service registration and lookup in the ServiceRegistry.\n */\nexport const SERVICE_KEYS = {\n /** Example domain service (backend) */\n EXAMPLE: 'example',\n /** Example domain service (frontend) */\n EXAMPLE_FRONTEND: 'example-frontend',\n /** Feature flags service */\n FEATURE_FLAGS: 'featureFlags',\n /** Campaign domain service */\n CAMPAIGN: 'campaign',\n /** Campaign frontend service */\n CAMPAIGN_FRONTEND: 'campaign-frontend',\n} as const;\n\n/**\n * Type for service keys.\n * Ensures only valid service keys can be used.\n */\nexport type ServiceKey = (typeof SERVICE_KEYS)[keyof typeof SERVICE_KEYS];\n\n/**\n * Array of all service keys for iteration.\n * Useful for validating service configurations or iterating over all services.\n */\nexport const ALL_SERVICE_KEYS = Object.values(SERVICE_KEYS) as ServiceKey[];\n","/**\n * Route Handler Types\n *\n * Framework-agnostic types for route handlers used by @plyaz/core framework adapters.\n * These types are used by Next.js, Express, and NestJS route factories.\n */\n\n// Re-export HttpMethod from api for convenience\nexport type { HttpMethod } from '../../api/config/types';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// BASE PARAM/QUERY TYPES\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Base params type - allows simple interfaces like { id: string }\n * Also supports catch-all routes where params can be string[]\n */\nexport type CoreRouteParams = { [key: string]: string | string[] | undefined };\n\n/**\n * Base query type - allows simple interfaces for query params\n */\nexport type CoreRouteQuery = { [key: string]: string | undefined };\n\n// ─────────────────────────────────────────────────────────────────────────────\n// BASE ROUTE CONTEXT\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Base route context interface (framework-agnostic)\n */\nexport interface RouteContext<TParams = CoreRouteParams, TQuery = CoreRouteQuery> {\n /** Route parameters (e.g., from /users/:id -> { id: string }) */\n params: TParams;\n /** Query string parameters */\n query: TQuery;\n /** Request headers */\n headers: Record<string, string | undefined>;\n /** HTTP method */\n method: string;\n /** Original request object (framework-specific) */\n request: unknown;\n}\n\n/**\n * Handler function signature for route operations\n */\nexport type RouteHandler<TService, TResult = unknown> = (\n service: TService,\n ctx: RouteContext\n) => Promise<TResult>;\n\n/**\n * Configuration for a route with multiple HTTP method handlers\n */\nexport interface RouteHandlerConfig<TService> {\n /** Service name (registered in ServiceRegistry) or factory function */\n service: string | (() => Promise<TService>);\n /** Handlers for each HTTP method */\n handlers: {\n GET?: RouteHandler<TService>;\n POST?: RouteHandler<TService>;\n PUT?: RouteHandler<TService>;\n PATCH?: RouteHandler<TService>;\n DELETE?: RouteHandler<TService>;\n OPTIONS?: RouteHandler<TService>;\n HEAD?: RouteHandler<TService>;\n };\n /** Custom success message template (default: 'Operation successful') */\n successMessage?: string | ((method: string) => string);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// HTTP METHOD TYPES\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Handler type definitions per HTTP method\n * Uses looser constraints to allow interfaces without index signatures\n */\nexport interface MethodHandlerTypes<\n TParams extends CoreRouteParams = CoreRouteParams,\n TQuery extends CoreRouteQuery = CoreRouteQuery,\n TBody = unknown,\n TResponse = unknown,\n> {\n params?: TParams;\n query?: TQuery;\n body?: TBody;\n response?: TResponse;\n}\n\n/**\n * Handler types map for all HTTP methods\n */\nexport interface HandlersTypeMap {\n GET?: MethodHandlerTypes;\n POST?: MethodHandlerTypes;\n PUT?: MethodHandlerTypes;\n PATCH?: MethodHandlerTypes;\n DELETE?: MethodHandlerTypes;\n OPTIONS?: MethodHandlerTypes;\n HEAD?: MethodHandlerTypes;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// DEFAULT MESSAGES\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Default success messages by HTTP method\n */\nexport const DEFAULT_SUCCESS_MESSAGES: Record<string, string> = {\n GET: 'Retrieved successfully',\n POST: 'Created successfully',\n PUT: 'Updated successfully',\n PATCH: 'Updated successfully',\n DELETE: 'Deleted successfully',\n OPTIONS: 'Options retrieved',\n HEAD: 'Head retrieved',\n};\n","/**\n * File Operation Types\n *\n * Types for file operation utilities (browser and Node.js).\n * Used by @plyaz/core and @plyaz/storage packages.\n */\n\n// ─────────────────────────────────────────────────────────────────────────────\n// FILE KEY TYPES\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Parsed file key components\n */\nexport interface ParsedFileKey {\n /** The entity type (e.g., 'user', 'organization') */\n entityType?: string;\n /** The entity ID */\n entityId?: string;\n /** The file category (e.g., 'documents', 'images') */\n category?: string;\n /** The filename with extension */\n filename?: string;\n /** The full original key */\n raw: string;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MIME TYPE MAPPING\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Common MIME types and their extensions\n */\nexport const MIME_TYPE_EXTENSIONS: Record<string, string> = {\n 'application/pdf': 'pdf',\n 'application/msword': 'doc',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'docx',\n 'application/vnd.ms-excel': 'xls',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'xlsx',\n 'application/vnd.ms-powerpoint': 'ppt',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'pptx',\n 'application/json': 'json',\n 'application/xml': 'xml',\n 'application/zip': 'zip',\n 'text/plain': 'txt',\n 'text/html': 'html',\n 'text/css': 'css',\n 'text/csv': 'csv',\n 'image/png': 'png',\n 'image/jpeg': 'jpg',\n 'image/gif': 'gif',\n 'image/webp': 'webp',\n 'image/svg+xml': 'svg',\n 'audio/mpeg': 'mp3',\n 'audio/wav': 'wav',\n 'video/mp4': 'mp4',\n 'video/webm': 'webm',\n};\n\n/**\n * File size units\n */\nexport const FILE_SIZE_UNITS = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'] as const;\n\nexport type FileSizeUnit = (typeof FILE_SIZE_UNITS)[number];\n\n/** Base multiplier for file size calculations (1 KB = 1024 bytes) */\nconst BYTES_PER_KB = 1024;\n\n/**\n * Multipliers for file size units\n */\nexport const FILE_SIZE_MULTIPLIERS: Record<string, number> = {\n B: 1,\n KB: BYTES_PER_KB,\n MB: BYTES_PER_KB * BYTES_PER_KB,\n GB: BYTES_PER_KB * BYTES_PER_KB * BYTES_PER_KB,\n TB: BYTES_PER_KB * BYTES_PER_KB * BYTES_PER_KB * BYTES_PER_KB,\n PB: BYTES_PER_KB * BYTES_PER_KB * BYTES_PER_KB * BYTES_PER_KB * BYTES_PER_KB,\n BYTES: 1,\n};\n"]}
1
+ {"version":3,"sources":["../../src/core/modules.ts","../../src/core/tables/enum.ts","../../src/core/featureFlag/enums.ts","../../src/core/featureFlag/constants.ts","../../src/core/events/enums.ts","../../src/core/domain/files/enums.ts","../../src/core/domain/files/streaming.ts","../../src/core/domain/files/schemas.ts","../../src/core/events/streaming/types.ts","../../src/core/services/keys.ts","../../src/core/frameworks/route-types.ts","../../src/core/frameworks/file-types.ts"],"names":["TABLES","SORT_DIRECTION","FEATURE_FLAG_TABLE","FEATURE_FLAG_FIELD","FEATURE_FLAG_RULE_FIELD","FEATURE_FLAG_PROVIDERS","NODE_ENVIRONMENTS","DATABASE_FIELDS","SYSTEM_USERS","EVALUATION_REASONS","FEATURE_FLAG_TYPES","z"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Core Module System Types\n *\n * Framework-agnostic module interface for @plyaz/core.\n * Modules implement this contract to integrate with Core.\n */\n\nimport type { DatabaseServiceInterface } from '../db/databaseService';\nimport type { HttpMethod } from '../api/config/types';\nimport type {\n Type,\n DynamicModule,\n ForwardReference,\n InjectionToken,\n OptionalFactoryDependency,\n ModuleMetadata,\n} from '@nestjs/common';\n\n// Re-export HttpMethod for convenience\nexport type { HttpMethod };\n\n/**\n * Core services available to modules\n */\nexport interface CoreServices {\n db: DatabaseServiceInterface;\n // api: ApiClientService;\n // cache: CacheService;\n // logger: LoggerService;\n env: Record<string, string | undefined>;\n}\n\n/**\n * Route handler context\n */\nexport interface CoreRouteContext {\n params: Record<string, string>;\n query: Record<string, string | string[]>;\n body: unknown;\n headers: Record<string, string>;\n services: CoreServices;\n}\n\n/**\n * Route handler function\n */\nexport type CoreRouteHandler = (ctx: CoreRouteContext) => Promise<{\n status?: number;\n body?: unknown;\n headers?: Record<string, string>;\n}>;\n\n/**\n * Route definition - framework agnostic\n */\nexport interface CoreRouteDefinition {\n method: HttpMethod;\n path: string;\n handler: CoreRouteHandler;\n middleware?: string[];\n description?: string;\n}\n\n/**\n * Module configuration schema (optional)\n */\nexport interface CoreModuleConfigSchema<T = unknown> {\n parse: (config: unknown) => T;\n safeParse: (config: unknown) => { success: boolean; data?: T; error?: Error };\n}\n\n/**\n * Service factory for creating module services\n */\nexport type CoreServiceFactory<T = unknown> = (\n services: CoreServices,\n config?: unknown\n) => T | Promise<T>;\n\n/**\n * Module lifecycle hooks\n */\nexport interface CoreModuleLifecycle {\n /**\n * Called when module is initialized\n * Use for setup, connections, etc.\n */\n onInit?(services: CoreServices): Promise<void>;\n\n /**\n * Called when module is being destroyed\n * Use for cleanup, closing connections, etc.\n */\n onDestroy?(): Promise<void>;\n\n /**\n * Called when Core is fully initialized (all modules loaded)\n */\n onReady?(services: CoreServices): Promise<void>;\n}\n\n/**\n * Core module definition - framework agnostic contract\n *\n * @example\n * ```typescript\n * const FeatureFlagModule: CoreModuleDefinition = {\n * name: 'featureFlags',\n * version: '1.0.0',\n * dependencies: ['db'],\n *\n * routes: [\n * { method: 'GET', path: '/flags', handler: listFlags },\n * { method: 'GET', path: '/flags/:key', handler: getFlag },\n * ],\n *\n * services: {\n * featureFlagService: (core) => new FeatureFlagService(core.db),\n * },\n *\n * async onInit(services) {\n * // Initialize feature flag provider\n * },\n * };\n * ```\n */\nexport interface CoreModuleDefinition<TConfig = unknown> extends CoreModuleLifecycle {\n /**\n * Unique module name (used for registration and access)\n */\n name: string;\n\n /**\n * Module version\n */\n version?: string;\n\n /**\n * Core services this module depends on\n */\n dependencies?: ('db' | 'api' | 'cache' | 'logger')[];\n\n /**\n * HTTP routes provided by this module\n */\n routes?: CoreRouteDefinition[];\n\n /**\n * Services exposed by this module\n */\n services?: Record<string, CoreServiceFactory>;\n\n /**\n * Configuration schema for validation\n */\n configSchema?: CoreModuleConfigSchema<TConfig>;\n\n /**\n * Default configuration\n */\n defaultConfig?: Partial<TConfig>;\n}\n\n/**\n * Registered module instance (after initialization)\n */\nexport interface CoreRegisteredModule<TConfig = unknown> {\n definition: CoreModuleDefinition<TConfig>;\n config: TConfig;\n services: Record<string, unknown>;\n initialized: boolean;\n}\n\n/**\n * Module with configuration (result of .forRoot())\n */\nexport interface CoreConfiguredModule<TConfig = unknown> {\n definition: CoreModuleDefinition<TConfig>;\n config: TConfig;\n}\n\n/**\n * Helper to create a module definition with forRoot pattern\n */\nexport interface CoreModuleFactory<TConfig = unknown> {\n /**\n * Module definition\n */\n definition: CoreModuleDefinition<TConfig>;\n\n /**\n * Configure module with options\n */\n forRoot(config?: Partial<TConfig>): CoreConfiguredModule<TConfig>;\n\n /**\n * Use module with default config\n */\n default: CoreConfiguredModule<TConfig>;\n}\n\n/**\n * Supported HTTP frameworks for server mode\n */\nexport type CoreFrameworkType =\n | 'node' // Plain Node.js http module\n | 'express' // Express.js\n | 'nestjs' // NestJS\n | 'nextjs'; // Next.js API routes (SSR/Edge)\n\n/**\n * Server configuration\n */\nexport interface CoreServerConfig {\n port: number;\n host?: string;\n framework?: CoreFrameworkType;\n prefix?: string; // API prefix like '/api/v1'\n cors?: {\n enabled: boolean;\n origins?: string[];\n };\n}\n\n/**\n * Framework adapter interface\n */\nexport interface CoreFrameworkAdapter {\n /**\n * Framework name\n */\n name: CoreFrameworkType;\n\n /**\n * Register routes from modules\n */\n registerRoutes(\n routes: Array<{ moduleName: string; routes: CoreRouteDefinition[] }>,\n services: CoreServices\n ): void | Promise<void>;\n\n /**\n * Start the server\n */\n start(config: CoreServerConfig): Promise<void>;\n\n /**\n * Stop the server\n */\n stop(): Promise<void>;\n\n /**\n * Get the underlying framework instance (express app, fastify instance, etc.)\n */\n getInstance(): unknown;\n}\n\n/**\n * Adapter factory function\n */\nexport type CoreAdapterFactory = () => CoreFrameworkAdapter;\n\n/**\n * Runtime environment detection\n */\nexport type CoreRuntimeEnvironment =\n | 'node' // Plain Node.js\n | 'nestjs' // NestJS backend\n | 'express' // Express.js\n | 'nuxt' // Nuxt.js (Vue SSR)\n | 'nextjs' // Next.js (React SSR)\n | 'browser' // Browser/SPA\n | 'edge' // Edge runtime (Cloudflare, Vercel Edge)\n | 'deno' // Deno runtime\n | 'bun' // Bun runtime\n | 'unknown';\n\n/**\n * Runtime context type\n */\nexport type CoreRuntimeContext = 'backend' | 'frontend' | 'universal';\n\n/**\n * Backend runtimes - always server-side\n */\nexport const BACKEND_RUNTIMES: readonly CoreRuntimeEnvironment[] = [\n 'node',\n 'nestjs',\n 'express',\n 'deno',\n 'bun',\n] as const;\n\n/**\n * Frontend runtimes - always client-side\n */\nexport const FRONTEND_RUNTIMES: readonly CoreRuntimeEnvironment[] = ['browser'] as const;\n\n/**\n * Universal runtimes - can be either (SSR)\n */\nexport const UNIVERSAL_RUNTIMES: readonly CoreRuntimeEnvironment[] = [\n 'nextjs',\n 'nuxt',\n 'edge',\n] as const;\n\n// ============================================================================\n// Next.js Handler Types\n// ============================================================================\n\n/**\n * Handler context for Next.js API routes\n * Provides services and parsed request data\n */\nexport interface CoreNextJsHandlerContext {\n /** Database service */\n db: unknown; // DbService - imported dynamically to avoid circular deps\n /** URL parameters (from dynamic routes like [id]) */\n params: Record<string, string>;\n /** Query string parameters */\n query: Record<string, string | string[]>;\n /** Request body (parsed JSON) */\n body: unknown;\n /** Request headers */\n headers: Record<string, string>;\n /** Original Request object */\n request: Request;\n}\n\n/**\n * Handler return type for Next.js API routes\n */\nexport interface CoreNextJsHandlerResult {\n /** Response body (will be JSON serialized) */\n [key: string]: unknown;\n /** HTTP status code (default: 200) */\n status?: number;\n /** Response headers */\n headers?: Record<string, string>;\n}\n\n/**\n * Handler function type for Next.js API routes\n */\nexport type CoreNextJsHandler = (\n ctx: CoreNextJsHandlerContext\n) => Promise<CoreNextJsHandlerResult | Response>;\n\n/**\n * Options for Next.js createHandler\n */\nexport interface CoreNextJsHandlerOptions {\n /** Core initialization options (used on first request) */\n coreOptions?: Record<string, unknown>;\n}\n\n// ============================================================================\n// Core Initialization Types\n// ============================================================================\n\n/**\n * Core environment variables\n */\nexport interface CoreEnvVars {\n DATABASE_URL?: string;\n SUPABASE_URL?: string;\n SUPABASE_SERVICE_ROLE_KEY?: string;\n SUPABASE_ANON_PUBLIC_KEY?: string;\n ENCRYPTION_KEY?: string;\n API_BASE_URL?: string;\n API_TIMEOUT?: string;\n NODE_ENV?: string;\n [key: string]: string | undefined;\n}\n\n/**\n * Application environment type\n */\nexport type CoreAppEnvironment = 'development' | 'staging' | 'production' | 'test';\n\n/**\n * API client initialization options\n * Extends ApiClientOptions with Core-specific settings\n */\nexport interface CoreApiInitOptions {\n /** Environment for API client configuration */\n env?: CoreAppEnvironment;\n /** Set this client as the default */\n setAsDefault?: boolean;\n /** Base URL for API requests */\n baseURL?: string;\n /** Request timeout in milliseconds */\n timeout?: number;\n /** Additional options passed to ApiClientService */\n [key: string]: unknown;\n}\n\n/**\n * Core initialization options\n */\nexport interface CoreInitOptions<\n TDbConfig = unknown,\n TApiConfig = CoreApiInitOptions,\n TCacheConfig = unknown,\n TStorageConfig = unknown,\n TNotificationsConfig = unknown,\n> {\n /** Path to .env file */\n envPath?: string;\n /** Global application environment */\n environment?: CoreAppEnvironment;\n /** Application context (webapp, backoffice, mobile, etc.) */\n appContext?: CoreAppContext;\n /** Explicit environment variables */\n env?: CoreEnvVars;\n /** Database configuration */\n db?: TDbConfig;\n /** API client configuration */\n api?: TApiConfig;\n /** Cache configuration */\n cache?: TCacheConfig;\n /** Storage configuration (backend only) */\n storage?: TStorageConfig;\n /** Notifications configuration (backend only) */\n notifications?: TNotificationsConfig;\n /** Skip database initialization */\n skipDb?: boolean;\n /** Skip API client initialization */\n skipApi?: boolean;\n /** Skip cache initialization */\n skipCache?: boolean;\n /** Skip storage initialization */\n skipStorage?: boolean;\n /** Skip notifications initialization */\n skipNotifications?: boolean;\n /** Enable verbose logging */\n verbose?: boolean;\n /**\n * Logger configuration for Core's internal PackageLogger.\n * - 'pino': JSON structured logs (default)\n * - 'console': Human-readable output (for development)\n */\n logger?: {\n transport?: 'pino' | 'console';\n };\n}\n\n/**\n * Core initialization result\n */\nexport interface CoreServicesResult<\n TDb = unknown,\n TApi = unknown,\n TCache = unknown,\n TStorage = unknown,\n TNotifications = unknown,\n> {\n db: TDb | null;\n api: TApi | null;\n cache: TCache | null;\n storage: TStorage | null;\n notifications: TNotifications | null;\n env: CoreEnvVars;\n runtime: CoreRuntimeEnvironment;\n appContext: CoreAppContext;\n}\n\n// ============================================================================\n// NestJS Module Types\n// ============================================================================\n\n/**\n * Core module options for NestJS\n */\nexport interface CoreNestJsModuleOptions {\n /** Path to .env file */\n envPath?: string;\n /** Database configuration */\n db?: Record<string, unknown>;\n /** Whether to make Core services globally available */\n isGlobal?: boolean;\n}\n\n/**\n * Async options for NestJS CoreModule (adapters/nestjs.ts pattern)\n * Uses NestJS-specific types for proper DI integration.\n */\nexport interface CoreNestJsModuleAsyncOptions {\n /** Modules to import for dependency resolution */\n imports?: Array<Type<unknown> | DynamicModule | Promise<DynamicModule> | ForwardReference>;\n /** Tokens to inject into the factory */\n inject?: Array<InjectionToken | OptionalFactoryDependency>;\n /** Factory function to create module options */\n useFactory: (...args: unknown[]) => CoreNestJsModuleOptions | Promise<CoreNestJsModuleOptions>;\n /** Whether to make Core services globally available */\n isGlobal?: boolean;\n}\n\n/**\n * Async options for NestJS CoreModule (init/nestjs pattern)\n * Extends ModuleMetadata for full NestJS integration.\n */\nexport interface CoreNestJsCoreModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {\n /** Factory function to create init options */\n useFactory: (...args: unknown[]) => CoreInitOptions | Promise<CoreInitOptions>;\n /** Tokens to inject into the factory */\n inject?: Array<Type<unknown> | string | symbol>;\n}\n\n// ============================================================================\n// App Context Types\n// ============================================================================\n\n/**\n * Application context type\n *\n * Identifies which type of application is running.\n * Different apps may have different feature flags, API endpoints, or UI behaviors.\n */\nexport type CoreAppContext =\n | 'webapp' // Main web application\n | 'backoffice' // Admin/back-office portal\n | 'mobile' // Mobile apps (React Native, Capacitor, etc.)\n | 'microapp' // Embedded micro frontends\n | 'cli'; // CLI tools\n\n/**\n * App context constants for type-safe comparisons\n */\nexport const APP_CONTEXTS: readonly CoreAppContext[] = [\n 'webapp',\n 'backoffice',\n 'mobile',\n 'microapp',\n 'cli',\n] as const;\n\n// ============================================================================\n// Domain Service Types\n// ============================================================================\n\n/**\n * Service runtime compatibility\n *\n * Declares which runtimes a service can execute on.\n * Services can be restricted to specific runtimes for security\n * (e.g., backend-only services should never be bundled for frontend).\n */\nexport type CoreServiceRuntime =\n | 'frontend' // Browser, React, Vue, etc. (no DB access)\n | 'backend' // Node.js, NestJS, Express (has DB access)\n | 'universal'; // Works everywhere (SSR, Edge)\n\n/**\n * Domain service configuration\n *\n * Declares service metadata including runtime compatibility\n * and feature flag requirements.\n *\n * @example\n * ```typescript\n * class CampaignDomainService {\n * static readonly config: CoreDomainServiceConfig = {\n * name: 'CampaignDomainService',\n * runtimes: ['frontend', 'backend'],\n * requiresFeatureFlag: 'campaigns:enabled',\n * };\n * }\n * ```\n */\nexport interface CoreDomainServiceConfig {\n /** Service name for logging and debugging */\n name: string;\n\n /** Runtimes this service can run on */\n runtimes: readonly CoreServiceRuntime[];\n\n /** Feature flag required to use this service (optional) */\n requiresFeatureFlag?: string;\n\n /** App contexts this service is available in (optional, all if not specified) */\n appContexts?: readonly CoreAppContext[];\n}\n","export enum TABLES {\n User = 'users',\n}\n","/**\n * Sort direction for database queries\n */\nexport enum SORT_DIRECTION {\n Asc = 'asc',\n Desc = 'desc',\n}\n\n/**\n * Feature flag database table names enumeration\n */\nexport enum FEATURE_FLAG_TABLE {\n FeatureFlags = 'feature_flags',\n FeatureFlagRules = 'feature_flag_rules',\n FeatureFlagEvaluations = 'feature_flag_evaluations',\n FeatureFlagOverrides = 'feature_flag_overrides',\n}\n\n/**\n * Database field names for feature flags table\n */\nexport enum FEATURE_FLAG_FIELD {\n Key = 'key',\n Name = 'name',\n Value = 'value',\n Type = 'type',\n IsEnabled = 'is_enabled',\n Environments = 'environments',\n Description = 'description',\n CreatedAt = 'created_at',\n UpdatedAt = 'updated_at',\n}\n\n/**\n * Database field names for feature flag rules table\n */\nexport enum FEATURE_FLAG_RULE_FIELD {\n Id = 'id',\n FlagKey = 'flag_key',\n Name = 'name',\n Conditions = 'conditions',\n Value = 'value',\n Priority = 'priority',\n IsEnabled = 'is_enabled',\n}\n\n/**\n * Feature Flag Provider Types\n */\nexport enum FEATURE_FLAG_PROVIDERS {\n MEMORY = 'memory',\n FILE = 'file',\n REDIS = 'redis',\n API = 'api',\n DATABASE = 'database',\n}\n\n/**\n * Node Environment Types\n */\nexport enum NODE_ENVIRONMENTS {\n DEVELOPMENT = 'development',\n PRODUCTION = 'production',\n STAGING = 'staging',\n TEST = 'test',\n}\n\n/**\n * Database Field Names\n */\nexport enum DATABASE_FIELDS {\n Key = 'key',\n FlagKey = 'flag_key',\n UserId = 'user_id',\n IsEnabled = 'is_enabled',\n CreatedAt = 'created_at',\n UpdatedAt = 'updated_at',\n ExpiresAt = 'expires_at',\n EvaluatedAt = 'evaluated_at',\n}\n\n/**\n * System User Constants\n */\nexport enum SYSTEM_USERS {\n SYSTEM = 'system',\n}\n\n/**\n * Evaluation Reasons\n * Must match database enum: evaluation_reason\n * Used when logging feature flag evaluations to audit table\n */\nexport enum EVALUATION_REASONS {\n Default = 'default', // Default flag value used\n RuleMatch = 'rule_match', // Matched a targeting rule\n Rollout = 'rollout', // Matched rollout percentage\n Override = 'override', // User-specific override applied\n Disabled = 'disabled', // Flag is disabled\n}\n\n/**\n * Feature Flag Types\n */\nexport enum FEATURE_FLAG_TYPES {\n BOOLEAN = 'boolean',\n STRING = 'string',\n NUMBER = 'number',\n OBJECT = 'object',\n}\n","/**\n * Default Configuration Values\n */\nexport const FEATURE_FLAG_DEFAULTS = {\n CACHE_TTL: 300,\n REFRESH_INTERVAL: 0,\n POOL_SIZE: 10,\n TIMEOUT: 30000,\n TABLE_NAME: 'feature_flags',\n} as const;\n\n/**\n * Metadata keys used for attaching feature flag information\n * to route handlers via decorators.\n */\nexport const FEATURE_FLAG_METADATA = {\n FLAG_CHECK: 'plyaz:feature_flag_check', // Single feature flag check\n RESOLVE_FLAGS: 'plyaz:resolve_feature_flags', // Multiple flags resolved at once\n};\n","/**\n * Core Event Enums and Constants\n *\n * Type-safe event definitions for the CoreEventManager.\n * All event types follow the pattern: SCOPE:ACTION\n *\n * @example\n * ```typescript\n * import { CoreEventType, CORE_EVENTS } from '@plyaz/types/core';\n *\n * // Use constants for type-safe event emission\n * CoreEventManager.emit(CORE_EVENTS.ENTITY.CREATED, payload);\n *\n * // Subscribe with typed payloads\n * CoreEventManager.on<EntityCreatedPayload>(CORE_EVENTS.ENTITY.CREATED, handler);\n * ```\n */\n\n// ─────────────────────────────────────────────────────────────────\n// Event Scopes\n// ─────────────────────────────────────────────────────────────────\n\n/**\n * Event scope categories\n */\nexport const CoreEventScope = {\n SYSTEM: 'system',\n ENTITY: 'entity',\n VALIDATION: 'validation',\n SANITIZATION: 'sanitization',\n API: 'api',\n CACHE: 'cache',\n AUTH: 'auth',\n DATABASE: 'database',\n FEATURE_FLAG: 'featureFlag',\n STORE: 'store',\n STORAGE: 'storage',\n NOTIFICATION: 'notification',\n} as const;\n\nexport type CoreEventScopeType = (typeof CoreEventScope)[keyof typeof CoreEventScope];\n\n// ─────────────────────────────────────────────────────────────────\n// Event Actions per Scope\n// ─────────────────────────────────────────────────────────────────\n\n/**\n * System event actions\n */\nexport const SystemEventAction = {\n INITIALIZED: 'initialized',\n READY: 'ready',\n SHUTDOWN: 'shutdown',\n ERROR: 'error',\n WARNING: 'warning',\n} as const;\n\n/**\n * Entity CRUD event actions\n */\nexport const EntityEventAction = {\n // Lifecycle (before API call)\n CREATING: 'creating',\n UPDATING: 'updating',\n PATCHING: 'patching',\n DELETING: 'deleting',\n // Completed (after API call)\n CREATED: 'created',\n UPDATED: 'updated',\n PATCHED: 'patched',\n DELETED: 'deleted',\n // Error/Complete\n ERROR: 'error',\n COMPLETE: 'complete',\n // Bulk operations\n BULK_CREATED: 'bulkCreated',\n BULK_DELETED: 'bulkDeleted',\n} as const;\n\n/**\n * Validation event actions\n */\nexport const ValidationEventAction = {\n STARTED: 'started',\n SUCCESS: 'success',\n FAILED: 'failed',\n} as const;\n\n/**\n * Sanitization event actions\n */\nexport const SanitizationEventAction = {\n STARTED: 'started',\n SUCCESS: 'success',\n FAILED: 'failed',\n} as const;\n\n/**\n * API event actions\n */\nexport const ApiEventAction = {\n REQUEST_START: 'requestStart',\n REQUEST_SUCCESS: 'requestSuccess',\n REQUEST_ERROR: 'requestError',\n RETRY: 'retry',\n TIMEOUT: 'timeout',\n} as const;\n\n/**\n * Cache event actions\n */\nexport const CacheEventAction = {\n HIT: 'hit',\n MISS: 'miss',\n SET: 'set',\n DELETE: 'delete',\n CLEAR: 'clear',\n EXPIRED: 'expired',\n ERROR: 'error',\n} as const;\n\n/**\n * Auth event actions\n */\nexport const AuthEventAction = {\n LOGIN: 'login',\n LOGOUT: 'logout',\n TOKEN_REFRESH: 'tokenRefresh',\n SESSION_EXPIRED: 'sessionExpired',\n UNAUTHORIZED: 'unauthorized',\n} as const;\n\n/**\n * Database event actions\n */\nexport const DatabaseEventAction = {\n CONNECTED: 'connected',\n DISCONNECTED: 'disconnected',\n QUERY: 'query',\n ERROR: 'error',\n TRANSACTION_START: 'transactionStart',\n TRANSACTION_COMMIT: 'transactionCommit',\n TRANSACTION_ROLLBACK: 'transactionRollback',\n} as const;\n\n/**\n * Feature flag event actions\n */\nexport const FeatureFlagEventAction = {\n CHANGED: 'changed',\n EVALUATED: 'evaluated',\n REFRESHED: 'refreshed',\n} as const;\n\n/**\n * Store event actions\n */\nexport const StoreEventAction = {\n UPDATED: 'updated',\n RESET: 'reset',\n HYDRATED: 'hydrated',\n} as const;\n\n/**\n * Storage event actions (file uploads, downloads, deletions)\n */\nexport const StorageEventAction = {\n UPLOADED: 'uploaded',\n DOWNLOADED: 'downloaded',\n DELETED: 'deleted',\n ERROR: 'error',\n HEALTH_CHECK: 'healthCheck',\n} as const;\n\n/**\n * Notification event actions (email, sms, push)\n */\nexport const NotificationEventAction = {\n SENT: 'sent',\n FAILED: 'failed',\n DELIVERED: 'delivered',\n OPENED: 'opened',\n CLICKED: 'clicked',\n ERROR: 'error',\n HEALTH_CHECK: 'healthCheck',\n} as const;\n\n// ─────────────────────────────────────────────────────────────────\n// Full Event Types (scope:action constants)\n// ─────────────────────────────────────────────────────────────────\n\n/**\n * All core event type constants\n *\n * @example\n * ```typescript\n * CoreEventManager.emit(CORE_EVENTS.ENTITY.CREATED, { entity, storeState });\n * CoreEventManager.on(CORE_EVENTS.API.REQUEST_ERROR, handleApiError);\n * ```\n */\nexport const CORE_EVENTS = {\n SYSTEM: {\n INITIALIZED: `${CoreEventScope.SYSTEM}:${SystemEventAction.INITIALIZED}`,\n READY: `${CoreEventScope.SYSTEM}:${SystemEventAction.READY}`,\n SHUTDOWN: `${CoreEventScope.SYSTEM}:${SystemEventAction.SHUTDOWN}`,\n ERROR: `${CoreEventScope.SYSTEM}:${SystemEventAction.ERROR}`,\n WARNING: `${CoreEventScope.SYSTEM}:${SystemEventAction.WARNING}`,\n },\n ENTITY: {\n CREATING: `${CoreEventScope.ENTITY}:${EntityEventAction.CREATING}`,\n UPDATING: `${CoreEventScope.ENTITY}:${EntityEventAction.UPDATING}`,\n PATCHING: `${CoreEventScope.ENTITY}:${EntityEventAction.PATCHING}`,\n DELETING: `${CoreEventScope.ENTITY}:${EntityEventAction.DELETING}`,\n CREATED: `${CoreEventScope.ENTITY}:${EntityEventAction.CREATED}`,\n UPDATED: `${CoreEventScope.ENTITY}:${EntityEventAction.UPDATED}`,\n PATCHED: `${CoreEventScope.ENTITY}:${EntityEventAction.PATCHED}`,\n DELETED: `${CoreEventScope.ENTITY}:${EntityEventAction.DELETED}`,\n ERROR: `${CoreEventScope.ENTITY}:${EntityEventAction.ERROR}`,\n COMPLETE: `${CoreEventScope.ENTITY}:${EntityEventAction.COMPLETE}`,\n BULK_CREATED: `${CoreEventScope.ENTITY}:${EntityEventAction.BULK_CREATED}`,\n BULK_DELETED: `${CoreEventScope.ENTITY}:${EntityEventAction.BULK_DELETED}`,\n },\n VALIDATION: {\n STARTED: `${CoreEventScope.VALIDATION}:${ValidationEventAction.STARTED}`,\n SUCCESS: `${CoreEventScope.VALIDATION}:${ValidationEventAction.SUCCESS}`,\n FAILED: `${CoreEventScope.VALIDATION}:${ValidationEventAction.FAILED}`,\n },\n SANITIZATION: {\n STARTED: `${CoreEventScope.SANITIZATION}:${SanitizationEventAction.STARTED}`,\n SUCCESS: `${CoreEventScope.SANITIZATION}:${SanitizationEventAction.SUCCESS}`,\n FAILED: `${CoreEventScope.SANITIZATION}:${SanitizationEventAction.FAILED}`,\n },\n API: {\n REQUEST_START: `${CoreEventScope.API}:${ApiEventAction.REQUEST_START}`,\n REQUEST_SUCCESS: `${CoreEventScope.API}:${ApiEventAction.REQUEST_SUCCESS}`,\n REQUEST_ERROR: `${CoreEventScope.API}:${ApiEventAction.REQUEST_ERROR}`,\n RETRY: `${CoreEventScope.API}:${ApiEventAction.RETRY}`,\n TIMEOUT: `${CoreEventScope.API}:${ApiEventAction.TIMEOUT}`,\n },\n CACHE: {\n HIT: `${CoreEventScope.CACHE}:${CacheEventAction.HIT}`,\n MISS: `${CoreEventScope.CACHE}:${CacheEventAction.MISS}`,\n SET: `${CoreEventScope.CACHE}:${CacheEventAction.SET}`,\n DELETE: `${CoreEventScope.CACHE}:${CacheEventAction.DELETE}`,\n CLEAR: `${CoreEventScope.CACHE}:${CacheEventAction.CLEAR}`,\n EXPIRED: `${CoreEventScope.CACHE}:${CacheEventAction.EXPIRED}`,\n ERROR: `${CoreEventScope.CACHE}:${CacheEventAction.ERROR}`,\n },\n AUTH: {\n LOGIN: `${CoreEventScope.AUTH}:${AuthEventAction.LOGIN}`,\n LOGOUT: `${CoreEventScope.AUTH}:${AuthEventAction.LOGOUT}`,\n TOKEN_REFRESH: `${CoreEventScope.AUTH}:${AuthEventAction.TOKEN_REFRESH}`,\n SESSION_EXPIRED: `${CoreEventScope.AUTH}:${AuthEventAction.SESSION_EXPIRED}`,\n UNAUTHORIZED: `${CoreEventScope.AUTH}:${AuthEventAction.UNAUTHORIZED}`,\n },\n DATABASE: {\n CONNECTED: `${CoreEventScope.DATABASE}:${DatabaseEventAction.CONNECTED}`,\n DISCONNECTED: `${CoreEventScope.DATABASE}:${DatabaseEventAction.DISCONNECTED}`,\n QUERY: `${CoreEventScope.DATABASE}:${DatabaseEventAction.QUERY}`,\n ERROR: `${CoreEventScope.DATABASE}:${DatabaseEventAction.ERROR}`,\n TRANSACTION_START: `${CoreEventScope.DATABASE}:${DatabaseEventAction.TRANSACTION_START}`,\n TRANSACTION_COMMIT: `${CoreEventScope.DATABASE}:${DatabaseEventAction.TRANSACTION_COMMIT}`,\n TRANSACTION_ROLLBACK: `${CoreEventScope.DATABASE}:${DatabaseEventAction.TRANSACTION_ROLLBACK}`,\n },\n FEATURE_FLAG: {\n CHANGED: `${CoreEventScope.FEATURE_FLAG}:${FeatureFlagEventAction.CHANGED}`,\n EVALUATED: `${CoreEventScope.FEATURE_FLAG}:${FeatureFlagEventAction.EVALUATED}`,\n REFRESHED: `${CoreEventScope.FEATURE_FLAG}:${FeatureFlagEventAction.REFRESHED}`,\n },\n STORE: {\n UPDATED: `${CoreEventScope.STORE}:${StoreEventAction.UPDATED}`,\n RESET: `${CoreEventScope.STORE}:${StoreEventAction.RESET}`,\n HYDRATED: `${CoreEventScope.STORE}:${StoreEventAction.HYDRATED}`,\n },\n STORAGE: {\n UPLOADED: `${CoreEventScope.STORAGE}:${StorageEventAction.UPLOADED}`,\n DOWNLOADED: `${CoreEventScope.STORAGE}:${StorageEventAction.DOWNLOADED}`,\n DELETED: `${CoreEventScope.STORAGE}:${StorageEventAction.DELETED}`,\n ERROR: `${CoreEventScope.STORAGE}:${StorageEventAction.ERROR}`,\n HEALTH_CHECK: `${CoreEventScope.STORAGE}:${StorageEventAction.HEALTH_CHECK}`,\n },\n NOTIFICATION: {\n SENT: `${CoreEventScope.NOTIFICATION}:${NotificationEventAction.SENT}`,\n FAILED: `${CoreEventScope.NOTIFICATION}:${NotificationEventAction.FAILED}`,\n DELIVERED: `${CoreEventScope.NOTIFICATION}:${NotificationEventAction.DELIVERED}`,\n OPENED: `${CoreEventScope.NOTIFICATION}:${NotificationEventAction.OPENED}`,\n CLICKED: `${CoreEventScope.NOTIFICATION}:${NotificationEventAction.CLICKED}`,\n ERROR: `${CoreEventScope.NOTIFICATION}:${NotificationEventAction.ERROR}`,\n HEALTH_CHECK: `${CoreEventScope.NOTIFICATION}:${NotificationEventAction.HEALTH_CHECK}`,\n },\n} as const;\n\n// ─────────────────────────────────────────────────────────────────\n// Event Type Union\n// ─────────────────────────────────────────────────────────────────\n\n/** All system event types */\nexport type SystemEventType = (typeof CORE_EVENTS.SYSTEM)[keyof typeof CORE_EVENTS.SYSTEM];\n\n/** All entity event types */\nexport type EntityEventType = (typeof CORE_EVENTS.ENTITY)[keyof typeof CORE_EVENTS.ENTITY];\n\n/** All validation event types */\nexport type ValidationEventType =\n (typeof CORE_EVENTS.VALIDATION)[keyof typeof CORE_EVENTS.VALIDATION];\n\n/** All sanitization event types */\nexport type SanitizationEventType =\n (typeof CORE_EVENTS.SANITIZATION)[keyof typeof CORE_EVENTS.SANITIZATION];\n\n/** All API event types */\nexport type ApiEventType = (typeof CORE_EVENTS.API)[keyof typeof CORE_EVENTS.API];\n\n/** All cache event types */\nexport type CacheEventType = (typeof CORE_EVENTS.CACHE)[keyof typeof CORE_EVENTS.CACHE];\n\n/** All auth event types */\nexport type AuthEventType = (typeof CORE_EVENTS.AUTH)[keyof typeof CORE_EVENTS.AUTH];\n\n/** All database event types */\nexport type DatabaseEventType = (typeof CORE_EVENTS.DATABASE)[keyof typeof CORE_EVENTS.DATABASE];\n\n/** All feature flag event types */\nexport type FeatureFlagEventType =\n (typeof CORE_EVENTS.FEATURE_FLAG)[keyof typeof CORE_EVENTS.FEATURE_FLAG];\n\n/** All store event types */\nexport type StoreEventType = (typeof CORE_EVENTS.STORE)[keyof typeof CORE_EVENTS.STORE];\n\n/**\n * Union of all core event types\n */\nexport type CoreEventType =\n | SystemEventType\n | EntityEventType\n | ValidationEventType\n | SanitizationEventType\n | ApiEventType\n | CacheEventType\n | AuthEventType\n | DatabaseEventType\n | FeatureFlagEventType\n | StoreEventType;\n","/**\n * Files Domain Enums and Constants\n *\n * Runtime constants for files/media operations.\n */\n\n// ─────────────────────────────────────────────────────────────────────────────\n// System Constants\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * System user UUID for uploads without user context.\n * Used for:\n * - Generated documents (no auth context)\n * - System-initiated uploads\n * - Background jobs\n *\n * Must be a valid UUID as media.user_id has FK constraint to users table.\n * This UUID should exist in the users table or FK checks should be disabled.\n */\nexport const SYSTEM_USER_ID = '00000000-0000-0000-0000-000000000000';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// File Type Constants\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * File types supported by the DB ENUM\n * Use these when creating records - 'OTHER' is NOT in the DB ENUM\n */\nexport const FILE_TYPES = {\n IMAGE: 'IMAGE',\n VIDEO: 'VIDEO',\n AUDIO: 'AUDIO',\n DOCUMENT: 'DOCUMENT',\n} as const;\n\nexport type FileTypeValue = (typeof FILE_TYPES)[keyof typeof FILE_TYPES];\n\n/**\n * Access levels for files\n */\nexport const FILE_ACCESS_LEVELS = {\n PUBLIC: 'public',\n PRIVATE: 'private',\n PROTECTED: 'protected',\n} as const;\n\nexport type FileAccessLevelValue = (typeof FILE_ACCESS_LEVELS)[keyof typeof FILE_ACCESS_LEVELS];\n","/**\n * Files Domain Streaming Types\n *\n * Stream message types specific to the files domain.\n * These extend from existing storage types and are merged into global streaming types.\n *\n * Architecture:\n * - FilesStreamProgressData extends UploadProgressEvent (from storage)\n * - Constants (FILES_STREAM_*) are domain-specific\n * - Global types in @plyaz/types/core/events/streaming merge these with other domains\n */\n\nimport type { UploadProgressEvent } from '../../../storage';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Files Stream Message Types (Constants)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Message type categories specific to files domain.\n * These get merged into global STREAM_MESSAGE_TYPE.\n */\nexport const FILES_STREAM_MESSAGE_TYPE = {\n PROGRESS: 'progress',\n STATUS: 'status',\n ERROR: 'error',\n} as const;\n\nexport type FilesStreamMessageType =\n (typeof FILES_STREAM_MESSAGE_TYPE)[keyof typeof FILES_STREAM_MESSAGE_TYPE];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Files Stream Message Subtypes (Constants)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Stream message subtypes for files domain.\n * Defines the specific operations that can be streamed.\n */\nexport const FILES_STREAM_SUBTYPE = {\n UPLOAD: 'upload',\n DOWNLOAD: 'download',\n GENERATE: 'generate',\n} as const;\n\nexport type FilesStreamSubtype = (typeof FILES_STREAM_SUBTYPE)[keyof typeof FILES_STREAM_SUBTYPE];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Files Stream Progress Status (Constants)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Progress status values for files streaming operations.\n * Aligned with storage UPLOAD_STATUS enum values.\n */\nexport const FILES_STREAM_PROGRESS_STATUS = {\n PENDING: 'pending',\n UPLOADING: 'uploading',\n DOWNLOADING: 'downloading',\n PROCESSING: 'processing',\n GENERATING: 'generating',\n COMPLETED: 'completed',\n FAILED: 'failed',\n CANCELLED: 'cancelled',\n} as const;\n\nexport type FilesStreamProgressStatus =\n (typeof FILES_STREAM_PROGRESS_STATUS)[keyof typeof FILES_STREAM_PROGRESS_STATUS];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Files Stream Event Names (Constants)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * SSE/WebSocket event names for files domain.\n * These map to the `event` field in StreamMessage.\n */\nexport const FILES_STREAM_EVENT = {\n // Upload events\n UPLOAD_PROGRESS: 'upload:progress',\n UPLOAD_COMPLETED: 'upload:completed',\n UPLOAD_FAILED: 'upload:failed',\n UPLOAD_CANCELLED: 'upload:cancelled',\n // Download events\n DOWNLOAD_PROGRESS: 'download:progress',\n DOWNLOAD_COMPLETED: 'download:completed',\n DOWNLOAD_FAILED: 'download:failed',\n DOWNLOAD_CANCELLED: 'download:cancelled',\n // Generation events\n GENERATE_PROGRESS: 'generate:progress',\n GENERATE_COMPLETED: 'generate:completed',\n GENERATE_FAILED: 'generate:failed',\n} as const;\n\nexport type FilesStreamEventName = (typeof FILES_STREAM_EVENT)[keyof typeof FILES_STREAM_EVENT];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Files Stream Channel Patterns (Constants)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Channel prefixes for files domain subscriptions.\n * Used for per-resource channels (upload:fileId, download:fileId, etc.)\n */\nexport const FILES_STREAM_CHANNEL_PREFIX = {\n UPLOAD: 'upload:',\n DOWNLOAD: 'download:',\n GENERATE: 'generate:',\n} as const;\n\nexport type FilesStreamChannelPrefix =\n (typeof FILES_STREAM_CHANNEL_PREFIX)[keyof typeof FILES_STREAM_CHANNEL_PREFIX];\n\n/**\n * Broadcast channels for files domain (user-scoped).\n * Used for subscribing to all events of a type.\n */\nexport const FILES_STREAM_BROADCAST_CHANNEL = {\n UPLOADS: 'uploads',\n DOWNLOADS: 'downloads',\n GENERATIONS: 'generations',\n} as const;\n\nexport type FilesStreamBroadcastChannel =\n (typeof FILES_STREAM_BROADCAST_CHANNEL)[keyof typeof FILES_STREAM_BROADCAST_CHANNEL];\n\n/**\n * All files stream channels (prefixes + broadcast).\n */\nexport const FILES_STREAM_CHANNEL = {\n // Prefixes (for building per-resource channels)\n PREFIX: FILES_STREAM_CHANNEL_PREFIX,\n // Broadcast channels\n BROADCAST: FILES_STREAM_BROADCAST_CHANNEL,\n} as const;\n\n/**\n * Channel patterns for files domain subscriptions.\n *\n * - `upload:{fileId}` - Per-file upload progress\n * - `download:{fileId}` - Per-file download progress\n * - `generate:{templateId}` - Per-template generation progress\n * - `uploads` - All uploads for current user\n * - `downloads` - All downloads for current user\n * - `generations` - All generations for current user\n */\nexport type FilesStreamChannel =\n | `upload:${string}`\n | `download:${string}`\n | `generate:${string}`\n | FilesStreamBroadcastChannel;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Files Stream Progress Data\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Base progress data extending storage's UploadProgressEvent.\n * Used for upload progress streaming.\n */\nexport interface FilesUploadStreamProgress extends UploadProgressEvent {\n /** Current status */\n status: FilesStreamProgressStatus;\n /** Error message (if status is 'failed') */\n error?: string;\n}\n\n/**\n * Download progress data.\n * Similar to upload but for downloads.\n */\nexport interface FilesDownloadStreamProgress {\n /** File ID */\n fileId: string;\n /** Filename */\n filename: string;\n /** Bytes downloaded */\n loaded: number;\n /** Total bytes */\n total: number;\n /** Progress percentage (0-100) */\n percentage: number;\n /** Download speed in bytes/second */\n speed?: number;\n /** Estimated time remaining in seconds */\n estimatedTimeRemaining?: number;\n /** Current status */\n status: FilesStreamProgressStatus;\n /** Error message (if status is 'failed') */\n error?: string;\n}\n\n/**\n * Document generation progress data.\n */\nexport interface FilesGenerateStreamProgress {\n /** Template ID being generated */\n templateId: string;\n /** Progress percentage (0-100) */\n percentage: number;\n /** Current status */\n status: FilesStreamProgressStatus;\n /** Error message (if status is 'failed') */\n error?: string;\n /** Output filename (when completed) */\n outputFilename?: string;\n /** Output file ID (when completed) */\n outputFileId?: string;\n}\n\n/**\n * Union of all files stream progress data types.\n * Use this for generic handling of any files progress message.\n */\nexport type FilesStreamProgressData =\n | FilesUploadStreamProgress\n | FilesDownloadStreamProgress\n | FilesGenerateStreamProgress;\n","/**\n * Files Domain Schemas\n *\n * Zod validation schemas for files/media operations.\n * Single source of truth - types are inferred from schemas.\n *\n * Used by:\n * - FilesValidator in @plyaz/core for validation\n * - FilesRepository for type safety\n * - FilesMapper for transformations\n */\n\nimport { z } from 'zod';\nimport { SYSTEM_USER_ID } from './enums';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// File Type Schemas\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Media type enum - matches media.type DB ENUM\n * Note: DB only has IMAGE, VIDEO, AUDIO, DOCUMENT (no OTHER)\n * Use this for DB operations and validation\n */\nexport const MediaTypeSchema = z.enum(['IMAGE', 'VIDEO', 'AUDIO', 'DOCUMENT']);\nexport type MediaType = z.infer<typeof MediaTypeSchema>;\n\n/**\n * File type enum - for domain layer (includes OTHER for unknown types)\n * Use this for domain entities and frontend display.\n * Note: OTHER is not in the DB ENUM, mapper should convert to DOCUMENT for DB ops.\n */\nexport const FileTypeSchema = z.enum(['IMAGE', 'VIDEO', 'DOCUMENT', 'AUDIO', 'OTHER']);\nexport type FileType = z.infer<typeof FileTypeSchema>;\n\n/**\n * Access level schema - matches DB constraints\n */\nexport const MediaAccessLevelSchema = z.enum(['public', 'private', 'protected']).nullable();\nexport type MediaAccessLevel = z.infer<typeof MediaAccessLevelSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Database Row Schema (Full media table row)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Full media database row schema\n * Includes all fields including auto-generated ones\n * Used by FilesRepository for query results\n */\nexport const FilesDatabaseRowSchema = z.object({\n // Auto-generated fields\n id: z.string().uuid(),\n created_at: z.string(),\n updated_at: z.string(),\n deleted_at: z.string().nullable(),\n\n // Required fields\n user_id: z.string().uuid(),\n type: z.string(), // String in DB, validated as MediaType on create\n filename: z.string(),\n original_filename: z.string(),\n mime_type: z.string(),\n file_size: z.union([z.bigint(), z.number()]),\n storage_path: z.string(),\n\n // Optional fields\n cdn_url: z.string().nullable(),\n width: z.number().nullable(),\n height: z.number().nullable(),\n duration: z.number().nullable(),\n is_virus_scanned: z.boolean(),\n virus_scan_result: z.string().nullable(),\n metadata: z.record(z.string(), z.unknown()).nullable(),\n variants: z.record(z.string(), z.unknown()).nullable(),\n entity_type: z.string().nullable(),\n entity_id: z.string().nullable(),\n access_level: z.string().nullable(),\n bucket: z.string().nullable(),\n});\n\n/**\n * Database row type - inferred from schema\n * Used by FilesRepository, mapped to FilesEntity by FilesMapper\n */\nexport type FilesDatabaseRow = z.infer<typeof FilesDatabaseRowSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Create Media Schema (for DB insert validation)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Schema for creating a file/media record in the database\n * Validates data before repository.create()\n *\n * Auto-generated fields (id, created_at, updated_at, deleted_at)\n * are handled by the repository.\n */\nexport const CreateFilesSchema = z.object({\n // Required fields with defaults for optional scenarios\n user_id: z.string().uuid().default(SYSTEM_USER_ID),\n type: MediaTypeSchema.default('DOCUMENT'),\n filename: z.string().min(1, 'Filename is required'),\n original_filename: z.string().min(1, 'Original filename is required'),\n mime_type: z.string().min(1, 'MIME type is required'),\n file_size: z\n .union([z.bigint(), z.number()])\n .refine(val => Number(val) >= 0, 'File size must be non-negative'),\n storage_path: z.string().min(1, 'Storage path is required'),\n\n // Optional fields with defaults\n cdn_url: z.string().url().nullable().default(null),\n width: z.number().positive().nullable().default(null),\n height: z.number().positive().nullable().default(null),\n duration: z.number().positive().nullable().default(null),\n is_virus_scanned: z.boolean().default(false),\n virus_scan_result: z.string().nullable().default(null),\n metadata: z.record(z.string(), z.unknown()).nullable().default(null),\n variants: z.record(z.string(), z.unknown()).nullable().default(null),\n entity_type: z.string().nullable().default(null),\n entity_id: z.string().nullable().default(null),\n access_level: MediaAccessLevelSchema.default(null),\n bucket: z.string().nullable().default(null),\n});\n\n/** Input type for creating files (before defaults applied) */\nexport type FilesCreateInput = z.input<typeof CreateFilesSchema>;\n/** Output type for creating files (after defaults applied) */\nexport type FilesCreateOutput = z.output<typeof CreateFilesSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Patch Files Schema (for updates)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Schema for partial update of a file/media record\n * All fields optional\n */\nexport const PatchFilesSchema = CreateFilesSchema.partial();\n\nexport type FilesPatchInput = z.input<typeof PatchFilesSchema>;\nexport type FilesPatchOutput = z.output<typeof PatchFilesSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Media Variants Schema\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Full media_variants database row schema\n */\nexport const MediaVariantsDatabaseRowSchema = z.object({\n id: z.string().uuid(),\n media_id: z.string().uuid(),\n variant_name: z.string(),\n file_path: z.string(),\n cdn_url: z.string().nullable(),\n width: z.number().nullable(),\n height: z.number().nullable(),\n file_size: z.number().nullable(),\n created_at: z.string(),\n});\n\nexport type MediaVariantsDatabaseRow = z.infer<typeof MediaVariantsDatabaseRowSchema>;\n\n/**\n * Schema for creating a media variant record\n */\nexport const CreateMediaVariantSchema = MediaVariantsDatabaseRowSchema.omit({\n id: true,\n created_at: true,\n});\n\nexport type MediaVariantsCreateInput = z.input<typeof CreateMediaVariantSchema>;\n","/**\n * Streaming Types\n *\n * Global types for real-time event streaming via SSE/WebSocket.\n *\n * Architecture:\n * - Domain services define their own streaming constants (e.g., FILES_STREAM_SUBTYPE)\n * - Global constants here MERGE domain-specific constants\n * - System constants (heartbeat, connection) are defined here as base\n *\n * To add a new domain:\n * 1. Create streaming constants in the domain folder (e.g., /domain/payments/streaming.ts)\n * 2. Import domain constants here\n * 3. Merge into global constants (STREAM_MESSAGE_TYPE, STREAM_SUBTYPE, etc.)\n */\n\nimport {\n FILES_STREAM_MESSAGE_TYPE,\n FILES_STREAM_SUBTYPE,\n FILES_STREAM_PROGRESS_STATUS,\n FILES_STREAM_EVENT,\n FILES_STREAM_CHANNEL_PREFIX,\n FILES_STREAM_BROADCAST_CHANNEL,\n} from '../../domain/files';\n\nimport type {\n FilesStreamMessageType,\n FilesStreamSubtype,\n FilesStreamProgressStatus,\n FilesUploadStreamProgress,\n FilesDownloadStreamProgress,\n FilesGenerateStreamProgress,\n FilesStreamProgressData,\n FilesStreamChannel,\n} from '../../domain/files';\nimport type { CorePlyazStreamConfig } from '../../frontend';\nimport type { RootStoreHook } from '../../../store';\nimport type { PackageErrorLike } from '../../../errors';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Transport Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Supported transport types for streaming connections\n */\nexport const STREAM_TRANSPORT = {\n SSE: 'sse',\n WEBSOCKET: 'websocket',\n} as const;\n\nexport type StreamTransportType = (typeof STREAM_TRANSPORT)[keyof typeof STREAM_TRANSPORT];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// System Message Types (Base - non-domain)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * System-level message type categories.\n * Used for connection lifecycle and system-wide events.\n */\nexport const SYSTEM_STREAM_MESSAGE_TYPE = {\n SYSTEM: 'system',\n NOTIFICATION: 'notification',\n DATA: 'data',\n} as const;\n\nexport type SystemStreamMessageType =\n (typeof SYSTEM_STREAM_MESSAGE_TYPE)[keyof typeof SYSTEM_STREAM_MESSAGE_TYPE];\n\n/**\n * System-level message subtypes (not domain-specific).\n * Used for connection lifecycle and system events.\n */\nexport const SYSTEM_STREAM_SUBTYPE = {\n HEARTBEAT: 'heartbeat',\n CONNECTED: 'connected',\n DISCONNECTED: 'disconnected',\n RECONNECTING: 'reconnecting',\n} as const;\n\nexport type SystemStreamSubtype =\n (typeof SYSTEM_STREAM_SUBTYPE)[keyof typeof SYSTEM_STREAM_SUBTYPE];\n\n/**\n * System channel for connection-level events.\n */\nexport const SYSTEM_STREAM_CHANNEL = {\n SYSTEM: 'system',\n} as const;\n\nexport type SystemStreamChannel =\n (typeof SYSTEM_STREAM_CHANNEL)[keyof typeof SYSTEM_STREAM_CHANNEL];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Message Types (Merged from all domains)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * All message type categories.\n * Merged from system + all domain-specific types.\n *\n * To add a new domain's message types:\n * 1. Define `{DOMAIN}_STREAM_MESSAGE_TYPE` in the domain's streaming module\n * 2. Import and spread into this object\n */\nexport const STREAM_MESSAGE_TYPE = {\n ...SYSTEM_STREAM_MESSAGE_TYPE,\n ...FILES_STREAM_MESSAGE_TYPE,\n} as const;\n\nexport type StreamMessageType = SystemStreamMessageType | FilesStreamMessageType;\n\n/**\n * All message subtypes.\n * Merged from system + all domain-specific subtypes.\n *\n * To add a new domain's subtypes:\n * 1. Define `{DOMAIN}_STREAM_SUBTYPE` in the domain's streaming module\n * 2. Import and spread into this object\n */\nexport const STREAM_SUBTYPE = {\n ...SYSTEM_STREAM_SUBTYPE,\n ...FILES_STREAM_SUBTYPE,\n} as const;\n\nexport type StreamMessageSubtype = SystemStreamSubtype | FilesStreamSubtype;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Message Scope (Domain Identifier)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Message scope identifies the domain that owns the message.\n * Used for routing messages to the correct domain store.\n *\n * To add a new domain:\n * 1. Add the domain name to this constant\n * 2. Create domain streaming types in the domain's types folder\n */\nexport const STREAM_SCOPE = {\n FILES: 'files',\n SYSTEM: 'system',\n} as const;\n\nexport type StreamMessageScope = (typeof STREAM_SCOPE)[keyof typeof STREAM_SCOPE];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Stream Events (Merged from all domains)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * System stream events.\n */\nexport const SYSTEM_STREAM_EVENT = {\n CONNECTED: 'connected',\n DISCONNECTED: 'disconnected',\n HEARTBEAT: 'heartbeat',\n ERROR: 'error',\n} as const;\n\n/**\n * All stream events.\n * Merged from system + all domain-specific events.\n */\nexport const STREAM_EVENT = {\n ...SYSTEM_STREAM_EVENT,\n ...FILES_STREAM_EVENT,\n} as const;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Channel Constants (Merged from all domains)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * All channel prefixes (for subscription matching).\n */\nexport const STREAM_CHANNEL_PREFIX = {\n ...FILES_STREAM_CHANNEL_PREFIX,\n} as const;\n\n/**\n * All broadcast channels (user-scoped).\n */\nexport const STREAM_BROADCAST_CHANNEL = {\n ...SYSTEM_STREAM_CHANNEL,\n ...FILES_STREAM_BROADCAST_CHANNEL,\n} as const;\n\n/**\n * All possible channel patterns.\n * Union of system channel + all domain-specific channels.\n */\nexport type StreamChannel = SystemStreamChannel | FilesStreamChannel;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Connection Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Represents an active streaming connection\n */\nexport interface StreamConnection {\n /** Unique connection identifier */\n id: string;\n /** Authenticated user ID (undefined for anonymous) */\n userId?: string;\n /** Transport type (SSE or WebSocket) */\n transport: StreamTransportType;\n /** Subscribed channels */\n channels: Set<string>;\n /** Connection creation timestamp */\n createdAt: Date;\n /** Last activity timestamp (for cleanup) */\n lastActivity: Date;\n /** Additional connection metadata */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Serializable version of StreamConnection for storage/transmission\n */\nexport interface StreamConnectionInfo {\n id: string;\n userId?: string;\n transport: StreamTransportType;\n channels: string[];\n createdAt: string;\n lastActivity: string;\n metadata?: Record<string, unknown>;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Stream Message\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Message sent to streaming clients.\n *\n * @typeParam T - Payload data type (defaults to unknown)\n */\nexport interface StreamMessage<T = unknown> {\n /** Event name (e.g., 'upload:progress', 'connected', 'heartbeat') */\n event: string;\n /** Event payload data */\n data: T;\n /** Optional message ID (for SSE reconnection) */\n id?: string;\n /** Optional retry interval in ms (for SSE) */\n retry?: number;\n /** Channel this message was sent to */\n channel?: string;\n\n // ─────────────────────────────────────────────────────────────────────────\n // Metadata for filtering/routing\n // ─────────────────────────────────────────────────────────────────────────\n\n /** Message type category */\n type?: StreamMessageType;\n /** Message subtype for granular filtering */\n subtype?: StreamMessageSubtype;\n /** Domain scope for routing to domain stores */\n scope?: StreamMessageScope;\n /** Transport used (sse or websocket) */\n transport?: StreamTransportType;\n /** Timestamp when message was created */\n timestamp?: number;\n /** Correlation ID for request tracing */\n correlationId?: string;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Progress Types (Re-export from domains)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Progress data union type.\n * Currently files-only, will expand as domains add streaming support.\n */\nexport type StreamProgressData = FilesStreamProgressData;\n\n/**\n * Progress status union type.\n * Currently files-only, will expand as domains add streaming support.\n */\nexport type StreamProgressStatus = FilesStreamProgressStatus;\n\n/**\n * All progress status constants.\n */\nexport const STREAM_PROGRESS_STATUS = {\n ...FILES_STREAM_PROGRESS_STATUS,\n} as const;\n\n// Re-export specific progress types for convenience\nexport type { FilesUploadStreamProgress, FilesDownloadStreamProgress, FilesGenerateStreamProgress };\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Channel Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Channel subscription record\n */\nexport interface ChannelSubscription {\n /** Channel name */\n channel: string;\n /** Connection ID */\n connectionId: string;\n /** Subscription timestamp */\n subscribedAt: Date;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Auth Adapter Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Result of authentication attempt\n */\nexport interface StreamAuthResult {\n /** Whether authentication succeeded */\n authenticated: boolean;\n /** User ID (if authenticated) */\n userId?: string;\n /** Allowed channel patterns (e.g., ['upload:', 'generate:']) */\n scopes?: string[];\n /** Additional auth metadata */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Base configuration for auth adapters\n */\nexport interface StreamAuthAdapterConfig {\n /** Adapter name for logging */\n name: string;\n /** Whether adapter is enabled */\n enabled?: boolean;\n}\n\n/**\n * Configuration for token-based auth adapter\n */\nexport interface TokenAuthAdapterConfig extends StreamAuthAdapterConfig {\n /** Token verification function */\n verifyToken: (token: string) => Promise<{\n valid: boolean;\n userId?: string;\n scopes?: string[];\n }>;\n /** Header name for token (default: 'Authorization') */\n headerName?: string;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Transport Adapter Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Base configuration for transport adapters\n */\nexport interface StreamTransportAdapterConfig {\n /** Adapter name for logging */\n name: string;\n /** Heartbeat interval in ms (default: 30000) */\n heartbeatInterval?: number;\n /** Maximum concurrent connections (default: 1000) */\n maxConnections?: number;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Manager Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Configuration for StreamBroadcaster\n */\nexport interface StreamBroadcasterConfig {\n /** Heartbeat interval in ms */\n heartbeatInterval?: number;\n /** Connection timeout in ms (for cleanup) */\n connectionTimeout?: number;\n /** Maximum stale connection age in ms before cleanup */\n maxStaleAge?: number;\n}\n\n/**\n * Statistics for stream manager\n */\nexport interface StreamManagerStats {\n /** Total active connections */\n totalConnections: number;\n /** Connections by transport type */\n connectionsByTransport: Record<StreamTransportType, number>;\n /** Total channel subscriptions */\n totalSubscriptions: number;\n /** Unique channels with subscribers */\n activeChannels: number;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Hook Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Return type for useStreamConnection hook\n *\n * Note: Errors are added to the global error store automatically.\n * Use useErrorStore or error hooks to access connection errors.\n */\nexport interface UseStreamConnectionResult {\n /** Whether connection is established */\n connected: boolean;\n /** Reconnect function */\n reconnect: () => void;\n /** Disconnect function */\n disconnect: () => void;\n}\n\n/**\n * Options for useStreamConnection hook\n *\n * @template T - The expected message data type (defaults to unknown)\n *\n * @example\n * ```typescript\n * // Without generic (message.data is unknown)\n * useStreamConnection({\n * channels: ['uploads'],\n * onMessage: (message) => { ... }\n * });\n *\n * // With generic (message.data is properly typed)\n * useStreamConnection<FilesUploadStreamProgress>({\n * channels: [`upload:${fileId}`],\n * onMessage: (message) => {\n * // message.data is FilesUploadStreamProgress\n * console.log(message.data.percentage);\n * }\n * });\n * ```\n */\nexport interface UseStreamConnectionOptions<T = unknown> {\n /** Channels to subscribe to */\n channels: StreamChannel[];\n /** API endpoint URL (default: '/api/events/stream') */\n endpoint?: string;\n /** Whether to auto-connect on mount (default: true) */\n autoConnect?: boolean;\n /** Reconnect on error (default: true) */\n autoReconnect?: boolean;\n /** Max reconnect attempts (default: 5) */\n maxReconnectAttempts?: number;\n /** Reconnect delay in ms (default: 1000) */\n reconnectDelay?: number;\n /** Callback when connected */\n onConnect?: () => void;\n /** Callback when disconnected */\n onDisconnect?: () => void;\n /** Callback on error */\n onError?: (error: PackageErrorLike) => void;\n /** Callback on message received (message.data is typed as T) */\n onMessage?: (message: StreamMessage<T>) => void;\n\n // ─────────────────────────────────────────────────────────────────────────\n // Response Parsing Options\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Auto-unwrap SuccessResponse format ({ success, data, ... } → data).\n * Default: true (for Plyaz internal services).\n * Set to false for 3rd party services that don't use this format.\n */\n unwrapSuccessResponse?: boolean;\n\n /**\n * Custom response parser for full control over data extraction.\n * When provided, overrides `unwrapSuccessResponse`.\n * Useful for 3rd party services with different response formats.\n *\n * @example\n * ```typescript\n * // 3rd party service returns { result: { ... } }\n * responseParser: (raw) => (raw as { result: T }).result\n * ```\n */\n responseParser?: (rawData: unknown) => T;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// useStreamManager Hook Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Options for useStreamManager hook\n *\n * Used by PlyazProvider to manage SSE connection lifecycle.\n */\nexport interface UseStreamManagerOptions {\n /** Streaming configuration (required when enabled) */\n config?: CorePlyazStreamConfig;\n /** Root store hook for accessing stream store */\n store: RootStoreHook;\n /** Enable verbose logging */\n verbose?: boolean;\n /** Whether streaming is enabled (default: false) */\n enabled?: boolean;\n}\n\n/**\n * Result type for useStreamManager hook\n *\n * Note: Errors are added to the global error store automatically.\n * Use useErrorStore or error hooks to access connection errors.\n */\nexport interface UseStreamManagerResult {\n /** Whether connected to SSE */\n connected: boolean;\n /** Subscribed channels */\n channels: StreamChannel[];\n /** Whether streaming is enabled */\n enabled: boolean;\n}\n","/**\n * Service Keys Constants\n *\n * Centralized service key constants for service registry and dependency injection.\n * Use these constants instead of string literals for type safety and consistency.\n *\n * @example\n * ```typescript\n * import { SERVICE_KEYS } from '@plyaz/types/core/services';\n *\n * class MyService {\n * static readonly serviceKey = SERVICE_KEYS.EXAMPLE;\n * }\n *\n * // Use in service registry\n * const service = ServiceRegistry.get(SERVICE_KEYS.EXAMPLE);\n * ```\n */\n\n/**\n * Keys for all available domain services .\n * These keys are used for service registration and lookup in the ServiceRegistry.\n */\nexport const SERVICE_KEYS = {\n /** Example domain service (backend) */\n EXAMPLE: 'example',\n /** Example domain service (frontend) */\n EXAMPLE_FRONTEND: 'example-frontend',\n /** Files domain service (backend) */\n FILES: 'files',\n /** Files domain service (frontend) */\n FILES_FRONTEND: 'files-frontend',\n /** Feature flags service */\n FEATURE_FLAGS: 'featureFlags',\n /** Campaign domain service */\n CAMPAIGN: 'campaign',\n /** Campaign frontend service */\n CAMPAIGN_FRONTEND: 'campaign-frontend',\n} as const;\n\n/**\n * Type for service keys.\n * Ensures only valid service keys can be used.\n */\nexport type ServiceKey = (typeof SERVICE_KEYS)[keyof typeof SERVICE_KEYS];\n\n/**\n * Array of all service keys for iteration.\n * Useful for validating service configurations or iterating over all services.\n */\nexport const ALL_SERVICE_KEYS = Object.values(SERVICE_KEYS) as ServiceKey[];\n","/**\n * Route Handler Types\n *\n * Framework-agnostic types for route handlers used by @plyaz/core framework adapters.\n * These types are used by Next.js, Express, and NestJS route factories.\n */\n\n// Re-export HttpMethod from api for convenience\nexport type { HttpMethod } from '../../api/config/types';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// BASE PARAM/QUERY TYPES\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Base params type - allows simple interfaces like { id: string }\n * Also supports catch-all routes where params can be string[]\n */\nexport type CoreRouteParams = { [key: string]: string | string[] | undefined };\n\n/**\n * Base query type - allows simple interfaces for query params\n */\nexport type CoreRouteQuery = { [key: string]: string | undefined };\n\n// ─────────────────────────────────────────────────────────────────────────────\n// BASE ROUTE CONTEXT\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Base route context interface (framework-agnostic)\n */\nexport interface RouteContext<TParams = CoreRouteParams, TQuery = CoreRouteQuery> {\n /** Route parameters (e.g., from /users/:id -> { id: string }) */\n params: TParams;\n /** Query string parameters */\n query: TQuery;\n /** Request headers */\n headers: Record<string, string | undefined>;\n /** HTTP method */\n method: string;\n /** Original request object (framework-specific) */\n request: unknown;\n}\n\n/**\n * Handler function signature for route operations\n */\nexport type RouteHandler<TService, TResult = unknown> = (\n service: TService,\n ctx: RouteContext\n) => Promise<TResult>;\n\n/**\n * Configuration for a route with multiple HTTP method handlers\n */\nexport interface RouteHandlerConfig<TService> {\n /** Service name (registered in ServiceRegistry) or factory function */\n service: string | (() => Promise<TService>);\n /** Handlers for each HTTP method */\n handlers: {\n GET?: RouteHandler<TService>;\n POST?: RouteHandler<TService>;\n PUT?: RouteHandler<TService>;\n PATCH?: RouteHandler<TService>;\n DELETE?: RouteHandler<TService>;\n OPTIONS?: RouteHandler<TService>;\n HEAD?: RouteHandler<TService>;\n };\n /** Custom success message template (default: 'Operation successful') */\n successMessage?: string | ((method: string) => string);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// HTTP METHOD TYPES\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Handler type definitions per HTTP method\n * Uses looser constraints to allow interfaces without index signatures\n */\nexport interface MethodHandlerTypes<\n TParams extends CoreRouteParams = CoreRouteParams,\n TQuery extends CoreRouteQuery = CoreRouteQuery,\n TBody = unknown,\n TResponse = unknown,\n> {\n params?: TParams;\n query?: TQuery;\n body?: TBody;\n response?: TResponse;\n}\n\n/**\n * Handler types map for all HTTP methods\n */\nexport interface HandlersTypeMap {\n GET?: MethodHandlerTypes;\n POST?: MethodHandlerTypes;\n PUT?: MethodHandlerTypes;\n PATCH?: MethodHandlerTypes;\n DELETE?: MethodHandlerTypes;\n OPTIONS?: MethodHandlerTypes;\n HEAD?: MethodHandlerTypes;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// DEFAULT MESSAGES\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Default success messages by HTTP method\n */\nexport const DEFAULT_SUCCESS_MESSAGES: Record<string, string> = {\n GET: 'Retrieved successfully',\n POST: 'Created successfully',\n PUT: 'Updated successfully',\n PATCH: 'Updated successfully',\n DELETE: 'Deleted successfully',\n OPTIONS: 'Options retrieved',\n HEAD: 'Head retrieved',\n};\n","/**\n * File Operation Types\n *\n * Types for file operation utilities (browser and Node.js).\n * Used by @plyaz/core and @plyaz/storage packages.\n */\n\n// ─────────────────────────────────────────────────────────────────────────────\n// FILE KEY TYPES\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Parsed file key components\n */\nexport interface ParsedFileKey {\n /** The entity type (e.g., 'user', 'organization') */\n entityType?: string;\n /** The entity ID */\n entityId?: string;\n /** The file category (e.g., 'documents', 'images') */\n category?: string;\n /** The filename with extension */\n filename?: string;\n /** The full original key */\n raw: string;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MIME TYPE MAPPING\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Common MIME types and their extensions\n */\nexport const MIME_TYPE_EXTENSIONS: Record<string, string> = {\n 'application/pdf': 'pdf',\n 'application/msword': 'doc',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'docx',\n 'application/vnd.ms-excel': 'xls',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'xlsx',\n 'application/vnd.ms-powerpoint': 'ppt',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'pptx',\n 'application/json': 'json',\n 'application/xml': 'xml',\n 'application/zip': 'zip',\n 'text/plain': 'txt',\n 'text/html': 'html',\n 'text/css': 'css',\n 'text/csv': 'csv',\n 'image/png': 'png',\n 'image/jpeg': 'jpg',\n 'image/gif': 'gif',\n 'image/webp': 'webp',\n 'image/svg+xml': 'svg',\n 'audio/mpeg': 'mp3',\n 'audio/wav': 'wav',\n 'video/mp4': 'mp4',\n 'video/webm': 'webm',\n};\n\n/**\n * File size units\n */\nexport const FILE_SIZE_UNITS = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'] as const;\n\nexport type FileSizeUnit = (typeof FILE_SIZE_UNITS)[number];\n\n/** Base multiplier for file size calculations (1 KB = 1024 bytes) */\nconst BYTES_PER_KB = 1024;\n\n/**\n * Multipliers for file size units\n */\nexport const FILE_SIZE_MULTIPLIERS: Record<string, number> = {\n B: 1,\n KB: BYTES_PER_KB,\n MB: BYTES_PER_KB * BYTES_PER_KB,\n GB: BYTES_PER_KB * BYTES_PER_KB * BYTES_PER_KB,\n TB: BYTES_PER_KB * BYTES_PER_KB * BYTES_PER_KB * BYTES_PER_KB,\n PB: BYTES_PER_KB * BYTES_PER_KB * BYTES_PER_KB * BYTES_PER_KB * BYTES_PER_KB,\n BYTES: 1,\n};\n"]}
@@ -523,6 +523,10 @@ var SERVICE_KEYS = {
523
523
  EXAMPLE: "example",
524
524
  /** Example domain service (frontend) */
525
525
  EXAMPLE_FRONTEND: "example-frontend",
526
+ /** Files domain service (backend) */
527
+ FILES: "files",
528
+ /** Files domain service (frontend) */
529
+ FILES_FRONTEND: "files-frontend",
526
530
  /** Feature flags service */
527
531
  FEATURE_FLAGS: "featureFlags",
528
532
  /** Campaign domain service */