@crashsense/core 1.0.4 → 1.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.
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +411 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +411 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts","../src/error-interceptor.ts","../src/memory-monitor.ts","../src/event-loop-monitor.ts","../src/network-monitor.ts","../src/breadcrumb-tracker.ts","../src/iframe-tracker.ts","../src/pre-crash-warning.ts","../src/crash-classifier.ts","../src/crashsense.ts"],"names":["history","HISTORY_SIZE","RingBuffer"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { CrashSenseConfig, ResolvedConfig } from '@crashsense/types';\n\nconst SDK_VERSION = '0.1.0';\n\nexport function resolveConfig(userConfig: CrashSenseConfig): ResolvedConfig {\n if (!userConfig.appId) {\n throw new Error('[CrashSense] appId is required');\n }\n\n const sampleRate = userConfig.sampleRate ?? 1.0;\n if (sampleRate < 0 || sampleRate > 1) {\n throw new Error('[CrashSense] sampleRate must be between 0 and 1');\n }\n\n const maxEventsPerMinute = userConfig.maxEventsPerMinute ?? 30;\n if (maxEventsPerMinute <= 0) {\n throw new Error('[CrashSense] maxEventsPerMinute must be positive');\n }\n\n return {\n appId: userConfig.appId,\n environment: userConfig.environment ?? 'production',\n release: userConfig.release ?? '',\n sampleRate,\n maxEventsPerMinute,\n enableMemoryMonitoring: userConfig.enableMemoryMonitoring ?? true,\n enableLongTaskMonitoring: userConfig.enableLongTaskMonitoring ?? true,\n enableNetworkMonitoring: userConfig.enableNetworkMonitoring ?? true,\n enableIframeTracking: userConfig.enableIframeTracking ?? true,\n enablePreCrashWarning: userConfig.enablePreCrashWarning ?? true,\n preCrashMemoryThreshold: userConfig.preCrashMemoryThreshold ?? 0.80,\n piiScrubbing: userConfig.piiScrubbing ?? true,\n debug: userConfig.debug ?? false,\n onCrash: userConfig.onCrash ?? null,\n };\n}\n\nexport { SDK_VERSION };\n","import type { EventBus } from '@crashsense/types';\n\nconst IGNORED_MESSAGES = [\n 'ResizeObserver loop limit exceeded',\n 'ResizeObserver loop completed with undelivered notifications',\n];\n\nfunction isIgnoredError(message: string, filename?: string): boolean {\n if (IGNORED_MESSAGES.some((m) => message.includes(m))) return true;\n if (filename?.startsWith('chrome-extension://')) return true;\n if (filename?.startsWith('moz-extension://')) return true;\n if (message === 'Script error.' || message === 'Script error') return true;\n return false;\n}\n\nexport function createErrorInterceptor(bus: EventBus) {\n let errorHandler: ((event: ErrorEvent) => void) | null = null;\n let rejectionHandler: ((event: PromiseRejectionEvent) => void) | null = null;\n\n return {\n install(): void {\n if (typeof window === 'undefined') return;\n\n errorHandler = (event: ErrorEvent) => {\n if (isIgnoredError(event.message, event.filename)) return;\n\n const error = event.error instanceof Error\n ? event.error\n : new Error(event.message);\n\n bus.emit('error', {\n error,\n timestamp: performance.now() + performance.timeOrigin,\n });\n };\n\n rejectionHandler = (event: PromiseRejectionEvent) => {\n const reason = event.reason;\n bus.emit('unhandled_rejection', {\n reason,\n timestamp: performance.now() + performance.timeOrigin,\n });\n };\n\n window.addEventListener('error', errorHandler);\n window.addEventListener('unhandledrejection', rejectionHandler);\n },\n\n uninstall(): void {\n if (typeof window === 'undefined') return;\n if (errorHandler) window.removeEventListener('error', errorHandler);\n if (rejectionHandler) window.removeEventListener('unhandledrejection', rejectionHandler);\n errorHandler = null;\n rejectionHandler = null;\n },\n };\n}\n","import type { EventBus, MemoryState, MemoryTrend, ResolvedConfig } from '@crashsense/types';\nimport { RingBuffer } from '@crashsense/utils';\n\ninterface MemorySample {\n used: number;\n total: number;\n limit: number;\n timestamp: number;\n}\n\nconst SAMPLE_INTERVAL = 5000;\nconst HISTORY_SIZE = 12;\nconst WARNING_THRESHOLD = 0.85;\n\nfunction computeTrend(samples: MemorySample[]): MemoryTrend {\n if (samples.length < 3) return 'stable';\n\n const recent = samples.slice(-6);\n const first = recent[0].used;\n const last = recent[recent.length - 1].used;\n const growthRate = (last - first) / first;\n\n if (growthRate > 0.2) return 'growing';\n if (growthRate < -0.2) return 'shrinking';\n\n const shortRecent = samples.slice(-3);\n const min = Math.min(...shortRecent.map((s) => s.used));\n const max = Math.max(...shortRecent.map((s) => s.used));\n if (max > 0 && (max - min) / max > 0.2) return 'spike';\n\n return 'stable';\n}\n\nexport function createMemoryMonitor(bus: EventBus, _config: ResolvedConfig) {\n const history = new RingBuffer<MemorySample>(HISTORY_SIZE);\n let intervalId: ReturnType<typeof setInterval> | null = null;\n\n function hasPerformanceMemory(): boolean {\n return typeof performance !== 'undefined' &&\n 'memory' in performance &&\n (performance as unknown as { memory: { usedJSHeapSize: number } }).memory !== undefined;\n }\n\n function sample(): void {\n if (!hasPerformanceMemory()) return;\n\n const mem = (performance as unknown as {\n memory: { usedJSHeapSize: number; totalJSHeapSize: number; jsHeapSizeLimit: number };\n }).memory;\n\n const s: MemorySample = {\n used: mem.usedJSHeapSize,\n total: mem.totalJSHeapSize,\n limit: mem.jsHeapSizeLimit,\n timestamp: Date.now(),\n };\n history.push(s);\n\n const utilization = s.limit > 0 ? s.used / s.limit : 0;\n if (utilization > WARNING_THRESHOLD) {\n const samples = history.drain();\n bus.emit('memory_warning', {\n utilization,\n trend: computeTrend(samples),\n timestamp: performance.now() + performance.timeOrigin,\n });\n }\n }\n\n return {\n start(): void {\n if (!hasPerformanceMemory()) return;\n sample();\n intervalId = setInterval(sample, SAMPLE_INTERVAL);\n },\n\n stop(): void {\n if (intervalId !== null) {\n clearInterval(intervalId);\n intervalId = null;\n }\n },\n\n getSnapshot(): MemoryState {\n if (!hasPerformanceMemory()) {\n return {\n usedJSHeapSize: null,\n totalJSHeapSize: null,\n heapSizeLimit: null,\n trend: 'stable',\n utilizationPercent: null,\n };\n }\n\n const mem = (performance as unknown as {\n memory: { usedJSHeapSize: number; totalJSHeapSize: number; jsHeapSizeLimit: number };\n }).memory;\n\n const samples = history.drain();\n const utilization = mem.jsHeapSizeLimit > 0\n ? mem.usedJSHeapSize / mem.jsHeapSizeLimit\n : null;\n\n return {\n usedJSHeapSize: mem.usedJSHeapSize,\n totalJSHeapSize: mem.totalJSHeapSize,\n heapSizeLimit: mem.jsHeapSizeLimit,\n trend: computeTrend(samples),\n utilizationPercent: utilization !== null ? Math.round(utilization * 100) : null,\n };\n },\n };\n}\n","import type { EventBus, CpuState, EventLoopState, ResolvedConfig } from '@crashsense/types';\nimport { RingBuffer } from '@crashsense/utils';\n\ninterface LongTaskEntry {\n duration: number;\n startTime: number;\n}\n\nconst LONG_TASK_THRESHOLD = 100;\nconst HISTORY_SIZE = 200;\n\nexport function createEventLoopMonitor(bus: EventBus, _config: ResolvedConfig) {\n const taskHistory = new RingBuffer<LongTaskEntry>(HISTORY_SIZE);\n let observer: PerformanceObserver | null = null;\n let rafId: number | null = null;\n let lastFrameTime = 0;\n let fps = 60;\n\n function supportsLongTasks(): boolean {\n if (typeof PerformanceObserver === 'undefined') return false;\n try {\n const supported = PerformanceObserver.supportedEntryTypes;\n return Array.isArray(supported) && supported.includes('longtask');\n } catch {\n return false;\n }\n }\n\n function measureFps(timestamp: number): void {\n if (lastFrameTime > 0) {\n const delta = timestamp - lastFrameTime;\n if (delta > 0) {\n const instantFps = 1000 / delta;\n fps = fps * 0.9 + instantFps * 0.1;\n }\n }\n lastFrameTime = timestamp;\n rafId = requestAnimationFrame(measureFps);\n }\n\n return {\n start(): void {\n if (typeof window === 'undefined') return;\n\n if (supportsLongTasks()) {\n observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n const task: LongTaskEntry = {\n duration: entry.duration,\n startTime: entry.startTime,\n };\n taskHistory.push(task);\n\n if (entry.duration > LONG_TASK_THRESHOLD) {\n bus.emit('long_task', {\n duration: entry.duration,\n startTime: entry.startTime,\n timestamp: performance.now() + performance.timeOrigin,\n });\n }\n }\n });\n observer.observe({ entryTypes: ['longtask'] });\n }\n\n if (typeof requestAnimationFrame !== 'undefined') {\n rafId = requestAnimationFrame(measureFps);\n }\n },\n\n stop(): void {\n if (observer) {\n observer.disconnect();\n observer = null;\n }\n if (rafId !== null && typeof cancelAnimationFrame !== 'undefined') {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n },\n\n getCpuSnapshot(): CpuState {\n const now = performance.now();\n const tasks = taskHistory.drain();\n const recentTasks = tasks.filter((t) => now - t.startTime < 30000);\n\n const durations = recentTasks.map((t) => t.duration);\n const totalBlocking = durations\n .filter((d) => d > 50)\n .reduce((sum, d) => sum + (d - 50), 0);\n\n return {\n longTasksLast30s: recentTasks.length,\n avgLongTaskDuration: durations.length > 0\n ? durations.reduce((a, b) => a + b, 0) / durations.length\n : 0,\n maxLongTaskDuration: durations.length > 0\n ? Math.max(...durations)\n : 0,\n estimatedBlockingTime: totalBlocking,\n };\n },\n\n getEventLoopSnapshot(): EventLoopState {\n const cpuState = this.getCpuSnapshot();\n return {\n isBlocked: cpuState.maxLongTaskDuration > 1000,\n blockDuration: cpuState.maxLongTaskDuration > 0 ? cpuState.maxLongTaskDuration : null,\n fps: Math.round(fps),\n };\n },\n };\n}\n","import type { EventBus, NetworkState, NetworkRequest, ResolvedConfig } from '@crashsense/types';\nimport { RingBuffer } from '@crashsense/utils';\n\nconst HISTORY_SIZE = 100;\n\nexport function createNetworkMonitor(bus: EventBus, _config: ResolvedConfig) {\n const history = new RingBuffer<NetworkRequest>(HISTORY_SIZE);\n let originalFetch: typeof fetch | null = null;\n let pendingCount = 0;\n\n function wrapFetch(): void {\n if (typeof window === 'undefined' || typeof fetch === 'undefined') return;\n\n originalFetch = window.fetch;\n\n window.fetch = async function patchedFetch(\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> {\n const url = typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.href\n : input.url;\n const method = init?.method ?? 'GET';\n const startTime = performance.now();\n\n pendingCount++;\n\n try {\n const response = await originalFetch!.call(window, input, init);\n const duration = performance.now() - startTime;\n pendingCount--;\n\n const request: NetworkRequest = {\n url,\n method,\n status: response.status,\n duration,\n startTime,\n error: null,\n responseSize: null,\n };\n history.push(request);\n\n if (response.status >= 500 || response.status === 0) {\n bus.emit('network_failure', {\n url,\n status: response.status,\n error: `HTTP ${response.status}`,\n timestamp: performance.now() + performance.timeOrigin,\n });\n }\n\n return response;\n } catch (err) {\n const duration = performance.now() - startTime;\n pendingCount--;\n\n const errorMsg = err instanceof Error ? err.message : String(err);\n const request: NetworkRequest = {\n url,\n method,\n status: 0,\n duration,\n startTime,\n error: errorMsg,\n responseSize: null,\n };\n history.push(request);\n\n bus.emit('network_failure', {\n url,\n status: 0,\n error: errorMsg,\n timestamp: performance.now() + performance.timeOrigin,\n });\n\n throw err;\n }\n };\n }\n\n return {\n start(): void {\n wrapFetch();\n },\n\n stop(): void {\n if (originalFetch && typeof window !== 'undefined') {\n window.fetch = originalFetch;\n originalFetch = null;\n }\n },\n\n getSnapshot(): NetworkState {\n const now = performance.now();\n const requests = history.drain();\n const recentRequests = requests.filter((r) => now - r.startTime < 60000);\n\n const failedCount = recentRequests.filter(\n (r) => r.status === 0 || r.status >= 500 || r.error !== null,\n ).length;\n\n const latencies = recentRequests\n .filter((r) => r.error === null)\n .map((r) => r.duration);\n const avgLatency = latencies.length > 0\n ? latencies.reduce((a, b) => a + b, 0) / latencies.length\n : 0;\n\n let connectionType: string | null = null;\n if (typeof navigator !== 'undefined' && 'connection' in navigator) {\n const conn = (navigator as Navigator & { connection?: { effectiveType?: string } }).connection;\n connectionType = conn?.effectiveType ?? null;\n }\n\n return {\n pendingRequests: pendingCount,\n failedRequestsLast60s: failedCount,\n avgLatencyLast60s: Math.round(avgLatency),\n connectionType,\n isOnline: typeof navigator !== 'undefined' ? navigator.onLine : true,\n };\n },\n };\n}\n","import type { Breadcrumb, EventBus } from '@crashsense/types';\nimport { RingBuffer } from '@crashsense/utils';\n\nconst BUFFER_SIZE = 50;\n\nexport function createBreadcrumbTracker(bus: EventBus) {\n const buffer = new RingBuffer<Breadcrumb>(BUFFER_SIZE);\n let clickHandler: ((e: MouseEvent) => void) | null = null;\n let originalPushState: typeof history.pushState | null = null;\n let originalReplaceState: typeof history.replaceState | null = null;\n\n function addBreadcrumb(bc: Omit<Breadcrumb, 'timestamp'>): void {\n const crumb: Breadcrumb = {\n ...bc,\n timestamp: performance.now() + performance.timeOrigin,\n };\n buffer.push(crumb);\n bus.emit('breadcrumb', crumb);\n }\n\n function getElementDescription(target: EventTarget | null): string {\n if (!target || !(target instanceof Element)) return 'unknown';\n const tag = target.tagName.toLowerCase();\n const id = target.id ? `#${target.id}` : '';\n const cls = target.className && typeof target.className === 'string'\n ? `.${target.className.split(' ').slice(0, 2).join('.')}`\n : '';\n const text = target.textContent?.trim().slice(0, 30) ?? '';\n return `${tag}${id}${cls}${text ? ` \"${text}\"` : ''}`;\n }\n\n return {\n install(): void {\n if (typeof window === 'undefined') return;\n\n clickHandler = (e: MouseEvent) => {\n addBreadcrumb({\n type: 'click',\n message: `Click on ${getElementDescription(e.target)}`,\n });\n };\n document.addEventListener('click', clickHandler, { capture: true, passive: true });\n\n originalPushState = history.pushState;\n history.pushState = function (...args) {\n addBreadcrumb({\n type: 'navigation',\n message: `pushState to ${String(args[2] ?? '')}`,\n });\n return originalPushState!.apply(this, args);\n };\n\n originalReplaceState = history.replaceState;\n history.replaceState = function (...args) {\n addBreadcrumb({\n type: 'navigation',\n message: `replaceState to ${String(args[2] ?? '')}`,\n });\n return originalReplaceState!.apply(this, args);\n };\n\n bus.on('error', (data) => {\n addBreadcrumb({\n type: 'console',\n message: `Error: ${data.error.message}`,\n });\n });\n\n bus.on('network_failure', (data) => {\n addBreadcrumb({\n type: 'network',\n message: `Network failure: ${data.url} (${data.error})`,\n });\n });\n },\n\n uninstall(): void {\n if (typeof window === 'undefined') return;\n if (clickHandler) {\n document.removeEventListener('click', clickHandler, { capture: true } as EventListenerOptions);\n clickHandler = null;\n }\n if (originalPushState) {\n history.pushState = originalPushState;\n originalPushState = null;\n }\n if (originalReplaceState) {\n history.replaceState = originalReplaceState;\n originalReplaceState = null;\n }\n },\n\n getBreadcrumbs(): Breadcrumb[] {\n return buffer.drain();\n },\n\n addBreadcrumb,\n };\n}\n","import type { EventBus, IframeState, ResolvedConfig } from '@crashsense/types';\n\ninterface IframeEvent {\n src: string;\n origin: string;\n crossOrigin: boolean;\n timestamp: number;\n action: 'added' | 'removed';\n}\n\nconst HISTORY_WINDOW = 60_000;\n\nfunction extractOrigin(src: string): string {\n try {\n return new URL(src, location.href).origin;\n } catch {\n return 'unknown';\n }\n}\n\nfunction isCrossOrigin(origin: string): boolean {\n if (typeof location === 'undefined') return false;\n return origin !== 'unknown' && origin !== location.origin;\n}\n\nexport function createIframeTracker(bus: EventBus, _config: ResolvedConfig) {\n const events: IframeEvent[] = [];\n let observer: MutationObserver | null = null;\n let currentCount = 0;\n\n function pruneOldEvents(): void {\n const cutoff = Date.now() - HISTORY_WINDOW;\n while (events.length > 0 && events[0].timestamp < cutoff) {\n events.shift();\n }\n }\n\n function countCurrentIframes(): number {\n if (typeof document === 'undefined') return 0;\n return document.querySelectorAll('iframe').length;\n }\n\n function handleAddedIframe(iframe: HTMLIFrameElement): void {\n const src = iframe.src || iframe.getAttribute('src') || '';\n const origin = extractOrigin(src);\n const crossOrigin = isCrossOrigin(origin);\n currentCount = countCurrentIframes();\n\n const now = Date.now();\n events.push({ src, origin, crossOrigin, timestamp: now, action: 'added' });\n\n bus.emit('iframe_added', {\n src,\n origin,\n crossOrigin,\n totalCount: currentCount,\n timestamp: performance.now() + performance.timeOrigin,\n });\n }\n\n function handleRemovedIframe(iframe: HTMLIFrameElement): void {\n const src = iframe.src || iframe.getAttribute('src') || '';\n currentCount = countCurrentIframes();\n\n events.push({ src, origin: extractOrigin(src), crossOrigin: false, timestamp: Date.now(), action: 'removed' });\n\n bus.emit('iframe_removed', {\n src,\n totalCount: currentCount,\n timestamp: performance.now() + performance.timeOrigin,\n });\n }\n\n function processNodes(nodes: NodeList, action: 'added' | 'removed'): void {\n for (const node of Array.from(nodes)) {\n if (node instanceof HTMLIFrameElement) {\n if (action === 'added') handleAddedIframe(node);\n else handleRemovedIframe(node);\n }\n if (node instanceof Element) {\n const nested = node.querySelectorAll('iframe');\n for (const iframe of Array.from(nested)) {\n if (action === 'added') handleAddedIframe(iframe);\n else handleRemovedIframe(iframe);\n }\n }\n }\n }\n\n return {\n start(): void {\n if (typeof window === 'undefined' || typeof MutationObserver === 'undefined') return;\n\n currentCount = countCurrentIframes();\n\n observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.addedNodes.length > 0) processNodes(mutation.addedNodes, 'added');\n if (mutation.removedNodes.length > 0) processNodes(mutation.removedNodes, 'removed');\n }\n });\n\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n });\n },\n\n stop(): void {\n if (observer) {\n observer.disconnect();\n observer = null;\n }\n },\n\n getSnapshot(): IframeState {\n pruneOldEvents();\n\n const addedLast60s = events.filter((e) => e.action === 'added').length;\n const removedLast60s = events.filter((e) => e.action === 'removed').length;\n\n const originsSet = new Set<string>();\n let crossOriginCount = 0;\n\n if (typeof document !== 'undefined') {\n const iframes = document.querySelectorAll('iframe');\n for (const iframe of Array.from(iframes)) {\n const src = iframe.src || iframe.getAttribute('src') || '';\n const origin = extractOrigin(src);\n originsSet.add(origin);\n if (isCrossOrigin(origin)) crossOriginCount++;\n }\n }\n\n return {\n totalCount: currentCount,\n addedLast60s,\n removedLast60s,\n origins: Array.from(originsSet),\n crossOriginCount,\n };\n },\n };\n}\n","import type { EventBus, PreCrashLevel, ResolvedConfig } from '@crashsense/types';\n\ninterface MemoryReading {\n utilization: number;\n timestamp: number;\n}\n\nconst CHECK_INTERVAL = 3000;\nconst TREND_WINDOW = 5;\n\nexport function createPreCrashWarning(\n bus: EventBus,\n config: ResolvedConfig,\n memoryMonitor: { getSnapshot(): { utilizationPercent: number | null } },\n iframeTracker: { getSnapshot(): { totalCount: number; addedLast60s: number; crossOriginCount: number } },\n) {\n let intervalId: ReturnType<typeof setInterval> | null = null;\n let lastLevel: PreCrashLevel | null = null;\n const recentReadings: MemoryReading[] = [];\n\n function getMemoryUtilization(): number | null {\n const snap = memoryMonitor.getSnapshot();\n return snap.utilizationPercent !== null ? snap.utilizationPercent / 100 : null;\n }\n\n function isGrowingTrend(): boolean {\n if (recentReadings.length < 3) return false;\n const recent = recentReadings.slice(-TREND_WINDOW);\n let increases = 0;\n for (let i = 1; i < recent.length; i++) {\n if (recent[i].utilization > recent[i - 1].utilization) increases++;\n }\n return increases >= Math.floor(recent.length * 0.6);\n }\n\n function computeLevel(memUtil: number | null, iframeCount: number): { level: PreCrashLevel; reason: string } | null {\n const threshold = config.preCrashMemoryThreshold;\n\n // Imminent: memory > 95% OR (memory > threshold + 15% AND growing trend)\n if (memUtil !== null && memUtil > 0.95) {\n return { level: 'imminent', reason: `Memory at ${(memUtil * 100).toFixed(0)}% — crash likely` };\n }\n\n if (memUtil !== null && memUtil > threshold + 0.15 && isGrowingTrend()) {\n return { level: 'imminent', reason: `Memory at ${(memUtil * 100).toFixed(0)}% with growing trend` };\n }\n\n // Critical: memory > threshold + 5% AND (growing trend OR iframes > 5)\n if (memUtil !== null && memUtil > threshold + 0.05) {\n if (isGrowingTrend()) {\n return { level: 'critical', reason: `Memory at ${(memUtil * 100).toFixed(0)}% with growing trend` };\n }\n if (iframeCount > 5) {\n return { level: 'critical', reason: `Memory at ${(memUtil * 100).toFixed(0)}% with ${iframeCount} iframes` };\n }\n }\n\n // Elevated: memory > threshold AND iframes > 3\n if (memUtil !== null && memUtil > threshold && iframeCount > 3) {\n return { level: 'elevated', reason: `Memory at ${(memUtil * 100).toFixed(0)}% with ${iframeCount} iframes` };\n }\n\n // Elevated: memory > threshold AND growing trend\n if (memUtil !== null && memUtil > threshold && isGrowingTrend()) {\n return { level: 'elevated', reason: `Memory at ${(memUtil * 100).toFixed(0)}% with growing trend` };\n }\n\n return null;\n }\n\n const LEVEL_SEVERITY: Record<PreCrashLevel, number> = {\n elevated: 1,\n critical: 2,\n imminent: 3,\n };\n\n function check(): void {\n const memUtil = getMemoryUtilization();\n if (memUtil !== null) {\n recentReadings.push({ utilization: memUtil, timestamp: Date.now() });\n // Keep only recent readings\n while (recentReadings.length > TREND_WINDOW * 2) {\n recentReadings.shift();\n }\n }\n\n const iframeSnap = iframeTracker.getSnapshot();\n const result = computeLevel(memUtil, iframeSnap.totalCount);\n\n if (!result) {\n // Conditions cleared — reset so we can warn again if things deteriorate\n lastLevel = null;\n return;\n }\n\n // Only emit if severity increased or this is the first warning\n if (lastLevel === null || LEVEL_SEVERITY[result.level] > LEVEL_SEVERITY[lastLevel]) {\n lastLevel = result.level;\n\n bus.emit('pre_crash_warning', {\n level: result.level,\n memoryUtilization: memUtil,\n iframeCount: iframeSnap.totalCount,\n reason: result.reason,\n timestamp: performance.now() + performance.timeOrigin,\n });\n }\n }\n\n return {\n start(): void {\n if (typeof window === 'undefined') return;\n check();\n intervalId = setInterval(check, CHECK_INTERVAL);\n },\n\n stop(): void {\n if (intervalId !== null) {\n clearInterval(intervalId);\n intervalId = null;\n }\n lastLevel = null;\n recentReadings.length = 0;\n },\n };\n}\n","import type {\n RawCrashEvent,\n ClassificationResult,\n CrashCategory,\n ContributingFactor,\n} from '@crashsense/types';\n\ninterface CategoryScore {\n category: CrashCategory;\n subcategory: string;\n confidence: number;\n factors: ContributingFactor[];\n}\n\nfunction evaluateRuntimeError(event: RawCrashEvent): CategoryScore {\n const type = event.error.type;\n const knownTypes = ['TypeError', 'ReferenceError', 'RangeError', 'SyntaxError', 'URIError', 'EvalError'];\n\n if (knownTypes.includes(type)) {\n return {\n category: 'runtime_error',\n subcategory: type.toLowerCase(),\n confidence: 0.95,\n factors: [{\n factor: 'known_error_type',\n weight: 0.95,\n evidence: `Error type: ${type}`,\n }],\n };\n }\n\n if (event.error.message) {\n return {\n category: 'runtime_error',\n subcategory: 'custom_error',\n confidence: 0.7,\n factors: [{\n factor: 'unhandled_error',\n weight: 0.7,\n evidence: `Custom error: ${event.error.message.slice(0, 100)}`,\n }],\n };\n }\n\n return {\n category: 'runtime_error',\n subcategory: 'unknown',\n confidence: 0.5,\n factors: [],\n };\n}\n\nfunction evaluateMemoryIssue(event: RawCrashEvent): CategoryScore {\n const mem = event.system.memory;\n if (!mem) return { category: 'memory_issue', subcategory: 'unknown', confidence: 0, factors: [] };\n\n const factors: ContributingFactor[] = [];\n let confidence = 0;\n\n if (mem.utilizationPercent !== undefined && mem.utilizationPercent !== null && mem.utilizationPercent > 85) {\n confidence += 0.35;\n factors.push({\n factor: 'high_memory_utilization',\n weight: 0.35,\n evidence: `Memory utilization: ${mem.utilizationPercent}%`,\n });\n }\n\n if (mem.trend === 'growing') {\n confidence += 0.25;\n factors.push({\n factor: 'growing_memory_trend',\n weight: 0.25,\n evidence: 'Memory usage is growing over time',\n });\n }\n\n if (mem.trend === 'spike') {\n confidence += 0.15;\n factors.push({\n factor: 'memory_spike',\n weight: 0.15,\n evidence: 'Memory usage spiked recently',\n });\n }\n\n const msg = event.error.message.toLowerCase();\n if (msg.includes('out of memory') || msg.includes('allocation failed') || msg.includes('arraybuffer')) {\n confidence += 0.25;\n factors.push({\n factor: 'memory_error_message',\n weight: 0.25,\n evidence: `Error message suggests memory issue: ${event.error.message.slice(0, 80)}`,\n });\n }\n\n const subcategory = mem.trend === 'growing' ? 'memory_leak'\n : mem.trend === 'spike' ? 'heap_spike'\n : (mem.utilizationPercent ?? 0) > 95 ? 'heap_overflow'\n : 'memory_pressure';\n\n return {\n category: 'memory_issue',\n subcategory,\n confidence: Math.min(confidence, 1),\n factors,\n };\n}\n\nfunction evaluateEventLoopBlocking(event: RawCrashEvent): CategoryScore {\n const cpu = event.system.cpu;\n if (!cpu) return { category: 'event_loop_blocking', subcategory: 'unknown', confidence: 0, factors: [] };\n\n const factors: ContributingFactor[] = [];\n let confidence = 0;\n\n if (cpu.maxLongTaskDuration > 1000) {\n confidence += 0.4;\n factors.push({\n factor: 'critical_blocking',\n weight: 0.4,\n evidence: `Max long task: ${Math.round(cpu.maxLongTaskDuration)}ms`,\n });\n } else if (cpu.maxLongTaskDuration > 200) {\n confidence += 0.2;\n factors.push({\n factor: 'long_task_detected',\n weight: 0.2,\n evidence: `Max long task: ${Math.round(cpu.maxLongTaskDuration)}ms`,\n });\n }\n\n if (cpu.longTasksLast30s > 10) {\n confidence += 0.3;\n factors.push({\n factor: 'frequent_long_tasks',\n weight: 0.3,\n evidence: `${cpu.longTasksLast30s} long tasks in last 30s`,\n });\n }\n\n if (cpu.estimatedBlockingTime > 5000) {\n confidence += 0.3;\n factors.push({\n factor: 'high_tbt',\n weight: 0.3,\n evidence: `Estimated blocking time: ${Math.round(cpu.estimatedBlockingTime)}ms`,\n });\n }\n\n const subcategory = cpu.maxLongTaskDuration > 5000 ? 'infinite_loop'\n : cpu.maxLongTaskDuration > 1000 ? 'critical_blocking'\n : cpu.longTasksLast30s > 10 ? 'frequent_blocking'\n : 'long_task';\n\n return {\n category: 'event_loop_blocking',\n subcategory,\n confidence: Math.min(confidence, 1),\n factors,\n };\n}\n\nfunction evaluateReactFramework(event: RawCrashEvent): CategoryScore {\n if (event.framework.name !== 'react') {\n return { category: 'framework_react', subcategory: 'unknown', confidence: 0, factors: [] };\n }\n\n const msg = event.error.message.toLowerCase();\n const factors: ContributingFactor[] = [];\n let confidence = 0;\n let subcategory = 'component_error';\n\n if (msg.includes('hydrat')) {\n confidence = 0.95;\n subcategory = 'hydration_mismatch';\n factors.push({\n factor: 'hydration_error',\n weight: 0.95,\n evidence: 'Error message indicates hydration mismatch',\n });\n } else if (msg.includes('maximum update depth') || msg.includes('too many re-renders')) {\n confidence = 0.95;\n subcategory = 'infinite_rerender';\n factors.push({\n factor: 'infinite_render_loop',\n weight: 0.95,\n evidence: 'React detected infinite re-render loop',\n });\n } else if (msg.includes('rendered fewer hooks') || msg.includes('rendered more hooks')) {\n confidence = 0.9;\n subcategory = 'hook_violation';\n factors.push({\n factor: 'hook_rule_violation',\n weight: 0.9,\n evidence: 'Hook ordering violation detected',\n });\n } else if (event.framework.lifecycleStage) {\n confidence = 0.85;\n subcategory = `lifecycle_error_${event.framework.lifecycleStage}`;\n factors.push({\n factor: 'react_lifecycle_error',\n weight: 0.85,\n evidence: `Error during React ${event.framework.lifecycleStage} phase`,\n });\n } else {\n confidence = 0.7;\n factors.push({\n factor: 'react_context',\n weight: 0.7,\n evidence: 'Error occurred in React application context',\n });\n }\n\n return {\n category: 'framework_react',\n subcategory,\n confidence,\n factors,\n };\n}\n\nfunction evaluateVueFramework(event: RawCrashEvent): CategoryScore {\n if (event.framework.name !== 'vue') {\n return { category: 'framework_vue', subcategory: 'unknown', confidence: 0, factors: [] };\n }\n\n const msg = event.error.message.toLowerCase();\n const factors: ContributingFactor[] = [];\n let confidence = 0;\n let subcategory = 'component_error';\n\n if (msg.includes('maximum recursive') || msg.includes('infinite') && msg.includes('computed')) {\n confidence = 0.95;\n subcategory = 'reactivity_loop';\n factors.push({\n factor: 'vue_reactivity_loop',\n weight: 0.95,\n evidence: 'Detected infinite reactivity loop',\n });\n } else if (event.framework.lifecycleStage) {\n confidence = 0.85;\n subcategory = `lifecycle_error_${event.framework.lifecycleStage}`;\n factors.push({\n factor: 'vue_lifecycle_error',\n weight: 0.85,\n evidence: `Error during Vue ${event.framework.lifecycleStage} phase`,\n });\n } else {\n confidence = 0.7;\n factors.push({\n factor: 'vue_context',\n weight: 0.7,\n evidence: 'Error occurred in Vue application context',\n });\n }\n\n return {\n category: 'framework_vue',\n subcategory,\n confidence,\n factors,\n };\n}\n\nfunction evaluateNetworkInduced(event: RawCrashEvent): CategoryScore {\n const network = event.system.network;\n if (!network) return { category: 'network_induced', subcategory: 'unknown', confidence: 0, factors: [] };\n\n const factors: ContributingFactor[] = [];\n let confidence = 0;\n\n if (network.failedRequestsLast60s !== undefined && network.failedRequestsLast60s > 0) {\n confidence += 0.3;\n factors.push({\n factor: 'recent_network_failures',\n weight: 0.3,\n evidence: `${network.failedRequestsLast60s} failed requests in last 60s`,\n });\n }\n\n if (network.isOnline === false) {\n confidence += 0.3;\n factors.push({\n factor: 'offline',\n weight: 0.3,\n evidence: 'Device is offline',\n });\n }\n\n const msg = event.error.message.toLowerCase();\n if (msg.includes('fetch') || msg.includes('network') || msg.includes('cors') || msg.includes('xhr')) {\n confidence += 0.3;\n factors.push({\n factor: 'network_error_message',\n weight: 0.3,\n evidence: `Error message suggests network issue: ${event.error.message.slice(0, 80)}`,\n });\n }\n\n const subcategory = (network.isOnline === false) ? 'offline'\n : msg.includes('cors') ? 'cors_block'\n : msg.includes('timeout') ? 'timeout'\n : (network.failedRequestsLast60s ?? 0) > 0 ? 'failed_request'\n : 'network_error';\n\n return {\n category: 'network_induced',\n subcategory,\n confidence: Math.min(confidence, 1),\n factors,\n };\n}\n\nfunction evaluateIframeOverload(event: RawCrashEvent): CategoryScore {\n const iframe = event.system.iframe;\n if (!iframe) return { category: 'iframe_overload', subcategory: 'unknown', confidence: 0, factors: [] };\n\n const factors: ContributingFactor[] = [];\n let confidence = 0;\n\n if (iframe.totalCount > 10) {\n confidence += 0.3;\n factors.push({\n factor: 'excessive_iframes',\n weight: 0.3,\n evidence: `${iframe.totalCount} iframes active`,\n });\n } else if (iframe.totalCount > 5) {\n confidence += 0.15;\n factors.push({\n factor: 'many_iframes',\n weight: 0.15,\n evidence: `${iframe.totalCount} iframes active`,\n });\n }\n\n if (iframe.addedLast60s > 5) {\n confidence += 0.25;\n factors.push({\n factor: 'rapid_iframe_creation',\n weight: 0.25,\n evidence: `${iframe.addedLast60s} iframes added in last 60s`,\n });\n }\n\n if (iframe.crossOriginCount > 3) {\n confidence += 0.2;\n factors.push({\n factor: 'cross_origin_iframes',\n weight: 0.2,\n evidence: `${iframe.crossOriginCount} cross-origin iframes`,\n });\n }\n\n const mem = event.system.memory;\n if (mem && mem.trend === 'growing' && (mem.utilizationPercent ?? 0) > 70) {\n confidence += 0.25;\n factors.push({\n factor: 'iframe_memory_correlation',\n weight: 0.25,\n evidence: `Memory growing at ${mem.utilizationPercent}% with ${iframe.totalCount} iframes`,\n });\n }\n\n const subcategory = iframe.addedLast60s > 5 ? 'rapid_creation'\n : iframe.crossOriginCount > 3 ? 'cross_origin_overload'\n : iframe.totalCount > 10 ? 'excessive_count'\n : 'iframe_pressure';\n\n return {\n category: 'iframe_overload',\n subcategory,\n confidence: Math.min(confidence, 1),\n factors,\n };\n}\n\nexport function classifyCrash(event: RawCrashEvent): ClassificationResult {\n const evaluators = [\n evaluateReactFramework,\n evaluateVueFramework,\n evaluateIframeOverload,\n evaluateMemoryIssue,\n evaluateEventLoopBlocking,\n evaluateNetworkInduced,\n evaluateRuntimeError,\n ];\n\n let best: CategoryScore = {\n category: 'runtime_error',\n subcategory: 'unknown',\n confidence: 0.1,\n factors: [],\n };\n\n const allFactors: ContributingFactor[] = [];\n\n for (const evaluate of evaluators) {\n const result = evaluate(event);\n if (result.confidence > 0.2) {\n allFactors.push(...result.factors);\n }\n if (result.confidence > best.confidence) {\n best = result;\n }\n }\n\n return {\n category: best.category,\n subcategory: best.subcategory,\n confidence: best.confidence,\n contributingFactors: allFactors,\n };\n}\n","import type {\n CrashSenseConfig,\n CrashSenseCore,\n CrashSensePlugin,\n CrashEvent,\n CrashReport,\n RawCrashEvent,\n Breadcrumb,\n CrashSeverity,\n SystemState,\n DeviceInfo,\n EventBus,\n ResolvedConfig,\n} from '@crashsense/types';\nimport {\n createEventBus,\n generateFingerprint,\n createRateLimiter,\n scrubPII,\n collectDeviceInfo,\n generateId,\n parseStackTrace,\n} from '@crashsense/utils';\nimport { resolveConfig, SDK_VERSION } from './config';\nimport { createErrorInterceptor } from './error-interceptor';\nimport { createMemoryMonitor } from './memory-monitor';\nimport { createEventLoopMonitor } from './event-loop-monitor';\nimport { createNetworkMonitor } from './network-monitor';\nimport { createBreadcrumbTracker } from './breadcrumb-tracker';\nimport { createIframeTracker } from './iframe-tracker';\nimport { createPreCrashWarning } from './pre-crash-warning';\nimport { classifyCrash } from './crash-classifier';\n\nexport function createCrashSense(userConfig: CrashSenseConfig): CrashSenseCore {\n const config = resolveConfig(userConfig);\n const bus = createEventBus();\n const sessionId = generateId();\n const rateLimiter = createRateLimiter(config.maxEventsPerMinute);\n const deviceInfo = collectDeviceInfo();\n\n const plugins: CrashSensePlugin[] = [];\n let userContext: Record<string, unknown> = {};\n const customContexts: Record<string, Record<string, unknown>> = {};\n let destroyed = false;\n\n const errorInterceptor = createErrorInterceptor(bus);\n const memoryMonitor = createMemoryMonitor(bus, config);\n const eventLoopMonitor = createEventLoopMonitor(bus, config);\n const networkMonitor = createNetworkMonitor(bus, config);\n const breadcrumbTracker = createBreadcrumbTracker(bus);\n const iframeTracker = createIframeTracker(bus, config);\n const preCrashWarning = createPreCrashWarning(bus, config, memoryMonitor, iframeTracker);\n\n function buildRawEvent(error: Error, source: string): RawCrashEvent {\n const stack = error.stack ? parseStackTrace(error.stack) : [];\n\n return {\n id: generateId(),\n timestamp: performance.now() + performance.timeOrigin,\n sessionId,\n error: {\n type: error.constructor.name || error.name || 'Error',\n message: config.piiScrubbing ? scrubPII(error.message) : error.message,\n stack,\n raw: config.piiScrubbing ? scrubPII(error.stack || '') : (error.stack || ''),\n },\n system: {\n memory: memoryMonitor.getSnapshot(),\n cpu: eventLoopMonitor.getCpuSnapshot(),\n eventLoop: eventLoopMonitor.getEventLoopSnapshot(),\n network: networkMonitor.getSnapshot(),\n iframe: config.enableIframeTracking ? iframeTracker.getSnapshot() : undefined,\n },\n device: deviceInfo,\n framework: {},\n breadcrumbs: breadcrumbTracker.getBreadcrumbs(),\n meta: {\n appId: config.appId,\n environment: config.environment,\n release: config.release || undefined,\n userId: userContext.id as string | undefined,\n tags: { source },\n sdkVersion: SDK_VERSION,\n },\n };\n }\n\n function processRawEvent(rawEvent: RawCrashEvent): void {\n if (destroyed) return;\n if (Math.random() > config.sampleRate) return;\n if (!rateLimiter.tryAcquire()) return;\n\n const classification = classifyCrash(rawEvent);\n\n let crashEvent: CrashEvent = {\n id: rawEvent.id,\n fingerprint: generateFingerprint(\n rawEvent.error.type,\n rawEvent.error.message,\n rawEvent.error.stack,\n ),\n timestamp: rawEvent.timestamp,\n sessionId: rawEvent.sessionId,\n category: classification.category,\n subcategory: classification.subcategory,\n severity: classification.confidence > 0.8 ? 'critical' : 'error',\n confidence: classification.confidence,\n error: rawEvent.error,\n system: {\n memory: rawEvent.system.memory ?? memoryMonitor.getSnapshot(),\n cpu: rawEvent.system.cpu ?? eventLoopMonitor.getCpuSnapshot(),\n eventLoop: rawEvent.system.eventLoop ?? eventLoopMonitor.getEventLoopSnapshot(),\n network: rawEvent.system.network ?? networkMonitor.getSnapshot(),\n iframe: rawEvent.system.iframe ?? (config.enableIframeTracking ? iframeTracker.getSnapshot() : undefined),\n },\n device: rawEvent.device,\n framework: {\n name: (rawEvent.framework.name as 'react' | 'vue' | 'vanilla') ?? 'vanilla',\n version: rawEvent.framework.version ?? '',\n adapter: rawEvent.framework.adapter ?? SDK_VERSION,\n componentTree: rawEvent.framework.componentTree,\n currentRoute: rawEvent.framework.currentRoute,\n storeState: rawEvent.framework.storeState,\n lifecycleStage: rawEvent.framework.lifecycleStage,\n renderCount: rawEvent.framework.renderCount,\n },\n breadcrumbs: rawEvent.breadcrumbs,\n contributingFactors: classification.contributingFactors,\n meta: rawEvent.meta,\n };\n\n for (const plugin of plugins) {\n if (plugin.onCrashEvent) {\n const modified = plugin.onCrashEvent(crashEvent);\n if (modified === null) return;\n crashEvent = modified;\n }\n }\n\n const report: CrashReport = {\n event: crashEvent,\n analysis: null,\n timestamp: Date.now(),\n };\n\n bus.emit('crash_detected', { event: crashEvent });\n\n if (config.onCrash) {\n try {\n config.onCrash(report);\n } catch (_) {\n // onCrash callback errors must not propagate\n }\n }\n\n if (config.debug) {\n logCrashReport(report);\n }\n }\n\n function logCrashReport(report: CrashReport): void {\n const e = report.event;\n const header = `[CrashSense] ${e.category}/${e.subcategory} (confidence: ${(e.confidence * 100).toFixed(0)}%)`;\n const details = [\n `Error: ${e.error.type}: ${e.error.message}`,\n `Device: ${e.device.userAgent.slice(0, 80)}`,\n `Memory: ${e.system.memory.utilizationPercent ?? 'N/A'}% used`,\n `Long Tasks (30s): ${e.system.cpu.longTasksLast30s}`,\n `FPS: ${e.system.eventLoop.fps}`,\n ];\n\n if (typeof console !== 'undefined') {\n console.groupCollapsed?.(header) ?? console.log(header);\n for (const d of details) console.log(d);\n if (e.contributingFactors.length > 0) {\n console.log('Contributing factors:');\n for (const f of e.contributingFactors) {\n console.log(` - ${f.factor} (${(f.weight * 100).toFixed(0)}%): ${f.evidence}`);\n }\n }\n console.groupEnd?.();\n }\n }\n\n bus.on('error', (data) => {\n const rawEvent = buildRawEvent(data.error, 'window.onerror');\n processRawEvent(rawEvent);\n });\n\n bus.on('unhandled_rejection', (data) => {\n const error = data.reason instanceof Error\n ? data.reason\n : new Error(String(data.reason));\n const rawEvent = buildRawEvent(error, 'unhandledrejection');\n processRawEvent(rawEvent);\n });\n\n bus.on('iframe_added', (data) => {\n breadcrumbTracker.addBreadcrumb({\n type: 'custom',\n message: `Iframe added: ${data.origin} (total: ${data.totalCount})`,\n data: { src: data.src, crossOrigin: data.crossOrigin },\n });\n });\n\n bus.on('iframe_removed', (data) => {\n breadcrumbTracker.addBreadcrumb({\n type: 'custom',\n message: `Iframe removed (total: ${data.totalCount})`,\n data: { src: data.src },\n });\n });\n\n bus.on('pre_crash_warning', (data) => {\n breadcrumbTracker.addBreadcrumb({\n type: 'custom',\n message: `Pre-crash warning [${data.level}]: ${data.reason}`,\n data: { level: data.level, memoryUtilization: data.memoryUtilization, iframeCount: data.iframeCount },\n });\n });\n\n errorInterceptor.install();\n breadcrumbTracker.install();\n if (config.enableMemoryMonitoring) memoryMonitor.start();\n if (config.enableLongTaskMonitoring) eventLoopMonitor.start();\n if (config.enableNetworkMonitoring) networkMonitor.start();\n if (config.enableIframeTracking) iframeTracker.start();\n if (config.enablePreCrashWarning) preCrashWarning.start();\n\n const core: CrashSenseCore = {\n get config(): ResolvedConfig {\n return config;\n },\n\n get sessionId(): string {\n return sessionId;\n },\n\n use(plugin: CrashSensePlugin): void {\n plugins.push(plugin);\n plugin.setup(core);\n },\n\n captureException(error: unknown, context?: Record<string, unknown>): void {\n const err = error instanceof Error ? error : new Error(String(error));\n const rawEvent = buildRawEvent(err, 'manual');\n if (context) {\n rawEvent.meta.tags = { ...rawEvent.meta.tags, ...Object.fromEntries(\n Object.entries(context).map(([k, v]) => [k, String(v)])\n )};\n }\n processRawEvent(rawEvent);\n },\n\n captureMessage(message: string, severity: CrashSeverity = 'info'): void {\n const rawEvent = buildRawEvent(new Error(message), 'message');\n rawEvent.error.type = 'Message';\n rawEvent.meta.tags.severity = severity;\n processRawEvent(rawEvent);\n },\n\n addBreadcrumb(bc: Omit<Breadcrumb, 'timestamp'>): void {\n breadcrumbTracker.addBreadcrumb(bc);\n },\n\n setUser(user: { id: string; [key: string]: unknown }): void {\n userContext = user;\n },\n\n setContext(key: string, value: Record<string, unknown>): void {\n customContexts[key] = value;\n },\n\n getSystemState(): SystemState {\n return {\n memory: memoryMonitor.getSnapshot(),\n cpu: eventLoopMonitor.getCpuSnapshot(),\n eventLoop: eventLoopMonitor.getEventLoopSnapshot(),\n network: networkMonitor.getSnapshot(),\n iframe: config.enableIframeTracking ? iframeTracker.getSnapshot() : undefined,\n };\n },\n\n getDeviceInfo(): DeviceInfo {\n return deviceInfo;\n },\n\n destroy(): void {\n if (destroyed) return;\n destroyed = true;\n errorInterceptor.uninstall();\n breadcrumbTracker.uninstall();\n memoryMonitor.stop();\n eventLoopMonitor.stop();\n networkMonitor.stop();\n iframeTracker.stop();\n preCrashWarning.stop();\n for (const plugin of plugins) {\n plugin.teardown();\n }\n },\n\n _reportRawEvent(event: RawCrashEvent): void {\n processRawEvent(event);\n },\n\n _getEventBus(): EventBus {\n return bus;\n },\n };\n\n return core;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/config.ts","../src/error-interceptor.ts","../src/memory-monitor.ts","../src/event-loop-monitor.ts","../src/network-monitor.ts","../src/breadcrumb-tracker.ts","../src/iframe-tracker.ts","../src/pre-crash-warning.ts","../src/crash-classifier.ts","../src/checkpoint-manager.ts","../src/oom-recovery.ts","../src/lifecycle-flush.ts","../src/crashsense.ts"],"names":["history","HISTORY_SIZE","RingBuffer","generateId","collectDeviceInfo"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { CrashSenseConfig, ResolvedConfig, OOMRecoveryReport } from '@crashsense/types';\n\nconst SDK_VERSION = '0.1.0';\n\nexport function resolveConfig(userConfig: CrashSenseConfig): ResolvedConfig {\n if (!userConfig.appId) {\n throw new Error('[CrashSense] appId is required');\n }\n\n const sampleRate = userConfig.sampleRate ?? 1.0;\n if (sampleRate < 0 || sampleRate > 1) {\n throw new Error('[CrashSense] sampleRate must be between 0 and 1');\n }\n\n const maxEventsPerMinute = userConfig.maxEventsPerMinute ?? 30;\n if (maxEventsPerMinute <= 0) {\n throw new Error('[CrashSense] maxEventsPerMinute must be positive');\n }\n\n return {\n appId: userConfig.appId,\n environment: userConfig.environment ?? 'production',\n release: userConfig.release ?? '',\n sampleRate,\n maxEventsPerMinute,\n enableMemoryMonitoring: userConfig.enableMemoryMonitoring ?? true,\n enableLongTaskMonitoring: userConfig.enableLongTaskMonitoring ?? true,\n enableNetworkMonitoring: userConfig.enableNetworkMonitoring ?? true,\n enableIframeTracking: userConfig.enableIframeTracking ?? true,\n enablePreCrashWarning: userConfig.enablePreCrashWarning ?? true,\n preCrashMemoryThreshold: userConfig.preCrashMemoryThreshold ?? 0.80,\n piiScrubbing: userConfig.piiScrubbing ?? true,\n debug: userConfig.debug ?? false,\n onCrash: userConfig.onCrash ?? null,\n enableOOMRecovery: userConfig.enableOOMRecovery ?? false,\n checkpointInterval: userConfig.checkpointInterval ?? 10000,\n oomRecoveryThreshold: userConfig.oomRecoveryThreshold ?? 0.3,\n flushEndpoint: userConfig.flushEndpoint ?? null,\n onOOMRecovery: userConfig.onOOMRecovery ?? null,\n };\n}\n\nexport { SDK_VERSION };\n","import type { EventBus } from '@crashsense/types';\n\nconst IGNORED_MESSAGES = [\n 'ResizeObserver loop limit exceeded',\n 'ResizeObserver loop completed with undelivered notifications',\n];\n\nfunction isIgnoredError(message: string, filename?: string): boolean {\n if (IGNORED_MESSAGES.some((m) => message.includes(m))) return true;\n if (filename?.startsWith('chrome-extension://')) return true;\n if (filename?.startsWith('moz-extension://')) return true;\n if (message === 'Script error.' || message === 'Script error') return true;\n return false;\n}\n\nexport function createErrorInterceptor(bus: EventBus) {\n let errorHandler: ((event: ErrorEvent) => void) | null = null;\n let rejectionHandler: ((event: PromiseRejectionEvent) => void) | null = null;\n\n return {\n install(): void {\n if (typeof window === 'undefined') return;\n\n errorHandler = (event: ErrorEvent) => {\n if (isIgnoredError(event.message, event.filename)) return;\n\n const error = event.error instanceof Error\n ? event.error\n : new Error(event.message);\n\n bus.emit('error', {\n error,\n timestamp: performance.now() + performance.timeOrigin,\n });\n };\n\n rejectionHandler = (event: PromiseRejectionEvent) => {\n const reason = event.reason;\n bus.emit('unhandled_rejection', {\n reason,\n timestamp: performance.now() + performance.timeOrigin,\n });\n };\n\n window.addEventListener('error', errorHandler);\n window.addEventListener('unhandledrejection', rejectionHandler);\n },\n\n uninstall(): void {\n if (typeof window === 'undefined') return;\n if (errorHandler) window.removeEventListener('error', errorHandler);\n if (rejectionHandler) window.removeEventListener('unhandledrejection', rejectionHandler);\n errorHandler = null;\n rejectionHandler = null;\n },\n };\n}\n","import type { EventBus, MemoryState, MemoryTrend, ResolvedConfig } from '@crashsense/types';\nimport { RingBuffer } from '@crashsense/utils';\n\ninterface MemorySample {\n used: number;\n total: number;\n limit: number;\n timestamp: number;\n}\n\nconst SAMPLE_INTERVAL = 5000;\nconst HISTORY_SIZE = 12;\nconst WARNING_THRESHOLD = 0.85;\n\nfunction computeTrend(samples: MemorySample[]): MemoryTrend {\n if (samples.length < 3) return 'stable';\n\n const recent = samples.slice(-6);\n const first = recent[0].used;\n const last = recent[recent.length - 1].used;\n const growthRate = (last - first) / first;\n\n if (growthRate > 0.2) return 'growing';\n if (growthRate < -0.2) return 'shrinking';\n\n const shortRecent = samples.slice(-3);\n const min = Math.min(...shortRecent.map((s) => s.used));\n const max = Math.max(...shortRecent.map((s) => s.used));\n if (max > 0 && (max - min) / max > 0.2) return 'spike';\n\n return 'stable';\n}\n\nexport function createMemoryMonitor(bus: EventBus, _config: ResolvedConfig) {\n const history = new RingBuffer<MemorySample>(HISTORY_SIZE);\n let intervalId: ReturnType<typeof setInterval> | null = null;\n\n function hasPerformanceMemory(): boolean {\n return typeof performance !== 'undefined' &&\n 'memory' in performance &&\n (performance as unknown as { memory: { usedJSHeapSize: number } }).memory !== undefined;\n }\n\n function sample(): void {\n if (!hasPerformanceMemory()) return;\n\n const mem = (performance as unknown as {\n memory: { usedJSHeapSize: number; totalJSHeapSize: number; jsHeapSizeLimit: number };\n }).memory;\n\n const s: MemorySample = {\n used: mem.usedJSHeapSize,\n total: mem.totalJSHeapSize,\n limit: mem.jsHeapSizeLimit,\n timestamp: Date.now(),\n };\n history.push(s);\n\n const utilization = s.limit > 0 ? s.used / s.limit : 0;\n if (utilization > WARNING_THRESHOLD) {\n const samples = history.drain();\n bus.emit('memory_warning', {\n utilization,\n trend: computeTrend(samples),\n timestamp: performance.now() + performance.timeOrigin,\n });\n }\n }\n\n return {\n start(): void {\n if (!hasPerformanceMemory()) return;\n sample();\n intervalId = setInterval(sample, SAMPLE_INTERVAL);\n },\n\n stop(): void {\n if (intervalId !== null) {\n clearInterval(intervalId);\n intervalId = null;\n }\n },\n\n getSnapshot(): MemoryState {\n if (!hasPerformanceMemory()) {\n return {\n usedJSHeapSize: null,\n totalJSHeapSize: null,\n heapSizeLimit: null,\n trend: 'stable',\n utilizationPercent: null,\n };\n }\n\n const mem = (performance as unknown as {\n memory: { usedJSHeapSize: number; totalJSHeapSize: number; jsHeapSizeLimit: number };\n }).memory;\n\n const samples = history.drain();\n const utilization = mem.jsHeapSizeLimit > 0\n ? mem.usedJSHeapSize / mem.jsHeapSizeLimit\n : null;\n\n return {\n usedJSHeapSize: mem.usedJSHeapSize,\n totalJSHeapSize: mem.totalJSHeapSize,\n heapSizeLimit: mem.jsHeapSizeLimit,\n trend: computeTrend(samples),\n utilizationPercent: utilization !== null ? Math.round(utilization * 100) : null,\n };\n },\n };\n}\n","import type { EventBus, CpuState, EventLoopState, ResolvedConfig } from '@crashsense/types';\nimport { RingBuffer } from '@crashsense/utils';\n\ninterface LongTaskEntry {\n duration: number;\n startTime: number;\n}\n\nconst LONG_TASK_THRESHOLD = 100;\nconst HISTORY_SIZE = 200;\n\nexport function createEventLoopMonitor(bus: EventBus, _config: ResolvedConfig) {\n const taskHistory = new RingBuffer<LongTaskEntry>(HISTORY_SIZE);\n let observer: PerformanceObserver | null = null;\n let rafId: number | null = null;\n let lastFrameTime = 0;\n let fps = 60;\n\n function supportsLongTasks(): boolean {\n if (typeof PerformanceObserver === 'undefined') return false;\n try {\n const supported = PerformanceObserver.supportedEntryTypes;\n return Array.isArray(supported) && supported.includes('longtask');\n } catch {\n return false;\n }\n }\n\n function measureFps(timestamp: number): void {\n if (lastFrameTime > 0) {\n const delta = timestamp - lastFrameTime;\n if (delta > 0) {\n const instantFps = 1000 / delta;\n fps = fps * 0.9 + instantFps * 0.1;\n }\n }\n lastFrameTime = timestamp;\n rafId = requestAnimationFrame(measureFps);\n }\n\n return {\n start(): void {\n if (typeof window === 'undefined') return;\n\n if (supportsLongTasks()) {\n observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n const task: LongTaskEntry = {\n duration: entry.duration,\n startTime: entry.startTime,\n };\n taskHistory.push(task);\n\n if (entry.duration > LONG_TASK_THRESHOLD) {\n bus.emit('long_task', {\n duration: entry.duration,\n startTime: entry.startTime,\n timestamp: performance.now() + performance.timeOrigin,\n });\n }\n }\n });\n observer.observe({ entryTypes: ['longtask'] });\n }\n\n if (typeof requestAnimationFrame !== 'undefined') {\n rafId = requestAnimationFrame(measureFps);\n }\n },\n\n stop(): void {\n if (observer) {\n observer.disconnect();\n observer = null;\n }\n if (rafId !== null && typeof cancelAnimationFrame !== 'undefined') {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n },\n\n getCpuSnapshot(): CpuState {\n const now = performance.now();\n const tasks = taskHistory.drain();\n const recentTasks = tasks.filter((t) => now - t.startTime < 30000);\n\n const durations = recentTasks.map((t) => t.duration);\n const totalBlocking = durations\n .filter((d) => d > 50)\n .reduce((sum, d) => sum + (d - 50), 0);\n\n return {\n longTasksLast30s: recentTasks.length,\n avgLongTaskDuration: durations.length > 0\n ? durations.reduce((a, b) => a + b, 0) / durations.length\n : 0,\n maxLongTaskDuration: durations.length > 0\n ? Math.max(...durations)\n : 0,\n estimatedBlockingTime: totalBlocking,\n };\n },\n\n getEventLoopSnapshot(): EventLoopState {\n const cpuState = this.getCpuSnapshot();\n return {\n isBlocked: cpuState.maxLongTaskDuration > 1000,\n blockDuration: cpuState.maxLongTaskDuration > 0 ? cpuState.maxLongTaskDuration : null,\n fps: Math.round(fps),\n };\n },\n };\n}\n","import type { EventBus, NetworkState, NetworkRequest, ResolvedConfig } from '@crashsense/types';\nimport { RingBuffer } from '@crashsense/utils';\n\nconst HISTORY_SIZE = 100;\n\nexport function createNetworkMonitor(bus: EventBus, _config: ResolvedConfig) {\n const history = new RingBuffer<NetworkRequest>(HISTORY_SIZE);\n let originalFetch: typeof fetch | null = null;\n let pendingCount = 0;\n\n function wrapFetch(): void {\n if (typeof window === 'undefined' || typeof fetch === 'undefined') return;\n\n originalFetch = window.fetch;\n\n window.fetch = async function patchedFetch(\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> {\n const url = typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.href\n : input.url;\n const method = init?.method ?? 'GET';\n const startTime = performance.now();\n\n pendingCount++;\n\n try {\n const response = await originalFetch!.call(window, input, init);\n const duration = performance.now() - startTime;\n pendingCount--;\n\n const request: NetworkRequest = {\n url,\n method,\n status: response.status,\n duration,\n startTime,\n error: null,\n responseSize: null,\n };\n history.push(request);\n\n if (response.status >= 500 || response.status === 0) {\n bus.emit('network_failure', {\n url,\n status: response.status,\n error: `HTTP ${response.status}`,\n timestamp: performance.now() + performance.timeOrigin,\n });\n }\n\n return response;\n } catch (err) {\n const duration = performance.now() - startTime;\n pendingCount--;\n\n const errorMsg = err instanceof Error ? err.message : String(err);\n const request: NetworkRequest = {\n url,\n method,\n status: 0,\n duration,\n startTime,\n error: errorMsg,\n responseSize: null,\n };\n history.push(request);\n\n bus.emit('network_failure', {\n url,\n status: 0,\n error: errorMsg,\n timestamp: performance.now() + performance.timeOrigin,\n });\n\n throw err;\n }\n };\n }\n\n return {\n start(): void {\n wrapFetch();\n },\n\n stop(): void {\n if (originalFetch && typeof window !== 'undefined') {\n window.fetch = originalFetch;\n originalFetch = null;\n }\n },\n\n getSnapshot(): NetworkState {\n const now = performance.now();\n const requests = history.drain();\n const recentRequests = requests.filter((r) => now - r.startTime < 60000);\n\n const failedCount = recentRequests.filter(\n (r) => r.status === 0 || r.status >= 500 || r.error !== null,\n ).length;\n\n const latencies = recentRequests\n .filter((r) => r.error === null)\n .map((r) => r.duration);\n const avgLatency = latencies.length > 0\n ? latencies.reduce((a, b) => a + b, 0) / latencies.length\n : 0;\n\n let connectionType: string | null = null;\n if (typeof navigator !== 'undefined' && 'connection' in navigator) {\n const conn = (navigator as Navigator & { connection?: { effectiveType?: string } }).connection;\n connectionType = conn?.effectiveType ?? null;\n }\n\n return {\n pendingRequests: pendingCount,\n failedRequestsLast60s: failedCount,\n avgLatencyLast60s: Math.round(avgLatency),\n connectionType,\n isOnline: typeof navigator !== 'undefined' ? navigator.onLine : true,\n };\n },\n };\n}\n","import type { Breadcrumb, EventBus } from '@crashsense/types';\nimport { RingBuffer } from '@crashsense/utils';\n\nconst BUFFER_SIZE = 50;\n\nexport function createBreadcrumbTracker(bus: EventBus) {\n const buffer = new RingBuffer<Breadcrumb>(BUFFER_SIZE);\n let clickHandler: ((e: MouseEvent) => void) | null = null;\n let originalPushState: typeof history.pushState | null = null;\n let originalReplaceState: typeof history.replaceState | null = null;\n\n function addBreadcrumb(bc: Omit<Breadcrumb, 'timestamp'>): void {\n const crumb: Breadcrumb = {\n ...bc,\n timestamp: performance.now() + performance.timeOrigin,\n };\n buffer.push(crumb);\n bus.emit('breadcrumb', crumb);\n }\n\n function getElementDescription(target: EventTarget | null): string {\n if (!target || !(target instanceof Element)) return 'unknown';\n const tag = target.tagName.toLowerCase();\n const id = target.id ? `#${target.id}` : '';\n const cls = target.className && typeof target.className === 'string'\n ? `.${target.className.split(' ').slice(0, 2).join('.')}`\n : '';\n const text = target.textContent?.trim().slice(0, 30) ?? '';\n return `${tag}${id}${cls}${text ? ` \"${text}\"` : ''}`;\n }\n\n return {\n install(): void {\n if (typeof window === 'undefined') return;\n\n clickHandler = (e: MouseEvent) => {\n addBreadcrumb({\n type: 'click',\n message: `Click on ${getElementDescription(e.target)}`,\n });\n };\n document.addEventListener('click', clickHandler, { capture: true, passive: true });\n\n originalPushState = history.pushState;\n history.pushState = function (...args) {\n addBreadcrumb({\n type: 'navigation',\n message: `pushState to ${String(args[2] ?? '')}`,\n });\n return originalPushState!.apply(this, args);\n };\n\n originalReplaceState = history.replaceState;\n history.replaceState = function (...args) {\n addBreadcrumb({\n type: 'navigation',\n message: `replaceState to ${String(args[2] ?? '')}`,\n });\n return originalReplaceState!.apply(this, args);\n };\n\n bus.on('error', (data) => {\n addBreadcrumb({\n type: 'console',\n message: `Error: ${data.error.message}`,\n });\n });\n\n bus.on('network_failure', (data) => {\n addBreadcrumb({\n type: 'network',\n message: `Network failure: ${data.url} (${data.error})`,\n });\n });\n },\n\n uninstall(): void {\n if (typeof window === 'undefined') return;\n if (clickHandler) {\n document.removeEventListener('click', clickHandler, { capture: true } as EventListenerOptions);\n clickHandler = null;\n }\n if (originalPushState) {\n history.pushState = originalPushState;\n originalPushState = null;\n }\n if (originalReplaceState) {\n history.replaceState = originalReplaceState;\n originalReplaceState = null;\n }\n },\n\n getBreadcrumbs(): Breadcrumb[] {\n return buffer.drain();\n },\n\n addBreadcrumb,\n };\n}\n","import type { EventBus, IframeState, ResolvedConfig } from '@crashsense/types';\n\ninterface IframeEvent {\n src: string;\n origin: string;\n crossOrigin: boolean;\n timestamp: number;\n action: 'added' | 'removed';\n}\n\nconst HISTORY_WINDOW = 60_000;\n\nfunction extractOrigin(src: string): string {\n try {\n return new URL(src, location.href).origin;\n } catch {\n return 'unknown';\n }\n}\n\nfunction isCrossOrigin(origin: string): boolean {\n if (typeof location === 'undefined') return false;\n return origin !== 'unknown' && origin !== location.origin;\n}\n\nexport function createIframeTracker(bus: EventBus, _config: ResolvedConfig) {\n const events: IframeEvent[] = [];\n let observer: MutationObserver | null = null;\n let currentCount = 0;\n\n function pruneOldEvents(): void {\n const cutoff = Date.now() - HISTORY_WINDOW;\n while (events.length > 0 && events[0].timestamp < cutoff) {\n events.shift();\n }\n }\n\n function countCurrentIframes(): number {\n if (typeof document === 'undefined') return 0;\n return document.querySelectorAll('iframe').length;\n }\n\n function handleAddedIframe(iframe: HTMLIFrameElement): void {\n const src = iframe.src || iframe.getAttribute('src') || '';\n const origin = extractOrigin(src);\n const crossOrigin = isCrossOrigin(origin);\n currentCount = countCurrentIframes();\n\n const now = Date.now();\n events.push({ src, origin, crossOrigin, timestamp: now, action: 'added' });\n\n bus.emit('iframe_added', {\n src,\n origin,\n crossOrigin,\n totalCount: currentCount,\n timestamp: performance.now() + performance.timeOrigin,\n });\n }\n\n function handleRemovedIframe(iframe: HTMLIFrameElement): void {\n const src = iframe.src || iframe.getAttribute('src') || '';\n currentCount = countCurrentIframes();\n\n events.push({ src, origin: extractOrigin(src), crossOrigin: false, timestamp: Date.now(), action: 'removed' });\n\n bus.emit('iframe_removed', {\n src,\n totalCount: currentCount,\n timestamp: performance.now() + performance.timeOrigin,\n });\n }\n\n function processNodes(nodes: NodeList, action: 'added' | 'removed'): void {\n for (const node of Array.from(nodes)) {\n if (node instanceof HTMLIFrameElement) {\n if (action === 'added') handleAddedIframe(node);\n else handleRemovedIframe(node);\n }\n if (node instanceof Element) {\n const nested = node.querySelectorAll('iframe');\n for (const iframe of Array.from(nested)) {\n if (action === 'added') handleAddedIframe(iframe);\n else handleRemovedIframe(iframe);\n }\n }\n }\n }\n\n return {\n start(): void {\n if (typeof window === 'undefined' || typeof MutationObserver === 'undefined') return;\n\n currentCount = countCurrentIframes();\n\n observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.addedNodes.length > 0) processNodes(mutation.addedNodes, 'added');\n if (mutation.removedNodes.length > 0) processNodes(mutation.removedNodes, 'removed');\n }\n });\n\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n });\n },\n\n stop(): void {\n if (observer) {\n observer.disconnect();\n observer = null;\n }\n },\n\n getSnapshot(): IframeState {\n pruneOldEvents();\n\n const addedLast60s = events.filter((e) => e.action === 'added').length;\n const removedLast60s = events.filter((e) => e.action === 'removed').length;\n\n const originsSet = new Set<string>();\n let crossOriginCount = 0;\n\n if (typeof document !== 'undefined') {\n const iframes = document.querySelectorAll('iframe');\n for (const iframe of Array.from(iframes)) {\n const src = iframe.src || iframe.getAttribute('src') || '';\n const origin = extractOrigin(src);\n originsSet.add(origin);\n if (isCrossOrigin(origin)) crossOriginCount++;\n }\n }\n\n return {\n totalCount: currentCount,\n addedLast60s,\n removedLast60s,\n origins: Array.from(originsSet),\n crossOriginCount,\n };\n },\n };\n}\n","import type { EventBus, PreCrashLevel, ResolvedConfig } from '@crashsense/types';\n\ninterface MemoryReading {\n utilization: number;\n timestamp: number;\n}\n\nconst CHECK_INTERVAL = 3000;\nconst TREND_WINDOW = 5;\n\nexport function createPreCrashWarning(\n bus: EventBus,\n config: ResolvedConfig,\n memoryMonitor: { getSnapshot(): { utilizationPercent: number | null } },\n iframeTracker: { getSnapshot(): { totalCount: number; addedLast60s: number; crossOriginCount: number } },\n) {\n let intervalId: ReturnType<typeof setInterval> | null = null;\n let lastLevel: PreCrashLevel | null = null;\n const recentReadings: MemoryReading[] = [];\n\n function getMemoryUtilization(): number | null {\n const snap = memoryMonitor.getSnapshot();\n return snap.utilizationPercent !== null ? snap.utilizationPercent / 100 : null;\n }\n\n function isGrowingTrend(): boolean {\n if (recentReadings.length < 3) return false;\n const recent = recentReadings.slice(-TREND_WINDOW);\n let increases = 0;\n for (let i = 1; i < recent.length; i++) {\n if (recent[i].utilization > recent[i - 1].utilization) increases++;\n }\n return increases >= Math.floor(recent.length * 0.6);\n }\n\n function computeLevel(memUtil: number | null, iframeCount: number): { level: PreCrashLevel; reason: string } | null {\n const threshold = config.preCrashMemoryThreshold;\n\n // Imminent: memory > 95% OR (memory > threshold + 15% AND growing trend)\n if (memUtil !== null && memUtil > 0.95) {\n return { level: 'imminent', reason: `Memory at ${(memUtil * 100).toFixed(0)}% — crash likely` };\n }\n\n if (memUtil !== null && memUtil > threshold + 0.15 && isGrowingTrend()) {\n return { level: 'imminent', reason: `Memory at ${(memUtil * 100).toFixed(0)}% with growing trend` };\n }\n\n // Critical: memory > threshold + 5% AND (growing trend OR iframes > 5)\n if (memUtil !== null && memUtil > threshold + 0.05) {\n if (isGrowingTrend()) {\n return { level: 'critical', reason: `Memory at ${(memUtil * 100).toFixed(0)}% with growing trend` };\n }\n if (iframeCount > 5) {\n return { level: 'critical', reason: `Memory at ${(memUtil * 100).toFixed(0)}% with ${iframeCount} iframes` };\n }\n }\n\n // Elevated: memory > threshold AND iframes > 3\n if (memUtil !== null && memUtil > threshold && iframeCount > 3) {\n return { level: 'elevated', reason: `Memory at ${(memUtil * 100).toFixed(0)}% with ${iframeCount} iframes` };\n }\n\n // Elevated: memory > threshold AND growing trend\n if (memUtil !== null && memUtil > threshold && isGrowingTrend()) {\n return { level: 'elevated', reason: `Memory at ${(memUtil * 100).toFixed(0)}% with growing trend` };\n }\n\n return null;\n }\n\n const LEVEL_SEVERITY: Record<PreCrashLevel, number> = {\n elevated: 1,\n critical: 2,\n imminent: 3,\n };\n\n function check(): void {\n const memUtil = getMemoryUtilization();\n if (memUtil !== null) {\n recentReadings.push({ utilization: memUtil, timestamp: Date.now() });\n // Keep only recent readings\n while (recentReadings.length > TREND_WINDOW * 2) {\n recentReadings.shift();\n }\n }\n\n const iframeSnap = iframeTracker.getSnapshot();\n const result = computeLevel(memUtil, iframeSnap.totalCount);\n\n if (!result) {\n // Conditions cleared — reset so we can warn again if things deteriorate\n lastLevel = null;\n return;\n }\n\n // Only emit if severity increased or this is the first warning\n if (lastLevel === null || LEVEL_SEVERITY[result.level] > LEVEL_SEVERITY[lastLevel]) {\n lastLevel = result.level;\n\n bus.emit('pre_crash_warning', {\n level: result.level,\n memoryUtilization: memUtil,\n iframeCount: iframeSnap.totalCount,\n reason: result.reason,\n timestamp: performance.now() + performance.timeOrigin,\n });\n }\n }\n\n return {\n start(): void {\n if (typeof window === 'undefined') return;\n check();\n intervalId = setInterval(check, CHECK_INTERVAL);\n },\n\n stop(): void {\n if (intervalId !== null) {\n clearInterval(intervalId);\n intervalId = null;\n }\n lastLevel = null;\n recentReadings.length = 0;\n },\n };\n}\n","import type {\n RawCrashEvent,\n ClassificationResult,\n CrashCategory,\n ContributingFactor,\n} from '@crashsense/types';\n\ninterface CategoryScore {\n category: CrashCategory;\n subcategory: string;\n confidence: number;\n factors: ContributingFactor[];\n}\n\nfunction evaluateRuntimeError(event: RawCrashEvent): CategoryScore {\n const type = event.error.type;\n const knownTypes = ['TypeError', 'ReferenceError', 'RangeError', 'SyntaxError', 'URIError', 'EvalError'];\n\n if (knownTypes.includes(type)) {\n return {\n category: 'runtime_error',\n subcategory: type.toLowerCase(),\n confidence: 0.95,\n factors: [{\n factor: 'known_error_type',\n weight: 0.95,\n evidence: `Error type: ${type}`,\n }],\n };\n }\n\n if (event.error.message) {\n return {\n category: 'runtime_error',\n subcategory: 'custom_error',\n confidence: 0.7,\n factors: [{\n factor: 'unhandled_error',\n weight: 0.7,\n evidence: `Custom error: ${event.error.message.slice(0, 100)}`,\n }],\n };\n }\n\n return {\n category: 'runtime_error',\n subcategory: 'unknown',\n confidence: 0.5,\n factors: [],\n };\n}\n\nfunction evaluateMemoryIssue(event: RawCrashEvent): CategoryScore {\n const mem = event.system.memory;\n if (!mem) return { category: 'memory_issue', subcategory: 'unknown', confidence: 0, factors: [] };\n\n const factors: ContributingFactor[] = [];\n let confidence = 0;\n\n if (mem.utilizationPercent !== undefined && mem.utilizationPercent !== null && mem.utilizationPercent > 85) {\n confidence += 0.35;\n factors.push({\n factor: 'high_memory_utilization',\n weight: 0.35,\n evidence: `Memory utilization: ${mem.utilizationPercent}%`,\n });\n }\n\n if (mem.trend === 'growing') {\n confidence += 0.25;\n factors.push({\n factor: 'growing_memory_trend',\n weight: 0.25,\n evidence: 'Memory usage is growing over time',\n });\n }\n\n if (mem.trend === 'spike') {\n confidence += 0.15;\n factors.push({\n factor: 'memory_spike',\n weight: 0.15,\n evidence: 'Memory usage spiked recently',\n });\n }\n\n const msg = event.error.message.toLowerCase();\n if (msg.includes('out of memory') || msg.includes('allocation failed') || msg.includes('arraybuffer')) {\n confidence += 0.25;\n factors.push({\n factor: 'memory_error_message',\n weight: 0.25,\n evidence: `Error message suggests memory issue: ${event.error.message.slice(0, 80)}`,\n });\n }\n\n const subcategory = mem.trend === 'growing' ? 'memory_leak'\n : mem.trend === 'spike' ? 'heap_spike'\n : (mem.utilizationPercent ?? 0) > 95 ? 'heap_overflow'\n : 'memory_pressure';\n\n return {\n category: 'memory_issue',\n subcategory,\n confidence: Math.min(confidence, 1),\n factors,\n };\n}\n\nfunction evaluateEventLoopBlocking(event: RawCrashEvent): CategoryScore {\n const cpu = event.system.cpu;\n if (!cpu) return { category: 'event_loop_blocking', subcategory: 'unknown', confidence: 0, factors: [] };\n\n const factors: ContributingFactor[] = [];\n let confidence = 0;\n\n if (cpu.maxLongTaskDuration > 1000) {\n confidence += 0.4;\n factors.push({\n factor: 'critical_blocking',\n weight: 0.4,\n evidence: `Max long task: ${Math.round(cpu.maxLongTaskDuration)}ms`,\n });\n } else if (cpu.maxLongTaskDuration > 200) {\n confidence += 0.2;\n factors.push({\n factor: 'long_task_detected',\n weight: 0.2,\n evidence: `Max long task: ${Math.round(cpu.maxLongTaskDuration)}ms`,\n });\n }\n\n if (cpu.longTasksLast30s > 10) {\n confidence += 0.3;\n factors.push({\n factor: 'frequent_long_tasks',\n weight: 0.3,\n evidence: `${cpu.longTasksLast30s} long tasks in last 30s`,\n });\n }\n\n if (cpu.estimatedBlockingTime > 5000) {\n confidence += 0.3;\n factors.push({\n factor: 'high_tbt',\n weight: 0.3,\n evidence: `Estimated blocking time: ${Math.round(cpu.estimatedBlockingTime)}ms`,\n });\n }\n\n const subcategory = cpu.maxLongTaskDuration > 5000 ? 'infinite_loop'\n : cpu.maxLongTaskDuration > 1000 ? 'critical_blocking'\n : cpu.longTasksLast30s > 10 ? 'frequent_blocking'\n : 'long_task';\n\n return {\n category: 'event_loop_blocking',\n subcategory,\n confidence: Math.min(confidence, 1),\n factors,\n };\n}\n\nfunction evaluateReactFramework(event: RawCrashEvent): CategoryScore {\n if (event.framework.name !== 'react') {\n return { category: 'framework_react', subcategory: 'unknown', confidence: 0, factors: [] };\n }\n\n const msg = event.error.message.toLowerCase();\n const factors: ContributingFactor[] = [];\n let confidence = 0;\n let subcategory = 'component_error';\n\n if (msg.includes('hydrat')) {\n confidence = 0.95;\n subcategory = 'hydration_mismatch';\n factors.push({\n factor: 'hydration_error',\n weight: 0.95,\n evidence: 'Error message indicates hydration mismatch',\n });\n } else if (msg.includes('maximum update depth') || msg.includes('too many re-renders')) {\n confidence = 0.95;\n subcategory = 'infinite_rerender';\n factors.push({\n factor: 'infinite_render_loop',\n weight: 0.95,\n evidence: 'React detected infinite re-render loop',\n });\n } else if (msg.includes('rendered fewer hooks') || msg.includes('rendered more hooks')) {\n confidence = 0.9;\n subcategory = 'hook_violation';\n factors.push({\n factor: 'hook_rule_violation',\n weight: 0.9,\n evidence: 'Hook ordering violation detected',\n });\n } else if (event.framework.lifecycleStage) {\n confidence = 0.85;\n subcategory = `lifecycle_error_${event.framework.lifecycleStage}`;\n factors.push({\n factor: 'react_lifecycle_error',\n weight: 0.85,\n evidence: `Error during React ${event.framework.lifecycleStage} phase`,\n });\n } else {\n confidence = 0.7;\n factors.push({\n factor: 'react_context',\n weight: 0.7,\n evidence: 'Error occurred in React application context',\n });\n }\n\n return {\n category: 'framework_react',\n subcategory,\n confidence,\n factors,\n };\n}\n\nfunction evaluateVueFramework(event: RawCrashEvent): CategoryScore {\n if (event.framework.name !== 'vue') {\n return { category: 'framework_vue', subcategory: 'unknown', confidence: 0, factors: [] };\n }\n\n const msg = event.error.message.toLowerCase();\n const factors: ContributingFactor[] = [];\n let confidence = 0;\n let subcategory = 'component_error';\n\n if (msg.includes('maximum recursive') || msg.includes('infinite') && msg.includes('computed')) {\n confidence = 0.95;\n subcategory = 'reactivity_loop';\n factors.push({\n factor: 'vue_reactivity_loop',\n weight: 0.95,\n evidence: 'Detected infinite reactivity loop',\n });\n } else if (event.framework.lifecycleStage) {\n confidence = 0.85;\n subcategory = `lifecycle_error_${event.framework.lifecycleStage}`;\n factors.push({\n factor: 'vue_lifecycle_error',\n weight: 0.85,\n evidence: `Error during Vue ${event.framework.lifecycleStage} phase`,\n });\n } else {\n confidence = 0.7;\n factors.push({\n factor: 'vue_context',\n weight: 0.7,\n evidence: 'Error occurred in Vue application context',\n });\n }\n\n return {\n category: 'framework_vue',\n subcategory,\n confidence,\n factors,\n };\n}\n\nfunction evaluateNetworkInduced(event: RawCrashEvent): CategoryScore {\n const network = event.system.network;\n if (!network) return { category: 'network_induced', subcategory: 'unknown', confidence: 0, factors: [] };\n\n const factors: ContributingFactor[] = [];\n let confidence = 0;\n\n if (network.failedRequestsLast60s !== undefined && network.failedRequestsLast60s > 0) {\n confidence += 0.3;\n factors.push({\n factor: 'recent_network_failures',\n weight: 0.3,\n evidence: `${network.failedRequestsLast60s} failed requests in last 60s`,\n });\n }\n\n if (network.isOnline === false) {\n confidence += 0.3;\n factors.push({\n factor: 'offline',\n weight: 0.3,\n evidence: 'Device is offline',\n });\n }\n\n const msg = event.error.message.toLowerCase();\n if (msg.includes('fetch') || msg.includes('network') || msg.includes('cors') || msg.includes('xhr')) {\n confidence += 0.3;\n factors.push({\n factor: 'network_error_message',\n weight: 0.3,\n evidence: `Error message suggests network issue: ${event.error.message.slice(0, 80)}`,\n });\n }\n\n const subcategory = (network.isOnline === false) ? 'offline'\n : msg.includes('cors') ? 'cors_block'\n : msg.includes('timeout') ? 'timeout'\n : (network.failedRequestsLast60s ?? 0) > 0 ? 'failed_request'\n : 'network_error';\n\n return {\n category: 'network_induced',\n subcategory,\n confidence: Math.min(confidence, 1),\n factors,\n };\n}\n\nfunction evaluateIframeOverload(event: RawCrashEvent): CategoryScore {\n const iframe = event.system.iframe;\n if (!iframe) return { category: 'iframe_overload', subcategory: 'unknown', confidence: 0, factors: [] };\n\n const factors: ContributingFactor[] = [];\n let confidence = 0;\n\n if (iframe.totalCount > 10) {\n confidence += 0.3;\n factors.push({\n factor: 'excessive_iframes',\n weight: 0.3,\n evidence: `${iframe.totalCount} iframes active`,\n });\n } else if (iframe.totalCount > 5) {\n confidence += 0.15;\n factors.push({\n factor: 'many_iframes',\n weight: 0.15,\n evidence: `${iframe.totalCount} iframes active`,\n });\n }\n\n if (iframe.addedLast60s > 5) {\n confidence += 0.25;\n factors.push({\n factor: 'rapid_iframe_creation',\n weight: 0.25,\n evidence: `${iframe.addedLast60s} iframes added in last 60s`,\n });\n }\n\n if (iframe.crossOriginCount > 3) {\n confidence += 0.2;\n factors.push({\n factor: 'cross_origin_iframes',\n weight: 0.2,\n evidence: `${iframe.crossOriginCount} cross-origin iframes`,\n });\n }\n\n const mem = event.system.memory;\n if (mem && mem.trend === 'growing' && (mem.utilizationPercent ?? 0) > 70) {\n confidence += 0.25;\n factors.push({\n factor: 'iframe_memory_correlation',\n weight: 0.25,\n evidence: `Memory growing at ${mem.utilizationPercent}% with ${iframe.totalCount} iframes`,\n });\n }\n\n const subcategory = iframe.addedLast60s > 5 ? 'rapid_creation'\n : iframe.crossOriginCount > 3 ? 'cross_origin_overload'\n : iframe.totalCount > 10 ? 'excessive_count'\n : 'iframe_pressure';\n\n return {\n category: 'iframe_overload',\n subcategory,\n confidence: Math.min(confidence, 1),\n factors,\n };\n}\n\nexport function classifyCrash(event: RawCrashEvent): ClassificationResult {\n const evaluators = [\n evaluateReactFramework,\n evaluateVueFramework,\n evaluateIframeOverload,\n evaluateMemoryIssue,\n evaluateEventLoopBlocking,\n evaluateNetworkInduced,\n evaluateRuntimeError,\n ];\n\n let best: CategoryScore = {\n category: 'runtime_error',\n subcategory: 'unknown',\n confidence: 0.1,\n factors: [],\n };\n\n const allFactors: ContributingFactor[] = [];\n\n for (const evaluate of evaluators) {\n const result = evaluate(event);\n if (result.confidence > 0.2) {\n allFactors.push(...result.factors);\n }\n if (result.confidence > best.confidence) {\n best = result;\n }\n }\n\n return {\n category: best.category,\n subcategory: best.subcategory,\n confidence: best.confidence,\n contributingFactors: allFactors,\n };\n}\n","import type {\n CheckpointData,\n Breadcrumb,\n EventBus,\n ResolvedConfig,\n SystemState,\n DeviceInfo,\n PreCrashLevel,\n MemoryTrend,\n} from '@crashsense/types';\n\nconst CHECKPOINT_KEY = '__crashsense_checkpoint';\nconst CHECKPOINT_VERSION = 1;\n\n/**\n * Periodically writes system state checkpoints to sessionStorage.\n *\n * When the browser OOM-kills a tab, all in-memory data is lost.\n * By writing snapshots every N seconds, we preserve the last known\n * state so the next page load can detect and report the OOM crash.\n *\n * Uses sessionStorage because:\n * - Survives tab reload (same browsing context)\n * - Does NOT survive manual tab close (correct behavior — avoids stale data)\n * - Synchronous API — guaranteed to complete before tab is killed\n * - ~5MB per origin — more than enough for checkpoint data\n */\nexport function createCheckpointManager(\n bus: EventBus,\n config: ResolvedConfig,\n sessionId: string,\n deviceInfo: DeviceInfo,\n getSystemState: () => Partial<SystemState>,\n getBreadcrumbs: () => Breadcrumb[],\n) {\n let intervalId: ReturnType<typeof setInterval> | null = null;\n let checkpointCount = 0;\n const preCrashWarnings: Array<{ level: PreCrashLevel; reason: string; timestamp: number }> = [];\n let lastMemoryTrend: MemoryTrend | null = null;\n\n function hasSessionStorage(): boolean {\n try {\n return typeof sessionStorage !== 'undefined' && sessionStorage !== null;\n } catch {\n // SecurityError: access denied in some contexts (cross-origin iframes, etc.)\n return false;\n }\n }\n\n function writeCheckpoint(): void {\n if (!hasSessionStorage()) return;\n\n checkpointCount++;\n\n const systemState = getSystemState();\n if (systemState.memory?.trend) {\n lastMemoryTrend = systemState.memory.trend;\n }\n\n const checkpoint: CheckpointData = {\n version: CHECKPOINT_VERSION,\n timestamp: Date.now(),\n sessionId,\n appId: config.appId,\n url: typeof location !== 'undefined' ? location.href : '',\n breadcrumbs: getBreadcrumbs().slice(-20),\n systemState,\n device: deviceInfo,\n preCrashWarnings: preCrashWarnings.slice(-5),\n memoryTrend: lastMemoryTrend,\n checkpointCount,\n };\n\n try {\n sessionStorage.setItem(CHECKPOINT_KEY, JSON.stringify(checkpoint));\n bus.emit('checkpoint_written', { timestamp: checkpoint.timestamp, sessionId });\n } catch {\n // sessionStorage full or write failed — attempt to write minimal checkpoint\n try {\n const minimal: CheckpointData = {\n ...checkpoint,\n breadcrumbs: checkpoint.breadcrumbs.slice(-5),\n systemState: { memory: systemState.memory },\n };\n sessionStorage.setItem(CHECKPOINT_KEY, JSON.stringify(minimal));\n } catch {\n // Storage completely inaccessible — nothing we can do\n }\n }\n }\n\n // Listen for pre-crash warnings to include in checkpoints\n bus.on('pre_crash_warning', (data) => {\n preCrashWarnings.push({\n level: data.level,\n reason: data.reason,\n timestamp: data.timestamp,\n });\n // Keep only last 10 warnings\n while (preCrashWarnings.length > 10) {\n preCrashWarnings.shift();\n }\n // Write an immediate checkpoint when pre-crash warning fires\n // This maximizes data survival when OOM is imminent\n writeCheckpoint();\n });\n\n // Write checkpoint on every crash detection (the callback may not complete before OOM)\n bus.on('crash_detected', () => {\n writeCheckpoint();\n });\n\n return {\n start(): void {\n if (typeof window === 'undefined') return;\n if (!hasSessionStorage()) return;\n\n // Write initial checkpoint immediately\n writeCheckpoint();\n\n // Then write periodically\n intervalId = setInterval(writeCheckpoint, config.checkpointInterval);\n },\n\n stop(): void {\n if (intervalId !== null) {\n clearInterval(intervalId);\n intervalId = null;\n }\n },\n\n /** Force an immediate checkpoint write (used by lifecycle flush) */\n flush(): void {\n writeCheckpoint();\n },\n\n /** Read and remove the stored checkpoint (used by OOM recovery on next load) */\n static: {\n readCheckpoint(): CheckpointData | null {\n try {\n if (typeof sessionStorage === 'undefined') return null;\n const raw = sessionStorage.getItem(CHECKPOINT_KEY);\n if (!raw) return null;\n const data = JSON.parse(raw) as CheckpointData;\n if (data.version !== CHECKPOINT_VERSION) return null;\n return data;\n } catch {\n return null;\n }\n },\n\n clearCheckpoint(): void {\n try {\n if (typeof sessionStorage !== 'undefined') {\n sessionStorage.removeItem(CHECKPOINT_KEY);\n }\n } catch {\n // Ignore\n }\n },\n },\n\n /** Clear checkpoint on clean shutdown (destroy) */\n clearOnDestroy(): void {\n try {\n if (hasSessionStorage()) {\n sessionStorage.removeItem(CHECKPOINT_KEY);\n }\n } catch {\n // Ignore\n }\n },\n };\n}\n\n// Static helpers exported separately for use by oom-recovery before CrashSense init\nexport function readCheckpoint(): CheckpointData | null {\n try {\n if (typeof sessionStorage === 'undefined') return null;\n const raw = sessionStorage.getItem(CHECKPOINT_KEY);\n if (!raw) return null;\n const data = JSON.parse(raw) as CheckpointData;\n if (data.version !== CHECKPOINT_VERSION) return null;\n return data;\n } catch {\n return null;\n }\n}\n\nexport function clearCheckpoint(): void {\n try {\n if (typeof sessionStorage !== 'undefined') {\n sessionStorage.removeItem(CHECKPOINT_KEY);\n }\n } catch {\n // Ignore\n }\n}\n","import type {\n OOMRecoveryReport,\n OOMSignal,\n EventBus,\n ResolvedConfig,\n} from '@crashsense/types';\nimport { generateId, collectDeviceInfo } from '@crashsense/utils';\nimport { readCheckpoint, clearCheckpoint } from './checkpoint-manager';\n\n/**\n * OOM Recovery Detection\n *\n * On mobile browsers, when memory pressure exceeds OS thresholds, the browser\n * kills the tab WITHOUT firing any JavaScript events (no beforeunload, no pagehide).\n * All in-memory data is lost.\n *\n * This module detects OOM kills by:\n * 1. Reading the last checkpoint from sessionStorage (written by checkpoint-manager)\n * 2. Analyzing signals: time since checkpoint, document.wasDiscarded, navigation type,\n * memory trend, pre-crash warnings\n * 3. Computing an OOM probability score\n * 4. If probability exceeds threshold, emitting an OOM recovery report\n *\n * This runs ONCE at SDK initialization, before any other monitoring starts.\n */\n\ninterface WasDiscardedDocument extends Document {\n wasDiscarded?: boolean;\n}\n\nfunction getNavigationType(): string {\n try {\n if (typeof performance === 'undefined') return 'unknown';\n const entries = performance.getEntriesByType('navigation');\n if (entries.length > 0) {\n return (entries[0] as PerformanceNavigationTiming).type || 'unknown';\n }\n } catch {\n // Ignore\n }\n return 'unknown';\n}\n\nfunction getWasDiscarded(): boolean | undefined {\n try {\n const doc = document as WasDiscardedDocument;\n if ('wasDiscarded' in doc) {\n return doc.wasDiscarded;\n }\n } catch {\n // Ignore\n }\n return undefined;\n}\n\nexport function detectOOMRecovery(\n bus: EventBus,\n config: ResolvedConfig,\n currentSessionId: string,\n): OOMRecoveryReport | null {\n if (typeof window === 'undefined') return null;\n\n const checkpoint = readCheckpoint();\n if (!checkpoint) return null;\n\n // Clear the checkpoint immediately to prevent re-reporting\n clearCheckpoint();\n\n const now = Date.now();\n const timeSinceCheckpoint = now - checkpoint.timestamp;\n\n // If checkpoint is older than 5 minutes, this is likely a manual reload/navigation,\n // not an OOM kill. OOM kills happen while the page is active — the checkpoint\n // would be at most ~checkpointInterval + a few seconds old.\n const MAX_OOM_AGE = 5 * 60 * 1000; // 5 minutes\n if (timeSinceCheckpoint > MAX_OOM_AGE) return null;\n\n // Verify this checkpoint belongs to the same app\n if (checkpoint.appId !== config.appId) return null;\n\n const wasDiscarded = getWasDiscarded();\n const navigationType = getNavigationType();\n const deviceInfo = collectDeviceInfo();\n\n // ---- Signal Analysis ----\n const signals: OOMSignal[] = [];\n let probability = 0;\n\n // Signal 1: document.wasDiscarded (Chrome 68+, Android)\n // Most reliable signal — OS confirmed it discarded the page\n if (wasDiscarded === true) {\n probability += 0.45;\n signals.push({\n signal: 'document_was_discarded',\n weight: 0.45,\n evidence: 'document.wasDiscarded is true — OS confirmed tab discard',\n });\n }\n\n // Signal 2: Navigation type + recency\n // OOM kills result in 'reload' navigation type.\n // If checkpoint is < 30s old AND nav type is reload → very likely OOM\n if (navigationType === 'reload' && timeSinceCheckpoint < 30_000) {\n probability += 0.25;\n signals.push({\n signal: 'recent_reload',\n weight: 0.25,\n evidence: `Page reloaded ${Math.round(timeSinceCheckpoint / 1000)}s after last checkpoint`,\n });\n } else if (navigationType === 'reload' && timeSinceCheckpoint < 60_000) {\n probability += 0.15;\n signals.push({\n signal: 'moderate_reload',\n weight: 0.15,\n evidence: `Page reloaded ${Math.round(timeSinceCheckpoint / 1000)}s after last checkpoint`,\n });\n }\n\n // Signal 3: Memory trend was growing\n if (checkpoint.memoryTrend === 'growing') {\n probability += 0.10;\n signals.push({\n signal: 'memory_growing_trend',\n weight: 0.10,\n evidence: 'Memory was in growing trend before tab died',\n });\n } else if (checkpoint.memoryTrend === 'spike') {\n probability += 0.08;\n signals.push({\n signal: 'memory_spike',\n weight: 0.08,\n evidence: 'Memory was spiking before tab died',\n });\n }\n\n // Signal 4: Pre-crash warnings were active\n if (checkpoint.preCrashWarnings.length > 0) {\n const highestLevel = checkpoint.preCrashWarnings.reduce((max, w) => {\n const severity = { elevated: 1, critical: 2, imminent: 3 } as Record<string, number>;\n return (severity[w.level] || 0) > (severity[max.level] || 0) ? w : max;\n }, checkpoint.preCrashWarnings[0]);\n\n if (highestLevel.level === 'imminent') {\n probability += 0.15;\n signals.push({\n signal: 'pre_crash_warning_imminent',\n weight: 0.15,\n evidence: `Pre-crash warning at IMMINENT level: ${highestLevel.reason}`,\n });\n } else if (highestLevel.level === 'critical') {\n probability += 0.10;\n signals.push({\n signal: 'pre_crash_warning_critical',\n weight: 0.10,\n evidence: `Pre-crash warning at CRITICAL level: ${highestLevel.reason}`,\n });\n } else {\n probability += 0.05;\n signals.push({\n signal: 'pre_crash_warning_elevated',\n weight: 0.05,\n evidence: `Pre-crash warning at ELEVATED level: ${highestLevel.reason}`,\n });\n }\n }\n\n // Signal 5: High memory utilization in last checkpoint\n const memUtil = checkpoint.systemState?.memory?.utilizationPercent;\n if (memUtil !== undefined && memUtil !== null && memUtil > 85) {\n probability += 0.10;\n signals.push({\n signal: 'high_memory_at_checkpoint',\n weight: 0.10,\n evidence: `Memory was at ${memUtil}% utilization at last checkpoint`,\n });\n }\n\n // Signal 6: Touch device (mobile indicator — OOM more common on mobile)\n if (checkpoint.device.touchSupport && checkpoint.device.deviceMemory !== null && checkpoint.device.deviceMemory <= 4) {\n probability += 0.05;\n signals.push({\n signal: 'mobile_low_memory_device',\n weight: 0.05,\n evidence: `Touch device with ${checkpoint.device.deviceMemory}GB RAM — higher OOM risk`,\n });\n }\n\n // Cap probability at 1.0\n probability = Math.min(probability, 1.0);\n\n // If probability is below threshold, this isn't an OOM\n if (probability < config.oomRecoveryThreshold) return null;\n\n const report: OOMRecoveryReport = {\n id: generateId(),\n type: 'oom_recovery',\n timestamp: now,\n probability,\n sessionId: currentSessionId,\n previousSessionId: checkpoint.sessionId,\n timeSinceLastCheckpoint: timeSinceCheckpoint,\n wasDiscarded,\n navigationType,\n lastCheckpoint: checkpoint,\n device: deviceInfo,\n signals,\n };\n\n // Emit event\n bus.emit('oom_recovery', { report });\n\n // Call user callback\n if (config.onOOMRecovery) {\n try {\n config.onOOMRecovery(report);\n } catch {\n // User callback errors must not propagate\n }\n }\n\n // Debug logging\n if (config.debug) {\n logOOMRecovery(report);\n }\n\n return report;\n}\n\nfunction logOOMRecovery(report: OOMRecoveryReport): void {\n if (typeof console === 'undefined') return;\n\n const header = `[CrashSense] OOM Recovery Detected (${(report.probability * 100).toFixed(0)}% confidence)`;\n const details = [\n `Previous session: ${report.previousSessionId}`,\n `Time since last checkpoint: ${Math.round(report.timeSinceLastCheckpoint / 1000)}s`,\n `Navigation type: ${report.navigationType}`,\n `document.wasDiscarded: ${report.wasDiscarded}`,\n `Last URL: ${report.lastCheckpoint.url}`,\n `Memory trend: ${report.lastCheckpoint.memoryTrend || 'unknown'}`,\n `Pre-crash warnings: ${report.lastCheckpoint.preCrashWarnings.length}`,\n `Breadcrumbs recovered: ${report.lastCheckpoint.breadcrumbs.length}`,\n ];\n\n console.groupCollapsed?.(header) ?? console.log(header);\n for (const d of details) console.log(d);\n if (report.signals.length > 0) {\n console.log('Signals:');\n for (const s of report.signals) {\n console.log(` - ${s.signal} (${(s.weight * 100).toFixed(0)}%): ${s.evidence}`);\n }\n }\n console.groupEnd?.();\n}\n","import type { EventBus, ResolvedConfig, Breadcrumb, SystemState } from '@crashsense/types';\n\n/**\n * Lifecycle Flush — Emergency data persistence on page lifecycle events\n *\n * On mobile browsers, the OS may give a brief grace period before killing a tab.\n * During this window, certain events may fire:\n *\n * - `visibilitychange` → `hidden`: Fires on Android Chrome when user switches apps.\n * Often precedes OS tab kill by a few seconds.\n *\n * - `pagehide`: Fires on iOS Safari when tab is backgrounded.\n * May fire before OOM kill (not guaranteed).\n *\n * - `freeze` (Page Lifecycle API, Chrome only): Fires when OS freezes the page.\n * The page may be discarded (killed) after freeze without further events.\n *\n * This module:\n * 1. Listens for these lifecycle events\n * 2. On event: writes an emergency checkpoint + optionally sends data via sendBeacon\n * 3. sendBeacon is used because the browser guarantees delivery even after page unload\n */\nexport function createLifecycleFlush(\n bus: EventBus,\n config: ResolvedConfig,\n sessionId: string,\n getSystemState: () => Partial<SystemState>,\n getBreadcrumbs: () => Breadcrumb[],\n flushCheckpoint: () => void,\n) {\n let installed = false;\n\n function buildFlushPayload(reason: string): string {\n return JSON.stringify({\n type: 'lifecycle_flush',\n reason,\n timestamp: Date.now(),\n sessionId,\n appId: config.appId,\n url: typeof location !== 'undefined' ? location.href : '',\n breadcrumbs: getBreadcrumbs().slice(-10),\n systemState: getSystemState(),\n });\n }\n\n function flush(reason: string): void {\n // 1. Write checkpoint to sessionStorage (synchronous, instant)\n flushCheckpoint();\n\n // 2. Optionally send data via sendBeacon to remote endpoint\n if (config.flushEndpoint && typeof navigator !== 'undefined' && navigator.sendBeacon) {\n try {\n const payload = buildFlushPayload(reason);\n navigator.sendBeacon(config.flushEndpoint, payload);\n } catch {\n // sendBeacon can fail silently — nothing we can do\n }\n }\n\n // 3. Emit event for any listeners\n bus.emit('lifecycle_flush', { reason, timestamp: Date.now() });\n }\n\n function handleVisibilityChange(): void {\n if (typeof document !== 'undefined' && document.visibilityState === 'hidden') {\n flush('visibilitychange_hidden');\n }\n }\n\n function handlePageHide(): void {\n flush('pagehide');\n }\n\n function handleFreeze(): void {\n flush('freeze');\n }\n\n return {\n install(): void {\n if (typeof window === 'undefined') return;\n if (installed) return;\n installed = true;\n\n // visibilitychange: most widely supported, fires on Android when switching apps\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n // pagehide: fires on iOS Safari when tab is backgrounded\n // Use { capture: true } to ensure we get it before anything else\n window.addEventListener('pagehide', handlePageHide, { capture: true });\n\n // freeze: Page Lifecycle API (Chrome 68+)\n // Fires when the page is frozen by the OS — may be followed by discard\n if ('onfreeze' in document) {\n document.addEventListener('freeze', handleFreeze);\n }\n },\n\n uninstall(): void {\n if (typeof window === 'undefined') return;\n if (!installed) return;\n installed = false;\n\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n window.removeEventListener('pagehide', handlePageHide, { capture: true } as EventListenerOptions);\n\n if ('onfreeze' in document) {\n document.removeEventListener('freeze', handleFreeze);\n }\n },\n };\n}\n","import type {\n CrashSenseConfig,\n CrashSenseCore,\n CrashSensePlugin,\n CrashEvent,\n CrashReport,\n RawCrashEvent,\n Breadcrumb,\n CrashSeverity,\n SystemState,\n DeviceInfo,\n EventBus,\n ResolvedConfig,\n} from '@crashsense/types';\nimport {\n createEventBus,\n generateFingerprint,\n createRateLimiter,\n scrubPII,\n collectDeviceInfo,\n generateId,\n parseStackTrace,\n} from '@crashsense/utils';\nimport { resolveConfig, SDK_VERSION } from './config';\nimport { createErrorInterceptor } from './error-interceptor';\nimport { createMemoryMonitor } from './memory-monitor';\nimport { createEventLoopMonitor } from './event-loop-monitor';\nimport { createNetworkMonitor } from './network-monitor';\nimport { createBreadcrumbTracker } from './breadcrumb-tracker';\nimport { createIframeTracker } from './iframe-tracker';\nimport { createPreCrashWarning } from './pre-crash-warning';\nimport { classifyCrash } from './crash-classifier';\nimport { createCheckpointManager } from './checkpoint-manager';\nimport { detectOOMRecovery } from './oom-recovery';\nimport { createLifecycleFlush } from './lifecycle-flush';\n\nexport function createCrashSense(userConfig: CrashSenseConfig): CrashSenseCore {\n const config = resolveConfig(userConfig);\n const bus = createEventBus();\n const sessionId = generateId();\n const rateLimiter = createRateLimiter(config.maxEventsPerMinute);\n const deviceInfo = collectDeviceInfo();\n\n const plugins: CrashSensePlugin[] = [];\n let userContext: Record<string, unknown> = {};\n const customContexts: Record<string, Record<string, unknown>> = {};\n let destroyed = false;\n\n const errorInterceptor = createErrorInterceptor(bus);\n const memoryMonitor = createMemoryMonitor(bus, config);\n const eventLoopMonitor = createEventLoopMonitor(bus, config);\n const networkMonitor = createNetworkMonitor(bus, config);\n const breadcrumbTracker = createBreadcrumbTracker(bus);\n const iframeTracker = createIframeTracker(bus, config);\n const preCrashWarning = createPreCrashWarning(bus, config, memoryMonitor, iframeTracker);\n\n // OOM Recovery: checkpoint manager\n const checkpointManager = createCheckpointManager(\n bus,\n config,\n sessionId,\n deviceInfo,\n () => ({\n memory: memoryMonitor.getSnapshot(),\n cpu: eventLoopMonitor.getCpuSnapshot(),\n eventLoop: eventLoopMonitor.getEventLoopSnapshot(),\n network: networkMonitor.getSnapshot(),\n iframe: config.enableIframeTracking ? iframeTracker.getSnapshot() : undefined,\n }),\n () => breadcrumbTracker.getBreadcrumbs(),\n );\n\n // OOM Recovery: lifecycle flush\n const lifecycleFlush = createLifecycleFlush(\n bus,\n config,\n sessionId,\n () => ({\n memory: memoryMonitor.getSnapshot(),\n cpu: eventLoopMonitor.getCpuSnapshot(),\n eventLoop: eventLoopMonitor.getEventLoopSnapshot(),\n network: networkMonitor.getSnapshot(),\n iframe: config.enableIframeTracking ? iframeTracker.getSnapshot() : undefined,\n }),\n () => breadcrumbTracker.getBreadcrumbs(),\n () => checkpointManager.flush(),\n );\n\n function buildRawEvent(error: Error, source: string): RawCrashEvent {\n const stack = error.stack ? parseStackTrace(error.stack) : [];\n\n return {\n id: generateId(),\n timestamp: performance.now() + performance.timeOrigin,\n sessionId,\n error: {\n type: error.constructor.name || error.name || 'Error',\n message: config.piiScrubbing ? scrubPII(error.message) : error.message,\n stack,\n raw: config.piiScrubbing ? scrubPII(error.stack || '') : (error.stack || ''),\n },\n system: {\n memory: memoryMonitor.getSnapshot(),\n cpu: eventLoopMonitor.getCpuSnapshot(),\n eventLoop: eventLoopMonitor.getEventLoopSnapshot(),\n network: networkMonitor.getSnapshot(),\n iframe: config.enableIframeTracking ? iframeTracker.getSnapshot() : undefined,\n },\n device: deviceInfo,\n framework: {},\n breadcrumbs: breadcrumbTracker.getBreadcrumbs(),\n meta: {\n appId: config.appId,\n environment: config.environment,\n release: config.release || undefined,\n userId: userContext.id as string | undefined,\n tags: { source },\n sdkVersion: SDK_VERSION,\n },\n };\n }\n\n function processRawEvent(rawEvent: RawCrashEvent): void {\n if (destroyed) return;\n if (Math.random() > config.sampleRate) return;\n if (!rateLimiter.tryAcquire()) return;\n\n const classification = classifyCrash(rawEvent);\n\n let crashEvent: CrashEvent = {\n id: rawEvent.id,\n fingerprint: generateFingerprint(\n rawEvent.error.type,\n rawEvent.error.message,\n rawEvent.error.stack,\n ),\n timestamp: rawEvent.timestamp,\n sessionId: rawEvent.sessionId,\n category: classification.category,\n subcategory: classification.subcategory,\n severity: classification.confidence > 0.8 ? 'critical' : 'error',\n confidence: classification.confidence,\n error: rawEvent.error,\n system: {\n memory: rawEvent.system.memory ?? memoryMonitor.getSnapshot(),\n cpu: rawEvent.system.cpu ?? eventLoopMonitor.getCpuSnapshot(),\n eventLoop: rawEvent.system.eventLoop ?? eventLoopMonitor.getEventLoopSnapshot(),\n network: rawEvent.system.network ?? networkMonitor.getSnapshot(),\n iframe: rawEvent.system.iframe ?? (config.enableIframeTracking ? iframeTracker.getSnapshot() : undefined),\n },\n device: rawEvent.device,\n framework: {\n name: (rawEvent.framework.name as 'react' | 'vue' | 'vanilla') ?? 'vanilla',\n version: rawEvent.framework.version ?? '',\n adapter: rawEvent.framework.adapter ?? SDK_VERSION,\n componentTree: rawEvent.framework.componentTree,\n currentRoute: rawEvent.framework.currentRoute,\n storeState: rawEvent.framework.storeState,\n lifecycleStage: rawEvent.framework.lifecycleStage,\n renderCount: rawEvent.framework.renderCount,\n },\n breadcrumbs: rawEvent.breadcrumbs,\n contributingFactors: classification.contributingFactors,\n meta: rawEvent.meta,\n };\n\n for (const plugin of plugins) {\n if (plugin.onCrashEvent) {\n const modified = plugin.onCrashEvent(crashEvent);\n if (modified === null) return;\n crashEvent = modified;\n }\n }\n\n const report: CrashReport = {\n event: crashEvent,\n analysis: null,\n timestamp: Date.now(),\n };\n\n bus.emit('crash_detected', { event: crashEvent });\n\n if (config.onCrash) {\n try {\n config.onCrash(report);\n } catch (_) {\n // onCrash callback errors must not propagate\n }\n }\n\n if (config.debug) {\n logCrashReport(report);\n }\n }\n\n function logCrashReport(report: CrashReport): void {\n const e = report.event;\n const header = `[CrashSense] ${e.category}/${e.subcategory} (confidence: ${(e.confidence * 100).toFixed(0)}%)`;\n const details = [\n `Error: ${e.error.type}: ${e.error.message}`,\n `Device: ${e.device.userAgent.slice(0, 80)}`,\n `Memory: ${e.system.memory.utilizationPercent ?? 'N/A'}% used`,\n `Long Tasks (30s): ${e.system.cpu.longTasksLast30s}`,\n `FPS: ${e.system.eventLoop.fps}`,\n ];\n\n if (typeof console !== 'undefined') {\n console.groupCollapsed?.(header) ?? console.log(header);\n for (const d of details) console.log(d);\n if (e.contributingFactors.length > 0) {\n console.log('Contributing factors:');\n for (const f of e.contributingFactors) {\n console.log(` - ${f.factor} (${(f.weight * 100).toFixed(0)}%): ${f.evidence}`);\n }\n }\n console.groupEnd?.();\n }\n }\n\n bus.on('error', (data) => {\n const rawEvent = buildRawEvent(data.error, 'window.onerror');\n processRawEvent(rawEvent);\n });\n\n bus.on('unhandled_rejection', (data) => {\n const error = data.reason instanceof Error\n ? data.reason\n : new Error(String(data.reason));\n const rawEvent = buildRawEvent(error, 'unhandledrejection');\n processRawEvent(rawEvent);\n });\n\n bus.on('iframe_added', (data) => {\n breadcrumbTracker.addBreadcrumb({\n type: 'custom',\n message: `Iframe added: ${data.origin} (total: ${data.totalCount})`,\n data: { src: data.src, crossOrigin: data.crossOrigin },\n });\n });\n\n bus.on('iframe_removed', (data) => {\n breadcrumbTracker.addBreadcrumb({\n type: 'custom',\n message: `Iframe removed (total: ${data.totalCount})`,\n data: { src: data.src },\n });\n });\n\n bus.on('pre_crash_warning', (data) => {\n breadcrumbTracker.addBreadcrumb({\n type: 'custom',\n message: `Pre-crash warning [${data.level}]: ${data.reason}`,\n data: { level: data.level, memoryUtilization: data.memoryUtilization, iframeCount: data.iframeCount },\n });\n });\n\n // OOM Recovery: detect if previous session was OOM-killed\n // Must run BEFORE monitors start to read the checkpoint before it's overwritten\n if (config.enableOOMRecovery) {\n detectOOMRecovery(bus, config, sessionId);\n }\n\n errorInterceptor.install();\n breadcrumbTracker.install();\n if (config.enableMemoryMonitoring) memoryMonitor.start();\n if (config.enableLongTaskMonitoring) eventLoopMonitor.start();\n if (config.enableNetworkMonitoring) networkMonitor.start();\n if (config.enableIframeTracking) iframeTracker.start();\n if (config.enablePreCrashWarning) preCrashWarning.start();\n if (config.enableOOMRecovery) {\n checkpointManager.start();\n lifecycleFlush.install();\n }\n\n const core: CrashSenseCore = {\n get config(): ResolvedConfig {\n return config;\n },\n\n get sessionId(): string {\n return sessionId;\n },\n\n use(plugin: CrashSensePlugin): void {\n plugins.push(plugin);\n plugin.setup(core);\n },\n\n captureException(error: unknown, context?: Record<string, unknown>): void {\n const err = error instanceof Error ? error : new Error(String(error));\n const rawEvent = buildRawEvent(err, 'manual');\n if (context) {\n rawEvent.meta.tags = { ...rawEvent.meta.tags, ...Object.fromEntries(\n Object.entries(context).map(([k, v]) => [k, String(v)])\n )};\n }\n processRawEvent(rawEvent);\n },\n\n captureMessage(message: string, severity: CrashSeverity = 'info'): void {\n const rawEvent = buildRawEvent(new Error(message), 'message');\n rawEvent.error.type = 'Message';\n rawEvent.meta.tags.severity = severity;\n processRawEvent(rawEvent);\n },\n\n addBreadcrumb(bc: Omit<Breadcrumb, 'timestamp'>): void {\n breadcrumbTracker.addBreadcrumb(bc);\n },\n\n setUser(user: { id: string; [key: string]: unknown }): void {\n userContext = user;\n },\n\n setContext(key: string, value: Record<string, unknown>): void {\n customContexts[key] = value;\n },\n\n getSystemState(): SystemState {\n return {\n memory: memoryMonitor.getSnapshot(),\n cpu: eventLoopMonitor.getCpuSnapshot(),\n eventLoop: eventLoopMonitor.getEventLoopSnapshot(),\n network: networkMonitor.getSnapshot(),\n iframe: config.enableIframeTracking ? iframeTracker.getSnapshot() : undefined,\n };\n },\n\n getDeviceInfo(): DeviceInfo {\n return deviceInfo;\n },\n\n destroy(): void {\n if (destroyed) return;\n destroyed = true;\n errorInterceptor.uninstall();\n breadcrumbTracker.uninstall();\n memoryMonitor.stop();\n eventLoopMonitor.stop();\n networkMonitor.stop();\n iframeTracker.stop();\n preCrashWarning.stop();\n checkpointManager.stop();\n checkpointManager.clearOnDestroy();\n lifecycleFlush.uninstall();\n for (const plugin of plugins) {\n plugin.teardown();\n }\n },\n\n _reportRawEvent(event: RawCrashEvent): void {\n processRawEvent(event);\n },\n\n _getEventBus(): EventBus {\n return bus;\n },\n };\n\n return core;\n}\n"]}
|
package/package.json
CHANGED