@ahmedelsharkawycs/browser-fingerprinting
Version:
A powerful, privacy-focused browser fingerprinting library that generates unique identifiers based on browser and device characteristics. Perfect for fraud prevention, analytics, and user identification without cookies.
118 lines (117 loc) • 3.07 kB
TypeScript
export type ScreenInfo = {
width: number;
height: number;
availWidth: number;
availHeight: number;
colorDepth: number;
pixelDepth: number;
devicePixelRatio: number;
};
export type WebGLInfo = {
vendor: string;
renderer: string;
};
export type FontCheck = {
[key: string]: boolean;
};
export type PluginInfo = {
name: string;
filename: string;
description: string;
};
export type MimeTypeInfo = {
type: string;
description: string;
};
export type TouchSupport = {
maxTouchPoints: number;
touchEvent: boolean;
pointerEvent: boolean;
};
export type NetworkInfo = {
effectiveType?: string;
downlink?: number;
rtt?: number;
};
export type StorageInfo = {
localStorage: boolean;
sessionStorage: boolean;
indexedDB: boolean;
cookies: boolean;
};
export type PerformanceBenchmark = {
timing: number;
mathRandom: number;
mathSin: number;
};
export type QuirksInfo = {
chrome: boolean;
edge: boolean;
brave: boolean;
vivaldi: boolean;
opera: boolean;
mobile: boolean;
tablet: boolean;
desktop: boolean;
mac: boolean;
windows: boolean;
linux: boolean;
android: boolean;
ios: boolean;
firefox: boolean;
safari: boolean;
ie: boolean;
};
export type BrowserFingerprint = {
userAgent: string;
platform: string;
vendor: string;
screen: ScreenInfo;
timezone: string;
language: string;
languages: string[];
hardwareConcurrency: number | "unknown";
deviceMemory: number | "unknown";
webgl: WebGLInfo;
canvasFingerprint: string;
fontCheck: FontCheck;
plugins: PluginInfo[];
mimeTypes: MimeTypeInfo[];
touchSupport: TouchSupport;
networkInfo: NetworkInfo;
storage: StorageInfo;
performanceBenchmark: PerformanceBenchmark;
localIPs: string[];
doNotTrack?: string | null;
quirks: QuirksInfo;
};
export type NormalizedBrowserFingerprint = {
userAgent: string;
platform: string;
screen: Pick<ScreenInfo, "height" | "width" | "devicePixelRatio">;
timezone: string;
language: string;
hardwareConcurrency: number | "unknown";
deviceMemory: number | "unknown";
webglVendor: string;
webglRenderer: string;
fonts: FontCheck;
touchSupport: TouchSupport;
plugins: string[];
mimeTypes: string[];
};
export type ExtendedNavigator = Navigator & {
deviceMemory?: number;
hardwareConcurrency?: number;
connection?: {
effectiveType?: string;
downlink?: number;
rtt?: number;
};
mozConnection?: any;
webkitConnection?: any;
msDoNotTrack?: string;
getUserMedia?: (constraints: MediaStreamConstraints) => Promise<MediaStream>;
webkitGetUserMedia?: (constraints: MediaStreamConstraints, successCallback: (stream: MediaStream) => void, errorCallback: (error: any) => void) => void;
mozGetUserMedia?: (constraints: MediaStreamConstraints, successCallback: (stream: MediaStream) => void, errorCallback: (error: any) => void) => void;
};