@perceptr/web-sdk
Version:
Perceptr Web SDK for recording and monitoring user sessions
129 lines (128 loc) • 3.35 kB
TypeScript
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;
}