@syntropysoft/syntropyfront 0.2.2 → 0.2.3

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/README.md CHANGED
@@ -7,13 +7,15 @@
7
7
  <p align="center">
8
8
  <strong>From Chaos to Clarity</strong>
9
9
  <br />
10
- The Observability Framework for High-Performance Teams
10
+ The Observability Library for High-Performance Teams
11
11
  </p>
12
12
 
13
13
  <p align="center">
14
14
  <a href="https://www.npmjs.com/package/@syntropysoft/syntropyfront"><img src="https://img.shields.io/npm/v/@syntropysoft/syntropyfront.svg" alt="NPM Version"></a>
15
15
  <a href="https://github.com/Syntropysoft/SyntropyLog/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/@syntropysoft/syntropyfront.svg" alt="License"></a>
16
16
  <a href="#"><img src="https://img.shields.io/badge/status-ready%20for%20production-brightgreen.svg" alt="Ready for Production"></a>
17
+ <a href="#"><img src="https://github.com/Syntropysoft/syntropyfront/workflows/CodeQL/badge.svg" alt="CodeQL"></a>
18
+ <a href="#"><img src="https://img.shields.io/badge/dependabot-enabled-brightgreen.svg" alt="Dependabot"></a>
17
19
  </p>
18
20
 
19
21
  ---
@@ -37,14 +39,14 @@ SyntropyFront automatically captures user interactions, errors, HTTP calls, and
37
39
  ### Basic Usage (1 line of code!)
38
40
 
39
41
  ```javascript
40
- import syntropyFront from 'syntropyfront';
42
+ import syntropyFront from '@syntropysoft/syntropyfront';
41
43
  // That's it! Auto-initializes and captures everything automatically
42
44
  ```
43
45
 
44
46
  ### With Custom Configuration
45
47
 
46
48
  ```javascript
47
- import syntropyFront from 'syntropyfront';
49
+ import syntropyFront from '@syntropysoft/syntropyfront';
48
50
 
49
51
  // Option 1: Console only (default)
50
52
  syntropyFront.configure({
@@ -93,7 +95,9 @@ syntropyFront.configure({
93
95
  ## 📦 Installation
94
96
 
95
97
  ```bash
96
- npm install syntropyfront
98
+ npm install @syntropysoft/syntropyfront
99
+ ```
100
+
97
101
  ## 🎯 How It Works
98
102
 
99
103
  SyntropyFront automatically:
@@ -240,7 +244,7 @@ SyntropyFront captures the essentials by default, but you can extend it to captu
240
244
  ### Adding Custom Event Capture
241
245
 
242
246
  ```javascript
243
- import syntropyFront from 'syntropyfront';
247
+ import syntropyFront from '@syntropysoft/syntropyfront';
244
248
 
245
249
  // Add scroll tracking
