{"version":3,"file":"dhaivat-cloud-analytics-tracker.mjs","sources":["../../../projects/analytics-tracker/src/lib/analytics-config.ts","../../../projects/analytics-tracker/src/lib/analytics-tracker.service.ts","../../../projects/analytics-tracker/src/lib/track-click.directive.ts","../../../projects/analytics-tracker/src/lib/analytics-tracker.module.ts","../../../projects/analytics-tracker/src/lib/analytics-tracker.component.ts","../../../projects/analytics-tracker/src/dhaivat-cloud-analytics-tracker.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport interface AnalyticsConfig {\r\n  apiKey: string;\r\n  apiUrl: string;\r\n}\r\n\r\nexport const ANLYTCS_CFG = new InjectionToken<AnalyticsConfig>('AnalyticsConfig');","import { Injectable, Inject } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { ANLYTCS_CFG, AnalyticsConfig } from './analytics-config';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class AnalyticsTrackerService {\r\n\r\n  private apiKey: string;\r\n  private apiUrl: string;\r\n  private sessionId: string;\r\n  private tabId: string;\r\n\r\n  constructor(\r\n    private http: HttpClient,\r\n    @Inject(ANLYTCS_CFG) private config: AnalyticsConfig\r\n  ) {\r\n    this.apiKey = config.apiKey;\r\n    this.apiUrl = config.apiUrl;\r\n    this.sessionId = this.getOrCreateSessionId();\r\n    this.tabId = this.generateUniqueTabId();\r\n  }\r\n\r\n\r\n  private generateUUID(): string {\r\n    // A simple non-crypto UUID for session IDs\r\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n      const r = (Math.random() * 16) | 0,\r\n        v = c === 'x' ? r : (r & 0x3) | 0x8;\r\n      return v.toString(16);\r\n    });\r\n  }\r\n\r\n  private getOrCreateSessionId(): string {\r\n    let id = sessionStorage.getItem('analytics_session_id');\r\n    if (!id) {\r\n      id = this.generateUUID();\r\n      sessionStorage.setItem('analytics_session_id', id);\r\n\r\n      sessionStorage.setItem('analytics_session_start', Date.now().toString());\r\n    }\r\n    return id;\r\n  }\r\n\r\n  private getUserId(): string {\r\n    // Reads the user ID set by the main app's login logic\r\n    return sessionStorage.getItem('analytics_user_id') || 'anonymous';\r\n  }\r\n\r\n  private getUserName(): string {\r\n    // Reads the user name set by the main app's login logic\r\n    return sessionStorage.getItem('analytics_user_name') || 'anonymous';\r\n  }\r\n\r\n  private getSessionDuration(): number {\r\n    // Calculate session duration in seconds\r\n    const sessionStart = sessionStorage.getItem('analytics_session_start');\r\n    if (sessionStart) {\r\n      return Math.floor((Date.now() - parseInt(sessionStart)) / 1000);\r\n    }\r\n    return 0;\r\n  }\r\n\r\n  private getJobId(): string {\r\n    // Reads the job ID set by the main app\r\n    return sessionStorage.getItem('analytics_job_id') || '';\r\n  }\r\n\r\n  private getJobName(): string {\r\n    // Reads the job name set by the main app\r\n    return sessionStorage.getItem('analytics_job_name') || '';\r\n  }\r\n\r\n  private getToken(): string {\r\n    // Reads the token set by the main app\r\n    return sessionStorage.getItem('analytics_token') || '';\r\n  }\r\n  \r\n  private generateUniqueTabId(): string {\r\n    // Check if tab ID already exists in sessionStorage (for page reloads)\r\n    const existingTabId = sessionStorage.getItem('analytics_tab_id');\r\n    if (existingTabId) {\r\n      return existingTabId;\r\n    }\r\n    \r\n    // Generate a unique tab ID using multiple techniques to ensure uniqueness\r\n    const timestamp = Date.now();\r\n    const random = Math.random().toString(36).substring(2, 15);\r\n    const performanceId = performance.now().toString(36).substring(2, 8);\r\n    \r\n    // Add a small delay to ensure different tabs get different performance.now() values\r\n    const microTimestamp = (performance.now() * 1000).toString(36).substring(2, 6);\r\n    \r\n    // Combine multiple sources of uniqueness\r\n    const tabId = `tab-${timestamp}-${random}-${performanceId}-${microTimestamp}`;\r\n    \r\n    // Store in sessionStorage for persistence across page reloads within the same tab\r\n    sessionStorage.setItem('analytics_tab_id', tabId);\r\n    \r\n    return tabId;\r\n  }\r\n\r\n  /**\r\n   * Get the current tab ID for debugging purposes\r\n   * @returns The unique tab ID for this tab\r\n   */\r\n  public getCurrentTabId(): string {\r\n    return this.tabId;\r\n  }\r\n\r\n  /**\r\n   * Get the current session ID for debugging purposes\r\n   * @returns The session ID\r\n   */\r\n  public getCurrentSessionId(): string {\r\n    return this.sessionId;\r\n  }\r\n\r\n  /**\r\n   * Set user information for analytics tracking\r\n   * @param userId The user ID\r\n   * @param userName The user name\r\n   */\r\n  public setUserInfo(userId: string, userName: string): void {\r\n    sessionStorage.setItem('analytics_user_id', userId);\r\n    sessionStorage.setItem('analytics_user_name', userName);\r\n  }\r\n\r\n  /**\r\n   * Set job information for analytics tracking\r\n   * @param jobId The job ID\r\n   * @param jobName The job name\r\n   */\r\n  public setJobInfo(jobId: string, jobName: string): void {\r\n    sessionStorage.setItem('analytics_job_id', jobId);\r\n    sessionStorage.setItem('analytics_job_name', jobName);\r\n  }\r\n\r\n  /**\r\n   * Set authentication token for analytics tracking\r\n   * @param token The authentication token\r\n   */\r\n  public setToken(token: string): void {\r\n    sessionStorage.setItem('analytics_token', token);\r\n  }\r\n\r\n  \r\n  private sendEvent(payload: object): void {\r\n    const finalPayload = {\r\n      ...payload,\r\n      sessionId: this.sessionId,\r\n      tabId: this.tabId,\r\n      userId: this.getUserId(),\r\n      userName: this.getUserName(),\r\n      duration: this.getSessionDuration(),\r\n      jobId: this.getJobId(),\r\n      jobName: this.getJobName(),\r\n      eventTimestamp: new Date().toISOString(),\r\n      dataSource: 'FRONTEND',\r\n      token: this.getToken()\r\n    };\r\n    \r\n    const headers = new HttpHeaders({\r\n      'Content-Type': 'application/json',\r\n      'X-API-KEY': this.apiKey\r\n    });\r\n\r\n \r\n    this.http.post(this.apiUrl, finalPayload, { headers })\r\n      .subscribe({\r\n        next: () => console.log('Analytics Event Sent:', finalPayload),\r\n        error: (err) => console.error('Error sending analytics event:', err)\r\n      });\r\n  }\r\n\r\n\r\n\r\n  public trackPageview(screenName: string, moduleName: string = 'Navigation'): void {\r\n    this.sendEvent({\r\n      Module: moduleName,\r\n      Action: 'ScreenView',\r\n      Screen: screenName,\r\n      type: 'Navigation'\r\n    });\r\n  }\r\n  \r\n  public trackFeatureClick(actionName: string, screenName: string, moduleName: string, extraData: object = {}): void {\r\n    this.sendEvent({\r\n      Module: moduleName,\r\n      Action: actionName,\r\n      Screen: screenName,\r\n      type: 'UserInteraction', \r\n      ...extraData\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Track a custom event with full control over the payload\r\n   * @param eventName The name of the event\r\n   * @param screenName The screen where the event occurred\r\n   * @param moduleName The module name\r\n   * @param extraData Additional data to include in the event\r\n   */\r\n  public trackCustomEvent(eventName: string, screenName: string, moduleName: string, extraData: object = {}): void {\r\n    this.sendEvent({\r\n      Module: moduleName,\r\n      Action: eventName,\r\n      Screen: screenName,\r\n      type: 'CustomEvent',\r\n      ...extraData\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Track a simple event with just the event name (for backward compatibility)\r\n   * @param eventName The name of the event\r\n   * @param extraData Additional data to include in the event\r\n   */\r\n  public trackSimpleEvent(eventName: string, extraData: object = {}): void {\r\n    this.sendEvent({\r\n      Module: 'Custom',\r\n      Action: eventName,\r\n      Screen: 'Unknown',\r\n      type: 'CustomEvent',\r\n      ...extraData\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Track a simple event with just the event name (public method for backward compatibility)\r\n   * @param eventName The name of the event\r\n   * @param extraData Additional data to include in the event\r\n   */\r\n  public trackEvent(eventName: string, extraData: object = {}): void {\r\n    this.sendEvent({\r\n      Module: 'Custom',\r\n      Action: eventName,\r\n      Screen: 'Unknown',\r\n      type: 'CustomEvent',\r\n      ...extraData\r\n    });\r\n  }\r\n}","import { Directive, HostListener, Input } from '@angular/core';\r\nimport { AnalyticsTrackerService } from './analytics-tracker.service';\r\n\r\n@Directive({\r\n  selector: '[trackClick]',\r\n  standalone: true \r\n})\r\nexport class TrackClickDirective {\r\n  @Input('trackClick') actionName!: string;\r\n  @Input() screenName!: string;\r\n  @Input() moduleName!: string;\r\n  @Input() trackData: object = {}; \r\n\r\n  constructor(private analyticsService: AnalyticsTrackerService) {}\r\n\r\n  @HostListener('click')\r\n  onClick() {\r\n    if (this.actionName && this.screenName && this.moduleName) {\r\n      this.analyticsService.trackFeatureClick(\r\n        this.actionName,\r\n        this.screenName,\r\n        this.moduleName,\r\n        this.trackData\r\n      );\r\n    } else {\r\n      console.warn('trackClick directive is missing required fields (trackClick, screenName, moduleName)');\r\n    }\r\n  }\r\n}","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { TrackClickDirective } from './track-click.directive';\r\nimport { ANLYTCS_CFG, AnalyticsConfig } from './analytics-config';\r\nimport { AnalyticsTrackerService } from './analytics-tracker.service';\r\n\r\n@NgModule({\r\n  imports: [ \r\n    CommonModule, \r\n    HttpClientModule\r\n  ],\r\n  declarations: [],\r\n  exports: [] \r\n})\r\nexport class AnalyticsTrackerModule {\r\n  public static forRoot(config: AnalyticsConfig): ModuleWithProviders<AnalyticsTrackerModule> {\r\n    return {\r\n      ngModule: AnalyticsTrackerModule,\r\n      providers: [\r\n        AnalyticsTrackerService, // Provide the service\r\n        { provide: ANLYTCS_CFG, useValue: config } // Provide the configuration\r\n      ]\r\n    };\r\n  }\r\n}","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'lib-analytics-tracker',\r\n  imports: [],\r\n  template: `\r\n    <p>\r\n      analytics-tracker works!\r\n    </p>\r\n  `,\r\n  styles: ``\r\n})\r\nexport class AnalyticsTrackerComponent {\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AnalyticsTrackerService"],"mappings":"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"}