feat: fully implement happy flow for persistant fingerprint generation

This commit is contained in:
zhom
2025-08-06 04:33:01 +04:00
parent ff35717cb5
commit b5b08a0196
20 changed files with 2531 additions and 1545 deletions
+161 -29
View File
@@ -71,41 +71,173 @@ export interface AppUpdateProgress {
}
export interface CamoufoxConfig {
os?: string[];
proxy?: string;
screen_max_width?: number;
screen_max_height?: number;
geoip?: string | boolean;
block_images?: boolean;
block_webrtc?: boolean;
block_webgl?: boolean;
disable_coop?: boolean;
geoip?: string | boolean;
country?: string;
executable_path?: string;
fingerprint?: string; // JSON string of the complete fingerprint config
}
// Extended interface for the advanced fingerprint configuration
export interface CamoufoxFingerprintConfig {
// Navigator properties
"navigator.userAgent"?: string;
"navigator.appVersion"?: string;
"navigator.platform"?: string;
"navigator.oscpu"?: string;
"navigator.appCodeName"?: string;
"navigator.appName"?: string;
"navigator.product"?: string;
"navigator.productSub"?: string;
"navigator.buildID"?: string;
"navigator.language"?: string;
"navigator.languages"?: string[];
"navigator.doNotTrack"?: string;
"navigator.hardwareConcurrency"?: number;
"navigator.maxTouchPoints"?: number;
"navigator.cookieEnabled"?: boolean;
"navigator.globalPrivacyControl"?: boolean;
"navigator.onLine"?: boolean;
// Screen properties
"screen.height"?: number;
"screen.width"?: number;
"screen.availHeight"?: number;
"screen.availWidth"?: number;
"screen.availTop"?: number;
"screen.availLeft"?: number;
"screen.colorDepth"?: number;
"screen.pixelDepth"?: number;
"screen.pageXOffset"?: number;
"screen.pageYOffset"?: number;
// Window properties
"window.outerHeight"?: number;
"window.outerWidth"?: number;
"window.innerHeight"?: number;
"window.innerWidth"?: number;
"window.screenX"?: number;
"window.screenY"?: number;
"window.scrollMinX"?: number;
"window.scrollMinY"?: number;
"window.scrollMaxX"?: number;
"window.scrollMaxY"?: number;
"window.devicePixelRatio"?: number;
"window.history.length"?: number;
// Document properties
"document.body.clientWidth"?: number;
"document.body.clientHeight"?: number;
"document.body.clientTop"?: number;
"document.body.clientLeft"?: number;
// Locale and geolocation
"locale:language"?: string;
"locale:region"?: string;
"locale:script"?: string;
"locale:all"?: string;
"geolocation:latitude"?: number;
"geolocation:longitude"?: number;
"geolocation:accuracy"?: number;
timezone?: string;
latitude?: number;
longitude?: number;
humanize?: boolean;
humanize_duration?: number;
headless?: boolean;
locale?: string[];
addons?: string[];
// Headers
"headers.Accept-Language"?: string;
"headers.User-Agent"?: string;
"headers.Accept-Encoding"?: string;
// WebRTC
"webrtc:ipv4"?: string;
"webrtc:ipv6"?: string;
"webrtc:localipv4"?: string;
"webrtc:localipv6"?: string;
// Battery
"battery:charging"?: boolean;
"battery:chargingTime"?: number;
"battery:dischargingTime"?: number;
"battery:level"?: number;
// Fonts
fonts?: string[];
custom_fonts_only?: boolean;
exclude_addons?: string[];
screen_min_width?: number;
screen_max_width?: number;
screen_min_height?: number;
screen_max_height?: number;
window_width?: number;
window_height?: number;
ff_version?: number;
main_world_eval?: boolean;
webgl_vendor?: string;
webgl_renderer?: string;
proxy?: string;
enable_cache?: boolean;
virtual_display?: string;
"fonts:spacing_seed"?: number;
// Audio
"AudioContext:sampleRate"?: number;
"AudioContext:outputLatency"?: number;
"AudioContext:maxChannelCount"?: number;
// Media devices
"mediaDevices:micros"?: number;
"mediaDevices:webcams"?: number;
"mediaDevices:speakers"?: number;
"mediaDevices:enabled"?: boolean;
// WebGL
"webGl:renderer"?: string;
"webGl:vendor"?: string;
"webGl:supportedExtensions"?: string[];
"webGl2:supportedExtensions"?: string[];
"webGl:contextAttributes"?: {
alpha?: boolean;
antialias?: boolean;
depth?: boolean;
failIfMajorPerformanceCaveat?: boolean;
powerPreference?: string;
premultipliedAlpha?: boolean;
preserveDrawingBuffer?: boolean;
stencil?: boolean;
};
"webGl2:contextAttributes"?: {
alpha?: boolean;
antialias?: boolean;
depth?: boolean;
failIfMajorPerformanceCaveat?: boolean;
powerPreference?: string;
premultipliedAlpha?: boolean;
preserveDrawingBuffer?: boolean;
stencil?: boolean;
};
"webGl:parameters"?: Record<string, unknown>;
"webGl2:parameters"?: Record<string, unknown>;
"webGl:shaderPrecisionFormats"?: Record<string, unknown>;
"webGl2:shaderPrecisionFormats"?: Record<string, unknown>;
// Canvas
"canvas:aaOffset"?: number;
"canvas:aaCapOffset"?: boolean;
// Voices
voices?: Array<{
isLocalService?: boolean;
isDefault?: boolean;
voiceURI?: string;
name?: string;
lang?: string;
}>;
"voices:blockIfNotDefined"?: boolean;
"voices:fakeCompletion"?: boolean;
"voices:fakeCompletion:charsPerSecond"?: number;
// Other properties
humanize?: boolean;
"humanize:maxTime"?: number;
"humanize:minTime"?: number;
showcursor?: boolean;
allowMainWorld?: boolean;
forceScopeAccess?: boolean;
enableRemoteSubframes?: boolean;
disableTheming?: boolean;
memorysaver?: boolean;
addons?: string[];
certificatePaths?: string[];
certificates?: string[];
debug?: boolean;
additional_args?: string[];
env_vars?: Record<string, string>;
firefox_prefs?: Record<string, unknown>;
pdfViewerEnabled?: boolean;
}
export interface CamoufoxLaunchResult {