/** * Analytics Service (Firebase GA4) * * Servicio para tracking de eventos, page views y errores con Firebase Analytics. * Integra con el sistema de auth para user properties y respeta consent mode GDPR. */ import { Injector } from '@angular/core'; import { ValtechFirebaseConfig } from './types'; import { AnalyticsDebugEvent, AnalyticsEventName, AnalyticsEventParams, AnalyticsItem, ConsentSettings, ConsentState, UserProperties } from './analytics-types'; import * as i0 from "@angular/core"; /** * Servicio de Firebase Analytics (GA4). * * Proporciona tracking de eventos, page views, errores y métricas de performance. * Soporta GDPR Consent Mode y modo debug para desarrollo. * * @example * ```typescript * @Component({...}) * export class ProductComponent { * private analytics = inject(AnalyticsService); * * onPurchase(product: Product) { * this.analytics.logEvent('purchase', { * transaction_id: order.id, * value: order.total, * currency: 'EUR' * }); * } * } * ``` */ export declare class AnalyticsService { private injector; private config; private platformId; private readonly _consentState; private readonly _isDebugMode; private readonly _debugHistory; /** Estado de consentimiento actual (readonly) */ readonly consentState: import("@angular/core").Signal; /** Indica si está en modo debug */ readonly isDebugMode: import("@angular/core").Signal; /** Indica si analytics está habilitado y funcionando */ readonly isEnabled: import("@angular/core").Signal; private readonly analyticsConfig; private readonly consentStorageKey; private readonly eventPrefix; private readonly samplingRate; constructor(injector: Injector, config: ValtechFirebaseConfig, platformId: Object); /** * Inicializa el servicio de analytics */ private initializeAnalytics; /** * Obtiene la instancia de Analytics de forma perezosa. * Esto evita el error de APP_INITIALIZER de AngularFire. */ private getAnalyticsInstance; /** * Verifica si Analytics está soportado */ private isAnalyticsSupported; /** * Verifica si debe enviar el evento (sampling) */ private shouldSample; /** * Registra un page view. * Normalmente se usa automáticamente via AnalyticsRouterTracker. * * @param pagePath - Ruta de la página (ej: '/products/123') * @param pageTitle - Título de la página (opcional) */ logPageView(pagePath: string, pageTitle?: string): void; /** * Registra un screen view (para apps tipo SPA). * * @param screenName - Nombre del screen * @param screenClass - Clase del screen (opcional) */ logScreenView(screenName: string, screenClass?: string): void; /** * Registra un evento tipado GA4. * * @param eventName - Nombre del evento (tipado) * @param params - Parámetros del evento (tipados según el nombre) * * @example * ```typescript * // Evento tipado con autocompletado * analytics.logEvent('add_to_cart', { * item_id: '123', * item_name: 'Producto', * value: 99.99, * currency: 'EUR' * }); * ``` */ logEvent(eventName: T, params?: AnalyticsEventParams[T]): void; /** * Registra un evento custom con parámetros libres. * Usar cuando el evento no está en el catálogo tipado. * * @param eventName - Nombre del evento custom * @param params - Parámetros libres */ logCustomEvent(eventName: string, params?: Record): void; /** * Lógica común para enviar eventos */ private trackEvent; /** * Registra vista de item */ logViewItem(item: AnalyticsItem): void; /** * Registra agregar al carrito */ logAddToCart(item: AnalyticsItem, quantity?: number): void; /** * Registra inicio de checkout */ logBeginCheckout(items: AnalyticsItem[], value: number, currency?: string): void; /** * Registra compra completada */ logPurchase(transactionId: string, items: AnalyticsItem[], value: number, currency?: string): void; /** * Setea el userId para asociar eventos con el usuario. * Llamado automáticamente si enableAuthIntegration=true. * * @param userId - ID del usuario o null para limpiar */ setUserId(userId: string | null): void; /** * Setea propiedades del usuario para segmentación. * * @param properties - Propiedades key-value * * @example * ```typescript * analytics.setUserProperties({ * subscription_tier: 'premium', * preferred_language: 'es' * }); * ``` */ setUserProperties(properties: UserProperties | Record): void; /** * Setea la organización activa (multi-tenant). * Llamado automáticamente si enableAuthIntegration=true. * * @param orgId - ID de la organización o null */ setActiveOrganization(orgId: string | null): void; /** * Registra un error para tracking. * Integra automáticamente con Angular ErrorHandler si enableErrorTracking=true. * * @param error - Error o mensaje de error * @param context - Contexto adicional * * @example * ```typescript * try { * await riskyOperation(); * } catch (error) { * analytics.logError(error, { context: 'checkout_flow' }); * } * ``` */ logError(error: Error | string, context?: Record): void; /** * Registra un error fatal (crash-level). */ logFatalError(error: Error, context?: Record): void; /** * Actualiza el estado de consentimiento del usuario. * Afecta qué datos se recolectan y envían. * * @param consent - Settings de consentimiento * * @example * ```typescript * // Usuario acepta todo * analytics.updateConsent({ analytics: true, advertising: true }); * * // Usuario rechaza publicidad * analytics.updateConsent({ analytics: true, advertising: false }); * ``` */ updateConsent(consent: ConsentSettings): void; /** * Deniega todo consentimiento. */ denyAllConsent(): void; /** * Acepta todo consentimiento. */ grantAllConsent(): void; /** * Obtiene el estado actual de consentimiento. */ getConsentState(): ConsentState; /** * Aplica consent settings a gtag (GA4 Consent Mode v2) */ private applyConsentToGtag; /** * Carga consent desde localStorage */ private loadConsentFromStorage; /** * Guarda consent en localStorage */ private saveConsentToStorage; /** * Registra una métrica de timing/performance. * * @param name - Nombre de la métrica * @param valueMs - Valor en milisegundos * @param params - Parámetros adicionales * * @example * ```typescript * const start = performance.now(); * await loadData(); * analytics.logTiming('data_load', performance.now() - start, { * category: 'api', * endpoint: '/products' * }); * ``` */ logTiming(name: string, valueMs: number, params?: Record): void; /** * Habilita/deshabilita modo debug. * En debug: logea eventos a consola además de enviarlos a Firebase. */ setDebugMode(enabled: boolean): void; /** * Obtiene historial de eventos (solo en debug mode). * Útil para testing y desarrollo. */ getDebugHistory(): AnalyticsDebugEvent[]; /** * Limpia historial de debug. */ clearDebugHistory(): void; /** * Agrega evento al historial de debug */ private addToDebugHistory; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵprov: i0.ɵɵInjectableDeclaration; }