getu-attribution-v2-sdk 0.2.1 → 0.2.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/types/index.ts","../src/utils/index.ts","../src/storage/index.ts","../src/version.ts","../src/queue/index.ts","../src/core/AttributionSDK.ts","../src/index.ts"],"sourcesContent":["// Event types matching server-side enum exactly\nexport enum EventType {\n // Pre-conversion signals\n PAGE_VIEW = \"page_view\",\n PAGE_CLICK = \"page_click\", // User click journey tracking\n VIDEO_PLAY = \"video_play\",\n\n // Registration funnel\n FORM_SUBMIT = \"form_submit\",\n EMAIL_VERIFICATION = \"email_verification\",\n\n // Login flow\n LOGIN = \"login\",\n\n // Signup flow\n SIGNUP = \"signup\",\n\n // Purchase funnel\n PRODUCT_VIEW = \"product_view\",\n ADD_TO_CART = \"add_to_cart\",\n PURCHASE = \"purchase\",\n}\n\n// Currency types\nexport enum Currency {\n USD = \"USD\",\n}\n\n// UTM data structure\nexport interface UTMData {\n utm_source?: string | null;\n utm_medium?: string | null;\n utm_campaign?: string | null;\n utm_term?: string | null;\n utm_content?: string | null;\n timestamp: number;\n}\n\n// Attribution data structure\nexport interface AttributionData {\n firstTouch: UTMData;\n lastTouch: UTMData;\n touchpoints: UTMData[];\n expiresAt: number;\n}\n\n// Event data structure\nexport interface EventData {\n event_id: string;\n event_type: EventType;\n tracking_user_id?: string;\n utm_source?: string | null;\n utm_medium?: string | null;\n utm_campaign?: string | null;\n utm_term?: string | null;\n utm_content?: string | null;\n revenue?: number | null;\n currency?: Currency | null;\n event_data?: Record<string, any> | null;\n // Arbitrary context information; page info should be nested under context.page\n context?: {\n page?: {\n domain?: string | null;\n path?: string | null;\n title?: string | null;\n referrer?: string | null;\n url?: string | null; // for completeness but no querystring\n querystring?: string | null; // URL query string\n query_params?: Record<string, string> | null; // Parsed query parameters as object\n };\n [key: string]: any;\n } | null;\n timestamp?: number;\n}\n\n// Batch event request\nexport interface BatchEventRequest {\n events: EventData[];\n sdk_version: string;\n}\nexport const defaultEndpoint = \"https://attribution.getu.ai/attribution/api\";\n// SDK configuration\nexport interface SDKConfig {\n apiKey: string;\n apiEndpoint?: string;\n batchSize?: number;\n batchInterval?: number; // Default: 2000 (ms)\n maxRetries?: number;\n retryDelay?: number;\n enableDebug?: boolean;\n autoTrack?: boolean;\n // Control whether to automatically track page views on initialization\n autoTrackPageView?: boolean;\n sessionTimeout?: number;\n // Cross-domain UTM tracking configuration\n enableCrossDomainUTM?: boolean;\n crossDomainUTMParams?: string[]; // Which UTM params to pass\n excludeDomains?: string[]; // Domains to exclude from UTM passing\n // Control whether to automatically remove UTM params from the URL after capture\n autoCleanUTM?: boolean;\n // Page view debounce interval in milliseconds (default: 5000ms)\n // Same page can only be tracked once within this interval\n pageViewDebounceInterval?: number;\n}\n\n// Storage interface\nexport interface StorageInterface {\n get(key: string): any;\n set(key: string, value: any): void;\n remove(key: string): void;\n clear(): void;\n}\n\n// Queue interface\nexport interface QueueInterface {\n add(event: EventData): void;\n process(): Promise<void>;\n clear(): void;\n size(): number;\n}\n\n// Logger interface\nexport interface LoggerInterface {\n debug(message: string, ...args: any[]): void;\n info(message: string, ...args: any[]): void;\n warn(message: string, ...args: any[]): void;\n error(message: string, ...args: any[]): void;\n}\n\n// User session data\nexport interface UserSession {\n sessionId: string;\n startTime: number;\n lastActivity: number;\n pageViews: number;\n}\n\n// Special events that should be sent immediately\nexport const IMMEDIATE_EVENTS = [\n EventType.PURCHASE,\n EventType.LOGIN,\n EventType.SIGNUP,\n EventType.FORM_SUBMIT,\n EventType.EMAIL_VERIFICATION,\n];\n","import { LoggerInterface, UTMData } from \"../types\";\n\n// Generate unique ID\nexport function generateId(): string {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n// Generate timestamp in seconds\nexport function getTimestamp(): number {\n return Math.floor(Date.now() / 1000);\n}\n\n// Parse URL parameters\nexport function parseUrlParams(url: string): Record<string, string> {\n const params: Record<string, string> = {};\n try {\n const urlObj = new URL(url);\n urlObj.searchParams.forEach((value, key) => {\n params[key] = value;\n });\n } catch (error) {\n // Handle invalid URLs\n }\n return params;\n}\n\n// Extract UTM parameters from URL\nexport function extractUTMParams(url: string): Record<string, string> {\n const params = parseUrlParams(url);\n const utmParams: Record<string, string> = {};\n\n const utmKeys = [\n \"utm_source\",\n \"utm_medium\",\n \"utm_campaign\",\n \"utm_term\",\n \"utm_content\",\n ];\n\n utmKeys.forEach((key) => {\n if (params[key] && params[key].trim() !== \"\") {\n utmParams[key] = params[key].trim();\n }\n });\n\n return utmParams;\n}\n\n// Check if browser supports localStorage\nexport function isLocalStorageSupported(): boolean {\n try {\n const test = \"__localStorage_test__\";\n localStorage.setItem(test, test);\n localStorage.removeItem(test);\n return true;\n } catch {\n return false;\n }\n}\n\n// Check if browser supports IndexedDB\nexport function isIndexedDBSupported(): boolean {\n return \"indexedDB\" in window;\n}\n\n// Deep clone object\nexport function deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") {\n return obj;\n }\n\n if (obj instanceof Date) {\n return new Date(obj.getTime()) as unknown as T;\n }\n\n if (obj instanceof Array) {\n return obj.map((item) => deepClone(item)) as unknown as T;\n }\n\n if (typeof obj === \"object\") {\n const cloned = {} as T;\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n cloned[key] = deepClone(obj[key]);\n }\n }\n return cloned;\n }\n\n return obj;\n}\n\n// Debounce function\nexport function debounce<T extends (...args: any[]) => any>(\n func: T,\n wait: number\n): (...args: Parameters<T>) => void {\n let timeout: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), wait);\n };\n}\n\n// Throttle function\nexport function throttle<T extends (...args: any[]) => any>(\n func: T,\n limit: number\n): (...args: Parameters<T>) => void {\n let inThrottle: boolean;\n return (...args: Parameters<T>) => {\n if (!inThrottle) {\n func(...args);\n inThrottle = true;\n setTimeout(() => (inThrottle = false), limit);\n }\n };\n}\n\n// Retry function with exponential backoff\nexport async function retry<T>(\n fn: () => Promise<T>,\n maxRetries: number = 3,\n baseDelay: number = 1000\n): Promise<T> {\n let lastError: Error;\n\n for (let i = 0; i <= maxRetries; i++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n if (i === maxRetries) {\n throw lastError;\n }\n\n const delay = baseDelay * Math.pow(2, i);\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n\n throw lastError!;\n}\n\n// Console logger implementation\nexport class ConsoleLogger implements LoggerInterface {\n private enabled: boolean;\n\n constructor(enabled: boolean = true) {\n this.enabled = enabled;\n }\n\n debug(message: string, ...args: any[]): void {\n if (this.enabled && console.debug) {\n console.debug(`[GetuAI Debug] ${message}`, ...args);\n }\n }\n\n info(message: string, ...args: any[]): void {\n if (this.enabled && console.info) {\n console.info(`[GetuAI Info] ${message}`, ...args);\n }\n }\n\n warn(message: string, ...args: any[]): void {\n if (this.enabled && console.warn) {\n console.warn(`[GetuAI Warn] ${message}`, ...args);\n }\n }\n\n error(message: string, ...args: any[]): void {\n if (this.enabled && console.error) {\n console.error(`[GetuAI Error] ${message}`, ...args);\n }\n }\n}\n\n// Get user agent info\nexport function getUserAgent(): string {\n return navigator.userAgent || \"\";\n}\n\n// Get referrer\nexport function getReferrer(): string {\n return document.referrer || \"\";\n}\n\n// Get current URL\nexport function getCurrentUrl(): string {\n return window.location.href;\n}\n\n// Get page title\nexport function getPageTitle(): string {\n return document.title || \"\";\n}\n\n// Check if user is online\nexport function isOnline(): boolean {\n return navigator.onLine;\n}\n\n// Generate session ID\nexport function generateSessionId(): string {\n return `session_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n}\n\n// Validate email format\nexport function isValidEmail(email: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n}\n\n// Format currency\nexport function formatCurrency(\n amount: number,\n currency: string = \"USD\"\n): string {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: currency,\n }).format(amount);\n}\n\n// Add UTM parameters to URL\nexport function addUTMToURL(\n url: string,\n utmParams: Record<string, string>\n): string {\n try {\n const urlObj = new URL(url);\n\n // Add UTM parameters if they don't already exist\n Object.entries(utmParams).forEach(([key, value]) => {\n if (value && !urlObj.searchParams.has(key)) {\n urlObj.searchParams.set(key, value);\n }\n });\n\n return urlObj.toString();\n } catch (error) {\n // If URL parsing fails, return original URL\n return url;\n }\n}\n\n// Check if domain should be excluded from UTM passing\nexport function shouldExcludeDomain(\n url: string,\n excludeDomains: string[] = []\n): boolean {\n try {\n const urlObj = new URL(url);\n const hostname = urlObj.hostname.toLowerCase();\n\n return excludeDomains.some((domain) => {\n const excludeDomain = domain.toLowerCase();\n return (\n hostname === excludeDomain || hostname.endsWith(`.${excludeDomain}`)\n );\n });\n } catch (error) {\n return false;\n }\n}\n\n// Get domain from URL\nexport function getDomainFromURL(url: string): string | null {\n try {\n const urlObj = new URL(url);\n return urlObj.hostname;\n } catch (error) {\n return null;\n }\n}\n\n// Check if URL is external (different domain)\nexport function isExternalURL(url: string): boolean {\n try {\n const urlObj = new URL(url);\n const currentDomain = window.location.hostname;\n return urlObj.hostname !== currentDomain;\n } catch (error) {\n return false;\n }\n}\n\n// Filter UTM parameters based on configuration\nexport function filterUTMParams(\n utmData: Partial<UTMData>,\n allowedParams: string[] = [\"utm_source\", \"utm_medium\", \"utm_campaign\"]\n): Record<string, string> {\n const filtered: Record<string, string> = {};\n\n allowedParams.forEach((param) => {\n if (utmData[param as keyof UTMData]) {\n filtered[param] = utmData[param as keyof UTMData] as string;\n }\n });\n\n return filtered;\n}\n\n// Get query string from URL\nexport function getQueryString(url?: string): string {\n try {\n const targetUrl = url || window.location.href;\n const urlObj = new URL(targetUrl);\n return urlObj.search;\n } catch (error) {\n return \"\";\n }\n}\n\n// Get query parameters as object\nexport function getQueryParams(url?: string): Record<string, string> {\n try {\n const targetUrl = url || window.location.href;\n const urlObj = new URL(targetUrl);\n const params: Record<string, string> = {};\n\n urlObj.searchParams.forEach((value, key) => {\n params[key] = value;\n });\n\n return params;\n } catch (error) {\n return {};\n }\n}\n\n// Clean URL by removing UTM parameters\nexport function cleanURL(): void {\n try {\n const currentUrl = new URL(window.location.href);\n const utmKeys = [\n \"utm_source\",\n \"utm_medium\",\n \"utm_campaign\",\n \"utm_term\",\n \"utm_content\",\n ];\n\n let hasParams = false;\n\n utmKeys.forEach((key) => {\n if (currentUrl.searchParams.has(key)) {\n currentUrl.searchParams.delete(key);\n hasParams = true;\n }\n });\n\n if (hasParams) {\n // Use replaceState to avoid page reload and history entry\n window.history.replaceState({}, document.title, currentUrl.toString());\n }\n } catch (error) {\n // Handle invalid URLs silently\n console.warn(\"Failed to clean URL:\", error);\n }\n}\n","import {\n StorageInterface,\n AttributionData,\n EventData,\n LoggerInterface,\n UTMData,\n} from \"../types\";\nimport {\n isLocalStorageSupported,\n isIndexedDBSupported,\n deepClone,\n ConsoleLogger,\n} from \"../utils\";\n\n// LocalStorage implementation\nexport class LocalStorageManager implements StorageInterface {\n private logger: LoggerInterface;\n\n constructor(logger: LoggerInterface) {\n this.logger = logger;\n }\n\n get(key: string): any {\n try {\n if (!isLocalStorageSupported()) {\n this.logger.warn(\"LocalStorage not supported\");\n return null;\n }\n\n const item = localStorage.getItem(key);\n if (item === null) {\n return null;\n }\n\n return JSON.parse(item);\n } catch (error) {\n this.logger.error(\"Error reading from localStorage:\", error);\n return null;\n }\n }\n\n set(key: string, value: any): void {\n try {\n if (!isLocalStorageSupported()) {\n this.logger.warn(\"LocalStorage not supported\");\n return;\n }\n\n localStorage.setItem(key, JSON.stringify(value));\n } catch (error) {\n this.logger.error(\"Error writing to localStorage:\", error);\n // Handle quota exceeded\n this.handleQuotaExceeded();\n }\n }\n\n remove(key: string): void {\n try {\n if (isLocalStorageSupported()) {\n localStorage.removeItem(key);\n }\n } catch (error) {\n this.logger.error(\"Error removing from localStorage:\", error);\n }\n }\n\n clear(): void {\n try {\n if (isLocalStorageSupported()) {\n localStorage.clear();\n }\n } catch (error) {\n this.logger.error(\"Error clearing localStorage:\", error);\n }\n }\n\n private handleQuotaExceeded(): void {\n // Try to clean up old data\n try {\n const keys = Object.keys(localStorage);\n const attributionKeys = keys.filter((key) =>\n key.startsWith(\"attribution_\")\n );\n\n if (attributionKeys.length > 0) {\n // Remove oldest data first\n attributionKeys.sort((a, b) => {\n const aData = this.get(a);\n const bData = this.get(b);\n return (aData?.expiresAt || 0) - (bData?.expiresAt || 0);\n });\n\n // Remove oldest 20% of data\n const toRemove = Math.ceil(attributionKeys.length * 0.2);\n attributionKeys.slice(0, toRemove).forEach((key) => {\n this.remove(key);\n });\n\n this.logger.info(`Cleaned up ${toRemove} old attribution records`);\n }\n } catch (error) {\n this.logger.error(\"Error during quota cleanup:\", error);\n }\n }\n}\n\n// IndexedDB implementation\nexport class IndexedDBManager {\n private dbName: string = \"attribution_events\";\n private dbVersion: number = 1;\n private storeName: string = \"events\";\n private logger: LoggerInterface;\n private db: IDBDatabase | null = null;\n\n constructor(logger: LoggerInterface) {\n this.logger = logger;\n }\n\n async init(): Promise<void> {\n if (!isIndexedDBSupported()) {\n this.logger.warn(\"IndexedDB not supported\");\n return;\n }\n\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(this.dbName, this.dbVersion);\n\n request.onerror = () => {\n this.logger.error(\"Failed to open IndexedDB:\", request.error);\n reject(request.error);\n };\n\n request.onsuccess = () => {\n this.db = request.result;\n this.logger.info(\"IndexedDB initialized successfully\");\n resolve();\n };\n\n request.onupgradeneeded = (event) => {\n const db = (event.target as IDBOpenDBRequest).result;\n\n if (!db.objectStoreNames.contains(this.storeName)) {\n const store = db.createObjectStore(this.storeName, {\n keyPath: \"id\",\n autoIncrement: true,\n });\n store.createIndex(\"timestamp\", \"timestamp\", { unique: false });\n store.createIndex(\"sent\", \"sent\", { unique: false });\n store.createIndex(\"queued_at\", \"queued_at\", { unique: false });\n }\n };\n });\n }\n\n async addEvent(event: EventData): Promise<void> {\n if (!this.db) {\n throw new Error(\"IndexedDB not initialized\");\n }\n\n return new Promise((resolve, reject) => {\n const transaction = this.db!.transaction([this.storeName], \"readwrite\");\n const store = transaction.objectStore(this.storeName);\n\n const eventRecord = {\n ...event,\n queued_at: Date.now(),\n sent: false,\n };\n\n const request = store.add(eventRecord);\n\n request.onsuccess = () => {\n this.logger.debug(\"Event added to IndexedDB queue\");\n resolve();\n };\n\n request.onerror = () => {\n this.logger.error(\"Failed to add event to IndexedDB:\", request.error);\n reject(request.error);\n };\n });\n }\n\n async getUnsentEvents(limit: number = 100): Promise<EventData[]> {\n if (!this.db) {\n return [];\n }\n\n return new Promise((resolve, reject) => {\n const transaction = this.db!.transaction([this.storeName], \"readonly\");\n const store = transaction.objectStore(this.storeName);\n const index = store.index(\"sent\");\n\n const request = index.getAll(IDBKeyRange.only(false), limit);\n\n request.onsuccess = () => {\n const events = request.result.map((record: any) => {\n const { queued_at, sent, ...event } = record;\n return event;\n });\n resolve(events);\n };\n\n request.onerror = () => {\n this.logger.error(\"Failed to get unsent events:\", request.error);\n reject(request.error);\n };\n });\n }\n\n async markEventsAsSent(eventIds: string[]): Promise<void> {\n if (!this.db || eventIds.length === 0) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const transaction = this.db!.transaction([this.storeName], \"readwrite\");\n const store = transaction.objectStore(this.storeName);\n\n let completed = 0;\n let hasError = false;\n\n eventIds.forEach((eventId) => {\n const getRequest = store.get(eventId);\n\n getRequest.onsuccess = () => {\n if (getRequest.result) {\n const record = { ...getRequest.result, sent: true };\n const putRequest = store.put(record);\n\n putRequest.onsuccess = () => {\n completed++;\n if (completed === eventIds.length && !hasError) {\n resolve();\n }\n };\n\n putRequest.onerror = () => {\n hasError = true;\n this.logger.error(\n \"Failed to mark event as sent:\",\n putRequest.error\n );\n reject(putRequest.error);\n };\n } else {\n completed++;\n if (completed === eventIds.length && !hasError) {\n resolve();\n }\n }\n };\n\n getRequest.onerror = () => {\n hasError = true;\n this.logger.error(\n \"Failed to get event for marking as sent:\",\n getRequest.error\n );\n reject(getRequest.error);\n };\n });\n });\n }\n\n async cleanupOldEvents(\n maxAge: number = 7 * 24 * 60 * 60 * 1000\n ): Promise<void> {\n if (!this.db) {\n return;\n }\n\n const cutoffTime = Date.now() - maxAge;\n\n return new Promise((resolve, reject) => {\n const transaction = this.db!.transaction([this.storeName], \"readwrite\");\n const store = transaction.objectStore(this.storeName);\n const index = store.index(\"queued_at\");\n\n const request = index.openCursor(IDBKeyRange.upperBound(cutoffTime));\n\n request.onsuccess = () => {\n const cursor = request.result;\n if (cursor) {\n cursor.delete();\n cursor.continue();\n } else {\n this.logger.info(\"Old events cleanup completed\");\n resolve();\n }\n };\n\n request.onerror = () => {\n this.logger.error(\"Failed to cleanup old events:\", request.error);\n reject(request.error);\n };\n });\n }\n\n async getQueueSize(): Promise<number> {\n if (!this.db) {\n return 0;\n }\n\n return new Promise((resolve, reject) => {\n const transaction = this.db!.transaction([this.storeName], \"readonly\");\n const store = transaction.objectStore(this.storeName);\n const request = store.count();\n\n request.onsuccess = () => {\n resolve(request.result);\n };\n\n request.onerror = () => {\n this.logger.error(\"Failed to get queue size:\", request.error);\n reject(request.error);\n };\n });\n }\n\n async clear(): Promise<void> {\n if (!this.db) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const transaction = this.db!.transaction([this.storeName], \"readwrite\");\n const store = transaction.objectStore(this.storeName);\n const request = store.clear();\n\n request.onsuccess = () => {\n this.logger.info(\"IndexedDB queue cleared\");\n resolve();\n };\n\n request.onerror = () => {\n this.logger.error(\"Failed to clear IndexedDB queue:\", request.error);\n reject(request.error);\n };\n });\n }\n}\n\n// Attribution storage manager\nexport class AttributionStorageManager {\n private localStorage: LocalStorageManager;\n private indexedDB: IndexedDBManager;\n private logger: LoggerInterface;\n private readonly UTM_STORAGE_KEY = \"attribution_utm_data\";\n private readonly SESSION_STORAGE_KEY = \"attribution_session\";\n\n constructor(logger: LoggerInterface) {\n this.logger = logger;\n this.localStorage = new LocalStorageManager(logger);\n this.indexedDB = new IndexedDBManager(logger);\n }\n\n async init(): Promise<void> {\n await this.indexedDB.init();\n }\n\n // UTM data management\n storeUTMData(utmData: Partial<AttributionData>): void {\n try {\n const existingData = this.getUTMData();\n\n // Create default UTM data if none exists\n const defaultUTMData: UTMData = {\n utm_source: \"\",\n utm_medium: \"\",\n utm_campaign: \"\",\n utm_term: \"\",\n utm_content: \"\",\n timestamp: Date.now(),\n };\n\n const newData: AttributionData = {\n firstTouch: existingData?.firstTouch || defaultUTMData,\n lastTouch: existingData?.lastTouch || defaultUTMData,\n touchpoints: existingData?.touchpoints || [],\n ...utmData,\n expiresAt: Date.now() + 30 * 24 * 60 * 60 * 1000, // 30 days\n };\n\n this.localStorage.set(this.UTM_STORAGE_KEY, newData);\n this.logger.debug(\"UTM data stored successfully:\", {\n firstTouch: newData.firstTouch,\n lastTouch: newData.lastTouch,\n touchpointsCount: newData.touchpoints.length,\n expiresAt: new Date(newData.expiresAt).toISOString(),\n });\n } catch (error) {\n this.logger.error(\"Failed to store UTM data:\", error);\n }\n }\n\n getUTMData(): AttributionData | null {\n const data = this.localStorage.get(this.UTM_STORAGE_KEY);\n if (data && data.expiresAt && data.expiresAt > Date.now()) {\n return data;\n }\n\n // Clean up expired data\n if (data) {\n this.localStorage.remove(this.UTM_STORAGE_KEY);\n }\n\n return null;\n }\n\n // Session management\n storeSession(session: any): void {\n this.localStorage.set(this.SESSION_STORAGE_KEY, session);\n }\n\n getSession(): any {\n return this.localStorage.get(this.SESSION_STORAGE_KEY);\n }\n\n // Event queue management\n async queueEvent(event: EventData): Promise<void> {\n try {\n await this.indexedDB.addEvent(event);\n } catch (error) {\n this.logger.error(\"Failed to queue event:\", error);\n throw error;\n }\n }\n\n async getUnsentEvents(limit: number = 100): Promise<EventData[]> {\n return await this.indexedDB.getUnsentEvents(limit);\n }\n\n async markEventsAsSent(eventIds: string[]): Promise<void> {\n await this.indexedDB.markEventsAsSent(eventIds);\n }\n\n async getQueueSize(): Promise<number> {\n return await this.indexedDB.getQueueSize();\n }\n\n async cleanupOldEvents(): Promise<void> {\n await this.indexedDB.cleanupOldEvents();\n }\n\n async clearQueue(): Promise<void> {\n await this.indexedDB.clear();\n }\n\n // Cleanup expired data\n cleanupExpiredData(): void {\n this.getUTMData(); // This will automatically clean up expired UTM data\n }\n}\n","/**\r\n * SDK Version\r\n * This version should match the version in package.json\r\n */\r\nexport const SDK_VERSION = \"2.0.0\";\r\n","import {\n QueueInterface,\n EventData,\n BatchEventRequest,\n LoggerInterface,\n IMMEDIATE_EVENTS,\n} from \"../types\";\nimport { retry, debounce, getTimestamp } from \"../utils\";\nimport { SDK_VERSION } from \"../version\";\n\nexport class EventQueueManager implements QueueInterface {\n private queue: EventData[] = [];\n private processing: boolean = false;\n private batchTimer: ReturnType<typeof setTimeout> | null = null;\n private logger: LoggerInterface;\n private apiKey: string;\n private apiEndpoint: string;\n private batchSize: number;\n private batchInterval: number;\n private maxRetries: number;\n private retryDelay: number;\n private sendEvents: (events: EventData[]) => Promise<void>;\n\n constructor(\n logger: LoggerInterface,\n apiKey: string,\n apiEndpoint: string,\n batchSize: number = 100,\n batchInterval: number = 2000,\n maxRetries: number = 3,\n retryDelay: number = 1000,\n sendEvents: (events: EventData[]) => Promise<void>\n ) {\n this.logger = logger;\n this.apiKey = apiKey;\n this.apiEndpoint = apiEndpoint;\n this.batchSize = batchSize;\n this.batchInterval = batchInterval;\n this.maxRetries = maxRetries;\n this.retryDelay = retryDelay;\n this.sendEvents = sendEvents;\n\n // Debounced process function to avoid excessive calls\n this.debouncedProcess = debounce(this.process.bind(this), 100);\n }\n\n add(event: EventData): void {\n this.queue.push(event);\n this.logger.debug(`Event added to queue: ${event.event_type}`);\n\n // Check if this is an immediate event\n if (IMMEDIATE_EVENTS.includes(event.event_type)) {\n this.logger.debug(\n `Immediate event detected: ${event.event_type}, processing immediately`\n );\n this.processImmediate(event);\n } else {\n // Schedule batch processing\n this.scheduleBatchProcessing();\n }\n }\n\n async process(): Promise<void> {\n if (this.processing || this.queue.length === 0) {\n return;\n }\n\n this.processing = true;\n\n try {\n const eventsToProcess = this.queue.splice(0, this.batchSize);\n this.logger.debug(\n `Processing ${eventsToProcess.length} events from queue`\n );\n\n const result = await this.sendEvents(eventsToProcess);\n\n this.logger.info(\n `Successfully processed ${eventsToProcess.length} events`\n );\n\n // Events are automatically removed from queue when successfully sent\n // No need to manually clean up as they were already spliced from the queue\n } catch (error) {\n this.logger.error(\"Failed to process events:\", error);\n\n // Put events back in queue for retry\n const failedEvents = this.queue.splice(0, this.batchSize);\n this.queue.unshift(...failedEvents);\n\n // Schedule retry\n setTimeout(() => {\n this.processing = false;\n this.debouncedProcess();\n }, this.retryDelay);\n\n return;\n }\n\n this.processing = false;\n\n // Process remaining events if any\n if (this.queue.length > 0) {\n this.debouncedProcess();\n }\n }\n\n private async processImmediate(event: EventData): Promise<void> {\n try {\n this.logger.debug(`Processing immediate event: ${event.event_type}`);\n await this.sendEvents([event]);\n this.logger.info(\n `Immediate event processed successfully: ${event.event_type}`\n );\n // Event is automatically removed from queue when successfully sent\n } catch (error) {\n this.logger.error(\n `Failed to process immediate event: ${event.event_type}`,\n error\n );\n\n // Add to queue for retry\n this.queue.unshift(event);\n }\n }\n\n private scheduleBatchProcessing(): void {\n if (this.batchTimer) {\n clearTimeout(this.batchTimer);\n }\n\n this.batchTimer = setTimeout(() => {\n this.debouncedProcess();\n }, this.batchInterval);\n }\n\n clear(): void {\n this.queue = [];\n if (this.batchTimer) {\n clearTimeout(this.batchTimer);\n this.batchTimer = null;\n }\n this.processing = false;\n this.logger.info(\"Event queue cleared\");\n }\n\n size(): number {\n return this.queue.length;\n }\n\n // Get queue statistics\n getStats(): { size: number; processing: boolean } {\n return {\n size: this.queue.length,\n processing: this.processing,\n };\n }\n\n // Force process all events in queue\n async flush(): Promise<void> {\n this.logger.info(\"Flushing event queue\");\n while (this.queue.length > 0) {\n await this.process();\n }\n }\n\n // Debounced process function\n private debouncedProcess: () => void;\n}\n\n// HTTP client for sending events\nexport class EventHttpClient {\n private logger: LoggerInterface;\n private apiKey: string;\n private apiEndpoint: string;\n private maxRetries: number;\n private retryDelay: number;\n\n constructor(\n logger: LoggerInterface,\n apiKey: string,\n apiEndpoint: string,\n maxRetries: number = 3,\n retryDelay: number = 1000\n ) {\n this.logger = logger;\n this.apiKey = apiKey;\n this.apiEndpoint = apiEndpoint;\n this.maxRetries = maxRetries;\n this.retryDelay = retryDelay;\n }\n\n async sendEvents(events: EventData[]): Promise<void> {\n if (events.length === 0) {\n return;\n }\n\n // Transform events to match server format\n const transformedEvents = events.map((event) => ({\n event_id: event.event_id,\n event_type: event.event_type,\n tracking_user_id: event.tracking_user_id,\n utm_source: event.utm_source || null,\n utm_medium: event.utm_medium || null,\n utm_campaign: event.utm_campaign || null,\n utm_term: event.utm_term || null,\n utm_content: event.utm_content || null,\n revenue: event.revenue || null,\n currency: event.currency || null,\n event_data: event.event_data || null,\n context: event.context || null,\n timestamp: event.timestamp || getTimestamp(), // Convert to seconds\n }));\n\n const batchRequest: BatchEventRequest = {\n events: transformedEvents,\n sdk_version: SDK_VERSION,\n };\n\n await retry(\n async () => {\n const response = await fetch(`${this.apiEndpoint}/attribution/events`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify(batchRequest),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`HTTP ${response.status}: ${errorText}`);\n }\n\n const result = await response.json();\n this.logger.debug(\"Events sent successfully:\", result);\n\n // Return the sent events for cleanup\n return { result, sentEvents: events };\n },\n this.maxRetries,\n this.retryDelay\n );\n }\n\n async sendSingleEvent(event: EventData): Promise<void> {\n await this.sendEvents([event]);\n }\n\n // Test connection\n async testConnection(): Promise<boolean> {\n try {\n const response = await fetch(`${this.apiEndpoint}/health`, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n },\n });\n\n return response.ok;\n } catch (error) {\n this.logger.error(\"Connection test failed:\", error);\n return false;\n }\n }\n}\n\n// Memory queue fallback\nexport class MemoryQueueManager implements QueueInterface {\n private queue: EventData[] = [];\n private maxSize: number;\n private logger: LoggerInterface;\n\n constructor(logger: LoggerInterface, maxSize: number = 1000) {\n this.logger = logger;\n this.maxSize = maxSize;\n }\n\n add(event: EventData): void {\n if (this.queue.length >= this.maxSize) {\n this.logger.warn(\"Memory queue full, removing oldest event\");\n this.queue.shift();\n }\n\n this.queue.push(event);\n this.logger.debug(`Event added to memory queue: ${event.event_type}`);\n }\n\n async process(): Promise<void> {\n // Memory queue doesn't process automatically\n // Events are stored in memory only\n this.logger.debug(\"Memory queue process called (no-op)\");\n }\n\n clear(): void {\n this.queue = [];\n this.logger.info(\"Memory queue cleared\");\n }\n\n size(): number {\n return this.queue.length;\n }\n\n // Get all events from memory queue\n getAllEvents(): EventData[] {\n return [...this.queue];\n }\n\n // Remove events from memory queue\n removeEvents(eventIds: string[]): void {\n this.queue = this.queue.filter(\n (event) => !eventIds.includes(event.event_id)\n );\n }\n}\n","import {\n SDKConfig,\n EventData,\n EventType,\n AttributionData,\n UTMData,\n Currency,\n UserSession,\n IMMEDIATE_EVENTS,\n defaultEndpoint,\n} from \"../types\";\nimport { AttributionStorageManager } from \"../storage\";\nimport { EventQueueManager, EventHttpClient } from \"../queue\";\nimport {\n generateId,\n getTimestamp,\n extractUTMParams,\n getCurrentUrl,\n getReferrer,\n getUserAgent,\n getPageTitle,\n generateSessionId,\n isOnline,\n ConsoleLogger,\n addUTMToURL,\n shouldExcludeDomain,\n isExternalURL,\n filterUTMParams,\n cleanURL,\n getQueryString,\n getQueryParams,\n} from \"../utils\";\n\nexport class AttributionSDK {\n private config: SDKConfig;\n private logger: ConsoleLogger;\n private storage: AttributionStorageManager;\n private httpClient: EventHttpClient;\n private queue: EventQueueManager;\n private session: UserSession | null = null;\n private initialized: boolean = false;\n private autoTrackEnabled: boolean = false;\n private pageViewTrackTimes: Map<string, number> = new Map();\n // SPA tracking internals\n private spaTrackingEnabled: boolean = false;\n private lastTrackedPath: string = \"\";\n private originalPushState: typeof history.pushState | null = null;\n private originalReplaceState: typeof history.replaceState | null = null;\n private popstateHandler: ((event: PopStateEvent) => void) | null = null;\n\n constructor(config: SDKConfig) {\n this.config = {\n apiEndpoint: defaultEndpoint,\n batchSize: 100,\n batchInterval: 2000,\n maxRetries: 3,\n retryDelay: 1000,\n enableDebug: false,\n autoTrack: false,\n autoTrackPageView: false,\n sessionTimeout: 30 * 60 * 1000, // 30 minutes\n enableCrossDomainUTM: true,\n crossDomainUTMParams: [\n \"utm_source\",\n \"utm_medium\",\n \"utm_campaign\",\n \"utm_term\",\n \"utm_content\",\n ],\n excludeDomains: [],\n autoCleanUTM: true,\n pageViewDebounceInterval: 5000, // 5 seconds default\n ...config,\n };\n\n this.logger = new ConsoleLogger(this.config.enableDebug);\n this.storage = new AttributionStorageManager(this.logger);\n this.httpClient = new EventHttpClient(\n this.logger,\n this.config.apiKey,\n this.config.apiEndpoint || defaultEndpoint,\n this.config.maxRetries,\n this.config.retryDelay\n );\n\n this.queue = new EventQueueManager(\n this.logger,\n this.config.apiKey,\n this.config.apiEndpoint || defaultEndpoint,\n this.config.batchSize,\n this.config.batchInterval,\n this.config.maxRetries,\n this.config.retryDelay,\n (events) => this.httpClient.sendEvents(events)\n );\n }\n\n async init(): Promise<void> {\n if (this.initialized) {\n this.logger.warn(\"SDK already initialized\");\n return;\n }\n\n try {\n this.logger.info(\"Initializing GetuAI Attribution SDK\");\n\n // Initialize storage\n await this.storage.init();\n\n // Initialize session\n this.initializeSession();\n\n // Extract and store UTM data from current URL\n this.extractAndStoreUTMData();\n\n // Setup auto-tracking if enabled\n if (this.config.autoTrack) {\n this.setupAutoTracking();\n }\n\n // Setup online/offline handlers\n this.setupNetworkHandlers();\n\n // Setup page visibility handlers\n this.setupVisibilityHandlers();\n\n // Setup beforeunload handler\n this.setupBeforeUnloadHandler();\n\n this.initialized = true;\n this.logger.info(\"🚀 GetuAI Attribution SDK initialized successfully\");\n this.logger.info(\n \"📄 Auto track page view = \" + this.config.autoTrackPageView\n );\n\n // Auto track page view if enabled (independent from autoTrack)\n // Also enables SPA route tracking automatically\n if (this.config.autoTrackPageView) {\n this.logger.info(\n \"📄 Auto track page view enabled (including SPA route tracking)\"\n );\n // Record the initial path for SPA tracking\n this.lastTrackedPath = this.getCurrentPath();\n\n // Setup SPA tracking for route changes\n this.setupSPATracking();\n\n setTimeout(() => {\n // Fire asynchronously; do not block initialization\n this.trackPageView()\n .then(() => {\n this.logger.info(\"✅ Auto track page view completed\");\n })\n .catch((error) =>\n this.logger.error(\"❌ Auto track page view failed:\", error)\n );\n }, 100);\n }\n } catch (error) {\n this.logger.error(\"Failed to initialize SDK:\", error);\n throw error;\n }\n }\n\n // Track custom event\n async trackEvent(\n eventType: EventType,\n eventData?: Record<string, any>,\n tracking_user_id?: string,\n revenue?: number,\n currency: Currency = Currency.USD\n ): Promise<void> {\n if (!this.initialized) {\n this.logger.warn(\"SDK not initialized, event not tracked\");\n return;\n }\n\n try {\n const currentUrl = getCurrentUrl();\n // Try to fetch public IP (best-effort)\n let ip_address: string | null = null;\n try {\n ip_address = await this.fetchPublicIP();\n } catch (e) {\n // ignore\n }\n\n const pageContext = {\n domain: typeof window !== \"undefined\" ? window.location.hostname : null,\n path: typeof window !== \"undefined\" ? window.location.pathname : null,\n title: getPageTitle(),\n referrer: getReferrer(),\n url: currentUrl.split(\"?\")[0],\n querystring: getQueryString(currentUrl),\n query_params: getQueryParams(currentUrl),\n ip_address: ip_address,\n };\n const sessionContext = {\n session_id: this.session?.sessionId,\n start_time: this.session?.startTime,\n last_activity: this.session?.lastActivity,\n page_views: this.session?.pageViews,\n };\n const event: EventData = {\n event_id: generateId(),\n event_type: eventType,\n tracking_user_id: tracking_user_id,\n timestamp: getTimestamp(),\n event_data: eventData,\n context: { page: pageContext, session: sessionContext },\n revenue: revenue,\n currency: currency,\n ...this.getUTMParams(),\n };\n\n this.logger.debug(`Tracking event: ${eventType}`, event);\n\n // Add to queue\n this.queue.add(event);\n } catch (error) {\n this.logger.error(`Failed to track event ${eventType}:`, error);\n }\n }\n\n // Track page view\n async trackPageView(\n pageData?: Record<string, any>,\n tracking_user_id?: string\n ): Promise<void> {\n const currentUrl = getCurrentUrl();\n // Use URL without query string as key for debouncing\n const pageKey = currentUrl.split(\"?\")[0];\n const now = Date.now();\n const debounceInterval = this.config.pageViewDebounceInterval || 5000;\n\n // Check if this page was tracked recently\n const lastTrackTime = this.pageViewTrackTimes.get(pageKey);\n if (lastTrackTime && now - lastTrackTime < debounceInterval) {\n this.logger.debug(\n `Page view debounced: ${pageKey} (last tracked ${\n now - lastTrackTime\n }ms ago)`\n );\n return;\n }\n\n const pageEventData = {\n url: currentUrl,\n title: getPageTitle(),\n referrer: getReferrer(),\n user_agent: getUserAgent(),\n ...pageData,\n };\n\n await this.trackEvent(EventType.PAGE_VIEW, pageEventData, tracking_user_id);\n\n // Update last track time for this page\n this.pageViewTrackTimes.set(pageKey, now);\n\n // Clean up old entries to prevent memory leak (keep only entries from last hour)\n this.cleanupPageViewTrackTimes();\n }\n\n // Clean up old page view track times to prevent memory leak\n private cleanupPageViewTrackTimes(): void {\n const oneHourAgo = Date.now() - 60 * 60 * 1000;\n for (const [pageKey, trackTime] of this.pageViewTrackTimes.entries()) {\n if (trackTime < oneHourAgo) {\n this.pageViewTrackTimes.delete(pageKey);\n }\n }\n }\n\n // Best-effort fetch of public IP address\n private async fetchPublicIP(): Promise<string | null> {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 2000);\n const response = await fetch(\"https://api.ipify.org?format=json\", {\n signal: controller.signal,\n headers: { Accept: \"application/json\" },\n });\n clearTimeout(timeout);\n if (!response.ok) {\n return null;\n }\n const data = await response.json();\n const ip = typeof data?.ip === \"string\" ? data.ip : null;\n return ip;\n } catch (error) {\n this.logger.debug(\"Public IP fetch failed\", error);\n return null;\n }\n }\n\n // Track purchase\n async trackPurchase(\n tracking_user_id: string,\n revenue: number,\n currency: Currency = Currency.USD,\n purchaseData?: Record<string, any>\n ): Promise<void> {\n await this.trackEvent(\n EventType.PURCHASE,\n purchaseData,\n tracking_user_id,\n revenue,\n currency\n );\n }\n\n // Track login\n async trackLogin(\n tracking_user_id: string,\n loginData?: Record<string, any>\n ): Promise<void> {\n await this.trackEvent(EventType.LOGIN, loginData, tracking_user_id);\n }\n\n // Track signup\n async trackSignup(\n tracking_user_id: string,\n signupData?: Record<string, any>\n ): Promise<void> {\n await this.trackEvent(EventType.SIGNUP, signupData, tracking_user_id);\n }\n\n // Track form submission\n async trackFormSubmit(\n tracking_user_id?: string,\n formData?: Record<string, any>\n ): Promise<void> {\n await this.trackEvent(EventType.FORM_SUBMIT, formData, tracking_user_id);\n }\n\n // Track video play\n async trackVideoPlay(\n tracking_user_id?: string,\n videoData?: Record<string, any>\n ): Promise<void> {\n await this.trackEvent(EventType.VIDEO_PLAY, videoData, tracking_user_id);\n }\n\n // Track email verification\n async trackEmailVerification(\n tracking_user_id: string,\n verificationData?: Record<string, any>\n ): Promise<void> {\n await this.trackEvent(\n EventType.EMAIL_VERIFICATION,\n verificationData,\n tracking_user_id\n );\n }\n\n // Track product view\n async trackProductView(\n tracking_user_id?: string,\n productData?: Record<string, any>\n ): Promise<void> {\n await this.trackEvent(\n EventType.PRODUCT_VIEW,\n productData,\n tracking_user_id\n );\n }\n\n // Track add to cart\n async trackAddToCart(\n tracking_user_id?: string,\n cartData?: Record<string, any>\n ): Promise<void> {\n await this.trackEvent(EventType.ADD_TO_CART, cartData, tracking_user_id);\n }\n\n // Track page click for user click journey\n async trackPageClick(\n tracking_user_id?: string,\n clickData?: Record<string, any>\n ): Promise<void> {\n await this.trackEvent(EventType.PAGE_CLICK, clickData, tracking_user_id);\n }\n\n // Get attribution data\n getAttributionData(): AttributionData | null {\n return this.storage.getUTMData();\n }\n\n // Manually add UTM parameters to a URL\n addUTMToURL(url: string): string {\n if (!this.config.enableCrossDomainUTM) {\n return url;\n }\n\n const attributionData = this.getAttributionData();\n if (!attributionData) {\n return url;\n }\n\n const utmParams = filterUTMParams(\n attributionData.lastTouch,\n this.config.crossDomainUTMParams\n );\n\n return addUTMToURL(url, utmParams);\n }\n\n // Get current UTM parameters as object\n getCurrentUTMParams(): Record<string, string> {\n const attributionData = this.getAttributionData();\n if (!attributionData) {\n return {};\n }\n\n return filterUTMParams(\n attributionData.lastTouch,\n this.config.crossDomainUTMParams\n );\n }\n\n // Get UTM parameters for events\n private getUTMParams(): Partial<UTMData> {\n const attributionData = this.getAttributionData();\n if (!attributionData) {\n this.logger.debug(\"No attribution data available for UTM params\");\n return {};\n }\n\n const utmParams = {\n utm_source: attributionData.lastTouch.utm_source || null,\n utm_medium: attributionData.lastTouch.utm_medium || null,\n utm_campaign: attributionData.lastTouch.utm_campaign || null,\n utm_term: attributionData.lastTouch.utm_term || null,\n utm_content: attributionData.lastTouch.utm_content || null,\n };\n\n // Filter out empty values and return null for empty strings\n const filteredParams: Partial<UTMData> = {};\n if (utmParams.utm_source && utmParams.utm_source.trim() !== \"\") {\n filteredParams.utm_source = utmParams.utm_source;\n } else {\n filteredParams.utm_source = null;\n }\n if (utmParams.utm_medium && utmParams.utm_medium.trim() !== \"\") {\n filteredParams.utm_medium = utmParams.utm_medium;\n } else {\n filteredParams.utm_medium = null;\n }\n if (utmParams.utm_campaign && utmParams.utm_campaign.trim() !== \"\") {\n filteredParams.utm_campaign = utmParams.utm_campaign;\n } else {\n filteredParams.utm_campaign = null;\n }\n if (utmParams.utm_term && utmParams.utm_term.trim() !== \"\") {\n filteredParams.utm_term = utmParams.utm_term;\n } else {\n filteredParams.utm_term = null;\n }\n if (utmParams.utm_content && utmParams.utm_content.trim() !== \"\") {\n filteredParams.utm_content = utmParams.utm_content;\n } else {\n filteredParams.utm_content = null;\n }\n\n this.logger.debug(\"UTM params for event:\", filteredParams);\n return filteredParams;\n }\n\n // Initialize user session\n private initializeSession(): void {\n const existingSession = this.storage.getSession();\n const now = Date.now();\n\n if (\n existingSession &&\n now - existingSession.lastActivity < this.config.sessionTimeout!\n ) {\n // Extend existing session\n this.session = {\n ...existingSession,\n lastActivity: now,\n };\n } else {\n // Create new session\n this.session = {\n sessionId: generateSessionId(),\n startTime: now,\n lastActivity: now,\n pageViews: 0,\n };\n }\n\n this.storage.storeSession(this.session);\n this.logger.debug(\"Session initialized:\", this.session);\n }\n\n // Extract and store UTM data from current URL\n private extractAndStoreUTMData(): void {\n const currentUrl = getCurrentUrl();\n const utmParams = extractUTMParams(currentUrl);\n\n this.logger.debug(\"Extracting UTM params from URL:\", currentUrl);\n this.logger.debug(\"Found UTM params:\", utmParams);\n\n if (Object.keys(utmParams).length === 0) {\n this.logger.debug(\"No UTM parameters found in URL\");\n return;\n }\n\n const utmData: UTMData = {\n utm_source: utmParams.utm_source || \"\",\n utm_medium: utmParams.utm_medium || \"\",\n utm_campaign: utmParams.utm_campaign || \"\",\n utm_term: utmParams.utm_term || \"\",\n utm_content: utmParams.utm_content || \"\",\n timestamp: Date.now(),\n };\n\n const existingData = this.getAttributionData();\n const newData: AttributionData = {\n firstTouch: existingData?.firstTouch || utmData,\n lastTouch: utmData,\n touchpoints: existingData?.touchpoints || [],\n expiresAt: Date.now() + 30 * 24 * 60 * 60 * 1000, // 30 days\n };\n\n // Add to touchpoints if different from last touch\n if (\n !existingData ||\n existingData.lastTouch.utm_source !== utmData.utm_source ||\n existingData.lastTouch.utm_campaign !== utmData.utm_campaign\n ) {\n newData.touchpoints.push(utmData);\n }\n\n this.storage.storeUTMData(newData);\n this.logger.info(\"UTM data extracted and stored successfully:\", utmData);\n\n // Clean URL after storing UTM data to avoid displaying parameters in plain text\n if (this.config.autoCleanUTM) {\n cleanURL();\n }\n }\n\n // Setup auto-tracking\n private setupAutoTracking(): void {\n this.autoTrackEnabled = true;\n\n // Track form interactions\n this.setupFormTracking();\n\n // Track link clicks\n this.setupLinkTracking();\n\n this.logger.info(\"Auto-tracking enabled\");\n }\n\n // Setup form tracking\n private setupFormTracking(): void {\n document.addEventListener(\"submit\", (event) => {\n try {\n const form = event.target as HTMLFormElement;\n if (!form) {\n return;\n }\n\n const fieldValues = this.serializeFormFields(form);\n\n this.trackEvent(EventType.FORM_SUBMIT, {\n ...fieldValues,\n form_id: form.id || form.name,\n form_action: form.action,\n form_method: form.method,\n });\n } catch (error) {\n this.logger.error(\"Failed to auto-track form submit:\", error);\n }\n });\n }\n\n // Serialize all fields within a form to a flat key-value map\n private serializeFormFields(form: HTMLFormElement): Record<string, any> {\n const result: Record<string, any> = {};\n\n try {\n const formData = new FormData(form);\n // Accumulate multiple values for the same name as arrays\n for (const [name, value] of formData.entries()) {\n const serializedValue = this.serializeFormValue(value);\n\n if (Object.prototype.hasOwnProperty.call(result, name)) {\n const existing = result[name];\n if (Array.isArray(existing)) {\n existing.push(serializedValue);\n result[name] = existing;\n } else {\n result[name] = [existing, serializedValue];\n }\n } else {\n result[name] = serializedValue;\n }\n }\n\n // Ensure all named fields are represented, including unchecked radios/checkboxes\n const elements = Array.from(form.elements) as Array<\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n >;\n\n // Group elements by name\n const nameToElements = new Map<\n string,\n Array<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>\n >();\n for (const el of elements) {\n const name = (el as HTMLInputElement | HTMLSelectElement).name;\n if (!name || (el as any).disabled) continue;\n if (!nameToElements.has(name)) nameToElements.set(name, []);\n nameToElements.get(name)!.push(el);\n }\n\n nameToElements.forEach((els, name) => {\n // Determine the dominant type for a group (radio/checkbox take precedence)\n const hasRadio = els.some(\n (e) => (e as HTMLInputElement).type === \"radio\"\n );\n const hasCheckbox = els.some(\n (e) => (e as HTMLInputElement).type === \"checkbox\"\n );\n const hasFile = els.some(\n (e) => (e as HTMLInputElement).type === \"file\"\n );\n const hasSelectMultiple = els.some(\n (e) => e.tagName === \"SELECT\" && (e as HTMLSelectElement).multiple\n );\n const hasPassword = els.some(\n (e) => (e as HTMLInputElement).type === \"password\"\n );\n\n if (hasCheckbox) {\n const checkedValues = (els as HTMLInputElement[])\n .filter((e) => e.type === \"checkbox\")\n .filter((e) => e.checked)\n .map((e) => e.value || \"on\");\n if (!Object.prototype.hasOwnProperty.call(result, name)) {\n result[name] = checkedValues; // [] when none checked\n } else if (!Array.isArray(result[name])) {\n result[name] = [result[name], ...checkedValues];\n }\n return;\n }\n\n if (hasRadio) {\n const checked = (els as HTMLInputElement[])\n .filter((e) => e.type === \"radio\")\n .find((e) => e.checked);\n if (!Object.prototype.hasOwnProperty.call(result, name)) {\n result[name] = checked ? checked.value : null;\n }\n return;\n }\n\n if (hasSelectMultiple) {\n const select = els.find(\n (e) => e.tagName === \"SELECT\" && (e as HTMLSelectElement).multiple\n ) as HTMLSelectElement | undefined;\n if (select) {\n const selectedValues = Array.from(select.selectedOptions).map(\n (opt) => opt.value\n );\n if (!Object.prototype.hasOwnProperty.call(result, name)) {\n result[name] = selectedValues; // [] when none selected\n }\n return;\n }\n }\n\n if (hasFile) {\n const input = els.find(\n (e) => (e as HTMLInputElement).type === \"file\"\n ) as HTMLInputElement | undefined;\n if (input) {\n const files = input.files ? Array.from(input.files) : [];\n if (!Object.prototype.hasOwnProperty.call(result, name)) {\n result[name] = files.map((f) => this.serializeFormValue(f));\n }\n return;\n }\n }\n\n if (hasPassword) {\n // Mask password fields\n if (Object.prototype.hasOwnProperty.call(result, name)) {\n result[name] =\n typeof result[name] === \"string\" ? \"*****\" : result[name];\n } else {\n result[name] = \"*****\";\n }\n return;\n }\n\n // For other inputs/selects/textarea, ensure at least an entry exists\n if (!Object.prototype.hasOwnProperty.call(result, name)) {\n const first = els[0] as\n | HTMLInputElement\n | HTMLSelectElement\n | HTMLTextAreaElement;\n if (first.tagName === \"SELECT\") {\n const select = first as HTMLSelectElement;\n result[name] = select.multiple\n ? Array.from(select.selectedOptions).map((o) => o.value)\n : select.value;\n } else if ((first as HTMLInputElement).type) {\n result[name] = (first as HTMLInputElement).value ?? \"\";\n } else {\n result[name] = (first as HTMLTextAreaElement).value ?? \"\";\n }\n }\n });\n } catch (error) {\n this.logger.error(\"Failed to serialize form fields:\", error);\n }\n\n return result;\n }\n\n // Convert FormData value to a serializable value\n private serializeFormValue(value: FormDataEntryValue): any {\n if (value instanceof File) {\n return {\n file_name: value.name,\n file_size: value.size,\n file_type: value.type,\n };\n }\n return value;\n }\n\n // Setup link tracking\n private setupLinkTracking(): void {\n document.addEventListener(\"click\", (event) => {\n const target = event.target as HTMLElement;\n const link = target.closest(\"a\");\n\n if (link) {\n const href = link.href;\n const isExternal = isExternalURL(href);\n\n if (isExternal) {\n // Handle cross-domain UTM passing\n this.handleCrossDomainUTM(link, event);\n }\n }\n });\n }\n\n // Handle cross-domain UTM parameter passing\n private handleCrossDomainUTM(link: HTMLAnchorElement, event: Event): void {\n if (!this.config.enableCrossDomainUTM) {\n return;\n }\n\n const href = link.href;\n\n // Check if domain should be excluded\n if (shouldExcludeDomain(href, this.config.excludeDomains)) {\n this.logger.debug(`Domain excluded from UTM passing: ${href}`);\n return;\n }\n\n // Get current UTM data\n const attributionData = this.getAttributionData();\n if (!attributionData) {\n this.logger.debug(\"No UTM data available for cross-domain passing\");\n return;\n }\n\n // Filter UTM parameters based on configuration\n const utmParams = filterUTMParams(\n attributionData.lastTouch,\n this.config.crossDomainUTMParams\n );\n\n if (Object.keys(utmParams).length === 0) {\n this.logger.debug(\"No UTM parameters to pass\");\n return;\n }\n\n // Add UTM parameters to URL\n const enhancedURL = addUTMToURL(href, utmParams);\n\n if (enhancedURL !== href) {\n // Update the link href\n link.href = enhancedURL;\n\n this.logger.debug(\"UTM parameters added to external link:\", {\n original: href,\n enhanced: enhancedURL,\n utmParams,\n });\n\n this.logger.debug(\"Cross-domain UTM passed:\", {\n link_url: enhancedURL,\n original_url: href,\n utm_params_passed: utmParams,\n });\n }\n }\n\n // Setup network handlers\n private setupNetworkHandlers(): void {\n window.addEventListener(\"online\", () => {\n this.logger.info(\"Network connection restored\");\n this.queue.flush();\n });\n\n window.addEventListener(\"offline\", () => {\n this.logger.warn(\"Network connection lost\");\n });\n }\n\n // Setup visibility handlers\n private setupVisibilityHandlers(): void {\n document.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === \"visible\") {\n this.updateSessionActivity();\n }\n });\n }\n\n // Setup beforeunload handler\n private setupBeforeUnloadHandler(): void {\n window.addEventListener(\"beforeunload\", () => {\n this.updateSessionActivity();\n this.queue.flush();\n });\n }\n\n // Get current path (pathname + search) for comparison\n private getCurrentPath(): string {\n if (typeof window === \"undefined\") return \"\";\n return window.location.pathname + window.location.search;\n }\n\n // Setup SPA (Single Page Application) route tracking\n private setupSPATracking(): void {\n if (typeof window === \"undefined\" || typeof history === \"undefined\") {\n this.logger.warn(\"⚠️ SPA tracking not available in this environment\");\n return;\n }\n\n if (this.spaTrackingEnabled) {\n this.logger.warn(\"⚠️ SPA tracking already enabled\");\n return;\n }\n\n this.spaTrackingEnabled = true;\n this.lastTrackedPath = this.getCurrentPath();\n\n // Store original methods\n this.originalPushState = history.pushState.bind(history);\n this.originalReplaceState = history.replaceState.bind(history);\n\n // Create a handler for route changes\n const handleRouteChange = (changeType: string) => {\n const newPath = this.getCurrentPath();\n\n // Only track if path actually changed\n if (newPath === this.lastTrackedPath) {\n this.logger.debug(\n `🔄 [SPA] Route change detected (${changeType}) but path unchanged: ${newPath}`\n );\n return;\n }\n\n this.logger.debug(\n `🔄 [SPA] Route change detected (${changeType}): ${this.lastTrackedPath} -> ${newPath}`\n );\n this.lastTrackedPath = newPath;\n\n // Delay tracking to allow page title and content to update (100ms is sufficient for most frameworks)\n setTimeout(() => {\n this.trackPageView()\n .then(() => {\n this.logger.debug(`✅ [SPA] Page view tracked for: ${newPath}`);\n })\n .catch((error) => {\n this.logger.error(`❌ [SPA] Failed to track page view:`, error);\n });\n }, 100);\n };\n\n // Override history.pushState\n history.pushState = (\n data: any,\n unused: string,\n url?: string | URL | null\n ) => {\n const result = this.originalPushState!(data, unused, url);\n handleRouteChange(\"pushState\");\n return result;\n };\n\n // Override history.replaceState\n history.replaceState = (\n data: any,\n unused: string,\n url?: string | URL | null\n ) => {\n const result = this.originalReplaceState!(data, unused, url);\n handleRouteChange(\"replaceState\");\n return result;\n };\n\n // Listen for popstate (browser back/forward)\n this.popstateHandler = () => {\n handleRouteChange(\"popstate\");\n };\n window.addEventListener(\"popstate\", this.popstateHandler);\n\n this.logger.info(\"🔄 SPA tracking setup completed\");\n }\n\n // Cleanup SPA tracking (restore original methods)\n private cleanupSPATracking(): void {\n if (!this.spaTrackingEnabled) return;\n\n // Restore original history methods\n if (this.originalPushState) {\n history.pushState = this.originalPushState;\n this.originalPushState = null;\n }\n if (this.originalReplaceState) {\n history.replaceState = this.originalReplaceState;\n this.originalReplaceState = null;\n }\n\n // Remove popstate listener\n if (this.popstateHandler) {\n window.removeEventListener(\"popstate\", this.popstateHandler);\n this.popstateHandler = null;\n }\n\n this.spaTrackingEnabled = false;\n this.logger.info(\"🔄 SPA tracking cleaned up\");\n }\n\n // Update session activity\n private updateSessionActivity(): void {\n if (this.session) {\n this.session.lastActivity = Date.now();\n this.storage.storeSession(this.session);\n }\n }\n\n // Flush all pending events\n async flush(): Promise<void> {\n await this.queue.flush();\n }\n\n // Get SDK status\n getStatus(): {\n initialized: boolean;\n session: UserSession | null;\n queueSize: number;\n online: boolean;\n crossDomainUTM: {\n enabled: boolean;\n currentParams: Record<string, string>;\n };\n spaTracking: {\n enabled: boolean;\n currentPath: string;\n };\n } {\n return {\n initialized: this.initialized,\n session: this.session,\n queueSize: this.queue.size(),\n online: isOnline(),\n crossDomainUTM: {\n enabled: this.config.enableCrossDomainUTM || true,\n currentParams: this.getCurrentUTMParams(),\n },\n spaTracking: {\n enabled: this.spaTrackingEnabled,\n currentPath: this.lastTrackedPath,\n },\n };\n }\n\n // Destroy SDK instance\n destroy(): void {\n this.queue.clear();\n this.autoTrackEnabled = false;\n this.cleanupSPATracking();\n this.initialized = false;\n this.logger.info(\"🗑️ SDK destroyed\");\n }\n}\n","import { AttributionSDK } from \"./core/AttributionSDK\";\nimport {\n SDKConfig,\n EventType,\n Currency,\n EventData,\n AttributionData,\n defaultEndpoint,\n} from \"./types\";\n\n// Global SDK instance\nlet globalSDK: AttributionSDK | null = null;\n\n// Auto-initialization function\nfunction autoInit(): void {\n // Check if SDK is already initialized\n if (globalSDK) {\n return;\n }\n\n // Look for configuration in script tag\n const script = document.currentScript as HTMLScriptElement;\n if (!script) {\n console.warn(\n \"GetuAI SDK: Could not find script tag for auto-initialization\"\n );\n return;\n }\n\n const apiKey = script.getAttribute(\"data-api-key\");\n if (!apiKey) {\n console.warn(\n \"GetuAI SDK: No API key provided. Please add data-api-key attribute to script tag.\"\n );\n return;\n }\n const apiEndpoint =\n script.getAttribute(\"data-api-endpoint\") || defaultEndpoint;\n const config: SDKConfig = {\n apiKey,\n apiEndpoint,\n enableDebug: script.getAttribute(\"data-debug\") === \"true\",\n autoTrack: script.getAttribute(\"data-auto-track\") === \"true\",\n autoTrackPageView:\n script.getAttribute(\"data-auto-track-page-view\") === \"true\",\n autoCleanUTM: script.getAttribute(\"data-auto-clean-utm\") !== \"false\",\n batchSize: parseInt(script.getAttribute(\"data-batch-size\") || \"100\"),\n batchInterval: parseInt(\n script.getAttribute(\"data-batch-interval\") || \"2000\"\n ),\n };\n\n // Initialize SDK\n init(config);\n}\n\n// Initialize SDK with configuration\nasync function init(config: SDKConfig): Promise<AttributionSDK> {\n if (globalSDK) {\n console.warn(\"GetuAI SDK: Already initialized\");\n return globalSDK;\n }\n\n try {\n globalSDK = new AttributionSDK(config);\n await globalSDK.init();\n\n // Expose SDK to global scope for debugging\n if (config.enableDebug) {\n (window as any).GetuAISDK = globalSDK;\n }\n\n console.log(\"GetuAI Attribution SDK initialized successfully\");\n\n // Dispatch initialization complete event\n if (typeof window !== \"undefined\") {\n const event = new CustomEvent(\"getuaiSDKReady\", {\n detail: { sdk: globalSDK },\n });\n window.dispatchEvent(event);\n }\n\n return globalSDK;\n } catch (error) {\n console.error(\"GetuAI SDK: Failed to initialize:\", error);\n\n // Dispatch initialization error event\n if (typeof window !== \"undefined\") {\n const event = new CustomEvent(\"getuaiSDKError\", {\n detail: { error },\n });\n window.dispatchEvent(event);\n }\n\n throw error;\n }\n}\n\n// Get current SDK instance\nfunction getSDK(): AttributionSDK | null {\n return globalSDK;\n}\n\n// Wait for SDK to be ready\nfunction waitForSDK(): Promise<AttributionSDK> {\n return new Promise((resolve, reject) => {\n if (globalSDK) {\n resolve(globalSDK);\n return;\n }\n\n // Listen for SDK ready event\n const handleReady = (event: CustomEvent) => {\n window.removeEventListener(\n \"getuaiSDKReady\",\n handleReady as EventListener\n );\n window.removeEventListener(\n \"getuaiSDKError\",\n handleError as EventListener\n );\n resolve(event.detail.sdk);\n };\n\n const handleError = (event: CustomEvent) => {\n window.removeEventListener(\n \"getuaiSDKReady\",\n handleReady as EventListener\n );\n window.removeEventListener(\n \"getuaiSDKError\",\n handleError as EventListener\n );\n reject(event.detail.error);\n };\n\n window.addEventListener(\"getuaiSDKReady\", handleReady as EventListener);\n window.addEventListener(\"getuaiSDKError\", handleError as EventListener);\n\n // Timeout after 10 seconds\n setTimeout(() => {\n window.removeEventListener(\n \"getuaiSDKReady\",\n handleReady as EventListener\n );\n window.removeEventListener(\n \"getuaiSDKError\",\n handleError as EventListener\n );\n reject(new Error(\"SDK initialization timeout\"));\n }, 10000);\n });\n}\n\n// Track event\nasync function trackEvent(\n eventType: EventType,\n eventData?: Record<string, any>,\n tracking_user_id?: string,\n revenue?: number,\n currency: Currency = Currency.USD\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackEvent(\n eventType,\n eventData,\n tracking_user_id,\n revenue,\n currency\n );\n}\n\n// Track page view\nasync function trackPageView(\n pageData?: Record<string, any>,\n tracking_user_id?: string\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackPageView(pageData, tracking_user_id);\n}\n\n// Track purchase\nasync function trackPurchase(\n tracking_user_id: string,\n revenue: number,\n currency: Currency = Currency.USD,\n purchaseData?: Record<string, any>\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackPurchase(tracking_user_id, revenue, currency, purchaseData);\n}\n\n// Track login\nasync function trackLogin(\n tracking_user_id: string,\n loginData?: Record<string, any>\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackLogin(tracking_user_id, loginData);\n}\n\n// Track signup\n\nasync function trackSignup(\n tracking_user_id: string,\n signupData?: Record<string, any>\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackSignup(tracking_user_id, signupData);\n}\n\n// Track form submission\nasync function trackFormSubmit(\n tracking_user_id?: string,\n formData?: Record<string, any>\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackFormSubmit(tracking_user_id, formData);\n}\n\n// Track video play\nasync function trackVideoPlay(\n tracking_user_id?: string,\n videoData?: Record<string, any>\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackVideoPlay(tracking_user_id, videoData);\n}\n\n// Track email verification\nasync function trackEmailVerification(\n tracking_user_id: string,\n verificationData?: Record<string, any>\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackEmailVerification(tracking_user_id, verificationData);\n}\n\n// Track product view\nasync function trackProductView(\n tracking_user_id?: string,\n productData?: Record<string, any>\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackProductView(tracking_user_id, productData);\n}\n\n// Track add to cart\nasync function trackAddToCart(\n tracking_user_id?: string,\n cartData?: Record<string, any>\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackAddToCart(tracking_user_id, cartData);\n}\n\n// Track page click for user click journey\nasync function trackPageClick(\n tracking_user_id?: string,\n clickData?: Record<string, any>\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackPageClick(tracking_user_id, clickData);\n}\n\n// Get attribution data\nfunction getAttributionData() {\n const sdk = getSDK();\n if (!sdk) {\n return null;\n }\n\n return sdk.getAttributionData();\n}\n\n// Flush pending events\nasync function flush(): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.flush();\n}\n\n// Get SDK status\nfunction getStatus() {\n const sdk = getSDK();\n if (!sdk) {\n return null;\n }\n\n return sdk.getStatus();\n}\n\n// Add UTM to URL\nfunction addUTMToURL(url: string): string {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return url;\n }\n\n return sdk.addUTMToURL(url);\n}\n\n// Get current UTM parameters\nfunction getCurrentUTMParams(): Record<string, string> {\n const sdk = getSDK();\n if (!sdk) {\n return {};\n }\n\n return sdk.getCurrentUTMParams();\n}\n\n// Destroy SDK\nfunction destroy(): void {\n if (globalSDK) {\n globalSDK.destroy();\n globalSDK = null;\n console.log(\"GetuAI SDK destroyed\");\n }\n}\n\n// Extend AttributionSDK class with static methods\nclass AttributionSDKStatic extends AttributionSDK {\n // Static method to initialize SDK\n static async init(config: SDKConfig): Promise<AttributionSDK> {\n return await init(config);\n }\n\n // Static method to track event\n static async trackEvent(\n eventType: EventType,\n eventData?: Record<string, any>,\n tracking_user_id?: string,\n revenue?: number,\n currency: Currency = Currency.USD\n ): Promise<void> {\n return await trackEvent(\n eventType,\n eventData,\n tracking_user_id,\n revenue,\n currency\n );\n }\n\n // Static method to track page view\n static async trackPageView(\n pageData?: Record<string, any>,\n tracking_user_id?: string\n ): Promise<void> {\n return await trackPageView(pageData, tracking_user_id);\n }\n\n // Static method to track purchase\n static async trackPurchase(\n tracking_user_id: string,\n revenue: number,\n currency: Currency = Currency.USD,\n purchaseData?: Record<string, any>\n ): Promise<void> {\n return await trackPurchase(\n tracking_user_id,\n revenue,\n currency,\n purchaseData\n );\n }\n\n // Static method to track login\n static async trackLogin(\n tracking_user_id: string,\n loginData?: Record<string, any>\n ): Promise<void> {\n return await trackLogin(tracking_user_id, loginData);\n }\n\n // Static method to track signup\n static async trackSignup(\n tracking_user_id: string,\n signupData?: Record<string, any>\n ): Promise<void> {\n return await trackSignup(tracking_user_id, signupData);\n }\n\n // Static method to track form submission\n static async trackFormSubmit(\n tracking_user_id?: string,\n formData?: Record<string, any>\n ): Promise<void> {\n return await trackFormSubmit(tracking_user_id, formData);\n }\n\n // Static method to track video play\n static async trackVideoPlay(\n tracking_user_id?: string,\n videoData?: Record<string, any>\n ): Promise<void> {\n return await trackVideoPlay(tracking_user_id, videoData);\n }\n\n // Static method to track email verification\n static async trackEmailVerification(\n tracking_user_id: string,\n verificationData?: Record<string, any>\n ): Promise<void> {\n return await trackEmailVerification(tracking_user_id, verificationData);\n }\n\n // Static method to track product view\n static async trackProductView(\n tracking_user_id?: string,\n productData?: Record<string, any>\n ): Promise<void> {\n return await trackProductView(tracking_user_id, productData);\n }\n\n // Static method to track add to cart\n static async trackAddToCart(\n tracking_user_id?: string,\n cartData?: Record<string, any>\n ): Promise<void> {\n return await trackAddToCart(tracking_user_id, cartData);\n }\n\n // Static method to track page click\n static async trackPageClick(\n tracking_user_id?: string,\n clickData?: Record<string, any>\n ): Promise<void> {\n return await trackPageClick(tracking_user_id, clickData);\n }\n\n // Static method to get attribution data\n static getAttributionData(): AttributionData | null {\n return getAttributionData();\n }\n\n // Static method to flush events\n static async flush(): Promise<void> {\n return await flush();\n }\n\n // Static method to get status\n static getStatus() {\n return getStatus();\n }\n\n // Static method to add UTM to URL\n static addUTMToURL(url: string): string {\n return addUTMToURL(url);\n }\n\n // Static method to get current UTM parameters\n static getCurrentUTMParams(): Record<string, string> {\n return getCurrentUTMParams();\n }\n\n // Static method to destroy SDK\n static destroy(): void {\n destroy();\n }\n\n // Static method to get SDK instance\n static getSDK(): AttributionSDK | null {\n return getSDK();\n }\n\n // Static method to wait for SDK\n static waitForSDK(): Promise<AttributionSDK> {\n return waitForSDK();\n }\n}\n\n// Export types\nexport {\n EventType,\n Currency,\n type SDKConfig,\n type EventData,\n type AttributionData,\n};\n\n// Export main functions\nexport {\n init,\n getSDK,\n waitForSDK,\n trackEvent,\n trackPageView,\n trackPageClick,\n trackPurchase,\n trackLogin,\n trackSignup,\n trackFormSubmit,\n trackVideoPlay,\n trackEmailVerification,\n trackProductView,\n trackAddToCart,\n getAttributionData,\n flush,\n getStatus,\n addUTMToURL,\n getCurrentUTMParams,\n destroy,\n};\n\n// Export AttributionSDK class for advanced usage\nexport { AttributionSDKStatic as AttributionSDK };\n\n// Auto-initialize if script is loaded with data-api-key\nif (typeof document !== \"undefined\") {\n // Initialize immediately when script loads, don't wait for DOMContentLoaded\n // This ensures SDK is ready before any body scripts execute\n autoInit();\n}\n\n// Expose functions to global scope for browser usage\nif (typeof window !== \"undefined\") {\n (window as any).getuaiSDK = {\n init,\n getSDK,\n waitForSDK,\n trackEvent,\n trackPageView,\n trackPageClick,\n trackPurchase,\n trackLogin,\n trackSignup,\n trackFormSubmit,\n trackVideoPlay,\n trackEmailVerification,\n trackProductView,\n trackAddToCart,\n getAttributionData,\n flush,\n getStatus,\n addUTMToURL,\n getCurrentUTMParams,\n destroy,\n EventType,\n Currency,\n AttributionSDK: AttributionSDKStatic, // 暴露带静态方法的AttributionSDK类\n };\n\n // Also expose individual functions for backward compatibility\n (window as any).init = init;\n (window as any).waitForSDK = waitForSDK;\n (window as any).trackEvent = trackEvent;\n (window as any).trackPageView = trackPageView;\n (window as any).trackPageClick = trackPageClick;\n (window as any).trackPurchase = trackPurchase;\n (window as any).trackLogin = trackLogin;\n (window as any).trackSignup = trackSignup;\n (window as any).trackFormSubmit = trackFormSubmit;\n (window as any).trackVideoPlay = trackVideoPlay;\n (window as any).trackEmailVerification = trackEmailVerification;\n (window as any).trackProductView = trackProductView;\n (window as any).trackAddToCart = trackAddToCart;\n (window as any).getAttributionData = getAttributionData;\n (window as any).flush = flush;\n (window as any).getStatus = getStatus;\n (window as any).addUTMToURL = addUTMToURL;\n (window as any).getCurrentUTMParams = getCurrentUTMParams;\n (window as any).destroy = destroy;\n (window as any).AttributionSDK = AttributionSDKStatic; // 直接暴露带静态方法的AttributionSDK类\n}\n\n// Default export\nexport default {\n init,\n getSDK,\n waitForSDK,\n trackEvent,\n trackPageView,\n trackPageClick,\n trackPurchase,\n trackLogin,\n trackSignup,\n trackFormSubmit,\n trackVideoPlay,\n trackEmailVerification,\n trackProductView,\n trackAddToCart,\n getAttributionData,\n flush,\n getStatus,\n addUTMToURL,\n getCurrentUTMParams,\n destroy,\n EventType,\n Currency,\n AttributionSDK: AttributionSDKStatic, // 包含带静态方法的AttributionSDK类\n};\n"],"names":["addUTMToURL"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/types/index.ts","../src/utils/index.ts","../src/storage/index.ts","../src/version.ts","../src/queue/index.ts","../src/core/AttributionSDK.ts","../src/index.ts"],"sourcesContent":["// Event types matching server-side enum exactly\nexport enum EventType {\n // Pre-conversion signals\n PAGE_VIEW = \"page_view\",\n PAGE_CLICK = \"page_click\", // User click journey tracking\n VIDEO_PLAY = \"video_play\",\n\n // Registration funnel\n FORM_SUBMIT = \"form_submit\",\n EMAIL_VERIFICATION = \"email_verification\",\n\n // Login flow\n LOGIN = \"login\",\n\n // Signup flow\n SIGNUP = \"signup\",\n\n // Purchase funnel\n PRODUCT_VIEW = \"product_view\",\n ADD_TO_CART = \"add_to_cart\",\n PURCHASE = \"purchase\",\n}\n\n// Currency types\nexport enum Currency {\n USD = \"USD\",\n}\n\n// UTM data structure\nexport interface UTMData {\n utm_source?: string | null;\n utm_medium?: string | null;\n utm_campaign?: string | null;\n utm_term?: string | null;\n utm_content?: string | null;\n timestamp: number;\n}\n\n// Attribution data structure\nexport interface AttributionData {\n firstTouch: UTMData;\n lastTouch: UTMData;\n touchpoints: UTMData[];\n expiresAt: number;\n}\n\n// Event data structure\nexport interface EventData {\n event_id: string;\n event_type: EventType;\n tracking_user_id?: string;\n utm_source?: string | null;\n utm_medium?: string | null;\n utm_campaign?: string | null;\n utm_term?: string | null;\n utm_content?: string | null;\n revenue?: number | null;\n currency?: Currency | null;\n event_data?: Record<string, any> | null;\n // Arbitrary context information; page info should be nested under context.page\n context?: {\n page?: {\n domain?: string | null;\n path?: string | null;\n title?: string | null;\n referrer?: string | null;\n url?: string | null; // for completeness but no querystring\n querystring?: string | null; // URL query string\n query_params?: Record<string, string> | null; // Parsed query parameters as object\n };\n [key: string]: any;\n } | null;\n timestamp?: number;\n}\n\n// Batch event request\nexport interface BatchEventRequest {\n events: EventData[];\n sdk_version: string;\n}\nexport const defaultEndpoint = \"https://attribution.getu.ai/attribution/api\";\n// SDK configuration\nexport interface SDKConfig {\n apiKey: string;\n apiEndpoint?: string;\n batchSize?: number;\n batchInterval?: number; // Default: 2000 (ms)\n maxRetries?: number;\n retryDelay?: number;\n enableDebug?: boolean;\n autoTrack?: boolean;\n // Control whether to automatically track page views on initialization\n autoTrackPageView?: boolean;\n sessionTimeout?: number;\n // Cross-domain UTM tracking configuration\n enableCrossDomainUTM?: boolean;\n crossDomainUTMParams?: string[]; // Which UTM params to pass\n excludeDomains?: string[]; // Domains to exclude from UTM passing\n // Control whether to automatically remove UTM params from the URL after capture\n autoCleanUTM?: boolean;\n // Page view debounce interval in milliseconds (default: 5000ms)\n // Same page can only be tracked once within this interval\n pageViewDebounceInterval?: number;\n // User ID configuration\n userId?: string; // Initial user ID to set on initialization (will be stored in both cookie and sessionStorage)\n}\n\n// Storage interface\nexport interface StorageInterface {\n get(key: string): any;\n set(key: string, value: any): void;\n remove(key: string): void;\n clear(): void;\n}\n\n// Queue interface\nexport interface QueueInterface {\n add(event: EventData): void;\n process(): Promise<void>;\n clear(): void;\n size(): number;\n}\n\n// Logger interface\nexport interface LoggerInterface {\n debug(message: string, ...args: any[]): void;\n info(message: string, ...args: any[]): void;\n warn(message: string, ...args: any[]): void;\n error(message: string, ...args: any[]): void;\n}\n\n// User session data\nexport interface UserSession {\n sessionId: string;\n startTime: number;\n lastActivity: number;\n pageViews: number;\n}\n\n// Special events that should be sent immediately\nexport const IMMEDIATE_EVENTS = [\n EventType.PURCHASE,\n EventType.LOGIN,\n EventType.SIGNUP,\n EventType.FORM_SUBMIT,\n EventType.EMAIL_VERIFICATION,\n];\n","import { LoggerInterface, UTMData } from \"../types\";\n\n// Generate unique ID\nexport function generateId(): string {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n// Generate timestamp in seconds\nexport function getTimestamp(): number {\n return Math.floor(Date.now() / 1000);\n}\n\n// Parse URL parameters\nexport function parseUrlParams(url: string): Record<string, string> {\n const params: Record<string, string> = {};\n try {\n const urlObj = new URL(url);\n urlObj.searchParams.forEach((value, key) => {\n params[key] = value;\n });\n } catch (error) {\n // Handle invalid URLs\n }\n return params;\n}\n\n// Extract UTM parameters from URL\nexport function extractUTMParams(url: string): Record<string, string> {\n const params = parseUrlParams(url);\n const utmParams: Record<string, string> = {};\n\n const utmKeys = [\n \"utm_source\",\n \"utm_medium\",\n \"utm_campaign\",\n \"utm_term\",\n \"utm_content\",\n ];\n\n utmKeys.forEach((key) => {\n if (params[key] && params[key].trim() !== \"\") {\n utmParams[key] = params[key].trim();\n }\n });\n\n return utmParams;\n}\n\n// Check if browser supports localStorage\nexport function isLocalStorageSupported(): boolean {\n try {\n const test = \"__localStorage_test__\";\n localStorage.setItem(test, test);\n localStorage.removeItem(test);\n return true;\n } catch {\n return false;\n }\n}\n\n// Check if browser supports IndexedDB\nexport function isIndexedDBSupported(): boolean {\n return \"indexedDB\" in window;\n}\n\n// Deep clone object\nexport function deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") {\n return obj;\n }\n\n if (obj instanceof Date) {\n return new Date(obj.getTime()) as unknown as T;\n }\n\n if (obj instanceof Array) {\n return obj.map((item) => deepClone(item)) as unknown as T;\n }\n\n if (typeof obj === \"object\") {\n const cloned = {} as T;\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n cloned[key] = deepClone(obj[key]);\n }\n }\n return cloned;\n }\n\n return obj;\n}\n\n// Debounce function\nexport function debounce<T extends (...args: any[]) => any>(\n func: T,\n wait: number\n): (...args: Parameters<T>) => void {\n let timeout: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), wait);\n };\n}\n\n// Throttle function\nexport function throttle<T extends (...args: any[]) => any>(\n func: T,\n limit: number\n): (...args: Parameters<T>) => void {\n let inThrottle: boolean;\n return (...args: Parameters<T>) => {\n if (!inThrottle) {\n func(...args);\n inThrottle = true;\n setTimeout(() => (inThrottle = false), limit);\n }\n };\n}\n\n// Retry function with exponential backoff\nexport async function retry<T>(\n fn: () => Promise<T>,\n maxRetries: number = 3,\n baseDelay: number = 1000\n): Promise<T> {\n let lastError: Error;\n\n for (let i = 0; i <= maxRetries; i++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n if (i === maxRetries) {\n throw lastError;\n }\n\n const delay = baseDelay * Math.pow(2, i);\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n\n throw lastError!;\n}\n\n// Console logger implementation\nexport class ConsoleLogger implements LoggerInterface {\n private enabled: boolean;\n\n constructor(enabled: boolean = true) {\n this.enabled = enabled;\n }\n\n debug(message: string, ...args: any[]): void {\n if (this.enabled && console.debug) {\n console.debug(`[GetuAI Debug] ${message}`, ...args);\n }\n }\n\n info(message: string, ...args: any[]): void {\n if (this.enabled && console.info) {\n console.info(`[GetuAI Info] ${message}`, ...args);\n }\n }\n\n warn(message: string, ...args: any[]): void {\n if (this.enabled && console.warn) {\n console.warn(`[GetuAI Warn] ${message}`, ...args);\n }\n }\n\n error(message: string, ...args: any[]): void {\n if (this.enabled && console.error) {\n console.error(`[GetuAI Error] ${message}`, ...args);\n }\n }\n}\n\n// Get user agent info\nexport function getUserAgent(): string {\n return navigator.userAgent || \"\";\n}\n\n// Get referrer\nexport function getReferrer(): string {\n return document.referrer || \"\";\n}\n\n// Get current URL\nexport function getCurrentUrl(): string {\n return window.location.href;\n}\n\n// Get page title\nexport function getPageTitle(): string {\n return document.title || \"\";\n}\n\n// Check if user is online\nexport function isOnline(): boolean {\n return navigator.onLine;\n}\n\n// Generate session ID\nexport function generateSessionId(): string {\n return `session_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n}\n\n// Validate email format\nexport function isValidEmail(email: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n}\n\n// Format currency\nexport function formatCurrency(\n amount: number,\n currency: string = \"USD\"\n): string {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: currency,\n }).format(amount);\n}\n\n// Add UTM parameters to URL\nexport function addUTMToURL(\n url: string,\n utmParams: Record<string, string>\n): string {\n try {\n const urlObj = new URL(url);\n\n // Add UTM parameters if they don't already exist\n Object.entries(utmParams).forEach(([key, value]) => {\n if (value && !urlObj.searchParams.has(key)) {\n urlObj.searchParams.set(key, value);\n }\n });\n\n return urlObj.toString();\n } catch (error) {\n // If URL parsing fails, return original URL\n return url;\n }\n}\n\n// Check if domain should be excluded from UTM passing\nexport function shouldExcludeDomain(\n url: string,\n excludeDomains: string[] = []\n): boolean {\n try {\n const urlObj = new URL(url);\n const hostname = urlObj.hostname.toLowerCase();\n\n return excludeDomains.some((domain) => {\n const excludeDomain = domain.toLowerCase();\n return (\n hostname === excludeDomain || hostname.endsWith(`.${excludeDomain}`)\n );\n });\n } catch (error) {\n return false;\n }\n}\n\n// Get domain from URL\nexport function getDomainFromURL(url: string): string | null {\n try {\n const urlObj = new URL(url);\n return urlObj.hostname;\n } catch (error) {\n return null;\n }\n}\n\n// Check if URL is external (different domain)\nexport function isExternalURL(url: string): boolean {\n try {\n const urlObj = new URL(url);\n const currentDomain = window.location.hostname;\n return urlObj.hostname !== currentDomain;\n } catch (error) {\n return false;\n }\n}\n\n// Filter UTM parameters based on configuration\nexport function filterUTMParams(\n utmData: Partial<UTMData>,\n allowedParams: string[] = [\"utm_source\", \"utm_medium\", \"utm_campaign\"]\n): Record<string, string> {\n const filtered: Record<string, string> = {};\n\n allowedParams.forEach((param) => {\n if (utmData[param as keyof UTMData]) {\n filtered[param] = utmData[param as keyof UTMData] as string;\n }\n });\n\n return filtered;\n}\n\n// Get query string from URL\nexport function getQueryString(url?: string): string {\n try {\n const targetUrl = url || window.location.href;\n const urlObj = new URL(targetUrl);\n return urlObj.search;\n } catch (error) {\n return \"\";\n }\n}\n\n// Get query parameters as object\nexport function getQueryParams(url?: string): Record<string, string> {\n try {\n const targetUrl = url || window.location.href;\n const urlObj = new URL(targetUrl);\n const params: Record<string, string> = {};\n\n urlObj.searchParams.forEach((value, key) => {\n params[key] = value;\n });\n\n return params;\n } catch (error) {\n return {};\n }\n}\n\n// Clean URL by removing UTM parameters\nexport function cleanURL(): void {\n try {\n const currentUrl = new URL(window.location.href);\n const utmKeys = [\n \"utm_source\",\n \"utm_medium\",\n \"utm_campaign\",\n \"utm_term\",\n \"utm_content\",\n ];\n\n let hasParams = false;\n\n utmKeys.forEach((key) => {\n if (currentUrl.searchParams.has(key)) {\n currentUrl.searchParams.delete(key);\n hasParams = true;\n }\n });\n\n if (hasParams) {\n // Use replaceState to avoid page reload and history entry\n window.history.replaceState({}, document.title, currentUrl.toString());\n }\n } catch (error) {\n // Handle invalid URLs silently\n console.warn(\"Failed to clean URL:\", error);\n }\n}\n","import {\n StorageInterface,\n AttributionData,\n EventData,\n LoggerInterface,\n UTMData,\n} from \"../types\";\nimport {\n isLocalStorageSupported,\n isIndexedDBSupported,\n deepClone,\n ConsoleLogger,\n} from \"../utils\";\n\n// LocalStorage implementation\nexport class LocalStorageManager implements StorageInterface {\n private logger: LoggerInterface;\n\n constructor(logger: LoggerInterface) {\n this.logger = logger;\n }\n\n get(key: string): any {\n try {\n if (!isLocalStorageSupported()) {\n this.logger.warn(\"LocalStorage not supported\");\n return null;\n }\n\n const item = localStorage.getItem(key);\n if (item === null) {\n return null;\n }\n\n return JSON.parse(item);\n } catch (error) {\n this.logger.error(\"Error reading from localStorage:\", error);\n return null;\n }\n }\n\n set(key: string, value: any): void {\n try {\n if (!isLocalStorageSupported()) {\n this.logger.warn(\"LocalStorage not supported\");\n return;\n }\n\n localStorage.setItem(key, JSON.stringify(value));\n } catch (error) {\n this.logger.error(\"Error writing to localStorage:\", error);\n // Handle quota exceeded\n this.handleQuotaExceeded();\n }\n }\n\n remove(key: string): void {\n try {\n if (isLocalStorageSupported()) {\n localStorage.removeItem(key);\n }\n } catch (error) {\n this.logger.error(\"Error removing from localStorage:\", error);\n }\n }\n\n clear(): void {\n try {\n if (isLocalStorageSupported()) {\n localStorage.clear();\n }\n } catch (error) {\n this.logger.error(\"Error clearing localStorage:\", error);\n }\n }\n\n private handleQuotaExceeded(): void {\n // Try to clean up old data\n try {\n const keys = Object.keys(localStorage);\n const attributionKeys = keys.filter((key) =>\n key.startsWith(\"attribution_\")\n );\n\n if (attributionKeys.length > 0) {\n // Remove oldest data first\n attributionKeys.sort((a, b) => {\n const aData = this.get(a);\n const bData = this.get(b);\n return (aData?.expiresAt || 0) - (bData?.expiresAt || 0);\n });\n\n // Remove oldest 20% of data\n const toRemove = Math.ceil(attributionKeys.length * 0.2);\n attributionKeys.slice(0, toRemove).forEach((key) => {\n this.remove(key);\n });\n\n this.logger.info(`Cleaned up ${toRemove} old attribution records`);\n }\n } catch (error) {\n this.logger.error(\"Error during quota cleanup:\", error);\n }\n }\n}\n\n// IndexedDB implementation\nexport class IndexedDBManager {\n private dbName: string = \"attribution_events\";\n private dbVersion: number = 1;\n private storeName: string = \"events\";\n private logger: LoggerInterface;\n private db: IDBDatabase | null = null;\n\n constructor(logger: LoggerInterface) {\n this.logger = logger;\n }\n\n async init(): Promise<void> {\n if (!isIndexedDBSupported()) {\n this.logger.warn(\"IndexedDB not supported\");\n return;\n }\n\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(this.dbName, this.dbVersion);\n\n request.onerror = () => {\n this.logger.error(\"Failed to open IndexedDB:\", request.error);\n reject(request.error);\n };\n\n request.onsuccess = () => {\n this.db = request.result;\n this.logger.info(\"IndexedDB initialized successfully\");\n resolve();\n };\n\n request.onupgradeneeded = (event) => {\n const db = (event.target as IDBOpenDBRequest).result;\n\n if (!db.objectStoreNames.contains(this.storeName)) {\n const store = db.createObjectStore(this.storeName, {\n keyPath: \"id\",\n autoIncrement: true,\n });\n store.createIndex(\"timestamp\", \"timestamp\", { unique: false });\n store.createIndex(\"sent\", \"sent\", { unique: false });\n store.createIndex(\"queued_at\", \"queued_at\", { unique: false });\n }\n };\n });\n }\n\n async addEvent(event: EventData): Promise<void> {\n if (!this.db) {\n throw new Error(\"IndexedDB not initialized\");\n }\n\n return new Promise((resolve, reject) => {\n const transaction = this.db!.transaction([this.storeName], \"readwrite\");\n const store = transaction.objectStore(this.storeName);\n\n const eventRecord = {\n ...event,\n queued_at: Date.now(),\n sent: false,\n };\n\n const request = store.add(eventRecord);\n\n request.onsuccess = () => {\n this.logger.debug(\"Event added to IndexedDB queue\");\n resolve();\n };\n\n request.onerror = () => {\n this.logger.error(\"Failed to add event to IndexedDB:\", request.error);\n reject(request.error);\n };\n });\n }\n\n async getUnsentEvents(limit: number = 100): Promise<EventData[]> {\n if (!this.db) {\n return [];\n }\n\n return new Promise((resolve, reject) => {\n const transaction = this.db!.transaction([this.storeName], \"readonly\");\n const store = transaction.objectStore(this.storeName);\n const index = store.index(\"sent\");\n\n const request = index.getAll(IDBKeyRange.only(false), limit);\n\n request.onsuccess = () => {\n const events = request.result.map((record: any) => {\n const { queued_at, sent, ...event } = record;\n return event;\n });\n resolve(events);\n };\n\n request.onerror = () => {\n this.logger.error(\"Failed to get unsent events:\", request.error);\n reject(request.error);\n };\n });\n }\n\n async markEventsAsSent(eventIds: string[]): Promise<void> {\n if (!this.db || eventIds.length === 0) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const transaction = this.db!.transaction([this.storeName], \"readwrite\");\n const store = transaction.objectStore(this.storeName);\n\n let completed = 0;\n let hasError = false;\n\n eventIds.forEach((eventId) => {\n const getRequest = store.get(eventId);\n\n getRequest.onsuccess = () => {\n if (getRequest.result) {\n const record = { ...getRequest.result, sent: true };\n const putRequest = store.put(record);\n\n putRequest.onsuccess = () => {\n completed++;\n if (completed === eventIds.length && !hasError) {\n resolve();\n }\n };\n\n putRequest.onerror = () => {\n hasError = true;\n this.logger.error(\n \"Failed to mark event as sent:\",\n putRequest.error\n );\n reject(putRequest.error);\n };\n } else {\n completed++;\n if (completed === eventIds.length && !hasError) {\n resolve();\n }\n }\n };\n\n getRequest.onerror = () => {\n hasError = true;\n this.logger.error(\n \"Failed to get event for marking as sent:\",\n getRequest.error\n );\n reject(getRequest.error);\n };\n });\n });\n }\n\n async cleanupOldEvents(\n maxAge: number = 7 * 24 * 60 * 60 * 1000\n ): Promise<void> {\n if (!this.db) {\n return;\n }\n\n const cutoffTime = Date.now() - maxAge;\n\n return new Promise((resolve, reject) => {\n const transaction = this.db!.transaction([this.storeName], \"readwrite\");\n const store = transaction.objectStore(this.storeName);\n const index = store.index(\"queued_at\");\n\n const request = index.openCursor(IDBKeyRange.upperBound(cutoffTime));\n\n request.onsuccess = () => {\n const cursor = request.result;\n if (cursor) {\n cursor.delete();\n cursor.continue();\n } else {\n this.logger.info(\"Old events cleanup completed\");\n resolve();\n }\n };\n\n request.onerror = () => {\n this.logger.error(\"Failed to cleanup old events:\", request.error);\n reject(request.error);\n };\n });\n }\n\n async getQueueSize(): Promise<number> {\n if (!this.db) {\n return 0;\n }\n\n return new Promise((resolve, reject) => {\n const transaction = this.db!.transaction([this.storeName], \"readonly\");\n const store = transaction.objectStore(this.storeName);\n const request = store.count();\n\n request.onsuccess = () => {\n resolve(request.result);\n };\n\n request.onerror = () => {\n this.logger.error(\"Failed to get queue size:\", request.error);\n reject(request.error);\n };\n });\n }\n\n async clear(): Promise<void> {\n if (!this.db) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const transaction = this.db!.transaction([this.storeName], \"readwrite\");\n const store = transaction.objectStore(this.storeName);\n const request = store.clear();\n\n request.onsuccess = () => {\n this.logger.info(\"IndexedDB queue cleared\");\n resolve();\n };\n\n request.onerror = () => {\n this.logger.error(\"Failed to clear IndexedDB queue:\", request.error);\n reject(request.error);\n };\n });\n }\n}\n\n// Attribution storage manager\nexport class AttributionStorageManager {\n private localStorage: LocalStorageManager;\n private indexedDB: IndexedDBManager;\n private logger: LoggerInterface;\n private readonly UTM_STORAGE_KEY = \"attribution_utm_data\";\n private readonly SESSION_STORAGE_KEY = \"attribution_session\";\n private readonly USER_ID_KEY = \"getuai_user_id\";\n private readonly USER_ID_COOKIE_EXPIRES = 365; // days\n\n constructor(logger: LoggerInterface) {\n this.logger = logger;\n this.localStorage = new LocalStorageManager(logger);\n this.indexedDB = new IndexedDBManager(logger);\n }\n\n // User ID management - stores in both cookie and localStorage\n setUserId(userId: string): void {\n if (!userId || userId.trim() === \"\") {\n this.logger.warn(\"Cannot set empty user ID\");\n return;\n }\n\n const trimmedUserId = userId.trim();\n\n // Store in cookie\n try {\n this.setCookie(\n this.USER_ID_KEY,\n trimmedUserId,\n this.USER_ID_COOKIE_EXPIRES\n );\n this.logger.debug(`👤 User ID stored in cookie: ${trimmedUserId}`);\n } catch (error) {\n this.logger.error(\"Failed to store user ID in cookie:\", error);\n }\n\n // Store in localStorage\n try {\n if (typeof localStorage !== \"undefined\") {\n localStorage.setItem(this.USER_ID_KEY, trimmedUserId);\n this.logger.debug(\n `👤 User ID stored in localStorage: ${trimmedUserId}`\n );\n }\n } catch (error) {\n this.logger.error(\"Failed to store user ID in localStorage:\", error);\n }\n }\n\n getUserId(): string | null {\n // Try localStorage first\n try {\n if (typeof localStorage !== \"undefined\") {\n const userId = localStorage.getItem(this.USER_ID_KEY);\n if (userId) {\n return userId;\n }\n }\n } catch (error) {\n this.logger.debug(\"Failed to get user ID from localStorage:\", error);\n }\n\n // Fallback to cookie\n try {\n const userId = this.getCookie(this.USER_ID_KEY);\n if (userId) {\n // Sync back to localStorage if cookie exists but localStorage doesn't\n try {\n if (typeof localStorage !== \"undefined\") {\n localStorage.setItem(this.USER_ID_KEY, userId);\n }\n } catch (error) {\n // Ignore sync errors\n }\n return userId;\n }\n } catch (error) {\n this.logger.debug(\"Failed to get user ID from cookie:\", error);\n }\n\n return null;\n }\n\n removeUserId(): void {\n // Remove from cookie\n try {\n this.deleteCookie(this.USER_ID_KEY);\n this.logger.debug(\"👤 User ID removed from cookie\");\n } catch (error) {\n this.logger.error(\"Failed to remove user ID from cookie:\", error);\n }\n\n // Remove from localStorage\n try {\n if (typeof localStorage !== \"undefined\") {\n localStorage.removeItem(this.USER_ID_KEY);\n this.logger.debug(\"👤 User ID removed from localStorage\");\n }\n } catch (error) {\n this.logger.error(\"Failed to remove user ID from localStorage:\", error);\n }\n }\n\n // Cookie helper methods\n private setCookie(name: string, value: string, days: number): void {\n try {\n const expires = new Date();\n expires.setTime(expires.getTime() + days * 24 * 60 * 60 * 1000);\n const cookieValue = `${name}=${encodeURIComponent(\n value\n )};expires=${expires.toUTCString()};path=/;SameSite=Lax`;\n document.cookie = cookieValue;\n } catch (error) {\n this.logger.error(\"Failed to set cookie:\", error);\n }\n }\n\n private getCookie(name: string): string | null {\n try {\n const nameEQ = name + \"=\";\n const ca = document.cookie.split(\";\");\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === \" \") c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) {\n return decodeURIComponent(c.substring(nameEQ.length, c.length));\n }\n }\n return null;\n } catch (error) {\n this.logger.error(\"Failed to get cookie:\", error);\n return null;\n }\n }\n\n private deleteCookie(name: string): void {\n try {\n document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/;`;\n } catch (error) {\n this.logger.error(\"Failed to delete cookie:\", error);\n }\n }\n\n async init(): Promise<void> {\n await this.indexedDB.init();\n }\n\n // UTM data management\n storeUTMData(utmData: Partial<AttributionData>): void {\n try {\n const existingData = this.getUTMData();\n\n // Create default UTM data if none exists\n const defaultUTMData: UTMData = {\n utm_source: \"\",\n utm_medium: \"\",\n utm_campaign: \"\",\n utm_term: \"\",\n utm_content: \"\",\n timestamp: Date.now(),\n };\n\n const newData: AttributionData = {\n firstTouch: existingData?.firstTouch || defaultUTMData,\n lastTouch: existingData?.lastTouch || defaultUTMData,\n touchpoints: existingData?.touchpoints || [],\n ...utmData,\n expiresAt: Date.now() + 30 * 24 * 60 * 60 * 1000, // 30 days\n };\n\n this.localStorage.set(this.UTM_STORAGE_KEY, newData);\n this.logger.debug(\"UTM data stored successfully:\", {\n firstTouch: newData.firstTouch,\n lastTouch: newData.lastTouch,\n touchpointsCount: newData.touchpoints.length,\n expiresAt: new Date(newData.expiresAt).toISOString(),\n });\n } catch (error) {\n this.logger.error(\"Failed to store UTM data:\", error);\n }\n }\n\n getUTMData(): AttributionData | null {\n const data = this.localStorage.get(this.UTM_STORAGE_KEY);\n if (data && data.expiresAt && data.expiresAt > Date.now()) {\n return data;\n }\n\n // Clean up expired data\n if (data) {\n this.localStorage.remove(this.UTM_STORAGE_KEY);\n }\n\n return null;\n }\n\n // Session management\n storeSession(session: any): void {\n this.localStorage.set(this.SESSION_STORAGE_KEY, session);\n }\n\n getSession(): any {\n return this.localStorage.get(this.SESSION_STORAGE_KEY);\n }\n\n // Event queue management\n async queueEvent(event: EventData): Promise<void> {\n try {\n await this.indexedDB.addEvent(event);\n } catch (error) {\n this.logger.error(\"Failed to queue event:\", error);\n throw error;\n }\n }\n\n async getUnsentEvents(limit: number = 100): Promise<EventData[]> {\n return await this.indexedDB.getUnsentEvents(limit);\n }\n\n async markEventsAsSent(eventIds: string[]): Promise<void> {\n await this.indexedDB.markEventsAsSent(eventIds);\n }\n\n async getQueueSize(): Promise<number> {\n return await this.indexedDB.getQueueSize();\n }\n\n async cleanupOldEvents(): Promise<void> {\n await this.indexedDB.cleanupOldEvents();\n }\n\n async clearQueue(): Promise<void> {\n await this.indexedDB.clear();\n }\n\n // Cleanup expired data\n cleanupExpiredData(): void {\n this.getUTMData(); // This will automatically clean up expired UTM data\n }\n}\n","/**\r\n * SDK Version\r\n * This version should match the version in package.json\r\n */\r\nexport const SDK_VERSION = \"2.0.0\";\r\n","import {\n QueueInterface,\n EventData,\n BatchEventRequest,\n LoggerInterface,\n IMMEDIATE_EVENTS,\n} from \"../types\";\nimport { retry, debounce, getTimestamp } from \"../utils\";\nimport { SDK_VERSION } from \"../version\";\n\nexport class EventQueueManager implements QueueInterface {\n private queue: EventData[] = [];\n private processing: boolean = false;\n private batchTimer: ReturnType<typeof setTimeout> | null = null;\n private logger: LoggerInterface;\n private apiKey: string;\n private apiEndpoint: string;\n private batchSize: number;\n private batchInterval: number;\n private maxRetries: number;\n private retryDelay: number;\n private sendEvents: (events: EventData[]) => Promise<void>;\n\n constructor(\n logger: LoggerInterface,\n apiKey: string,\n apiEndpoint: string,\n batchSize: number = 100,\n batchInterval: number = 2000,\n maxRetries: number = 3,\n retryDelay: number = 1000,\n sendEvents: (events: EventData[]) => Promise<void>\n ) {\n this.logger = logger;\n this.apiKey = apiKey;\n this.apiEndpoint = apiEndpoint;\n this.batchSize = batchSize;\n this.batchInterval = batchInterval;\n this.maxRetries = maxRetries;\n this.retryDelay = retryDelay;\n this.sendEvents = sendEvents;\n\n // Debounced process function to avoid excessive calls\n this.debouncedProcess = debounce(this.process.bind(this), 100);\n }\n\n add(event: EventData): void {\n this.queue.push(event);\n this.logger.debug(`Event added to queue: ${event.event_type}`);\n\n // Check if this is an immediate event\n if (IMMEDIATE_EVENTS.includes(event.event_type)) {\n this.logger.debug(\n `Immediate event detected: ${event.event_type}, processing immediately`\n );\n this.processImmediate(event);\n } else {\n // Schedule batch processing\n this.scheduleBatchProcessing();\n }\n }\n\n async process(): Promise<void> {\n if (this.processing || this.queue.length === 0) {\n return;\n }\n\n this.processing = true;\n\n try {\n const eventsToProcess = this.queue.splice(0, this.batchSize);\n this.logger.debug(\n `Processing ${eventsToProcess.length} events from queue`\n );\n\n const result = await this.sendEvents(eventsToProcess);\n\n this.logger.info(\n `Successfully processed ${eventsToProcess.length} events`\n );\n\n // Events are automatically removed from queue when successfully sent\n // No need to manually clean up as they were already spliced from the queue\n } catch (error) {\n this.logger.error(\"Failed to process events:\", error);\n\n // Put events back in queue for retry\n const failedEvents = this.queue.splice(0, this.batchSize);\n this.queue.unshift(...failedEvents);\n\n // Schedule retry\n setTimeout(() => {\n this.processing = false;\n this.debouncedProcess();\n }, this.retryDelay);\n\n return;\n }\n\n this.processing = false;\n\n // Process remaining events if any\n if (this.queue.length > 0) {\n this.debouncedProcess();\n }\n }\n\n private async processImmediate(event: EventData): Promise<void> {\n try {\n this.logger.debug(`Processing immediate event: ${event.event_type}`);\n await this.sendEvents([event]);\n this.logger.info(\n `Immediate event processed successfully: ${event.event_type}`\n );\n // Event is automatically removed from queue when successfully sent\n } catch (error) {\n this.logger.error(\n `Failed to process immediate event: ${event.event_type}`,\n error\n );\n\n // Add to queue for retry\n this.queue.unshift(event);\n }\n }\n\n private scheduleBatchProcessing(): void {\n if (this.batchTimer) {\n clearTimeout(this.batchTimer);\n }\n\n this.batchTimer = setTimeout(() => {\n this.debouncedProcess();\n }, this.batchInterval);\n }\n\n clear(): void {\n this.queue = [];\n if (this.batchTimer) {\n clearTimeout(this.batchTimer);\n this.batchTimer = null;\n }\n this.processing = false;\n this.logger.info(\"Event queue cleared\");\n }\n\n size(): number {\n return this.queue.length;\n }\n\n // Get queue statistics\n getStats(): { size: number; processing: boolean } {\n return {\n size: this.queue.length,\n processing: this.processing,\n };\n }\n\n // Force process all events in queue\n async flush(): Promise<void> {\n this.logger.info(\"Flushing event queue\");\n while (this.queue.length > 0) {\n await this.process();\n }\n }\n\n // Debounced process function\n private debouncedProcess: () => void;\n}\n\n// HTTP client for sending events\nexport class EventHttpClient {\n private logger: LoggerInterface;\n private apiKey: string;\n private apiEndpoint: string;\n private maxRetries: number;\n private retryDelay: number;\n\n constructor(\n logger: LoggerInterface,\n apiKey: string,\n apiEndpoint: string,\n maxRetries: number = 3,\n retryDelay: number = 1000\n ) {\n this.logger = logger;\n this.apiKey = apiKey;\n this.apiEndpoint = apiEndpoint;\n this.maxRetries = maxRetries;\n this.retryDelay = retryDelay;\n }\n\n async sendEvents(events: EventData[]): Promise<void> {\n if (events.length === 0) {\n return;\n }\n\n // Transform events to match server format\n const transformedEvents = events.map((event) => ({\n event_id: event.event_id,\n event_type: event.event_type,\n tracking_user_id: event.tracking_user_id,\n utm_source: event.utm_source || null,\n utm_medium: event.utm_medium || null,\n utm_campaign: event.utm_campaign || null,\n utm_term: event.utm_term || null,\n utm_content: event.utm_content || null,\n revenue: event.revenue || null,\n currency: event.currency || null,\n event_data: event.event_data || null,\n context: event.context || null,\n timestamp: event.timestamp || getTimestamp(), // Convert to seconds\n }));\n\n const batchRequest: BatchEventRequest = {\n events: transformedEvents,\n sdk_version: SDK_VERSION,\n };\n\n await retry(\n async () => {\n const response = await fetch(`${this.apiEndpoint}/attribution/events`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify(batchRequest),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`HTTP ${response.status}: ${errorText}`);\n }\n\n const result = await response.json();\n this.logger.debug(\"Events sent successfully:\", result);\n\n // Return the sent events for cleanup\n return { result, sentEvents: events };\n },\n this.maxRetries,\n this.retryDelay\n );\n }\n\n async sendSingleEvent(event: EventData): Promise<void> {\n await this.sendEvents([event]);\n }\n\n // Test connection\n async testConnection(): Promise<boolean> {\n try {\n const response = await fetch(`${this.apiEndpoint}/health`, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n },\n });\n\n return response.ok;\n } catch (error) {\n this.logger.error(\"Connection test failed:\", error);\n return false;\n }\n }\n}\n\n// Memory queue fallback\nexport class MemoryQueueManager implements QueueInterface {\n private queue: EventData[] = [];\n private maxSize: number;\n private logger: LoggerInterface;\n\n constructor(logger: LoggerInterface, maxSize: number = 1000) {\n this.logger = logger;\n this.maxSize = maxSize;\n }\n\n add(event: EventData): void {\n if (this.queue.length >= this.maxSize) {\n this.logger.warn(\"Memory queue full, removing oldest event\");\n this.queue.shift();\n }\n\n this.queue.push(event);\n this.logger.debug(`Event added to memory queue: ${event.event_type}`);\n }\n\n async process(): Promise<void> {\n // Memory queue doesn't process automatically\n // Events are stored in memory only\n this.logger.debug(\"Memory queue process called (no-op)\");\n }\n\n clear(): void {\n this.queue = [];\n this.logger.info(\"Memory queue cleared\");\n }\n\n size(): number {\n return this.queue.length;\n }\n\n // Get all events from memory queue\n getAllEvents(): EventData[] {\n return [...this.queue];\n }\n\n // Remove events from memory queue\n removeEvents(eventIds: string[]): void {\n this.queue = this.queue.filter(\n (event) => !eventIds.includes(event.event_id)\n );\n }\n}\n","import {\n SDKConfig,\n EventData,\n EventType,\n AttributionData,\n UTMData,\n Currency,\n UserSession,\n IMMEDIATE_EVENTS,\n defaultEndpoint,\n} from \"../types\";\nimport { AttributionStorageManager } from \"../storage\";\nimport { EventQueueManager, EventHttpClient } from \"../queue\";\nimport {\n generateId,\n getTimestamp,\n extractUTMParams,\n getCurrentUrl,\n getReferrer,\n getUserAgent,\n getPageTitle,\n generateSessionId,\n isOnline,\n ConsoleLogger,\n addUTMToURL,\n shouldExcludeDomain,\n isExternalURL,\n filterUTMParams,\n cleanURL,\n getQueryString,\n getQueryParams,\n} from \"../utils\";\n\nexport class AttributionSDK {\n private config: SDKConfig;\n private logger: ConsoleLogger;\n private storage: AttributionStorageManager;\n private httpClient: EventHttpClient;\n private queue: EventQueueManager;\n private session: UserSession | null = null;\n private initialized: boolean = false;\n private autoTrackEnabled: boolean = false;\n private pageViewTrackTimes: Map<string, number> = new Map();\n // SPA tracking internals\n private spaTrackingEnabled: boolean = false;\n private lastTrackedPath: string = \"\";\n private originalPushState: typeof history.pushState | null = null;\n private originalReplaceState: typeof history.replaceState | null = null;\n private popstateHandler: ((event: PopStateEvent) => void) | null = null;\n\n constructor(config: SDKConfig) {\n this.config = {\n apiEndpoint: defaultEndpoint,\n batchSize: 100,\n batchInterval: 2000,\n maxRetries: 3,\n retryDelay: 1000,\n enableDebug: false,\n autoTrack: false,\n autoTrackPageView: false,\n sessionTimeout: 30 * 60 * 1000, // 30 minutes\n enableCrossDomainUTM: true,\n crossDomainUTMParams: [\n \"utm_source\",\n \"utm_medium\",\n \"utm_campaign\",\n \"utm_term\",\n \"utm_content\",\n ],\n excludeDomains: [],\n autoCleanUTM: true,\n pageViewDebounceInterval: 5000, // 5 seconds default\n ...config,\n };\n\n this.logger = new ConsoleLogger(this.config.enableDebug);\n this.storage = new AttributionStorageManager(this.logger);\n this.httpClient = new EventHttpClient(\n this.logger,\n this.config.apiKey,\n this.config.apiEndpoint || defaultEndpoint,\n this.config.maxRetries,\n this.config.retryDelay\n );\n\n this.queue = new EventQueueManager(\n this.logger,\n this.config.apiKey,\n this.config.apiEndpoint || defaultEndpoint,\n this.config.batchSize,\n this.config.batchInterval,\n this.config.maxRetries,\n this.config.retryDelay,\n (events) => this.httpClient.sendEvents(events)\n );\n }\n\n async init(): Promise<void> {\n if (this.initialized) {\n this.logger.warn(\"SDK already initialized\");\n return;\n }\n\n try {\n this.logger.info(\"Initializing GetuAI Attribution SDK\");\n\n // Initialize storage (IndexedDB failure should not block SDK initialization)\n try {\n await this.storage.init();\n } catch (storageError) {\n this.logger.warn(\n \"Storage initialization failed (IndexedDB may be unavailable), continuing with basic features:\",\n storageError\n );\n // Continue initialization even if IndexedDB fails\n // User ID and other features using cookie/localStorage will still work\n }\n\n // Initialize user ID (from config or existing storage)\n this.initializeUserId();\n\n // Initialize session\n this.initializeSession();\n\n // Extract and store UTM data from current URL\n this.extractAndStoreUTMData();\n\n // Setup auto-tracking if enabled\n if (this.config.autoTrack) {\n this.setupAutoTracking();\n }\n\n // Setup online/offline handlers\n this.setupNetworkHandlers();\n\n // Setup page visibility handlers\n this.setupVisibilityHandlers();\n\n // Setup beforeunload handler\n this.setupBeforeUnloadHandler();\n\n this.initialized = true;\n this.logger.info(\"🚀 GetuAI Attribution SDK initialized successfully\");\n this.logger.info(\n \"📄 Auto track page view = \" + this.config.autoTrackPageView\n );\n\n // Auto track page view if enabled (independent from autoTrack)\n // Also enables SPA route tracking automatically\n if (this.config.autoTrackPageView) {\n this.logger.info(\n \"📄 Auto track page view enabled (including SPA route tracking)\"\n );\n // Record the initial path for SPA tracking\n this.lastTrackedPath = this.getCurrentPath();\n\n // Setup SPA tracking for route changes\n this.setupSPATracking();\n\n setTimeout(() => {\n // Fire asynchronously; do not block initialization\n this.trackPageView()\n .then(() => {\n this.logger.info(\"✅ Auto track page view completed\");\n })\n .catch((error) =>\n this.logger.error(\"❌ Auto track page view failed:\", error)\n );\n }, 100);\n }\n } catch (error) {\n this.logger.error(\"Failed to initialize SDK:\", error);\n throw error;\n }\n }\n\n // Track custom event\n async trackEvent(\n eventType: EventType,\n eventData?: Record<string, any>,\n tracking_user_id?: string,\n revenue?: number,\n currency: Currency = Currency.USD\n ): Promise<void> {\n if (!this.initialized) {\n this.logger.warn(\"SDK not initialized, event not tracked\");\n return;\n }\n\n try {\n const currentUrl = getCurrentUrl();\n // Try to fetch public IP (best-effort)\n let ip_address: string | null = null;\n try {\n ip_address = await this.fetchPublicIP();\n } catch (e) {\n // ignore\n }\n\n const pageContext = {\n domain: typeof window !== \"undefined\" ? window.location.hostname : null,\n path: typeof window !== \"undefined\" ? window.location.pathname : null,\n title: getPageTitle(),\n referrer: getReferrer(),\n url: currentUrl.split(\"?\")[0],\n querystring: getQueryString(currentUrl),\n query_params: getQueryParams(currentUrl),\n ip_address: ip_address,\n };\n const sessionContext = {\n session_id: this.session?.sessionId,\n start_time: this.session?.startTime,\n last_activity: this.session?.lastActivity,\n page_views: this.session?.pageViews,\n };\n // Use provided tracking_user_id or fallback to stored user ID\n const finalUserId = tracking_user_id || this.getUserId();\n\n const event: EventData = {\n event_id: generateId(),\n event_type: eventType,\n tracking_user_id: finalUserId || undefined,\n timestamp: getTimestamp(),\n event_data: eventData,\n context: { page: pageContext, session: sessionContext },\n revenue: revenue,\n currency: currency,\n ...this.getUTMParams(),\n };\n\n this.logger.debug(`Tracking event: ${eventType}`, event);\n\n // Add to queue\n this.queue.add(event);\n } catch (error) {\n this.logger.error(`Failed to track event ${eventType}:`, error);\n }\n }\n\n // Track page view\n async trackPageView(\n pageData?: Record<string, any>,\n tracking_user_id?: string\n ): Promise<void> {\n const currentUrl = getCurrentUrl();\n // Use URL without query string as key for debouncing\n const pageKey = currentUrl.split(\"?\")[0];\n const now = Date.now();\n const debounceInterval = this.config.pageViewDebounceInterval || 5000;\n\n // Check if this page was tracked recently\n const lastTrackTime = this.pageViewTrackTimes.get(pageKey);\n if (lastTrackTime && now - lastTrackTime < debounceInterval) {\n this.logger.debug(\n `Page view debounced: ${pageKey} (last tracked ${\n now - lastTrackTime\n }ms ago)`\n );\n return;\n }\n\n const pageEventData = {\n url: currentUrl,\n title: getPageTitle(),\n referrer: getReferrer(),\n user_agent: getUserAgent(),\n ...pageData,\n };\n\n await this.trackEvent(EventType.PAGE_VIEW, pageEventData, tracking_user_id);\n\n // Update last track time for this page\n this.pageViewTrackTimes.set(pageKey, now);\n\n // Clean up old entries to prevent memory leak (keep only entries from last hour)\n this.cleanupPageViewTrackTimes();\n }\n\n // Clean up old page view track times to prevent memory leak\n private cleanupPageViewTrackTimes(): void {\n const oneHourAgo = Date.now() - 60 * 60 * 1000;\n for (const [pageKey, trackTime] of this.pageViewTrackTimes.entries()) {\n if (trackTime < oneHourAgo) {\n this.pageViewTrackTimes.delete(pageKey);\n }\n }\n }\n\n // Best-effort fetch of public IP address\n private async fetchPublicIP(): Promise<string | null> {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 2000);\n const response = await fetch(\"https://api.ipify.org?format=json\", {\n signal: controller.signal,\n headers: { Accept: \"application/json\" },\n });\n clearTimeout(timeout);\n if (!response.ok) {\n return null;\n }\n const data = await response.json();\n const ip = typeof data?.ip === \"string\" ? data.ip : null;\n return ip;\n } catch (error) {\n this.logger.debug(\"Public IP fetch failed\", error);\n return null;\n }\n }\n\n // Track purchase\n async trackPurchase(\n tracking_user_id: string,\n revenue: number,\n currency: Currency = Currency.USD,\n purchaseData?: Record<string, any>\n ): Promise<void> {\n await this.trackEvent(\n EventType.PURCHASE,\n purchaseData,\n tracking_user_id,\n revenue,\n currency\n );\n }\n\n // Track login\n async trackLogin(\n tracking_user_id: string,\n loginData?: Record<string, any>\n ): Promise<void> {\n await this.trackEvent(EventType.LOGIN, loginData, tracking_user_id);\n }\n\n // Track signup\n async trackSignup(\n tracking_user_id: string,\n signupData?: Record<string, any>\n ): Promise<void> {\n await this.trackEvent(EventType.SIGNUP, signupData, tracking_user_id);\n }\n\n // Track form submission\n async trackFormSubmit(\n tracking_user_id?: string,\n formData?: Record<string, any>\n ): Promise<void> {\n await this.trackEvent(EventType.FORM_SUBMIT, formData, tracking_user_id);\n }\n\n // Track video play\n async trackVideoPlay(\n tracking_user_id?: string,\n videoData?: Record<string, any>\n ): Promise<void> {\n await this.trackEvent(EventType.VIDEO_PLAY, videoData, tracking_user_id);\n }\n\n // Track email verification\n async trackEmailVerification(\n tracking_user_id: string,\n verificationData?: Record<string, any>\n ): Promise<void> {\n await this.trackEvent(\n EventType.EMAIL_VERIFICATION,\n verificationData,\n tracking_user_id\n );\n }\n\n // Track purchase with auto user ID (object parameter format)\n async trackPurchaseAuto(options: {\n revenue: number;\n currency?: Currency;\n purchaseData?: Record<string, any>;\n tracking_user_id?: string;\n }): Promise<void> {\n const userId = options.tracking_user_id || this.getUserId();\n if (!userId) {\n this.logger.error(\n \"❌ trackPurchaseAuto requires tracking_user_id. Please set user ID using setUserId() or pass it in options.tracking_user_id.\"\n );\n return;\n }\n await this.trackEvent(\n EventType.PURCHASE,\n options.purchaseData,\n userId,\n options.revenue,\n options.currency || Currency.USD\n );\n }\n\n // Track login with auto user ID (object parameter format)\n async trackLoginAuto(options: {\n loginData?: Record<string, any>;\n tracking_user_id?: string;\n }): Promise<void> {\n const userId = options.tracking_user_id || this.getUserId();\n if (!userId) {\n this.logger.error(\n \"❌ trackLoginAuto requires tracking_user_id. Please set user ID using setUserId() or pass it in options.tracking_user_id.\"\n );\n return;\n }\n await this.trackEvent(EventType.LOGIN, options.loginData, userId);\n }\n\n // Track signup with auto user ID (object parameter format)\n async trackSignupAuto(options: {\n signupData?: Record<string, any>;\n tracking_user_id?: string;\n }): Promise<void> {\n const userId = options.tracking_user_id || this.getUserId();\n if (!userId) {\n this.logger.error(\n \"❌ trackSignupAuto requires tracking_user_id. Please set user ID using setUserId() or pass it in options.tracking_user_id.\"\n );\n return;\n }\n await this.trackEvent(EventType.SIGNUP, options.signupData, userId);\n }\n\n // Track email verification with auto user ID (object parameter format)\n async trackEmailVerificationAuto(options: {\n verificationData?: Record<string, any>;\n tracking_user_id?: string;\n }): Promise<void> {\n const userId = options.tracking_user_id || this.getUserId();\n if (!userId) {\n this.logger.error(\n \"❌ trackEmailVerificationAuto requires tracking_user_id. Please set user ID using setUserId() or pass it in options.tracking_user_id.\"\n );\n return;\n }\n await this.trackEvent(\n EventType.EMAIL_VERIFICATION,\n options.verificationData,\n userId\n );\n }\n\n // Track product view\n async trackProductView(\n tracking_user_id?: string,\n productData?: Record<string, any>\n ): Promise<void> {\n await this.trackEvent(\n EventType.PRODUCT_VIEW,\n productData,\n tracking_user_id\n );\n }\n\n // Track add to cart\n async trackAddToCart(\n tracking_user_id?: string,\n cartData?: Record<string, any>\n ): Promise<void> {\n await this.trackEvent(EventType.ADD_TO_CART, cartData, tracking_user_id);\n }\n\n // Track page click for user click journey\n async trackPageClick(\n tracking_user_id?: string,\n clickData?: Record<string, any>\n ): Promise<void> {\n await this.trackEvent(EventType.PAGE_CLICK, clickData, tracking_user_id);\n }\n\n // Get attribution data\n getAttributionData(): AttributionData | null {\n return this.storage.getUTMData();\n }\n\n // Manually add UTM parameters to a URL\n addUTMToURL(url: string): string {\n if (!this.config.enableCrossDomainUTM) {\n return url;\n }\n\n const attributionData = this.getAttributionData();\n if (!attributionData) {\n return url;\n }\n\n const utmParams = filterUTMParams(\n attributionData.lastTouch,\n this.config.crossDomainUTMParams\n );\n\n return addUTMToURL(url, utmParams);\n }\n\n // Get current UTM parameters as object\n getCurrentUTMParams(): Record<string, string> {\n const attributionData = this.getAttributionData();\n if (!attributionData) {\n return {};\n }\n\n return filterUTMParams(\n attributionData.lastTouch,\n this.config.crossDomainUTMParams\n );\n }\n\n // Get UTM parameters for events\n private getUTMParams(): Partial<UTMData> {\n const attributionData = this.getAttributionData();\n if (!attributionData) {\n this.logger.debug(\"No attribution data available for UTM params\");\n return {};\n }\n\n const utmParams = {\n utm_source: attributionData.lastTouch.utm_source || null,\n utm_medium: attributionData.lastTouch.utm_medium || null,\n utm_campaign: attributionData.lastTouch.utm_campaign || null,\n utm_term: attributionData.lastTouch.utm_term || null,\n utm_content: attributionData.lastTouch.utm_content || null,\n };\n\n // Filter out empty values and return null for empty strings\n const filteredParams: Partial<UTMData> = {};\n if (utmParams.utm_source && utmParams.utm_source.trim() !== \"\") {\n filteredParams.utm_source = utmParams.utm_source;\n } else {\n filteredParams.utm_source = null;\n }\n if (utmParams.utm_medium && utmParams.utm_medium.trim() !== \"\") {\n filteredParams.utm_medium = utmParams.utm_medium;\n } else {\n filteredParams.utm_medium = null;\n }\n if (utmParams.utm_campaign && utmParams.utm_campaign.trim() !== \"\") {\n filteredParams.utm_campaign = utmParams.utm_campaign;\n } else {\n filteredParams.utm_campaign = null;\n }\n if (utmParams.utm_term && utmParams.utm_term.trim() !== \"\") {\n filteredParams.utm_term = utmParams.utm_term;\n } else {\n filteredParams.utm_term = null;\n }\n if (utmParams.utm_content && utmParams.utm_content.trim() !== \"\") {\n filteredParams.utm_content = utmParams.utm_content;\n } else {\n filteredParams.utm_content = null;\n }\n\n this.logger.debug(\"UTM params for event:\", filteredParams);\n return filteredParams;\n }\n\n // Initialize user ID\n private initializeUserId(): void {\n // If userId is provided in config, set it (will override existing)\n if (this.config.userId) {\n this.setUserId(this.config.userId);\n this.logger.info(\n `👤 User ID initialized from config: ${this.config.userId}`\n );\n } else {\n // Check if user ID already exists in storage\n const existingUserId = this.getUserId();\n if (existingUserId) {\n this.logger.debug(`👤 Existing user ID found: ${existingUserId}`);\n } else {\n this.logger.debug(\n \"👤 No user ID found, will be set when user identifies\"\n );\n }\n }\n }\n\n // Set user ID\n setUserId(userId: string): void {\n if (!userId || userId.trim() === \"\") {\n this.logger.warn(\"Cannot set empty user ID\");\n return;\n }\n\n this.storage.setUserId(userId);\n this.logger.info(`👤 User ID set: ${userId}`);\n }\n\n // Get user ID\n getUserId(): string | null {\n return this.storage.getUserId();\n }\n\n // Remove user ID\n removeUserId(): void {\n this.storage.removeUserId();\n this.logger.info(\"👤 User ID removed\");\n }\n\n // Initialize user session\n private initializeSession(): void {\n const existingSession = this.storage.getSession();\n const now = Date.now();\n\n if (\n existingSession &&\n now - existingSession.lastActivity < this.config.sessionTimeout!\n ) {\n // Extend existing session\n this.session = {\n ...existingSession,\n lastActivity: now,\n };\n } else {\n // Create new session\n this.session = {\n sessionId: generateSessionId(),\n startTime: now,\n lastActivity: now,\n pageViews: 0,\n };\n }\n\n this.storage.storeSession(this.session);\n this.logger.debug(\"Session initialized:\", this.session);\n }\n\n // Extract and store UTM data from current URL\n private extractAndStoreUTMData(): void {\n const currentUrl = getCurrentUrl();\n const utmParams = extractUTMParams(currentUrl);\n\n this.logger.debug(\"Extracting UTM params from URL:\", currentUrl);\n this.logger.debug(\"Found UTM params:\", utmParams);\n\n if (Object.keys(utmParams).length === 0) {\n this.logger.debug(\"No UTM parameters found in URL\");\n return;\n }\n\n const utmData: UTMData = {\n utm_source: utmParams.utm_source || \"\",\n utm_medium: utmParams.utm_medium || \"\",\n utm_campaign: utmParams.utm_campaign || \"\",\n utm_term: utmParams.utm_term || \"\",\n utm_content: utmParams.utm_content || \"\",\n timestamp: Date.now(),\n };\n\n const existingData = this.getAttributionData();\n const newData: AttributionData = {\n firstTouch: existingData?.firstTouch || utmData,\n lastTouch: utmData,\n touchpoints: existingData?.touchpoints || [],\n expiresAt: Date.now() + 30 * 24 * 60 * 60 * 1000, // 30 days\n };\n\n // Add to touchpoints if different from last touch\n if (\n !existingData ||\n existingData.lastTouch.utm_source !== utmData.utm_source ||\n existingData.lastTouch.utm_campaign !== utmData.utm_campaign\n ) {\n newData.touchpoints.push(utmData);\n }\n\n this.storage.storeUTMData(newData);\n this.logger.info(\"UTM data extracted and stored successfully:\", utmData);\n\n // Clean URL after storing UTM data to avoid displaying parameters in plain text\n if (this.config.autoCleanUTM) {\n cleanURL();\n }\n }\n\n // Setup auto-tracking\n private setupAutoTracking(): void {\n this.autoTrackEnabled = true;\n\n // Track form interactions\n this.setupFormTracking();\n\n // Track link clicks\n this.setupLinkTracking();\n\n this.logger.info(\"Auto-tracking enabled\");\n }\n\n // Setup form tracking\n private setupFormTracking(): void {\n document.addEventListener(\"submit\", (event) => {\n try {\n const form = event.target as HTMLFormElement;\n if (!form) {\n return;\n }\n\n const fieldValues = this.serializeFormFields(form);\n\n this.trackEvent(EventType.FORM_SUBMIT, {\n ...fieldValues,\n form_id: form.id || form.name,\n form_action: form.action,\n form_method: form.method,\n });\n } catch (error) {\n this.logger.error(\"Failed to auto-track form submit:\", error);\n }\n });\n }\n\n // Serialize all fields within a form to a flat key-value map\n private serializeFormFields(form: HTMLFormElement): Record<string, any> {\n const result: Record<string, any> = {};\n\n try {\n const formData = new FormData(form);\n // Accumulate multiple values for the same name as arrays\n for (const [name, value] of formData.entries()) {\n const serializedValue = this.serializeFormValue(value);\n\n if (Object.prototype.hasOwnProperty.call(result, name)) {\n const existing = result[name];\n if (Array.isArray(existing)) {\n existing.push(serializedValue);\n result[name] = existing;\n } else {\n result[name] = [existing, serializedValue];\n }\n } else {\n result[name] = serializedValue;\n }\n }\n\n // Ensure all named fields are represented, including unchecked radios/checkboxes\n const elements = Array.from(form.elements) as Array<\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n >;\n\n // Group elements by name\n const nameToElements = new Map<\n string,\n Array<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>\n >();\n for (const el of elements) {\n const name = (el as HTMLInputElement | HTMLSelectElement).name;\n if (!name || (el as any).disabled) continue;\n if (!nameToElements.has(name)) nameToElements.set(name, []);\n nameToElements.get(name)!.push(el);\n }\n\n nameToElements.forEach((els, name) => {\n // Determine the dominant type for a group (radio/checkbox take precedence)\n const hasRadio = els.some(\n (e) => (e as HTMLInputElement).type === \"radio\"\n );\n const hasCheckbox = els.some(\n (e) => (e as HTMLInputElement).type === \"checkbox\"\n );\n const hasFile = els.some(\n (e) => (e as HTMLInputElement).type === \"file\"\n );\n const hasSelectMultiple = els.some(\n (e) => e.tagName === \"SELECT\" && (e as HTMLSelectElement).multiple\n );\n const hasPassword = els.some(\n (e) => (e as HTMLInputElement).type === \"password\"\n );\n\n if (hasCheckbox) {\n const checkedValues = (els as HTMLInputElement[])\n .filter((e) => e.type === \"checkbox\")\n .filter((e) => e.checked)\n .map((e) => e.value || \"on\");\n if (!Object.prototype.hasOwnProperty.call(result, name)) {\n result[name] = checkedValues; // [] when none checked\n } else if (!Array.isArray(result[name])) {\n result[name] = [result[name], ...checkedValues];\n }\n return;\n }\n\n if (hasRadio) {\n const checked = (els as HTMLInputElement[])\n .filter((e) => e.type === \"radio\")\n .find((e) => e.checked);\n if (!Object.prototype.hasOwnProperty.call(result, name)) {\n result[name] = checked ? checked.value : null;\n }\n return;\n }\n\n if (hasSelectMultiple) {\n const select = els.find(\n (e) => e.tagName === \"SELECT\" && (e as HTMLSelectElement).multiple\n ) as HTMLSelectElement | undefined;\n if (select) {\n const selectedValues = Array.from(select.selectedOptions).map(\n (opt) => opt.value\n );\n if (!Object.prototype.hasOwnProperty.call(result, name)) {\n result[name] = selectedValues; // [] when none selected\n }\n return;\n }\n }\n\n if (hasFile) {\n const input = els.find(\n (e) => (e as HTMLInputElement).type === \"file\"\n ) as HTMLInputElement | undefined;\n if (input) {\n const files = input.files ? Array.from(input.files) : [];\n if (!Object.prototype.hasOwnProperty.call(result, name)) {\n result[name] = files.map((f) => this.serializeFormValue(f));\n }\n return;\n }\n }\n\n if (hasPassword) {\n // Mask password fields\n if (Object.prototype.hasOwnProperty.call(result, name)) {\n result[name] =\n typeof result[name] === \"string\" ? \"*****\" : result[name];\n } else {\n result[name] = \"*****\";\n }\n return;\n }\n\n // For other inputs/selects/textarea, ensure at least an entry exists\n if (!Object.prototype.hasOwnProperty.call(result, name)) {\n const first = els[0] as\n | HTMLInputElement\n | HTMLSelectElement\n | HTMLTextAreaElement;\n if (first.tagName === \"SELECT\") {\n const select = first as HTMLSelectElement;\n result[name] = select.multiple\n ? Array.from(select.selectedOptions).map((o) => o.value)\n : select.value;\n } else if ((first as HTMLInputElement).type) {\n result[name] = (first as HTMLInputElement).value ?? \"\";\n } else {\n result[name] = (first as HTMLTextAreaElement).value ?? \"\";\n }\n }\n });\n } catch (error) {\n this.logger.error(\"Failed to serialize form fields:\", error);\n }\n\n return result;\n }\n\n // Convert FormData value to a serializable value\n private serializeFormValue(value: FormDataEntryValue): any {\n if (value instanceof File) {\n return {\n file_name: value.name,\n file_size: value.size,\n file_type: value.type,\n };\n }\n return value;\n }\n\n // Setup link tracking\n private setupLinkTracking(): void {\n document.addEventListener(\"click\", (event) => {\n const target = event.target as HTMLElement;\n const link = target.closest(\"a\");\n\n if (link) {\n const href = link.href;\n const isExternal = isExternalURL(href);\n\n if (isExternal) {\n // Handle cross-domain UTM passing\n this.handleCrossDomainUTM(link, event);\n }\n }\n });\n }\n\n // Handle cross-domain UTM parameter passing\n private handleCrossDomainUTM(link: HTMLAnchorElement, event: Event): void {\n if (!this.config.enableCrossDomainUTM) {\n return;\n }\n\n const href = link.href;\n\n // Check if domain should be excluded\n if (shouldExcludeDomain(href, this.config.excludeDomains)) {\n this.logger.debug(`Domain excluded from UTM passing: ${href}`);\n return;\n }\n\n // Get current UTM data\n const attributionData = this.getAttributionData();\n if (!attributionData) {\n this.logger.debug(\"No UTM data available for cross-domain passing\");\n return;\n }\n\n // Filter UTM parameters based on configuration\n const utmParams = filterUTMParams(\n attributionData.lastTouch,\n this.config.crossDomainUTMParams\n );\n\n if (Object.keys(utmParams).length === 0) {\n this.logger.debug(\"No UTM parameters to pass\");\n return;\n }\n\n // Add UTM parameters to URL\n const enhancedURL = addUTMToURL(href, utmParams);\n\n if (enhancedURL !== href) {\n // Update the link href\n link.href = enhancedURL;\n\n this.logger.debug(\"UTM parameters added to external link:\", {\n original: href,\n enhanced: enhancedURL,\n utmParams,\n });\n\n this.logger.debug(\"Cross-domain UTM passed:\", {\n link_url: enhancedURL,\n original_url: href,\n utm_params_passed: utmParams,\n });\n }\n }\n\n // Setup network handlers\n private setupNetworkHandlers(): void {\n window.addEventListener(\"online\", () => {\n this.logger.info(\"Network connection restored\");\n this.queue.flush();\n });\n\n window.addEventListener(\"offline\", () => {\n this.logger.warn(\"Network connection lost\");\n });\n }\n\n // Setup visibility handlers\n private setupVisibilityHandlers(): void {\n document.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === \"visible\") {\n this.updateSessionActivity();\n }\n });\n }\n\n // Setup beforeunload handler\n private setupBeforeUnloadHandler(): void {\n window.addEventListener(\"beforeunload\", () => {\n this.updateSessionActivity();\n this.queue.flush();\n });\n }\n\n // Get current path (pathname + search) for comparison\n private getCurrentPath(): string {\n if (typeof window === \"undefined\") return \"\";\n return window.location.pathname + window.location.search;\n }\n\n // Setup SPA (Single Page Application) route tracking\n private setupSPATracking(): void {\n if (typeof window === \"undefined\" || typeof history === \"undefined\") {\n this.logger.warn(\"⚠️ SPA tracking not available in this environment\");\n return;\n }\n\n if (this.spaTrackingEnabled) {\n this.logger.warn(\"⚠️ SPA tracking already enabled\");\n return;\n }\n\n this.spaTrackingEnabled = true;\n this.lastTrackedPath = this.getCurrentPath();\n\n // Store original methods\n this.originalPushState = history.pushState.bind(history);\n this.originalReplaceState = history.replaceState.bind(history);\n\n // Create a handler for route changes\n const handleRouteChange = (changeType: string) => {\n const newPath = this.getCurrentPath();\n\n // Only track if path actually changed\n if (newPath === this.lastTrackedPath) {\n this.logger.debug(\n `🔄 [SPA] Route change detected (${changeType}) but path unchanged: ${newPath}`\n );\n return;\n }\n\n this.logger.debug(\n `🔄 [SPA] Route change detected (${changeType}): ${this.lastTrackedPath} -> ${newPath}`\n );\n this.lastTrackedPath = newPath;\n\n // Delay tracking to allow page title and content to update (100ms is sufficient for most frameworks)\n setTimeout(() => {\n this.trackPageView()\n .then(() => {\n this.logger.debug(`✅ [SPA] Page view tracked for: ${newPath}`);\n })\n .catch((error) => {\n this.logger.error(`❌ [SPA] Failed to track page view:`, error);\n });\n }, 100);\n };\n\n // Override history.pushState\n history.pushState = (\n data: any,\n unused: string,\n url?: string | URL | null\n ) => {\n const result = this.originalPushState!(data, unused, url);\n handleRouteChange(\"pushState\");\n return result;\n };\n\n // Override history.replaceState\n history.replaceState = (\n data: any,\n unused: string,\n url?: string | URL | null\n ) => {\n const result = this.originalReplaceState!(data, unused, url);\n handleRouteChange(\"replaceState\");\n return result;\n };\n\n // Listen for popstate (browser back/forward)\n this.popstateHandler = () => {\n handleRouteChange(\"popstate\");\n };\n window.addEventListener(\"popstate\", this.popstateHandler);\n\n this.logger.info(\"🔄 SPA tracking setup completed\");\n }\n\n // Cleanup SPA tracking (restore original methods)\n private cleanupSPATracking(): void {\n if (!this.spaTrackingEnabled) return;\n\n // Restore original history methods\n if (this.originalPushState) {\n history.pushState = this.originalPushState;\n this.originalPushState = null;\n }\n if (this.originalReplaceState) {\n history.replaceState = this.originalReplaceState;\n this.originalReplaceState = null;\n }\n\n // Remove popstate listener\n if (this.popstateHandler) {\n window.removeEventListener(\"popstate\", this.popstateHandler);\n this.popstateHandler = null;\n }\n\n this.spaTrackingEnabled = false;\n this.logger.info(\"🔄 SPA tracking cleaned up\");\n }\n\n // Update session activity\n private updateSessionActivity(): void {\n if (this.session) {\n this.session.lastActivity = Date.now();\n this.storage.storeSession(this.session);\n }\n }\n\n // Flush all pending events\n async flush(): Promise<void> {\n await this.queue.flush();\n }\n\n // Get SDK status\n getStatus(): {\n initialized: boolean;\n session: UserSession | null;\n queueSize: number;\n online: boolean;\n crossDomainUTM: {\n enabled: boolean;\n currentParams: Record<string, string>;\n };\n spaTracking: {\n enabled: boolean;\n currentPath: string;\n };\n } {\n return {\n initialized: this.initialized,\n session: this.session,\n queueSize: this.queue.size(),\n online: isOnline(),\n crossDomainUTM: {\n enabled: this.config.enableCrossDomainUTM || true,\n currentParams: this.getCurrentUTMParams(),\n },\n spaTracking: {\n enabled: this.spaTrackingEnabled,\n currentPath: this.lastTrackedPath,\n },\n };\n }\n\n // Destroy SDK instance\n destroy(): void {\n this.queue.clear();\n this.autoTrackEnabled = false;\n this.cleanupSPATracking();\n this.initialized = false;\n this.logger.info(\"🗑️ SDK destroyed\");\n }\n}\n","import { AttributionSDK } from \"./core/AttributionSDK\";\nimport {\n SDKConfig,\n EventType,\n Currency,\n EventData,\n AttributionData,\n defaultEndpoint,\n} from \"./types\";\n\n// Global SDK instance\nlet globalSDK: AttributionSDK | null = null;\n\n// Auto-initialization function\nfunction autoInit(): void {\n // Check if SDK is already initialized\n if (globalSDK) {\n return;\n }\n\n // Look for configuration in script tag\n const script = document.currentScript as HTMLScriptElement;\n if (!script) {\n console.warn(\n \"GetuAI SDK: Could not find script tag for auto-initialization\"\n );\n return;\n }\n\n const apiKey = script.getAttribute(\"data-api-key\");\n if (!apiKey) {\n console.warn(\n \"GetuAI SDK: No API key provided. Please add data-api-key attribute to script tag.\"\n );\n return;\n }\n const apiEndpoint =\n script.getAttribute(\"data-api-endpoint\") || defaultEndpoint;\n const config: SDKConfig = {\n apiKey,\n apiEndpoint,\n enableDebug: script.getAttribute(\"data-debug\") === \"true\",\n autoTrack: script.getAttribute(\"data-auto-track\") === \"true\",\n autoTrackPageView:\n script.getAttribute(\"data-auto-track-page-view\") === \"true\",\n autoCleanUTM: script.getAttribute(\"data-auto-clean-utm\") !== \"false\",\n batchSize: parseInt(script.getAttribute(\"data-batch-size\") || \"100\"),\n batchInterval: parseInt(\n script.getAttribute(\"data-batch-interval\") || \"2000\"\n ),\n userId: script.getAttribute(\"data-user-id\") || undefined,\n };\n\n // Initialize SDK\n init(config);\n}\n\n// Initialize SDK with configuration\nasync function init(config: SDKConfig): Promise<AttributionSDK> {\n if (globalSDK) {\n console.warn(\"GetuAI SDK: Already initialized\");\n return globalSDK;\n }\n\n try {\n globalSDK = new AttributionSDK(config);\n await globalSDK.init();\n\n // Expose SDK to global scope for debugging\n if (config.enableDebug) {\n (window as any).GetuAISDK = globalSDK;\n }\n\n console.log(\"GetuAI Attribution SDK initialized successfully\");\n\n // Dispatch initialization complete event\n if (typeof window !== \"undefined\") {\n const event = new CustomEvent(\"getuaiSDKReady\", {\n detail: { sdk: globalSDK },\n });\n window.dispatchEvent(event);\n }\n\n return globalSDK;\n } catch (error) {\n console.error(\"GetuAI SDK: Failed to initialize:\", error);\n\n // Dispatch initialization error event\n if (typeof window !== \"undefined\") {\n const event = new CustomEvent(\"getuaiSDKError\", {\n detail: { error },\n });\n window.dispatchEvent(event);\n }\n\n throw error;\n }\n}\n\n// Get current SDK instance\nfunction getSDK(): AttributionSDK | null {\n return globalSDK;\n}\n\n// Wait for SDK to be ready\nfunction waitForSDK(): Promise<AttributionSDK> {\n return new Promise((resolve, reject) => {\n if (globalSDK) {\n resolve(globalSDK);\n return;\n }\n\n // Listen for SDK ready event\n const handleReady = (event: CustomEvent) => {\n window.removeEventListener(\n \"getuaiSDKReady\",\n handleReady as EventListener\n );\n window.removeEventListener(\n \"getuaiSDKError\",\n handleError as EventListener\n );\n resolve(event.detail.sdk);\n };\n\n const handleError = (event: CustomEvent) => {\n window.removeEventListener(\n \"getuaiSDKReady\",\n handleReady as EventListener\n );\n window.removeEventListener(\n \"getuaiSDKError\",\n handleError as EventListener\n );\n reject(event.detail.error);\n };\n\n window.addEventListener(\"getuaiSDKReady\", handleReady as EventListener);\n window.addEventListener(\"getuaiSDKError\", handleError as EventListener);\n\n // Timeout after 10 seconds\n setTimeout(() => {\n window.removeEventListener(\n \"getuaiSDKReady\",\n handleReady as EventListener\n );\n window.removeEventListener(\n \"getuaiSDKError\",\n handleError as EventListener\n );\n reject(new Error(\"SDK initialization timeout\"));\n }, 10000);\n });\n}\n\n// Track event\nasync function trackEvent(\n eventType: EventType,\n eventData?: Record<string, any>,\n tracking_user_id?: string,\n revenue?: number,\n currency: Currency = Currency.USD\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackEvent(\n eventType,\n eventData,\n tracking_user_id,\n revenue,\n currency\n );\n}\n\n// Track page view\nasync function trackPageView(\n pageData?: Record<string, any>,\n tracking_user_id?: string\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackPageView(pageData, tracking_user_id);\n}\n\n// Track purchase\nasync function trackPurchase(\n tracking_user_id: string,\n revenue: number,\n currency: Currency = Currency.USD,\n purchaseData?: Record<string, any>\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackPurchase(tracking_user_id, revenue, currency, purchaseData);\n}\n\n// Track login\nasync function trackLogin(\n tracking_user_id: string,\n loginData?: Record<string, any>\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackLogin(tracking_user_id, loginData);\n}\n\n// Track signup\n\nasync function trackSignup(\n tracking_user_id: string,\n signupData?: Record<string, any>\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackSignup(tracking_user_id, signupData);\n}\n\n// Track form submission\nasync function trackFormSubmit(\n tracking_user_id?: string,\n formData?: Record<string, any>\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackFormSubmit(tracking_user_id, formData);\n}\n\n// Track video play\nasync function trackVideoPlay(\n tracking_user_id?: string,\n videoData?: Record<string, any>\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackVideoPlay(tracking_user_id, videoData);\n}\n\n// Track email verification\nasync function trackEmailVerification(\n tracking_user_id: string,\n verificationData?: Record<string, any>\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackEmailVerification(tracking_user_id, verificationData);\n}\n\n// Track purchase with auto user ID (object parameter format)\nasync function trackPurchaseAuto(options: {\n revenue: number;\n currency?: Currency;\n purchaseData?: Record<string, any>;\n tracking_user_id?: string;\n}): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackPurchaseAuto(options);\n}\n\n// Track login with auto user ID (object parameter format)\nasync function trackLoginAuto(options: {\n loginData?: Record<string, any>;\n tracking_user_id?: string;\n}): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackLoginAuto(options);\n}\n\n// Track signup with auto user ID (object parameter format)\nasync function trackSignupAuto(options: {\n signupData?: Record<string, any>;\n tracking_user_id?: string;\n}): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackSignupAuto(options);\n}\n\n// Track email verification with auto user ID (object parameter format)\nasync function trackEmailVerificationAuto(options: {\n verificationData?: Record<string, any>;\n tracking_user_id?: string;\n}): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackEmailVerificationAuto(options);\n}\n\n// Track product view\nasync function trackProductView(\n tracking_user_id?: string,\n productData?: Record<string, any>\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackProductView(tracking_user_id, productData);\n}\n\n// Track add to cart\nasync function trackAddToCart(\n tracking_user_id?: string,\n cartData?: Record<string, any>\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackAddToCart(tracking_user_id, cartData);\n}\n\n// Track page click for user click journey\nasync function trackPageClick(\n tracking_user_id?: string,\n clickData?: Record<string, any>\n): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.trackPageClick(tracking_user_id, clickData);\n}\n\n// Get attribution data\nfunction getAttributionData() {\n const sdk = getSDK();\n if (!sdk) {\n return null;\n }\n\n return sdk.getAttributionData();\n}\n\n// Flush pending events\nasync function flush(): Promise<void> {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n await sdk.flush();\n}\n\n// Get SDK status\nfunction getStatus() {\n const sdk = getSDK();\n if (!sdk) {\n return null;\n }\n\n return sdk.getStatus();\n}\n\n// Add UTM to URL\nfunction addUTMToURL(url: string): string {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return url;\n }\n\n return sdk.addUTMToURL(url);\n}\n\n// Get current UTM parameters\nfunction getCurrentUTMParams(): Record<string, string> {\n const sdk = getSDK();\n if (!sdk) {\n return {};\n }\n\n return sdk.getCurrentUTMParams();\n}\n\n// Set user ID\nfunction setUserId(userId: string): void {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n sdk.setUserId(userId);\n}\n\n// Get user ID\nfunction getUserId(): string | null {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return null;\n }\n\n return sdk.getUserId();\n}\n\n// Remove user ID\nfunction removeUserId(): void {\n const sdk = getSDK();\n if (!sdk) {\n console.warn(\"GetuAI SDK: Not initialized. Call init() first.\");\n return;\n }\n\n sdk.removeUserId();\n}\n\n// Destroy SDK\nfunction destroy(): void {\n if (globalSDK) {\n globalSDK.destroy();\n globalSDK = null;\n console.log(\"GetuAI SDK destroyed\");\n }\n}\n\n// Extend AttributionSDK class with static methods\nclass AttributionSDKStatic extends AttributionSDK {\n // Static method to initialize SDK\n static async init(config: SDKConfig): Promise<AttributionSDK> {\n return await init(config);\n }\n\n // Static method to track event\n static async trackEvent(\n eventType: EventType,\n eventData?: Record<string, any>,\n tracking_user_id?: string,\n revenue?: number,\n currency: Currency = Currency.USD\n ): Promise<void> {\n return await trackEvent(\n eventType,\n eventData,\n tracking_user_id,\n revenue,\n currency\n );\n }\n\n // Static method to track page view\n static async trackPageView(\n pageData?: Record<string, any>,\n tracking_user_id?: string\n ): Promise<void> {\n return await trackPageView(pageData, tracking_user_id);\n }\n\n // Static method to track purchase\n static async trackPurchase(\n tracking_user_id: string,\n revenue: number,\n currency: Currency = Currency.USD,\n purchaseData?: Record<string, any>\n ): Promise<void> {\n return await trackPurchase(\n tracking_user_id,\n revenue,\n currency,\n purchaseData\n );\n }\n\n // Static method to track login\n static async trackLogin(\n tracking_user_id: string,\n loginData?: Record<string, any>\n ): Promise<void> {\n return await trackLogin(tracking_user_id, loginData);\n }\n\n // Static method to track signup\n static async trackSignup(\n tracking_user_id: string,\n signupData?: Record<string, any>\n ): Promise<void> {\n return await trackSignup(tracking_user_id, signupData);\n }\n\n // Static method to track form submission\n static async trackFormSubmit(\n tracking_user_id?: string,\n formData?: Record<string, any>\n ): Promise<void> {\n return await trackFormSubmit(tracking_user_id, formData);\n }\n\n // Static method to track video play\n static async trackVideoPlay(\n tracking_user_id?: string,\n videoData?: Record<string, any>\n ): Promise<void> {\n return await trackVideoPlay(tracking_user_id, videoData);\n }\n\n // Static method to track email verification\n static async trackEmailVerification(\n tracking_user_id: string,\n verificationData?: Record<string, any>\n ): Promise<void> {\n return await trackEmailVerification(tracking_user_id, verificationData);\n }\n\n // Static method to track purchase with auto user ID\n static async trackPurchaseAuto(options: {\n revenue: number;\n currency?: Currency;\n purchaseData?: Record<string, any>;\n tracking_user_id?: string;\n }): Promise<void> {\n return await trackPurchaseAuto(options);\n }\n\n // Static method to track login with auto user ID\n static async trackLoginAuto(options: {\n loginData?: Record<string, any>;\n tracking_user_id?: string;\n }): Promise<void> {\n return await trackLoginAuto(options);\n }\n\n // Static method to track signup with auto user ID\n static async trackSignupAuto(options: {\n signupData?: Record<string, any>;\n tracking_user_id?: string;\n }): Promise<void> {\n return await trackSignupAuto(options);\n }\n\n // Static method to track email verification with auto user ID\n static async trackEmailVerificationAuto(options: {\n verificationData?: Record<string, any>;\n tracking_user_id?: string;\n }): Promise<void> {\n return await trackEmailVerificationAuto(options);\n }\n\n // Static method to track product view\n static async trackProductView(\n tracking_user_id?: string,\n productData?: Record<string, any>\n ): Promise<void> {\n return await trackProductView(tracking_user_id, productData);\n }\n\n // Static method to track add to cart\n static async trackAddToCart(\n tracking_user_id?: string,\n cartData?: Record<string, any>\n ): Promise<void> {\n return await trackAddToCart(tracking_user_id, cartData);\n }\n\n // Static method to track page click\n static async trackPageClick(\n tracking_user_id?: string,\n clickData?: Record<string, any>\n ): Promise<void> {\n return await trackPageClick(tracking_user_id, clickData);\n }\n\n // Static method to get attribution data\n static getAttributionData(): AttributionData | null {\n return getAttributionData();\n }\n\n // Static method to flush events\n static async flush(): Promise<void> {\n return await flush();\n }\n\n // Static method to get status\n static getStatus() {\n return getStatus();\n }\n\n // Static method to add UTM to URL\n static addUTMToURL(url: string): string {\n return addUTMToURL(url);\n }\n\n // Static method to get current UTM parameters\n static getCurrentUTMParams(): Record<string, string> {\n return getCurrentUTMParams();\n }\n\n // Static method to set user ID\n static setUserId(userId: string): void {\n setUserId(userId);\n }\n\n // Static method to get user ID\n static getUserId(): string | null {\n return getUserId();\n }\n\n // Static method to remove user ID\n static removeUserId(): void {\n removeUserId();\n }\n\n // Static method to destroy SDK\n static destroy(): void {\n destroy();\n }\n\n // Static method to get SDK instance\n static getSDK(): AttributionSDK | null {\n return getSDK();\n }\n\n // Static method to wait for SDK\n static waitForSDK(): Promise<AttributionSDK> {\n return waitForSDK();\n }\n}\n\n// Export types\nexport {\n EventType,\n Currency,\n type SDKConfig,\n type EventData,\n type AttributionData,\n};\n\n// Export main functions\nexport {\n init,\n getSDK,\n waitForSDK,\n trackEvent,\n trackPageView,\n trackPageClick,\n trackPurchase,\n trackLogin,\n trackSignup,\n trackFormSubmit,\n trackVideoPlay,\n trackEmailVerification,\n trackProductView,\n trackAddToCart,\n trackPurchaseAuto,\n trackLoginAuto,\n trackSignupAuto,\n trackEmailVerificationAuto,\n getAttributionData,\n flush,\n getStatus,\n addUTMToURL,\n getCurrentUTMParams,\n setUserId,\n getUserId,\n removeUserId,\n destroy,\n};\n\n// Export AttributionSDK class for advanced usage\nexport { AttributionSDKStatic as AttributionSDK };\n\n// Auto-initialize if script is loaded with data-api-key\nif (typeof document !== \"undefined\") {\n // Initialize immediately when script loads, don't wait for DOMContentLoaded\n // This ensures SDK is ready before any body scripts execute\n autoInit();\n}\n\n// Expose functions to global scope for browser usage\nif (typeof window !== \"undefined\") {\n (window as any).getuaiSDK = {\n init,\n getSDK,\n waitForSDK,\n trackEvent,\n trackPageView,\n trackPageClick,\n trackPurchase,\n trackLogin,\n trackSignup,\n trackFormSubmit,\n trackVideoPlay,\n trackEmailVerification,\n trackProductView,\n trackAddToCart,\n trackPurchaseAuto,\n trackLoginAuto,\n trackSignupAuto,\n trackEmailVerificationAuto,\n getAttributionData,\n flush,\n getStatus,\n addUTMToURL,\n getCurrentUTMParams,\n setUserId,\n getUserId,\n removeUserId,\n destroy,\n EventType,\n Currency,\n AttributionSDK: AttributionSDKStatic, // 暴露带静态方法的AttributionSDK类\n };\n\n // Also expose individual functions for backward compatibility\n (window as any).init = init;\n (window as any).waitForSDK = waitForSDK;\n (window as any).trackEvent = trackEvent;\n (window as any).trackPageView = trackPageView;\n (window as any).trackPageClick = trackPageClick;\n (window as any).trackPurchase = trackPurchase;\n (window as any).trackLogin = trackLogin;\n (window as any).trackSignup = trackSignup;\n (window as any).trackFormSubmit = trackFormSubmit;\n (window as any).trackVideoPlay = trackVideoPlay;\n (window as any).trackEmailVerification = trackEmailVerification;\n (window as any).trackProductView = trackProductView;\n (window as any).trackAddToCart = trackAddToCart;\n (window as any).trackPurchaseAuto = trackPurchaseAuto;\n (window as any).trackLoginAuto = trackLoginAuto;\n (window as any).trackSignupAuto = trackSignupAuto;\n (window as any).trackEmailVerificationAuto = trackEmailVerificationAuto;\n (window as any).getAttributionData = getAttributionData;\n (window as any).flush = flush;\n (window as any).getStatus = getStatus;\n (window as any).addUTMToURL = addUTMToURL;\n (window as any).getCurrentUTMParams = getCurrentUTMParams;\n (window as any).setUserId = setUserId;\n (window as any).getUserId = getUserId;\n (window as any).removeUserId = removeUserId;\n (window as any).destroy = destroy;\n (window as any).AttributionSDK = AttributionSDKStatic; // 直接暴露带静态方法的AttributionSDK类\n}\n\n// Default export\nexport default {\n init,\n getSDK,\n waitForSDK,\n trackEvent,\n trackPageView,\n trackPageClick,\n trackPurchase,\n trackLogin,\n trackSignup,\n trackFormSubmit,\n trackVideoPlay,\n trackEmailVerification,\n trackProductView,\n trackAddToCart,\n trackPurchaseAuto,\n trackLoginAuto,\n trackSignupAuto,\n trackEmailVerificationAuto,\n getAttributionData,\n flush,\n getStatus,\n addUTMToURL,\n getCurrentUTMParams,\n setUserId,\n getUserId,\n removeUserId,\n destroy,\n EventType,\n Currency,\n AttributionSDK: AttributionSDKStatic, // 包含带静态方法的AttributionSDK类\n};\n"],"names":["addUTMToURL"],"mappings":"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"}