@crashsense/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +8 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +1219 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1216 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +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"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@crashsense/core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CrashSense core crash detection engine — error interception, memory monitoring, crash classification",
|
|
5
|
+
"author": "hoainho <nhoxtvt@gmail.com>",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/hoainho/crashsense.git",
|
|
10
|
+
"directory": "packages/core"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/hoainho/crashsense/tree/main/packages/core",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/hoainho/crashsense/issues"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"crashsense",
|
|
18
|
+
"crash-detection",
|
|
19
|
+
"error-monitoring",
|
|
20
|
+
"memory-leak",
|
|
21
|
+
"event-loop",
|
|
22
|
+
"iframe-tracking",
|
|
23
|
+
"pre-crash-warning",
|
|
24
|
+
"javascript",
|
|
25
|
+
"typescript"
|
|
26
|
+
],
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"main": "./dist/index.js",
|
|
31
|
+
"module": "./dist/index.mjs",
|
|
32
|
+
"types": "./dist/index.d.ts",
|
|
33
|
+
"exports": {
|
|
34
|
+
".": {
|
|
35
|
+
"types": "./dist/index.d.ts",
|
|
36
|
+
"import": "./dist/index.mjs",
|
|
37
|
+
"require": "./dist/index.js"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"files": [
|
|
41
|
+
"dist"
|
|
42
|
+
],
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build": "tsup",
|
|
45
|
+
"dev": "tsup --watch",
|
|
46
|
+
"test": "vitest run"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@crashsense/types": "*",
|
|
50
|
+
"@crashsense/utils": "*"
|
|
51
|
+
},
|
|
52
|
+
"sideEffects": false
|
|
53
|
+
}
|