246
250
  window.addEventListener('scroll', () => {
@@ -317,7 +321,7 @@ SyntropyFront works with any JavaScript framework:
317
321
 
318
322
  ```jsx
319
323
  import React from 'react';
320
- import syntropyFront from 'syntropyfront';
324
+ import syntropyFront from '@syntropysoft/syntropyfront';
321
325
 
322
326
  function App() {
323
327
  // SyntropyFront auto-initializes on import
@@ -339,7 +343,7 @@ function App() {
339
343
  </template>
340
344
 
341
345
  <script>
342
- import syntropyFront from 'syntropyfront';
346
+ import syntropyFront from '@syntropysoft/syntropyfront';
343
347
 
344
348
  export default {
345
349
  methods: {
@@ -354,7 +358,7 @@ export default {
354
358
  ### Manual Error Reporting
355
359
 
356
360
  ```javascript
357
- import syntropyFront from 'syntropyfront';
361
+ import syntropyFront from '@syntropysoft/syntropyfront';
358
362
 
359
363
  try {
360
364
  // Your code here
@@ -370,7 +374,7 @@ syntropyFront.sendError(new Error('Something went wrong'));
370
374
  ### Extending with Custom Events
371
375
 
372
376
  ```javascript
373
- import syntropyFront from 'syntropyfront';
377
+ import syntropyFront from '@syntropysoft/syntropyfront';
374
378
 
375
379
  // Add your custom event listeners
376
380
  window.addEventListener('scroll', () => {
@@ -417,4 +421,4 @@ Contributions are welcome! Please feel free to submit a Pull Request.
417
421
 
418
422
  ---
419
423
 
420
- **Made with ❤️ for better web observability**
424
+ **Made with ❤️ for better web observability**
package/dist/index.cjs CHANGED
@@ -271,19 +271,19 @@ class SyntropyFront {
271
271
  const [url, options] = args;
272
272
 
273
273
  this.addBreadcrumb('http', 'fetch', {
274
- url: url,
274
+ url,
275
275
  method: options?.method || 'GET'
276
276
  });
277
277
 
278
278
  return originalFetch(...args).then(response => {
279
279
  this.addBreadcrumb('http', 'fetch_response', {
280
- url: url,
280
+ url,
281
281
  status: response.status
282
282
  });
283
283
  return response;
284
284
  }).catch(error => {
285
285
  this.addBreadcrumb('http', 'fetch_error', {
286
- url: url,
286
+ url,
287
287
  error: error.message
288
288
  });
289
289
  throw error;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/core/BreadcrumbManager.js","../src/core/ErrorManager.js","../src/core/Logger.js","../src/index.js"],"sourcesContent":["/**\n * BreadcrumbManager - Gestiona breadcrumbs\n * Responsabilidad única: Almacenar y gestionar breadcrumbs\n */\nexport class BreadcrumbManager {\n constructor() {\n this.breadcrumbs = [];\n }\n\n add(category, message, data = {}) {\n const breadcrumb = {\n category,\n message,\n data,\n timestamp: new Date().toISOString()\n };\n \n this.breadcrumbs.push(breadcrumb);\n return breadcrumb;\n }\n\n getAll() {\n return this.breadcrumbs;\n }\n\n clear() {\n this.breadcrumbs = [];\n }\n\n getCount() {\n return this.breadcrumbs.length;\n }\n} ","/**\n * ErrorManager - Gestiona errores\n * Responsabilidad única: Formatear y gestionar errores\n */\nexport class ErrorManager {\n constructor() {\n this.errors = [];\n }\n\n send(error, context = {}) {\n const errorData = {\n message: error.message,\n stack: error.stack,\n context,\n timestamp: new Date().toISOString()\n };\n \n this.errors.push(errorData);\n return errorData;\n }\n\n getAll() {\n return this.errors;\n }\n\n clear() {\n this.errors = [];\n }\n\n getCount() {\n return this.errors.length;\n }\n} ","/**\n * Logger - Hace logging solo en errores\n * Responsabilidad única: Mostrar mensajes solo cuando hay errores\n */\nexport class Logger {\n constructor() {\n this.isSilent = true; // Por defecto silente\n }\n\n log(message, data = null) {\n // No loggear nada en modo silente\n if (this.isSilent) return;\n \n if (data) {\n console.log(message, data);\n } else {\n console.log(message);\n }\n }\n\n error(message, data = null) {\n // SIEMPRE loggear errores\n if (data) {\n console.error(message, data);\n } else {\n console.error(message);\n }\n }\n\n warn(message, data = null) {\n // Solo warnings importantes\n if (data) {\n console.warn(message, data);\n } else {\n console.warn(message);\n }\n }\n\n // Método para activar logging (solo para debug)\n enableLogging() {\n this.isSilent = false;\n }\n\n // Método para desactivar logging\n disableLogging() {\n this.isSilent = true;\n }\n} ","/**\n * SyntropyFront - Observability library with automatic capture\n * Single responsibility: Automatically capture events and send errors with context\n */\nimport { BreadcrumbManager } from './core/BreadcrumbManager.js';\nimport { ErrorManager } from './core/ErrorManager.js';\nimport { Logger } from './core/Logger.js';\n\nclass SyntropyFront {\n constructor() {\n // Basic managers\n this.breadcrumbManager = new BreadcrumbManager();\n this.errorManager = new ErrorManager();\n this.logger = new Logger();\n \n // Default configuration\n this.maxEvents = 50;\n this.fetchConfig = null; // Complete fetch configuration\n this.onErrorCallback = null; // User-defined error handler\n this.isActive = false;\n \n // Automatic capture\n this.originalHandlers = {};\n \n // Auto-initialize\n this.init();\n }\n\n init() {\n this.isActive = true;\n \n // Configure automatic capture immediately\n this.setupAutomaticCapture();\n \n console.log('🚀 SyntropyFront: Initialized with automatic capture');\n }\n\n /**\n * Configure SyntropyFront\n * @param {Object} config - Configuration\n * @param {number} config.maxEvents - Maximum number of events to store\n * @param {Object} config.fetch - Complete fetch configuration\n * @param {string} config.fetch.url - Endpoint URL\n * @param {Object} config.fetch.options - Fetch options (headers, method, etc.)\n * @param {Function} config.onError - User-defined error handler callback\n */\n configure(config = {}) {\n this.maxEvents = config.maxEvents || this.maxEvents;\n this.fetchConfig = config.fetch;\n this.onErrorCallback = config.onError;\n \n if (this.onErrorCallback) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, custom error handler`);\n } else if (this.fetchConfig) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, endpoint: ${this.fetchConfig.url}`);\n } else {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, console only`);\n }\n }\n\n /**\n * Configure automatic event capture\n */\n setupAutomaticCapture() {\n if (typeof window === 'undefined') return;\n\n // Capture clicks\n this.setupClickCapture();\n \n // Capture errors\n this.setupErrorCapture();\n \n // Capture HTTP calls\n this.setupHttpCapture();\n \n // Capture console logs\n this.setupConsoleCapture();\n }\n\n /**\n * Capture user clicks\n */\n setupClickCapture() {\n const clickHandler = (event) => {\n const element = event.target;\n this.addBreadcrumb('user', 'click', {\n element: element.tagName,\n id: element.id,\n className: element.className,\n x: event.clientX,\n y: event.clientY\n });\n };\n\n document.addEventListener('click', clickHandler);\n }\n\n /**\n * Automatically capture errors\n */\n setupErrorCapture() {\n // Save original handlers\n this.originalHandlers.onerror = window.onerror;\n this.originalHandlers.onunhandledrejection = window.onunhandledrejection;\n\n // Intercept errors\n window.onerror = (message, source, lineno, colno, error) => {\n const errorPayload = {\n type: 'uncaught_exception',\n error: { message, source, lineno, colno, stack: error?.stack },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onerror) {\n return this.originalHandlers.onerror(message, source, lineno, colno, error);\n }\n \n return false;\n };\n\n // Intercept rejected promises\n window.onunhandledrejection = (event) => {\n const errorPayload = {\n type: 'unhandled_rejection',\n error: {\n message: event.reason?.message || 'Promise rejection without message',\n stack: event.reason?.stack,\n },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onunhandledrejection) {\n this.originalHandlers.onunhandledrejection(event);\n }\n };\n }\n\n /**\n * Capture HTTP calls\n */\n setupHttpCapture() {\n // Intercept fetch\n const originalFetch = window.fetch;\n window.fetch = (...args) => {\n const [url, options] = args;\n \n this.addBreadcrumb('http', 'fetch', {\n url: url,\n method: options?.method || 'GET'\n });\n\n return originalFetch(...args).then(response => {\n this.addBreadcrumb('http', 'fetch_response', {\n url: url,\n status: response.status\n });\n return response;\n }).catch(error => {\n this.addBreadcrumb('http', 'fetch_error', {\n url: url,\n error: error.message\n });\n throw error;\n });\n };\n }\n\n /**\n * Capture console logs\n */\n setupConsoleCapture() {\n const originalLog = console.log;\n const originalError = console.error;\n const originalWarn = console.warn;\n\n console.log = (...args) => {\n this.addBreadcrumb('console', 'log', { message: args.join(' ') });\n originalLog.apply(console, args);\n };\n\n console.error = (...args) => {\n this.addBreadcrumb('console', 'error', { message: args.join(' ') });\n originalError.apply(console, args);\n };\n\n console.warn = (...args) => {\n this.addBreadcrumb('console', 'warn', { message: args.join(' ') });\n originalWarn.apply(console, args);\n };\n }\n\n /**\n * Handle errors - priority: onError callback > fetch > console\n */\n handleError(errorPayload) {\n // Default log\n this.logger.error('❌ Error:', errorPayload);\n \n // Priority 1: User-defined callback (maximum flexibility)\n if (this.onErrorCallback) {\n try {\n this.onErrorCallback(errorPayload);\n } catch (callbackError) {\n console.warn('SyntropyFront: Error in user callback:', callbackError);\n }\n return;\n }\n \n // Priority 2: Fetch to endpoint\n if (this.fetchConfig) {\n this.postToEndpoint(errorPayload);\n return;\n }\n \n // Priority 3: Console only (default)\n // Already logged above\n }\n\n /**\n * Post error object using fetch configuration\n */\n postToEndpoint(errorPayload) {\n const { url, options = {} } = this.fetchConfig;\n \n // Default configuration\n const defaultOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n },\n body: JSON.stringify(errorPayload),\n ...options\n };\n\n fetch(url, defaultOptions).catch(error => {\n console.warn('SyntropyFront: Error posting to endpoint:', error);\n });\n }\n\n // Public API\n addBreadcrumb(category, message, data = {}) {\n if (!this.isActive) return;\n \n const breadcrumb = this.breadcrumbManager.add(category, message, data);\n \n // Keep only the last maxEvents\n const breadcrumbs = this.breadcrumbManager.getAll();\n if (breadcrumbs.length > this.maxEvents) {\n this.breadcrumbManager.clear();\n breadcrumbs.slice(-this.maxEvents).forEach(b => this.breadcrumbManager.add(b.category, b.message, b.data));\n }\n \n return breadcrumb;\n }\n\n getBreadcrumbs() {\n return this.breadcrumbManager.getAll();\n }\n\n clearBreadcrumbs() {\n this.breadcrumbManager.clear();\n }\n\n sendError(error, context = {}) {\n if (!this.isActive) return;\n \n const errorData = this.errorManager.send(error, context);\n const errorPayload = {\n ...errorData,\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n \n this.handleError(errorPayload);\n return errorData;\n }\n\n getErrors() {\n return this.errorManager.getAll();\n }\n\n clearErrors() {\n this.errorManager.clear();\n }\n\n // Utility methods\n getStats() {\n return {\n breadcrumbs: this.breadcrumbManager.getCount(),\n errors: this.errorManager.getCount(),\n isActive: this.isActive,\n maxEvents: this.maxEvents,\n hasFetchConfig: !!this.fetchConfig,\n hasErrorCallback: !!this.onErrorCallback,\n endpoint: this.fetchConfig?.url || 'console'\n };\n }\n}\n\n// Single instance - auto-initializes\nconst syntropyFront = new SyntropyFront();\n\n// Export the instance\nexport default syntropyFront; "],"names":[],"mappings":";;;;AAAA;AACA;AACA;AACA;AACO,MAAM,iBAAiB,CAAC;AAC/B,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAC9B,KAAK;AACL;AACA,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE;AACtC,QAAQ,MAAM,UAAU,GAAG;AAC3B,YAAY,QAAQ;AACpB,YAAY,OAAO;AACnB,YAAY,IAAI;AAChB,YAAY,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC/C,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,QAAQ,OAAO,UAAU,CAAC;AAC1B,KAAK;AACL;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC;AAChC,KAAK;AACL;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAC9B,KAAK;AACL;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AACvC,KAAK;AACL;;AChCA;AACA;AACA;AACA;AACO,MAAM,YAAY,CAAC;AAC1B,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACzB,KAAK;AACL;AACA,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;AAC9B,QAAQ,MAAM,SAAS,GAAG;AAC1B,YAAY,OAAO,EAAE,KAAK,CAAC,OAAO;AAClC,YAAY,KAAK,EAAE,KAAK,CAAC,KAAK;AAC9B,YAAY,OAAO;AACnB,YAAY,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC/C,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACpC,QAAQ,OAAO,SAAS,CAAC;AACzB,KAAK;AACL;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC;AAC3B,KAAK;AACL;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACzB,KAAK;AACL;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAClC,KAAK;AACL;;AChCA;AACA;AACA;AACA;AACO,MAAM,MAAM,CAAC;AACpB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC7B,KAAK;AACL;AACA,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,EAAE;AAC9B;AACA,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;AAClC;AACA,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAY,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACvC,SAAS,MAAM;AACf,YAAY,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACjC,SAAS;AACT,KAAK;AACL;AACA,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,EAAE;AAChC;AACA,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAY,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACzC,SAAS,MAAM;AACf,YAAY,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACnC,SAAS;AACT,KAAK;AACL;AACA,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,EAAE;AAC/B;AACA,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAY,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACxC,SAAS,MAAM;AACf,YAAY,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClC,SAAS;AACT,KAAK;AACL;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC9B,KAAK;AACL;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC7B,KAAK;AACL;;AC/CA;AACA;AACA;AACA;AAIA;AACA,MAAM,aAAa,CAAC;AACpB,IAAI,WAAW,GAAG;AAClB;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;AACzD,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AAC/C,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AACnC;AACA;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AAC5B,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAChC,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AACpC,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC9B;AACA;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AACnC;AACA;AACA,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;AACpB,KAAK;AACL;AACA,IAAI,IAAI,GAAG;AACX,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC7B;AACA;AACA,QAAQ,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACrC;AACA,QAAQ,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;AAC5E,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,MAAM,GAAG,EAAE,EAAE;AAC3B,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;AAC5D,QAAQ,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;AACxC,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC;AAC9C;AACA,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE;AAClC,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,yCAAyC,EAAE,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,CAAC;AAC5G,SAAS,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;AACrC,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,yCAAyC,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzH,SAAS,MAAM;AACf,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,yCAAyC,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC;AACpG,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,OAAO;AAClD;AACA;AACA,QAAQ,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACjC;AACA;AACA,QAAQ,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACjC;AACA;AACA,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAChC;AACA;AACA,QAAQ,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACnC,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,MAAM,YAAY,GAAG,CAAC,KAAK,KAAK;AACxC,YAAY,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;AACzC,YAAY,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE;AAChD,gBAAgB,OAAO,EAAE,OAAO,CAAC,OAAO;AACxC,gBAAgB,EAAE,EAAE,OAAO,CAAC,EAAE;AAC9B,gBAAgB,SAAS,EAAE,OAAO,CAAC,SAAS;AAC5C,gBAAgB,CAAC,EAAE,KAAK,CAAC,OAAO;AAChC,gBAAgB,CAAC,EAAE,KAAK,CAAC,OAAO;AAChC,aAAa,CAAC,CAAC;AACf,SAAS,CAAC;AACV;AACA,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACzD,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB;AACA,QAAQ,IAAI,CAAC,gBAAgB,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACvD,QAAQ,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACjF;AACA;AACA,QAAQ,MAAM,CAAC,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK;AACpE,YAAY,MAAM,YAAY,GAAG;AACjC,gBAAgB,IAAI,EAAE,oBAAoB;AAC1C,gBAAgB,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAC9E,gBAAgB,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;AAClD,gBAAgB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACnD,aAAa,CAAC;AACd;AACA,YAAY,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAC3C;AACA;AACA,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;AAC/C,gBAAgB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC5F,aAAa;AACb;AACA,YAAY,OAAO,KAAK,CAAC;AACzB,SAAS,CAAC;AACV;AACA;AACA,QAAQ,MAAM,CAAC,oBAAoB,GAAG,CAAC,KAAK,KAAK;AACjD,YAAY,MAAM,YAAY,GAAG;AACjC,gBAAgB,IAAI,EAAE,qBAAqB;AAC3C,gBAAgB,KAAK,EAAE;AACvB,oBAAoB,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,mCAAmC;AACzF,oBAAoB,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK;AAC9C,iBAAiB;AACjB,gBAAgB,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;AAClD,gBAAgB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACnD,aAAa,CAAC;AACd;AACA,YAAY,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAC3C;AACA;AACA,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE;AAC5D,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAClE,aAAa;AACb,SAAS,CAAC;AACV,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,gBAAgB,GAAG;AACvB;AACA,QAAQ,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;AAC3C,QAAQ,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,KAAK;AACpC,YAAY,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;AACxC;AACA,YAAY,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE;AAChD,gBAAgB,GAAG,EAAE,GAAG;AACxB,gBAAgB,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,KAAK;AAChD,aAAa,CAAC,CAAC;AACf;AACA,YAAY,OAAO,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI;AAC3D,gBAAgB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE;AAC7D,oBAAoB,GAAG,EAAE,GAAG;AAC5B,oBAAoB,MAAM,EAAE,QAAQ,CAAC,MAAM;AAC3C,iBAAiB,CAAC,CAAC;AACnB,gBAAgB,OAAO,QAAQ,CAAC;AAChC,aAAa,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI;AAC9B,gBAAgB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE;AAC1D,oBAAoB,GAAG,EAAE,GAAG;AAC5B,oBAAoB,KAAK,EAAE,KAAK,CAAC,OAAO;AACxC,iBAAiB,CAAC,CAAC;AACnB,gBAAgB,MAAM,KAAK,CAAC;AAC5B,aAAa,CAAC,CAAC;AACf,SAAS,CAAC;AACV,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;AACxC,QAAQ,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;AAC5C,QAAQ,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;AAC1C;AACA,QAAQ,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,KAAK;AACnC,YAAY,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC9E,YAAY,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC7C,SAAS,CAAC;AACV;AACA,QAAQ,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,KAAK;AACrC,YAAY,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChF,YAAY,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC/C,SAAS,CAAC;AACV;AACA,QAAQ,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,KAAK;AACpC,YAAY,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC/E,YAAY,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC9C,SAAS,CAAC;AACV,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,YAAY,EAAE;AAC9B;AACA,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AACpD;AACA;AACA,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE;AAClC,YAAY,IAAI;AAChB,gBAAgB,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;AACnD,aAAa,CAAC,OAAO,aAAa,EAAE;AACpC,gBAAgB,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,aAAa,CAAC,CAAC;AACtF,aAAa;AACb,YAAY,OAAO;AACnB,SAAS;AACT;AACA;AACA,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAY,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,cAAc,CAAC,YAAY,EAAE;AACjC,QAAQ,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;AACvD;AACA;AACA,QAAQ,MAAM,cAAc,GAAG;AAC/B,YAAY,MAAM,EAAE,MAAM;AAC1B,YAAY,OAAO,EAAE;AACrB,gBAAgB,cAAc,EAAE,kBAAkB;AAClD,gBAAgB,GAAG,OAAO,CAAC,OAAO;AAClC,aAAa;AACb,YAAY,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;AAC9C,YAAY,GAAG,OAAO;AACtB,SAAS,CAAC;AACV;AACA,QAAQ,KAAK,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI;AAClD,YAAY,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;AAC7E,SAAS,CAAC,CAAC;AACX,KAAK;AACL;AACA;AACA,IAAI,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE;AAChD,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO;AACnC;AACA,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAC/E;AACA;AACA,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;AAC5D,QAAQ,IAAI,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AACjD,YAAY,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;AAC3C,YAAY,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACvH,SAAS;AACT;AACA,QAAQ,OAAO,UAAU,CAAC;AAC1B,KAAK;AACL;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;AAC/C,KAAK;AACL;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;AACvC,KAAK;AACL;AACA,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;AACnC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO;AACnC;AACA,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACjE,QAAQ,MAAM,YAAY,GAAG;AAC7B,YAAY,GAAG,SAAS;AACxB,YAAY,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;AAC9C,YAAY,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC/C,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AACvC,QAAQ,OAAO,SAAS,CAAC;AACzB,KAAK;AACL;AACA,IAAI,SAAS,GAAG;AAChB,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;AAC1C,KAAK;AACL;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;AAClC,KAAK;AACL;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO;AACf,YAAY,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE;AAC1D,YAAY,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAChD,YAAY,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACnC,YAAY,SAAS,EAAE,IAAI,CAAC,SAAS;AACrC,YAAY,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW;AAC9C,YAAY,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe;AACpD,YAAY,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,SAAS;AACxD,SAAS,CAAC;AACV,KAAK;AACL,CAAC;AACD;AACA;AACK,MAAC,aAAa,GAAG,IAAI,aAAa;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/core/BreadcrumbManager.js","../src/core/ErrorManager.js","../src/core/Logger.js","../src/index.js"],"sourcesContent":["/**\n * BreadcrumbManager - Gestiona breadcrumbs\n * Responsabilidad única: Almacenar y gestionar breadcrumbs\n */\nexport class BreadcrumbManager {\n constructor() {\n this.breadcrumbs = [];\n }\n\n add(category, message, data = {}) {\n const breadcrumb = {\n category,\n message,\n data,\n timestamp: new Date().toISOString()\n };\n \n this.breadcrumbs.push(breadcrumb);\n return breadcrumb;\n }\n\n getAll() {\n return this.breadcrumbs;\n }\n\n clear() {\n this.breadcrumbs = [];\n }\n\n getCount() {\n return this.breadcrumbs.length;\n }\n} ","/**\n * ErrorManager - Gestiona errores\n * Responsabilidad única: Formatear y gestionar errores\n */\nexport class ErrorManager {\n constructor() {\n this.errors = [];\n }\n\n send(error, context = {}) {\n const errorData = {\n message: error.message,\n stack: error.stack,\n context,\n timestamp: new Date().toISOString()\n };\n \n this.errors.push(errorData);\n return errorData;\n }\n\n getAll() {\n return this.errors;\n }\n\n clear() {\n this.errors = [];\n }\n\n getCount() {\n return this.errors.length;\n }\n} ","/**\n * Logger - Hace logging solo en errores\n * Responsabilidad única: Mostrar mensajes solo cuando hay errores\n */\nexport class Logger {\n constructor() {\n this.isSilent = true; // Por defecto silente\n }\n\n log(message, data = null) {\n // No loggear nada en modo silente\n if (this.isSilent) return;\n \n if (data) {\n console.log(message, data);\n } else {\n console.log(message);\n }\n }\n\n error(message, data = null) {\n // SIEMPRE loggear errores\n if (data) {\n console.error(message, data);\n } else {\n console.error(message);\n }\n }\n\n warn(message, data = null) {\n // Solo warnings importantes\n if (data) {\n console.warn(message, data);\n } else {\n console.warn(message);\n }\n }\n\n // Método para activar logging (solo para debug)\n enableLogging() {\n this.isSilent = false;\n }\n\n // Método para desactivar logging\n disableLogging() {\n this.isSilent = true;\n }\n} ","/**\n * SyntropyFront - Observability library with automatic capture\n * Single responsibility: Automatically capture events and send errors with context\n */\nimport { BreadcrumbManager } from './core/BreadcrumbManager.js';\nimport { ErrorManager } from './core/ErrorManager.js';\nimport { Logger } from './core/Logger.js';\n\nclass SyntropyFront {\n constructor() {\n // Basic managers\n this.breadcrumbManager = new BreadcrumbManager();\n this.errorManager = new ErrorManager();\n this.logger = new Logger();\n \n // Default configuration\n this.maxEvents = 50;\n this.fetchConfig = null; // Complete fetch configuration\n this.onErrorCallback = null; // User-defined error handler\n this.isActive = false;\n \n // Automatic capture\n this.originalHandlers = {};\n \n // Auto-initialize\n this.init();\n }\n\n init() {\n this.isActive = true;\n \n // Configure automatic capture immediately\n this.setupAutomaticCapture();\n \n console.log('🚀 SyntropyFront: Initialized with automatic capture');\n }\n\n /**\n * Configure SyntropyFront\n * @param {Object} config - Configuration\n * @param {number} config.maxEvents - Maximum number of events to store\n * @param {Object} config.fetch - Complete fetch configuration\n * @param {string} config.fetch.url - Endpoint URL\n * @param {Object} config.fetch.options - Fetch options (headers, method, etc.)\n * @param {Function} config.onError - User-defined error handler callback\n */\n configure(config = {}) {\n this.maxEvents = config.maxEvents || this.maxEvents;\n this.fetchConfig = config.fetch;\n this.onErrorCallback = config.onError;\n \n if (this.onErrorCallback) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, custom error handler`);\n } else if (this.fetchConfig) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, endpoint: ${this.fetchConfig.url}`);\n } else {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, console only`);\n }\n }\n\n /**\n * Configure automatic event capture\n */\n setupAutomaticCapture() {\n if (typeof window === 'undefined') return;\n\n // Capture clicks\n this.setupClickCapture();\n \n // Capture errors\n this.setupErrorCapture();\n \n // Capture HTTP calls\n this.setupHttpCapture();\n \n // Capture console logs\n this.setupConsoleCapture();\n }\n\n /**\n * Capture user clicks\n */\n setupClickCapture() {\n const clickHandler = (event) => {\n const element = event.target;\n this.addBreadcrumb('user', 'click', {\n element: element.tagName,\n id: element.id,\n className: element.className,\n x: event.clientX,\n y: event.clientY\n });\n };\n\n document.addEventListener('click', clickHandler);\n }\n\n /**\n * Automatically capture errors\n */\n setupErrorCapture() {\n // Save original handlers\n this.originalHandlers.onerror = window.onerror;\n this.originalHandlers.onunhandledrejection = window.onunhandledrejection;\n\n // Intercept errors\n window.onerror = (message, source, lineno, colno, error) => {\n const errorPayload = {\n type: 'uncaught_exception',\n error: { message, source, lineno, colno, stack: error?.stack },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onerror) {\n return this.originalHandlers.onerror(message, source, lineno, colno, error);\n }\n \n return false;\n };\n\n // Intercept rejected promises\n window.onunhandledrejection = (event) => {\n const errorPayload = {\n type: 'unhandled_rejection',\n error: {\n message: event.reason?.message || 'Promise rejection without message',\n stack: event.reason?.stack,\n },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onunhandledrejection) {\n this.originalHandlers.onunhandledrejection(event);\n }\n };\n }\n\n /**\n * Capture HTTP calls\n */\n setupHttpCapture() {\n // Intercept fetch\n const originalFetch = window.fetch;\n window.fetch = (...args) => {\n const [url, options] = args;\n \n this.addBreadcrumb('http', 'fetch', {\n url,\n method: options?.method || 'GET'\n });\n\n return originalFetch(...args).then(response => {\n this.addBreadcrumb('http', 'fetch_response', {\n url,\n status: response.status\n });\n return response;\n }).catch(error => {\n this.addBreadcrumb('http', 'fetch_error', {\n url,\n error: error.message\n });\n throw error;\n });\n };\n }\n\n /**\n * Capture console logs\n */\n setupConsoleCapture() {\n const originalLog = console.log;\n const originalError = console.error;\n const originalWarn = console.warn;\n\n console.log = (...args) => {\n this.addBreadcrumb('console', 'log', { message: args.join(' ') });\n originalLog.apply(console, args);\n };\n\n console.error = (...args) => {\n this.addBreadcrumb('console', 'error', { message: args.join(' ') });\n originalError.apply(console, args);\n };\n\n console.warn = (...args) => {\n this.addBreadcrumb('console', 'warn', { message: args.join(' ') });\n originalWarn.apply(console, args);\n };\n }\n\n /**\n * Handle errors - priority: onError callback > fetch > console\n */\n handleError(errorPayload) {\n // Default log\n this.logger.error('❌ Error:', errorPayload);\n \n // Priority 1: User-defined callback (maximum flexibility)\n if (this.onErrorCallback) {\n try {\n this.onErrorCallback(errorPayload);\n } catch (callbackError) {\n console.warn('SyntropyFront: Error in user callback:', callbackError);\n }\n return;\n }\n \n // Priority 2: Fetch to endpoint\n if (this.fetchConfig) {\n this.postToEndpoint(errorPayload);\n return;\n }\n \n // Priority 3: Console only (default)\n // Already logged above\n }\n\n /**\n * Post error object using fetch configuration\n */\n postToEndpoint(errorPayload) {\n const { url, options = {} } = this.fetchConfig;\n \n // Default configuration\n const defaultOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n },\n body: JSON.stringify(errorPayload),\n ...options\n };\n\n fetch(url, defaultOptions).catch(error => {\n console.warn('SyntropyFront: Error posting to endpoint:', error);\n });\n }\n\n // Public API\n addBreadcrumb(category, message, data = {}) {\n if (!this.isActive) return;\n \n const breadcrumb = this.breadcrumbManager.add(category, message, data);\n \n // Keep only the last maxEvents\n const breadcrumbs = this.breadcrumbManager.getAll();\n if (breadcrumbs.length > this.maxEvents) {\n this.breadcrumbManager.clear();\n breadcrumbs.slice(-this.maxEvents).forEach(b => this.breadcrumbManager.add(b.category, b.message, b.data));\n }\n \n return breadcrumb;\n }\n\n getBreadcrumbs() {\n return this.breadcrumbManager.getAll();\n }\n\n clearBreadcrumbs() {\n this.breadcrumbManager.clear();\n }\n\n sendError(error, context = {}) {\n if (!this.isActive) return;\n \n const errorData = this.errorManager.send(error, context);\n const errorPayload = {\n ...errorData,\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n \n this.handleError(errorPayload);\n return errorData;\n }\n\n getErrors() {\n return this.errorManager.getAll();\n }\n\n clearErrors() {\n this.errorManager.clear();\n }\n\n // Utility methods\n getStats() {\n return {\n breadcrumbs: this.breadcrumbManager.getCount(),\n errors: this.errorManager.getCount(),\n isActive: this.isActive,\n maxEvents: this.maxEvents,\n hasFetchConfig: !!this.fetchConfig,\n hasErrorCallback: !!this.onErrorCallback,\n endpoint: this.fetchConfig?.url || 'console'\n };\n }\n}\n\n// Single instance - auto-initializes\nconst syntropyFront = new SyntropyFront();\n\n// Export the instance\nexport default syntropyFront; "],"names":[],"mappings":";;;;AAAA;AACA;AACA;AACA;AACO,MAAM,iBAAiB,CAAC;AAC/B,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAC9B,KAAK;AACL;AACA,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE;AACtC,QAAQ,MAAM,UAAU,GAAG;AAC3B,YAAY,QAAQ;AACpB,YAAY,OAAO;AACnB,YAAY,IAAI;AAChB,YAAY,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC/C,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,QAAQ,OAAO,UAAU,CAAC;AAC1B,KAAK;AACL;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC;AAChC,KAAK;AACL;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAC9B,KAAK;AACL;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AACvC,KAAK;AACL;;AChCA;AACA;AACA;AACA;AACO,MAAM,YAAY,CAAC;AAC1B,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACzB,KAAK;AACL;AACA,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;AAC9B,QAAQ,MAAM,SAAS,GAAG;AAC1B,YAAY,OAAO,EAAE,KAAK,CAAC,OAAO;AAClC,YAAY,KAAK,EAAE,KAAK,CAAC,KAAK;AAC9B,YAAY,OAAO;AACnB,YAAY,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC/C,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACpC,QAAQ,OAAO,SAAS,CAAC;AACzB,KAAK;AACL;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC;AAC3B,KAAK;AACL;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACzB,KAAK;AACL;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAClC,KAAK;AACL;;AChCA;AACA;AACA;AACA;AACO,MAAM,MAAM,CAAC;AACpB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC7B,KAAK;AACL;AACA,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,EAAE;AAC9B;AACA,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;AAClC;AACA,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAY,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACvC,SAAS,MAAM;AACf,YAAY,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACjC,SAAS;AACT,KAAK;AACL;AACA,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,EAAE;AAChC;AACA,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAY,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACzC,SAAS,MAAM;AACf,YAAY,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACnC,SAAS;AACT,KAAK;AACL;AACA,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,EAAE;AAC/B;AACA,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAY,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACxC,SAAS,MAAM;AACf,YAAY,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClC,SAAS;AACT,KAAK;AACL;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC9B,KAAK;AACL;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC7B,KAAK;AACL;;AC/CA;AACA;AACA;AACA;AAIA;AACA,MAAM,aAAa,CAAC;AACpB,IAAI,WAAW,GAAG;AAClB;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;AACzD,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AAC/C,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AACnC;AACA;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AAC5B,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAChC,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AACpC,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC9B;AACA;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AACnC;AACA;AACA,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;AACpB,KAAK;AACL;AACA,IAAI,IAAI,GAAG;AACX,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC7B;AACA;AACA,QAAQ,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACrC;AACA,QAAQ,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;AAC5E,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,MAAM,GAAG,EAAE,EAAE;AAC3B,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;AAC5D,QAAQ,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;AACxC,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC;AAC9C;AACA,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE;AAClC,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,yCAAyC,EAAE,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,CAAC;AAC5G,SAAS,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;AACrC,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,yCAAyC,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzH,SAAS,MAAM;AACf,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,yCAAyC,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC;AACpG,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,OAAO;AAClD;AACA;AACA,QAAQ,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACjC;AACA;AACA,QAAQ,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACjC;AACA;AACA,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAChC;AACA;AACA,QAAQ,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACnC,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,MAAM,YAAY,GAAG,CAAC,KAAK,KAAK;AACxC,YAAY,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;AACzC,YAAY,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE;AAChD,gBAAgB,OAAO,EAAE,OAAO,CAAC,OAAO;AACxC,gBAAgB,EAAE,EAAE,OAAO,CAAC,EAAE;AAC9B,gBAAgB,SAAS,EAAE,OAAO,CAAC,SAAS;AAC5C,gBAAgB,CAAC,EAAE,KAAK,CAAC,OAAO;AAChC,gBAAgB,CAAC,EAAE,KAAK,CAAC,OAAO;AAChC,aAAa,CAAC,CAAC;AACf,SAAS,CAAC;AACV;AACA,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACzD,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB;AACA,QAAQ,IAAI,CAAC,gBAAgB,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACvD,QAAQ,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACjF;AACA;AACA,QAAQ,MAAM,CAAC,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK;AACpE,YAAY,MAAM,YAAY,GAAG;AACjC,gBAAgB,IAAI,EAAE,oBAAoB;AAC1C,gBAAgB,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAC9E,gBAAgB,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;AAClD,gBAAgB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACnD,aAAa,CAAC;AACd;AACA,YAAY,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAC3C;AACA;AACA,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;AAC/C,gBAAgB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC5F,aAAa;AACb;AACA,YAAY,OAAO,KAAK,CAAC;AACzB,SAAS,CAAC;AACV;AACA;AACA,QAAQ,MAAM,CAAC,oBAAoB,GAAG,CAAC,KAAK,KAAK;AACjD,YAAY,MAAM,YAAY,GAAG;AACjC,gBAAgB,IAAI,EAAE,qBAAqB;AAC3C,gBAAgB,KAAK,EAAE;AACvB,oBAAoB,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,mCAAmC;AACzF,oBAAoB,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK;AAC9C,iBAAiB;AACjB,gBAAgB,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;AAClD,gBAAgB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACnD,aAAa,CAAC;AACd;AACA,YAAY,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAC3C;AACA;AACA,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE;AAC5D,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAClE,aAAa;AACb,SAAS,CAAC;AACV,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,gBAAgB,GAAG;AACvB;AACA,QAAQ,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;AAC3C,QAAQ,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,KAAK;AACpC,YAAY,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;AACxC;AACA,YAAY,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE;AAChD,gBAAgB,GAAG;AACnB,gBAAgB,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,KAAK;AAChD,aAAa,CAAC,CAAC;AACf;AACA,YAAY,OAAO,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI;AAC3D,gBAAgB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE;AAC7D,oBAAoB,GAAG;AACvB,oBAAoB,MAAM,EAAE,QAAQ,CAAC,MAAM;AAC3C,iBAAiB,CAAC,CAAC;AACnB,gBAAgB,OAAO,QAAQ,CAAC;AAChC,aAAa,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI;AAC9B,gBAAgB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE;AAC1D,oBAAoB,GAAG;AACvB,oBAAoB,KAAK,EAAE,KAAK,CAAC,OAAO;AACxC,iBAAiB,CAAC,CAAC;AACnB,gBAAgB,MAAM,KAAK,CAAC;AAC5B,aAAa,CAAC,CAAC;AACf,SAAS,CAAC;AACV,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;AACxC,QAAQ,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;AAC5C,QAAQ,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;AAC1C;AACA,QAAQ,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,KAAK;AACnC,YAAY,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC9E,YAAY,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC7C,SAAS,CAAC;AACV;AACA,QAAQ,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,KAAK;AACrC,YAAY,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChF,YAAY,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC/C,SAAS,CAAC;AACV;AACA,QAAQ,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,KAAK;AACpC,YAAY,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC/E,YAAY,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC9C,SAAS,CAAC;AACV,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,YAAY,EAAE;AAC9B;AACA,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AACpD;AACA;AACA,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE;AAClC,YAAY,IAAI;AAChB,gBAAgB,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;AACnD,aAAa,CAAC,OAAO,aAAa,EAAE;AACpC,gBAAgB,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,aAAa,CAAC,CAAC;AACtF,aAAa;AACb,YAAY,OAAO;AACnB,SAAS;AACT;AACA;AACA,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAY,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;AAC9C,YAAY,OAAO;AACnB,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,cAAc,CAAC,YAAY,EAAE;AACjC,QAAQ,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;AACvD;AACA;AACA,QAAQ,MAAM,cAAc,GAAG;AAC/B,YAAY,MAAM,EAAE,MAAM;AAC1B,YAAY,OAAO,EAAE;AACrB,gBAAgB,cAAc,EAAE,kBAAkB;AAClD,gBAAgB,GAAG,OAAO,CAAC,OAAO;AAClC,aAAa;AACb,YAAY,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;AAC9C,YAAY,GAAG,OAAO;AACtB,SAAS,CAAC;AACV;AACA,QAAQ,KAAK,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI;AAClD,YAAY,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;AAC7E,SAAS,CAAC,CAAC;AACX,KAAK;AACL;AACA;AACA,IAAI,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE;AAChD,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO;AACnC;AACA,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAC/E;AACA;AACA,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;AAC5D,QAAQ,IAAI,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AACjD,YAAY,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;AAC3C,YAAY,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACvH,SAAS;AACT;AACA,QAAQ,OAAO,UAAU,CAAC;AAC1B,KAAK;AACL;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;AAC/C,KAAK;AACL;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;AACvC,KAAK;AACL;AACA,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;AACnC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO;AACnC;AACA,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACjE,QAAQ,MAAM,YAAY,GAAG;AAC7B,YAAY,GAAG,SAAS;AACxB,YAAY,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;AAC9C,YAAY,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC/C,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AACvC,QAAQ,OAAO,SAAS,CAAC;AACzB,KAAK;AACL;AACA,IAAI,SAAS,GAAG;AAChB,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;AAC1C,KAAK;AACL;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;AAClC,KAAK;AACL;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO;AACf,YAAY,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE;AAC1D,YAAY,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAChD,YAAY,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACnC,YAAY,SAAS,EAAE,IAAI,CAAC,SAAS;AACrC,YAAY,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW;AAC9C,YAAY,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe;AACpD,YAAY,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,SAAS;AACxD,SAAS,CAAC;AACV,KAAK;AACL,CAAC;AACD;AACA;AACK,MAAC,aAAa,GAAG,IAAI,aAAa;;;;"}
package/dist/index.js CHANGED
@@ -267,19 +267,19 @@ class SyntropyFront {
267
267
  const [url, options] = args;
268
268
 
269
269
  this.addBreadcrumb('http', 'fetch', {
270
- url: url,
270
+ url,
271
271
  method: options?.method || 'GET'
272
272
  });
273
273
 
274
274
  return originalFetch(...args).then(response => {
275
275
  this.addBreadcrumb('http', 'fetch_response', {
276
- url: url,
276
+ url,
277
277
  status: response.status
278
278
  });
279
279
  return response;
280
280
  }).catch(error => {
281
281
  this.addBreadcrumb('http', 'fetch_error', {
282
- url: url,
282
+ url,
283
283
  error: error.message
284
284
  });
285
285
  throw error;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/core/BreadcrumbManager.js","../src/core/ErrorManager.js","../src/core/Logger.js","../src/index.js"],"sourcesContent":["/**\n * BreadcrumbManager - Gestiona breadcrumbs\n * Responsabilidad única: Almacenar y gestionar breadcrumbs\n */\nexport class BreadcrumbManager {\n constructor() {\n this.breadcrumbs = [];\n }\n\n add(category, message, data = {}) {\n const breadcrumb = {\n category,\n message,\n data,\n timestamp: new Date().toISOString()\n };\n \n this.breadcrumbs.push(breadcrumb);\n return breadcrumb;\n }\n\n getAll() {\n return this.breadcrumbs;\n }\n\n clear() {\n this.breadcrumbs = [];\n }\n\n getCount() {\n return this.breadcrumbs.length;\n }\n} ","/**\n * ErrorManager - Gestiona errores\n * Responsabilidad única: Formatear y gestionar errores\n */\nexport class ErrorManager {\n constructor() {\n this.errors = [];\n }\n\n send(error, context = {}) {\n const errorData = {\n message: error.message,\n stack: error.stack,\n context,\n timestamp: new Date().toISOString()\n };\n \n this.errors.push(errorData);\n return errorData;\n }\n\n getAll() {\n return this.errors;\n }\n\n clear() {\n this.errors = [];\n }\n\n getCount() {\n return this.errors.length;\n }\n} ","/**\n * Logger - Hace logging solo en errores\n * Responsabilidad única: Mostrar mensajes solo cuando hay errores\n */\nexport class Logger {\n constructor() {\n this.isSilent = true; // Por defecto silente\n }\n\n log(message, data = null) {\n // No loggear nada en modo silente\n if (this.isSilent) return;\n \n if (data) {\n console.log(message, data);\n } else {\n console.log(message);\n }\n }\n\n error(message, data = null) {\n // SIEMPRE loggear errores\n if (data) {\n console.error(message, data);\n } else {\n console.error(message);\n }\n }\n\n warn(message, data = null) {\n // Solo warnings importantes\n if (data) {\n console.warn(message, data);\n } else {\n console.warn(message);\n }\n }\n\n // Método para activar logging (solo para debug)\n enableLogging() {\n this.isSilent = false;\n }\n\n // Método para desactivar logging\n disableLogging() {\n this.isSilent = true;\n }\n} ","/**\n * SyntropyFront - Observability library with automatic capture\n * Single responsibility: Automatically capture events and send errors with context\n */\nimport { BreadcrumbManager } from './core/BreadcrumbManager.js';\nimport { ErrorManager } from './core/ErrorManager.js';\nimport { Logger } from './core/Logger.js';\n\nclass SyntropyFront {\n constructor() {\n // Basic managers\n this.breadcrumbManager = new BreadcrumbManager();\n this.errorManager = new ErrorManager();\n this.logger = new Logger();\n \n // Default configuration\n this.maxEvents = 50;\n this.fetchConfig = null; // Complete fetch configuration\n this.onErrorCallback = null; // User-defined error handler\n this.isActive = false;\n \n // Automatic capture\n this.originalHandlers = {};\n \n // Auto-initialize\n this.init();\n }\n\n init() {\n this.isActive = true;\n \n // Configure automatic capture immediately\n this.setupAutomaticCapture();\n \n console.log('🚀 SyntropyFront: Initialized with automatic capture');\n }\n\n /**\n * Configure SyntropyFront\n * @param {Object} config - Configuration\n * @param {number} config.maxEvents - Maximum number of events to store\n * @param {Object} config.fetch - Complete fetch configuration\n * @param {string} config.fetch.url - Endpoint URL\n * @param {Object} config.fetch.options - Fetch options (headers, method, etc.)\n * @param {Function} config.onError - User-defined error handler callback\n */\n configure(config = {}) {\n this.maxEvents = config.maxEvents || this.maxEvents;\n this.fetchConfig = config.fetch;\n this.onErrorCallback = config.onError;\n \n if (this.onErrorCallback) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, custom error handler`);\n } else if (this.fetchConfig) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, endpoint: ${this.fetchConfig.url}`);\n } else {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, console only`);\n }\n }\n\n /**\n * Configure automatic event capture\n */\n setupAutomaticCapture() {\n if (typeof window === 'undefined') return;\n\n // Capture clicks\n this.setupClickCapture();\n \n // Capture errors\n this.setupErrorCapture();\n \n // Capture HTTP calls\n this.setupHttpCapture();\n \n // Capture console logs\n this.setupConsoleCapture();\n }\n\n /**\n * Capture user clicks\n */\n setupClickCapture() {\n const clickHandler = (event) => {\n const element = event.target;\n this.addBreadcrumb('user', 'click', {\n element: element.tagName,\n id: element.id,\n className: element.className,\n x: event.clientX,\n y: event.clientY\n });\n };\n\n document.addEventListener('click', clickHandler);\n }\n\n /**\n * Automatically capture errors\n */\n setupErrorCapture() {\n // Save original handlers\n this.originalHandlers.onerror = window.onerror;\n this.originalHandlers.onunhandledrejection = window.onunhandledrejection;\n\n // Intercept errors\n window.onerror = (message, source, lineno, colno, error) => {\n const errorPayload = {\n type: 'uncaught_exception',\n error: { message, source, lineno, colno, stack: error?.stack },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onerror) {\n return this.originalHandlers.onerror(message, source, lineno, colno, error);\n }\n \n return false;\n };\n\n // Intercept rejected promises\n window.onunhandledrejection = (event) => {\n const errorPayload = {\n type: 'unhandled_rejection',\n error: {\n message: event.reason?.message || 'Promise rejection without message',\n stack: event.reason?.stack,\n },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onunhandledrejection) {\n this.originalHandlers.onunhandledrejection(event);\n }\n };\n }\n\n /**\n * Capture HTTP calls\n */\n setupHttpCapture() {\n // Intercept fetch\n const originalFetch = window.fetch;\n window.fetch = (...args) => {\n const [url, options] = args;\n \n this.addBreadcrumb('http', 'fetch', {\n url: url,\n method: options?.method || 'GET'\n });\n\n return originalFetch(...args).then(response => {\n this.addBreadcrumb('http', 'fetch_response', {\n url: url,\n status: response.status\n });\n return response;\n }).catch(error => {\n this.addBreadcrumb('http', 'fetch_error', {\n url: url,\n error: error.message\n });\n throw error;\n });\n };\n }\n\n /**\n * Capture console logs\n */\n setupConsoleCapture() {\n const originalLog = console.log;\n const originalError = console.error;\n const originalWarn = console.warn;\n\n console.log = (...args) => {\n this.addBreadcrumb('console', 'log', { message: args.join(' ') });\n originalLog.apply(console, args);\n };\n\n console.error = (...args) => {\n this.addBreadcrumb('console', 'error', { message: args.join(' ') });\n originalError.apply(console, args);\n };\n\n console.warn = (...args) => {\n this.addBreadcrumb('console', 'warn', { message: args.join(' ') });\n originalWarn.apply(console, args);\n };\n }\n\n /**\n * Handle errors - priority: onError callback > fetch > console\n */\n handleError(errorPayload) {\n // Default log\n this.logger.error('❌ Error:', errorPayload);\n \n // Priority 1: User-defined callback (maximum flexibility)\n if (this.onErrorCallback) {\n try {\n this.onErrorCallback(errorPayload);\n } catch (callbackError) {\n console.warn('SyntropyFront: Error in user callback:', callbackError);\n }\n return;\n }\n \n // Priority 2: Fetch to endpoint\n if (this.fetchConfig) {\n this.postToEndpoint(errorPayload);\n return;\n }\n \n // Priority 3: Console only (default)\n // Already logged above\n }\n\n /**\n * Post error object using fetch configuration\n */\n postToEndpoint(errorPayload) {\n const { url, options = {} } = this.fetchConfig;\n \n // Default configuration\n const defaultOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n },\n body: JSON.stringify(errorPayload),\n ...options\n };\n\n fetch(url, defaultOptions).catch(error => {\n console.warn('SyntropyFront: Error posting to endpoint:', error);\n });\n }\n\n // Public API\n addBreadcrumb(category, message, data = {}) {\n if (!this.isActive) return;\n \n const breadcrumb = this.breadcrumbManager.add(category, message, data);\n \n // Keep only the last maxEvents\n const breadcrumbs = this.breadcrumbManager.getAll();\n if (breadcrumbs.length > this.maxEvents) {\n this.breadcrumbManager.clear();\n breadcrumbs.slice(-this.maxEvents).forEach(b => this.breadcrumbManager.add(b.category, b.message, b.data));\n }\n \n return breadcrumb;\n }\n\n getBreadcrumbs() {\n return this.breadcrumbManager.getAll();\n }\n\n clearBreadcrumbs() {\n this.breadcrumbManager.clear();\n }\n\n sendError(error, context = {}) {\n if (!this.isActive) return;\n \n const errorData = this.errorManager.send(error, context);\n const errorPayload = {\n ...errorData,\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n \n this.handleError(errorPayload);\n return errorData;\n }\n\n getErrors() {\n return this.errorManager.getAll();\n }\n\n clearErrors() {\n this.errorManager.clear();\n }\n\n // Utility methods\n getStats() {\n return {\n breadcrumbs: this.breadcrumbManager.getCount(),\n errors: this.errorManager.getCount(),\n isActive: this.isActive,\n maxEvents: this.maxEvents,\n hasFetchConfig: !!this.fetchConfig,\n hasErrorCallback: !!this.onErrorCallback,\n endpoint: this.fetchConfig?.url || 'console'\n };\n }\n}\n\n// Single instance - auto-initializes\nconst syntropyFront = new SyntropyFront();\n\n// Export the instance\nexport default syntropyFront; "],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/core/BreadcrumbManager.js","../src/core/ErrorManager.js","../src/core/Logger.js","../src/index.js"],"sourcesContent":["/**\n * BreadcrumbManager - Gestiona breadcrumbs\n * Responsabilidad única: Almacenar y gestionar breadcrumbs\n */\nexport class BreadcrumbManager {\n constructor() {\n this.breadcrumbs = [];\n }\n\n add(category, message, data = {}) {\n const breadcrumb = {\n category,\n message,\n data,\n timestamp: new Date().toISOString()\n };\n \n this.breadcrumbs.push(breadcrumb);\n return breadcrumb;\n }\n\n getAll() {\n return this.breadcrumbs;\n }\n\n clear() {\n this.breadcrumbs = [];\n }\n\n getCount() {\n return this.breadcrumbs.length;\n }\n} ","/**\n * ErrorManager - Gestiona errores\n * Responsabilidad única: Formatear y gestionar errores\n */\nexport class ErrorManager {\n constructor() {\n this.errors = [];\n }\n\n send(error, context = {}) {\n const errorData = {\n message: error.message,\n stack: error.stack,\n context,\n timestamp: new Date().toISOString()\n };\n \n this.errors.push(errorData);\n return errorData;\n }\n\n getAll() {\n return this.errors;\n }\n\n clear() {\n this.errors = [];\n }\n\n getCount() {\n return this.errors.length;\n }\n} ","/**\n * Logger - Hace logging solo en errores\n * Responsabilidad única: Mostrar mensajes solo cuando hay errores\n */\nexport class Logger {\n constructor() {\n this.isSilent = true; // Por defecto silente\n }\n\n log(message, data = null) {\n // No loggear nada en modo silente\n if (this.isSilent) return;\n \n if (data) {\n console.log(message, data);\n } else {\n console.log(message);\n }\n }\n\n error(message, data = null) {\n // SIEMPRE loggear errores\n if (data) {\n console.error(message, data);\n } else {\n console.error(message);\n }\n }\n\n warn(message, data = null) {\n // Solo warnings importantes\n if (data) {\n console.warn(message, data);\n } else {\n console.warn(message);\n }\n }\n\n // Método para activar logging (solo para debug)\n enableLogging() {\n this.isSilent = false;\n }\n\n // Método para desactivar logging\n disableLogging() {\n this.isSilent = true;\n }\n} ","/**\n * SyntropyFront - Observability library with automatic capture\n * Single responsibility: Automatically capture events and send errors with context\n */\nimport { BreadcrumbManager } from './core/BreadcrumbManager.js';\nimport { ErrorManager } from './core/ErrorManager.js';\nimport { Logger } from './core/Logger.js';\n\nclass SyntropyFront {\n constructor() {\n // Basic managers\n this.breadcrumbManager = new BreadcrumbManager();\n this.errorManager = new ErrorManager();\n this.logger = new Logger();\n \n // Default configuration\n this.maxEvents = 50;\n this.fetchConfig = null; // Complete fetch configuration\n this.onErrorCallback = null; // User-defined error handler\n this.isActive = false;\n \n // Automatic capture\n this.originalHandlers = {};\n \n // Auto-initialize\n this.init();\n }\n\n init() {\n this.isActive = true;\n \n // Configure automatic capture immediately\n this.setupAutomaticCapture();\n \n console.log('🚀 SyntropyFront: Initialized with automatic capture');\n }\n\n /**\n * Configure SyntropyFront\n * @param {Object} config - Configuration\n * @param {number} config.maxEvents - Maximum number of events to store\n * @param {Object} config.fetch - Complete fetch configuration\n * @param {string} config.fetch.url - Endpoint URL\n * @param {Object} config.fetch.options - Fetch options (headers, method, etc.)\n * @param {Function} config.onError - User-defined error handler callback\n */\n configure(config = {}) {\n this.maxEvents = config.maxEvents || this.maxEvents;\n this.fetchConfig = config.fetch;\n this.onErrorCallback = config.onError;\n \n if (this.onErrorCallback) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, custom error handler`);\n } else if (this.fetchConfig) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, endpoint: ${this.fetchConfig.url}`);\n } else {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, console only`);\n }\n }\n\n /**\n * Configure automatic event capture\n */\n setupAutomaticCapture() {\n if (typeof window === 'undefined') return;\n\n // Capture clicks\n this.setupClickCapture();\n \n // Capture errors\n this.setupErrorCapture();\n \n // Capture HTTP calls\n this.setupHttpCapture();\n \n // Capture console logs\n this.setupConsoleCapture();\n }\n\n /**\n * Capture user clicks\n */\n setupClickCapture() {\n const clickHandler = (event) => {\n const element = event.target;\n this.addBreadcrumb('user', 'click', {\n element: element.tagName,\n id: element.id,\n className: element.className,\n x: event.clientX,\n y: event.clientY\n });\n };\n\n document.addEventListener('click', clickHandler);\n }\n\n /**\n * Automatically capture errors\n */\n setupErrorCapture() {\n // Save original handlers\n this.originalHandlers.onerror = window.onerror;\n this.originalHandlers.onunhandledrejection = window.onunhandledrejection;\n\n // Intercept errors\n window.onerror = (message, source, lineno, colno, error) => {\n const errorPayload = {\n type: 'uncaught_exception',\n error: { message, source, lineno, colno, stack: error?.stack },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onerror) {\n return this.originalHandlers.onerror(message, source, lineno, colno, error);\n }\n \n return false;\n };\n\n // Intercept rejected promises\n window.onunhandledrejection = (event) => {\n const errorPayload = {\n type: 'unhandled_rejection',\n error: {\n message: event.reason?.message || 'Promise rejection without message',\n stack: event.reason?.stack,\n },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onunhandledrejection) {\n this.originalHandlers.onunhandledrejection(event);\n }\n };\n }\n\n /**\n * Capture HTTP calls\n */\n setupHttpCapture() {\n // Intercept fetch\n const originalFetch = window.fetch;\n window.fetch = (...args) => {\n const [url, options] = args;\n \n this.addBreadcrumb('http', 'fetch', {\n url,\n method: options?.method || 'GET'\n });\n\n return originalFetch(...args).then(response => {\n this.addBreadcrumb('http', 'fetch_response', {\n url,\n status: response.status\n });\n return response;\n }).catch(error => {\n this.addBreadcrumb('http', 'fetch_error', {\n url,\n error: error.message\n });\n throw error;\n });\n };\n }\n\n /**\n * Capture console logs\n */\n setupConsoleCapture() {\n const originalLog = console.log;\n const originalError = console.error;\n const originalWarn = console.warn;\n\n console.log = (...args) => {\n this.addBreadcrumb('console', 'log', { message: args.join(' ') });\n originalLog.apply(console, args);\n };\n\n console.error = (...args) => {\n this.addBreadcrumb('console', 'error', { message: args.join(' ') });\n originalError.apply(console, args);\n };\n\n console.warn = (...args) => {\n this.addBreadcrumb('console', 'warn', { message: args.join(' ') });\n originalWarn.apply(console, args);\n };\n }\n\n /**\n * Handle errors - priority: onError callback > fetch > console\n */\n handleError(errorPayload) {\n // Default log\n this.logger.error('❌ Error:', errorPayload);\n \n // Priority 1: User-defined callback (maximum flexibility)\n if (this.onErrorCallback) {\n try {\n this.onErrorCallback(errorPayload);\n } catch (callbackError) {\n console.warn('SyntropyFront: Error in user callback:', callbackError);\n }\n return;\n }\n \n // Priority 2: Fetch to endpoint\n if (this.fetchConfig) {\n this.postToEndpoint(errorPayload);\n return;\n }\n \n // Priority 3: Console only (default)\n // Already logged above\n }\n\n /**\n * Post error object using fetch configuration\n */\n postToEndpoint(errorPayload) {\n const { url, options = {} } = this.fetchConfig;\n \n // Default configuration\n const defaultOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n },\n body: JSON.stringify(errorPayload),\n ...options\n };\n\n fetch(url, defaultOptions).catch(error => {\n console.warn('SyntropyFront: Error posting to endpoint:', error);\n });\n }\n\n // Public API\n addBreadcrumb(category, message, data = {}) {\n if (!this.isActive) return;\n \n const breadcrumb = this.breadcrumbManager.add(category, message, data);\n \n // Keep only the last maxEvents\n const breadcrumbs = this.breadcrumbManager.getAll();\n if (breadcrumbs.length > this.maxEvents) {\n this.breadcrumbManager.clear();\n breadcrumbs.slice(-this.maxEvents).forEach(b => this.breadcrumbManager.add(b.category, b.message, b.data));\n }\n \n return breadcrumb;\n }\n\n getBreadcrumbs() {\n return this.breadcrumbManager.getAll();\n }\n\n clearBreadcrumbs() {\n this.breadcrumbManager.clear();\n }\n\n sendError(error, context = {}) {\n if (!this.isActive) return;\n \n const errorData = this.errorManager.send(error, context);\n const errorPayload = {\n ...errorData,\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n \n this.handleError(errorPayload);\n return errorData;\n }\n\n getErrors() {\n return this.errorManager.getAll();\n }\n\n clearErrors() {\n this.errorManager.clear();\n }\n\n // Utility methods\n getStats() {\n return {\n breadcrumbs: this.breadcrumbManager.getCount(),\n errors: this.errorManager.getCount(),\n isActive: this.isActive,\n maxEvents: this.maxEvents,\n hasFetchConfig: !!this.fetchConfig,\n hasErrorCallback: !!this.onErrorCallback,\n endpoint: this.fetchConfig?.url || 'console'\n };\n }\n}\n\n// Single instance - auto-initializes\nconst syntropyFront = new SyntropyFront();\n\n// Export the instance\nexport default syntropyFront; "],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.min.js","sources":["../src/core/BreadcrumbManager.js","../src/core/ErrorManager.js","../src/core/Logger.js","../src/index.js"],"sourcesContent":["/**\n * BreadcrumbManager - Gestiona breadcrumbs\n * Responsabilidad única: Almacenar y gestionar breadcrumbs\n */\nexport class BreadcrumbManager {\n constructor() {\n this.breadcrumbs = [];\n }\n\n add(category, message, data = {}) {\n const breadcrumb = {\n category,\n message,\n data,\n timestamp: new Date().toISOString()\n };\n \n this.breadcrumbs.push(breadcrumb);\n return breadcrumb;\n }\n\n getAll() {\n return this.breadcrumbs;\n }\n\n clear() {\n this.breadcrumbs = [];\n }\n\n getCount() {\n return this.breadcrumbs.length;\n }\n} ","/**\n * ErrorManager - Gestiona errores\n * Responsabilidad única: Formatear y gestionar errores\n */\nexport class ErrorManager {\n constructor() {\n this.errors = [];\n }\n\n send(error, context = {}) {\n const errorData = {\n message: error.message,\n stack: error.stack,\n context,\n timestamp: new Date().toISOString()\n };\n \n this.errors.push(errorData);\n return errorData;\n }\n\n getAll() {\n return this.errors;\n }\n\n clear() {\n this.errors = [];\n }\n\n getCount() {\n return this.errors.length;\n }\n} ","/**\n * Logger - Hace logging solo en errores\n * Responsabilidad única: Mostrar mensajes solo cuando hay errores\n */\nexport class Logger {\n constructor() {\n this.isSilent = true; // Por defecto silente\n }\n\n log(message, data = null) {\n // No loggear nada en modo silente\n if (this.isSilent) return;\n \n if (data) {\n console.log(message, data);\n } else {\n console.log(message);\n }\n }\n\n error(message, data = null) {\n // SIEMPRE loggear errores\n if (data) {\n console.error(message, data);\n } else {\n console.error(message);\n }\n }\n\n warn(message, data = null) {\n // Solo warnings importantes\n if (data) {\n console.warn(message, data);\n } else {\n console.warn(message);\n }\n }\n\n // Método para activar logging (solo para debug)\n enableLogging() {\n this.isSilent = false;\n }\n\n // Método para desactivar logging\n disableLogging() {\n this.isSilent = true;\n }\n} ","/**\n * SyntropyFront - Observability library with automatic capture\n * Single responsibility: Automatically capture events and send errors with context\n */\nimport { BreadcrumbManager } from './core/BreadcrumbManager.js';\nimport { ErrorManager } from './core/ErrorManager.js';\nimport { Logger } from './core/Logger.js';\n\nclass SyntropyFront {\n constructor() {\n // Basic managers\n this.breadcrumbManager = new BreadcrumbManager();\n this.errorManager = new ErrorManager();\n this.logger = new Logger();\n \n // Default configuration\n this.maxEvents = 50;\n this.fetchConfig = null; // Complete fetch configuration\n this.onErrorCallback = null; // User-defined error handler\n this.isActive = false;\n \n // Automatic capture\n this.originalHandlers = {};\n \n // Auto-initialize\n this.init();\n }\n\n init() {\n this.isActive = true;\n \n // Configure automatic capture immediately\n this.setupAutomaticCapture();\n \n console.log('🚀 SyntropyFront: Initialized with automatic capture');\n }\n\n /**\n * Configure SyntropyFront\n * @param {Object} config - Configuration\n * @param {number} config.maxEvents - Maximum number of events to store\n * @param {Object} config.fetch - Complete fetch configuration\n * @param {string} config.fetch.url - Endpoint URL\n * @param {Object} config.fetch.options - Fetch options (headers, method, etc.)\n * @param {Function} config.onError - User-defined error handler callback\n */\n configure(config = {}) {\n this.maxEvents = config.maxEvents || this.maxEvents;\n this.fetchConfig = config.fetch;\n this.onErrorCallback = config.onError;\n \n if (this.onErrorCallback) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, custom error handler`);\n } else if (this.fetchConfig) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, endpoint: ${this.fetchConfig.url}`);\n } else {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, console only`);\n }\n }\n\n /**\n * Configure automatic event capture\n */\n setupAutomaticCapture() {\n if (typeof window === 'undefined') return;\n\n // Capture clicks\n this.setupClickCapture();\n \n // Capture errors\n this.setupErrorCapture();\n \n // Capture HTTP calls\n this.setupHttpCapture();\n \n // Capture console logs\n this.setupConsoleCapture();\n }\n\n /**\n * Capture user clicks\n */\n setupClickCapture() {\n const clickHandler = (event) => {\n const element = event.target;\n this.addBreadcrumb('user', 'click', {\n element: element.tagName,\n id: element.id,\n className: element.className,\n x: event.clientX,\n y: event.clientY\n });\n };\n\n document.addEventListener('click', clickHandler);\n }\n\n /**\n * Automatically capture errors\n */\n setupErrorCapture() {\n // Save original handlers\n this.originalHandlers.onerror = window.onerror;\n this.originalHandlers.onunhandledrejection = window.onunhandledrejection;\n\n // Intercept errors\n window.onerror = (message, source, lineno, colno, error) => {\n const errorPayload = {\n type: 'uncaught_exception',\n error: { message, source, lineno, colno, stack: error?.stack },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onerror) {\n return this.originalHandlers.onerror(message, source, lineno, colno, error);\n }\n \n return false;\n };\n\n // Intercept rejected promises\n window.onunhandledrejection = (event) => {\n const errorPayload = {\n type: 'unhandled_rejection',\n error: {\n message: event.reason?.message || 'Promise rejection without message',\n stack: event.reason?.stack,\n },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onunhandledrejection) {\n this.originalHandlers.onunhandledrejection(event);\n }\n };\n }\n\n /**\n * Capture HTTP calls\n */\n setupHttpCapture() {\n // Intercept fetch\n const originalFetch = window.fetch;\n window.fetch = (...args) => {\n const [url, options] = args;\n \n this.addBreadcrumb('http', 'fetch', {\n url: url,\n method: options?.method || 'GET'\n });\n\n return originalFetch(...args).then(response => {\n this.addBreadcrumb('http', 'fetch_response', {\n url: url,\n status: response.status\n });\n return response;\n }).catch(error => {\n this.addBreadcrumb('http', 'fetch_error', {\n url: url,\n error: error.message\n });\n throw error;\n });\n };\n }\n\n /**\n * Capture console logs\n */\n setupConsoleCapture() {\n const originalLog = console.log;\n const originalError = console.error;\n const originalWarn = console.warn;\n\n console.log = (...args) => {\n this.addBreadcrumb('console', 'log', { message: args.join(' ') });\n originalLog.apply(console, args);\n };\n\n console.error = (...args) => {\n this.addBreadcrumb('console', 'error', { message: args.join(' ') });\n originalError.apply(console, args);\n };\n\n console.warn = (...args) => {\n this.addBreadcrumb('console', 'warn', { message: args.join(' ') });\n originalWarn.apply(console, args);\n };\n }\n\n /**\n * Handle errors - priority: onError callback > fetch > console\n */\n handleError(errorPayload) {\n // Default log\n this.logger.error('❌ Error:', errorPayload);\n \n // Priority 1: User-defined callback (maximum flexibility)\n if (this.onErrorCallback) {\n try {\n this.onErrorCallback(errorPayload);\n } catch (callbackError) {\n console.warn('SyntropyFront: Error in user callback:', callbackError);\n }\n return;\n }\n \n // Priority 2: Fetch to endpoint\n if (this.fetchConfig) {\n this.postToEndpoint(errorPayload);\n return;\n }\n \n // Priority 3: Console only (default)\n // Already logged above\n }\n\n /**\n * Post error object using fetch configuration\n */\n postToEndpoint(errorPayload) {\n const { url, options = {} } = this.fetchConfig;\n \n // Default configuration\n const defaultOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n },\n body: JSON.stringify(errorPayload),\n ...options\n };\n\n fetch(url, defaultOptions).catch(error => {\n console.warn('SyntropyFront: Error posting to endpoint:', error);\n });\n }\n\n // Public API\n addBreadcrumb(category, message, data = {}) {\n if (!this.isActive) return;\n \n const breadcrumb = this.breadcrumbManager.add(category, message, data);\n \n // Keep only the last maxEvents\n const breadcrumbs = this.breadcrumbManager.getAll();\n if (breadcrumbs.length > this.maxEvents) {\n this.breadcrumbManager.clear();\n breadcrumbs.slice(-this.maxEvents).forEach(b => this.breadcrumbManager.add(b.category, b.message, b.data));\n }\n \n return breadcrumb;\n }\n\n getBreadcrumbs() {\n return this.breadcrumbManager.getAll();\n }\n\n clearBreadcrumbs() {\n this.breadcrumbManager.clear();\n }\n\n sendError(error, context = {}) {\n if (!this.isActive) return;\n \n const errorData = this.errorManager.send(error, context);\n const errorPayload = {\n ...errorData,\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n \n this.handleError(errorPayload);\n return errorData;\n }\n\n getErrors() {\n return this.errorManager.getAll();\n }\n\n clearErrors() {\n this.errorManager.clear();\n }\n\n // Utility methods\n getStats() {\n return {\n breadcrumbs: this.breadcrumbManager.getCount(),\n errors: this.errorManager.getCount(),\n isActive: this.isActive,\n maxEvents: this.maxEvents,\n hasFetchConfig: !!this.fetchConfig,\n hasErrorCallback: !!this.onErrorCallback,\n endpoint: this.fetchConfig?.url || 'console'\n };\n }\n}\n\n// Single instance - auto-initializes\nconst syntropyFront = new SyntropyFront();\n\n// Export the instance\nexport default syntropyFront; "],"names":["BreadcrumbManager","constructor","this","breadcrumbs","add","category","message","data","breadcrumb","timestamp","Date","toISOString","push","getAll","clear","getCount","length","ErrorManager","errors","send","error","context","errorData","stack","Logger","isSilent","log","console","warn","enableLogging","disableLogging","breadcrumbManager","errorManager","logger","maxEvents","fetchConfig","onErrorCallback","isActive","originalHandlers","init","setupAutomaticCapture","configure","config","fetch","onError","url","window","setupClickCapture","setupErrorCapture","setupHttpCapture","setupConsoleCapture","document","addEventListener","event","element","target","addBreadcrumb","tagName","id","className","x","clientX","y","clientY","onerror","onunhandledrejection","source","lineno","colno","errorPayload","type","getBreadcrumbs","handleError","reason","originalFetch","args","options","method","then","response","status","catch","originalLog","originalError","originalWarn","join","apply","callbackError","postToEndpoint","defaultOptions","headers","body","JSON","stringify","slice","forEach","b","clearBreadcrumbs","sendError","getErrors","clearErrors","getStats","hasFetchConfig","hasErrorCallback","endpoint"],"mappings":"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"}
1
+ {"version":3,"file":"index.min.js","sources":["../src/core/BreadcrumbManager.js","../src/core/ErrorManager.js","../src/core/Logger.js","../src/index.js"],"sourcesContent":["/**\n * BreadcrumbManager - Gestiona breadcrumbs\n * Responsabilidad única: Almacenar y gestionar breadcrumbs\n */\nexport class BreadcrumbManager {\n constructor() {\n this.breadcrumbs = [];\n }\n\n add(category, message, data = {}) {\n const breadcrumb = {\n category,\n message,\n data,\n timestamp: new Date().toISOString()\n };\n \n this.breadcrumbs.push(breadcrumb);\n return breadcrumb;\n }\n\n getAll() {\n return this.breadcrumbs;\n }\n\n clear() {\n this.breadcrumbs = [];\n }\n\n getCount() {\n return this.breadcrumbs.length;\n }\n} ","/**\n * ErrorManager - Gestiona errores\n * Responsabilidad única: Formatear y gestionar errores\n */\nexport class ErrorManager {\n constructor() {\n this.errors = [];\n }\n\n send(error, context = {}) {\n const errorData = {\n message: error.message,\n stack: error.stack,\n context,\n timestamp: new Date().toISOString()\n };\n \n this.errors.push(errorData);\n return errorData;\n }\n\n getAll() {\n return this.errors;\n }\n\n clear() {\n this.errors = [];\n }\n\n getCount() {\n return this.errors.length;\n }\n} ","/**\n * Logger - Hace logging solo en errores\n * Responsabilidad única: Mostrar mensajes solo cuando hay errores\n */\nexport class Logger {\n constructor() {\n this.isSilent = true; // Por defecto silente\n }\n\n log(message, data = null) {\n // No loggear nada en modo silente\n if (this.isSilent) return;\n \n if (data) {\n console.log(message, data);\n } else {\n console.log(message);\n }\n }\n\n error(message, data = null) {\n // SIEMPRE loggear errores\n if (data) {\n console.error(message, data);\n } else {\n console.error(message);\n }\n }\n\n warn(message, data = null) {\n // Solo warnings importantes\n if (data) {\n console.warn(message, data);\n } else {\n console.warn(message);\n }\n }\n\n // Método para activar logging (solo para debug)\n enableLogging() {\n this.isSilent = false;\n }\n\n // Método para desactivar logging\n disableLogging() {\n this.isSilent = true;\n }\n} ","/**\n * SyntropyFront - Observability library with automatic capture\n * Single responsibility: Automatically capture events and send errors with context\n */\nimport { BreadcrumbManager } from './core/BreadcrumbManager.js';\nimport { ErrorManager } from './core/ErrorManager.js';\nimport { Logger } from './core/Logger.js';\n\nclass SyntropyFront {\n constructor() {\n // Basic managers\n this.breadcrumbManager = new BreadcrumbManager();\n this.errorManager = new ErrorManager();\n this.logger = new Logger();\n \n // Default configuration\n this.maxEvents = 50;\n this.fetchConfig = null; // Complete fetch configuration\n this.onErrorCallback = null; // User-defined error handler\n this.isActive = false;\n \n // Automatic capture\n this.originalHandlers = {};\n \n // Auto-initialize\n this.init();\n }\n\n init() {\n this.isActive = true;\n \n // Configure automatic capture immediately\n this.setupAutomaticCapture();\n \n console.log('🚀 SyntropyFront: Initialized with automatic capture');\n }\n\n /**\n * Configure SyntropyFront\n * @param {Object} config - Configuration\n * @param {number} config.maxEvents - Maximum number of events to store\n * @param {Object} config.fetch - Complete fetch configuration\n * @param {string} config.fetch.url - Endpoint URL\n * @param {Object} config.fetch.options - Fetch options (headers, method, etc.)\n * @param {Function} config.onError - User-defined error handler callback\n */\n configure(config = {}) {\n this.maxEvents = config.maxEvents || this.maxEvents;\n this.fetchConfig = config.fetch;\n this.onErrorCallback = config.onError;\n \n if (this.onErrorCallback) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, custom error handler`);\n } else if (this.fetchConfig) {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, endpoint: ${this.fetchConfig.url}`);\n } else {\n console.log(`✅ SyntropyFront: Configured - maxEvents: ${this.maxEvents}, console only`);\n }\n }\n\n /**\n * Configure automatic event capture\n */\n setupAutomaticCapture() {\n if (typeof window === 'undefined') return;\n\n // Capture clicks\n this.setupClickCapture();\n \n // Capture errors\n this.setupErrorCapture();\n \n // Capture HTTP calls\n this.setupHttpCapture();\n \n // Capture console logs\n this.setupConsoleCapture();\n }\n\n /**\n * Capture user clicks\n */\n setupClickCapture() {\n const clickHandler = (event) => {\n const element = event.target;\n this.addBreadcrumb('user', 'click', {\n element: element.tagName,\n id: element.id,\n className: element.className,\n x: event.clientX,\n y: event.clientY\n });\n };\n\n document.addEventListener('click', clickHandler);\n }\n\n /**\n * Automatically capture errors\n */\n setupErrorCapture() {\n // Save original handlers\n this.originalHandlers.onerror = window.onerror;\n this.originalHandlers.onunhandledrejection = window.onunhandledrejection;\n\n // Intercept errors\n window.onerror = (message, source, lineno, colno, error) => {\n const errorPayload = {\n type: 'uncaught_exception',\n error: { message, source, lineno, colno, stack: error?.stack },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onerror) {\n return this.originalHandlers.onerror(message, source, lineno, colno, error);\n }\n \n return false;\n };\n\n // Intercept rejected promises\n window.onunhandledrejection = (event) => {\n const errorPayload = {\n type: 'unhandled_rejection',\n error: {\n message: event.reason?.message || 'Promise rejection without message',\n stack: event.reason?.stack,\n },\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n\n this.handleError(errorPayload);\n \n // Call original handler\n if (this.originalHandlers.onunhandledrejection) {\n this.originalHandlers.onunhandledrejection(event);\n }\n };\n }\n\n /**\n * Capture HTTP calls\n */\n setupHttpCapture() {\n // Intercept fetch\n const originalFetch = window.fetch;\n window.fetch = (...args) => {\n const [url, options] = args;\n \n this.addBreadcrumb('http', 'fetch', {\n url,\n method: options?.method || 'GET'\n });\n\n return originalFetch(...args).then(response => {\n this.addBreadcrumb('http', 'fetch_response', {\n url,\n status: response.status\n });\n return response;\n }).catch(error => {\n this.addBreadcrumb('http', 'fetch_error', {\n url,\n error: error.message\n });\n throw error;\n });\n };\n }\n\n /**\n * Capture console logs\n */\n setupConsoleCapture() {\n const originalLog = console.log;\n const originalError = console.error;\n const originalWarn = console.warn;\n\n console.log = (...args) => {\n this.addBreadcrumb('console', 'log', { message: args.join(' ') });\n originalLog.apply(console, args);\n };\n\n console.error = (...args) => {\n this.addBreadcrumb('console', 'error', { message: args.join(' ') });\n originalError.apply(console, args);\n };\n\n console.warn = (...args) => {\n this.addBreadcrumb('console', 'warn', { message: args.join(' ') });\n originalWarn.apply(console, args);\n };\n }\n\n /**\n * Handle errors - priority: onError callback > fetch > console\n */\n handleError(errorPayload) {\n // Default log\n this.logger.error('❌ Error:', errorPayload);\n \n // Priority 1: User-defined callback (maximum flexibility)\n if (this.onErrorCallback) {\n try {\n this.onErrorCallback(errorPayload);\n } catch (callbackError) {\n console.warn('SyntropyFront: Error in user callback:', callbackError);\n }\n return;\n }\n \n // Priority 2: Fetch to endpoint\n if (this.fetchConfig) {\n this.postToEndpoint(errorPayload);\n return;\n }\n \n // Priority 3: Console only (default)\n // Already logged above\n }\n\n /**\n * Post error object using fetch configuration\n */\n postToEndpoint(errorPayload) {\n const { url, options = {} } = this.fetchConfig;\n \n // Default configuration\n const defaultOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n },\n body: JSON.stringify(errorPayload),\n ...options\n };\n\n fetch(url, defaultOptions).catch(error => {\n console.warn('SyntropyFront: Error posting to endpoint:', error);\n });\n }\n\n // Public API\n addBreadcrumb(category, message, data = {}) {\n if (!this.isActive) return;\n \n const breadcrumb = this.breadcrumbManager.add(category, message, data);\n \n // Keep only the last maxEvents\n const breadcrumbs = this.breadcrumbManager.getAll();\n if (breadcrumbs.length > this.maxEvents) {\n this.breadcrumbManager.clear();\n breadcrumbs.slice(-this.maxEvents).forEach(b => this.breadcrumbManager.add(b.category, b.message, b.data));\n }\n \n return breadcrumb;\n }\n\n getBreadcrumbs() {\n return this.breadcrumbManager.getAll();\n }\n\n clearBreadcrumbs() {\n this.breadcrumbManager.clear();\n }\n\n sendError(error, context = {}) {\n if (!this.isActive) return;\n \n const errorData = this.errorManager.send(error, context);\n const errorPayload = {\n ...errorData,\n breadcrumbs: this.getBreadcrumbs(),\n timestamp: new Date().toISOString()\n };\n \n this.handleError(errorPayload);\n return errorData;\n }\n\n getErrors() {\n return this.errorManager.getAll();\n }\n\n clearErrors() {\n this.errorManager.clear();\n }\n\n // Utility methods\n getStats() {\n return {\n breadcrumbs: this.breadcrumbManager.getCount(),\n errors: this.errorManager.getCount(),\n isActive: this.isActive,\n maxEvents: this.maxEvents,\n hasFetchConfig: !!this.fetchConfig,\n hasErrorCallback: !!this.onErrorCallback,\n endpoint: this.fetchConfig?.url || 'console'\n };\n }\n}\n\n// Single instance - auto-initializes\nconst syntropyFront = new SyntropyFront();\n\n// Export the instance\nexport default syntropyFront; "],"names":["BreadcrumbManager","constructor","this","breadcrumbs","add","category","message","data","breadcrumb","timestamp","Date","toISOString","push","getAll","clear","getCount","length","ErrorManager","errors","send","error","context","errorData","stack","Logger","isSilent","log","console","warn","enableLogging","disableLogging","breadcrumbManager","errorManager","logger","maxEvents","fetchConfig","onErrorCallback","isActive","originalHandlers","init","setupAutomaticCapture","configure","config","fetch","onError","url","window","setupClickCapture","setupErrorCapture","setupHttpCapture","setupConsoleCapture","document","addEventListener","event","element","target","addBreadcrumb","tagName","id","className","x","clientX","y","clientY","onerror","onunhandledrejection","source","lineno","colno","errorPayload","type","getBreadcrumbs","handleError","reason","originalFetch","args","options","method","then","response","status","catch","originalLog","originalError","originalWarn","join","apply","callbackError","postToEndpoint","defaultOptions","headers","body","JSON","stringify","slice","forEach","b","clearBreadcrumbs","sendError","getErrors","clearErrors","getStats","hasFetchConfig","hasErrorCallback","endpoint"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syntropysoft/syntropyfront",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "type": "module",
5
5
  "description": "🚀 Observability library with automatic capture - Just 1 line of code! Automatically captures clicks, errors, HTTP calls, and console logs with flexible error handling.",
6
6
  "main": "dist/index.js",
@@ -59,7 +59,7 @@
59
59
  },
60
60
  "homepage": "https://github.com/Syntropysoft/syntropyfront#readme",
61
61
  "engines": {
62
- "node": ">=14.0.0"
62
+ "node": ">=18.0.0"
63
63
  },
64
64
  "dependencies": {
65
65
  "flatted": "^3.3.3"
@@ -68,11 +68,11 @@
68
68
  "@rollup/plugin-commonjs": "^25.0.0",
69
69
  "@rollup/plugin-node-resolve": "^15.0.0",
70
70
  "@rollup/plugin-terser": "^0.4.0",
71
- "@vitest/coverage-v8": "^0.34.6",
71
+ "@vitest/coverage-v8": "^3.2.4",
72
72
  "eslint": "^8.0.0",
73
73
  "jsdom": "^26.1.0",
74
74
  "rollup": "^3.0.0",
75
- "vitest": "^0.34.0"
75
+ "vitest": "^3.2.4"
76
76
  },
77
77
  "browserslist": [
78
78
  "> 1%",