isometrik-web-tracker
Version:
Production-grade user tracking library with multiple tracking methods
177 lines • 4.93 kB
TypeScript
/**
* Core types for the user tracking system
*/
export interface TrackerOptions {
idleThreshold?: number;
trackingInterval?: number;
enableConsoleLog?: boolean;
secureModeEnabled?: boolean;
trackingKey?: string;
onActivityChange?: (isActive: boolean, activityType?: ActivityType) => void;
onTimeUpdate?: (data: TimeTrackingData) => void;
onElementVisible?: (elementKey: string, data: ElementTrackingData) => void;
onElementHidden?: (elementKey: string, data: ElementTrackingData) => void;
onTrackingEvent?: (event: TrackingEvent) => void;
}
export type ActivityType = 'mouse' | 'keyboard' | 'scroll' | 'touch' | 'focus' | 'visibility' | 'idle_timeout' | 'element_interaction';
export interface TimeTrackingData {
sessionId: string;
trackingKey: string;
totalTimeSpent: number;
activeTimeSpent: number;
idleTimeSpent: number;
pageVisits: number;
lastActivity: Date;
sessionStart: Date;
url: string;
title: string;
referrer: string;
userAgent: string;
elementTrackingData: Record<string, ElementTrackingData>;
activityHistory: TrackingEvent[];
}
export interface ElementTrackingData {
elementKey: string;
totalVisibleTime: number;
visibilityCount: number;
firstSeen: Date;
lastSeen: Date;
isCurrentlyVisible: boolean;
viewportPercentage: number;
interactions: ElementInteraction[];
}
export interface ElementInteraction {
type: 'click' | 'hover' | 'focus' | 'scroll';
timestamp: Date;
position?: {
x: number;
y: number;
};
target?: string;
}
export interface TrackingEvent {
type: string;
timestamp: number;
activityType?: ActivityType;
data?: any;
}
export interface MouseActivityData {
type: 'click' | 'move' | 'hover' | 'drag';
position: {
x: number;
y: number;
};
target?: string;
button?: number;
clicks?: number;
pressure?: number;
movement?: {
x: number;
y: number;
};
}
export interface ScrollActivityData {
type: 'scroll';
position: {
x: number;
y: number;
};
depth: number;
velocity: number;
direction: 'up' | 'down' | 'left' | 'right';
target?: string;
}
export interface KeyboardActivityData {
type: 'keydown' | 'keyup' | 'keypress';
key: string;
code: string;
keyCode: number;
ctrlKey: boolean;
altKey: boolean;
shiftKey: boolean;
metaKey: boolean;
target?: string;
}
export interface TouchActivityData {
type: 'touchstart' | 'touchmove' | 'touchend';
touches: TouchPoint[];
target?: string;
gesture?: 'pinch' | 'swipe' | 'tap' | 'longpress';
}
export interface TouchPoint {
identifier: number;
clientX: number;
clientY: number;
pageX: number;
pageY: number;
pressure?: number;
}
export interface ElementVisibilityOptions {
trackVisibility?: boolean;
trackInteractions?: boolean;
threshold?: number;
rootMargin?: string;
}
export interface ActivityDetectorOptions {
enableConsoleLog?: boolean;
onActivity: (activityType: ActivityType) => void;
}
export interface ElementVisibilityTrackerOptions {
enableConsoleLog?: boolean;
onVisible: (elementKey: string, element: Element, data: ElementTrackingData) => void;
onHidden: (elementKey: string, element: Element, data: ElementTrackingData) => void;
}
export interface MouseTrackerOptions {
enableConsoleLog?: boolean;
trackClicks?: boolean;
trackMovement?: boolean;
trackHovers?: boolean;
onMouseActivity: (data: MouseActivityData) => void;
}
export interface ScrollTrackerOptions {
enableConsoleLog?: boolean;
trackDepth?: boolean;
trackVelocity?: boolean;
onScrollActivity: (data: ScrollActivityData) => void;
}
export interface KeyboardTrackerOptions {
enableConsoleLog?: boolean;
trackKeystrokes?: boolean;
trackCombinations?: boolean;
onKeyboardActivity: (data: KeyboardActivityData) => void;
}
export interface TouchTrackerOptions {
enableConsoleLog?: boolean;
trackGestures?: boolean;
trackPressure?: boolean;
onTouchActivity: (data: TouchActivityData) => void;
}
export interface FocusTrackerOptions {
enableConsoleLog?: boolean;
onFocusChange: (hasFocus: boolean) => void;
}
export interface NetworkTrackerOptions {
enableConsoleLog?: boolean;
onNetworkChange: (isOnline: boolean) => void;
}
export interface SessionData {
sessionId: string;
trackingKey: string;
startTime: Date;
duration: number;
isActive: boolean;
}
export interface ActivityStats {
mouseEvents: number;
keyboardEvents: number;
scrollEvents: number;
touchEvents: number;
totalEvents: number;
}
export interface FormattedData {
totalTime: string;
activeTime: string;
idleTime: string;
engagementRate: string;
}
//# sourceMappingURL=types.d.ts.map