@trlogic/tracker-web
Version:
Formica Tracker Web
59 lines (58 loc) • 2.12 kB
TypeScript
/**
* Risk metrics collection & baseline management
*/
import { SuspiciousFlags } from "../domain/suspicious-flags";
interface EnvironmentBaseline {
language: string | null;
timezone: string | null;
os: string | null;
browser: string | null;
firstSeen: number;
}
interface EnvironmentChangeFlags {
languageChanged: boolean;
timezoneChanged: boolean;
osChanged: boolean;
browserChanged: boolean;
}
export interface RemoteAccessAggregates {
headlessIndicatorCount: number;
noMouseMoveDurationMs: number;
clickOnlyPattern: boolean;
fastPageTransition: boolean;
navigationVelocity: number;
formFillAnomaly: boolean;
formFillDurationMs: number;
inputPasteRatio: number;
}
declare class RiskMetricsService {
private lastMouseMoveTs;
private lastClickTs;
private mouseMoveCounterWindow;
private clickCounterWindow;
private pageViewTimestamps;
private pasteCharCount;
private typedCharCount;
private lastPageViewTs;
private lastFormInteractionStart;
private lastFormFieldCount;
private lastFormDurationMs;
private formFillAnomaly;
private fastPageTransition;
/** register global listeners (idempotent) */
initListeners(): void;
/** Called on each page view */
registerPageView(): void;
getAggregates(): RemoteAccessAggregates;
computePasteRatio(): number;
resetRollingWindow(): void;
private detectFormAnomaly;
loadBaseline(tenant: string, deviceId: string): EnvironmentBaseline | null;
ensureBaseline(tenant: string, deviceId: string, data: Omit<EnvironmentBaseline, "firstSeen">): EnvironmentBaseline;
diffEnvironment(baseline: EnvironmentBaseline, current: Omit<EnvironmentBaseline, "firstSeen">): EnvironmentChangeFlags;
calcEnvironmentChangeScore(flags: EnvironmentChangeFlags): number;
calcRemoteAccessScore(flags: SuspiciousFlags, envMismatch: boolean, agg: RemoteAccessAggregates): number;
private getBaselineKey;
}
export declare const riskMetricsService: RiskMetricsService;
export type { EnvironmentBaseline, EnvironmentChangeFlags };