@crashsense/types 1.1.0 → 1.1.1
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 +684 -0
- package/dist/index.d.ts +684 -0
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,204 +1,694 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Classification category for detected crash events.
|
|
3
|
+
*
|
|
4
|
+
* CrashSense classifies every crash into one of these categories based on
|
|
5
|
+
* system state, error characteristics, and contributing factors.
|
|
6
|
+
*
|
|
7
|
+
* - `runtime_error` -- Standard JavaScript errors (TypeError, ReferenceError, etc.)
|
|
8
|
+
* - `memory_issue` -- Memory leaks, heap pressure, or out-of-memory conditions
|
|
9
|
+
* - `event_loop_blocking` -- Long tasks, frozen UI, or infinite loops
|
|
10
|
+
* - `framework_react` -- React-specific issues (hydration mismatches, infinite re-renders, hook violations)
|
|
11
|
+
* - `framework_vue` -- Vue-specific issues (reactivity loops, lifecycle errors, watcher cascades)
|
|
12
|
+
* - `network_induced` -- Crashes caused by network failures, timeouts, or CORS blocks
|
|
13
|
+
* - `iframe_overload` -- Excessive iframes exhausting browser resources
|
|
14
|
+
* - `rendering` -- Rendering pipeline failures
|
|
15
|
+
* - `mobile_device` -- Mobile-specific resource constraints
|
|
16
|
+
* - `resource_exhaustion` -- General resource exhaustion (CPU, memory, file handles)
|
|
17
|
+
* - `browser_compatibility` -- Browser-specific incompatibilities or missing APIs
|
|
18
|
+
*/
|
|
1
19
|
type CrashCategory = 'runtime_error' | 'memory_issue' | 'event_loop_blocking' | 'framework_react' | 'framework_vue' | 'network_induced' | 'iframe_overload' | 'rendering' | 'mobile_device' | 'resource_exhaustion' | 'browser_compatibility';
|
|
20
|
+
/**
|
|
21
|
+
* Severity level of a crash event, from most to least severe.
|
|
22
|
+
*
|
|
23
|
+
* - `critical` -- Application is unusable or data loss is likely
|
|
24
|
+
* - `error` -- A significant failure that affects functionality
|
|
25
|
+
* - `warning` -- A potential issue that may degrade experience
|
|
26
|
+
* - `info` -- Informational event captured for diagnostic context
|
|
27
|
+
*/
|
|
2
28
|
type CrashSeverity = 'critical' | 'error' | 'warning' | 'info';
|
|
29
|
+
/**
|
|
30
|
+
* A single frame in a parsed stack trace.
|
|
31
|
+
*
|
|
32
|
+
* Stack frames are extracted from the raw error stack and normalized
|
|
33
|
+
* into a structured format for classification and display.
|
|
34
|
+
*/
|
|
3
35
|
interface StackFrame {
|
|
36
|
+
/** Absolute or relative path to the source file. */
|
|
4
37
|
filename: string;
|
|
38
|
+
/** Name of the function where the error occurred. */
|
|
5
39
|
function: string;
|
|
40
|
+
/** Line number in the source file. */
|
|
6
41
|
lineno: number;
|
|
42
|
+
/** Column number in the source file. */
|
|
7
43
|
colno: number;
|
|
44
|
+
/** Whether this frame belongs to application code (true) or a library/vendor (false). */
|
|
8
45
|
inApp: boolean;
|
|
46
|
+
/** Surrounding source lines for context, if available. */
|
|
9
47
|
context?: string[];
|
|
10
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Category of a breadcrumb event.
|
|
51
|
+
*
|
|
52
|
+
* - `click` -- User click interaction
|
|
53
|
+
* - `navigation` -- Page or route navigation
|
|
54
|
+
* - `network` -- HTTP request or response
|
|
55
|
+
* - `console` -- Console log, warn, or error output
|
|
56
|
+
* - `state` -- Application state change
|
|
57
|
+
* - `custom` -- Developer-defined breadcrumb
|
|
58
|
+
*/
|
|
11
59
|
type BreadcrumbType = 'click' | 'navigation' | 'network' | 'console' | 'state' | 'custom';
|
|
60
|
+
/**
|
|
61
|
+
* A timestamped event in the trail leading up to a crash.
|
|
62
|
+
*
|
|
63
|
+
* Breadcrumbs are automatically collected (clicks, navigation, network, console)
|
|
64
|
+
* and can also be added manually via `addBreadcrumb()`. They provide the
|
|
65
|
+
* sequential context needed to understand what the user did before a crash.
|
|
66
|
+
*/
|
|
12
67
|
interface Breadcrumb {
|
|
68
|
+
/** Category of this breadcrumb event. */
|
|
13
69
|
type: BreadcrumbType;
|
|
70
|
+
/** Unix timestamp in milliseconds when this event occurred. */
|
|
14
71
|
timestamp: number;
|
|
72
|
+
/** Human-readable description of the event. */
|
|
15
73
|
message: string;
|
|
74
|
+
/** Optional structured data associated with this breadcrumb. */
|
|
16
75
|
data?: Record<string, unknown>;
|
|
17
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Direction of memory usage over a recent time window.
|
|
79
|
+
*
|
|
80
|
+
* - `stable` -- Heap usage is relatively constant
|
|
81
|
+
* - `growing` -- Heap usage is increasing (potential leak)
|
|
82
|
+
* - `shrinking` -- Heap usage is decreasing (GC reclaiming)
|
|
83
|
+
* - `spike` -- Sudden sharp increase in heap usage
|
|
84
|
+
*/
|
|
18
85
|
type MemoryTrend = 'stable' | 'growing' | 'shrinking' | 'spike';
|
|
86
|
+
/**
|
|
87
|
+
* Current memory state of the JavaScript heap.
|
|
88
|
+
*
|
|
89
|
+
* Values are sourced from `performance.memory` (Chrome-only).
|
|
90
|
+
* In browsers that do not support this API, numeric fields will be null.
|
|
91
|
+
*/
|
|
19
92
|
interface MemoryState {
|
|
93
|
+
/** Bytes of heap currently in use. Null if unsupported. */
|
|
20
94
|
usedJSHeapSize: number | null;
|
|
95
|
+
/** Total bytes allocated for the heap. Null if unsupported. */
|
|
21
96
|
totalJSHeapSize: number | null;
|
|
97
|
+
/** Maximum heap size the browser will allocate. Null if unsupported. */
|
|
22
98
|
heapSizeLimit: number | null;
|
|
99
|
+
/** Direction of memory usage over the recent sampling window. */
|
|
23
100
|
trend: MemoryTrend;
|
|
101
|
+
/** Percentage of heap limit currently in use (0-100). Null if unsupported. */
|
|
24
102
|
utilizationPercent: number | null;
|
|
25
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* CPU and main-thread performance metrics.
|
|
106
|
+
*
|
|
107
|
+
* Derived from the Long Task API and PerformanceObserver.
|
|
108
|
+
*/
|
|
26
109
|
interface CpuState {
|
|
110
|
+
/** Number of long tasks (>50ms) detected in the last 30 seconds. */
|
|
27
111
|
longTasksLast30s: number;
|
|
112
|
+
/** Average duration in milliseconds of long tasks in the last 30 seconds. */
|
|
28
113
|
avgLongTaskDuration: number;
|
|
114
|
+
/** Maximum duration in milliseconds of a single long task in the last 30 seconds. */
|
|
29
115
|
maxLongTaskDuration: number;
|
|
116
|
+
/** Total estimated blocking time in milliseconds from all long tasks. */
|
|
30
117
|
estimatedBlockingTime: number;
|
|
31
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Current state of the browser event loop.
|
|
121
|
+
*/
|
|
32
122
|
interface EventLoopState {
|
|
123
|
+
/** Whether the event loop is currently blocked by a long-running task. */
|
|
33
124
|
isBlocked: boolean;
|
|
125
|
+
/** Duration in milliseconds of the current block, or null if not blocked. */
|
|
34
126
|
blockDuration: number | null;
|
|
127
|
+
/** Estimated frames per second based on requestAnimationFrame timing. */
|
|
35
128
|
fps: number;
|
|
36
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Network connectivity and request health metrics.
|
|
132
|
+
*/
|
|
37
133
|
interface NetworkState {
|
|
134
|
+
/** Number of in-flight HTTP requests. */
|
|
38
135
|
pendingRequests: number;
|
|
136
|
+
/** Number of failed HTTP requests in the last 60 seconds. */
|
|
39
137
|
failedRequestsLast60s: number;
|
|
138
|
+
/** Average response latency in milliseconds over the last 60 seconds. */
|
|
40
139
|
avgLatencyLast60s: number;
|
|
140
|
+
/** Network connection type from the Network Information API, or null if unavailable. */
|
|
41
141
|
connectionType: string | null;
|
|
142
|
+
/** Whether the browser reports an active network connection. */
|
|
42
143
|
isOnline: boolean;
|
|
43
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* State of iframe elements in the document.
|
|
147
|
+
*
|
|
148
|
+
* Tracked via MutationObserver when `enableIframeTracking` is enabled.
|
|
149
|
+
* Excessive iframes (ads, widgets, payment forms) can exhaust memory.
|
|
150
|
+
*/
|
|
44
151
|
interface IframeState {
|
|
152
|
+
/** Total number of iframe elements currently in the DOM. */
|
|
45
153
|
totalCount: number;
|
|
154
|
+
/** Number of iframes added in the last 60 seconds. */
|
|
46
155
|
addedLast60s: number;
|
|
156
|
+
/** Number of iframes removed in the last 60 seconds. */
|
|
47
157
|
removedLast60s: number;
|
|
158
|
+
/** List of unique origin URLs from iframe src attributes. */
|
|
48
159
|
origins: string[];
|
|
160
|
+
/** Number of iframes with a different origin than the host page. */
|
|
49
161
|
crossOriginCount: number;
|
|
50
162
|
}
|
|
163
|
+
/**
|
|
164
|
+
* Complete snapshot of system state at the time of a crash.
|
|
165
|
+
*
|
|
166
|
+
* Captured automatically by CrashSense monitors and included in every crash event.
|
|
167
|
+
*/
|
|
51
168
|
interface SystemState {
|
|
169
|
+
/** JavaScript heap memory metrics. */
|
|
52
170
|
memory: MemoryState;
|
|
171
|
+
/** Main-thread CPU and long task metrics. */
|
|
53
172
|
cpu: CpuState;
|
|
173
|
+
/** Event loop responsiveness metrics. */
|
|
54
174
|
eventLoop: EventLoopState;
|
|
175
|
+
/** Network connectivity and request health. */
|
|
55
176
|
network: NetworkState;
|
|
177
|
+
/** Iframe tracking state. Present only when `enableIframeTracking` is enabled. */
|
|
56
178
|
iframe?: IframeState;
|
|
57
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Information about the user device and browser environment.
|
|
182
|
+
*
|
|
183
|
+
* Collected once at SDK initialization and included in every crash report.
|
|
184
|
+
* PII-sensitive fields (userAgent) are scrubbed when `piiScrubbing` is enabled.
|
|
185
|
+
*/
|
|
58
186
|
interface DeviceInfo {
|
|
187
|
+
/** Full user agent string from `navigator.userAgent`. */
|
|
59
188
|
userAgent: string;
|
|
189
|
+
/** Operating system platform from `navigator.platform`. */
|
|
60
190
|
platform: string;
|
|
191
|
+
/** Browser vendor from `navigator.vendor`. */
|
|
61
192
|
vendor: string;
|
|
193
|
+
/** Device memory in gigabytes from `navigator.deviceMemory`, or null if unsupported. */
|
|
62
194
|
deviceMemory: number | null;
|
|
195
|
+
/** Number of logical CPU cores from `navigator.hardwareConcurrency`, or null if unsupported. */
|
|
63
196
|
hardwareConcurrency: number | null;
|
|
197
|
+
/** Current viewport dimensions in pixels. */
|
|
64
198
|
viewport: {
|
|
65
199
|
width: number;
|
|
66
200
|
height: number;
|
|
67
201
|
};
|
|
202
|
+
/** Device pixel ratio (e.g., 2 for Retina displays). */
|
|
68
203
|
devicePixelRatio: number;
|
|
204
|
+
/** Whether the device supports touch input. */
|
|
69
205
|
touchSupport: boolean;
|
|
206
|
+
/** User preferred color scheme. */
|
|
70
207
|
colorScheme: 'light' | 'dark';
|
|
208
|
+
/** Whether the user prefers reduced motion. */
|
|
71
209
|
reducedMotion: boolean;
|
|
210
|
+
/** Browser language from `navigator.language`. */
|
|
72
211
|
language: string;
|
|
212
|
+
/** IANA timezone string from `Intl.DateTimeFormat`. */
|
|
73
213
|
timezone: string;
|
|
74
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* Framework-specific context attached to crash events.
|
|
217
|
+
*
|
|
218
|
+
* Populated automatically by framework adapters (@crashsense/react, @crashsense/vue)
|
|
219
|
+
* or set to default vanilla values when no adapter is active.
|
|
220
|
+
*/
|
|
75
221
|
interface FrameworkContext {
|
|
222
|
+
/** Framework identifier. Set by the active adapter or defaults to `'vanilla'`. */
|
|
76
223
|
name: 'react' | 'vue' | 'vanilla' | string;
|
|
224
|
+
/** Framework version string (e.g., `'18.2.0'`). */
|
|
77
225
|
version: string;
|
|
226
|
+
/** Name of the CrashSense adapter package (e.g., `'@crashsense/react'`). */
|
|
78
227
|
adapter: string;
|
|
228
|
+
/** Component hierarchy from root to the component where the crash occurred. */
|
|
79
229
|
componentTree?: string[];
|
|
230
|
+
/** Current route path at the time of the crash. */
|
|
80
231
|
currentRoute?: string;
|
|
232
|
+
/** Snapshot of relevant application store state. */
|
|
81
233
|
storeState?: Record<string, unknown>;
|
|
234
|
+
/** Framework lifecycle stage when the crash occurred (e.g., `'render'`, `'mounted'`). */
|
|
82
235
|
lifecycleStage?: string;
|
|
236
|
+
/** Number of component renders since the last navigation. */
|
|
83
237
|
renderCount?: number;
|
|
84
238
|
}
|
|
239
|
+
/**
|
|
240
|
+
* A single factor that contributed to the crash classification decision.
|
|
241
|
+
*
|
|
242
|
+
* Each crash event includes an array of contributing factors with weights
|
|
243
|
+
* and evidence strings, so consumers can understand why the classifier
|
|
244
|
+
* chose a specific category and confidence score.
|
|
245
|
+
*/
|
|
85
246
|
interface ContributingFactor {
|
|
247
|
+
/** Machine-readable identifier for this factor (e.g., `'high_memory_utilization'`). */
|
|
86
248
|
factor: string;
|
|
249
|
+
/** Relative weight of this factor in the classification (0.0 to 1.0). */
|
|
87
250
|
weight: number;
|
|
251
|
+
/** Human-readable evidence string explaining the observation. */
|
|
88
252
|
evidence: string;
|
|
89
253
|
}
|
|
254
|
+
/**
|
|
255
|
+
* A fully classified crash event -- the primary output of the CrashSense SDK.
|
|
256
|
+
*
|
|
257
|
+
* Contains the error details, system state snapshot, device information,
|
|
258
|
+
* framework context, breadcrumb trail, classification result, and metadata.
|
|
259
|
+
* This is the object passed to plugins and included in CrashReport.
|
|
260
|
+
*/
|
|
90
261
|
interface CrashEvent {
|
|
262
|
+
/** Unique identifier for this crash event (UUID v4). */
|
|
91
263
|
id: string;
|
|
264
|
+
/** Deterministic fingerprint for deduplication and grouping of similar crashes. */
|
|
92
265
|
fingerprint: string;
|
|
266
|
+
/** Unix timestamp in milliseconds when the crash was detected. */
|
|
93
267
|
timestamp: number;
|
|
268
|
+
/** Session identifier linking this crash to a user session. */
|
|
94
269
|
sessionId: string;
|
|
270
|
+
/** Primary crash category determined by the classifier. */
|
|
95
271
|
category: CrashCategory;
|
|
272
|
+
/** More specific sub-classification within the category (e.g., `'memory_leak'`, `'api_failure'`). */
|
|
96
273
|
subcategory: string;
|
|
274
|
+
/** Severity level of this crash event. */
|
|
97
275
|
severity: CrashSeverity;
|
|
276
|
+
/** Classifier confidence score for the assigned category (0.0 to 1.0). */
|
|
98
277
|
confidence: number;
|
|
278
|
+
/** Structured error information extracted from the original exception. */
|
|
99
279
|
error: {
|
|
280
|
+
/** Error constructor name (e.g., `'TypeError'`, `'RangeError'`). */
|
|
100
281
|
type: string;
|
|
282
|
+
/** Error message string. */
|
|
101
283
|
message: string;
|
|
284
|
+
/** Parsed and normalized stack trace frames. */
|
|
102
285
|
stack: StackFrame[];
|
|
286
|
+
/** Original raw stack trace string. */
|
|
103
287
|
raw: string;
|
|
104
288
|
};
|
|
289
|
+
/** Complete system state snapshot captured at the moment of the crash. */
|
|
105
290
|
system: SystemState;
|
|
291
|
+
/** Device and browser environment information. */
|
|
106
292
|
device: DeviceInfo;
|
|
293
|
+
/** Framework-specific context from the active adapter. */
|
|
107
294
|
framework: FrameworkContext;
|
|
295
|
+
/** Ordered trail of events leading up to the crash (most recent last). */
|
|
108
296
|
breadcrumbs: Breadcrumb[];
|
|
297
|
+
/** Factors that contributed to the crash classification with weights and evidence. */
|
|
109
298
|
contributingFactors: ContributingFactor[];
|
|
299
|
+
/** Application and SDK metadata for this crash event. */
|
|
110
300
|
meta: CrashEventMeta;
|
|
111
301
|
}
|
|
302
|
+
/**
|
|
303
|
+
* Metadata associated with a crash event.
|
|
304
|
+
*
|
|
305
|
+
* Contains application identifiers, environment info, user context,
|
|
306
|
+
* custom tags, and SDK version for filtering and grouping.
|
|
307
|
+
*/
|
|
112
308
|
interface CrashEventMeta {
|
|
309
|
+
/** Application identifier from CrashSense configuration. */
|
|
113
310
|
appId: string;
|
|
311
|
+
/** Environment name (e.g., `'production'`, `'staging'`). */
|
|
114
312
|
environment: string;
|
|
313
|
+
/** Application release or version tag, if configured. */
|
|
115
314
|
release?: string;
|
|
315
|
+
/** User identifier set via `setUser()`, if available. */
|
|
116
316
|
userId?: string;
|
|
317
|
+
/** Custom key-value tags for filtering and grouping crash events. */
|
|
117
318
|
tags: Record<string, string>;
|
|
319
|
+
/** Version of the CrashSense SDK that generated this event. */
|
|
118
320
|
sdkVersion: string;
|
|
119
321
|
}
|
|
322
|
+
/**
|
|
323
|
+
* A raw crash event before classification.
|
|
324
|
+
*
|
|
325
|
+
* Built internally by CrashSense when an error is captured. Contains
|
|
326
|
+
* partial system state and framework context that will be completed
|
|
327
|
+
* during the classification pipeline before producing a full CrashEvent.
|
|
328
|
+
*/
|
|
120
329
|
interface RawCrashEvent {
|
|
330
|
+
/** Unique identifier for this event (UUID v4). */
|
|
121
331
|
id: string;
|
|
332
|
+
/** Unix timestamp in milliseconds when the error was captured. */
|
|
122
333
|
timestamp: number;
|
|
334
|
+
/** Session identifier for the current user session. */
|
|
123
335
|
sessionId: string;
|
|
336
|
+
/** Error details extracted from the captured exception. */
|
|
124
337
|
error: {
|
|
338
|
+
/** Error constructor name. */
|
|
125
339
|
type: string;
|
|
340
|
+
/** Error message string. */
|
|
126
341
|
message: string;
|
|
342
|
+
/** Parsed stack trace frames. */
|
|
127
343
|
stack: StackFrame[];
|
|
344
|
+
/** Original raw stack trace string. */
|
|
128
345
|
raw: string;
|
|
129
346
|
};
|
|
347
|
+
/** Partial system state snapshot (may be incomplete before classification). */
|
|
130
348
|
system: Partial<SystemState>;
|
|
349
|
+
/** Device information. */
|
|
131
350
|
device: DeviceInfo;
|
|
351
|
+
/** Partial framework context (completed during classification). */
|
|
132
352
|
framework: Partial<FrameworkContext>;
|
|
353
|
+
/** Breadcrumb trail collected up to the point of capture. */
|
|
133
354
|
breadcrumbs: Breadcrumb[];
|
|
355
|
+
/** Event metadata including app ID, environment, and tags. */
|
|
134
356
|
meta: CrashEventMeta;
|
|
135
357
|
}
|
|
358
|
+
/**
|
|
359
|
+
* User-facing configuration options for initializing CrashSense.
|
|
360
|
+
*
|
|
361
|
+
* Only `appId` is required. All other fields have sensible defaults
|
|
362
|
+
* and are resolved into a complete ResolvedConfig internally.
|
|
363
|
+
*/
|
|
136
364
|
interface CrashSenseConfig {
|
|
365
|
+
/** Unique identifier for your application. Used in crash event metadata. */
|
|
137
366
|
appId: string;
|
|
367
|
+
/**
|
|
368
|
+
* Environment name for filtering crash events.
|
|
369
|
+
* @default 'production'
|
|
370
|
+
*/
|
|
138
371
|
environment?: string;
|
|
372
|
+
/**
|
|
373
|
+
* Application release or version tag included in crash metadata.
|
|
374
|
+
* @default ''
|
|
375
|
+
*/
|
|
139
376
|
release?: string;
|
|
377
|
+
/**
|
|
378
|
+
* Event sampling rate. Set to 0.5 to capture ~50% of events, 1.0 for all.
|
|
379
|
+
* @default 1.0
|
|
380
|
+
*/
|
|
140
381
|
sampleRate?: number;
|
|
382
|
+
/**
|
|
383
|
+
* Maximum number of crash events processed per minute. Prevents event storms.
|
|
384
|
+
* @default 30
|
|
385
|
+
*/
|
|
141
386
|
maxEventsPerMinute?: number;
|
|
387
|
+
/**
|
|
388
|
+
* Enable monitoring of JavaScript heap memory usage and trends.
|
|
389
|
+
* Requires `performance.memory` (Chrome-only; gracefully degrades elsewhere).
|
|
390
|
+
* @default true
|
|
391
|
+
*/
|
|
142
392
|
enableMemoryMonitoring?: boolean;
|
|
393
|
+
/**
|
|
394
|
+
* Enable monitoring of long tasks (>50ms) on the main thread via the Long Task API.
|
|
395
|
+
* @default true
|
|
396
|
+
*/
|
|
143
397
|
enableLongTaskMonitoring?: boolean;
|
|
398
|
+
/**
|
|
399
|
+
* Enable monitoring of network request failures and latency.
|
|
400
|
+
* @default true
|
|
401
|
+
*/
|
|
144
402
|
enableNetworkMonitoring?: boolean;
|
|
403
|
+
/**
|
|
404
|
+
* Enable tracking of iframe additions and removals via MutationObserver.
|
|
405
|
+
* Useful for detecting iframe-induced resource exhaustion from ads or widgets.
|
|
406
|
+
* @default false
|
|
407
|
+
*/
|
|
145
408
|
enableIframeTracking?: boolean;
|
|
409
|
+
/**
|
|
410
|
+
* Enable the 3-tier pre-crash warning system that detects dangerous
|
|
411
|
+
* memory or iframe conditions before the browser tab crashes.
|
|
412
|
+
* @default false
|
|
413
|
+
*/
|
|
146
414
|
enablePreCrashWarning?: boolean;
|
|
415
|
+
/**
|
|
416
|
+
* Memory utilization threshold (0.0 to 1.0) for triggering critical pre-crash warnings.
|
|
417
|
+
* Only used when `enablePreCrashWarning` is true.
|
|
418
|
+
* @default 0.85
|
|
419
|
+
*/
|
|
147
420
|
preCrashMemoryThreshold?: number;
|
|
421
|
+
/**
|
|
422
|
+
* Enable automatic scrubbing of PII (emails, IPs, tokens, credit card numbers)
|
|
423
|
+
* from error messages and breadcrumbs before events leave the SDK.
|
|
424
|
+
* @default true
|
|
425
|
+
*/
|
|
148
426
|
piiScrubbing?: boolean;
|
|
427
|
+
/**
|
|
428
|
+
* Enable debug mode. When true, crash reports are logged to the console.
|
|
429
|
+
* @default false
|
|
430
|
+
*/
|
|
149
431
|
debug?: boolean;
|
|
432
|
+
/**
|
|
433
|
+
* Callback invoked when a crash is detected and fully classified.
|
|
434
|
+
* Receives the complete CrashReport including the event and optional AI analysis.
|
|
435
|
+
* @default null
|
|
436
|
+
*/
|
|
150
437
|
onCrash?: (report: CrashReport) => void;
|
|
438
|
+
/**
|
|
439
|
+
* Callback invoked when a potential OOM recovery is detected on page reload.
|
|
440
|
+
* Only called when `enableOOMRecovery` is true and OOM signals are found.
|
|
441
|
+
* @default null
|
|
442
|
+
*/
|
|
151
443
|
onOOMRecovery?: (report: OOMRecoveryReport) => void;
|
|
444
|
+
/**
|
|
445
|
+
* Enable OOM (Out-of-Memory) crash recovery detection.
|
|
446
|
+
* When enabled, CrashSense periodically checkpoints system state to sessionStorage
|
|
447
|
+
* and analyzes signals on page reload to determine if the previous session was OOM-killed.
|
|
448
|
+
* @default false
|
|
449
|
+
*/
|
|
152
450
|
enableOOMRecovery?: boolean;
|
|
451
|
+
/**
|
|
452
|
+
* Interval in milliseconds between checkpoint writes to sessionStorage.
|
|
453
|
+
* Only used when `enableOOMRecovery` is true.
|
|
454
|
+
* @default 10000
|
|
455
|
+
*/
|
|
153
456
|
checkpointInterval?: number;
|
|
457
|
+
/**
|
|
458
|
+
* Minimum OOM probability threshold (0.0 to 1.0) required to trigger
|
|
459
|
+
* the `onOOMRecovery` callback. Lower values increase sensitivity.
|
|
460
|
+
* @default 0.3
|
|
461
|
+
*/
|
|
154
462
|
oomRecoveryThreshold?: number;
|
|
463
|
+
/**
|
|
464
|
+
* URL endpoint for emergency data flushing via `navigator.sendBeacon()`
|
|
465
|
+
* during page lifecycle events (visibilitychange, pagehide, freeze).
|
|
466
|
+
* When null, lifecycle flush is disabled.
|
|
467
|
+
* @default null
|
|
468
|
+
*/
|
|
155
469
|
flushEndpoint?: string;
|
|
156
470
|
}
|
|
471
|
+
/**
|
|
472
|
+
* Fully resolved configuration with all defaults applied.
|
|
473
|
+
*
|
|
474
|
+
* This is the internal configuration object used throughout the SDK.
|
|
475
|
+
* All optional fields from CrashSenseConfig are resolved to concrete values.
|
|
476
|
+
*/
|
|
157
477
|
interface ResolvedConfig {
|
|
478
|
+
/** Application identifier. */
|
|
158
479
|
appId: string;
|
|
480
|
+
/**
|
|
481
|
+
* Resolved environment name.
|
|
482
|
+
* @default 'production'
|
|
483
|
+
*/
|
|
159
484
|
environment: string;
|
|
485
|
+
/**
|
|
486
|
+
* Resolved release tag.
|
|
487
|
+
* @default ''
|
|
488
|
+
*/
|
|
160
489
|
release: string;
|
|
490
|
+
/**
|
|
491
|
+
* Resolved sampling rate.
|
|
492
|
+
* @default 1.0
|
|
493
|
+
*/
|
|
161
494
|
sampleRate: number;
|
|
495
|
+
/**
|
|
496
|
+
* Resolved max events per minute.
|
|
497
|
+
* @default 30
|
|
498
|
+
*/
|
|
162
499
|
maxEventsPerMinute: number;
|
|
500
|
+
/**
|
|
501
|
+
* Whether memory monitoring is enabled.
|
|
502
|
+
* @default true
|
|
503
|
+
*/
|
|
163
504
|
enableMemoryMonitoring: boolean;
|
|
505
|
+
/**
|
|
506
|
+
* Whether long task monitoring is enabled.
|
|
507
|
+
* @default true
|
|
508
|
+
*/
|
|
164
509
|
enableLongTaskMonitoring: boolean;
|
|
510
|
+
/**
|
|
511
|
+
* Whether network monitoring is enabled.
|
|
512
|
+
* @default true
|
|
513
|
+
*/
|
|
165
514
|
enableNetworkMonitoring: boolean;
|
|
515
|
+
/**
|
|
516
|
+
* Whether iframe tracking is enabled.
|
|
517
|
+
* @default false
|
|
518
|
+
*/
|
|
166
519
|
enableIframeTracking: boolean;
|
|
520
|
+
/**
|
|
521
|
+
* Whether the pre-crash warning system is enabled.
|
|
522
|
+
* @default false
|
|
523
|
+
*/
|
|
167
524
|
enablePreCrashWarning: boolean;
|
|
525
|
+
/**
|
|
526
|
+
* Memory utilization threshold for critical pre-crash warnings.
|
|
527
|
+
* @default 0.85
|
|
528
|
+
*/
|
|
168
529
|
preCrashMemoryThreshold: number;
|
|
530
|
+
/**
|
|
531
|
+
* Whether PII scrubbing is enabled.
|
|
532
|
+
* @default true
|
|
533
|
+
*/
|
|
169
534
|
piiScrubbing: boolean;
|
|
535
|
+
/**
|
|
536
|
+
* Whether debug logging is enabled.
|
|
537
|
+
* @default false
|
|
538
|
+
*/
|
|
170
539
|
debug: boolean;
|
|
540
|
+
/**
|
|
541
|
+
* Crash callback, or null if not configured.
|
|
542
|
+
* @default null
|
|
543
|
+
*/
|
|
171
544
|
onCrash: ((report: CrashReport) => void) | null;
|
|
545
|
+
/**
|
|
546
|
+
* Whether OOM recovery detection is enabled.
|
|
547
|
+
* @default false
|
|
548
|
+
*/
|
|
172
549
|
enableOOMRecovery: boolean;
|
|
550
|
+
/**
|
|
551
|
+
* Checkpoint write interval in milliseconds.
|
|
552
|
+
* @default 10000
|
|
553
|
+
*/
|
|
173
554
|
checkpointInterval: number;
|
|
555
|
+
/**
|
|
556
|
+
* Minimum OOM probability threshold.
|
|
557
|
+
* @default 0.3
|
|
558
|
+
*/
|
|
174
559
|
oomRecoveryThreshold: number;
|
|
560
|
+
/**
|
|
561
|
+
* Lifecycle flush endpoint URL, or null if disabled.
|
|
562
|
+
* @default null
|
|
563
|
+
*/
|
|
175
564
|
flushEndpoint: string | null;
|
|
565
|
+
/**
|
|
566
|
+
* OOM recovery callback, or null if not configured.
|
|
567
|
+
* @default null
|
|
568
|
+
*/
|
|
176
569
|
onOOMRecovery: ((report: OOMRecoveryReport) => void) | null;
|
|
177
570
|
}
|
|
571
|
+
/**
|
|
572
|
+
* Interface for CrashSense plugins.
|
|
573
|
+
*
|
|
574
|
+
* Plugins intercept, enrich, or drop crash events before they reach
|
|
575
|
+
* the `onCrash` callback. They receive the core instance during setup
|
|
576
|
+
* for access to configuration and SDK methods.
|
|
577
|
+
*/
|
|
178
578
|
interface CrashSensePlugin {
|
|
579
|
+
/** Unique name identifying this plugin. */
|
|
179
580
|
name: string;
|
|
581
|
+
/**
|
|
582
|
+
* Called when the plugin is registered via `core.use()`.
|
|
583
|
+
* @param core - The CrashSense core instance.
|
|
584
|
+
*/
|
|
180
585
|
setup(core: CrashSenseCore): void;
|
|
586
|
+
/** Called when the CrashSense instance is destroyed. Clean up resources here. */
|
|
181
587
|
teardown(): void;
|
|
588
|
+
/**
|
|
589
|
+
* Called for each crash event before it reaches the `onCrash` callback.
|
|
590
|
+
* Return the event (optionally modified) to pass it through, or null to drop it.
|
|
591
|
+
* @param event - The classified crash event.
|
|
592
|
+
* @returns The event to pass through, or null to suppress it.
|
|
593
|
+
*/
|
|
182
594
|
onCrashEvent?(event: CrashEvent): CrashEvent | null;
|
|
183
595
|
}
|
|
596
|
+
/**
|
|
597
|
+
* Public interface of the CrashSense core instance.
|
|
598
|
+
*
|
|
599
|
+
* This is the main object returned by `createCrashSense()` and provided
|
|
600
|
+
* to plugins and framework adapters. It exposes methods for error capture,
|
|
601
|
+
* breadcrumb management, user context, and system state access.
|
|
602
|
+
*/
|
|
184
603
|
interface CrashSenseCore {
|
|
604
|
+
/** The fully resolved SDK configuration. */
|
|
185
605
|
readonly config: ResolvedConfig;
|
|
606
|
+
/** Unique session identifier for the current CrashSense instance. */
|
|
186
607
|
readonly sessionId: string;
|
|
608
|
+
/**
|
|
609
|
+
* Register a plugin to intercept crash events.
|
|
610
|
+
* @param plugin - The plugin to register.
|
|
611
|
+
*/
|
|
187
612
|
use(plugin: CrashSensePlugin): void;
|
|
613
|
+
/**
|
|
614
|
+
* Manually capture an exception with optional context.
|
|
615
|
+
* The error is classified and processed through the full crash pipeline.
|
|
616
|
+
* @param error - The error to capture. Can be an Error instance, string, or any value.
|
|
617
|
+
* @param context - Optional key-value context merged into event metadata.
|
|
618
|
+
*/
|
|
188
619
|
captureException(error: unknown, context?: Record<string, unknown>): void;
|
|
620
|
+
/**
|
|
621
|
+
* Capture a message as a crash event with the specified severity.
|
|
622
|
+
* @param message - The message to capture.
|
|
623
|
+
* @param severity - Severity level. Defaults to `'info'`.
|
|
624
|
+
*/
|
|
189
625
|
captureMessage(message: string, severity?: CrashSeverity): void;
|
|
626
|
+
/**
|
|
627
|
+
* Add a breadcrumb to the trail. Timestamp is set automatically.
|
|
628
|
+
* @param breadcrumb - The breadcrumb data (type and message required).
|
|
629
|
+
*/
|
|
190
630
|
addBreadcrumb(breadcrumb: Omit<Breadcrumb, 'timestamp'>): void;
|
|
631
|
+
/**
|
|
632
|
+
* Set user context for crash reports. The `id` field is required;
|
|
633
|
+
* additional fields are included as user metadata.
|
|
634
|
+
* @param user - User object with at minimum an `id` field.
|
|
635
|
+
*/
|
|
191
636
|
setUser(user: {
|
|
192
637
|
id: string;
|
|
193
638
|
[key: string]: unknown;
|
|
194
639
|
}): void;
|
|
640
|
+
/**
|
|
641
|
+
* Set a named context object. Context values are included in crash event tags.
|
|
642
|
+
* @param key - Context name.
|
|
643
|
+
* @param value - Context data as key-value pairs.
|
|
644
|
+
*/
|
|
195
645
|
setContext(key: string, value: Record<string, unknown>): void;
|
|
646
|
+
/**
|
|
647
|
+
* Get a snapshot of the current system state (memory, CPU, event loop, network, iframes).
|
|
648
|
+
* @returns Current system state.
|
|
649
|
+
*/
|
|
196
650
|
getSystemState(): SystemState;
|
|
651
|
+
/**
|
|
652
|
+
* Get device and browser environment information.
|
|
653
|
+
* @returns Device information collected at initialization.
|
|
654
|
+
*/
|
|
197
655
|
getDeviceInfo(): DeviceInfo;
|
|
656
|
+
/**
|
|
657
|
+
* Destroy the CrashSense instance. Stops all monitors, removes event listeners,
|
|
658
|
+
* tears down plugins, and releases resources.
|
|
659
|
+
*/
|
|
198
660
|
destroy(): void;
|
|
661
|
+
/**
|
|
662
|
+
* Internal: Used by monitors to report raw crash events into the classification pipeline.
|
|
663
|
+
* @internal
|
|
664
|
+
*/
|
|
199
665
|
_reportRawEvent(event: RawCrashEvent): void;
|
|
666
|
+
/**
|
|
667
|
+
* Internal: Access the event bus for subscribing to SDK events.
|
|
668
|
+
* @internal
|
|
669
|
+
*/
|
|
200
670
|
_getEventBus(): EventBus;
|
|
201
671
|
}
|
|
672
|
+
/**
|
|
673
|
+
* Map of all event types emitted by the CrashSense internal event bus.
|
|
674
|
+
*
|
|
675
|
+
* Monitors emit events when they detect notable conditions. Plugins and
|
|
676
|
+
* internal components subscribe to these events for coordination.
|
|
677
|
+
*
|
|
678
|
+
* - `error` -- A caught JavaScript error
|
|
679
|
+
* - `unhandled_rejection` -- An unhandled Promise rejection
|
|
680
|
+
* - `memory_warning` -- Memory utilization crossed a warning threshold
|
|
681
|
+
* - `long_task` -- A long task (>50ms) was detected on the main thread
|
|
682
|
+
* - `network_failure` -- An HTTP request failed
|
|
683
|
+
* - `crash_detected` -- A crash event was fully classified
|
|
684
|
+
* - `iframe_added` -- An iframe was added to the DOM
|
|
685
|
+
* - `iframe_removed` -- An iframe was removed from the DOM
|
|
686
|
+
* - `pre_crash_warning` -- A pre-crash warning was escalated
|
|
687
|
+
* - `breadcrumb` -- A new breadcrumb was recorded
|
|
688
|
+
* - `oom_recovery` -- An OOM recovery was detected on page reload
|
|
689
|
+
* - `checkpoint_written` -- A checkpoint was persisted to sessionStorage
|
|
690
|
+
* - `lifecycle_flush` -- Data was flushed during a page lifecycle event
|
|
691
|
+
*/
|
|
202
692
|
type EventBusEventMap = {
|
|
203
693
|
'error': {
|
|
204
694
|
error: Error;
|
|
@@ -259,152 +749,346 @@ type EventBusEventMap = {
|
|
|
259
749
|
timestamp: number;
|
|
260
750
|
};
|
|
261
751
|
};
|
|
752
|
+
/**
|
|
753
|
+
* Severity level of a pre-crash warning.
|
|
754
|
+
*
|
|
755
|
+
* Warnings escalate through three tiers as system conditions deteriorate:
|
|
756
|
+
* - `elevated` -- System under pressure (>70% memory or >5 iframes)
|
|
757
|
+
* - `critical` -- High risk of crash (>85% memory or >10 iframes)
|
|
758
|
+
* - `imminent` -- Crash likely within seconds (>95% memory or >15 iframes)
|
|
759
|
+
*/
|
|
262
760
|
type PreCrashLevel = 'elevated' | 'critical' | 'imminent';
|
|
761
|
+
/**
|
|
762
|
+
* Typed event bus for internal CrashSense event communication.
|
|
763
|
+
*
|
|
764
|
+
* Used by monitors, classifiers, and plugins to subscribe to and emit
|
|
765
|
+
* SDK events in a type-safe manner.
|
|
766
|
+
*/
|
|
263
767
|
interface EventBus {
|
|
768
|
+
/**
|
|
769
|
+
* Subscribe to an event.
|
|
770
|
+
* @param event - Event name to listen for.
|
|
771
|
+
* @param handler - Callback invoked when the event is emitted.
|
|
772
|
+
*/
|
|
264
773
|
on<K extends keyof EventBusEventMap>(event: K, handler: (data: EventBusEventMap[K]) => void): void;
|
|
774
|
+
/**
|
|
775
|
+
* Unsubscribe from an event.
|
|
776
|
+
* @param event - Event name to stop listening for.
|
|
777
|
+
* @param handler - The same handler function that was passed to `on()`.
|
|
778
|
+
*/
|
|
265
779
|
off<K extends keyof EventBusEventMap>(event: K, handler: (data: EventBusEventMap[K]) => void): void;
|
|
780
|
+
/**
|
|
781
|
+
* Emit an event to all registered handlers.
|
|
782
|
+
* @param event - Event name to emit.
|
|
783
|
+
* @param data - Event payload matching the EventBusEventMap type.
|
|
784
|
+
*/
|
|
266
785
|
emit<K extends keyof EventBusEventMap>(event: K, data: EventBusEventMap[K]): void;
|
|
267
786
|
}
|
|
787
|
+
/**
|
|
788
|
+
* The final output delivered to the `onCrash` callback.
|
|
789
|
+
*
|
|
790
|
+
* Contains the fully classified crash event and an optional AI analysis
|
|
791
|
+
* (null unless an AI client is configured and analysis succeeds).
|
|
792
|
+
*/
|
|
268
793
|
interface CrashReport {
|
|
794
|
+
/** The fully classified crash event. */
|
|
269
795
|
event: CrashEvent;
|
|
796
|
+
/** AI-generated crash analysis, or null if AI is not configured or analysis failed. */
|
|
270
797
|
analysis: CrashAnalysis | null;
|
|
798
|
+
/** Unix timestamp in milliseconds when this report was generated. */
|
|
271
799
|
timestamp: number;
|
|
272
800
|
}
|
|
801
|
+
/**
|
|
802
|
+
* AI-generated analysis of a crash event.
|
|
803
|
+
*
|
|
804
|
+
* Produced by the @crashsense/ai package when configured with an LLM endpoint.
|
|
805
|
+
* Contains the root cause assessment, suggested fix, prevention advice,
|
|
806
|
+
* and alternative causes ranked by likelihood.
|
|
807
|
+
*/
|
|
273
808
|
interface CrashAnalysis {
|
|
809
|
+
/** Primary root cause of the crash as determined by the AI. */
|
|
274
810
|
rootCause: string;
|
|
811
|
+
/** Detailed explanation of why the crash occurred. */
|
|
275
812
|
explanation: string;
|
|
813
|
+
/** Suggested code fix, or null if no specific fix can be recommended. */
|
|
276
814
|
fix: {
|
|
815
|
+
/** Human-readable description of what the fix does. */
|
|
277
816
|
description: string;
|
|
817
|
+
/** Suggested code snippet to resolve the issue. */
|
|
278
818
|
code: string;
|
|
819
|
+
/** File path where the fix should be applied. */
|
|
279
820
|
filename: string;
|
|
280
821
|
} | null;
|
|
822
|
+
/** List of preventive measures to avoid similar crashes. */
|
|
281
823
|
prevention: string[];
|
|
824
|
+
/** AI confidence score for this analysis (0.0 to 1.0). */
|
|
282
825
|
confidence: number;
|
|
826
|
+
/** Alternative possible causes ranked by likelihood. */
|
|
283
827
|
alternativeCauses: Array<{
|
|
284
828
|
cause: string;
|
|
285
829
|
likelihood: number;
|
|
286
830
|
}>;
|
|
831
|
+
/** Source of the analysis: heuristic (rules only), ai (LLM only), or hybrid (both). */
|
|
287
832
|
source: 'heuristic' | 'ai' | 'hybrid';
|
|
288
833
|
}
|
|
834
|
+
/**
|
|
835
|
+
* Configuration for the AI analysis client (@crashsense/ai).
|
|
836
|
+
*
|
|
837
|
+
* Supports OpenAI, Anthropic, Google, or any OpenAI-compatible endpoint.
|
|
838
|
+
*/
|
|
289
839
|
interface AIConfig {
|
|
840
|
+
/** URL of the LLM API endpoint (e.g., `'https://api.openai.com/v1/chat/completions'`). */
|
|
290
841
|
endpoint: string;
|
|
842
|
+
/** API key for authenticating with the LLM provider. */
|
|
291
843
|
apiKey: string;
|
|
844
|
+
/** Model identifier (e.g., `'gpt-4'`, `'claude-3-opus'`). Provider-specific. */
|
|
292
845
|
model?: string;
|
|
846
|
+
/** Maximum tokens for the AI response. */
|
|
293
847
|
maxTokens?: number;
|
|
848
|
+
/** Sampling temperature (0.0 to 2.0). Lower values produce more deterministic output. */
|
|
294
849
|
temperature?: number;
|
|
850
|
+
/** Request timeout in milliseconds. */
|
|
295
851
|
timeout?: number;
|
|
852
|
+
/** Number of retry attempts on transient failures. */
|
|
296
853
|
retries?: number;
|
|
854
|
+
/** LLM provider hint for request formatting. Defaults to auto-detection from endpoint URL. */
|
|
297
855
|
provider?: 'openai' | 'anthropic' | 'google' | 'custom';
|
|
298
856
|
}
|
|
857
|
+
/**
|
|
858
|
+
* Token-optimized payload sent to the LLM endpoint for crash analysis.
|
|
859
|
+
*
|
|
860
|
+
* Built internally by the AI client from a CrashEvent. Contains only the
|
|
861
|
+
* fields most relevant for root cause analysis, compressed for token efficiency.
|
|
862
|
+
*/
|
|
299
863
|
interface AIPayload {
|
|
864
|
+
/** Summary of the crash classification. */
|
|
300
865
|
crash_summary: {
|
|
866
|
+
/** Crash category. */
|
|
301
867
|
category: CrashCategory;
|
|
868
|
+
/** Crash subcategory. */
|
|
302
869
|
subcategory: string;
|
|
870
|
+
/** Heuristic classifier confidence score. */
|
|
303
871
|
heuristic_confidence: number;
|
|
872
|
+
/** Crash severity level. */
|
|
304
873
|
severity: CrashSeverity;
|
|
305
874
|
};
|
|
875
|
+
/** Compressed error information. */
|
|
306
876
|
error: {
|
|
877
|
+
/** Error constructor name. */
|
|
307
878
|
type: string;
|
|
879
|
+
/** Error message. */
|
|
308
880
|
message: string;
|
|
881
|
+
/** Top 5 stack frames as formatted strings. */
|
|
309
882
|
stack_top_5: string[];
|
|
883
|
+
/** Stack frames identified as user application code. */
|
|
310
884
|
user_code_frames: string[];
|
|
311
885
|
};
|
|
886
|
+
/** System state metrics at crash time. */
|
|
312
887
|
system_state: {
|
|
888
|
+
/** Memory utilization as a formatted string. */
|
|
313
889
|
memory_utilization: string;
|
|
890
|
+
/** Memory usage trend direction. */
|
|
314
891
|
memory_trend: MemoryTrend;
|
|
892
|
+
/** Number of long tasks in the last 30 seconds. */
|
|
315
893
|
long_tasks_last_30s: number;
|
|
894
|
+
/** Estimated FPS at the time of crash. */
|
|
316
895
|
fps_at_crash: number;
|
|
896
|
+
/** Number of pending HTTP requests. */
|
|
317
897
|
pending_network_requests: number;
|
|
898
|
+
/** Number of failed HTTP requests in the last 60 seconds. */
|
|
318
899
|
failed_requests_last_60s: number;
|
|
319
900
|
};
|
|
901
|
+
/** Compressed device information. */
|
|
320
902
|
device: {
|
|
903
|
+
/** OS platform. */
|
|
321
904
|
platform: string;
|
|
905
|
+
/** Device memory as a formatted string. */
|
|
322
906
|
memory: string;
|
|
907
|
+
/** Viewport dimensions as a formatted string. */
|
|
323
908
|
viewport: string;
|
|
909
|
+
/** Network connection type. */
|
|
324
910
|
connection: string;
|
|
325
911
|
};
|
|
912
|
+
/** Framework context summary. */
|
|
326
913
|
framework: {
|
|
914
|
+
/** Framework name. */
|
|
327
915
|
name: string;
|
|
916
|
+
/** Framework version. */
|
|
328
917
|
version: string;
|
|
918
|
+
/** Lifecycle stage at crash time. */
|
|
329
919
|
lifecycle_stage: string;
|
|
920
|
+
/** Component tree path from root to crash site. */
|
|
330
921
|
component_path: string[];
|
|
922
|
+
/** Number of renders since the last navigation. */
|
|
331
923
|
render_count_since_nav: number;
|
|
332
924
|
};
|
|
925
|
+
/** Last 5 breadcrumbs before the crash. */
|
|
333
926
|
breadcrumbs_last_5: Array<{
|
|
927
|
+
/** Breadcrumb type. */
|
|
334
928
|
type: BreadcrumbType;
|
|
929
|
+
/** Breadcrumb message. */
|
|
335
930
|
message: string;
|
|
931
|
+
/** Relative time before crash as a formatted string. */
|
|
336
932
|
time: string;
|
|
337
933
|
}>;
|
|
934
|
+
/** Contributing factors from the heuristic classifier. */
|
|
338
935
|
contributing_factors: Array<{
|
|
936
|
+
/** Factor identifier. */
|
|
339
937
|
factor: string;
|
|
938
|
+
/** Factor weight. */
|
|
340
939
|
weight: number;
|
|
940
|
+
/** Evidence string. */
|
|
341
941
|
evidence: string;
|
|
342
942
|
}>;
|
|
343
943
|
}
|
|
944
|
+
/**
|
|
945
|
+
* Structured response from the LLM after analyzing a crash.
|
|
946
|
+
*
|
|
947
|
+
* Parsed and validated by the AI client before being wrapped
|
|
948
|
+
* into a CrashAnalysis object.
|
|
949
|
+
*/
|
|
344
950
|
interface AIResponse {
|
|
951
|
+
/** Primary root cause of the crash. */
|
|
345
952
|
rootCause: string;
|
|
953
|
+
/** Detailed explanation of why the crash occurred. */
|
|
346
954
|
explanation: string;
|
|
955
|
+
/** Suggested code fix. */
|
|
347
956
|
fix: {
|
|
957
|
+
/** Description of what the fix does. */
|
|
348
958
|
description: string;
|
|
959
|
+
/** Code snippet to resolve the issue. */
|
|
349
960
|
code: string;
|
|
961
|
+
/** Target file path for the fix. */
|
|
350
962
|
filename: string;
|
|
351
963
|
};
|
|
964
|
+
/** Preventive measures to avoid recurrence. */
|
|
352
965
|
prevention: string[];
|
|
966
|
+
/** AI confidence in this analysis (0.0 to 1.0). */
|
|
353
967
|
confidence: number;
|
|
968
|
+
/** Alternative possible causes ranked by likelihood. */
|
|
354
969
|
alternativeCauses: Array<{
|
|
355
970
|
cause: string;
|
|
356
971
|
likelihood: number;
|
|
357
972
|
}>;
|
|
358
973
|
}
|
|
974
|
+
/**
|
|
975
|
+
* Record of a single HTTP request captured by the network monitor.
|
|
976
|
+
*/
|
|
359
977
|
interface NetworkRequest {
|
|
978
|
+
/** Request URL. */
|
|
360
979
|
url: string;
|
|
980
|
+
/** HTTP method (GET, POST, etc.). */
|
|
361
981
|
method: string;
|
|
982
|
+
/** HTTP response status code (0 if the request failed before receiving a response). */
|
|
362
983
|
status: number;
|
|
984
|
+
/** Total request duration in milliseconds. */
|
|
363
985
|
duration: number;
|
|
986
|
+
/** Unix timestamp in milliseconds when the request started. */
|
|
364
987
|
startTime: number;
|
|
988
|
+
/** Error message if the request failed, or null on success. */
|
|
365
989
|
error: string | null;
|
|
990
|
+
/** Response body size in bytes, or null if unavailable. */
|
|
366
991
|
responseSize: number | null;
|
|
367
992
|
}
|
|
993
|
+
/**
|
|
994
|
+
* Output of the crash classifier.
|
|
995
|
+
*
|
|
996
|
+
* Contains the assigned category, subcategory, confidence score,
|
|
997
|
+
* and the contributing factors that led to the classification.
|
|
998
|
+
*/
|
|
368
999
|
interface ClassificationResult {
|
|
1000
|
+
/** Assigned crash category. */
|
|
369
1001
|
category: CrashCategory;
|
|
1002
|
+
/** Specific subcategory within the category. */
|
|
370
1003
|
subcategory: string;
|
|
1004
|
+
/** Classifier confidence score (0.0 to 1.0). */
|
|
371
1005
|
confidence: number;
|
|
1006
|
+
/** Factors that contributed to this classification. */
|
|
372
1007
|
contributingFactors: ContributingFactor[];
|
|
373
1008
|
}
|
|
1009
|
+
/**
|
|
1010
|
+
* Snapshot of SDK state periodically written to sessionStorage.
|
|
1011
|
+
*
|
|
1012
|
+
* Used by the OOM recovery system to preserve context across
|
|
1013
|
+
* browser tab crashes. When the page reloads, the last checkpoint
|
|
1014
|
+
* is analyzed alongside OOM signals to determine if an OOM kill occurred.
|
|
1015
|
+
*/
|
|
374
1016
|
interface CheckpointData {
|
|
1017
|
+
/** Schema version for forward compatibility. */
|
|
375
1018
|
version: number;
|
|
1019
|
+
/** Unix timestamp in milliseconds when this checkpoint was written. */
|
|
376
1020
|
timestamp: number;
|
|
1021
|
+
/** Session identifier at the time of the checkpoint. */
|
|
377
1022
|
sessionId: string;
|
|
1023
|
+
/** Application identifier from configuration. */
|
|
378
1024
|
appId: string;
|
|
1025
|
+
/** Page URL at the time of the checkpoint. */
|
|
379
1026
|
url: string;
|
|
1027
|
+
/** Breadcrumb trail at the time of the checkpoint. */
|
|
380
1028
|
breadcrumbs: Breadcrumb[];
|
|
1029
|
+
/** Partial system state snapshot. */
|
|
381
1030
|
systemState: Partial<SystemState>;
|
|
1031
|
+
/** Device information. */
|
|
382
1032
|
device: DeviceInfo;
|
|
1033
|
+
/** Pre-crash warnings that were active before the checkpoint. */
|
|
383
1034
|
preCrashWarnings: Array<{
|
|
1035
|
+
/** Warning severity level. */
|
|
384
1036
|
level: PreCrashLevel;
|
|
1037
|
+
/** Reason for the warning. */
|
|
385
1038
|
reason: string;
|
|
1039
|
+
/** When the warning was issued. */
|
|
386
1040
|
timestamp: number;
|
|
387
1041
|
}>;
|
|
1042
|
+
/** Memory trend direction at checkpoint time, or null if memory monitoring is disabled. */
|
|
388
1043
|
memoryTrend: MemoryTrend | null;
|
|
1044
|
+
/** Number of checkpoints written in this session. */
|
|
389
1045
|
checkpointCount: number;
|
|
390
1046
|
}
|
|
1047
|
+
/**
|
|
1048
|
+
* Report generated when CrashSense detects a likely OOM kill from a previous session.
|
|
1049
|
+
*
|
|
1050
|
+
* Delivered to the `onOOMRecovery` callback with full context from the last
|
|
1051
|
+
* checkpoint and the OOM signals that triggered the detection.
|
|
1052
|
+
*/
|
|
391
1053
|
interface OOMRecoveryReport {
|
|
1054
|
+
/** Unique identifier for this recovery report (UUID v4). */
|
|
392
1055
|
id: string;
|
|
1056
|
+
/** Report type discriminator. Always `'oom_recovery'`. */
|
|
393
1057
|
type: 'oom_recovery';
|
|
1058
|
+
/** Unix timestamp in milliseconds when the recovery was detected. */
|
|
394
1059
|
timestamp: number;
|
|
1060
|
+
/** Estimated probability (0.0 to 1.0) that the previous session ended due to OOM. */
|
|
395
1061
|
probability: number;
|
|
1062
|
+
/** Session identifier for the current (recovered) session. */
|
|
396
1063
|
sessionId: string;
|
|
1064
|
+
/** Session identifier from the crashed session. */
|
|
397
1065
|
previousSessionId: string;
|
|
1066
|
+
/** Milliseconds between the last checkpoint and the current page load. */
|
|
398
1067
|
timeSinceLastCheckpoint: number;
|
|
1068
|
+
/** Whether `document.wasDiscarded` was true, indicating browser-initiated discard. Undefined if API unavailable. */
|
|
399
1069
|
wasDiscarded: boolean | undefined;
|
|
1070
|
+
/** Navigation type from `performance.getEntriesByType('navigation')`. */
|
|
400
1071
|
navigationType: string;
|
|
1072
|
+
/** Last checkpoint data from the previous session. */
|
|
401
1073
|
lastCheckpoint: CheckpointData;
|
|
1074
|
+
/** Device information from the current session. */
|
|
402
1075
|
device: DeviceInfo;
|
|
1076
|
+
/** Individual OOM signals that contributed to the probability score. */
|
|
403
1077
|
signals: OOMSignal[];
|
|
404
1078
|
}
|
|
1079
|
+
/**
|
|
1080
|
+
* A single signal used in OOM probability calculation.
|
|
1081
|
+
*
|
|
1082
|
+
* The OOM recovery system evaluates multiple signals (document.wasDiscarded,
|
|
1083
|
+
* navigation type, memory trends, etc.) and combines their weighted scores
|
|
1084
|
+
* to produce the overall OOM probability.
|
|
1085
|
+
*/
|
|
405
1086
|
interface OOMSignal {
|
|
1087
|
+
/** Machine-readable signal identifier (e.g., `'was_discarded'`, `'memory_trend'`). */
|
|
406
1088
|
signal: string;
|
|
1089
|
+
/** Weight of this signal in the probability calculation (0.0 to 1.0). */
|
|
407
1090
|
weight: number;
|
|
1091
|
+
/** Human-readable evidence explaining what was observed. */
|
|
408
1092
|
evidence: string;
|
|
409
1093
|
}
|
|
410
1094
|
|