@productbet/tracker-core 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/types.ts","../src/logger.ts","../src/session.ts","../src/api-client.ts","../src/auto-tracker.ts","../src/recorder.ts","../src/console-tracker.ts","../src/network-tracker.ts","../src/tracker.ts"],"sourcesContent":["export interface TrackerOptions {\n ingestionUrl?: string\n enableSessionRecording?: boolean\n enableAutoTracking?: boolean\n autoTrackingOptions?: AutoTrackingOptions\n redaction?: RedactionOptions\n maxQueueSize?: number\n flushIntervalMs?: number\n enableConsoleTracking?: boolean\n enableNetworkTracking?: boolean\n recordCanvas?: boolean\n sessionTimeoutMs?: number\n debug?: boolean\n}\n\nexport interface AutoTrackingOptions {\n trackClicks?: boolean\n trackForms?: boolean\n trackNavigation?: boolean\n trackScrollDepth?: boolean\n detectRageClicks?: boolean\n detectDeadClicks?: boolean\n includeText?: boolean\n includeClasses?: boolean\n}\n\nexport interface RedactionOptions {\n mode: \"privacy-first\" | \"visibility-first\"\n unredactFields?: string[]\n}\n\nexport interface UserProperties {\n userId: string\n attributes?: Record<string, unknown>\n}\n\nexport interface TrackedEvent {\n type: EventType\n timestamp: number\n data: Record<string, unknown>\n sessionId: string\n windowId?: string\n}\n\nexport type EventType =\n | \"session_start\"\n | \"session_end\"\n | \"page_view\"\n | \"click\"\n | \"form_submit\"\n | \"form_change\"\n | \"scroll_depth\"\n | \"rage_click\"\n | \"dead_click\"\n | \"custom\"\n | \"console_error\"\n | \"console_warn\"\n | \"network_error\"\n | \"rrweb\"\n\nexport interface EventBatch {\n sessionId: string\n windowId?: string\n events: TrackedEvent[]\n replayEvents?: unknown[]\n endUserId?: string | null\n sdkVersion: string\n timestamp: number\n}\n\nexport interface IdentifyPayload {\n userId: string\n attributes: Record<string, unknown>\n sessionId: string\n}\n\nexport interface CustomEventPayload {\n sessionId: string\n eventName: string\n eventProperties: Record<string, unknown>\n endUserId?: string | null\n}\n\nexport interface IngestionResponse {\n success: boolean\n sessionCreated?: boolean\n monthlyLimitReached?: boolean\n}\n\nexport interface ElementInfo {\n tag: string\n id?: string\n classes?: string[]\n text?: string\n href?: string\n name?: string\n type?: string\n selector: string\n}\n\nexport const DEFAULT_OPTIONS: Required<TrackerOptions> = {\n ingestionUrl: \"https://productbet.io/tracking\",\n enableSessionRecording: false,\n enableAutoTracking: true,\n autoTrackingOptions: {\n trackClicks: true,\n trackForms: true,\n trackNavigation: true,\n trackScrollDepth: true,\n detectRageClicks: true,\n detectDeadClicks: true,\n includeText: true,\n includeClasses: true,\n },\n redaction: {\n mode: \"privacy-first\",\n unredactFields: [],\n },\n maxQueueSize: 1000,\n flushIntervalMs: 3000,\n enableConsoleTracking: true,\n enableNetworkTracking: true,\n recordCanvas: false,\n sessionTimeoutMs: 30 * 60 * 1000,\n debug: false,\n}\n\nexport const SDK_VERSION = \"0.1.0\"\n","let debugEnabled = false\n\nexport function setDebug(enabled: boolean): void {\n debugEnabled = enabled\n}\n\nexport function debug(...args: unknown[]): void {\n if (debugEnabled) {\n console.log(\"[ProductBet]\", ...args)\n }\n}\n\nexport function warn(...args: unknown[]): void {\n console.warn(\"[ProductBet]\", ...args)\n}\n\nexport function error(...args: unknown[]): void {\n console.error(\"[ProductBet]\", ...args)\n}\n","import { debug } from \"./logger\"\n\nconst STORAGE_KEY = \"pb_session\"\nconst WINDOW_ID_KEY = \"pb_window_id\"\n\ninterface PersistedSession {\n sessionId: string\n lastActivityAt: number\n startedAt: number\n}\n\nfunction generateId(): string {\n const chars = \"abcdefghijklmnopqrstuvwxyz0123456789\"\n const segments = [8, 4, 4, 12]\n return segments\n .map((len) =>\n Array.from({ length: len }, () =>\n chars[Math.floor(Math.random() * chars.length)],\n ).join(\"\"),\n )\n .join(\"-\")\n}\n\nexport class SessionManager {\n private sessionId: string\n private windowId: string\n private startedAt: number\n private lastActivityAt: number\n private timeoutMs: number\n\n constructor(timeoutMs: number) {\n this.timeoutMs = timeoutMs\n this.windowId = this.getOrCreateWindowId()\n\n const restored = this.restore()\n if (restored) {\n this.sessionId = restored.sessionId\n this.startedAt = restored.startedAt\n this.lastActivityAt = restored.lastActivityAt\n debug(\"Restored session\", this.sessionId)\n } else {\n this.sessionId = generateId()\n this.startedAt = Date.now()\n this.lastActivityAt = Date.now()\n this.persist()\n debug(\"Created new session\", this.sessionId)\n }\n }\n\n getSessionId(): string {\n return this.sessionId\n }\n\n getWindowId(): string {\n return this.windowId\n }\n\n getStartedAt(): number {\n return this.startedAt\n }\n\n touch(): void {\n this.lastActivityAt = Date.now()\n this.persist()\n }\n\n isExpired(): boolean {\n return Date.now() - this.lastActivityAt > this.timeoutMs\n }\n\n rotate(): string {\n this.sessionId = generateId()\n this.startedAt = Date.now()\n this.lastActivityAt = Date.now()\n this.persist()\n debug(\"Rotated session\", this.sessionId)\n return this.sessionId\n }\n\n private persist(): void {\n try {\n const data: PersistedSession = {\n sessionId: this.sessionId,\n lastActivityAt: this.lastActivityAt,\n startedAt: this.startedAt,\n }\n localStorage.setItem(STORAGE_KEY, JSON.stringify(data))\n } catch {\n // localStorage may be unavailable (SSR, private browsing)\n }\n }\n\n private restore(): PersistedSession | null {\n try {\n const raw = localStorage.getItem(STORAGE_KEY)\n if (!raw) return null\n\n const data: PersistedSession = JSON.parse(raw)\n if (Date.now() - data.lastActivityAt > this.timeoutMs) {\n localStorage.removeItem(STORAGE_KEY)\n return null\n }\n return data\n } catch {\n return null\n }\n }\n\n private getOrCreateWindowId(): string {\n try {\n let id = sessionStorage.getItem(WINDOW_ID_KEY)\n if (!id) {\n id = generateId()\n sessionStorage.setItem(WINDOW_ID_KEY, id)\n }\n return id\n } catch {\n return generateId()\n }\n }\n}\n","import type {\n EventBatch,\n IdentifyPayload,\n CustomEventPayload,\n IngestionResponse,\n TrackedEvent,\n} from \"./types\"\nimport { SDK_VERSION } from \"./types\"\nimport { debug, warn, error as logError } from \"./logger\"\n\nconst MAX_PAYLOAD_BYTES = 1_000_000\nconst RETRY_DELAYS = [1000, 2000, 4000, 8000]\nconst QUEUE_STORAGE_KEY = \"pb_event_queue\"\nconst MIN_SESSION_DURATION_MS = 5_000\n\nexport class ApiClient {\n private apiKey: string\n private ingestionUrl: string\n private queue: TrackedEvent[] = []\n private replayQueue: unknown[] = []\n private maxQueueSize: number\n private flushIntervalMs: number\n private flushTimer: ReturnType<typeof setInterval> | null = null\n private sessionId: string\n private windowId?: string\n private endUserId: string | null = null\n private isFlushing = false\n private monthlyLimitReached = false\n private startedAt = Date.now()\n private sessionMatureEnough = false\n\n constructor(\n apiKey: string,\n ingestionUrl: string,\n sessionId: string,\n maxQueueSize: number,\n flushIntervalMs: number,\n windowId?: string,\n ) {\n this.apiKey = apiKey\n this.ingestionUrl = ingestionUrl.replace(/\\/$/, \"\")\n this.sessionId = sessionId\n this.windowId = windowId\n this.maxQueueSize = maxQueueSize\n this.flushIntervalMs = flushIntervalMs\n\n this.restoreQueue()\n }\n\n start(): void {\n this.flushTimer = setInterval(() => this.flush(), this.flushIntervalMs)\n\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"beforeunload\", () => this.onUnload())\n document.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === \"hidden\") this.onUnload()\n })\n }\n\n debug(\"ApiClient started, flushing every\", this.flushIntervalMs, \"ms\")\n }\n\n stop(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer)\n this.flushTimer = null\n }\n this.flush()\n }\n\n updateSessionId(sessionId: string): void {\n this.sessionId = sessionId\n }\n\n setEndUserId(userId: string | null): void {\n this.endUserId = userId\n }\n\n enqueueEvent(event: TrackedEvent): void {\n if (this.monthlyLimitReached) return\n\n this.queue.push(event)\n\n if (this.queue.length >= this.maxQueueSize) {\n this.flush()\n }\n }\n\n enqueueReplayEvent(event: unknown): void {\n if (this.monthlyLimitReached) return\n this.replayQueue.push(event)\n }\n\n async sendIdentify(payload: IdentifyPayload): Promise<void> {\n try {\n await this.post(\"/identify\", payload)\n debug(\"Identify sent\", payload.userId)\n } catch (err) {\n logError(\"Failed to send identify\", err)\n }\n }\n\n async sendCustomEvent(payload: CustomEventPayload): Promise<void> {\n try {\n await this.post(\"/custom\", payload)\n debug(\"Custom event sent\", payload.eventName)\n } catch (err) {\n logError(\"Failed to send custom event\", err)\n }\n }\n\n private async flush(): Promise<void> {\n if (this.isFlushing) return\n if (this.queue.length === 0 && this.replayQueue.length === 0) return\n if (this.monthlyLimitReached) return\n\n if (!this.sessionMatureEnough) {\n if (Date.now() - this.startedAt < MIN_SESSION_DURATION_MS) {\n debug(\"Session too short, buffering events\")\n return\n }\n this.sessionMatureEnough = true\n }\n\n this.isFlushing = true\n\n const events = this.queue.splice(0)\n const replayEvents = this.replayQueue.splice(0)\n\n const batch: EventBatch = {\n sessionId: this.sessionId,\n windowId: this.windowId,\n events,\n replayEvents: replayEvents.length > 0 ? replayEvents : undefined,\n endUserId: this.endUserId,\n sdkVersion: SDK_VERSION,\n timestamp: Date.now(),\n }\n\n try {\n const payload = JSON.stringify(batch)\n\n if (payload.length > MAX_PAYLOAD_BYTES) {\n await this.sendChunked(events, replayEvents)\n } else {\n const response = await this.post(\"/events\", batch)\n if (response?.monthlyLimitReached) {\n this.monthlyLimitReached = true\n warn(\"Monthly event limit reached. Tracking paused.\")\n }\n }\n\n this.clearPersistedQueue()\n debug(\"Flushed\", events.length, \"events +\", replayEvents.length, \"replay events\")\n } catch {\n this.queue.unshift(...events)\n this.replayQueue.unshift(...replayEvents)\n this.persistQueue()\n warn(\"Flush failed, events re-queued\")\n } finally {\n this.isFlushing = false\n }\n }\n\n private async sendChunked(\n events: TrackedEvent[],\n replayEvents: unknown[],\n ): Promise<void> {\n const chunkSize = Math.ceil(events.length / 2)\n for (let i = 0; i < events.length; i += chunkSize) {\n const chunk = events.slice(i, i + chunkSize)\n const replayChunk =\n i === 0 ? replayEvents : []\n const batch: EventBatch = {\n sessionId: this.sessionId,\n windowId: this.windowId,\n events: chunk,\n replayEvents:\n replayChunk.length > 0 ? replayChunk : undefined,\n endUserId: this.endUserId,\n sdkVersion: SDK_VERSION,\n timestamp: Date.now(),\n }\n await this.post(\"/events\", batch)\n }\n }\n\n private async post(\n path: string,\n body: unknown,\n retryCount = 0,\n ): Promise<IngestionResponse | null> {\n const url = `${this.ingestionUrl}${path}`\n\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify(body),\n credentials: \"omit\",\n })\n\n if (response.status === 429) {\n this.monthlyLimitReached = true\n warn(\"Rate limited (429). Tracking paused.\")\n return { success: false, monthlyLimitReached: true }\n }\n\n if (response.status === 413 && retryCount === 0) {\n warn(\"Payload too large, will chunk on next flush\")\n return null\n }\n\n if (!response.ok) {\n let errorBody = \"\"\n try { errorBody = await response.text() } catch {}\n warn(`Ingestion error ${response.status}: ${errorBody}`)\n if (retryCount < RETRY_DELAYS.length) {\n const delay = RETRY_DELAYS[retryCount]!\n debug(\"Retrying in\", delay, \"ms (attempt\", retryCount + 1, \")\")\n await new Promise((r) => setTimeout(r, delay))\n return this.post(path, body, retryCount + 1)\n }\n throw new Error(`Ingestion failed: ${response.status}`)\n }\n\n return response.json()\n }\n\n private onUnload(): void {\n if (this.queue.length === 0 && this.replayQueue.length === 0) return\n\n const batch: EventBatch = {\n sessionId: this.sessionId,\n windowId: this.windowId,\n events: this.queue.splice(0),\n replayEvents:\n this.replayQueue.length > 0\n ? this.replayQueue.splice(0)\n : undefined,\n endUserId: this.endUserId,\n sdkVersion: SDK_VERSION,\n timestamp: Date.now(),\n }\n\n const url = `${this.ingestionUrl}/events`\n const payload = JSON.stringify(batch)\n\n if (typeof navigator.sendBeacon === \"function\") {\n const blob = new Blob([payload], { type: \"application/json\" })\n const sent = navigator.sendBeacon(url, blob)\n if (sent) {\n debug(\"Sent via sendBeacon on unload\")\n return\n }\n }\n\n this.persistQueue()\n }\n\n private persistQueue(): void {\n try {\n if (this.queue.length > 0) {\n localStorage.setItem(\n QUEUE_STORAGE_KEY,\n JSON.stringify(this.queue),\n )\n }\n } catch {\n // localStorage unavailable\n }\n }\n\n private restoreQueue(): void {\n try {\n const raw = localStorage.getItem(QUEUE_STORAGE_KEY)\n if (raw) {\n const events: TrackedEvent[] = JSON.parse(raw)\n this.queue.unshift(...events)\n localStorage.removeItem(QUEUE_STORAGE_KEY)\n debug(\"Restored\", events.length, \"queued events\")\n }\n } catch {\n // ignore\n }\n }\n\n private clearPersistedQueue(): void {\n try {\n localStorage.removeItem(QUEUE_STORAGE_KEY)\n } catch {\n // ignore\n }\n }\n}\n","import type {\n TrackedEvent,\n AutoTrackingOptions,\n ElementInfo,\n RedactionOptions,\n} from \"./types\"\nimport { debug } from \"./logger\"\n\nconst RAGE_CLICK_THRESHOLD = 3\nconst RAGE_CLICK_WINDOW_MS = 1000\nconst RAGE_CLICK_RADIUS_PX = 30\nconst DEAD_CLICK_TIMEOUT_MS = 2500\n\nconst INTERACTIVE_TAGS = new Set([\n \"A\", \"BUTTON\", \"INPUT\", \"SELECT\", \"TEXTAREA\", \"LABEL\",\n])\n\nconst INTERACTIVE_ROLES = new Set([\n \"button\", \"link\", \"tab\", \"menuitem\", \"checkbox\", \"radio\",\n])\n\nfunction isInteractiveElement(el: HTMLElement): boolean {\n let current: HTMLElement | null = el\n while (current && current !== document.body) {\n if (INTERACTIVE_TAGS.has(current.tagName)) return true\n const role = current.getAttribute(\"role\")\n if (role && INTERACTIVE_ROLES.has(role)) return true\n if (current.hasAttribute(\"onclick\")) return true\n if (current.hasAttribute(\"tabindex\")) return true\n current = current.parentElement\n }\n try {\n if (window.getComputedStyle(el).cursor === \"pointer\") return true\n } catch {\n // getComputedStyle can throw on detached elements\n }\n return false\n}\n\ninterface ClickRecord {\n target: EventTarget | null\n timestamp: number\n x: number\n y: number\n}\n\nexport class AutoTracker {\n private options: AutoTrackingOptions\n private redaction: RedactionOptions\n private onEvent: (event: TrackedEvent) => void\n private sessionId: string\n private recentClicks: ClickRecord[] = []\n private scrollDepthMax = 0\n private scrollTimer: ReturnType<typeof setTimeout> | null = null\n private originalPushState: typeof history.pushState | null = null\n private originalReplaceState: typeof history.replaceState | null = null\n private cleanupFns: Array<() => void> = []\n\n constructor(\n options: AutoTrackingOptions,\n redaction: RedactionOptions,\n sessionId: string,\n onEvent: (event: TrackedEvent) => void,\n ) {\n this.options = options\n this.redaction = redaction\n this.sessionId = sessionId\n this.onEvent = onEvent\n }\n\n start(): void {\n if (typeof window === \"undefined\") return\n\n if (this.options.trackClicks !== false) this.setupClickTracking()\n if (this.options.trackForms !== false) this.setupFormTracking()\n if (this.options.trackNavigation !== false) this.setupNavigationTracking()\n if (this.options.trackScrollDepth !== false) this.setupScrollTracking()\n\n debug(\"AutoTracker started\")\n }\n\n stop(): void {\n this.cleanupFns.forEach((fn) => fn())\n this.cleanupFns = []\n\n if (this.originalPushState) {\n history.pushState = this.originalPushState\n }\n if (this.originalReplaceState) {\n history.replaceState = this.originalReplaceState\n }\n\n debug(\"AutoTracker stopped\")\n }\n\n updateSessionId(sessionId: string): void {\n this.sessionId = sessionId\n }\n\n private setupClickTracking(): void {\n const handler = (e: MouseEvent) => {\n const target = e.target as HTMLElement\n if (!target) return\n\n const info = this.getElementInfo(target)\n this.emit(\"click\", {\n element: info,\n x: e.clientX,\n y: e.clientY,\n pageUrl: window.location.href,\n })\n\n if (this.options.detectRageClicks !== false) {\n this.checkRageClick(e)\n }\n\n if (this.options.detectDeadClicks !== false) {\n this.checkDeadClick(e, target)\n }\n }\n\n document.addEventListener(\"click\", handler, true)\n this.cleanupFns.push(() =>\n document.removeEventListener(\"click\", handler, true),\n )\n }\n\n private setupFormTracking(): void {\n const submitHandler = (e: SubmitEvent) => {\n const form = e.target as HTMLFormElement\n if (!form) return\n\n this.emit(\"form_submit\", {\n element: this.getElementInfo(form),\n action: form.action,\n method: form.method,\n pageUrl: window.location.href,\n })\n }\n\n const changeHandler = (e: Event) => {\n const target = e.target as HTMLElement\n if (!target) return\n if (![\"INPUT\", \"SELECT\", \"TEXTAREA\"].includes(target.tagName)) return\n\n const info = this.getElementInfo(target)\n this.emit(\"form_change\", {\n element: info,\n fieldType: (target as HTMLInputElement).type || target.tagName.toLowerCase(),\n pageUrl: window.location.href,\n })\n }\n\n document.addEventListener(\"submit\", submitHandler, true)\n document.addEventListener(\"change\", changeHandler, true)\n this.cleanupFns.push(\n () => document.removeEventListener(\"submit\", submitHandler, true),\n () => document.removeEventListener(\"change\", changeHandler, true),\n )\n }\n\n private setupNavigationTracking(): void {\n this.emitPageView()\n\n const popstateHandler = () => this.emitPageView()\n window.addEventListener(\"popstate\", popstateHandler)\n this.cleanupFns.push(() =>\n window.removeEventListener(\"popstate\", popstateHandler),\n )\n\n this.originalPushState = history.pushState.bind(history)\n this.originalReplaceState = history.replaceState.bind(history)\n\n history.pushState = (...args) => {\n this.originalPushState!(...args)\n this.emitPageView()\n }\n\n history.replaceState = (...args) => {\n this.originalReplaceState!(...args)\n this.emitPageView()\n }\n }\n\n private setupScrollTracking(): void {\n const handler = () => {\n if (this.scrollTimer) clearTimeout(this.scrollTimer)\n\n this.scrollTimer = setTimeout(() => {\n const scrollHeight = document.documentElement.scrollHeight\n const viewportHeight = window.innerHeight\n const scrollTop = window.scrollY\n\n if (scrollHeight <= viewportHeight) return\n\n const depth = Math.round(\n ((scrollTop + viewportHeight) / scrollHeight) * 100,\n )\n\n if (depth > this.scrollDepthMax) {\n this.scrollDepthMax = depth\n this.emit(\"scroll_depth\", {\n depth,\n pageUrl: window.location.href,\n })\n }\n }, 250)\n }\n\n window.addEventListener(\"scroll\", handler, { passive: true })\n this.cleanupFns.push(() =>\n window.removeEventListener(\"scroll\", handler),\n )\n }\n\n private checkRageClick(e: MouseEvent): void {\n const now = Date.now()\n this.recentClicks.push({\n target: e.target,\n timestamp: now,\n x: e.clientX,\n y: e.clientY,\n })\n\n this.recentClicks = this.recentClicks.filter(\n (c) => now - c.timestamp < RAGE_CLICK_WINDOW_MS,\n )\n\n if (this.recentClicks.length >= RAGE_CLICK_THRESHOLD) {\n const nearby = this.recentClicks.filter((c) => {\n const dx = Math.abs(c.x - e.clientX)\n const dy = Math.abs(c.y - e.clientY)\n return dx <= RAGE_CLICK_RADIUS_PX && dy <= RAGE_CLICK_RADIUS_PX\n })\n\n if (nearby.length >= RAGE_CLICK_THRESHOLD) {\n const target = e.target as HTMLElement\n this.emit(\"rage_click\", {\n element: this.getElementInfo(target),\n clickCount: nearby.length,\n windowMs: RAGE_CLICK_WINDOW_MS,\n pageUrl: window.location.href,\n })\n this.recentClicks = []\n }\n }\n }\n\n private checkDeadClick(_e: MouseEvent, target: HTMLElement): void {\n if (isInteractiveElement(target)) return\n\n const clickUrl = window.location.href\n let hadMutation = false\n let hadScroll = false\n let hadSelection = false\n\n const observer = new MutationObserver(() => {\n hadMutation = true\n })\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n characterData: true,\n })\n\n const scrollHandler = () => { hadScroll = true }\n const selectionHandler = () => {\n const sel = window.getSelection()\n if (sel && sel.toString().length > 0) hadSelection = true\n }\n\n window.addEventListener(\"scroll\", scrollHandler, { passive: true, capture: true })\n document.addEventListener(\"selectionchange\", selectionHandler)\n\n setTimeout(() => {\n observer.disconnect()\n window.removeEventListener(\"scroll\", scrollHandler, true)\n document.removeEventListener(\"selectionchange\", selectionHandler)\n\n const urlChanged = window.location.href !== clickUrl\n\n if (!hadMutation && !hadScroll && !hadSelection && !urlChanged) {\n const reportTarget = this.findReportableAncestor(target) ?? target\n this.emit(\"dead_click\", {\n element: this.getElementInfo(reportTarget),\n pageUrl: clickUrl,\n })\n }\n }, DEAD_CLICK_TIMEOUT_MS)\n }\n\n private findReportableAncestor(el: HTMLElement): HTMLElement | null {\n let current: HTMLElement | null = el.parentElement\n while (current && current !== document.body) {\n if (INTERACTIVE_TAGS.has(current.tagName)) return current\n if (current.getAttribute(\"role\") === \"button\") return current\n current = current.parentElement\n }\n return null\n }\n\n private emitPageView(): void {\n this.scrollDepthMax = 0\n\n this.emit(\"page_view\", {\n url: window.location.href,\n path: window.location.pathname,\n referrer: document.referrer,\n title: document.title,\n })\n }\n\n private emit(type: TrackedEvent[\"type\"], data: Record<string, unknown>): void {\n this.onEvent({\n type,\n timestamp: Date.now(),\n data,\n sessionId: this.sessionId,\n })\n }\n\n private getElementInfo(el: HTMLElement): ElementInfo {\n const info: ElementInfo = {\n tag: el.tagName.toLowerCase(),\n selector: this.buildSelector(el),\n }\n\n if (el.id) info.id = el.id\n\n if (this.options.includeClasses !== false && el.className) {\n const classes =\n typeof el.className === \"string\"\n ? el.className.split(/\\s+/).filter(Boolean)\n : []\n if (classes.length > 0) info.classes = classes\n }\n\n if (this.options.includeText !== false) {\n const isSensitiveInput = [\"INPUT\", \"TEXTAREA\", \"SELECT\"].includes(el.tagName)\n if (!isSensitiveInput || this.redaction.mode !== \"privacy-first\") {\n const text = el.textContent?.trim().slice(0, 100)\n if (text) info.text = text\n }\n }\n\n if (el.tagName === \"A\") {\n info.href = (el as HTMLAnchorElement).href\n }\n\n if (\"name\" in el && typeof (el as HTMLInputElement).name === \"string\") {\n info.name = (el as HTMLInputElement).name\n }\n\n if (\"type\" in el && typeof (el as HTMLInputElement).type === \"string\") {\n info.type = (el as HTMLInputElement).type\n }\n\n return info\n }\n\n private buildSelector(el: HTMLElement): string {\n if (el.id) return `#${el.id}`\n\n const parts: string[] = []\n let current: HTMLElement | null = el\n\n for (let i = 0; i < 4 && current && current !== document.body; i++) {\n let part = current.tagName.toLowerCase()\n if (current.id) {\n part = `#${current.id}`\n parts.unshift(part)\n break\n }\n if (current.className && typeof current.className === \"string\") {\n const cls = current.className\n .split(/\\s+/)\n .filter(Boolean)\n .slice(0, 2)\n .join(\".\")\n if (cls) part += `.${cls}`\n }\n parts.unshift(part)\n current = current.parentElement\n }\n\n return parts.join(\" > \")\n }\n}\n","import type { RedactionOptions } from \"./types\"\nimport { debug, warn } from \"./logger\"\n\nexport class SessionRecorder {\n private recording = false\n private stopFn: (() => void) | null = null\n private onEvent: (event: unknown) => void\n private redaction: RedactionOptions\n private recordCanvas: boolean\n\n constructor(\n redaction: RedactionOptions,\n recordCanvas: boolean,\n onEvent: (event: unknown) => void,\n ) {\n this.redaction = redaction\n this.recordCanvas = recordCanvas\n this.onEvent = onEvent\n }\n\n async start(): Promise<void> {\n if (this.recording) return\n if (typeof window === \"undefined\") return\n\n try {\n const { record } = await import(\"rrweb\")\n\n const maskConfig = this.buildMaskConfig()\n\n const stopFn = record({\n emit: (event: unknown) => {\n this.onEvent(event)\n },\n ...maskConfig,\n recordCanvas: this.recordCanvas,\n sampling: {\n mousemove: true,\n mouseInteraction: true,\n scroll: 150,\n input: \"last\",\n },\n recordCrossOriginIframes: false,\n })\n\n if (stopFn) this.stopFn = stopFn\n this.recording = true\n debug(\"Session recording started\")\n } catch (err) {\n warn(\"Failed to start rrweb recording:\", err)\n }\n }\n\n stop(): void {\n if (this.stopFn) {\n this.stopFn()\n this.stopFn = null\n }\n this.recording = false\n debug(\"Session recording stopped\")\n }\n\n isRecording(): boolean {\n return this.recording\n }\n\n private buildMaskConfig(): Record<string, unknown> {\n if (this.redaction.mode === \"privacy-first\") {\n return {\n maskAllInputs: true,\n maskTextSelector: \"*\",\n maskInputOptions: {\n password: true,\n email: true,\n text: true,\n tel: true,\n url: true,\n search: true,\n number: true,\n textarea: true,\n select: true,\n },\n ...(this.redaction.unredactFields?.length\n ? {\n unmaskTextSelector:\n this.redaction.unredactFields\n .map((f) => `[data-pb-unmask=\"${f}\"]`)\n .join(\", \"),\n }\n : {}),\n }\n }\n\n return {\n maskAllInputs: false,\n maskInputOptions: {\n password: true,\n },\n }\n }\n}\n","import type { TrackedEvent } from \"./types\"\nimport { debug } from \"./logger\"\n\nexport class ConsoleTracker {\n private sessionId: string\n private onEvent: (event: TrackedEvent) => void\n private originalWarn: typeof console.warn | null = null\n private originalError: typeof console.error | null = null\n\n constructor(\n sessionId: string,\n onEvent: (event: TrackedEvent) => void,\n ) {\n this.sessionId = sessionId\n this.onEvent = onEvent\n }\n\n start(): void {\n if (typeof window === \"undefined\") return\n\n this.originalWarn = console.warn\n this.originalError = console.error\n\n console.warn = (...args: unknown[]) => {\n this.originalWarn?.apply(console, args)\n this.trackConsole(\"console_warn\", args)\n }\n\n console.error = (...args: unknown[]) => {\n this.originalError?.apply(console, args)\n this.trackConsole(\"console_error\", args)\n }\n\n window.addEventListener(\"error\", (e) => {\n this.onEvent({\n type: \"console_error\",\n timestamp: Date.now(),\n data: {\n message: e.message,\n filename: e.filename,\n lineno: e.lineno,\n colno: e.colno,\n stack: e.error?.stack,\n },\n sessionId: this.sessionId,\n })\n })\n\n window.addEventListener(\"unhandledrejection\", (e) => {\n this.onEvent({\n type: \"console_error\",\n timestamp: Date.now(),\n data: {\n message: String(e.reason),\n stack: e.reason?.stack,\n source: \"unhandledrejection\",\n },\n sessionId: this.sessionId,\n })\n })\n\n debug(\"ConsoleTracker started\")\n }\n\n stop(): void {\n if (this.originalWarn) console.warn = this.originalWarn\n if (this.originalError) console.error = this.originalError\n }\n\n updateSessionId(sessionId: string): void {\n this.sessionId = sessionId\n }\n\n private trackConsole(\n type: \"console_warn\" | \"console_error\",\n args: unknown[],\n ): void {\n const message = args\n .map((a) => {\n if (typeof a === \"string\") return a\n try {\n return JSON.stringify(a)\n } catch {\n return String(a)\n }\n })\n .join(\" \")\n\n if (message.includes(\"[ProductBet]\")) return\n\n this.onEvent({\n type,\n timestamp: Date.now(),\n data: {\n message: message.slice(0, 2000),\n url: window.location.href,\n },\n sessionId: this.sessionId,\n })\n }\n}\n","import type { TrackedEvent } from \"./types\"\nimport { debug } from \"./logger\"\n\nexport class NetworkTracker {\n private sessionId: string\n private ingestionUrl: string\n private onEvent: (event: TrackedEvent) => void\n private originalFetch: typeof fetch | null = null\n\n constructor(\n sessionId: string,\n ingestionUrl: string,\n onEvent: (event: TrackedEvent) => void,\n ) {\n this.sessionId = sessionId\n this.ingestionUrl = ingestionUrl\n this.onEvent = onEvent\n }\n\n start(): void {\n if (typeof window === \"undefined\") return\n if (this.originalFetch) return\n\n this.originalFetch = window.fetch.bind(window)\n const tracker = this\n\n window.fetch = function pbTrackedFetch(input: RequestInfo | URL, init?: RequestInit) {\n const url =\n typeof input === \"string\"\n ? input\n : input instanceof URL\n ? input.href\n : (input as Request).url\n\n if (url.startsWith(tracker.ingestionUrl)) {\n return tracker.originalFetch!(input, init)\n }\n\n const method = init?.method || \"GET\"\n const startTime = Date.now()\n\n return tracker.originalFetch!(input, init).then(\n (response: Response) => {\n if (response.status >= 400) {\n tracker.onEvent({\n type: \"network_error\",\n timestamp: Date.now(),\n data: {\n url: url.slice(0, 500),\n method,\n status: response.status,\n statusText: response.statusText,\n duration: Date.now() - startTime,\n errorType:\n response.status >= 500\n ? \"server_error\"\n : \"client_error\",\n },\n sessionId: tracker.sessionId,\n })\n }\n return response\n },\n (err: unknown) => {\n tracker.onEvent({\n type: \"network_error\",\n timestamp: Date.now(),\n data: {\n url: url.slice(0, 500),\n method,\n status: null,\n duration: Date.now() - startTime,\n errorType: \"network_error\",\n errorMessage:\n err instanceof Error ? err.message : String(err),\n },\n sessionId: tracker.sessionId,\n })\n throw err\n },\n )\n }\n\n debug(\"NetworkTracker started\")\n }\n\n stop(): void {\n if (this.originalFetch) {\n window.fetch = this.originalFetch\n this.originalFetch = null\n }\n }\n\n updateSessionId(sessionId: string): void {\n this.sessionId = sessionId\n }\n}\n","import type { TrackerOptions, TrackedEvent, UserProperties } from \"./types\"\nimport { DEFAULT_OPTIONS } from \"./types\"\nimport { SessionManager } from \"./session\"\nimport { ApiClient } from \"./api-client\"\nimport { AutoTracker } from \"./auto-tracker\"\nimport { SessionRecorder } from \"./recorder\"\nimport { ConsoleTracker } from \"./console-tracker\"\nimport { NetworkTracker } from \"./network-tracker\"\nimport { setDebug, debug, warn } from \"./logger\"\n\nlet globalInstance: ProductBetTracker | null = null\n\nconst IDLE_THRESHOLD_MS = 5 * 60_000\nconst USER_ACTIVITY_EVENTS = [\"click\", \"keydown\", \"scroll\", \"mousemove\"] as const\n\nexport class ProductBetTracker {\n private apiKey: string\n private options: Required<TrackerOptions>\n private session: SessionManager\n private apiClient: ApiClient\n private autoTracker: AutoTracker | null = null\n private recorder: SessionRecorder | null = null\n private consoleTracker: ConsoleTracker | null = null\n private networkTracker: NetworkTracker | null = null\n private started = false\n private activityCheckTimer: ReturnType<typeof setInterval> | null = null\n private lastActivityAt = Date.now()\n private idle = false\n\n private constructor(apiKey: string, options: TrackerOptions = {}) {\n this.apiKey = apiKey\n this.options = this.mergeOptions(options)\n\n setDebug(this.options.debug)\n\n this.session = new SessionManager(this.options.sessionTimeoutMs)\n\n this.apiClient = new ApiClient(\n this.apiKey,\n this.options.ingestionUrl,\n this.session.getSessionId(),\n this.options.maxQueueSize,\n this.options.flushIntervalMs,\n this.session.getWindowId(),\n )\n\n if (this.options.enableAutoTracking) {\n this.autoTracker = new AutoTracker(\n this.options.autoTrackingOptions,\n this.options.redaction,\n this.session.getSessionId(),\n (event) => this.handleEvent(event),\n )\n }\n\n if (this.options.enableSessionRecording) {\n this.recorder = new SessionRecorder(\n this.options.redaction,\n this.options.recordCanvas,\n (event) => this.apiClient.enqueueReplayEvent(event),\n )\n }\n\n if (this.options.enableConsoleTracking) {\n this.consoleTracker = new ConsoleTracker(\n this.session.getSessionId(),\n (event) => this.handleEvent(event),\n )\n }\n\n if (this.options.enableNetworkTracking) {\n this.networkTracker = new NetworkTracker(\n this.session.getSessionId(),\n this.options.ingestionUrl,\n (event) => this.handleEvent(event),\n )\n }\n\n debug(\"ProductBetTracker initialized\")\n }\n\n static init(\n apiKey: string,\n options?: TrackerOptions,\n ): ProductBetTracker {\n if (!apiKey) {\n throw new Error(\"ProductBet: apiKey is required\")\n }\n\n if (globalInstance) {\n warn(\"ProductBetTracker already initialized. Returning existing instance.\")\n return globalInstance\n }\n\n globalInstance = new ProductBetTracker(apiKey, options)\n return globalInstance\n }\n\n static getInstance(): ProductBetTracker | null {\n return globalInstance\n }\n\n start(): void {\n if (this.started) return\n if (typeof window === \"undefined\") {\n warn(\"ProductBetTracker.start() called in non-browser environment. Skipping.\")\n return\n }\n\n this.started = true\n\n this.apiClient.start()\n this.autoTracker?.start()\n this.recorder?.start()\n this.consoleTracker?.start()\n this.networkTracker?.start()\n\n this.handleEvent({\n type: \"session_start\",\n timestamp: Date.now(),\n data: {\n url: window.location.href,\n referrer: document.referrer,\n screenWidth: window.screen.width,\n screenHeight: window.screen.height,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n userAgent: navigator.userAgent,\n language: navigator.language,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n },\n sessionId: this.session.getSessionId(),\n })\n\n this.activityCheckTimer = setInterval(() => {\n if (this.session.isExpired()) {\n this.rotateSession()\n }\n this.checkIdle()\n }, 60_000)\n\n this.setupActivityListeners()\n\n debug(\"ProductBetTracker started\")\n }\n\n stop(): void {\n if (!this.started) return\n\n this.handleEvent({\n type: \"session_end\",\n timestamp: Date.now(),\n data: {},\n sessionId: this.session.getSessionId(),\n })\n\n this.autoTracker?.stop()\n this.recorder?.stop()\n this.consoleTracker?.stop()\n this.networkTracker?.stop()\n this.apiClient.stop()\n\n if (this.activityCheckTimer) {\n clearInterval(this.activityCheckTimer)\n this.activityCheckTimer = null\n }\n\n this.started = false\n debug(\"ProductBetTracker stopped\")\n }\n\n identify(userId: string, attributes?: Record<string, unknown>): void {\n const props: UserProperties = { userId, attributes }\n this.apiClient.setEndUserId(userId)\n this.apiClient.sendIdentify({\n userId: props.userId,\n attributes: props.attributes || {},\n sessionId: this.session.getSessionId(),\n })\n debug(\"User identified\", userId)\n }\n\n track(eventName: string, properties?: Record<string, unknown>): void {\n this.apiClient.sendCustomEvent({\n sessionId: this.session.getSessionId(),\n eventName,\n eventProperties: properties || {},\n endUserId: null,\n })\n }\n\n getSessionId(): string {\n return this.session.getSessionId()\n }\n\n setUnredactedFields(fields: string[]): void {\n this.options.redaction.unredactFields = fields\n }\n\n getUnredactedFields(): string[] {\n return this.options.redaction.unredactFields || []\n }\n\n private handleEvent(event: TrackedEvent): void {\n const isUserAction =\n event.type === \"click\" ||\n event.type === \"rage_click\" ||\n event.type === \"form_submit\" ||\n event.type === \"form_change\" ||\n event.type === \"page_view\" ||\n event.type === \"session_start\" ||\n event.type === \"session_end\"\n\n if (isUserAction) {\n this.lastActivityAt = Date.now()\n if (this.idle) {\n this.idle = false\n debug(\"User returned from idle\")\n }\n }\n\n if (this.idle && !isUserAction) return\n\n this.session.touch()\n this.apiClient.enqueueEvent(event)\n }\n\n private setupActivityListeners(): void {\n const onActivity = () => {\n this.lastActivityAt = Date.now()\n if (this.idle) {\n this.idle = false\n debug(\"User returned from idle\")\n }\n }\n for (const evt of USER_ACTIVITY_EVENTS) {\n window.addEventListener(evt, onActivity, { passive: true, capture: true })\n }\n }\n\n private checkIdle(): void {\n if (this.idle) return\n if (Date.now() - this.lastActivityAt > IDLE_THRESHOLD_MS) {\n this.idle = true\n debug(\"User idle, pausing background event capture\")\n }\n }\n\n private rotateSession(): void {\n const newSessionId = this.session.rotate()\n this.apiClient.updateSessionId(newSessionId)\n this.autoTracker?.updateSessionId(newSessionId)\n this.consoleTracker?.updateSessionId(newSessionId)\n this.networkTracker?.updateSessionId(newSessionId)\n debug(\"Session rotated to\", newSessionId)\n\n this.handleEvent({\n type: \"session_start\",\n timestamp: Date.now(),\n data: {\n url: window.location.href,\n rotated: true,\n },\n sessionId: newSessionId,\n })\n }\n\n private mergeOptions(\n partial: TrackerOptions,\n ): Required<TrackerOptions> {\n return {\n ...DEFAULT_OPTIONS,\n ...partial,\n autoTrackingOptions: {\n ...DEFAULT_OPTIONS.autoTrackingOptions,\n ...partial.autoTrackingOptions,\n },\n redaction: {\n ...DEFAULT_OPTIONS.redaction,\n ...partial.redaction,\n },\n }\n }\n}\n"],"names":["logError"],"mappings":"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"}