fakebrowser
Version:
🤖 Fake fingerprints to bypass anti-bot systems. Simulate mouse and keyboard operations to make behavior like a real person.
231 lines • 6.14 kB
TypeScript
export declare enum FontExistTypes {
FontNotExists = 0,
FontExists = 1,
BaseFont = 2
}
/**
* Source information for browser fingerprint.
* Includes plugins, gpu, fonts, webgl, etc.
*
* How do we get this information?
* Use dumpDD.js to collect fingerprints.
*/
export interface DeviceDescriptor {
plugins: {
mimeTypes: Array<{
type: string;
suffixes: string;
description: string;
__pluginName: string;
}>;
plugins: Array<{
name: string;
filename: string;
description: string;
__mimeTypes: string[];
}>;
};
allFonts: Array<{
name: string;
exists: FontExistTypes;
}>;
gpu: {
vendor: string;
renderer: string;
};
navigator: {
languages: string[];
userAgent: string;
'appCodeName': string;
'appMinorVersion': string;
'appName': string;
'appVersion': string;
'buildID': string;
'platform': string;
'product': string;
'productSub': string;
'hardwareConcurrency': number;
'cpuClass': string;
'maxTouchPoints': number;
'oscpu': string;
'vendor': string;
'vendorSub': string;
'deviceMemory': number;
'doNotTrack': string;
'msDoNotTrack': string;
'vibrate': string;
'credentials': string;
'storage': string;
'requestMediaKeySystemAccess': string;
'bluetooth': string;
'language': string;
'systemLanguage': string;
'userLanguage': string;
webdriver: boolean;
};
'window': {
'innerWidth': number;
'innerHeight': number;
'outerWidth': number;
'outerHeight': number;
'screenX': number;
'screenY': number;
'pageXOffset': number;
'pageYOffset': number;
'Image': string;
'isSecureContext': boolean;
'devicePixelRatio': number;
'toolbar': string;
'locationbar': string;
'ActiveXObject': string;
'external': string;
'mozRTCPeerConnection': string;
'postMessage': string;
'webkitRequestAnimationFrame': string;
'BluetoothUUID': string;
'netscape': string;
'localStorage': string;
'sessionStorage': string;
'indexDB': string;
};
'document': {
'characterSet': string;
'compatMode': string;
'documentMode': string;
'layers': string;
'images': string;
};
'screen': {
'availWidth': number;
'availHeight': number;
'availLeft': number;
'availTop': number;
'width': number;
'height': number;
'colorDepth': number;
'pixelDepth': number;
};
'body': {
'clientWidth': number;
'clientHeight': number;
};
'webgl': WebGLDescriptor;
'webgl2': WebGLDescriptor;
mimeTypes: Array<{
mimeType: string;
audioPlayType: string;
videoPlayType: string;
mediaSource: boolean;
mediaRecorder: boolean;
}>;
'mediaDevices': Array<{
'deviceId': string;
'kind': string;
'label': string;
'groupId': string;
}>;
'battery': {
charging: boolean;
chargingTime: number;
dischargingTime: number;
level: number;
};
'voices': Array<{
default: boolean;
lang: string;
localService: boolean;
name: string;
voiceURI: string;
}>;
'windowVersion': string[];
'htmlElementVersion': string[];
'keyboard': Record<string, string>;
'permissions': Record<string, {
'state'?: string;
'exType'?: string;
'msg'?: string;
}>;
}
export interface WebGLDescriptor {
'supportedExtensions': string[];
'contextAttributes': {
'alpha': boolean;
'antialias': boolean;
'depth': boolean;
'desynchronized': boolean;
'failIfMajorPerformanceCaveat': boolean;
'powerPreference': string;
'premultipliedAlpha': boolean;
'preserveDrawingBuffer': boolean;
'stencil': boolean;
'xrCompatible': boolean;
};
'maxAnisotropy': number;
'params': Record<string, {
'type': string;
'value': null | string | number | number[] | Record<string, number>;
}>;
'shaderPrecisionFormats': Array<{
'shaderType': number;
'precisionType': number;
'r': {
'rangeMin': number;
'rangeMax': number;
'precision': number;
};
}>;
}
export declare type ChromeUACHHeaders = {
'Accept-Language'?: string;
'sec-ch-ua'?: string;
'sec-ch-ua-mobile'?: string;
'sec-ch-ua-platform'?: string;
};
/**
* Simplify the font information into family, style, weight, size
*/
export interface FontDescriptor {
fontFamily: string;
fontStyle: string;
fontWeight: string;
fontSize: number;
}
export interface FakeFont {
exists: boolean;
originalFontFamily: string;
fakeFont: FontDescriptor;
}
export declare type IFontSalt = {
exists: boolean;
offsetWidth: number;
offsetHeight: number;
style: string;
weight: string;
size: number;
};
export interface FakeDeviceDescriptor extends DeviceDescriptor {
canvasSalt?: number[];
fontSalt?: {
[key: string]: IFontSalt;
};
acceptLanguage?: string;
}
export default class DeviceDescriptorHelper {
/**
* Check device descriptor legal based on attributes
* @param dd
*/
static checkLegal(dd: DeviceDescriptor): boolean;
/**
* Calculate browser UUID
* We simply use DeviceDescriptor JSON string and take MD5.
* @param e
*/
static deviceUUID(e: DeviceDescriptor): string;
static buildFakeDeviceDescriptor(deviceDesc: DeviceDescriptor): {
fakeDeviceDesc: FakeDeviceDescriptor;
needsUpdate: boolean;
};
private static buildAcceptLanguage;
}
//# sourceMappingURL=DeviceDescriptor.d.ts.map