@syntropysoft/syntropyfront 0.4.4 → 0.4.6

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/core/breadcrumbs/BreadcrumbStore.js","../src/core/agent/ConfigurationManager.js","../src/core/agent/QueueManager.js","../src/core/retry/RetryManager.js","../src/utils/RobustSerializer.js","../src/core/agent/HttpTransport.js","../src/core/database/DatabaseConfigManager.js","../src/core/database/DatabaseConnectionManager.js","../src/core/database/DatabaseTransactionManager.js","../src/core/database/DatabaseManager.js","../src/core/database/StorageManager.js","../src/core/retry/RetryLogicManager.js","../src/core/database/SerializationManager.js","../src/core/persistent/PersistentBufferManager.js","../src/core/agent/Agent.js","../src/core/context/ContextCollector.js","../src/interceptors/Interceptors.js","../src/index.js"],"sourcesContent":["/**\n * BreadcrumbStore - Almacén de huellas del usuario\n * Mantiene un historial de las últimas acciones del usuario\n */\nexport class BreadcrumbStore {\n constructor(maxBreadcrumbs = 25) {\n this.maxBreadcrumbs = maxBreadcrumbs;\n this.breadcrumbs = [];\n this.agent = null;\n }\n\n /**\n * Configura el agent para envío automático\n * @param {Object} agent - Instancia del agent\n */\n setAgent(agent) {\n this.agent = agent;\n }\n\n /**\n * Configura el tamaño máximo de breadcrumbs\n * @param {number} maxBreadcrumbs - Nuevo tamaño máximo\n */\n setMaxBreadcrumbs(maxBreadcrumbs) {\n this.maxBreadcrumbs = maxBreadcrumbs;\n \n // Si el nuevo tamaño es menor, eliminar breadcrumbs excedentes\n if (this.breadcrumbs.length > this.maxBreadcrumbs) {\n this.breadcrumbs = this.breadcrumbs.slice(-this.maxBreadcrumbs);\n }\n }\n\n /**\n * Obtiene el tamaño máximo actual\n * @returns {number} Tamaño máximo de breadcrumbs\n */\n getMaxBreadcrumbs() {\n return this.maxBreadcrumbs;\n }\n\n /**\n * Añade un breadcrumb a la lista\n * @param {Object} crumb - El breadcrumb a añadir\n * @param {string} crumb.category - Categoría del evento (ui, network, error, etc.)\n * @param {string} crumb.message - Mensaje descriptivo\n * @param {Object} [crumb.data] - Datos adicionales opcionales\n */\n add(crumb) {\n const breadcrumb = {\n ...crumb,\n timestamp: new Date().toISOString(),\n };\n\n if (this.breadcrumbs.length >= this.maxBreadcrumbs) {\n this.breadcrumbs.shift(); // Elimina el más antiguo\n }\n \n this.breadcrumbs.push(breadcrumb);\n \n // Callback opcional para logging\n if (this.onBreadcrumbAdded) {\n this.onBreadcrumbAdded(breadcrumb);\n }\n \n // Enviar al agent si está configurado y habilitado\n if (this.agent && this.agent.isEnabled) {\n try {\n this.agent.sendBreadcrumbs([breadcrumb]);\n } catch (error) {\n console.warn('SyntropyFront: Error enviando breadcrumb al agent:', error);\n }\n }\n }\n\n /**\n * Devuelve todos los breadcrumbs\n * @returns {Array} Copia de todos los breadcrumbs\n */\n getAll() {\n return [...this.breadcrumbs];\n }\n\n /**\n * Limpia todos los breadcrumbs\n */\n clear() {\n this.breadcrumbs = [];\n }\n\n /**\n * Obtiene breadcrumbs por categoría\n * @param {string} category - Categoría a filtrar\n * @returns {Array} Breadcrumbs de la categoría especificada\n */\n getByCategory(category) {\n return this.breadcrumbs.filter(b => b.category === category);\n }\n}\n\n// Instancia singleton\nexport const breadcrumbStore = new BreadcrumbStore(); ","/**\n * ConfigurationManager - Maneja la configuración del Agent\n * Responsabilidad única: Gestionar configuración y validación\n */\nexport class ConfigurationManager {\n constructor() {\n this.endpoint = null;\n this.headers = {\n 'Content-Type': 'application/json'\n };\n this.batchSize = 10;\n this.batchTimeout = null;\n this.isEnabled = false;\n this.sendBreadcrumbs = false;\n this.encrypt = null;\n this.usePersistentBuffer = false;\n this.maxRetries = 5;\n this.baseDelay = 1000;\n this.maxDelay = 30000;\n }\n\n /**\n * Configura el manager\n * @param {Object} config - Configuración\n */\n configure(config) {\n this.endpoint = config.endpoint;\n this.headers = { ...this.headers, ...config.headers };\n this.batchSize = config.batchSize || this.batchSize;\n this.batchTimeout = config.batchTimeout;\n this.isEnabled = !!config.endpoint;\n this.encrypt = config.encrypt || null;\n this.usePersistentBuffer = config.usePersistentBuffer === true;\n this.maxRetries = config.maxRetries || this.maxRetries;\n \n // Lógica simple: si hay batchTimeout = enviar breadcrumbs, sino = solo errores\n this.sendBreadcrumbs = !!config.batchTimeout;\n }\n\n /**\n * Verifica si el agent está habilitado\n */\n isAgentEnabled() {\n return this.isEnabled;\n }\n\n /**\n * Verifica si debe enviar breadcrumbs\n */\n shouldSendBreadcrumbs() {\n return this.sendBreadcrumbs;\n }\n\n /**\n * Obtiene la configuración actual\n */\n getConfig() {\n return {\n endpoint: this.endpoint,\n headers: this.headers,\n batchSize: this.batchSize,\n batchTimeout: this.batchTimeout,\n isEnabled: this.isEnabled,\n sendBreadcrumbs: this.sendBreadcrumbs,\n encrypt: this.encrypt,\n usePersistentBuffer: this.usePersistentBuffer,\n maxRetries: this.maxRetries,\n baseDelay: this.baseDelay,\n maxDelay: this.maxDelay\n };\n }\n} ","/**\n * QueueManager - Maneja la cola de envío y batching\n * Responsabilidad única: Gestionar cola de items y batching\n */\nexport class QueueManager {\n constructor(configManager) {\n this.config = configManager;\n this.queue = [];\n this.batchTimer = null;\n this.flushCallback = null; // Callback interno para flush automático\n }\n\n /**\n * Añade un item a la cola\n * @param {Object} item - Item a añadir\n */\n add(item) {\n this.queue.push(item);\n\n // Enviar inmediatamente si alcanza el tamaño del batch\n if (this.queue.length >= this.config.batchSize) {\n this.flush(this.flushCallback);\n } else if (this.config.batchSize && this.config.batchTimeout && !this.batchTimer) {\n // Solo programar timeout si batchTimeout está configurado\n this.batchTimer = setTimeout(() => {\n this.flush(this.flushCallback);\n }, this.config.batchTimeout);\n }\n }\n\n /**\n * Obtiene todos los items de la cola\n */\n getAll() {\n return [...this.queue];\n }\n\n /**\n * Limpia la cola\n */\n clear() {\n this.queue = [];\n this.clearTimer();\n }\n\n /**\n * Limpia el timer\n */\n clearTimer() {\n if (this.batchTimer) {\n clearTimeout(this.batchTimer);\n this.batchTimer = null;\n }\n }\n\n /**\n * Obtiene el tamaño de la cola\n */\n getSize() {\n return this.queue.length;\n }\n\n /**\n * Verifica si la cola está vacía\n */\n isEmpty() {\n return this.queue.length === 0;\n }\n\n /**\n * Flush de la cola (método que será llamado por el Agent)\n * @param {Function} flushCallback - Callback para procesar los items\n */\n async flush(flushCallback) {\n if (this.queue.length === 0) return;\n\n const itemsToSend = [...this.queue];\n this.queue = [];\n this.clearTimer();\n\n if (flushCallback) {\n await flushCallback(itemsToSend);\n }\n }\n} ","/**\n * RetryManager - Maneja el sistema de reintentos\n * Responsabilidad única: Gestionar reintentos con backoff exponencial\n */\nexport class RetryManager {\n constructor(configManager) {\n this.config = configManager;\n this.retryQueue = [];\n this.retryTimer = null;\n }\n\n /**\n * Añade items a la cola de reintentos\n * @param {Array} items - Items a reintentar\n * @param {number} retryCount - Número de reintento\n * @param {number} persistentId - ID en buffer persistente (opcional)\n */\n addToRetryQueue(items, retryCount = 1, persistentId = null) {\n const delay = Math.min(this.config.baseDelay * Math.pow(2, retryCount - 1), this.config.maxDelay);\n \n this.retryQueue.push({\n items,\n retryCount,\n persistentId,\n nextRetry: Date.now() + delay\n });\n\n this.scheduleRetry();\n }\n\n /**\n * Programa el próximo reintento\n */\n scheduleRetry() {\n if (this.retryTimer) return;\n\n const nextItem = this.retryQueue.find(item => item.nextRetry <= Date.now());\n if (!nextItem) return;\n\n this.retryTimer = setTimeout(() => {\n this.processRetryQueue();\n }, Math.max(0, nextItem.nextRetry - Date.now()));\n }\n\n /**\n * Procesa la cola de reintentos\n * @param {Function} sendCallback - Callback para enviar items\n * @param {Function} removePersistentCallback - Callback para remover del buffer persistente\n */\n async processRetryQueue(sendCallback, removePersistentCallback) {\n this.retryTimer = null;\n\n const now = Date.now();\n const itemsToRetry = this.retryQueue.filter(item => item.nextRetry <= now);\n \n for (const item of itemsToRetry) {\n try {\n if (sendCallback) {\n await sendCallback(item.items);\n }\n \n // ✅ Éxito: remover de cola de reintentos\n this.retryQueue = this.retryQueue.filter(q => q !== item);\n \n // Remover del buffer persistente si existe\n if (item.persistentId && removePersistentCallback) {\n await removePersistentCallback(item.persistentId);\n }\n \n console.log(`SyntropyFront: Reintento exitoso después de ${item.retryCount} intentos`);\n } catch (error) {\n console.warn(`SyntropyFront: Reintento ${item.retryCount} falló:`, error);\n \n if (item.retryCount >= this.config.maxRetries) {\n // ❌ Máximo de reintentos alcanzado\n this.retryQueue = this.retryQueue.filter(q => q !== item);\n console.error('SyntropyFront: Item excedió máximo de reintentos, datos perdidos');\n } else {\n // Programar próximo reintento\n item.retryCount++;\n item.nextRetry = Date.now() + Math.min(\n this.config.baseDelay * Math.pow(2, item.retryCount - 1), \n this.config.maxDelay\n );\n }\n }\n }\n\n // Programar próximo reintento si quedan items\n if (this.retryQueue.length > 0) {\n this.scheduleRetry();\n }\n }\n\n /**\n * Limpia la cola de reintentos\n */\n clear() {\n this.retryQueue = [];\n this.clearTimer();\n }\n\n /**\n * Limpia el timer\n */\n clearTimer() {\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n this.retryTimer = null;\n }\n }\n\n /**\n * Obtiene el tamaño de la cola de reintentos\n */\n getSize() {\n return this.retryQueue.length;\n }\n\n /**\n * Verifica si la cola de reintentos está vacía\n */\n isEmpty() {\n return this.retryQueue.length === 0;\n }\n} ","/**\n * RobustSerializer - Serializador robusto que maneja referencias circulares\n * Implementa una solución similar a flatted pero sin dependencias externas\n */\nexport class RobustSerializer {\n constructor() {\n this.seen = new WeakSet();\n this.circularRefs = new Map();\n this.refCounter = 0;\n }\n\n /**\n * Serializa un objeto de forma segura, manejando referencias circulares\n * @param {any} obj - Objeto a serializar\n * @returns {string} JSON string seguro\n */\n serialize(obj) {\n try {\n // Reset state\n this.seen = new WeakSet();\n this.circularRefs = new Map();\n this.refCounter = 0;\n\n // Serializar con manejo de referencias circulares\n const safeObj = this.makeSerializable(obj);\n \n // Convertir a JSON\n return JSON.stringify(safeObj);\n } catch (error) {\n console.error('SyntropyFront: Error en serialización robusta:', error);\n \n // Fallback: intentar serialización básica con información de error\n return JSON.stringify({\n __serializationError: true,\n error: error.message,\n originalType: typeof obj,\n isObject: obj !== null && typeof obj === 'object',\n timestamp: new Date().toISOString()\n });\n }\n }\n\n /**\n * Hace un objeto serializable, manejando referencias circulares\n * @param {any} obj - Objeto a procesar\n * @param {string} path - Ruta actual en el objeto\n * @returns {any} Objeto serializable\n */\n makeSerializable(obj, path = '') {\n // Casos primitivos\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean') {\n return obj;\n }\n\n // Casos especiales\n if (obj instanceof Date) {\n return {\n __type: 'Date',\n value: obj.toISOString()\n };\n }\n\n if (obj instanceof Error) {\n return {\n __type: 'Error',\n name: obj.name,\n message: obj.message,\n stack: obj.stack,\n cause: obj.cause ? this.makeSerializable(obj.cause, `${path}.cause`) : undefined\n };\n }\n\n if (obj instanceof RegExp) {\n return {\n __type: 'RegExp',\n source: obj.source,\n flags: obj.flags\n };\n }\n\n // Arrays\n if (Array.isArray(obj)) {\n // Verificar referencia circular\n if (this.seen.has(obj)) {\n const refId = this.circularRefs.get(obj);\n return {\n __circular: true,\n refId\n };\n }\n\n this.seen.add(obj);\n const refId = `ref_${++this.refCounter}`;\n this.circularRefs.set(obj, refId);\n\n return obj.map((item, index) => \n this.makeSerializable(item, `${path}[${index}]`)\n );\n }\n\n // Objetos\n if (typeof obj === 'object') {\n // Verificar referencia circular\n if (this.seen.has(obj)) {\n const refId = this.circularRefs.get(obj);\n return {\n __circular: true,\n refId\n };\n }\n\n this.seen.add(obj);\n const refId = `ref_${++this.refCounter}`;\n this.circularRefs.set(obj, refId);\n\n const result = {};\n\n // Procesar propiedades del objeto\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n try {\n const value = obj[key];\n const safeValue = this.makeSerializable(value, `${path}.${key}`);\n result[key] = safeValue;\n } catch (error) {\n // Si falla la serialización de una propiedad, la omitimos\n result[key] = {\n __serializationError: true,\n error: error.message,\n propertyName: key\n };\n }\n }\n }\n\n // Procesar símbolos si están disponibles\n if (Object.getOwnPropertySymbols) {\n const symbols = Object.getOwnPropertySymbols(obj);\n for (const symbol of symbols) {\n try {\n const value = obj[symbol];\n const safeValue = this.makeSerializable(value, `${path}[Symbol(${symbol.description})]`);\n result[`__symbol_${symbol.description || 'anonymous'}`] = safeValue;\n } catch (error) {\n result[`__symbol_${symbol.description || 'anonymous'}`] = {\n __serializationError: true,\n error: error.message,\n symbolName: symbol.description || 'anonymous'\n };\n }\n }\n }\n\n return result;\n }\n\n // Funciones y otros tipos\n if (typeof obj === 'function') {\n return {\n __type: 'Function',\n name: obj.name || 'anonymous',\n length: obj.length,\n toString: `${obj.toString().substring(0, 200) }...`\n };\n }\n\n // Fallback para otros tipos\n return {\n __type: 'Unknown',\n constructor: obj.constructor ? obj.constructor.name : 'Unknown',\n toString: `${String(obj).substring(0, 200) }...`\n };\n }\n\n /**\n * Deserializa un objeto serializado con referencias circulares\n * @param {string} jsonString - JSON string a deserializar\n * @returns {any} Objeto deserializado\n */\n deserialize(jsonString) {\n try {\n const parsed = JSON.parse(jsonString);\n return this.restoreCircularRefs(parsed);\n } catch (error) {\n console.error('SyntropyFront: Error en deserialización:', error);\n return null;\n }\n }\n\n /**\n * Restaura referencias circulares en un objeto deserializado\n * @param {any} obj - Objeto a restaurar\n * @param {Map} refs - Mapa de referencias\n * @returns {any} Objeto con referencias restauradas\n */\n restoreCircularRefs(obj, refs = new Map()) {\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean') {\n return obj;\n }\n\n // Restaurar tipos especiales\n if (obj.__type === 'Date') {\n return new Date(obj.value);\n }\n\n if (obj.__type === 'Error') {\n const error = new Error(obj.message);\n error.name = obj.name;\n error.stack = obj.stack;\n if (obj.cause) {\n error.cause = this.restoreCircularRefs(obj.cause, refs);\n }\n return error;\n }\n\n if (obj.__type === 'RegExp') {\n return new RegExp(obj.source, obj.flags);\n }\n\n if (obj.__type === 'Function') {\n // No podemos restaurar funciones completamente, devolvemos info\n return `[Function: ${obj.name}]`;\n }\n\n // Arrays\n if (Array.isArray(obj)) {\n const result = [];\n refs.set(obj, result);\n\n for (let i = 0; i < obj.length; i++) {\n if (obj[i] && obj[i].__circular) {\n const refId = obj[i].refId;\n if (refs.has(refId)) {\n result[i] = refs.get(refId);\n } else {\n result[i] = null; // Referencia no encontrada\n }\n } else {\n result[i] = this.restoreCircularRefs(obj[i], refs);\n }\n }\n\n return result;\n }\n\n // Objetos\n if (typeof obj === 'object') {\n const result = {};\n refs.set(obj, result);\n\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n if (key.startsWith('__')) {\n // Propiedades especiales\n continue;\n }\n\n const value = obj[key];\n if (value && value.__circular) {\n const refId = value.refId;\n if (refs.has(refId)) {\n result[key] = refs.get(refId);\n } else {\n result[key] = null; // Referencia no encontrada\n }\n } else {\n result[key] = this.restoreCircularRefs(value, refs);\n }\n }\n }\n\n return result;\n }\n\n return obj;\n }\n\n /**\n * Serializa de forma segura para logging (versión simplificada)\n * @param {any} obj - Objeto a serializar\n * @returns {string} JSON string seguro para logs\n */\n serializeForLogging(obj) {\n try {\n return this.serialize(obj);\n } catch (error) {\n return JSON.stringify({\n __logError: true,\n message: 'Error serializando para logging',\n originalError: error.message,\n timestamp: new Date().toISOString()\n });\n }\n }\n}\n\n// Instancia singleton\nexport const robustSerializer = new RobustSerializer(); ","import { robustSerializer } from '../../utils/RobustSerializer.js';\n\n/**\n * HttpTransport - Maneja el envío HTTP\n * Responsabilidad única: Gestionar envío HTTP y serialización\n */\nexport class HttpTransport {\n constructor(configManager) {\n this.config = configManager;\n }\n\n /**\n * Envía datos al backend\n * @param {Array} items - Items a enviar\n */\n async send(items) {\n const payload = {\n timestamp: new Date().toISOString(),\n items\n };\n\n // ✅ SERIALIZACIÓN ROBUSTA: Usar serializador que maneja referencias circulares\n let serializedPayload;\n try {\n serializedPayload = robustSerializer.serialize(payload);\n } catch (error) {\n console.error('SyntropyFront: Error en serialización del payload:', error);\n \n // Fallback: intentar serialización básica con información de error\n serializedPayload = JSON.stringify({\n __serializationError: true,\n error: error.message,\n timestamp: new Date().toISOString(),\n itemsCount: items.length,\n fallbackData: 'Serialización falló, datos no enviados'\n });\n }\n\n const response = await fetch(this.config.endpoint, {\n method: 'POST',\n headers: this.config.headers,\n body: serializedPayload\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n return response.json();\n }\n\n /**\n * Aplica encriptación si está configurada\n * @param {*} data - Datos a encriptar\n */\n applyEncryption(data) {\n if (this.config.encrypt) {\n return this.config.encrypt(data);\n }\n return data;\n }\n\n /**\n * Verifica si el transport está configurado\n */\n isConfigured() {\n return !!this.config.endpoint;\n }\n} ","/**\n * DatabaseConfigManager - Maneja la configuración de IndexedDB\n * Responsabilidad única: Validar y gestionar la configuración de la base de datos\n */\nexport class DatabaseConfigManager {\n constructor(dbName, dbVersion, storeName) {\n this.dbName = dbName;\n this.dbVersion = dbVersion;\n this.storeName = storeName;\n }\n\n /**\n * Valida que la configuración sea correcta\n * @returns {Object} Resultado de validación\n */\n validateConfig() {\n const validationResult = {\n isValid: true,\n errors: [],\n timestamp: new Date().toISOString()\n };\n\n if (!this.dbName || typeof this.dbName !== 'string') {\n validationResult.isValid = false;\n validationResult.errors.push('dbName debe ser un string no vacío');\n }\n\n if (!this.dbVersion || typeof this.dbVersion !== 'number' || this.dbVersion < 1) {\n validationResult.isValid = false;\n validationResult.errors.push('dbVersion debe ser un número mayor a 0');\n }\n\n if (!this.storeName || typeof this.storeName !== 'string') {\n validationResult.isValid = false;\n validationResult.errors.push('storeName debe ser un string no vacío');\n }\n\n return validationResult;\n }\n\n /**\n * Verifica si IndexedDB está disponible en el entorno\n * @returns {Object} Resultado de disponibilidad\n */\n checkIndexedDBAvailability() {\n const availabilityResult = {\n isAvailable: false,\n reason: null,\n timestamp: new Date().toISOString()\n };\n\n if (typeof window === 'undefined') {\n availabilityResult.reason = 'No estamos en un entorno de browser';\n return availabilityResult;\n }\n\n if (!window.indexedDB) {\n availabilityResult.reason = 'IndexedDB no está disponible en este browser';\n return availabilityResult;\n }\n\n availabilityResult.isAvailable = true;\n return availabilityResult;\n }\n\n /**\n * Obtiene la configuración actual\n * @returns {Object} Configuración\n */\n getConfig() {\n return {\n dbName: this.dbName,\n dbVersion: this.dbVersion,\n storeName: this.storeName\n };\n }\n\n /**\n * Crea la configuración del object store\n * @returns {Object} Configuración del store\n */\n getStoreConfig() {\n return {\n keyPath: 'id',\n autoIncrement: true\n };\n }\n} ","/**\n * DatabaseConnectionManager - Maneja la conexión con IndexedDB\n * Responsabilidad única: Gestionar la apertura y cierre de conexiones\n */\nexport class DatabaseConnectionManager {\n constructor(configManager) {\n this.configManager = configManager;\n this.db = null;\n this.isAvailable = false;\n }\n\n /**\n * Inicializa la conexión con IndexedDB\n * @returns {Promise<Object>} Resultado de la inicialización\n */\n async init() {\n const initResult = {\n success: false,\n error: null,\n timestamp: new Date().toISOString()\n };\n\n try {\n // Validar configuración\n const configValidation = this.configManager.validateConfig();\n if (!configValidation.isValid) {\n initResult.error = `Configuración inválida: ${configValidation.errors.join(', ')}`;\n return initResult;\n }\n\n // Verificar disponibilidad de IndexedDB\n const availabilityCheck = this.configManager.checkIndexedDBAvailability();\n if (!availabilityCheck.isAvailable) {\n initResult.error = availabilityCheck.reason;\n return initResult;\n }\n\n // Abrir conexión\n const connectionResult = await this.openConnection();\n if (!connectionResult.success) {\n initResult.error = connectionResult.error;\n return initResult;\n }\n\n this.db = connectionResult.db;\n this.isAvailable = true;\n initResult.success = true;\n\n return initResult;\n } catch (error) {\n initResult.error = `Error inesperado: ${error.message}`;\n return initResult;\n }\n }\n\n /**\n * Abre la conexión con IndexedDB\n * @returns {Promise<Object>} Resultado de la conexión\n */\n openConnection() {\n return new Promise((resolve) => {\n const config = this.configManager.getConfig();\n const request = indexedDB.open(config.dbName, config.dbVersion);\n\n request.onerror = () => {\n resolve({\n success: false,\n error: 'Error abriendo IndexedDB',\n db: null\n });\n };\n\n request.onupgradeneeded = (event) => {\n const db = event.target.result;\n const storeConfig = this.configManager.getStoreConfig();\n \n if (!db.objectStoreNames.contains(config.storeName)) {\n db.createObjectStore(config.storeName, storeConfig);\n }\n };\n\n request.onsuccess = () => {\n resolve({\n success: true,\n error: null,\n db: request.result\n });\n };\n });\n }\n\n /**\n * Cierra la conexión con la base de datos\n * @returns {Object} Resultado del cierre\n */\n close() {\n const closeResult = {\n success: false,\n error: null,\n timestamp: new Date().toISOString()\n };\n\n try {\n if (this.db) {\n this.db.close();\n this.db = null;\n this.isAvailable = false;\n closeResult.success = true;\n } else {\n closeResult.error = 'No hay conexión activa para cerrar';\n }\n } catch (error) {\n closeResult.error = `Error cerrando conexión: ${error.message}`;\n }\n\n return closeResult;\n }\n\n /**\n * Verifica si la base de datos está disponible\n * @returns {boolean} True si está disponible\n */\n isDatabaseAvailable() {\n return this.isAvailable && this.db !== null;\n }\n\n /**\n * Obtiene la instancia de la base de datos\n * @returns {IDBDatabase|null} Instancia de la base de datos\n */\n getDatabase() {\n return this.isDatabaseAvailable() ? this.db : null;\n }\n} ","/**\n * DatabaseTransactionManager - Maneja las transacciones de IndexedDB\n * Responsabilidad única: Gestionar transacciones de lectura y escritura\n */\nexport class DatabaseTransactionManager {\n constructor(connectionManager, configManager) {\n this.connectionManager = connectionManager;\n this.configManager = configManager;\n }\n\n /**\n * Obtiene una transacción de lectura\n * @returns {IDBTransaction} Transacción de lectura\n * @throws {Error} Si la base de datos no está disponible\n */\n getReadTransaction() {\n this.ensureDatabaseAvailable();\n \n const config = this.configManager.getConfig();\n const db = this.connectionManager.getDatabase();\n \n return db.transaction([config.storeName], 'readonly');\n }\n\n /**\n * Obtiene una transacción de escritura\n * @returns {IDBTransaction} Transacción de escritura\n * @throws {Error} Si la base de datos no está disponible\n */\n getWriteTransaction() {\n this.ensureDatabaseAvailable();\n \n const config = this.configManager.getConfig();\n const db = this.connectionManager.getDatabase();\n \n return db.transaction([config.storeName], 'readwrite');\n }\n\n /**\n * Obtiene el object store para una transacción\n * @param {IDBTransaction} transaction - Transacción activa\n * @returns {IDBObjectStore} Object store\n */\n getObjectStore(transaction) {\n const config = this.configManager.getConfig();\n return transaction.objectStore(config.storeName);\n }\n\n /**\n * Ejecuta una operación de lectura de manera segura\n * @param {Function} operation - Operación a ejecutar\n * @returns {Promise<Object>} Resultado de la operación\n */\n async executeReadOperation(operation) {\n const operationResult = {\n success: false,\n data: null,\n error: null,\n timestamp: new Date().toISOString()\n };\n\n try {\n const transaction = this.getReadTransaction();\n const store = this.getObjectStore(transaction);\n \n const result = await operation(store);\n \n operationResult.success = true;\n operationResult.data = result;\n \n return operationResult;\n } catch (error) {\n operationResult.error = `Error en operación de lectura: ${error.message}`;\n return operationResult;\n }\n }\n\n /**\n * Ejecuta una operación de escritura de manera segura\n * @param {Function} operation - Operación a ejecutar\n * @returns {Promise<Object>} Resultado de la operación\n */\n async executeWriteOperation(operation) {\n const operationResult = {\n success: false,\n data: null,\n error: null,\n timestamp: new Date().toISOString()\n };\n\n try {\n const transaction = this.getWriteTransaction();\n const store = this.getObjectStore(transaction);\n \n const result = await operation(store);\n \n operationResult.success = true;\n operationResult.data = result;\n \n return operationResult;\n } catch (error) {\n operationResult.error = `Error en operación de escritura: ${error.message}`;\n return operationResult;\n }\n }\n\n /**\n * Verifica que la base de datos esté disponible\n * @throws {Error} Si la base de datos no está disponible\n */\n ensureDatabaseAvailable() {\n if (!this.connectionManager.isDatabaseAvailable()) {\n throw new Error('Database not available');\n }\n }\n\n /**\n * Obtiene información sobre el estado de las transacciones\n * @returns {Object} Estado de las transacciones\n */\n getTransactionStatus() {\n return {\n isDatabaseAvailable: this.connectionManager.isDatabaseAvailable(),\n storeName: this.configManager.getConfig().storeName,\n timestamp: new Date().toISOString()\n };\n }\n} ","import { DatabaseConfigManager } from './DatabaseConfigManager.js';\nimport { DatabaseConnectionManager } from './DatabaseConnectionManager.js';\nimport { DatabaseTransactionManager } from './DatabaseTransactionManager.js';\n\n/**\n * DatabaseManager - Coordinador de la gestión de IndexedDB\n * Responsabilidad única: Coordinar los managers especializados\n */\nexport class DatabaseManager {\n constructor(dbName, dbVersion, storeName) {\n this.configManager = new DatabaseConfigManager(dbName, dbVersion, storeName);\n this.connectionManager = new DatabaseConnectionManager(this.configManager);\n this.transactionManager = new DatabaseTransactionManager(this.connectionManager, this.configManager);\n }\n\n /**\n * Inicializa la conexión con IndexedDB\n */\n async init() {\n const initResult = await this.connectionManager.init();\n \n if (initResult.success) {\n console.log('SyntropyFront: Base de datos inicializada');\n } else {\n console.warn('SyntropyFront: Error inicializando base de datos:', initResult.error);\n }\n \n return initResult.success;\n }\n\n /**\n * Obtiene una transacción de lectura\n */\n getReadTransaction() {\n return this.transactionManager.getReadTransaction();\n }\n\n /**\n * Obtiene una transacción de escritura\n */\n getWriteTransaction() {\n return this.transactionManager.getWriteTransaction();\n }\n\n /**\n * Cierra la conexión con la base de datos\n */\n close() {\n const closeResult = this.connectionManager.close();\n \n if (!closeResult.success) {\n console.warn('SyntropyFront: Error cerrando base de datos:', closeResult.error);\n }\n \n return closeResult.success;\n }\n\n /**\n * Verifica si la base de datos está disponible\n */\n isDatabaseAvailable() {\n return this.connectionManager.isDatabaseAvailable();\n }\n\n // ===== Propiedades de compatibilidad =====\n \n /**\n * @deprecated Usar configManager.getConfig().dbName\n */\n get dbName() {\n return this.configManager.dbName;\n }\n\n /**\n * @deprecated Usar configManager.getConfig().dbVersion\n */\n get dbVersion() {\n return this.configManager.dbVersion;\n }\n\n /**\n * @deprecated Usar configManager.getConfig().storeName\n */\n get storeName() {\n return this.configManager.storeName;\n }\n\n /**\n * @deprecated Usar connectionManager.getDatabase()\n */\n get db() {\n return this.connectionManager.getDatabase();\n }\n\n /**\n * @deprecated Usar connectionManager.isDatabaseAvailable()\n */\n get isAvailable() {\n return this.connectionManager.isDatabaseAvailable();\n }\n}\n","/**\n * StorageManager - Maneja las operaciones CRUD de IndexedDB\n * Responsabilidad única: Gestionar operaciones de almacenamiento y recuperación\n */\nexport class StorageManager {\n constructor(databaseManager, serializationManager) {\n this.databaseManager = databaseManager;\n this.serializationManager = serializationManager;\n }\n\n /**\n * Guarda items en el almacenamiento\n * @param {Array} items - Items a guardar\n * @returns {Promise<number>} ID del item guardado\n */\n async save(items) {\n this.ensureDatabaseAvailable();\n\n const serializationResult = this.serializationManager.serialize(items);\n const serializedData = this.serializationManager.getData(serializationResult, '[]');\n\n const item = {\n items: serializedData,\n timestamp: new Date().toISOString(),\n retryCount: 0,\n serializationError: serializationResult.error\n };\n\n return this.executeWriteOperation(store => store.add(item));\n }\n\n /**\n * Obtiene todos los items del almacenamiento\n * @returns {Promise<Array>} Items deserializados\n */\n async retrieve() {\n if (!this.databaseManager.isDatabaseAvailable()) {\n return [];\n }\n\n const rawItems = await this.executeReadOperation(store => store.getAll());\n return this.deserializeItems(rawItems);\n }\n\n /**\n * Obtiene un item específico por ID\n * @param {number} id - ID del item\n * @returns {Promise<Object|null>} Item deserializado o null\n */\n async retrieveById(id) {\n if (!this.databaseManager.isDatabaseAvailable()) {\n return null;\n }\n\n const rawItem = await this.executeReadOperation(store => store.get(id));\n return rawItem ? this.deserializeItem(rawItem) : null;\n }\n\n /**\n * Remueve un item del almacenamiento\n * @param {number} id - ID del item a remover\n * @returns {Promise<void>}\n */\n async remove(id) {\n this.ensureDatabaseAvailable();\n return this.executeWriteOperation(store => store.delete(id));\n }\n\n /**\n * Actualiza un item en el almacenamiento\n * @param {number} id - ID del item\n * @param {Object} updates - Campos a actualizar\n * @returns {Promise<number>} ID del item actualizado\n */\n async update(id, updates) {\n this.ensureDatabaseAvailable();\n\n const currentItem = await this.retrieveById(id);\n if (!currentItem) {\n throw new Error('Item not found');\n }\n\n const updatedItem = { ...currentItem, ...updates };\n return this.executeWriteOperation(store => store.put(updatedItem));\n }\n\n /**\n * Limpia todo el almacenamiento\n * @returns {Promise<void>}\n */\n async clear() {\n this.ensureDatabaseAvailable();\n return this.executeWriteOperation(store => store.clear());\n }\n\n // ===== Métodos privados declarativos =====\n\n /**\n * Verifica que la base de datos esté disponible\n * @throws {Error} Si la base de datos no está disponible\n */\n ensureDatabaseAvailable() {\n if (!this.databaseManager.isDatabaseAvailable()) {\n throw new Error('Database not available');\n }\n }\n\n /**\n * Ejecuta una operación de lectura de manera declarativa\n * @param {Function} operation - Operación a ejecutar en el store\n * @returns {Promise<*>} Resultado de la operación\n */\n executeReadOperation(operation) {\n return new Promise((resolve, reject) => {\n try {\n const transaction = this.databaseManager.getReadTransaction();\n const store = transaction.objectStore(this.databaseManager.storeName);\n const request = operation(store);\n \n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Ejecuta una operación de escritura de manera declarativa\n * @param {Function} operation - Operación a ejecutar en el store\n * @returns {Promise<*>} Resultado de la operación\n */\n executeWriteOperation(operation) {\n return new Promise((resolve, reject) => {\n try {\n const transaction = this.databaseManager.getWriteTransaction();\n const store = transaction.objectStore(this.databaseManager.storeName);\n const request = operation(store);\n \n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Deserializa un array de items\n * @param {Array} rawItems - Items crudos de la base de datos\n * @returns {Array} Items deserializados\n */\n deserializeItems(rawItems) {\n return rawItems.map(item => this.deserializeItem(item));\n }\n\n /**\n * Deserializa un item individual\n * @param {Object} rawItem - Item crudo de la base de datos\n * @returns {Object} Item deserializado\n */\n deserializeItem(rawItem) {\n const deserializationResult = this.serializationManager.deserialize(rawItem.items);\n const deserializedItems = this.serializationManager.getData(deserializationResult, []);\n\n return {\n ...rawItem,\n items: deserializedItems,\n deserializationError: deserializationResult.error\n };\n }\n} ","import { robustSerializer } from '../../utils/RobustSerializer.js';\n\n/**\n * RetryLogicManager - Maneja la lógica de reintentos y limpieza\n * Responsabilidad única: Gestionar reintentos y limpieza de items fallidos\n */\nexport class RetryLogicManager {\n constructor(storageManager, configManager) {\n this.storageManager = storageManager;\n this.config = configManager;\n }\n\n /**\n * Intenta enviar items fallidos del buffer persistente\n * @param {Function} sendCallback - Callback para enviar items\n * @param {Function} removeCallback - Callback para remover items exitosos\n */\n async retryFailedItems(sendCallback, removeCallback) {\n if (!this.storageManager) {\n console.warn('SyntropyFront: Storage manager no disponible');\n return;\n }\n\n try {\n const failedItems = await this.storageManager.retrieve();\n \n for (const item of failedItems) {\n if (item.retryCount < this.config.maxRetries) {\n // Deserializar items del buffer\n let deserializedItems;\n try {\n if (typeof item.items === 'string') {\n deserializedItems = robustSerializer.deserialize(item.items);\n } else {\n deserializedItems = item.items;\n }\n } catch (error) {\n console.error('SyntropyFront: Error deserializando items del buffer:', error);\n await this.removeFailedItem(item.id);\n continue;\n }\n \n if (sendCallback) {\n try {\n await sendCallback(deserializedItems, item.retryCount + 1, item.id);\n \n // Si el envío fue exitoso, remover del buffer\n if (removeCallback) {\n await removeCallback(item.id);\n } else {\n await this.removeFailedItem(item.id);\n }\n \n console.log(`SyntropyFront: Reintento exitoso para item ${item.id}`);\n } catch (error) {\n console.warn(`SyntropyFront: Reintento falló para item ${item.id}:`, error);\n \n // Incrementar contador de reintentos\n await this.incrementRetryCount(item.id);\n }\n }\n } else {\n console.warn(`SyntropyFront: Item ${item.id} excedió máximo de reintentos, removiendo del buffer`);\n await this.removeFailedItem(item.id);\n }\n }\n } catch (error) {\n console.error('SyntropyFront: Error procesando reintentos:', error);\n }\n }\n\n /**\n * Incrementa el contador de reintentos de un item\n * @param {number} id - ID del item\n */\n async incrementRetryCount(id) {\n try {\n const currentItem = await this.storageManager.retrieveById(id);\n if (currentItem) {\n await this.storageManager.update(id, {\n retryCount: currentItem.retryCount + 1\n });\n }\n } catch (error) {\n console.error('SyntropyFront: Error incrementando contador de reintentos:', error);\n }\n }\n\n /**\n * Remueve un item fallido del buffer\n * @param {number} id - ID del item\n */\n async removeFailedItem(id) {\n try {\n await this.storageManager.remove(id);\n } catch (error) {\n console.error('SyntropyFront: Error removiendo item fallido:', error);\n }\n }\n\n /**\n * Limpia items que han excedido el máximo de reintentos\n */\n async cleanupExpiredItems() {\n try {\n const allItems = await this.storageManager.retrieve();\n const expiredItems = allItems.filter(item => item.retryCount >= this.config.maxRetries);\n \n for (const item of expiredItems) {\n await this.removeFailedItem(item.id);\n console.warn(`SyntropyFront: Item ${item.id} removido por exceder máximo de reintentos`);\n }\n \n if (expiredItems.length > 0) {\n console.log(`SyntropyFront: Limpieza completada, ${expiredItems.length} items removidos`);\n }\n } catch (error) {\n console.error('SyntropyFront: Error en limpieza de items expirados:', error);\n }\n }\n\n /**\n * Obtiene estadísticas de reintentos\n */\n async getRetryStats() {\n try {\n const allItems = await this.storageManager.retrieve();\n \n const stats = {\n totalItems: allItems.length,\n itemsByRetryCount: {},\n averageRetryCount: 0\n };\n\n if (allItems.length > 0) {\n const totalRetries = allItems.reduce((sum, item) => sum + item.retryCount, 0);\n stats.averageRetryCount = totalRetries / allItems.length;\n \n allItems.forEach(item => {\n const retryCount = item.retryCount;\n stats.itemsByRetryCount[retryCount] = (stats.itemsByRetryCount[retryCount] || 0) + 1;\n });\n }\n\n return stats;\n } catch (error) {\n console.error('SyntropyFront: Error obteniendo estadísticas de reintentos:', error);\n return {\n totalItems: 0,\n itemsByRetryCount: {},\n averageRetryCount: 0\n };\n }\n }\n} ","import { robustSerializer } from '../../utils/RobustSerializer.js';\n\n/**\n * SerializationManager - Maneja la serialización y deserialización de datos\n * Responsabilidad única: Gestionar la transformación de datos para almacenamiento\n */\nexport class SerializationManager {\n constructor() {\n this.serializer = robustSerializer;\n }\n\n /**\n * Serializa items con manejo declarativo de errores\n * @param {Array} items - Items a serializar\n * @returns {Object} Resultado de serialización\n */\n serialize(items) {\n const serializationResult = {\n success: false,\n data: null,\n error: null,\n timestamp: new Date().toISOString()\n };\n\n try {\n const serializedData = this.serializer.serialize(items);\n return {\n ...serializationResult,\n success: true,\n data: serializedData\n };\n } catch (error) {\n return {\n ...serializationResult,\n error: this.createSerializationError(error),\n data: this.createFallbackData(error)\n };\n }\n }\n\n /**\n * Deserializa datos con manejo declarativo de errores\n * @param {string} serializedData - Datos serializados\n * @returns {Object} Resultado de deserialización\n */\n deserialize(serializedData) {\n const deserializationResult = {\n success: false,\n data: null,\n error: null,\n timestamp: new Date().toISOString()\n };\n\n try {\n const deserializedData = this.serializer.deserialize(serializedData);\n return {\n ...deserializationResult,\n success: true,\n data: deserializedData\n };\n } catch (error) {\n return {\n ...deserializationResult,\n error: this.createDeserializationError(error),\n data: []\n };\n }\n }\n\n /**\n * Crea un error de serialización estructurado\n * @param {Error} error - Error original\n * @returns {Object} Error estructurado\n */\n createSerializationError(error) {\n return {\n type: 'serialization_error',\n message: error.message,\n originalError: error,\n timestamp: new Date().toISOString()\n };\n }\n\n /**\n * Crea un error de deserialización estructurado\n * @param {Error} error - Error original\n * @returns {Object} Error estructurado\n */\n createDeserializationError(error) {\n return {\n type: 'deserialization_error',\n message: error.message,\n originalError: error,\n timestamp: new Date().toISOString()\n };\n }\n\n /**\n * Crea datos de fallback cuando falla la serialización\n * @param {Error} error - Error que causó el fallback\n * @returns {string} Datos de fallback serializados\n */\n createFallbackData(error) {\n const fallbackPayload = {\n __serializationError: true,\n error: error.message,\n timestamp: new Date().toISOString(),\n fallbackData: 'Items no serializables - usando fallback'\n };\n\n return JSON.stringify(fallbackPayload);\n }\n\n /**\n * Verifica si un resultado de serialización fue exitoso\n * @param {Object} result - Resultado de serialización/deserialización\n * @returns {boolean} True si fue exitoso\n */\n isSuccessful(result) {\n return Boolean(result && result.success === true);\n }\n\n /**\n * Obtiene los datos de un resultado, con fallback\n * @param {Object} result - Resultado de serialización/deserialización\n * @param {*} fallback - Valor por defecto si falla\n * @returns {*} Datos o fallback\n */\n getData(result, fallback = null) {\n return this.isSuccessful(result) ? result.data : fallback;\n }\n} ","import { DatabaseManager } from '../database/DatabaseManager.js';\nimport { StorageManager } from '../database/StorageManager.js';\nimport { RetryLogicManager } from '../retry/RetryLogicManager.js';\nimport { SerializationManager } from '../database/SerializationManager.js';\n\n/**\n * PersistentBufferManager - Coordinador del buffer persistente\n * Responsabilidad única: Coordinar los componentes de almacenamiento persistente\n */\nexport class PersistentBufferManager {\n constructor(configManager) {\n this.config = configManager;\n this.usePersistentBuffer = false;\n \n // Inicializar componentes especializados\n this.databaseManager = new DatabaseManager(\n 'SyntropyFrontBuffer',\n 1,\n 'failedItems'\n );\n \n this.serializationManager = new SerializationManager();\n this.storageManager = new StorageManager(this.databaseManager, this.serializationManager);\n this.retryLogicManager = new RetryLogicManager(this.storageManager, this.config);\n \n // Inicializar buffer persistente si está disponible\n this.initPersistentBuffer();\n }\n\n /**\n * Inicializa el buffer persistente\n */\n async initPersistentBuffer() {\n try {\n const success = await this.databaseManager.init();\n if (success) {\n this.usePersistentBuffer = this.config.usePersistentBuffer;\n console.log('SyntropyFront: Buffer persistente inicializado');\n }\n } catch (error) {\n console.warn('SyntropyFront: Error inicializando buffer persistente:', error);\n }\n }\n\n /**\n * Guarda items fallidos en el buffer persistente\n * @param {Array} items - Items a guardar\n */\n async save(items) {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n try {\n await this.storageManager.save(items);\n console.log('SyntropyFront: Items guardados en buffer persistente');\n } catch (error) {\n console.error('SyntropyFront: Error guardando en buffer persistente:', error);\n }\n }\n\n /**\n * Obtiene items fallidos del buffer persistente\n */\n async retrieve() {\n if (!this.usePersistentBuffer) {\n return [];\n }\n\n try {\n return await this.storageManager.retrieve();\n } catch (error) {\n console.error('SyntropyFront: Error obteniendo del buffer persistente:', error);\n return [];\n }\n }\n\n /**\n * Remueve items del buffer persistente\n * @param {number} id - ID del item a remover\n */\n async remove(id) {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n try {\n await this.storageManager.remove(id);\n } catch (error) {\n console.error('SyntropyFront: Error removiendo del buffer persistente:', error);\n }\n }\n\n /**\n * Intenta enviar items fallidos del buffer persistente\n * @param {Function} sendCallback - Callback para enviar items\n * @param {Function} removeCallback - Callback para remover items exitosos\n */\n async retryFailedItems(sendCallback, removeCallback) {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n await this.retryLogicManager.retryFailedItems(sendCallback, removeCallback);\n }\n\n /**\n * Limpia items que han excedido el máximo de reintentos\n */\n async cleanupExpiredItems() {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n await this.retryLogicManager.cleanupExpiredItems();\n }\n\n /**\n * Obtiene estadísticas del buffer persistente\n */\n async getStats() {\n if (!this.usePersistentBuffer) {\n return {\n totalItems: 0,\n itemsByRetryCount: {},\n averageRetryCount: 0,\n isAvailable: false\n };\n }\n\n try {\n const retryStats = await this.retryLogicManager.getRetryStats();\n return {\n ...retryStats,\n isAvailable: this.isAvailable()\n };\n } catch (error) {\n console.error('SyntropyFront: Error obteniendo estadísticas:', error);\n return {\n totalItems: 0,\n itemsByRetryCount: {},\n averageRetryCount: 0,\n isAvailable: this.isAvailable()\n };\n }\n }\n\n /**\n * Verifica si el buffer persistente está disponible\n */\n isAvailable() {\n return this.usePersistentBuffer && this.databaseManager.isDatabaseAvailable();\n }\n\n /**\n * Limpia todo el buffer persistente\n */\n async clear() {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n try {\n await this.storageManager.clear();\n console.log('SyntropyFront: Buffer persistente limpiado');\n } catch (error) {\n console.error('SyntropyFront: Error limpiando buffer persistente:', error);\n }\n }\n\n /**\n * Cierra la conexión con la base de datos\n */\n close() {\n this.databaseManager.close();\n this.usePersistentBuffer = false;\n }\n} ","/**\n * Copyright 2024 Syntropysoft\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ConfigurationManager } from './ConfigurationManager.js';\nimport { QueueManager } from './QueueManager.js';\nimport { RetryManager } from '../retry/RetryManager.js';\nimport { HttpTransport } from './HttpTransport.js';\nimport { PersistentBufferManager } from '../persistent/PersistentBufferManager.js';\n\n/**\n * Agent - Envía datos de trazabilidad al backend\n * Coordinador que usa componentes especializados para cada responsabilidad\n */\nexport class Agent {\n constructor() {\n // Componentes especializados\n this.config = new ConfigurationManager();\n this.queue = new QueueManager(this.config);\n this.retry = new RetryManager(this.config);\n this.transport = new HttpTransport(this.config);\n this.buffer = new PersistentBufferManager(this.config);\n \n // Configurar callbacks para coordinación\n this.setupCallbacks();\n }\n\n /**\n * Configura callbacks para coordinación entre componentes\n */\n setupCallbacks() {\n // Callback para el QueueManager cuando hace flush\n this.queue.flushCallback = async (items) => {\n try {\n await this.transport.send(items);\n console.log('SyntropyFront: Datos enviados exitosamente');\n } catch (error) {\n console.error('SyntropyFront Agent: Error enviando datos:', error);\n \n // Agregar a cola de reintentos\n this.retry.addToRetryQueue(items);\n \n // Guardar en buffer persistente\n await this.buffer.save(items);\n }\n };\n\n // Callback para el RetryManager cuando procesa reintentos\n this.retry.sendCallback = async (items) => {\n return await this.transport.send(items);\n };\n\n this.retry.removePersistentCallback = async (id) => {\n await this.buffer.remove(id);\n };\n\n // Callback para el PersistentBufferManager cuando retry items\n this.buffer.sendCallback = (items, retryCount, persistentId) => {\n this.retry.addToRetryQueue(items, retryCount, persistentId);\n };\n }\n\n\n\n /**\n * Configura el agent\n * @param {Object} config - Configuración del agent\n */\n configure(config) {\n this.config.configure(config);\n }\n\n /**\n * Envía un error al backend\n * @param {Object} errorPayload - Payload del error\n * @param {Object} context - Contexto adicional (opcional)\n */\n sendError(errorPayload, context = null) {\n if (!this.config.isAgentEnabled()) {\n console.warn('SyntropyFront Agent: No configurado, error no enviado');\n return;\n }\n\n // Agregar contexto si está disponible\n const payloadWithContext = context ? {\n ...errorPayload,\n context\n } : errorPayload;\n\n // Aplicar encriptación si está configurada\n const dataToSend = this.transport.applyEncryption(payloadWithContext);\n\n this.queue.add({\n type: 'error',\n data: dataToSend,\n timestamp: new Date().toISOString()\n });\n }\n\n /**\n * Envía breadcrumbs al backend\n * @param {Array} breadcrumbs - Lista de breadcrumbs\n */\n sendBreadcrumbs(breadcrumbs) {\n // Solo enviar breadcrumbs si está habilitado (batchTimeout configurado)\n if (!this.config.isAgentEnabled() || !this.config.shouldSendBreadcrumbs() || !breadcrumbs.length) {\n return;\n }\n\n // Aplicar encriptación si está configurada\n const dataToSend = this.transport.applyEncryption(breadcrumbs);\n\n this.queue.add({\n type: 'breadcrumbs',\n data: dataToSend,\n timestamp: new Date().toISOString()\n });\n }\n\n /**\n * Añade un item a la cola de envío (método público para compatibilidad)\n * @param {Object} item - Item a añadir\n */\n addToQueue(item) {\n this.queue.add(item);\n }\n\n /**\n * Añade items a la cola de reintentos (método público para compatibilidad)\n * @param {Array} items - Items a reintentar\n * @param {number} retryCount - Número de reintento\n * @param {number} persistentId - ID en buffer persistente (opcional)\n */\n addToRetryQueue(items, retryCount = 1, persistentId = null) {\n this.retry.addToRetryQueue(items, retryCount, persistentId);\n }\n\n /**\n * Procesa la cola de reintentos (método público para compatibilidad)\n */\n async processRetryQueue() {\n await this.retry.processRetryQueue(\n this.retry.sendCallback,\n this.retry.removePersistentCallback\n );\n }\n\n /**\n * Envía todos los items en cola\n */\n async flush() {\n await this.queue.flush(this.queue.flushCallback);\n }\n\n /**\n * Fuerza el envío inmediato de todos los datos pendientes\n */\n async forceFlush() {\n await this.flush();\n \n // También intentar enviar items en cola de reintentos\n if (!this.retry.isEmpty()) {\n console.log('SyntropyFront: Intentando enviar items en cola de reintentos...');\n await this.processRetryQueue();\n }\n }\n\n /**\n * Obtiene estadísticas del agent\n * @returns {Object} Estadísticas\n */\n getStats() {\n const config = this.config.getConfig();\n return {\n queueLength: this.queue.getSize(),\n retryQueueLength: this.retry.getSize(),\n isEnabled: this.config.isAgentEnabled(),\n usePersistentBuffer: config.usePersistentBuffer,\n maxRetries: config.maxRetries\n };\n }\n\n /**\n * Intenta enviar items fallidos del buffer persistente\n */\n async retryFailedItems() {\n await this.buffer.retryFailedItems(this.buffer.sendCallback);\n }\n\n /**\n * Desactiva el agent\n */\n disable() {\n this.config.configure({ endpoint: null }); // Deshabilitar\n this.queue.clear();\n this.retry.clear();\n }\n}\n\n// Instancia singleton\nexport const agent = new Agent(); ","/**\n * ContextCollector - Recolector dinámico de contexto\n * Sistema elegante para recolectar datos según lo que pida el usuario\n * Por defecto: Sets curados y seguros\n * Configuración específica: El usuario elige exactamente qué quiere\n */\nexport class ContextCollector {\n constructor() {\n // Sets curados por defecto (seguros y útiles)\n this.defaultContexts = {\n device: {\n userAgent: () => navigator.userAgent,\n language: () => navigator.language,\n screen: () => ({\n width: window.screen.width,\n height: window.screen.height\n }),\n timezone: () => Intl.DateTimeFormat().resolvedOptions().timeZone\n },\n window: {\n url: () => window.location.href,\n viewport: () => ({\n width: window.innerWidth,\n height: window.innerHeight\n }),\n title: () => document.title\n },\n session: {\n sessionId: () => this.generateSessionId(),\n pageLoadTime: () => performance.now()\n },\n ui: {\n visibility: () => document.visibilityState,\n activeElement: () => document.activeElement ? {\n tagName: document.activeElement.tagName\n } : null\n },\n network: {\n online: () => navigator.onLine,\n connection: () => navigator.connection ? {\n effectiveType: navigator.connection.effectiveType\n } : null\n }\n };\n\n // Mapeo completo de todos los campos disponibles\n this.allFields = {\n device: {\n userAgent: () => navigator.userAgent,\n language: () => navigator.language,\n languages: () => navigator.languages,\n screen: () => ({\n width: window.screen.width,\n height: window.screen.height,\n availWidth: window.screen.availWidth,\n availHeight: window.screen.availHeight,\n colorDepth: window.screen.colorDepth,\n pixelDepth: window.screen.pixelDepth\n }),\n timezone: () => Intl.DateTimeFormat().resolvedOptions().timeZone,\n cookieEnabled: () => navigator.cookieEnabled,\n doNotTrack: () => navigator.doNotTrack\n },\n window: {\n url: () => window.location.href,\n pathname: () => window.location.pathname,\n search: () => window.location.search,\n hash: () => window.location.hash,\n referrer: () => document.referrer,\n title: () => document.title,\n viewport: () => ({\n width: window.innerWidth,\n height: window.innerHeight\n })\n },\n storage: {\n localStorage: () => {\n const keys = Object.keys(localStorage);\n return {\n keys: keys.length,\n size: JSON.stringify(localStorage).length,\n keyNames: keys // Solo nombres, no valores\n };\n },\n sessionStorage: () => {\n const keys = Object.keys(sessionStorage);\n return {\n keys: keys.length,\n size: JSON.stringify(sessionStorage).length,\n keyNames: keys // Solo nombres, no valores\n };\n }\n },\n network: {\n online: () => navigator.onLine,\n connection: () => navigator.connection ? {\n effectiveType: navigator.connection.effectiveType,\n downlink: navigator.connection.downlink,\n rtt: navigator.connection.rtt\n } : null\n },\n ui: {\n focused: () => document.hasFocus(),\n visibility: () => document.visibilityState,\n activeElement: () => document.activeElement ? {\n tagName: document.activeElement.tagName,\n id: document.activeElement.id,\n className: document.activeElement.className\n } : null\n },\n performance: {\n memory: () => window.performance && window.performance.memory ? {\n used: Math.round(window.performance.memory.usedJSHeapSize / 1048576),\n total: Math.round(window.performance.memory.totalJSHeapSize / 1048576),\n limit: Math.round(window.performance.memory.jsHeapSizeLimit / 1048576)\n } : null,\n timing: () => window.performance ? {\n navigationStart: window.performance.timing.navigationStart,\n loadEventEnd: window.performance.timing.loadEventEnd\n } : null\n },\n session: {\n sessionId: () => this.generateSessionId(),\n startTime: () => new Date().toISOString(),\n pageLoadTime: () => performance.now()\n }\n };\n }\n\n /**\n * Recolecta contexto según la configuración\n * @param {Object} contextConfig - Configuración de contexto\n * @returns {Object} Contexto recolectado\n */\n collect(contextConfig = {}) {\n const context = {};\n\n Object.entries(contextConfig).forEach(([contextType, config]) => {\n try {\n if (config === true) {\n // Usar set curado por defecto\n context[contextType] = this.collectDefaultContext(contextType);\n } else if (Array.isArray(config)) {\n // Configuración específica: array de campos\n context[contextType] = this.collectSpecificFields(contextType, config);\n } else if (config === false) {\n // Explícitamente deshabilitado\n // No hacer nada\n } else {\n console.warn(`SyntropyFront: Configuración de contexto inválida para ${contextType}:`, config);\n }\n } catch (error) {\n console.warn(`SyntropyFront: Error recolectando contexto ${contextType}:`, error);\n context[contextType] = { error: 'Failed to collect' };\n }\n });\n\n return context;\n }\n\n /**\n * Recolecta el set curado por defecto\n * @param {string} contextType - Tipo de contexto\n * @returns {Object} Contexto por defecto\n */\n collectDefaultContext(contextType) {\n const defaultContext = this.defaultContexts[contextType];\n if (!defaultContext) {\n console.warn(`SyntropyFront: No hay set por defecto para ${contextType}`);\n return {};\n }\n\n const result = {};\n Object.entries(defaultContext).forEach(([field, getter]) => {\n try {\n result[field] = getter();\n } catch (error) {\n console.warn(`SyntropyFront: Error recolectando campo ${field} de ${contextType}:`, error);\n result[field] = null;\n }\n });\n\n return result;\n }\n\n /**\n * Recolecta campos específicos\n * @param {string} contextType - Tipo de contexto\n * @param {Array} fields - Campos específicos a recolectar\n * @returns {Object} Contexto específico\n */\n collectSpecificFields(contextType, fields) {\n const allFields = this.allFields[contextType];\n if (!allFields) {\n console.warn(`SyntropyFront: Tipo de contexto desconocido: ${contextType}`);\n return {};\n }\n\n const result = {};\n fields.forEach(field => {\n try {\n if (allFields[field]) {\n result[field] = allFields[field]();\n } else {\n console.warn(`SyntropyFront: Campo ${field} no disponible en ${contextType}`);\n }\n } catch (error) {\n console.warn(`SyntropyFront: Error recolectando campo ${field} de ${contextType}:`, error);\n result[field] = null;\n }\n });\n\n return result;\n }\n\n /**\n * Genera un ID de sesión seguro usando crypto.randomUUID() cuando esté disponible\n * @returns {string} ID de sesión seguro\n */\n generateSecureId() {\n try {\n // Intentar usar crypto.randomUUID() si está disponible (Node.js 14.17+, browsers modernos)\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n \n // Fallback para navegadores más antiguos: usar crypto.getRandomValues()\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n const array = new Uint8Array(16);\n crypto.getRandomValues(array);\n \n // Convertir a formato UUID v4\n const hex = Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');\n return [\n hex.slice(0, 8),\n hex.slice(8, 12),\n hex.slice(12, 16),\n hex.slice(16, 20),\n hex.slice(20, 32)\n ].join('-');\n }\n \n // Fallback final: timestamp + random (menos seguro pero funcional)\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 15);\n return `${timestamp}-${random}`;\n } catch (error) {\n console.warn('SyntropyFront: Error generando ID seguro, usando fallback:', error);\n // Fallback de emergencia\n return `session_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n }\n }\n\n /**\n * Genera un ID de sesión simple\n */\n generateSessionId() {\n if (!this._sessionId) {\n this._sessionId = `session_${this.generateSecureId()}`;\n }\n return this._sessionId;\n }\n\n /**\n * Obtiene la lista de tipos de contexto disponibles\n * @returns {Array} Tipos disponibles\n */\n getAvailableTypes() {\n return Object.keys(this.allFields);\n }\n\n /**\n * Obtiene la lista de campos disponibles para un tipo de contexto\n * @param {string} contextType - Tipo de contexto\n * @returns {Array} Campos disponibles\n */\n getAvailableFields(contextType) {\n const fields = this.allFields[contextType];\n return fields ? Object.keys(fields) : [];\n }\n\n /**\n * Obtiene información sobre los sets por defecto\n * @returns {Object} Información de sets por defecto\n */\n getDefaultContextsInfo() {\n const info = {};\n Object.entries(this.defaultContexts).forEach(([type, fields]) => {\n info[type] = Object.keys(fields);\n });\n return info;\n }\n}\n\n// Instancia singleton\nexport const contextCollector = new ContextCollector(); ","/**\n * Copyright 2024 Syntropysoft\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { breadcrumbStore } from '../core/breadcrumbs/BreadcrumbStore.js';\nimport { agent } from '../core/agent/Agent.js';\nimport { contextCollector } from '../core/context/ContextCollector.js';\n\n/**\n * Interceptors - Observadores que capturan eventos automáticamente\n * Implementa Chaining Pattern para coexistir con otros APMs\n */\nexport class Interceptors {\n constructor() {\n this.isInitialized = false;\n this.config = {\n captureClicks: true,\n captureFetch: true,\n captureErrors: true,\n captureUnhandledRejections: true\n };\n this.contextTypes = [];\n\n // Referencias originales para restaurar en destroy()\n this.originalHandlers = {\n fetch: null,\n onerror: null,\n onunhandledrejection: null\n };\n\n // Event listeners para limpiar\n this.eventListeners = new Map();\n }\n\n /**\n * Configura los interceptores\n * @param {Object} config - Configuración de interceptores\n */\n configure(config) {\n this.config = { ...this.config, ...config };\n this.contextTypes = config.context || [];\n }\n\n /**\n * Inicializa todos los interceptores\n */\n init() {\n if (this.isInitialized) {\n console.warn('SyntropyFront: Interceptors ya están inicializados');\n return;\n }\n\n if (this.config.captureClicks) {\n this.setupClickInterceptor();\n }\n\n if (this.config.captureFetch) {\n this.setupFetchInterceptor();\n }\n\n if (this.config.captureErrors || this.config.captureUnhandledRejections) {\n this.setupErrorInterceptors();\n }\n\n this.isInitialized = true;\n console.log('SyntropyFront: Interceptors inicializados con Chaining Pattern');\n }\n\n /**\n * Intercepta clics de usuario\n */\n setupClickInterceptor() {\n // Solo configurar en el browser\n if (typeof document === 'undefined') {\n console.log('SyntropyFront: Click interceptor no disponible (no browser)');\n return;\n }\n\n let lastClickTime = 0;\n const THROTTLE_MS = 500;\n\n const clickHandler = (event) => {\n const el = event.target;\n if (!el) return;\n\n // ✅ THROTTLE: Evitar ráfagas de clicks (ej: double clicks accidentales)\n const now = Date.now();\n if (now - lastClickTime < THROTTLE_MS) return;\n lastClickTime = now;\n\n // ✅ FILTER: Solo capturar elementos potencialmente interactivos\n const isInteractive = (element) => {\n if (!element || element.nodeType !== 1) return false;\n const interactiveTags = ['a', 'button', 'input', 'select', 'textarea', 'label', 'summary'];\n const isClickableRole = ['button', 'link', 'checkbox', 'radio', 'menuitem'].includes(element.getAttribute?.('role'));\n\n let hasPointerCursor = false;\n try {\n hasPointerCursor = window.getComputedStyle?.(element)?.cursor === 'pointer';\n } catch (e) {\n // Ignorar errores en entornos donde getComputedStyle falla (ej: JSDOM con mocks incompletos)\n }\n\n return interactiveTags.includes(element.tagName.toLowerCase()) || isClickableRole || hasPointerCursor;\n };\n\n // Si el elemento no es interactivo, buscar hacia arriba en el DOM (bubbling)\n let target = el;\n while (target && target !== document.body) {\n if (isInteractive(target)) break;\n target = target.parentElement;\n }\n\n // Si no encontramos un elemento interactivo, ignoramos el click (reduce ruido)\n if (!target || target === document.body) return;\n\n // Genera un selector CSS simple para identificar el elemento\n let selector = target.tagName.toLowerCase();\n if (target.id) {\n selector += `#${target.id}`;\n } else if (target.className && typeof target.className === 'string') {\n selector += `.${target.className.split(' ').filter(Boolean).join('.')}`;\n }\n\n breadcrumbStore.add({\n category: 'ui',\n message: `Usuario hizo click en '${selector}'`,\n data: {\n selector,\n tagName: target.tagName,\n id: target.id,\n className: target.className,\n text: target.innerText?.substring(0, 30).trim() || target.value?.substring(0, 30)\n }\n });\n };\n\n // Guardar referencia para limpiar después\n this.eventListeners.set('click', clickHandler);\n document.addEventListener('click', clickHandler, true);\n }\n\n /**\n * Intercepta llamadas de red (fetch) con Chaining\n */\n setupFetchInterceptor() {\n // Solo configurar en el browser\n if (typeof window === 'undefined' || !window.fetch) {\n console.log('SyntropyFront: Fetch interceptor no disponible (no browser/fetch)');\n return;\n }\n\n // Guardar referencia original\n this.originalHandlers.fetch = window.fetch;\n\n // Crear nuevo handler que encadena con el original\n const syntropyFetchHandler = (...args) => {\n const url = args[0] instanceof Request ? args[0].url : args[0];\n const method = args[0] instanceof Request ? args[0].method : (args[1]?.method || 'GET');\n\n breadcrumbStore.add({\n category: 'network',\n message: `Request: ${method} ${url}`,\n data: {\n url,\n method,\n timestamp: Date.now()\n }\n });\n\n // ✅ CHAINING: Llamar al handler original\n return this.originalHandlers.fetch.apply(window, args);\n };\n\n // Sobrescribir con el nuevo handler\n window.fetch = syntropyFetchHandler;\n }\n\n /**\n * Intercepta errores globales con Chaining\n */\n setupErrorInterceptors() {\n // Solo configurar en el browser\n if (typeof window === 'undefined') {\n console.log('SyntropyFront: Error interceptors no disponibles (no browser)');\n return;\n }\n\n if (this.config.captureErrors) {\n // Guardar referencia original\n this.originalHandlers.onerror = window.onerror;\n\n // Crear nuevo handler que encadena con el original\n const syntropyErrorHandler = (message, source, lineno, colno, error) => {\n const errorPayload = {\n type: 'uncaught_exception',\n error: {\n message,\n source,\n lineno,\n colno,\n stack: error?.stack\n },\n breadcrumbs: breadcrumbStore.getAll(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n\n // ✅ CHAINING: Llamar al handler original si existe\n if (this.originalHandlers.onerror) {\n try {\n return this.originalHandlers.onerror(message, source, lineno, colno, error);\n } catch (originalError) {\n console.warn('SyntropyFront: Error en handler original:', originalError);\n return false;\n }\n }\n\n return false; // No prevenir el error por defecto\n };\n\n // Sobrescribir con el nuevo handler\n window.onerror = syntropyErrorHandler;\n }\n\n if (this.config.captureUnhandledRejections) {\n // Guardar referencia original\n this.originalHandlers.onunhandledrejection = window.onunhandledrejection;\n\n // Crear nuevo handler que encadena con el original\n const syntropyRejectionHandler = (event) => {\n const errorPayload = {\n type: 'unhandled_rejection',\n error: {\n message: event.reason?.message || 'Rechazo de promesa sin mensaje',\n stack: event.reason?.stack,\n },\n breadcrumbs: breadcrumbStore.getAll(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n\n // ✅ CHAINING: Llamar al handler original si existe\n if (this.originalHandlers.onunhandledrejection) {\n try {\n this.originalHandlers.onunhandledrejection(event);\n } catch (originalError) {\n console.warn('SyntropyFront: Error en handler original de rejection:', originalError);\n }\n }\n };\n\n // Sobrescribir con el nuevo handler\n window.onunhandledrejection = syntropyRejectionHandler;\n }\n }\n\n /**\n * Maneja los errores capturados\n * @param {Object} errorPayload - Payload del error\n */\n handleError(errorPayload) {\n // Recolectar contexto si está configurado\n const context = this.contextTypes.length > 0 ? contextCollector.collect(this.contextTypes) : null;\n\n // Enviar al agent si está configurado\n agent.sendError(errorPayload, context);\n\n // Callback para manejo personalizado de errores\n if (this.onError) {\n this.onError(errorPayload);\n } else {\n // Comportamiento por defecto: log a consola\n console.error('SyntropyFront - Error detectado:', errorPayload);\n }\n }\n\n /**\n * Desactiva todos los interceptores y restaura handlers originales\n */\n destroy() {\n if (!this.isInitialized) return;\n\n console.log('SyntropyFront: Limpiando interceptores...');\n\n // ✅ RESTAURAR: Handlers originales\n if (this.originalHandlers.fetch) {\n window.fetch = this.originalHandlers.fetch;\n console.log('SyntropyFront: fetch original restaurado');\n }\n\n if (this.originalHandlers.onerror) {\n window.onerror = this.originalHandlers.onerror;\n console.log('SyntropyFront: onerror original restaurado');\n }\n\n if (this.originalHandlers.onunhandledrejection) {\n window.onunhandledrejection = this.originalHandlers.onunhandledrejection;\n console.log('SyntropyFront: onunhandledrejection original restaurado');\n }\n\n // ✅ LIMPIAR: Event listeners\n if (typeof document !== 'undefined') {\n this.eventListeners.forEach((handler, eventType) => {\n document.removeEventListener(eventType, handler, true);\n console.log(`SyntropyFront: Event listener ${eventType} removido`);\n });\n }\n\n // Limpiar referencias\n this.originalHandlers = {\n fetch: null,\n onerror: null,\n onunhandledrejection: null\n };\n this.eventListeners.clear();\n this.isInitialized = false;\n\n console.log('SyntropyFront: Interceptors destruidos y handlers restaurados');\n }\n\n /**\n * Obtiene información sobre los handlers originales\n * @returns {Object} Información de handlers\n */\n getHandlerInfo() {\n return {\n isInitialized: this.isInitialized,\n hasOriginalFetch: !!this.originalHandlers.fetch,\n hasOriginalOnError: !!this.originalHandlers.onerror,\n hasOriginalOnUnhandledRejection: !!this.originalHandlers.onunhandledrejection,\n eventListenersCount: this.eventListeners.size\n };\n }\n}\n\n// Instancia singleton\nexport const interceptors = new Interceptors(); ","/**\n * Copyright 2024 Syntropysoft\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * SyntropyFront - Biblioteca de observabilidad con captura automática\n * Actúa como Facade conectando el Agent y los Interceptors modulares\n */\nimport { breadcrumbStore } from './core/breadcrumbs/BreadcrumbStore.js';\nimport { agent } from './core/agent/Agent.js';\nimport { interceptors } from './interceptors/Interceptors.js';\n\nclass SyntropyFront {\n constructor() {\n this.isActive = false;\n this.config = {\n maxEvents: 50,\n endpoint: null,\n headers: {},\n usePersistentBuffer: true,\n captureClicks: true,\n captureFetch: true,\n captureErrors: true,\n captureUnhandledRejections: true,\n onError: null\n };\n\n // Auto-inicializar\n this.init();\n }\n\n /**\n * Inicializa la biblioteca y activa los interceptores\n */\n init() {\n if (this.isActive) return;\n\n // Configurar el agent por defecto\n agent.configure({\n endpoint: this.config.endpoint,\n headers: this.config.headers,\n usePersistentBuffer: this.config.usePersistentBuffer\n });\n\n // Inicializar interceptores\n interceptors.configure({\n captureClicks: this.config.captureClicks,\n captureFetch: this.config.captureFetch,\n captureErrors: this.config.captureErrors,\n captureUnhandledRejections: this.config.captureUnhandledRejections\n });\n\n // Inyectar callback de error si existe\n if (this.config.onError) {\n interceptors.onError = this.config.onError;\n }\n\n interceptors.init();\n\n // Intentar reintentar items fallidos de sesiones previas\n agent.retryFailedItems().catch(err => {\n console.warn('SyntropyFront: Error al intentar recuperar items persistentes:', err);\n });\n\n this.isActive = true;\n console.log('🚀 SyntropyFront: Inicializado con arquitectura modular resiliente');\n }\n\n /**\n * Configura SyntropyFront\n * @param {Object} config - Configuración\n */\n configure(config = {}) {\n // Actualizar configuración local\n this.config = { ...this.config, ...config };\n\n // Si se pasa 'fetch', extraer endpoint y headers por compatibilidad\n if (config.fetch) {\n this.config.endpoint = config.fetch.url;\n this.config.headers = config.fetch.options?.headers || {};\n }\n\n // Re-configurar componentes internos\n agent.configure({\n endpoint: this.config.endpoint,\n headers: this.config.headers,\n usePersistentBuffer: this.config.usePersistentBuffer\n });\n\n interceptors.configure({\n captureClicks: this.config.captureClicks,\n captureFetch: this.config.captureFetch,\n captureErrors: this.config.captureErrors,\n captureUnhandledRejections: this.config.captureUnhandledRejections\n });\n\n if (this.config.onError) {\n interceptors.onError = this.config.onError;\n }\n\n const mode = this.config.endpoint ? `endpoint: ${this.config.endpoint}` : 'console only';\n console.log(`✅ SyntropyFront: Configurado - ${mode}`);\n }\n\n /**\n * Añade un breadcrumb manualmente\n */\n addBreadcrumb(category, message, data = {}) {\n return breadcrumbStore.add({ category, message, data });\n }\n\n /**\n * Obtiene todos los breadcrumbs\n */\n getBreadcrumbs() {\n return breadcrumbStore.getAll();\n }\n\n /**\n * Limpia los breadcrumbs\n */\n clearBreadcrumbs() {\n breadcrumbStore.clear();\n }\n\n /**\n * Envía un error manualmente con contexto\n */\n sendError(error, context = {}) {\n const errorPayload = {\n type: 'manual_error',\n error: {\n message: error.message || String(error),\n name: error.name || 'Error',\n stack: error.stack\n },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n agent.sendError(errorPayload, context);\n return errorPayload;\n }\n\n /**\n * Fuerza el envío de datos pendientes\n */\n async flush() {\n await agent.forceFlush();\n }\n\n /**\n * Obtiene estadísticas de uso\n */\n getStats() {\n return {\n isActive: this.isActive,\n breadcrumbs: breadcrumbStore.count(),\n agent: agent.getStats(),\n config: { ...this.config }\n };\n }\n\n /**\n * Desactiva la biblioteca y restaura hooks originales\n */\n destroy() {\n interceptors.destroy();\n agent.disable();\n this.isActive = false;\n console.log('SyntropyFront: Desactivado');\n }\n}\n\n// Instancia única (Singleton)\nconst syntropyFront = new SyntropyFront();\n\n// Exportar la instancia por defecto\nexport default syntropyFront;"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/core/breadcrumbs/BreadcrumbStore.js","../src/core/agent/ConfigurationManager.js","../src/core/agent/QueueManager.js","../src/core/retry/RetryManager.js","../src/utils/RobustSerializer.js","../src/core/agent/HttpTransport.js","../src/core/database/DatabaseConfigManager.js","../src/core/database/DatabaseConnectionManager.js","../src/core/database/DatabaseTransactionManager.js","../src/core/database/DatabaseManager.js","../src/core/database/StorageManager.js","../src/core/retry/RetryLogicManager.js","../src/utils/DataMaskingManager.js","../src/core/database/SerializationManager.js","../src/core/persistent/PersistentBufferManager.js","../src/core/agent/Agent.js","../src/utils/Environment.js","../src/interceptors/ClickInterceptor.js","../src/utils/FunctionWrapper.js","../src/interceptors/FetchInterceptor.js","../src/core/context/ContextCollector.js","../src/interceptors/ErrorInterceptor.js","../src/interceptors/Interceptors.js","../src/index.js"],"sourcesContent":["/**\n * BreadcrumbStore - User action timeline storage\n * Maintains a history of the last user actions.\n * Does not know about Agent or sending; the orchestrator wires onBreadcrumbAdded to decide what to do.\n */\nexport class BreadcrumbStore {\n constructor(maxBreadcrumbs = 25) {\n this.maxBreadcrumbs = maxBreadcrumbs;\n this.breadcrumbs = [];\n /** @type {((crumb: object) => void)|null} Optional callback when a breadcrumb is added (set by orchestrator). */\n this.onBreadcrumbAdded = null;\n }\n\n /**\n * Configures the maximum breadcrumb size\n * @param {number} maxBreadcrumbs - New maximum size\n */\n setMaxBreadcrumbs(maxBreadcrumbs) {\n this.maxBreadcrumbs = maxBreadcrumbs;\n\n // If new size is smaller, remove excess breadcrumbs\n if (this.breadcrumbs.length > this.maxBreadcrumbs) {\n this.breadcrumbs = this.breadcrumbs.slice(-this.maxBreadcrumbs);\n }\n }\n\n /**\n * Gets current maximum size\n * @returns {number} Maximum breadcrumb size\n */\n getMaxBreadcrumbs() {\n return this.maxBreadcrumbs;\n }\n\n /**\n * Adds a breadcrumb to the list\n * @param {Object} crumb - The breadcrumb to add\n * @param {string} crumb.category - Event category (ui, network, error, etc.)\n * @param {string} crumb.message - Descriptive message\n * @param {Object} [crumb.data] - Optional additional data\n */\n add(crumb) {\n const breadcrumb = {\n ...crumb,\n timestamp: new Date().toISOString(),\n };\n\n // Functional limit management\n this.breadcrumbs = [...this.breadcrumbs, breadcrumb].slice(-this.maxBreadcrumbs);\n\n if (this.onBreadcrumbAdded) {\n try {\n this.onBreadcrumbAdded(breadcrumb);\n } catch (error) {\n console.warn('SyntropyFront: Error in onBreadcrumbAdded:', error);\n }\n }\n }\n\n /**\n * Returns all breadcrumbs\n * @returns {Array} List of all breadcrumbs\n */\n getAll() {\n return [...this.breadcrumbs];\n }\n\n /**\n * Clears all breadcrumbs\n */\n clear() {\n this.breadcrumbs = [];\n }\n\n /**\n * Gets current breadcrumb count\n * @returns {number} Breadcrumb count\n */\n count() {\n return this.breadcrumbs.length;\n }\n\n /**\n * Gets breadcrumbs by category\n * @param {string} category - Category to filter\n * @returns {Array} Breadcrumbs of the specified category\n */\n getByCategory(category) {\n return this.breadcrumbs.filter(b => b.category === category);\n }\n}\n\n// Singleton instance\nexport const breadcrumbStore = new BreadcrumbStore();","/**\n * ConfigurationManager - Handles Agent configuration\n * Single Responsibility: Manage configuration and validation\n */\nexport class ConfigurationManager {\n constructor() {\n this.endpoint = null;\n this.headers = {\n 'Content-Type': 'application/json'\n };\n this.batchSize = 10;\n this.batchTimeout = null;\n this.isEnabled = false;\n this.sendBreadcrumbs = false;\n this.encrypt = null;\n this.usePersistentBuffer = false;\n this.maxRetries = 5;\n this.baseDelay = 1000;\n this.maxDelay = 30000;\n this.samplingRate = 1.0; // 100% by default\n }\n\n /**\n * Configures the manager\n * @param {Object} config - Configuration\n */\n configure(config) {\n this.endpoint = config.endpoint;\n this.headers = { ...this.headers, ...config.headers };\n this.batchSize = config.batchSize || this.batchSize;\n this.batchTimeout = config.batchTimeout;\n this.isEnabled = !!config.endpoint;\n this.encrypt = config.encrypt || null;\n this.usePersistentBuffer = config.usePersistentBuffer === true;\n this.maxRetries = config.maxRetries || this.maxRetries;\n this.samplingRate = typeof config.samplingRate === 'number' ? config.samplingRate : this.samplingRate;\n\n // Simple logic: if batchTimeout exists = send breadcrumbs, else = errors only\n this.sendBreadcrumbs = !!config.batchTimeout;\n }\n\n /**\n * Checks if the agent is enabled\n */\n isAgentEnabled() {\n return this.isEnabled;\n }\n\n /**\n * Checks if it should send breadcrumbs\n */\n shouldSendBreadcrumbs() {\n return this.sendBreadcrumbs;\n }\n\n /**\n * Gets the current configuration\n */\n getConfig() {\n return {\n endpoint: this.endpoint,\n headers: this.headers,\n batchSize: this.batchSize,\n batchTimeout: this.batchTimeout,\n isEnabled: this.isEnabled,\n sendBreadcrumbs: this.sendBreadcrumbs,\n encrypt: this.encrypt,\n usePersistentBuffer: this.usePersistentBuffer,\n maxRetries: this.maxRetries,\n baseDelay: this.baseDelay,\n maxDelay: this.maxDelay,\n samplingRate: this.samplingRate\n };\n }\n}\n","/**\n * QueueManager - Send queue and batching.\n * Contract: add(item) enqueues or triggers flush; flush(cb) passes items to cb and clears queue; getSize/isEmpty/getAll are read-only.\n */\nexport class QueueManager {\n /** @param {{ batchSize: number, batchTimeout: number|null }} configManager */\n constructor(configManager) {\n this.config = configManager;\n this.queue = [];\n this.batchTimer = null;\n this.flushCallback = null;\n }\n\n /**\n * Adds an item; may trigger immediate or scheduled flush.\n * @param {Object} item - Item to enqueue (non-null)\n */\n add(item) {\n // Guard: Avoid null items\n if (!item) return;\n\n this.queue.push(item);\n\n // Guard: Immediate flush if batchSize is reached\n if (this.queue.length >= this.config.batchSize) {\n return this.flush(this.flushCallback);\n }\n\n // Guard: Only set Timer if one doesn't exist and we have a timeout configured\n if (!this.config.batchTimeout || this.batchTimer) return;\n\n this.batchTimer = setTimeout(() => {\n this.flush(this.flushCallback);\n }, this.config.batchTimeout);\n }\n\n /** @returns {Array<Object>} Copy of the queue */\n getAll() {\n return [...this.queue];\n }\n\n /** Clears the queue and cancels the timer. */\n clear() {\n this.queue = [];\n this.clearTimer();\n }\n\n /** Cancels the scheduled flush timer. */\n clearTimer() {\n if (this.batchTimer) {\n clearTimeout(this.batchTimer);\n this.batchTimer = null;\n }\n }\n\n /** @returns {number} Queue length */\n getSize() {\n return this.queue.length;\n }\n\n /** @returns {boolean} */\n isEmpty() {\n return this.queue.length === 0;\n }\n\n /**\n * Sends current items to the callback and clears the queue.\n * @param {(items: Array<Object>) => Promise<void>|void} flushCallback\n * @returns {Promise<void>}\n */\n async flush(flushCallback) {\n if (this.queue.length === 0) return;\n\n const itemsToSend = [...this.queue];\n this.queue = [];\n this.clearTimer();\n\n if (flushCallback) {\n await flushCallback(itemsToSend);\n }\n }\n}\n","/**\n * RetryManager - Retries with exponential backoff.\n * Contract: addToRetryQueue enqueues and schedules; processRetryQueue(sendCb, removeCb) processes ready items.\n */\nexport class RetryManager {\n /** @param {{ baseDelay: number, maxDelay: number, maxRetries: number }} configManager */\n constructor(configManager) {\n this.config = configManager;\n this.retryQueue = [];\n this.retryTimer = null;\n }\n\n /**\n * Enqueues items for retry (delay = min(baseDelay*2^(retryCount-1), maxDelay)).\n * @param {Array<Object>} items\n * @param {number} [retryCount=1]\n * @param {number|null} [persistentId=null]\n */\n addToRetryQueue(items, retryCount = 1, persistentId = null) {\n // Guard: Avoid empty items\n if (!items || items.length === 0) return;\n\n const delay = Math.min(this.config.baseDelay * Math.pow(2, retryCount - 1), this.config.maxDelay);\n\n this.retryQueue.push({\n items,\n retryCount,\n persistentId,\n nextRetry: Date.now() + delay\n });\n\n this.scheduleRetry();\n }\n\n /**\n * Processes items with nextRetry <= now; calls sendCallback and removePersistentCallback on success.\n * @param {(items: Array<Object>) => Promise<void>} sendCallback\n * @param {(id: number) => Promise<void>} removePersistentCallback\n * @returns {Promise<void>}\n */\n async processRetryQueue(sendCallback, removePersistentCallback) {\n this.retryTimer = null;\n if (this.retryQueue.length === 0) return;\n\n const now = Date.now();\n const itemsToRetry = this.retryQueue.filter(item => item.nextRetry <= now);\n\n for (const item of itemsToRetry) {\n await this.handleRetryItem(item, sendCallback, removePersistentCallback);\n }\n\n // Schedule next retry if items remain (Functional)\n if (this.retryQueue.length > 0) {\n this.scheduleRetry();\n }\n }\n\n /**\n * Schedules the next retry (Guard Clause style)\n */\n scheduleRetry() {\n // Guard: Avoid multiple simultaneous timers\n if (this.retryTimer) return;\n\n // Functional: Find the first item that needs a retry\n const nextItem = this.retryQueue.find(item => item.nextRetry <= Date.now());\n if (!nextItem) return;\n\n // Guard: Calculate delay and schedule\n const delay = Math.max(0, nextItem.nextRetry - Date.now());\n this.retryTimer = setTimeout(() => {\n this.processRetryQueue(this.sendCallback, this.removePersistentCallback);\n }, delay);\n }\n\n /**\n * Handles an individual retry item (SOLID: Single Responsibility)\n * @private\n */\n async handleRetryItem(item, sendCallback, removePersistentCallback) {\n try {\n if (sendCallback) await sendCallback(item.items);\n\n // Success: Clear state\n this.retryQueue = this.retryQueue.filter(q => q !== item);\n if (item.persistentId && removePersistentCallback) {\n await removePersistentCallback(item.persistentId);\n }\n console.log(`SyntropyFront: Successful retry (${item.retryCount})`);\n } catch (error) {\n this.handleRetryFailure(item, error);\n }\n }\n\n /**\n * Manages a retry failure\n * @private\n */\n handleRetryFailure(item, error) {\n console.warn(`SyntropyFront: Retry ${item.retryCount} failed:`, error);\n\n // Guard: Maximum retries reached\n if (item.retryCount >= this.config.maxRetries) {\n this.retryQueue = this.retryQueue.filter(q => q !== item);\n console.error('SyntropyFront: Item exceeded maximum retries, data lost');\n return;\n }\n\n // Increment and reschedule\n item.retryCount++;\n item.nextRetry = Date.now() + Math.min(\n this.config.baseDelay * Math.pow(2, item.retryCount - 1),\n this.config.maxDelay\n );\n }\n\n /**\n * Clears the retry queue\n */\n clear() {\n this.retryQueue = [];\n this.clearTimer();\n }\n\n /**\n * Clears the timer\n */\n clearTimer() {\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n this.retryTimer = null;\n }\n }\n\n /**\n * Gets the retry queue size\n */\n getSize() {\n return this.retryQueue.length;\n }\n\n /**\n * Checks if the retry queue is empty\n */\n isEmpty() {\n return this.retryQueue.length === 0;\n }\n}\n","/**\n * Pure type-specific fragments: serialization/deserialization without state.\n * Testable in isolation; state (circularRefs) is handled by RobustSerializer.\n */\n\nconst MAX_STRING_SNIPPET_LENGTH = 200;\n\nexport const serializedShapeOfDate = (date) => ({\n __type: 'Date',\n value: date.toISOString()\n});\n\nexport const serializedShapeOfError = (err, recurse) => ({\n __type: 'Error',\n name: err.name,\n message: err.message,\n stack: err.stack,\n cause: err.cause ? recurse(err.cause) : undefined\n});\n\nexport const serializedShapeOfRegExp = (re) => ({\n __type: 'RegExp',\n source: re.source,\n flags: re.flags\n});\n\nexport const serializedShapeOfFunction = (fn) => ({\n __type: 'Function',\n name: fn.name || 'anonymous',\n length: fn.length,\n toString: `${fn.toString().substring(0, MAX_STRING_SNIPPET_LENGTH)}...`\n});\n\nexport const serializedShapeOfUnknown = (obj) => ({\n __type: 'Unknown',\n constructor: obj.constructor ? obj.constructor.name : 'Unknown',\n toString: `${String(obj).substring(0, MAX_STRING_SNIPPET_LENGTH)}...`\n});\n\nexport const restoreDate = (obj) => new Date(obj.value);\nexport const restoreError = (obj, recurse) => {\n const err = new Error(obj.message);\n err.name = obj.name;\n err.stack = obj.stack;\n if (obj.cause) err.cause = recurse(obj.cause);\n return err;\n};\nexport const restoreRegExp = (obj) => new RegExp(obj.source, obj.flags);\nexport const restoreFunction = (obj) => `[Function: ${obj.name}]`;\n\n/**\n * RobustSerializer - Robust serialization with circular references.\n * Composes pure type-specific fragments; state (seen, circularRefs) only in arrays/objects.\n */\nexport class RobustSerializer {\n constructor() {\n this.seen = new WeakSet();\n this.circularRefs = new Map();\n this.refCounter = 0;\n }\n\n serialize(obj) {\n try {\n this.seen = new WeakSet();\n this.circularRefs = new Map();\n this.refCounter = 0;\n return JSON.stringify(this.makeSerializable(obj));\n } catch (error) {\n console.error('SyntropyFront: Error in robust serialization:', error);\n return JSON.stringify({\n __serializationError: true,\n error: error.message,\n originalType: typeof obj,\n isObject: obj !== null && typeof obj === 'object',\n timestamp: new Date().toISOString()\n });\n }\n }\n\n _serializeKnownType(obj, path) {\n if (obj === null || obj === undefined) return obj;\n if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean') return obj;\n if (obj instanceof Date) return serializedShapeOfDate(obj);\n if (obj instanceof Error) {\n return serializedShapeOfError(obj, (x) => this.makeSerializable(x, `${path}.cause`));\n }\n if (obj instanceof RegExp) return serializedShapeOfRegExp(obj);\n if (typeof obj === 'function') return serializedShapeOfFunction(obj);\n return undefined;\n }\n\n makeSerializable(obj, path = '') {\n if (obj === null || obj === undefined) return obj;\n const known = this._serializeKnownType(obj, path);\n if (known !== undefined) return known;\n if (Array.isArray(obj)) return this._serializeArray(obj, path);\n if (typeof obj === 'object') return this._serializeObject(obj, path);\n return serializedShapeOfUnknown(obj);\n }\n\n _serializeArray(obj, path) {\n if (this.seen.has(obj)) return { __circular: true, refId: this.circularRefs.get(obj) };\n this.seen.add(obj);\n this.circularRefs.set(obj, `ref_${++this.refCounter}`);\n return obj.map((item, i) => this.makeSerializable(item, `${path}[${i}]`));\n }\n\n _serializeObjectKey(result, obj, key, path) {\n try {\n result[key] = this.makeSerializable(obj[key], `${path}.${key}`);\n } catch (error) {\n result[key] = {\n __serializationError: true,\n error: error.message,\n propertyName: key\n };\n }\n }\n\n _serializeObjectSymbols(obj, path, result) {\n if (!Object.getOwnPropertySymbols) return;\n const symbols = Object.getOwnPropertySymbols(obj);\n for (const symbol of symbols) {\n const symKey = `__symbol_${symbol.description || 'anonymous'}`;\n try {\n result[symKey] = this.makeSerializable(obj[symbol], `${path}[Symbol]`);\n } catch (error) {\n result[symKey] = {\n __serializationError: true,\n error: error.message,\n symbolName: symbol.description || 'anonymous'\n };\n }\n }\n }\n\n _serializeObject(obj, path) {\n if (this.seen.has(obj)) return { __circular: true, refId: this.circularRefs.get(obj) };\n this.seen.add(obj);\n this.circularRefs.set(obj, `ref_${++this.refCounter}`);\n const result = {};\n for (const key in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;\n this._serializeObjectKey(result, obj, key, path);\n }\n this._serializeObjectSymbols(obj, path, result);\n return result;\n }\n\n /**\n * Deserializes a serialized object with circular references\n * @param {string} jsonString - JSON string to deserialize\n * @returns {any} Deserialized object\n */\n deserialize(jsonString) {\n try {\n const parsed = JSON.parse(jsonString);\n return this.restoreCircularRefs(parsed);\n } catch (error) {\n console.error('SyntropyFront: Error in deserialization:', error);\n return null;\n }\n }\n\n _restoreKnownType(obj, refs) {\n if (obj === null || obj === undefined) return obj;\n if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean') return obj;\n if (obj.__type === 'Date') return restoreDate(obj);\n if (obj.__type === 'Error') return restoreError(obj, (x) => this.restoreCircularRefs(x, refs));\n if (obj.__type === 'RegExp') return restoreRegExp(obj);\n if (obj.__type === 'Function') return restoreFunction(obj);\n return undefined;\n }\n\n restoreCircularRefs(obj, refs = new Map()) {\n const known = this._restoreKnownType(obj, refs);\n if (known !== undefined) return known;\n if (Array.isArray(obj)) return this._restoreArray(obj, refs);\n if (typeof obj === 'object') return this._restoreObject(obj, refs);\n return obj;\n }\n\n _restoreArray(obj, refs) {\n const result = [];\n refs.set(obj, result);\n for (let i = 0; i < obj.length; i++) {\n if (obj[i]?.__circular) {\n result[i] = refs.has(obj[i].refId) ? refs.get(obj[i].refId) : null;\n } else {\n result[i] = this.restoreCircularRefs(obj[i], refs);\n }\n }\n return result;\n }\n\n _restoreObject(obj, refs) {\n const result = {};\n refs.set(obj, result);\n for (const key in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, key) || key.startsWith('__')) continue;\n const value = obj[key];\n if (value?.__circular) {\n result[key] = refs.has(value.refId) ? refs.get(value.refId) : null;\n } else {\n result[key] = this.restoreCircularRefs(value, refs);\n }\n }\n return result;\n }\n\n /**\n * Safely serializes for logging (simplified version)\n * @param {any} obj - Object to serialize\n * @returns {string} Safe JSON string for logs\n */\n serializeForLogging(obj) {\n try {\n return this.serialize(obj);\n } catch (error) {\n return JSON.stringify({\n __logError: true,\n message: 'Error serializing for logging',\n originalError: error.message,\n timestamp: new Date().toISOString()\n });\n }\n }\n}\n\n// Singleton instance\nexport const robustSerializer = new RobustSerializer();\n","import { robustSerializer } from '../../utils/RobustSerializer.js';\n\n/**\n * HttpTransport - HTTP send to the backend.\n * Contract: send(items) serializes and POSTs; applyEncryption(data) applies config.encrypt if present; isConfigured() by endpoint.\n */\nexport class HttpTransport {\n /** @param {{ endpoint: string|null, headers: Object, encrypt?: function }} configManager */\n constructor(configManager) {\n this.config = configManager;\n }\n\n /**\n * Serializes items, applies encrypt if configured, POSTs to endpoint.\n * @param {Array<Object>} items - Items to send\n * @returns {Promise<Object>} response.json()\n * @throws {Error} If HTTP !ok or network failure\n */\n async send(items) {\n const payload = {\n timestamp: new Date().toISOString(),\n items\n };\n\n // ✅ ROBUST SERIALIZATION: Use serializer that handles circular references\n let serializedPayload;\n try {\n serializedPayload = robustSerializer.serialize(payload);\n } catch (error) {\n console.error('SyntropyFront: Error in payload serialization:', error);\n\n // Fallback: attempt basic serialization with error info\n serializedPayload = JSON.stringify({\n __serializationError: true,\n error: error.message,\n timestamp: new Date().toISOString(),\n itemsCount: items.length,\n fallbackData: 'Serialization failed, data not sent'\n });\n }\n\n const response = await fetch(this.config.endpoint, {\n method: 'POST',\n headers: this.config.headers,\n body: serializedPayload\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n return response.json();\n }\n\n /**\n * Applies encryption if configured.\n * @param {*} data - Data to encrypt\n * @returns {*} Encrypted data or unchanged\n */\n applyEncryption(data) {\n if (this.config.encrypt) {\n return this.config.encrypt(data);\n }\n return data;\n }\n\n /** @returns {boolean} */\n isConfigured() {\n return !!this.config.endpoint;\n }\n}\n","/**\n * DatabaseConfigManager - Handles IndexedDB configuration\n * Single responsibility: Validate and manage database configuration\n */\nexport class DatabaseConfigManager {\n constructor(dbName, dbVersion, storeName) {\n this.dbName = dbName;\n this.dbVersion = dbVersion;\n this.storeName = storeName;\n }\n\n /**\n * Validates that the configuration is correct\n * @returns {Object} Validation result\n */\n validateConfig() {\n const validationResult = {\n isValid: true,\n errors: [],\n timestamp: new Date().toISOString()\n };\n\n if (!this.dbName || typeof this.dbName !== 'string') {\n validationResult.isValid = false;\n validationResult.errors.push('dbName must be a non-empty string');\n }\n\n if (!this.dbVersion || typeof this.dbVersion !== 'number' || this.dbVersion < 1) {\n validationResult.isValid = false;\n validationResult.errors.push('dbVersion must be a number greater than 0');\n }\n\n if (!this.storeName || typeof this.storeName !== 'string') {\n validationResult.isValid = false;\n validationResult.errors.push('storeName must be a non-empty string');\n }\n\n return validationResult;\n }\n\n /**\n * Checks if IndexedDB is available in the environment\n * @returns {Object} Availability result\n */\n checkIndexedDBAvailability() {\n const availabilityResult = {\n isAvailable: false,\n reason: null,\n timestamp: new Date().toISOString()\n };\n\n if (typeof window === 'undefined') {\n availabilityResult.reason = 'Not in a browser environment';\n return availabilityResult;\n }\n\n if (!window.indexedDB) {\n availabilityResult.reason = 'IndexedDB is not available in this browser';\n return availabilityResult;\n }\n\n availabilityResult.isAvailable = true;\n return availabilityResult;\n }\n\n /**\n * Returns the current configuration\n * @returns {Object} Configuration\n */\n getConfig() {\n return {\n dbName: this.dbName,\n dbVersion: this.dbVersion,\n storeName: this.storeName\n };\n }\n\n /**\n * Returns the object store configuration\n * @returns {Object} Store configuration\n */\n getStoreConfig() {\n return {\n keyPath: 'id',\n autoIncrement: true\n };\n }\n} ","/**\n * DatabaseConnectionManager - Handles IndexedDB connection.\n * Single responsibility: Manage opening and closing of connections. Uses guard clauses (return early).\n */\nexport class DatabaseConnectionManager {\n constructor(configManager) {\n this.configManager = configManager;\n this.db = null;\n this.isAvailable = false;\n }\n\n /**\n * Initializes the connection to IndexedDB\n * @returns {Promise<Object>} Init result\n */\n async init() {\n // Guard: validate configuration\n const configValidation = this.configManager.validateConfig();\n if (!configValidation.isValid) {\n return {\n success: false,\n error: `Invalid configuration: ${configValidation.errors.join(', ')}`,\n timestamp: new Date().toISOString()\n };\n }\n\n const availabilityCheck = this.configManager.checkIndexedDBAvailability();\n if (!availabilityCheck.isAvailable) {\n return {\n success: false,\n error: availabilityCheck.reason,\n timestamp: new Date().toISOString()\n };\n }\n\n try {\n const connectionResult = await this.openConnection();\n if (!connectionResult.success) {\n return {\n success: false,\n error: connectionResult.error,\n timestamp: new Date().toISOString()\n };\n }\n\n this.db = connectionResult.db;\n this.isAvailable = true;\n\n return { success: true, error: null, timestamp: new Date().toISOString() };\n } catch (error) {\n return {\n success: false,\n error: `Unexpected error: ${error.message}`,\n timestamp: new Date().toISOString()\n };\n }\n }\n\n /**\n * Opens the connection to IndexedDB\n */\n openConnection() {\n return new Promise((resolve) => {\n const config = this.configManager.getConfig();\n const request = indexedDB.open(config.dbName, config.dbVersion);\n\n request.onerror = () => {\n resolve({\n success: false,\n error: 'Error opening IndexedDB',\n db: null\n });\n };\n\n request.onupgradeneeded = (event) => {\n const db = event.target.result;\n const storeConfig = this.configManager.getStoreConfig();\n\n if (!db.objectStoreNames.contains(config.storeName)) {\n db.createObjectStore(config.storeName, storeConfig);\n }\n };\n\n request.onsuccess = () => {\n resolve({\n success: true,\n error: null,\n db: request.result\n });\n };\n });\n }\n\n /**\n * Closes the database connection\n */\n close() {\n // Guard: no active connection\n if (!this.db) {\n return { success: false, error: 'No active connection to close', timestamp: new Date().toISOString() };\n }\n\n try {\n this.db.close();\n this.db = null;\n this.isAvailable = false;\n return { success: true, error: null, timestamp: new Date().toISOString() };\n } catch (error) {\n return { success: false, error: `Error closing connection: ${error.message}`, timestamp: new Date().toISOString() };\n }\n }\n\n /**\n * Returns whether the database is available\n */\n isDatabaseAvailable() {\n return this.isAvailable && this.db !== null;\n }\n\n /**\n * Returns the database instance\n */\n getDatabase() {\n return this.isDatabaseAvailable() ? this.db : null;\n }\n}","/**\n * DatabaseTransactionManager - Handles IndexedDB transactions\n * Single responsibility: Manage read and write transactions\n */\nexport class DatabaseTransactionManager {\n constructor(connectionManager, configManager) {\n this.connectionManager = connectionManager;\n this.configManager = configManager;\n }\n\n /**\n * Returns a read transaction\n * @returns {IDBTransaction} Read transaction\n * @throws {Error} If the database is not available\n */\n getReadTransaction() {\n this.ensureDatabaseAvailable();\n \n const config = this.configManager.getConfig();\n const db = this.connectionManager.getDatabase();\n \n return db.transaction([config.storeName], 'readonly');\n }\n\n /**\n * Returns a write transaction\n * @returns {IDBTransaction} Write transaction\n * @throws {Error} If the database is not available\n */\n getWriteTransaction() {\n this.ensureDatabaseAvailable();\n \n const config = this.configManager.getConfig();\n const db = this.connectionManager.getDatabase();\n \n return db.transaction([config.storeName], 'readwrite');\n }\n\n /**\n * Returns the object store for a transaction\n * @param {IDBTransaction} transaction - Active transaction\n * @returns {IDBObjectStore} Object store\n */\n getObjectStore(transaction) {\n const config = this.configManager.getConfig();\n return transaction.objectStore(config.storeName);\n }\n\n /**\n * Executes a read operation safely\n * @param {Function} operation - Operation to execute\n * @returns {Promise<Object>} Operation result\n */\n async executeReadOperation(operation) {\n const operationResult = {\n success: false,\n data: null,\n error: null,\n timestamp: new Date().toISOString()\n };\n\n try {\n const transaction = this.getReadTransaction();\n const store = this.getObjectStore(transaction);\n \n const result = await operation(store);\n \n operationResult.success = true;\n operationResult.data = result;\n \n return operationResult;\n } catch (error) {\n operationResult.error = `Error in read operation: ${error.message}`;\n return operationResult;\n }\n }\n\n /**\n * Executes a write operation safely\n * @param {Function} operation - Operation to execute\n * @returns {Promise<Object>} Operation result\n */\n async executeWriteOperation(operation) {\n const operationResult = {\n success: false,\n data: null,\n error: null,\n timestamp: new Date().toISOString()\n };\n\n try {\n const transaction = this.getWriteTransaction();\n const store = this.getObjectStore(transaction);\n \n const result = await operation(store);\n \n operationResult.success = true;\n operationResult.data = result;\n \n return operationResult;\n } catch (error) {\n operationResult.error = `Error in write operation: ${error.message}`;\n return operationResult;\n }\n }\n\n /**\n * Ensures the database is available\n * @throws {Error} If the database is not available\n */\n ensureDatabaseAvailable() {\n if (!this.connectionManager.isDatabaseAvailable()) {\n throw new Error('Database not available');\n }\n }\n\n /**\n * Returns transaction status information\n * @returns {Object} Transaction status\n */\n getTransactionStatus() {\n return {\n isDatabaseAvailable: this.connectionManager.isDatabaseAvailable(),\n storeName: this.configManager.getConfig().storeName,\n timestamp: new Date().toISOString()\n };\n }\n} ","import { DatabaseConfigManager } from './DatabaseConfigManager.js';\nimport { DatabaseConnectionManager } from './DatabaseConnectionManager.js';\nimport { DatabaseTransactionManager } from './DatabaseTransactionManager.js';\n\n/**\n * DatabaseManager - Coordinates IndexedDB access.\n * Single responsibility: Coordinate specialized managers. Uses guard clauses.\n */\nexport class DatabaseManager {\n constructor(dbName, dbVersion, storeName) {\n this.configManager = new DatabaseConfigManager(dbName, dbVersion, storeName);\n this.connectionManager = new DatabaseConnectionManager(this.configManager);\n this.transactionManager = new DatabaseTransactionManager(this.connectionManager, this.configManager);\n }\n\n /**\n * Initializes the connection to IndexedDB\n */\n async init() {\n const initResult = await this.connectionManager.init();\n\n if (!initResult.success) {\n console.warn('SyntropyFront: Error initializing database:', initResult.error);\n return false;\n }\n\n console.log('SyntropyFront: Database initialized');\n return true;\n }\n\n /**\n * Returns a read transaction\n */\n getReadTransaction() {\n return this.transactionManager.getReadTransaction();\n }\n\n /**\n * Returns a write transaction\n */\n getWriteTransaction() {\n return this.transactionManager.getWriteTransaction();\n }\n\n /**\n * Closes the database connection\n */\n close() {\n const closeResult = this.connectionManager.close();\n\n if (!closeResult.success) {\n console.warn('SyntropyFront: Error closing database:', closeResult.error);\n return false;\n }\n\n return true;\n }\n\n /**\n * Returns whether the database is available\n */\n isDatabaseAvailable() {\n return this.connectionManager.isDatabaseAvailable();\n }\n\n // ===== Compatibility properties =====\n\n /**\n * @deprecated Usar configManager.getConfig().dbName\n */\n get dbName() {\n return this.configManager.dbName;\n }\n\n /**\n * @deprecated Usar configManager.getConfig().dbVersion\n */\n get dbVersion() {\n return this.configManager.dbVersion;\n }\n\n /**\n * @deprecated Usar configManager.getConfig().storeName\n */\n get storeName() {\n return this.configManager.storeName;\n }\n\n /**\n * @deprecated Usar connectionManager.getDatabase()\n */\n get db() {\n return this.connectionManager.getDatabase();\n }\n\n /**\n * @deprecated Usar connectionManager.isDatabaseAvailable()\n */\n get isAvailable() {\n return this.connectionManager.isDatabaseAvailable();\n }\n}\n","/**\n * StorageManager - Handles IndexedDB CRUD operations\n * Single responsibility: Manage storage and retrieval operations\n */\nexport class StorageManager {\n constructor(databaseManager, serializationManager) {\n this.databaseManager = databaseManager;\n this.serializationManager = serializationManager;\n }\n\n /**\n * Saves items to storage\n * @param {Array} items - Items to save\n * @returns {Promise<number>} Saved item ID\n */\n async save(items) {\n this.ensureDatabaseAvailable();\n\n const serializationResult = this.serializationManager.serialize(items);\n const serializedData = this.serializationManager.getData(serializationResult, '[]');\n\n const item = {\n items: serializedData,\n timestamp: new Date().toISOString(),\n retryCount: 0,\n serializationError: serializationResult.error\n };\n\n return this.executeWriteOperation(store => store.add(item));\n }\n\n /**\n * Retrieves all items from storage\n * @returns {Promise<Array>} Deserialized items\n */\n async retrieve() {\n if (!this.databaseManager.isDatabaseAvailable()) {\n return [];\n }\n\n const rawItems = await this.executeReadOperation(store => store.getAll());\n return this.deserializeItems(rawItems);\n }\n\n /**\n * Retrieves a single item by ID\n * @param {number} id - Item ID\n * @returns {Promise<Object|null>} Deserialized item or null\n */\n async retrieveById(id) {\n if (!this.databaseManager.isDatabaseAvailable()) {\n return null;\n }\n\n const rawItem = await this.executeReadOperation(store => store.get(id));\n return rawItem ? this.deserializeItem(rawItem) : null;\n }\n\n /**\n * Removes an item from storage\n * @param {number} id - ID of the item to remove\n * @returns {Promise<void>}\n */\n async remove(id) {\n this.ensureDatabaseAvailable();\n return this.executeWriteOperation(store => store.delete(id));\n }\n\n /**\n * Updates an item in storage\n * @param {number} id - Item ID\n * @param {Object} updates - Fields to update\n * @returns {Promise<number>} Updated item ID\n */\n async update(id, updates) {\n this.ensureDatabaseAvailable();\n\n const currentItem = await this.retrieveById(id);\n if (!currentItem) {\n throw new Error('Item not found');\n }\n\n const updatedItem = { ...currentItem, ...updates };\n return this.executeWriteOperation(store => store.put(updatedItem));\n }\n\n /**\n * Clears all storage\n * @returns {Promise<void>}\n */\n async clear() {\n this.ensureDatabaseAvailable();\n return this.executeWriteOperation(store => store.clear());\n }\n\n // ===== Private declarative methods =====\n\n /**\n * Ensures the database is available\n * @throws {Error} If the database is not available\n */\n ensureDatabaseAvailable() {\n if (!this.databaseManager.isDatabaseAvailable()) {\n throw new Error('Database not available');\n }\n }\n\n /**\n * Executes a read operation in a declarative way\n * @param {Function} operation - Operation to run on the store\n * @returns {Promise<*>} Operation result\n */\n executeReadOperation(operation) {\n return new Promise((resolve, reject) => {\n try {\n const transaction = this.databaseManager.getReadTransaction();\n const store = transaction.objectStore(this.databaseManager.storeName);\n const request = operation(store);\n \n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Executes a write operation in a declarative way\n * @param {Function} operation - Operation to run on the store\n * @returns {Promise<*>} Operation result\n */\n executeWriteOperation(operation) {\n return new Promise((resolve, reject) => {\n try {\n const transaction = this.databaseManager.getWriteTransaction();\n const store = transaction.objectStore(this.databaseManager.storeName);\n const request = operation(store);\n \n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Deserializes an array of items\n * @param {Array} rawItems - Raw items from the database\n * @returns {Array} Deserialized items\n */\n deserializeItems(rawItems) {\n return rawItems.map(item => this.deserializeItem(item));\n }\n\n /**\n * Deserializes a single item\n * @param {Object} rawItem - Raw item from the database\n * @returns {Object} Deserialized item\n */\n deserializeItem(rawItem) {\n const deserializationResult = this.serializationManager.deserialize(rawItem.items);\n const deserializedItems = this.serializationManager.getData(deserializationResult, []);\n\n return {\n ...rawItem,\n items: deserializedItems,\n deserializationError: deserializationResult.error\n };\n }\n} ","import { robustSerializer } from '../../utils/RobustSerializer.js';\n\n/**\n * RetryLogicManager - Handles retry logic and cleanup\n * Single responsibility: Manage retries and cleanup of failed items\n */\nexport class RetryLogicManager {\n constructor(storageManager, configManager) {\n this.storageManager = storageManager;\n this.config = configManager;\n }\n\n /**\n * Attempts to send failed items from the persistent buffer\n * @param {Function} sendCallback - Callback to send items\n * @param {Function} removeCallback - Callback to remove successful items\n */\n async retryFailedItems(sendCallback, removeCallback) {\n if (!this.storageManager) {\n console.warn('SyntropyFront: Storage manager not available');\n return;\n }\n\n try {\n const failedItems = await this.storageManager.retrieve();\n \n for (const item of failedItems) {\n if (item.retryCount < this.config.maxRetries) {\n // Deserialize items from buffer\n let deserializedItems;\n try {\n if (typeof item.items === 'string') {\n deserializedItems = robustSerializer.deserialize(item.items);\n } else {\n deserializedItems = item.items;\n }\n } catch (error) {\n console.error('SyntropyFront: Error deserializing buffer items:', error);\n await this.removeFailedItem(item.id);\n continue;\n }\n \n if (sendCallback) {\n try {\n await sendCallback(deserializedItems, item.retryCount + 1, item.id);\n \n // On successful send, remove from buffer\n if (removeCallback) {\n await removeCallback(item.id);\n } else {\n await this.removeFailedItem(item.id);\n }\n \n console.log(`SyntropyFront: Retry successful for item ${item.id}`);\n } catch (error) {\n console.warn(`SyntropyFront: Retry failed for item ${item.id}:`, error);\n \n // Increment retry count\n await this.incrementRetryCount(item.id);\n }\n }\n } else {\n console.warn(`SyntropyFront: Item ${item.id} exceeded maximum retries, removing from buffer`);\n await this.removeFailedItem(item.id);\n }\n }\n } catch (error) {\n console.error('SyntropyFront: Error processing retries:', error);\n }\n }\n\n /**\n * Increments the retry count for an item\n * @param {number} id - Item ID\n */\n async incrementRetryCount(id) {\n try {\n const currentItem = await this.storageManager.retrieveById(id);\n if (currentItem) {\n await this.storageManager.update(id, {\n retryCount: currentItem.retryCount + 1\n });\n }\n } catch (error) {\n console.error('SyntropyFront: Error incrementing retry count:', error);\n }\n }\n\n /**\n * Removes a failed item from the buffer\n * @param {number} id - Item ID\n */\n async removeFailedItem(id) {\n try {\n await this.storageManager.remove(id);\n } catch (error) {\n console.error('SyntropyFront: Error removing failed item:', error);\n }\n }\n\n /**\n * Cleans items that have exceeded the maximum retry count\n */\n async cleanupExpiredItems() {\n try {\n const allItems = await this.storageManager.retrieve();\n const expiredItems = allItems.filter(item => item.retryCount >= this.config.maxRetries);\n \n for (const item of expiredItems) {\n await this.removeFailedItem(item.id);\n console.warn(`SyntropyFront: Item ${item.id} removed for exceeding maximum retries`);\n }\n \n if (expiredItems.length > 0) {\n console.log(`SyntropyFront: Cleanup completed, ${expiredItems.length} items removed`);\n }\n } catch (error) {\n console.error('SyntropyFront: Error cleaning up expired items:', error);\n }\n }\n\n /**\n * Returns retry statistics\n */\n async getRetryStats() {\n try {\n const allItems = await this.storageManager.retrieve();\n \n const stats = {\n totalItems: allItems.length,\n itemsByRetryCount: {},\n averageRetryCount: 0\n };\n\n if (allItems.length > 0) {\n const totalRetries = allItems.reduce((sum, item) => sum + item.retryCount, 0);\n stats.averageRetryCount = totalRetries / allItems.length;\n \n allItems.forEach(item => {\n const retryCount = item.retryCount;\n stats.itemsByRetryCount[retryCount] = (stats.itemsByRetryCount[retryCount] || 0) + 1;\n });\n }\n\n return stats;\n } catch (error) {\n console.error('SyntropyFront: Error getting retry statistics:', error);\n return {\n totalItems: 0,\n itemsByRetryCount: {},\n averageRetryCount: 0\n };\n }\n }\n} ","/**\n * Functional Fragments: Pure masking strategies.\n */\nexport const MASKING_STRATEGIES = {\n credit_card: (value, rule) => {\n const clean = value.replace(/\\D/g, '');\n if (rule.preserveLength) {\n return value.replace(/\\d/g, (match, offset) => {\n const digitIndex = value.substring(0, offset).replace(/\\D/g, '').length;\n return digitIndex < clean.length - 4 ? rule.maskChar : match;\n });\n }\n return `${rule.maskChar.repeat(4)}-${rule.maskChar.repeat(4)}-${rule.maskChar.repeat(4)}-${clean.slice(-4)}`;\n },\n\n ssn: (value, rule) => {\n const clean = value.replace(/\\D/g, '');\n if (rule.preserveLength) {\n return value.replace(/\\d/g, (match, offset) => {\n const digitIndex = value.substring(0, offset).replace(/\\D/g, '').length;\n return digitIndex < clean.length - 4 ? rule.maskChar : match;\n });\n }\n return `***-**-${clean.slice(-4)}`;\n },\n\n email: (value, rule) => {\n const atIndex = value.indexOf('@');\n if (atIndex <= 0) return MASKING_STRATEGIES.default(value, rule);\n\n const username = value.substring(0, atIndex);\n const domain = value.substring(atIndex);\n\n if (rule.preserveLength) {\n const maskedUsername = username.length > 1\n ? username.charAt(0) + rule.maskChar.repeat(username.length - 1)\n : rule.maskChar.repeat(username.length);\n return maskedUsername + domain;\n }\n return `${username.charAt(0)}***${domain}`;\n },\n\n phone: (value, rule) => {\n const clean = value.replace(/\\D/g, '');\n if (rule.preserveLength) {\n return value.replace(/\\d/g, (match, offset) => {\n const digitIndex = value.substring(0, offset).replace(/\\D/g, '').length;\n return digitIndex < clean.length - 4 ? rule.maskChar : match;\n });\n }\n return `${rule.maskChar.repeat(3)}-${rule.maskChar.repeat(3)}-${clean.slice(-4)}`;\n },\n\n secret: (value, rule) => {\n if (rule.preserveLength) return rule.maskChar.repeat(value.length);\n return rule.maskChar.repeat(8);\n },\n\n custom: (value, rule) => {\n return typeof rule.customMask === 'function' ? rule.customMask(value) : value;\n },\n\n default: (value, rule) => {\n if (rule.preserveLength) return rule.maskChar.repeat(value.length);\n return rule.maskChar.repeat(Math.min(value.length, 8));\n }\n};\n\n// Compatibility Aliases\nMASKING_STRATEGIES.password = MASKING_STRATEGIES.secret;\nMASKING_STRATEGIES.token = MASKING_STRATEGIES.secret;\n\nexport const MaskingStrategy = {\n CREDIT_CARD: 'credit_card',\n SSN: 'ssn',\n EMAIL: 'email',\n PHONE: 'phone',\n PASSWORD: 'password',\n TOKEN: 'token',\n CUSTOM: 'custom'\n};\n\n/**\n * DataMaskingManager - PII Obfuscation Engine.\n * Implements Strategy Pattern (SOLID: OCP).\n */\nexport class DataMaskingManager {\n constructor(options = {}) {\n this.maskChar = options.maskChar || '*';\n this.preserveLength = options.preserveLength !== false;\n this.rules = [];\n this.strategies = new Map(Object.entries(MASKING_STRATEGIES));\n\n // ANSI escape code regex (intentional control chars for stripping terminal codes)\n // eslint-disable-next-line no-control-regex\n this.ansiRegex = /[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;\n\n if (options.enableDefaultRules !== false) {\n this.addDefaultRules();\n }\n\n if (options.rules) {\n options.rules.forEach(rule => this.addRule(rule));\n }\n }\n\n addDefaultRules() {\n const defaultRules = [\n { pattern: /credit_card|card_number|payment_number/i, strategy: MaskingStrategy.CREDIT_CARD },\n { pattern: /ssn|social_security|security_number/i, strategy: MaskingStrategy.SSN },\n { pattern: /email/i, strategy: MaskingStrategy.EMAIL },\n { pattern: /phone|phone_number|mobile_number/i, strategy: MaskingStrategy.PHONE },\n { pattern: /password|pass|pwd|secret|api_key|token|auth_token|jwt|bearer/i, strategy: MaskingStrategy.PASSWORD }\n ];\n\n defaultRules.forEach(rule => this.addRule(rule));\n }\n\n addRule(rule) {\n this.rules.push({\n ...rule,\n _compiledPattern: typeof rule.pattern === 'string' ? new RegExp(rule.pattern, 'i') : rule.pattern,\n preserveLength: rule.preserveLength ?? this.preserveLength,\n maskChar: rule.maskChar ?? this.maskChar\n });\n }\n\n registerStrategy(name, strategyFn) {\n if (typeof strategyFn === 'function') {\n this.strategies.set(name, strategyFn);\n }\n }\n\n process(data) {\n if (data === null || data === undefined) return data;\n\n const processors = {\n string: (val) => val.replace(this.ansiRegex, ''),\n object: (val) => {\n if (Array.isArray(val)) return val.map(item => this.process(item));\n if (val && val.constructor === Object) return this.maskObject(val);\n return val;\n }\n };\n\n return (processors[typeof data] || ((v) => v))(data);\n }\n\n maskObject(data) {\n return Object.entries(data).reduce((acc, [key, value]) => {\n acc[key] = this.maskValue(key, value);\n return acc;\n }, {});\n }\n\n maskValue(key, value) {\n if (typeof value !== 'string') return this.process(value);\n\n const rule = this.rules.find(r => r._compiledPattern?.test(key));\n return rule ? this.applyStrategy(value, rule) : value.replace(this.ansiRegex, '');\n }\n\n applyStrategy(value, rule) {\n const strategy = this.strategies.get(rule.strategy) || this.strategies.get('default');\n return strategy(value, rule);\n }\n}\n\nexport const dataMaskingManager = new DataMaskingManager();\n","import { robustSerializer } from '../../utils/RobustSerializer.js';\nimport { dataMaskingManager } from '../../utils/DataMaskingManager.js';\n\n/**\n * SerializationManager - Handles serialization and deserialization of data.\n * Single responsibility: Manage data transformation for storage.\n * DIP: Accepts serializer and masking via constructor for testability and substitution.\n * @param {Object} [deps] - Injected dependencies\n * @param {{ serialize: function(*): string, deserialize: function(string): * }} [deps.serializer] - Serializer (circular ref handling)\n * @param {{ process: function(*): * }} [deps.masking] - Object with process(data) for PII obfuscation\n */\nexport class SerializationManager {\n constructor(deps = {}) {\n this.serializer = deps.serializer ?? robustSerializer;\n this.masking = deps.masking ?? dataMaskingManager;\n }\n\n /**\n * Serializes items with declarative error handling\n * @param {Array} items - Items to serialize\n * @returns {Object} Serialization result\n */\n serialize(items) {\n try {\n // Guard: Validate basic input\n if (items === null || items === undefined) {\n return { success: true, data: this.serializer.serialize([]), error: null, timestamp: new Date().toISOString() };\n }\n\n // Apply masking before store/send\n const maskedItems = this.masking.process(items);\n const serializedData = this.serializer.serialize(maskedItems);\n\n return {\n success: true,\n data: serializedData,\n error: null,\n timestamp: new Date().toISOString()\n };\n } catch (error) {\n return {\n success: false,\n data: this.createFallbackData(error),\n error: this.createSerializationError(error),\n timestamp: new Date().toISOString()\n };\n }\n }\n\n /**\n * Deserializes data with declarative error handling\n * @param {string} serializedData - Datos serializados\n * @returns {Object} Deserialization result\n */\n deserialize(serializedData) {\n try {\n // Guard: Empty or null data\n if (!serializedData) {\n return { success: true, data: [], error: null, timestamp: new Date().toISOString() };\n }\n\n const deserializedData = this.serializer.deserialize(serializedData);\n\n return {\n success: true,\n data: deserializedData,\n error: null,\n timestamp: new Date().toISOString()\n };\n } catch (error) {\n return {\n success: false,\n data: [],\n error: this.createDeserializationError(error),\n timestamp: new Date().toISOString()\n };\n }\n }\n\n /**\n * Creates a structured serialization error\n * @param {Error} error - Original error\n * @returns {Object} Structured error\n */\n createSerializationError(error) {\n return {\n type: 'serialization_error',\n message: error.message,\n originalError: error,\n timestamp: new Date().toISOString()\n };\n }\n\n /**\n * Creates a structured deserialization error\n * @param {Error} error - Original error\n * @returns {Object} Structured error\n */\n createDeserializationError(error) {\n return {\n type: 'deserialization_error',\n message: error.message,\n originalError: error,\n timestamp: new Date().toISOString()\n };\n }\n\n /**\n * Creates fallback data when serialization fails\n * @param {Error} error - Error that caused the fallback\n * @returns {string} Serialized fallback data\n */\n createFallbackData(error) {\n const fallbackPayload = {\n __serializationError: true,\n error: error.message,\n timestamp: new Date().toISOString(),\n fallbackData: 'Items not serializable - using fallback'\n };\n\n return JSON.stringify(fallbackPayload);\n }\n\n /**\n * Checks if a serialization result was successful\n * @param {Object} result - Serialization/deserialization result\n * @returns {boolean} True if successful\n */\n isSuccessful(result) {\n return Boolean(result && result.success === true);\n }\n\n /**\n * Gets data from a result, with fallback\n * @param {Object} result - Serialization/deserialization result\n * @param {*} fallback - Default value if failed\n * @returns {*} Data or fallback\n */\n getData(result, fallback = null) {\n return this.isSuccessful(result) ? result.data : fallback;\n }\n} ","import { DatabaseManager } from '../database/DatabaseManager.js';\nimport { StorageManager } from '../database/StorageManager.js';\nimport { RetryLogicManager } from '../retry/RetryLogicManager.js';\nimport { SerializationManager } from '../database/SerializationManager.js';\n\nconst DEFAULT_DB_NAME = 'SyntropyFrontBuffer';\nconst DEFAULT_DB_VERSION = 1;\nconst DEFAULT_STORE_NAME = 'failedItems';\n\n/**\n * PersistentBufferManager - Persistent buffer coordinator\n * Single Responsibility: Coordinate persistent storage components\n * DIP: Accepts injected components (databaseManager, serializationManager, storageManager, retryLogicManager) for tests and substitution.\n * @param {Object} configManager - Config (usePersistentBuffer, maxRetries, etc.)\n * @param {Object} [deps] - Injected components; defaults created if not provided\n */\nexport class PersistentBufferManager {\n constructor(configManager, deps = {}) {\n this.config = configManager;\n this.usePersistentBuffer = false;\n\n this.databaseManager = deps.databaseManager ?? new DatabaseManager(\n DEFAULT_DB_NAME,\n DEFAULT_DB_VERSION,\n DEFAULT_STORE_NAME\n );\n this.serializationManager = deps.serializationManager ?? new SerializationManager();\n this.storageManager = deps.storageManager ?? new StorageManager(this.databaseManager, this.serializationManager);\n this.retryLogicManager = deps.retryLogicManager ?? new RetryLogicManager(this.storageManager, this.config);\n\n this.initPersistentBuffer();\n }\n\n /**\n * Initializes the persistent buffer\n */\n async initPersistentBuffer() {\n try {\n const success = await this.databaseManager.init();\n if (success) {\n this.usePersistentBuffer = this.config.usePersistentBuffer;\n console.log('SyntropyFront: Persistent buffer initialized');\n }\n } catch (error) {\n console.warn('SyntropyFront: Error initializing persistent buffer:', error);\n }\n }\n\n /**\n * Saves failed items to the persistent buffer\n * @param {Array} items - Items to save\n */\n async save(items) {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n try {\n await this.storageManager.save(items);\n console.log('SyntropyFront: Items saved to persistent buffer');\n } catch (error) {\n console.error('SyntropyFront: Error saving to persistent buffer:', error);\n }\n }\n\n /**\n * Retrieves failed items from the persistent buffer\n */\n async retrieve() {\n if (!this.usePersistentBuffer) {\n return [];\n }\n\n try {\n return await this.storageManager.retrieve();\n } catch (error) {\n console.error('SyntropyFront: Error retrieving from persistent buffer:', error);\n return [];\n }\n }\n\n /**\n * Removes items from the persistent buffer\n * @param {number} id - ID of the item to remove\n */\n async remove(id) {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n try {\n await this.storageManager.remove(id);\n } catch (error) {\n console.error('SyntropyFront: Error removing from persistent buffer:', error);\n }\n }\n\n /**\n * Attempts to send failed items from the persistent buffer\n * @param {Function} sendCallback - Callback to send items\n * @param {Function} removeCallback - Callback to remove successful items\n */\n async retryFailedItems(sendCallback, removeCallback) {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n await this.retryLogicManager.retryFailedItems(sendCallback, removeCallback);\n }\n\n /**\n * Cleans up items that have exceeded the maximum retry count\n */\n async cleanupExpiredItems() {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n await this.retryLogicManager.cleanupExpiredItems();\n }\n\n /**\n * Gets persistent buffer statistics\n */\n async getStats() {\n if (!this.usePersistentBuffer) {\n return {\n totalItems: 0,\n itemsByRetryCount: {},\n averageRetryCount: 0,\n isAvailable: false\n };\n }\n\n try {\n const retryStats = await this.retryLogicManager.getRetryStats();\n return {\n ...retryStats,\n isAvailable: this.isAvailable()\n };\n } catch (error) {\n console.error('SyntropyFront: Error getting statistics:', error);\n return {\n totalItems: 0,\n itemsByRetryCount: {},\n averageRetryCount: 0,\n isAvailable: this.isAvailable()\n };\n }\n }\n\n /**\n * Checks if the persistent buffer is available\n */\n isAvailable() {\n return this.usePersistentBuffer && this.databaseManager.isDatabaseAvailable();\n }\n\n /**\n * Clears the entire persistent buffer\n */\n async clear() {\n if (!this.usePersistentBuffer) {\n return;\n }\n\n try {\n await this.storageManager.clear();\n console.log('SyntropyFront: Persistent buffer cleared');\n } catch (error) {\n console.error('SyntropyFront: Error clearing persistent buffer:', error);\n }\n }\n\n /**\n * Closes the database connection\n */\n close() {\n this.databaseManager.close();\n this.usePersistentBuffer = false;\n }\n}\n","import { ConfigurationManager } from './ConfigurationManager.js';\nimport { QueueManager } from './QueueManager.js';\nimport { RetryManager } from '../retry/RetryManager.js';\nimport { HttpTransport } from './HttpTransport.js';\nimport { PersistentBufferManager } from '../persistent/PersistentBufferManager.js';\nimport { dataMaskingManager } from '../../utils/DataMaskingManager.js';\n\n/**\n * Agent - Coordinates sending traceability data to the backend.\n * DIP: All dependencies (config, queue, retry, transport, buffer, masking) are injectable.\n *\n * @contract\n * - configure(config): updates agent configuration.\n * - sendError(payload, context?): if enabled and not dropped by sampling, enqueues an item of type 'error'.\n * - sendBreadcrumbs(breadcrumbs): if enabled, batchTimeout set and non-empty, enqueues type 'breadcrumbs'.\n * - flush(): drains queue via flushCallback. forceFlush(): flush + processes pending retries.\n * - getStats(): returns { queueLength, retryQueueLength, isEnabled, usePersistentBuffer, maxRetries }.\n */\nexport class Agent {\n /**\n * @param {Object} [deps] - Injected dependencies (config, queue, retry, transport, buffer, masking). Defaults created if not provided.\n */\n constructor(deps = {}) {\n // Components (Injected or Defaults)\n this.config = deps.config || new ConfigurationManager();\n this.masking = deps.masking || dataMaskingManager;\n\n // Managers that depend on config\n this.queue = deps.queue || new QueueManager(this.config);\n this.retry = deps.retry || new RetryManager(this.config);\n this.transport = deps.transport || new HttpTransport(this.config);\n this.buffer = deps.buffer || new PersistentBufferManager(this.config);\n\n // Setup coordination callbacks\n this.setupCallbacks();\n }\n\n /**\n * Configures callbacks for coordination between components\n */\n setupCallbacks() {\n // QueueManager flush callback\n this.queue.flushCallback = async (items) => {\n try {\n await this.transport.send(items);\n console.log('SyntropyFront: Data sent successfully');\n } catch (error) {\n console.error('SyntropyFront Agent: Error sending data:', error);\n\n // Add to retry queue\n this.retry.addToRetryQueue(items);\n\n // Save to persistent buffer\n await this.buffer.save(items);\n }\n };\n\n // RetryManager send callback\n this.retry.sendCallback = async (items) => {\n return await this.transport.send(items);\n };\n\n this.retry.removePersistentCallback = async (id) => {\n await this.buffer.remove(id);\n };\n\n // PersistentBufferManager retry callback\n this.buffer.sendCallback = (items, retryCount, persistentId) => {\n this.retry.addToRetryQueue(items, retryCount, persistentId);\n };\n }\n\n /**\n * Updates configuration (endpoint, headers, batchSize, batchTimeout, samplingRate, etc.).\n * @param {Object} config - Ver ConfigurationManager.configure\n * @returns {void}\n */\n configure(config) {\n this.config.configure(config);\n }\n\n /**\n * Enqueues an error for send. Does not send if agent is disabled or sampling discards it.\n * @param {Object} errorPayload - Payload with type, error, breadcrumbs, timestamp\n * @param {Object|null} [context=null] - Additional context (merged into payload)\n * @returns {void}\n */\n sendError(errorPayload, context = null) {\n // 🛡️ Guard: Agent enabled\n if (!this.config.isAgentEnabled()) {\n console.warn('SyntropyFront Agent: Not configured, error not sent');\n return;\n }\n\n // 🎲 Guard: Sampling\n if (Math.random() > this.config.samplingRate) return;\n\n // Functional Pipeline: Generate payload with context\n const payloadWithContext = context\n ? { ...errorPayload, context }\n : errorPayload;\n\n // Apply transformations (Encryption and Obfuscation)\n const dataToSend = this.transport.applyEncryption(payloadWithContext);\n const maskedData = this.masking.process(dataToSend);\n\n this.queue.add({\n type: 'error',\n data: maskedData,\n timestamp: new Date().toISOString()\n });\n }\n\n /**\n * Enqueues breadcrumbs for send. Does not send if disabled, no batchTimeout, or empty array.\n * @param {Array<Object>} breadcrumbs - List of traces (category, message, data, timestamp)\n * @returns {void}\n */\n sendBreadcrumbs(breadcrumbs) {\n // 🛡️ Guard: Enabled and with data\n if (!this.config.isAgentEnabled() || !this.config.shouldSendBreadcrumbs() || !breadcrumbs.length) {\n return;\n }\n\n // 🎲 Guard: Sampling\n if (Math.random() > this.config.samplingRate) return;\n\n // Apply transformations\n const dataToSend = this.transport.applyEncryption(breadcrumbs);\n const maskedData = this.masking.process(dataToSend);\n\n this.queue.add({\n type: 'breadcrumbs',\n data: maskedData,\n timestamp: new Date().toISOString()\n });\n }\n\n /**\n * Adds an item to the queue (compatibility)\n */\n addToQueue(item) {\n this.queue.add(item);\n }\n\n /**\n * Adds to retry queue (compatibility)\n */\n addToRetryQueue(items, retryCount = 1, persistentId = null) {\n this.retry.addToRetryQueue(items, retryCount, persistentId);\n }\n\n /**\n * Processes retry queue (compatibility)\n */\n async processRetryQueue() {\n await this.retry.processRetryQueue(\n this.retry.sendCallback,\n this.retry.removePersistentCallback\n );\n }\n\n /**\n * Forces flush of current queue\n */\n async flush() {\n await this.queue.flush(this.queue.flushCallback);\n }\n\n /**\n * Forces immediate flush of everything\n */\n async forceFlush() {\n await this.flush();\n\n // Also attempt pending retries\n if (!this.retry.isEmpty()) {\n console.log('SyntropyFront: Attempting to send pending retries...');\n await this.processRetryQueue();\n }\n }\n\n /**\n * Gets agent stats\n */\n getStats() {\n const config = this.config.getConfig();\n return {\n queueLength: this.queue.getSize(),\n retryQueueLength: this.retry.getSize(),\n isEnabled: this.config.isAgentEnabled(),\n usePersistentBuffer: config.usePersistentBuffer,\n maxRetries: config.maxRetries\n };\n }\n\n /**\n * Attempts to send failed items from persistent buffer\n */\n async retryFailedItems() {\n await this.buffer.retryFailedItems(this.buffer.sendCallback);\n }\n\n /**\n * Returns whether the agent is enabled (for consumers that need to check without depending on config shape).\n */\n isEnabled() {\n return this.config.isAgentEnabled();\n }\n\n /**\n * Returns whether breadcrumbs should be sent (e.g. batch mode with timeout).\n */\n shouldSendBreadcrumbs() {\n return this.config.shouldSendBreadcrumbs();\n }\n\n /**\n * Disables the agent\n */\n disable() {\n this.config.configure({ endpoint: null });\n this.queue.clear();\n this.retry.clear();\n }\n}\n\n// Singleton Instance\nexport const agent = new Agent();\n","/**\n * Environment - Centralized detection of browser environment and capabilities.\n * Browser-only: targets modern browsers per browserslist config.\n */\nexport const Environment = {\n /**\n * Returns true if running in a browser context.\n */\n isBrowser: () => typeof window !== 'undefined' && typeof document !== 'undefined',\n\n /**\n * Returns the global browser object, or empty object as safe fallback.\n */\n getGlobal: () => (typeof window !== 'undefined' ? window : {}),\n\n /**\n * Checks availability of a nested global API via dot-notation path.\n * @param {string} apiPath - e.g. 'navigator.connection' or 'crypto.randomUUID'\n * @returns {boolean}\n */\n hasApi: (apiPath) => {\n return apiPath.split('.').reduce((current, part) => {\n if (current === null || current === undefined) return null;\n return current[part] !== undefined ? current[part] : null;\n }, Environment.getGlobal()) !== null;\n },\n\n /**\n * Executes a task only if a condition is met; returns fallback otherwise.\n * @param {string|Function} condition - API path string or boolean-returning function.\n * @param {Function} task - Operation to execute when condition is met.\n * @param {any} fallback - Default value when condition is not met.\n * @returns {any}\n */\n runIf: (condition, task, fallback = null) => {\n const isMet = typeof condition === 'function' ? condition() : Environment.hasApi(condition);\n return isMet ? task() : fallback;\n }\n};\n","import { breadcrumbStore } from '../core/breadcrumbs/BreadcrumbStore.js';\nimport { Environment } from '../utils/Environment.js';\n\n/**\n * Functional fragments: DOM detection and labeling utilities.\n */\nexport const DOM_UTILS = {\n /**\n * Selector exhaustivo de elementos interactivos.\n */\n INTERACTIVE_SELECTOR: [\n 'a', 'button', 'input', 'select', 'textarea', 'label', 'summary',\n '[role=\"button\"]', '[role=\"link\"]', '[role=\"checkbox\"]', '[role=\"radio\"]',\n '[role=\"menuitem\"]', '[role=\"option\"]', '[role=\"switch\"]', '[role=\"tab\"]',\n '.interactive', '.btn', '.clickable', // Convention selectors\n '[onclick]', '[ng-click]', '[v-on:click]' // Framework click attributes (@click is invalid in CSS selectors)\n ].join(', '),\n\n /**\n * Checks if an element has cursor:pointer (pure CSS fallback).\n */\n hasPointerCursor: (el) => {\n try {\n return window.getComputedStyle(el).cursor === 'pointer';\n } catch (e) {\n return false;\n }\n },\n\n /**\n * Walks up the DOM tree looking for cursor:pointer (declarative, no while).\n */\n findTargetByStyle: (el) => {\n // Guard: element nodes only\n if (!el || el.nodeType !== 1) return null;\n if (DOM_UTILS.hasPointerCursor(el)) return el;\n if (!el.parentElement || el.parentElement === document.body) return null;\n return DOM_UTILS.findTargetByStyle(el.parentElement);\n },\n\n /**\n * Finds the interactive target using closest() with CSS fallback (declarative).\n * Uses try/catch so invalid selectors (e.g. from old bundles) don't break the app.\n */\n findInteractiveTarget: (el) => {\n if (!el || el === document.body || el.nodeType !== 1) return null;\n try {\n const found = el.closest(DOM_UTILS.INTERACTIVE_SELECTOR);\n if (found) return found;\n } catch (_) {\n // Invalid selector (e.g. [@click] in old builds) or browser quirk; fallback only\n }\n return DOM_UTILS.findTargetByStyle(el);\n },\n\n /**\n * Generates a readable selector for the element.\n */\n generateSelector: (el) => {\n // Guard: no element\n if (!el) return 'unknown';\n\n const tag = el.tagName.toLowerCase();\n const id = el.id ? `#${el.id}` : '';\n const classes = (typeof el.className === 'string' && el.className)\n ? `.${el.className.split(' ').filter(Boolean).join('.')}`\n : '';\n\n return `${tag}${id}${classes}`;\n }\n};\n\n/**\n * ClickInterceptor - Interceptor coordinated by functional fragments.\n * Refactored for maximum purity and removal of imperative logic.\n */\nexport class ClickInterceptor {\n constructor() {\n this.handler = null;\n this.lastClickTime = 0;\n this.THROTTLE_MS = 500;\n }\n\n init() {\n // Guard: browser environment\n if (!Environment.isBrowser()) return;\n\n this.handler = (event) => this.processClick(event);\n document.addEventListener('click', this.handler, true);\n }\n\n /**\n * Pipeline de procesamiento de clic (Pureza funcional).\n */\n processClick(event) {\n const el = event?.target;\n\n // Guard: throttling and element existence\n if (!el || this.isThrottled()) return;\n\n const target = DOM_UTILS.findInteractiveTarget(el);\n if (!target) return;\n\n this.recordBreadcrumb(target);\n }\n\n /**\n * Flow control to avoid duplicates.\n */\n isThrottled() {\n const now = Date.now();\n const throttled = now - this.lastClickTime < this.THROTTLE_MS;\n if (!throttled) this.lastClickTime = now;\n return throttled;\n }\n\n /**\n * Records trace in the store.\n */\n recordBreadcrumb(target) {\n const selector = DOM_UTILS.generateSelector(target);\n\n breadcrumbStore.add({\n category: 'ui',\n message: `User clicked on '${selector}'`,\n data: {\n selector,\n tagName: target.tagName,\n id: target.id || null,\n className: target.className || null,\n text: (target.innerText || target.value || '').substring(0, 30).trim()\n }\n });\n }\n\n /**\n * Limpieza de recursos.\n */\n destroy() {\n // Guard: browser and handler\n if (!Environment.isBrowser() || !this.handler) return;\n\n document.removeEventListener('click', this.handler, true);\n this.handler = null;\n }\n}\n","/**\n * Copyright 2024 Syntropysoft\n */\n\n/**\n * FunctionWrapper - Utility for standardizing global handler interception.\n * Provides functional abstractions for safe execution and wrapping.\n */\n\n/**\n * Safely executes a function with a given context and arguments.\n * @param {Function} fn - Function to execute.\n * @param {Object} context - Execution context (this).\n * @param {Array} args - Arguments to pass.\n * @param {string} [label='original handler'] - Diagnostic label for errors.\n * @returns {any} Result of the function execution or undefined if failed.\n */\nexport const safeApply = (fn, context, args, label = 'original handler') => {\n if (typeof fn !== 'function') return;\n try {\n return fn.apply(context, args);\n } catch (error) {\n // Log for instrumentation but don't crash the host application\n console.error(`SyntropyFront: Error in ${label}:`, error);\n return;\n }\n};\n\n/**\n * Wraps a property on a target object using a factory.\n * @param {Object} target - Target object (e.g., window).\n * @param {string} property - Property name (e.g., 'fetch').\n * @param {Function} wrapperFactory - Factory receiving (original) and returning (wrapped).\n * @returns {Object|null} Disposable object with destroy() method.\n */\nexport const wrap = (target, property, wrapperFactory) => {\n // `in` operator accepts null values (e.g. window.onerror === null by default)\n if (!target || !(property in target)) return null;\n\n const original = target[property]; // null is a valid initial value\n const wrapped = wrapperFactory(original);\n\n // Apply the wrap\n target[property] = wrapped;\n\n return {\n target,\n property,\n original,\n wrapped,\n destroy: () => {\n // Only restore if it hasn't been re-wrapped by someone else (best effort)\n if (target[property] === wrapped) {\n target[property] = original;\n }\n }\n };\n};\n\n// Legacy class export for backwards compatibility during transition\nexport const FunctionWrapper = {\n wrap,\n safeApply\n};\n","/**\n * Copyright 2024 Syntropysoft\n */\n\nimport { breadcrumbStore } from '../core/breadcrumbs/BreadcrumbStore.js';\nimport { wrap } from '../utils/FunctionWrapper.js';\n\n/**\n * FetchInterceptor - Intercepts network calls using the wrapper (chaining) pattern.\n * Captures URL and method details to feed into the breadcrumb flow.\n */\nexport class FetchInterceptor {\n constructor() {\n this.wrapper = null;\n }\n\n /**\n * Initializes interception of the global fetch API.\n */\n init() {\n // Guard: browser and fetch available\n if (typeof window === 'undefined' || !window.fetch) return;\n\n this.wrapper = wrap(window, 'fetch', (original) => {\n return (...args) => {\n // Functional extraction of URL and method\n const url = (args[0] instanceof Request) ? args[0].url : (args[0] || 'unknown');\n const method = (args[0] instanceof Request) ? args[0].method : (args[1]?.method || 'GET');\n\n breadcrumbStore.add({\n category: 'network',\n message: `Request: ${method} ${url}`,\n data: {\n url,\n method,\n timestamp: Date.now()\n }\n });\n\n // Continue with original execution\n return original.apply(window, args);\n };\n });\n }\n\n /**\n * Restores original fetch behaviour.\n */\n destroy() {\n // Guard: no wrapper\n if (!this.wrapper) return;\n\n this.wrapper.destroy();\n this.wrapper = null;\n }\n}\n","import { Environment } from '../../utils/Environment.js';\n\n/**\n * Pure function: Generates a secure ID using an injected crypto provider.\n * Accepts a cryptoApi object so all fallback branches are independently testable.\n * @param {Object|null} cryptoApi - Crypto implementation (e.g. window.crypto or null)\n * @returns {string} Secure random ID\n */\nexport const createSecureId = (cryptoApi = (typeof crypto !== 'undefined' ? crypto : null)) => {\n if (typeof cryptoApi?.randomUUID === 'function') {\n return cryptoApi.randomUUID();\n }\n if (typeof cryptoApi?.getRandomValues === 'function') {\n const array = new Uint8Array(16);\n cryptoApi.getRandomValues(array);\n return Array.from(array, b => b.toString(16).padStart(2, '0')).join('');\n }\n return `${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n};\n\n/**\n * Functional fragments: pure context providers.\n * Uses Environment.runIf for safe access.\n */\nexport const CONTEXT_PROVIDERS = {\n device: {\n userAgent: () => Environment.runIf('navigator.userAgent', () => navigator.userAgent),\n language: () => Environment.runIf('navigator.language', () => navigator.language),\n languages: () => Environment.runIf('navigator.languages', () => navigator.languages),\n screen: () => Environment.runIf('window.screen', () => ({\n width: window.screen.width,\n height: window.screen.height,\n availWidth: window.screen.availWidth,\n availHeight: window.screen.availHeight,\n colorDepth: window.screen.colorDepth,\n pixelDepth: window.screen.pixelDepth\n })),\n timezone: () => Environment.runIf('Intl.DateTimeFormat', () => {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n } catch (e) { return null; }\n }),\n cookieEnabled: () => Environment.runIf('navigator.cookieEnabled', () => navigator.cookieEnabled),\n doNotTrack: () => Environment.runIf('navigator.doNotTrack', () => navigator.doNotTrack)\n },\n window: {\n url: () => Environment.runIf('window.location.href', () => window.location.href),\n pathname: () => Environment.runIf('window.location.pathname', () => window.location.pathname),\n search: () => Environment.runIf('window.location.search', () => window.location.search),\n hash: () => Environment.runIf('window.location.hash', () => window.location.hash),\n referrer: () => Environment.runIf('document.referrer', () => document.referrer),\n title: () => Environment.runIf('document.title', () => document.title),\n viewport: () => Environment.runIf('window.innerWidth', () => ({\n width: window.innerWidth,\n height: window.innerHeight\n }))\n },\n storage: {\n localStorage: () => Environment.runIf('localStorage', () => {\n try {\n const storage = window.localStorage;\n return {\n keys: Object.keys(storage).length,\n size: JSON.stringify(storage).length,\n keyNames: Object.keys(storage)\n };\n } catch (e) { return null; }\n }),\n sessionStorage: () => Environment.runIf('sessionStorage', () => {\n try {\n const storage = window.sessionStorage;\n return {\n keys: Object.keys(storage).length,\n size: JSON.stringify(storage).length,\n keyNames: Object.keys(storage)\n };\n } catch (e) { return null; }\n })\n },\n network: {\n online: () => Environment.runIf('navigator.onLine', () => navigator.onLine),\n connection: () => Environment.runIf(() => !!(typeof navigator !== 'undefined' && (navigator.connection || navigator.mozConnection || navigator.webkitConnection)), () => {\n const conn = navigator.connection || navigator.mozConnection || navigator.webkitConnection;\n return {\n effectiveType: conn.effectiveType,\n downlink: conn.downlink,\n rtt: conn.rtt\n };\n })\n },\n ui: {\n focused: () => Environment.runIf('document.hasFocus', () => document.hasFocus()),\n visibility: () => Environment.runIf('document.visibilityState', () => document.visibilityState),\n activeElement: () => Environment.runIf('document.activeElement', () => ({\n tagName: document.activeElement.tagName,\n id: document.activeElement.id,\n className: document.activeElement.className\n }))\n },\n performance: {\n memory: () => Environment.runIf('performance.memory', () => ({\n used: Math.round(performance.memory.usedJSHeapSize / 1048576),\n total: Math.round(performance.memory.totalJSHeapSize / 1048576),\n limit: Math.round(performance.memory.jsHeapSizeLimit / 1048576)\n })),\n timing: () => Environment.runIf('performance.timing', () => ({\n navigationStart: performance.timing.navigationStart,\n loadEventEnd: performance.timing.loadEventEnd\n }))\n },\n session: {\n sessionId: (collector) => collector.generateSessionId(),\n startTime: () => new Date().toISOString(),\n pageLoadTime: () => Environment.runIf('performance.now', () => performance.now())\n }\n};\n\n/**\n * Default fields for context collection.\n */\nconst DEFAULT_CONTEXT_FIELDS = {\n device: ['userAgent', 'language', 'screen', 'timezone'],\n window: ['url', 'viewport', 'title'],\n session: ['sessionId', 'pageLoadTime'],\n ui: ['visibility', 'activeElement'],\n network: ['online', 'connection']\n};\n\n/**\n * ContextCollector - Minimal coordinator with no imperative state.\n */\nexport class ContextCollector {\n constructor() {\n this.sessionId = null;\n this.providers = new Map(Object.entries(CONTEXT_PROVIDERS));\n }\n\n /**\n * Collects context based on a declarative configuration.\n */\n collect(contextConfig = {}) {\n const config = this.normalizeConfig(contextConfig);\n\n return Object.entries(config).reduce((ctx, [type, options]) => {\n try {\n const provider = this.providers.get(type);\n if (options !== false && !provider) throw new Error(`Provider for '${type}' not found`);\n\n const fields = this.resolveFields(type, provider, options);\n if (fields) {\n ctx[type] = this.extractFields(provider, fields);\n }\n } catch (error) {\n console.warn(`SyntropyFront: Error collecting context for ${type}:`, error);\n ctx[type] = { error: 'Collection failed' };\n }\n return ctx;\n }, {});\n }\n\n /**\n * Field resolution — declarative strategy map by type.\n * Contracts:\n * boolean true → default fields for type, or all provider keys\n * boolean false → null (skip)\n * array → explicit field list\n * plain object → all provider keys (treated as unstructured custom config)\n * other → null (skip)\n */\n resolveFields(type, provider, options) {\n const allProviderKeys = () => Object.keys(provider || {});\n const strategies = {\n boolean: (val) => val ? (DEFAULT_CONTEXT_FIELDS[type] || allProviderKeys()) : null,\n object: (val) => Array.isArray(val) ? val : allProviderKeys(),\n };\n\n const strategy = strategies[typeof options];\n return strategy ? strategy(options) : null;\n }\n\n /**\n * Functional normalization of configuration.\n */\n normalizeConfig(config) {\n if (Array.isArray(config)) {\n return config.reduce((acc, type) => ({ ...acc, [type]: true }), {});\n }\n return config || {};\n }\n\n /**\n * Pure field extraction.\n */\n extractFields(provider, fieldNames) {\n return fieldNames.reduce((result, fieldName) => {\n const getter = provider[fieldName];\n if (typeof getter !== 'function') return result;\n\n try {\n result[fieldName] = getter(this);\n } catch (e) {\n console.warn(`SyntropyFront: Error collecting field ${fieldName}:`, e);\n result[fieldName] = null;\n }\n return result;\n }, {});\n }\n\n registerProvider(name, fields) {\n this.providers.set(name, fields);\n }\n\n generateSessionId() {\n this.sessionId = this.sessionId || `session_${this.generateSecureId()}`;\n return this.sessionId;\n }\n\n // Delegates to the pure top-level createSecureId (injectable for testing)\n generateSecureId(cryptoApi = (typeof crypto !== 'undefined' ? crypto : null)) {\n return createSecureId(cryptoApi);\n }\n\n getAvailableTypes() {\n return Array.from(this.providers.keys());\n }\n\n get allFields() {\n return Array.from(this.providers.entries()).reduce((res, [name, fields]) => {\n res[name] = fields;\n return res;\n }, {});\n }\n\n get defaultContexts() {\n return this.allFields;\n }\n}\n\nexport const contextCollector = new ContextCollector();\n","import { breadcrumbStore } from '../core/breadcrumbs/BreadcrumbStore.js';\nimport { agent } from '../core/agent/Agent.js';\nimport { contextCollector } from '../core/context/ContextCollector.js';\nimport { wrap, safeApply } from '../utils/FunctionWrapper.js';\nimport { Environment } from '../utils/Environment.js';\n\n/**\n * Functional fragments: pure error payload generators.\n */\nexport const ERROR_UTILS = {\n createExceptionPayload: (message, source, lineno, colno, error) => ({\n type: 'uncaught_exception',\n error: { message, source, lineno, colno, stack: error?.stack },\n breadcrumbs: breadcrumbStore.getAll(),\n timestamp: new Date().toISOString()\n }),\n\n createRejectionPayload: (event) => ({\n type: 'unhandled_rejection',\n error: {\n message: event.reason?.message || 'Promise rejection without message',\n stack: event.reason?.stack,\n },\n breadcrumbs: breadcrumbStore.getAll(),\n timestamp: new Date().toISOString()\n })\n};\n\n/**\n * ErrorInterceptor - Error capture coordinated by functional fragments.\n * Refactored to remove heavy imperative logic and use FunctionWrapper consistently.\n */\nexport class ErrorInterceptor {\n constructor() {\n this.errorWrapper = null;\n this.rejectionWrapper = null;\n this.config = { captureErrors: true, captureUnhandledRejections: true };\n this.contextTypes = [];\n this.onErrorCallback = null;\n }\n\n /**\n * Dynamic configuration of the interceptor.\n */\n configure(config, contextTypes, onErrorCallback) {\n this.config = { ...this.config, ...config };\n this.contextTypes = contextTypes || [];\n this.onErrorCallback = onErrorCallback;\n }\n\n /**\n * Selective initialization.\n */\n init() {\n // Guard: browser environment\n if (!Environment.isBrowser()) return;\n\n this.setupExceptionCapture();\n this.setupRejectionCapture();\n }\n\n /**\n * Sets up the wrapper for window.onerror (exceptions).\n */\n setupExceptionCapture() {\n // Guard: capture disabled\n if (!this.config.captureErrors) return;\n\n this.errorWrapper = wrap(window, 'onerror', (original) => {\n return (message, source, lineno, colno, error) => {\n const payload = ERROR_UTILS.createExceptionPayload(message, source, lineno, colno, error);\n this.handleError(payload);\n return safeApply(original, window, [message, source, lineno, colno, error], 'original window.onerror');\n };\n });\n }\n\n /**\n * Sets up the wrapper for promise rejections.\n */\n setupRejectionCapture() {\n // Guard: capture disabled\n if (!this.config.captureUnhandledRejections) return;\n\n this.rejectionWrapper = wrap(window, 'onunhandledrejection', (original) => {\n return (event) => {\n const payload = ERROR_UTILS.createRejectionPayload(event);\n this.handleError(payload);\n safeApply(original, window, [event], 'original window.onunhandledrejection');\n };\n });\n }\n\n /**\n * Functional delegation for error handling and send.\n */\n handleError(payload) {\n const context = this.contextTypes.length > 0 ? contextCollector.collect(this.contextTypes) : null;\n agent.sendError(payload, context);\n if (this.onErrorCallback) this.onErrorCallback(payload);\n }\n\n /**\n * Cleans up wrappers to avoid memory leaks.\n */\n destroy() {\n this.errorWrapper?.destroy();\n this.rejectionWrapper?.destroy();\n this.errorWrapper = null;\n this.rejectionWrapper = null;\n }\n}\n","/**\n * Copyright 2024 Syntropysoft\n */\n\nimport { ClickInterceptor } from './ClickInterceptor.js';\nimport { FetchInterceptor } from './FetchInterceptor.js';\nimport { ErrorInterceptor } from './ErrorInterceptor.js';\n\n/**\n * Interceptors - Coordinator for modular interceptors.\n * Follows SOLID principles by treating interceptors as an extensible collection.\n * Registry pattern architecture.\n */\nexport class Interceptors {\n constructor() {\n this.isInitialized = false;\n this.config = {\n captureClicks: true,\n captureFetch: true,\n captureErrors: true,\n captureUnhandledRejections: true\n };\n\n this.registry = new Map();\n this.initializeRegistry();\n }\n\n /**\n * Declarative registration of standard interceptors.\n */\n initializeRegistry() {\n this.registry.set('clicks', new ClickInterceptor());\n this.registry.set('fetch', new FetchInterceptor());\n this.registry.set('errors', new ErrorInterceptor());\n }\n\n /**\n * Decoupled configuration.\n */\n configure(config = {}) {\n this.config = { ...this.config, ...config };\n // Inject config and optional callbacks into interceptors that need them\n this.registry.get('errors')?.configure?.(this.config, config.context || [], config.onError);\n }\n\n /**\n * Initialization via functional pipeline.\n */\n init() {\n // Guard: already initialized\n if (this.isInitialized) return;\n\n this.runLifecycle('init');\n\n this.isInitialized = true;\n console.log('SyntropyFront: Interceptors initialized (Refactored architecture)');\n }\n\n /**\n * Teardown via functional pipeline.\n */\n destroy() {\n // Guard: not initialized\n if (!this.isInitialized) return;\n\n this.runLifecycle('destroy');\n\n this.isInitialized = false;\n console.log('SyntropyFront: Interceptors destroyed');\n }\n\n /**\n * Runs a lifecycle method across the registry based on config.\n * Functional pipeline: filter -> map -> filter -> forEach.\n */\n runLifecycle(method) {\n const lifecycleMap = [\n { key: 'clicks', enabled: this.config.captureClicks },\n { key: 'fetch', enabled: this.config.captureFetch },\n { key: 'errors', enabled: this.config.captureErrors || this.config.captureUnhandledRejections }\n ];\n\n lifecycleMap\n .filter(item => item.enabled)\n .map(item => this.registry.get(item.key))\n .filter(interceptor => interceptor && typeof interceptor[method] === 'function')\n .forEach(interceptor => interceptor[method]());\n }\n\n // Compatibility accessors for tests or controlled direct access\n get clickInterceptor() { return this.registry.get('clicks'); }\n get fetchInterceptor() { return this.registry.get('fetch'); }\n get errorInterceptor() { return this.registry.get('errors'); }\n}\n\nexport const interceptors = new Interceptors();","/**\n * Copyright 2024 Syntropysoft\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * SyntropyFront - Observability library with automatic capture\n * Acts as a Facade connecting the Agent and modular Interceptors\n */\nimport { breadcrumbStore } from './core/breadcrumbs/BreadcrumbStore.js';\nimport { agent } from './core/agent/Agent.js';\nimport { interceptors } from './interceptors/Interceptors.js';\n\nclass SyntropyFront {\n constructor() {\n this.isActive = false;\n this.config = {\n maxEvents: 50,\n endpoint: null,\n headers: {},\n usePersistentBuffer: true,\n captureClicks: true,\n captureFetch: true,\n captureErrors: true,\n captureUnhandledRejections: true,\n samplingRate: 1.0,\n onError: null\n };\n\n // Auto-initialize\n this.init();\n }\n\n /**\n * Initializes the library and activates interceptors\n */\n init() {\n if (this.isActive) return;\n\n this._applyConfig();\n interceptors.init();\n\n // Retry failed items from previous sessions\n agent.retryFailedItems().catch(err => {\n console.warn('SyntropyFront: Error attempting to recover persistent items:', err);\n });\n\n this.isActive = true;\n console.log('🚀 SyntropyFront: Initialized with modular resilient architecture');\n }\n\n /**\n * Private: applies current config to agent and interceptors.\n */\n _applyConfig() {\n agent.configure({\n endpoint: this.config.endpoint,\n headers: this.config.headers,\n usePersistentBuffer: this.config.usePersistentBuffer,\n samplingRate: this.config.samplingRate,\n batchTimeout: this.config.batchTimeout ?? (this.config.captureClicks || this.config.captureFetch ? 5000 : null)\n });\n\n breadcrumbStore.onBreadcrumbAdded = (crumb) => {\n if (agent.isEnabled() && agent.shouldSendBreadcrumbs()) {\n agent.sendBreadcrumbs([crumb]);\n }\n };\n\n interceptors.configure({\n captureClicks: this.config.captureClicks,\n captureFetch: this.config.captureFetch,\n captureErrors: this.config.captureErrors,\n captureUnhandledRejections: this.config.captureUnhandledRejections,\n onError: this.config.onError\n });\n }\n\n /**\n * Configures SyntropyFront\n * @param {Object} config - Configuration\n */\n configure(config = {}) {\n this.config = { ...this.config, ...config };\n\n // If 'fetch' is passed, extract endpoint and headers for compatibility\n if (config.fetch) {\n this.config.endpoint = config.fetch.url;\n this.config.headers = config.fetch.options?.headers || {};\n }\n\n this._applyConfig();\n\n const mode = this.config.endpoint ? `endpoint: ${this.config.endpoint}` : 'console only';\n console.log(`✅ SyntropyFront: Configured - ${mode}`);\n }\n\n /**\n * Adds a breadcrumb manually\n */\n addBreadcrumb(category, message, data = {}) {\n return breadcrumbStore.add({ category, message, data });\n }\n\n /**\n * Gets all breadcrumbs\n */\n getBreadcrumbs() {\n return breadcrumbStore.getAll();\n }\n\n /**\n * Clears breadcrumbs\n */\n clearBreadcrumbs() {\n breadcrumbStore.clear();\n }\n\n /**\n * Sends an error manually with context\n */\n sendError(error, context = {}) {\n const errorPayload = {\n type: 'manual_error',\n error: {\n message: error.message || String(error),\n name: error.name || 'Error',\n stack: error.stack\n },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n agent.sendError(errorPayload, context);\n return errorPayload;\n }\n\n /**\n * Forces sending pending data\n */\n async flush() {\n await agent.forceFlush();\n }\n\n /**\n * Gets usage statistics\n */\n getStats() {\n return {\n isActive: this.isActive,\n breadcrumbs: breadcrumbStore.count(),\n agent: agent.getStats(),\n config: { ...this.config }\n };\n }\n\n /**\n * Deactivates the library and restores original hooks\n */\n destroy() {\n interceptors.destroy();\n agent.disable();\n this.isActive = false;\n console.log('SyntropyFront: Deactivated');\n }\n}\n\n// Singleton instance\nconst syntropyFront = new SyntropyFront();\n\n// Export the default instance\nexport default syntropyFront;"],"names":[],"mappings":"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"}