UNPKG

@perceptr/web-sdk

Version:

Perceptr Web SDK for recording and monitoring user sessions

129 lines (128 loc) 3.35 kB
import { NetworkMonitor } from "../NetworkMonitor"; import { SessionRecorder } from "../SessionRecorder"; import { getRecordConsolePlugin } from "@rrweb/rrweb-plugin-console-record"; import type { eventWithTime } from "@rrweb/types"; export interface SessionConfig { staleThreshold?: number; urlBlocklist?: SessionRecordingUrlTrigger[]; maxEvents?: number; sampling?: { mousemove?: number; scroll?: number; input?: "all" | "last"; }; blockClass?: string; ignoreClass?: string; maskTextClass?: string; blockSelector?: string; maskTextSelector?: string; idleTimeout?: number; console?: Parameters<typeof getRecordConsolePlugin>[0]; } export interface MutationThrottlingConfig { enabled: boolean; bucketSize: number; refillRate: number; } export interface SessionData { sessionId: string; startTime: number; endTime?: number; events: eventWithTime[]; } export interface NetworkRequest { type: 7; id: string; timestamp: number; video_timestamp: string; duration: number; method: string; url: string; status?: number; statusText?: string; requestHeaders: Record<string, string>; responseHeaders: Record<string, string>; requestBody?: any; responseBody?: any; error?: unknown; } export interface NetworkMonitorConfig { maxRequests?: number; sanitizeHeaders?: string[]; sanitizeParams?: string[]; sanitizeBodyFields?: string[]; captureRequestBody?: boolean; captureResponseBody?: boolean; maxBodySize?: number; excludeUrls?: RegExp[]; } export interface PerformanceConfig { memoryLimit?: number; throttle?: { mousemove?: number; scroll?: number; input?: number; }; } export interface BufferConfig { staleThreshold?: number; } export interface CoreConfig { debug?: boolean; env?: "local" | "dev" | "stg" | "prod"; projectId: string; session?: SessionConfig & BufferConfig; network?: NetworkMonitorConfig; console?: Parameters<typeof getRecordConsolePlugin>[0]; metadata?: Record<string, any>; performance?: PerformanceConfig; userIdentity?: UserIdentity; } export interface CoreComponents { sessionRecorder: SessionRecorder; networkMonitor: NetworkMonitor; } export interface Memory { totalJSHeapSize: number; usedJSHeapSize: number; jsHeapSizeLimit: number; } export interface MemoryEstimate { bytes: number; breakdown: Array<{ bytes: number; attribution: Array<string>; types: Array<string>; }>; } export type EventType = eventWithTime | NetworkRequest; export interface SnapshotBuffer { size: number; data: EventType[]; isSessionEnded: boolean; startTime: number; endTime?: number; sessionId: string; batchId: string; metadata?: Record<string, any>; userIdentity?: UserIdentity; } export interface PersistedBufferData { sessionId: string; batchId: string; startTime: number; endTime: number; events: EventType[]; userIdentity?: UserIdentity; size: number; } export interface SessionRecordingUrlTrigger { url: string; matching: "regex"; } export interface UserIdentity { distinctId: string; email?: string; name?: string; [key: string]: any; }