import fs from "fs"; import path, { dirname } from "path"; import { fileURLToPath } from "url"; const SCRIPTS_DIR = path.join(dirname(fileURLToPath(import.meta.url))); export const loadScript = (scriptName: string): string => { const scriptPath = path.join(SCRIPTS_DIR, scriptName); return fs.readFileSync(scriptPath, "utf-8"); }; const FIXED_VERSION = "WebGL 1.0 (OpenGL ES 2.0 Chromium)"; const FIXED_SHADING_LANGUAGE_VERSION = "WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)"; export const loadFingerprintScript = ({ fixedVendor, fixedRenderer, fixedHardwareConcurrency, fixedDeviceMemory, fixedPlatform, fixedVersion = FIXED_VERSION, fixedShadingLanguageVersion = FIXED_SHADING_LANGUAGE_VERSION, fixedArchitecture, fixedBitness, fixedModel, fixedPlatformVersion, fixedUaFullVersion, fixedBrands, }: { fixedVendor: string | undefined; fixedRenderer: string | undefined; fixedHardwareConcurrency: number; fixedDeviceMemory: number; fixedVersion?: string; fixedShadingLanguageVersion?: string; fixedPlatform?: string; fixedArchitecture?: string; fixedBitness?: string; fixedModel?: string; fixedPlatformVersion?: string; fixedUaFullVersion?: string; fixedBrands: Array<{ brand: string; version: string }>; }): string => { const fingerprintScript = loadScript("fingerprint.js"); const safeStringValue = (value: string | undefined, fallback: string): string => { return JSON.stringify(value || fallback); }; return ` const FIXED_VENDOR = ${safeStringValue(fixedVendor, "Google Inc.")}; const FIXED_RENDERER = ${safeStringValue( fixedRenderer, "ANGLE (Intel, Mesa Intel(R) UHD Graphics 620 (KBL GT2), OpenGL 4.6)", )}; const FIXED_VERSION = ${safeStringValue(fixedVersion, "WebGL 1.0 (OpenGL ES 2.0 Chromium)")}; const FIXED_SHADING_LANGUAGE_VERSION = ${safeStringValue( fixedShadingLanguageVersion, "WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)", )}; const FIXED_HARDWARE_CONCURRENCY = ${fixedHardwareConcurrency}; const FIXED_DEVICE_MEMORY = ${fixedDeviceMemory}; const FIXED_PLATFORM = ${safeStringValue(fixedPlatform, "Linux x86_64")}; const FIXED_ARCHITECTURE = ${safeStringValue(fixedArchitecture, "x86")}; const FIXED_BITNESS = ${safeStringValue(fixedBitness, "64")}; const FIXED_MODEL = ${safeStringValue(fixedModel, "")}; const FIXED_PLATFORM_VERSION = ${safeStringValue(fixedPlatformVersion, "15.0.0")}; const FIXED_UA_FULL_VERSION = ${safeStringValue(fixedUaFullVersion, "131.0.6778.86")}; const FIXED_BRANDS = ${JSON.stringify(fixedBrands)}; ${fingerprintScript} `; };