{"version":3,"file":"ng-error-tracker.mjs","sources":["../../../projects/ng-error-tracker/src/lib/sanitizer.ts","../../../projects/ng-error-tracker/src/lib/logger-config.ts","../../../projects/ng-error-tracker/src/lib/user-action-tracker.service.ts","../../../projects/ng-error-tracker/src/lib/build-id.service.ts","../../../projects/ng-error-tracker/src/lib/error-logger.service.ts","../../../projects/ng-error-tracker/src/lib/error-interceptor.service.ts","../../../projects/ng-error-tracker/src/lib/error-logging.module.ts","../../../projects/ng-error-tracker/src/ng-error-tracker.ts"],"sourcesContent":["export function sanitizeLog(text: string): string {\n  if (!text) return text;\n\n  return text\n    .replace(\n      /[\\w.-]+@[\\w.-]+\\.\\w+/gi,\n      '[email-protected]'\n    )\n    .replace(\n      /\\b(?:\\+\\d{1,3}[-.\\s]?)?(?:\\(?\\d{2,4}\\)?[-.\\s]?)?\\d{3,5}[-.\\s]?\\d{3,5}[-.\\s]?\\d{0,5}\\b/g,\n      '[phone-protected]'\n    )\n    .replace(\n      /\\b\\d{8}[A-Za-z]\\b/g,\n      '[dni-protected]'\n    )\n    .replace(\n      /\\b[XYZxyz]\\d{7}[A-Za-z]\\b/g,\n      '[nie-protected]'\n    );\n}\n","import {InjectionToken} from '@angular/core';\n\nexport interface LoggerConfig {\n  enableLogging: boolean;\n  apiUrl: string;\n  apiKey?: string;\n  publicKey?: string;\n  publicKeyUrl?: string;\n  appName: string;\n  appEnv: string;\n  appBuildId?: string;\n}\n\nexport const LOGGER_CONFIG = new InjectionToken<LoggerConfig>('LOGGER_CONFIG');\n","import { Injectable } from '@angular/core';\nimport { Router, NavigationEnd, ActivatedRoute } from '@angular/router';\n\n@Injectable({ providedIn: 'root' })\nexport class UserActionTrackerService {\n  private actions: string[] = [];\n  private readonly maxActions = 20;\n  private currentRoute: string = 'Unknown';\n\n  constructor(private router: Router, private activatedRoute: ActivatedRoute) {\n    this.trackRouteChanges();\n    this.trackUserEvents();\n  }\n\n  private trackRouteChanges() {\n    this.router.events.subscribe((event) => {\n      if (event instanceof NavigationEnd) {\n        let route = this.activatedRoute;\n        while (route.firstChild) {\n          route = route.firstChild;\n        }\n        route.data.subscribe((data) => {\n          this.currentRoute = data['title'] || event.urlAfterRedirects;\n        });\n      }\n    });\n  }\n\n  private trackUserEvents() {\n    document.addEventListener('click', this.trackEvent.bind(this));\n    document.addEventListener('touchstart', this.trackEvent.bind(this), { passive: true });\n  }\n\n  private trackEvent(event: Event) {\n    const targetElement = event.target as HTMLElement;\n    if (!targetElement) return;\n\n    const tagName = targetElement.tagName.toLowerCase();\n    const name = targetElement.getAttribute('name') ?? '';\n    const id = targetElement.getAttribute('id') ?? '';\n    const classAttr = targetElement.getAttribute('class') || '';\n    const classes = classAttr ? `.${classAttr.replace(/\\s+/g, '.')}` : '';\n    const text = (targetElement.textContent || '').trim().slice(0, 30);\n\n    let message = `[${this.currentRoute}] ${tagName}${id ? `#${id}` : ''}${classes}`;\n    if (name) message += ` [name=\"${name}\"]`;\n    if (text) message += ` (text=\"${text}\")`;\n\n    this.logAction(`Interaction: ${message}`);\n  }\n\n  private logAction(action: string) {\n    if (this.actions.length >= this.maxActions) {\n      this.actions.shift();\n    }\n    this.actions.push(`${new Date().toISOString()}: ${action}`);\n  }\n\n  getUserActions(): string[] {\n    return [...this.actions];\n  }\n}\n","import {Injectable} from '@angular/core';\n\n@Injectable({providedIn: 'root'})\nexport class BuildIdService {\n\n  public async getAppBuildId() {\n    const scripts = Array.from(document.getElementsByTagName('script'));\n    const mainScript = scripts.find(({src}) => /main(?:([-.])[a-zA-Z0-9]+)?\\.js(?:\\?.*)?$/.test(src));\n\n    if (mainScript) {\n      const response = await fetch(mainScript.src);\n      if (response.ok) {\n        return await this.processMainJsStream(response.body!.getReader());\n      }\n    }\n\n    console.warn('⚠️ Failed to fetch application main file.');\n    return 'unknown-build-id';\n  }\n\n  private async processMainJsStream(streamReader: ReadableStreamDefaultReader<Uint8Array>) {\n    const CHUNK_SIZE = 512;\n    let collectedChunks: Uint8Array[] = [];\n    let totalBytes = 0;\n\n    while (totalBytes < CHUNK_SIZE) {\n      const {done, value} = await streamReader.read();\n      if (done) break;\n      if (value) {\n        collectedChunks.push(value);\n        totalBytes += value.length;\n      }\n    }\n\n    const combinedBuffer = new Uint8Array(totalBytes);\n    let offset = 0;\n    for (const chunk of collectedChunks) {\n      combinedBuffer.set(chunk, offset);\n      offset += chunk.length;\n    }\n\n    return this.generateHashFromBuffer(combinedBuffer);\n  }\n\n  private async generateHashFromBuffer(buffer: Uint8Array): Promise<string> {\n    return await window.crypto.subtle.digest('SHA-256', buffer).then(hashBuffer => {\n      return Array.from(new Uint8Array(hashBuffer))\n        .map(byte => byte.toString(16).padStart(2, '0'))\n        .join('');\n    });\n  }\n}\n","import {Injectable, Inject, ErrorHandler, Injector} from '@angular/core';\nimport {HttpBackend, HttpClient, HttpHeaders} from '@angular/common/http';\nimport {catchError, map, tap} from 'rxjs/operators';\nimport {EMPTY, timer} from 'rxjs';\nimport {UserActionTrackerService} from './user-action-tracker.service';\nimport {BuildIdService} from './build-id.service';\nimport {sanitizeLog} from './sanitizer';\nimport {LOGGER_CONFIG, LoggerConfig} from \"./logger-config\";\nimport {NavigationEnd, Router} from '@angular/router';\n\ninterface HybridPayload {\n  iv: string;\n  cipher: string;\n  aesKey: string;\n}\n\n@Injectable({providedIn: 'root'})\nexport class ErrorLoggerService implements ErrorHandler {\n  private http: HttpClient;\n  private publicKey: CryptoKey | null = null;\n  private errorSet: Set<string> = new Set<string>();\n  private logQueue: any[] = [];\n  private maxStoredLogs: number = 20;\n  private canFlush: boolean = true;\n\n  private appBuildId: string = 'unknown-build-id';\n\n  private STORAGE_LOGS_KEY: string = 'ng-error-tracker';\n\n  constructor(\n    private injector: Injector,\n    handler: HttpBackend,\n    private userActionsTracker: UserActionTrackerService,\n    private buildIdService: BuildIdService,\n    @Inject(LOGGER_CONFIG) private config: LoggerConfig,\n    @Inject(Router) private router: Router\n  ) {\n    this.http = new HttpClient(handler);\n\n    if (this.config.enableLogging) {\n      this.initService();\n    }\n  }\n\n  private async initService() {\n    this.appBuildId = !this.config.appBuildId ? await this.buildIdService.getAppBuildId() : this.config.appBuildId;\n\n    console.log(\"✅ Signing logs with App Build ID:\", this.appBuildId);\n\n    this.loadStoredLogs();\n\n    if (this.config.publicKeyUrl) {\n      this.loadPublicKey();\n    } else if (this.config.publicKey) {\n      const binaryDer = this.base64ToArrayBuffer(this.config.publicKey);\n      await this.importPublicKey(binaryDer);\n    }\n\n    this.router.events.subscribe((event: any) => {\n      if (event instanceof NavigationEnd) {\n        this.scheduleFlush(10000);\n      }\n    });\n\n    this.scheduleFlush(10000);\n  }\n\n  private loadPublicKey() {\n    if (!this.config.publicKeyUrl) return;\n\n    this.http.get(this.config.publicKeyUrl, {responseType: 'text'}).pipe(\n      catchError(() => {\n        console.warn('⚠️ Could not retrieve the public key.');\n        return EMPTY;\n      })\n    ).subscribe(async (base64Der) => {\n      const binaryDer = this.base64ToArrayBuffer(base64Der);\n      await this.importPublicKey(binaryDer);\n    });\n  }\n\n  private async importPublicKey(binaryDer: ArrayBuffer) {\n    try {\n      this.publicKey = await window.crypto.subtle.importKey(\n        \"spki\",\n        binaryDer,\n        {name: \"RSA-OAEP\", hash: \"SHA-256\"},\n        true,\n        [\"encrypt\"]\n      );\n      console.log(\"✅ Public key imported successfully.\");\n    } catch (error) {\n      console.error(\"❌ Error importing public key:\", error);\n    }\n  }\n\n  private base64ToArrayBuffer(base64: string): ArrayBuffer {\n    const binaryString = atob(base64);\n    const len = binaryString.length;\n    const bytes = new Uint8Array(len);\n    for (let i = 0; i < len; i++) {\n      bytes[i] = binaryString.charCodeAt(i);\n    }\n    return bytes.buffer;\n  }\n\n  async handleError(error: any) {\n    console.warn(\"⚠️ Error captured by ErrorLoggerService:\", error);\n\n    if (!this.config.enableLogging) {\n      const defaultErrorHandler = this.injector.get<ErrorHandler>(ErrorHandler, undefined);\n\n      if (defaultErrorHandler && defaultErrorHandler !== this) {\n        defaultErrorHandler.handleError(error);\n      }\n\n      return;\n    }\n\n    const logData = {\n      severity: 'error',\n      message: sanitizeLog(error.message || 'Unknown error'),\n      stack: sanitizeLog(error.stack || ''),\n      appName: this.config.appName,\n      appEnv: this.config.appEnv,\n      appBuildId: this.appBuildId,\n      timestamp: new Date().toISOString(),\n      userActions: this.userActionsTracker.getUserActions(),\n      hash: ''\n    };\n\n    logData['hash'] = await this.generateHash(logData);\n\n    if (this.errorSet.has(logData['hash'])) {\n      console.warn(`⚠️ Duplicate error detected: ${logData['hash']}, ignoring...`);\n\n      const defaultErrorHandler = this.injector.get<ErrorHandler>(ErrorHandler, undefined);\n\n      if (defaultErrorHandler && defaultErrorHandler !== this) {\n        defaultErrorHandler.handleError(error);\n      }\n\n      return;\n    }\n\n    this.errorSet.add(logData['hash']);\n    this.logQueue.push(logData);\n    this.storeLogs([logData]);\n\n    this.scheduleFlush(30000);\n\n    const defaultErrorHandler = this.injector.get<ErrorHandler>(ErrorHandler, undefined);\n\n    if (defaultErrorHandler && defaultErrorHandler !== this) {\n      defaultErrorHandler.handleError(error);\n    }\n\n    return;\n  }\n\n  private scheduleFlush(time: number): void {\n    if (!this.canFlush) return;\n    this.canFlush = false;\n    timer(time).subscribe(() => {\n      this.canFlush = true;\n      this.flushLogs();\n    });\n  }\n\n  private async flushLogs() {\n    if (!this.config.enableLogging || this.logQueue.length === 0 || !this.canFlush) return;\n    if (!this.publicKey) {\n      console.warn('⚠️ No public key loaded yet. Logs remain queued.');\n      return;\n    }\n\n    const logsToSend = [...this.logQueue];\n    if (logsToSend.length === 0) return;\n    const logsJson = JSON.stringify(logsToSend);\n\n    try {\n      const aesKey = await this.generateAESKey();\n      const {iv, cipher} = await this.encryptAES(logsJson, aesKey);\n      const encryptedAESKey = await this.encryptAESKey(aesKey);\n      if (!encryptedAESKey) {\n        console.warn('⚠️ Could not encrypt AES key with RSA');\n        return;\n      }\n\n      const payload: HybridPayload = {\n        iv: this.arrayBufferToBase64(iv),\n        cipher: this.arrayBufferToBase64(cipher),\n        aesKey: encryptedAESKey\n      };\n\n      let headers = new HttpHeaders({'Content-Type': 'application/json'});\n      if (this.config.apiKey) {\n        headers = headers.set('Authorization', `Bearer ${this.config.apiKey}`);\n      }\n\n      this.http.post(this.config.apiUrl, payload, {headers, responseType: 'text', observe: 'response'}).pipe(\n        map(response => response.body || ''),\n        catchError((err) => {\n          console.warn('⚠️ Could not send the log. They will remain stored until the next attempt.', err?.message);\n          return EMPTY;\n        })\n      ).subscribe((responseBody) => {\n        console.log('✅ Logs sent successfully (AES-256-GCM + RSA-OAEP-SHA-256).');\n        if (responseBody.trim() === '') {\n          console.log('📥 Server response is empty.');\n        } else {\n          console.log('📥 Server response:', responseBody);\n        }\n        this.removeStoredLogs(logsToSend);\n      });\n    } catch (err) {\n      console.warn('⚠️ Could not send the log. They will remain stored until the next attempt.', err);\n    }\n  }\n\n  private async generateAESKey(): Promise<CryptoKey> {\n    return window.crypto.subtle.generateKey(\n      {name: 'AES-GCM', length: 256},\n      true,\n      ['encrypt', 'decrypt']\n    );\n  }\n\n  private async encryptAES(plaintext: string, key: CryptoKey): Promise<{ iv: ArrayBuffer; cipher: ArrayBuffer }> {\n    const encoder = new TextEncoder();\n    const data = encoder.encode(plaintext);\n    const iv = window.crypto.getRandomValues(new Uint8Array(12));\n    const cipher = await window.crypto.subtle.encrypt(\n      {name: 'AES-GCM', iv},\n      key,\n      data\n    );\n    return {iv, cipher};\n  }\n\n  private async encryptAESKey(aesKey: CryptoKey): Promise<string | false> {\n    const rawKey = await window.crypto.subtle.exportKey('raw', aesKey);\n    if (!this.publicKey) return false;\n    const encryptedKey = await window.crypto.subtle.encrypt(\n      {name: \"RSA-OAEP\"},\n      this.publicKey,\n      rawKey\n    );\n    return this.arrayBufferToBase64(encryptedKey);\n  }\n\n  private arrayBufferToBase64(buffer: ArrayBuffer): string {\n    return btoa(String.fromCharCode(...new Uint8Array(buffer)));\n  }\n\n  private loadStoredLogs(): void {\n    let storedLogs = JSON.parse(localStorage.getItem(this.STORAGE_LOGS_KEY) || '[]');\n\n    if (storedLogs.length > 0) {\n      storedLogs = [...storedLogs].slice(-this.maxStoredLogs);\n\n      this.logQueue = [];\n      this.errorSet = new Set<string>();\n\n      storedLogs.forEach((log: any) => {\n        if (!this.errorSet.has(log['hash'])) {\n          this.errorSet.add(log['hash']);\n          this.logQueue.push(log);\n        }\n      });\n    } else {\n      this.logQueue = [];\n      this.errorSet = new Set<string>();\n    }\n  }\n\n  private storeLogs(logs: any[]): void {\n    const storedLogs = JSON.parse(localStorage.getItem(this.STORAGE_LOGS_KEY) || '[]');\n    const merged = [...storedLogs, ...logs]\n      .slice(-this.maxStoredLogs)\n      .filter((log, index, self) =>\n        self.findIndex(l => l.hash === log.hash) === index\n      );\n\n    localStorage.setItem(this.STORAGE_LOGS_KEY, JSON.stringify(merged));\n\n    this.logQueue = merged;\n    this.errorSet = new Set<string>();\n\n    merged.forEach((log: any) => {\n      this.errorSet.add(log['hash']);\n    });\n  }\n\n  private removeStoredLogs(logsSent: any[]): void {\n    const storedLogs = JSON.parse(localStorage.getItem(this.STORAGE_LOGS_KEY) || '[]');\n    const remaining = storedLogs.filter((storedLog: any) =>\n      !logsSent.some((sentLog: any) =>\n        sentLog.hash === storedLog.hash\n      )\n    );\n\n    localStorage.setItem(this.STORAGE_LOGS_KEY, JSON.stringify(remaining));\n\n    this.logQueue = remaining;\n    this.errorSet = new Set<string>();\n\n    remaining.forEach((log: any) => {\n      this.errorSet.add(log['hash']);\n    });\n  }\n\n  private async generateHash(logData: any): Promise<string> {\n    const encoder = new TextEncoder();\n    const data = encoder.encode(\n      `${logData.appName}-${logData.appEnv}-${logData.appBuildId}-${logData.message || 'Unknown error'}-${logData.stack || ''}`\n    );\n    const hashBuffer = await window.crypto.subtle.digest('SHA-256', data);\n    return this.arrayBufferToHex(hashBuffer);\n  }\n\n  private arrayBufferToHex(buffer: ArrayBuffer): string {\n    return Array.from(new Uint8Array(buffer))\n      .map((b) => b.toString(16).padStart(2, '0'))\n      .join('');\n  }\n}\n","import {Injectable, Inject} from '@angular/core';\nimport {HttpInterceptor, HttpRequest, HttpHandler, HttpErrorResponse} from '@angular/common/http';\nimport {Observable, catchError, throwError} from 'rxjs';\nimport {ErrorLoggerService} from './error-logger.service';\nimport {LOGGER_CONFIG, LoggerConfig} from \"./logger-config\";\n\n@Injectable()\nexport class ErrorLoggerInterceptor implements HttpInterceptor {\n  constructor(@Inject(LOGGER_CONFIG) private config: LoggerConfig, private errorLogger: ErrorLoggerService) {\n    console.log('✅ Logger interceptor loaded.')\n  }\n\n  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<any> {\n    if (!this.config.enableLogging) {\n      return next.handle(req)\n    } else {\n      return next.handle(req).pipe(\n        catchError((error: HttpErrorResponse) => {\n          if (!req.url.includes(this.config.apiUrl)) {\n            if (error instanceof HttpErrorResponse) {\n              const standardError = new Error(`HTTP ${error.status}: ${error.message}`);\n              standardError.stack = error.error?.stack || error.message;\n              this.errorLogger.handleError(standardError);\n            }\n          }\n\n          return throwError(() => error);\n        })\n      );\n    }\n  }\n}\n","import {ErrorHandler, Provider} from '@angular/core';\nimport {ErrorLoggerService} from './error-logger.service';\nimport {LOGGER_CONFIG, LoggerConfig} from \"./logger-config\";\n\nexport function provideErrorTracker(config: LoggerConfig): Provider[] {\n  return [\n    {provide: LOGGER_CONFIG, useValue: config},\n    {provide: ErrorLoggerService, useClass: ErrorLoggerService},\n    {provide: ErrorHandler, useExisting: ErrorLoggerService},\n  ];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.UserActionTrackerService","i3.BuildIdService","catchError","i1.ErrorLoggerService"],"mappings":"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"}