@zaplier/sdk 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +27 -24
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +27 -24
- package/dist/index.esm.js.map +1 -1
- package/dist/sdk.js +27 -24
- package/dist/sdk.js.map +1 -1
- package/dist/sdk.min.js +1 -1
- package/dist/src/modules/fingerprint.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/modules/fingerprint/hashing.ts","../../src/modules/fingerprint/audio.ts","../../src/utils/browser.ts","../../src/modules/fingerprint/browser.ts","../../src/modules/fingerprint/canvas.ts","../../src/modules/fingerprint/fonts.ts","../../src/modules/fingerprint/screen.ts","../../src/utils/webgl-cache.ts","../../src/modules/fingerprint/webgl.ts","../../src/modules/fingerprint/accessibility.ts","../../src/modules/fingerprint/datetime-locale.ts","../../src/modules/fingerprint/font-preferences.ts","../../src/modules/fingerprint/fonts-enhanced.ts","../../src/modules/fingerprint/math-enhanced.ts","../../src/modules/fingerprint.ts","../../src/modules/anti-adblock.ts","../../src/modules/heatmap.ts","../../src/modules/session-replay.ts","../../src/sdk.ts","../../src/modules/global-interface.ts","../../src/modules/bot-detection.ts","../../src/modules/incognito-detection.ts","../../src/modules/user-agent.ts","../../src/modules/fingerprint/incognito.ts","../../src/modules/fingerprint/hardware.ts","../../src/modules/fingerprint/system.ts","../../src/modules/fingerprint/storage.ts","../../src/modules/fingerprint/math.ts","../../src/modules/fingerprint/dom-blockers.ts","../../src/modules/fingerprint/browser-apis.ts","../../src/modules/fingerprint/plugins-enhanced.ts","../../src/modules/fingerprint/confidence.ts","../../src/modules/fingerprint/device-signals.ts"],"sourcesContent":["/**\n * MurmurHash3 x64 Implementation\n * Based on FingerprintJS hashing utility for consistent fingerprint generation\n *\n * Provides 128-bit hash output using the x64 variant of MurmurHash3\n */\n\n/**\n * 64-bit number representation [high, low]\n */\ntype x64Hash = [number, number];\n\n/**\n * Adds two 64-bit numbers\n */\nfunction x64Add(a: x64Hash, b: x64Hash): x64Hash {\n const low = (a[1] + b[1]) & 0xffffffff;\n const high = (a[0] + b[0] + (low < a[1] ? 1 : 0)) & 0xffffffff;\n return [high, low];\n}\n\n/**\n * Multiplies two 64-bit numbers\n */\nfunction x64Multiply(a: x64Hash, b: x64Hash): x64Hash {\n const al = a[1] & 0xffff;\n const ah = a[1] >>> 16;\n const bl = b[1] & 0xffff;\n const bh = b[1] >>> 16;\n\n const rl = al * bl;\n const rm = (al * bh + ah * bl) & 0xffffffff;\n const rh = ah * bh + (rm >>> 16);\n\n const low = (rl + ((rm & 0xffff) << 16)) & 0xffffffff;\n const high = (a[0] * b[1] + a[1] * b[0] + rh) & 0xffffffff;\n\n return [high, low];\n}\n\n/**\n * Rotates a 64-bit number left by the specified number of bits\n */\nfunction x64Rotl(value: x64Hash, shift: number): x64Hash {\n shift %= 64;\n\n if (shift === 0) return value;\n if (shift < 32) {\n const high = (value[0] << shift) | (value[1] >>> (32 - shift));\n const low = (value[1] << shift) | (value[0] >>> (32 - shift));\n return [high & 0xffffffff, low & 0xffffffff];\n } else {\n shift -= 32;\n const high = (value[1] << shift) | (value[0] >>> (32 - shift));\n const low = (value[0] << shift) | (value[1] >>> (32 - shift));\n return [high & 0xffffffff, low & 0xffffffff];\n }\n}\n\n/**\n * XORs two 64-bit numbers\n */\nfunction x64Xor(a: x64Hash, b: x64Hash): x64Hash {\n return [a[0] ^ b[0], a[1] ^ b[1]];\n}\n\n/**\n * Finalizes a 64-bit hash value\n */\nfunction x64Fmix(hash: x64Hash): x64Hash {\n let h = hash;\n\n h = x64Xor(h, [0, h[0] >>> 1]);\n h = x64Multiply(h, [0xff51afd7, 0xed558ccd]);\n h = x64Xor(h, [0, h[0] >>> 1]);\n h = x64Multiply(h, [0xc4ceb9fe, 0x1a85ec53]);\n h = x64Xor(h, [0, h[0] >>> 1]);\n\n return h;\n}\n\n/**\n * Converts a string to array of 32-bit integers (little-endian)\n */\nfunction stringToUint32Array(str: string): number[] {\n const arr: number[] = [];\n for (let i = 0; i < str.length; i += 4) {\n let value = 0;\n for (let j = Math.min(3, str.length - i - 1); j >= 0; j--) {\n value = (value << 8) | str.charCodeAt(i + j);\n }\n arr.push(value);\n }\n return arr;\n}\n\n/**\n * MurmurHash3 x64 128-bit hash function\n * Returns a 128-bit hash as a hex string\n */\nexport function x64hash128(input: string, seed: number = 0): string {\n const data = stringToUint32Array(input);\n const nblocks = Math.floor(data.length / 4);\n\n let h1: x64Hash = [0, seed];\n let h2: x64Hash = [0, seed];\n\n const c1: x64Hash = [0x87c37b91, 0x114253d5];\n const c2: x64Hash = [0x4cf5ad43, 0x2745937f];\n\n // Process 16-byte blocks\n for (let i = 0; i < nblocks; i++) {\n const k1Index = i * 4;\n const k2Index = i * 4 + 2;\n\n let k1: x64Hash = [data[k1Index + 1] || 0, data[k1Index] || 0];\n let k2: x64Hash = [data[k2Index + 1] || 0, data[k2Index] || 0];\n\n k1 = x64Multiply(k1, c1);\n k1 = x64Rotl(k1, 31);\n k1 = x64Multiply(k1, c2);\n h1 = x64Xor(h1, k1);\n\n h1 = x64Rotl(h1, 27);\n h1 = x64Add(h1, h2);\n h1 = x64Add(x64Multiply(h1, [0, 5]), [0, 0x52dce729]);\n\n k2 = x64Multiply(k2, c2);\n k2 = x64Rotl(k2, 33);\n k2 = x64Multiply(k2, c1);\n h2 = x64Xor(h2, k2);\n\n h2 = x64Rotl(h2, 31);\n h2 = x64Add(h2, h1);\n h2 = x64Add(x64Multiply(h2, [0, 5]), [0, 0x38495ab5]);\n }\n\n // Process remaining bytes\n const tailIndex = nblocks * 4;\n const remainingBytes = data.length - tailIndex;\n\n let k1: x64Hash = [0, 0];\n let k2: x64Hash = [0, 0];\n\n if (remainingBytes >= 12) {\n k2 = x64Xor(k2, [data[tailIndex + 3] || 0, 0]);\n }\n if (remainingBytes >= 8) {\n k2 = x64Xor(k2, [0, data[tailIndex + 2] || 0]);\n k2 = x64Multiply(k2, c2);\n k2 = x64Rotl(k2, 33);\n k2 = x64Multiply(k2, c1);\n h2 = x64Xor(h2, k2);\n }\n if (remainingBytes >= 4) {\n k1 = x64Xor(k1, [data[tailIndex + 1] || 0, 0]);\n }\n if (remainingBytes >= 1) {\n k1 = x64Xor(k1, [0, data[tailIndex] || 0]);\n k1 = x64Multiply(k1, c1);\n k1 = x64Rotl(k1, 31);\n k1 = x64Multiply(k1, c2);\n h1 = x64Xor(h1, k1);\n }\n\n // Finalization\n h1 = x64Xor(h1, [0, input.length]);\n h2 = x64Xor(h2, [0, input.length]);\n\n h1 = x64Add(h1, h2);\n h2 = x64Add(h2, h1);\n\n h1 = x64Fmix(h1);\n h2 = x64Fmix(h2);\n\n h1 = x64Add(h1, h2);\n h2 = x64Add(h2, h1);\n\n // Convert to hex string\n // CRITICAL: Use >>> 0 to convert to unsigned 32-bit integer before converting to hex\n // This prevents negative numbers from generating hashes with minus signs (e.g., \"-6b43973f\")\n const hex1 =\n (h1[0] >>> 0).toString(16).padStart(8, \"0\") +\n (h1[1] >>> 0).toString(16).padStart(8, \"0\");\n const hex2 =\n (h2[0] >>> 0).toString(16).padStart(8, \"0\") +\n (h2[1] >>> 0).toString(16).padStart(8, \"0\");\n\n return hex1 + hex2;\n}\n\n/**\n * Simple 32-bit hash for basic use cases\n */\nexport function hash32(input: string): string {\n let hash = 0;\n if (input.length === 0) return hash.toString(36);\n\n for (let i = 0; i < input.length; i++) {\n const char = input.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n\n return Math.abs(hash).toString(36);\n}\n\n/**\n * Hash fingerprint components into a stable identifier\n */\nexport function hashFingerprint(\n components: Record<string, any>,\n debug: boolean = false\n): string {\n // Convert components to canonical string representation using deep sorting\n // CRITICAL: Do NOT use JSON.stringify(obj, keys) as it filters out nested properties!\n // Use canonicalizeStable instead which handles deep sorting and normalization.\n const canonicalized = canonicalizeStable(components);\n const canonical = JSON.stringify(canonicalized);\n\n if (debug) {\n console.log(\"[RabbitTracker] hashFingerprint debug:\", {\n originalKeys: Object.keys(components),\n canonicalizedKeys: Object.keys(canonicalized),\n canonicalLength: canonical.length,\n sample: canonical.substring(0, 200) + \"...\",\n });\n }\n\n // Use MurmurHash3 x64 for consistent hashing\n const hash = x64hash128(canonical);\n\n if (debug) {\n console.log(\n \"[RabbitTracker] Generated fingerprintHash:\",\n hash.substring(0, 32)\n );\n }\n\n return hash;\n}\n\n/**\n * Generate a visitor ID from fingerprint hash\n */\nexport function generateVisitorId(fingerprintHash: string): string {\n // Use first 16 characters of the hash for visitor ID\n return \"vis_\" + fingerprintHash.substring(0, 16);\n}\n\n/**\n * Check if a key represents an unstable component that should be excluded from hashing\n */\nfunction isUnstableKey(key: string): boolean {\n // Unstable keys that change between requests:\n // - duration: collection time varies\n // - timestamp: changes every request\n // - error: error messages can vary\n // - errors: error arrays can vary\n // - collectionTime: varies per request\n const unstableKeys = [\n \"duration\",\n \"timestamp\",\n \"error\",\n \"errors\",\n \"collectionTime\",\n \"startTime\",\n \"endTime\",\n \"_timestamp\", // internal timestamp fields\n ];\n\n return (\n unstableKeys.includes(key) ||\n key.endsWith(\"_timestamp\") ||\n key.endsWith(\"Timestamp\")\n );\n}\n\n/**\n * Canonicalize an object deeply with sorted keys and normalized primitives\n * CRITICAL: Filters out unstable components that vary between requests\n */\nfunction canonicalizeStable(input: any): any {\n if (input === null || input === undefined) return null;\n if (Array.isArray(input)) {\n return input\n .map((v) => canonicalizeStable(v))\n .filter((v) => v !== null)\n .sort((a, b) => JSON.stringify(a).localeCompare(JSON.stringify(b)));\n }\n if (typeof input === \"object\") {\n const keys = Object.keys(input).sort();\n const out: Record<string, any> = {};\n for (const k of keys) {\n // CRITICAL: Skip unstable keys that cause hash instability\n if (isUnstableKey(k)) {\n continue;\n }\n\n const v = canonicalizeStable(input[k]);\n if (v !== null) out[k] = v;\n }\n return out;\n }\n if (typeof input === \"number\") {\n // Enhanced floating point normalization for maximum stability\n if (!Number.isFinite(input)) return 0;\n \n // Handle very small numbers (round to 0)\n if (Math.abs(input) < 0.0001) return 0;\n \n // Handle very large numbers (clamp to reasonable range)\n if (Math.abs(input) > 1000000) {\n return input > 0 ? 1000000 : -1000000;\n }\n \n // For screen ratios and similar values, use more precision\n if (input >= 0.1 && input <= 10) {\n return Number(input.toFixed(3));\n }\n \n // For other numbers, use 2 decimal places\n return Number(input.toFixed(2));\n }\n if (typeof input === \"string\") {\n return input.trim().toLowerCase();\n }\n if (typeof input === \"boolean\") return input;\n return null;\n}\n\n/**\n * Compute stable core hash from a minimal, invariant vector\n */\nexport function hashStableCore(\n coreVector: Record<string, any>,\n debug: boolean = false\n): string {\n const canonicalized = canonicalizeStable(coreVector);\n const canonical = JSON.stringify(canonicalized);\n\n if (debug) {\n console.log(\"[RabbitTracker] hashStableCore debug:\", {\n originalKeys: Object.keys(coreVector),\n canonicalizedKeys: Object.keys(canonicalized),\n canonicalLength: canonical.length,\n sample: canonical.substring(0, 200) + \"...\",\n });\n }\n\n const hash = x64hash128(canonical);\n\n if (debug) {\n console.log(\n \"[RabbitTracker] Generated stableCoreHash:\",\n hash.substring(0, 32)\n );\n }\n\n return hash;\n}\n","/**\n * Audio Fingerprinting\n * Based on FingerprintJS audio component using AudioContext\n */\n\nimport type {\n AudioFingerprint,\n FingerprintComponent,\n} from \"../../types/fingerprint\";\nimport { hash32 } from \"./hashing\";\n\n/**\n * Enhanced audio configuration for maximum differentiation\n */\nconst AUDIO_CONFIG = {\n SAMPLE_RATE: 44100,\n DURATION: 0.1, // 100ms\n FREQUENCIES: [440, 1000, 1760, 3520], // Multiple frequencies for better differentiation\n COMPRESSOR_THRESHOLD: -50,\n COMPRESSOR_KNEE: 40,\n COMPRESSOR_RATIO: 12,\n COMPRESSOR_ATTACK: 0.003,\n COMPRESSOR_RELEASE: 0.25,\n // NEW: Additional audio processing parameters\n FILTER_FREQUENCY: 2000,\n GAIN_VALUE: 0.5,\n DELAY_TIME: 0.02,\n} as const;\n\n/**\n * Create offline audio context (doesn't require user gesture)\n * OfflineAudioContext is perfect for fingerprinting - no audio output needed\n */\nfunction createOfflineAudioContext(): OfflineAudioContext | null {\n try {\n const OfflineAudioContextClass =\n window.OfflineAudioContext || (window as any).webkitOfflineAudioContext;\n if (!OfflineAudioContextClass) return null;\n\n // Use standard sample rate (most browsers support 44100)\n const sampleRate = 44100;\n const duration = AUDIO_CONFIG.DURATION;\n const frameCount = Math.floor(sampleRate * duration);\n\n return new OfflineAudioContextClass(1, frameCount, sampleRate);\n } catch {\n return null;\n }\n}\n\n/**\n * Get sample rate (for metadata only)\n * Uses OfflineAudioContext if available (no user gesture needed)\n * Falls back to 44100 if context creation fails\n */\nfunction getDefaultSampleRate(): number {\n try {\n // Try OfflineAudioContext first (no user gesture needed)\n const OfflineAudioContextClass =\n window.OfflineAudioContext || (window as any).webkitOfflineAudioContext;\n if (OfflineAudioContextClass) {\n try {\n const testContext = new OfflineAudioContextClass(1, 1, 44100);\n const sampleRate = testContext.sampleRate;\n return sampleRate;\n } catch {\n // Fall through to default\n }\n }\n\n // Fallback: try regular AudioContext (may fail due to autoplay policy)\n const AudioContextClass =\n window.AudioContext || (window as any).webkitAudioContext;\n if (AudioContextClass) {\n try {\n const testContext = new AudioContextClass();\n const sampleRate = testContext.sampleRate;\n // Close immediately to free resources\n testContext.close().catch(() => {});\n return sampleRate;\n } catch {\n // AudioContext creation failed (likely due to autoplay policy)\n // This is fine, we'll use default\n }\n }\n } catch {\n // Any error, use default\n }\n\n return 44100; // Default fallback (standard sample rate)\n}\n\n/**\n * Generate advanced multiple oscillator fingerprint for maximum DAC/hardware differentiation\n */\nasync function generateMultiOscillatorFingerprint(\n offlineContext: OfflineAudioContext\n): Promise<string> {\n try {\n // Create multiple oscillators with different waveforms and frequencies\n const oscillators = AUDIO_CONFIG.FREQUENCIES.map((freq, index) => {\n const osc = offlineContext.createOscillator();\n const waveforms: OscillatorType[] = ['sine', 'square', 'sawtooth', 'triangle'];\n const waveformIndex = index % waveforms.length;\n const selectedWaveform = waveforms[waveformIndex];\n // Type guard to ensure we have a valid waveform\n if (selectedWaveform) {\n osc.type = selectedWaveform;\n } else {\n osc.type = 'sine'; // Fallback to sine wave\n }\n osc.frequency.setValueAtTime(freq, offlineContext.currentTime);\n return osc;\n });\n\n // Create advanced audio processing chain\n const compressor = offlineContext.createDynamicsCompressor();\n const biquadFilter = offlineContext.createBiquadFilter();\n const gainNode = offlineContext.createGain();\n const delayNode = offlineContext.createDelay();\n const analyserNode = offlineContext.createAnalyser();\n\n // Configure compressor with specific settings\n compressor.threshold.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_THRESHOLD, offlineContext.currentTime);\n compressor.knee.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_KNEE, offlineContext.currentTime);\n compressor.ratio.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_RATIO, offlineContext.currentTime);\n compressor.attack.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_ATTACK, offlineContext.currentTime);\n compressor.release.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_RELEASE, offlineContext.currentTime);\n\n // Configure biquad filter for frequency response differences\n biquadFilter.type = 'bandpass';\n biquadFilter.frequency.setValueAtTime(AUDIO_CONFIG.FILTER_FREQUENCY, offlineContext.currentTime);\n biquadFilter.Q.setValueAtTime(0.7, offlineContext.currentTime);\n\n // Configure gain node\n gainNode.gain.setValueAtTime(AUDIO_CONFIG.GAIN_VALUE, offlineContext.currentTime);\n\n // Configure delay node for additional processing\n delayNode.delayTime.setValueAtTime(AUDIO_CONFIG.DELAY_TIME, offlineContext.currentTime);\n\n // Create a mixer node to combine oscillators\n const mixerGain = offlineContext.createGain();\n mixerGain.gain.setValueAtTime(0.25, offlineContext.currentTime); // Reduce volume when mixing\n\n // Connect oscillators to mixer\n oscillators.forEach(osc => {\n osc.connect(mixerGain);\n });\n\n // Create complex audio processing chain:\n // Mixed Oscillators -> Filter -> Compressor -> Gain -> Delay -> Analyser -> Destination\n mixerGain.connect(biquadFilter);\n biquadFilter.connect(compressor);\n compressor.connect(gainNode);\n gainNode.connect(delayNode);\n delayNode.connect(analyserNode);\n analyserNode.connect(offlineContext.destination);\n\n // Start all oscillators\n oscillators.forEach((osc, index) => {\n osc.start(index * 0.01); // Slightly staggered start times\n osc.stop(AUDIO_CONFIG.DURATION);\n });\n\n const buffer = await offlineContext.startRendering();\n const channelData = buffer.getChannelData(0);\n\n // Enhanced sampling for better differentiation\n const samplePoints = [];\n for (let i = 0; i < 32; i++) {\n const index = Math.floor((channelData.length / 32) * i);\n samplePoints.push(channelData[index] || 0);\n }\n\n // Calculate additional characteristics\n const rms = Math.sqrt(samplePoints.reduce((sum, val) => sum + val * val, 0) / samplePoints.length);\n const maxAmplitude = Math.max(...samplePoints.map(Math.abs));\n const averageAmplitude = samplePoints.reduce((sum, val) => sum + Math.abs(val), 0) / samplePoints.length;\n\n // Frequency domain analysis\n let spectralCentroid = 0;\n for (let i = 0; i < Math.min(samplePoints.length, 16); i++) {\n const sample = samplePoints[i];\n if (sample !== undefined) {\n spectralCentroid += i * Math.abs(sample);\n }\n }\n\n const characteristics = [\n ...samplePoints,\n rms,\n maxAmplitude,\n averageAmplitude,\n spectralCentroid\n ];\n\n return hash32(characteristics.join(\",\"));\n } catch (error) {\n return hash32(\"multi_oscillator_error\");\n }\n}\n\n/**\n * Generate frequency response fingerprint to detect DAC characteristics\n */\nasync function generateFrequencyResponseFingerprint(\n offlineContext: OfflineAudioContext\n): Promise<string> {\n try {\n // Test multiple frequencies to detect DAC/audio hardware frequency response\n const testFrequencies = [100, 440, 1000, 2000, 4000, 8000, 12000, 16000];\n const responses: number[] = [];\n\n for (const frequency of testFrequencies) {\n const osc = offlineContext.createOscillator();\n const analyser = offlineContext.createAnalyser();\n \n osc.type = 'sine';\n osc.frequency.setValueAtTime(frequency, offlineContext.currentTime);\n \n // Configure analyser for frequency analysis\n analyser.fftSize = 256;\n analyser.smoothingTimeConstant = 0;\n \n osc.connect(analyser);\n analyser.connect(offlineContext.destination);\n \n osc.start();\n osc.stop(0.05); // Short test for each frequency\n \n // Create a new offline context for each frequency test\n const testContext = createOfflineAudioContext();\n if (testContext) {\n const testOsc = testContext.createOscillator();\n testOsc.type = 'sine';\n testOsc.frequency.setValueAtTime(frequency, testContext.currentTime);\n testOsc.connect(testContext.destination);\n testOsc.start();\n testOsc.stop(0.05);\n \n try {\n const testBuffer = await testContext.startRendering();\n const testData = testBuffer.getChannelData(0);\n \n // Calculate RMS for this frequency\n const rms = Math.sqrt(testData.reduce((sum, val) => sum + val * val, 0) / testData.length);\n responses.push(rms);\n } catch {\n responses.push(0);\n }\n }\n }\n\n return hash32(responses.join(\",\"));\n } catch (error) {\n return hash32(\"frequency_response_error\");\n }\n}\n\n/**\n * Generate compressor fingerprint using OfflineAudioContext (no user gesture required)\n */\nasync function generateCompressorFingerprint(\n offlineContext: OfflineAudioContext\n): Promise<string> {\n try {\n const offlineOscillator = offlineContext.createOscillator();\n const offlineCompressor = offlineContext.createDynamicsCompressor();\n\n // Configure nodes\n offlineOscillator.type = \"triangle\";\n offlineOscillator.frequency.setValueAtTime(\n AUDIO_CONFIG.FREQUENCIES[0], // Use first frequency from the array\n offlineContext.currentTime\n );\n\n offlineCompressor.threshold.setValueAtTime(\n AUDIO_CONFIG.COMPRESSOR_THRESHOLD,\n offlineContext.currentTime\n );\n offlineCompressor.knee.setValueAtTime(\n AUDIO_CONFIG.COMPRESSOR_KNEE,\n offlineContext.currentTime\n );\n offlineCompressor.ratio.setValueAtTime(\n AUDIO_CONFIG.COMPRESSOR_RATIO,\n offlineContext.currentTime\n );\n offlineCompressor.attack.setValueAtTime(\n AUDIO_CONFIG.COMPRESSOR_ATTACK,\n offlineContext.currentTime\n );\n offlineCompressor.release.setValueAtTime(\n AUDIO_CONFIG.COMPRESSOR_RELEASE,\n offlineContext.currentTime\n );\n\n // Connect and render (no audible output, no user gesture needed)\n offlineOscillator.connect(offlineCompressor);\n offlineCompressor.connect(offlineContext.destination);\n\n offlineOscillator.start();\n offlineOscillator.stop(AUDIO_CONFIG.DURATION);\n\n const renderedBuffer = await offlineContext.startRendering();\n const channelData = renderedBuffer.getChannelData(0);\n\n // Create fingerprint from specific samples\n const fingerprintSamples = [\n channelData[0] || 0,\n channelData[Math.floor(channelData.length * 0.25)] || 0,\n channelData[Math.floor(channelData.length * 0.5)] || 0,\n channelData[Math.floor(channelData.length * 0.75)] || 0,\n channelData[channelData.length - 1] || 0,\n ];\n\n return hash32(fingerprintSamples.join(\",\"));\n } catch (error) {\n // Fallback if OfflineAudioContext fails\n return hash32(\"compressor_error\");\n }\n}\n\n/**\n * Get detailed audio context characteristics\n */\nfunction getAudioContextCharacteristics(): Record<string, any> {\n const characteristics: Record<string, any> = {};\n \n try {\n // Try to get characteristics from OfflineAudioContext\n const testContext = createOfflineAudioContext();\n if (testContext) {\n characteristics.sampleRate = testContext.sampleRate;\n characteristics.length = testContext.length;\n characteristics.state = testContext.state;\n \n // Test supported sample rates\n const supportedRates = [];\n const testRates = [8000, 22050, 44100, 48000, 96000];\n \n for (const rate of testRates) {\n try {\n const testCtx = new (window.OfflineAudioContext || (window as any).webkitOfflineAudioContext)(1, 1, rate);\n if (testCtx.sampleRate === rate) {\n supportedRates.push(rate);\n }\n // OfflineAudioContext doesn't have close method - it's automatically disposed after rendering\n if ('close' in testCtx && typeof (testCtx as any).close === 'function') {\n (testCtx as any).close();\n }\n } catch {\n // Rate not supported\n }\n }\n \n characteristics.supportedSampleRates = supportedRates;\n \n // Test base latency (if available)\n if ('baseLatency' in testContext) {\n characteristics.baseLatency = (testContext as any).baseLatency;\n }\n \n // OfflineAudioContext doesn't have close method - it's automatically disposed after rendering\n if ('close' in testContext && typeof (testContext as any).close === 'function') {\n (testContext as any).close();\n }\n }\n } catch (error) {\n characteristics.error = 'context_characteristics_error';\n }\n \n return characteristics;\n}\n\n/**\n * Generate enhanced audio fingerprint with multiple analysis methods\n */\nexport async function getAudioFingerprint(): Promise<\n FingerprintComponent<AudioFingerprint>\n> {\n const startTime = performance.now();\n\n try {\n // Get sample rate and context characteristics\n const sampleRate = getDefaultSampleRate();\n const contextCharacteristics = getAudioContextCharacteristics();\n\n // Create multiple offline contexts for different analysis methods\n const contexts = {\n multiOsc: createOfflineAudioContext(),\n compressor: createOfflineAudioContext(),\n frequencyResponse: createOfflineAudioContext(),\n };\n\n // Verify all contexts are available\n if (!contexts.multiOsc || !contexts.compressor || !contexts.frequencyResponse) {\n throw new Error(\"OfflineAudioContext not available\");\n }\n\n // Generate multiple fingerprints in parallel for enhanced differentiation\n const [\n multiOscillatorHash,\n compressorHash,\n frequencyResponseHash\n ] = await Promise.all([\n generateMultiOscillatorFingerprint(contexts.multiOsc).catch(() => \"multi_oscillator_error\"),\n generateCompressorFingerprint(contexts.compressor).catch(() => \"compressor_error\"),\n generateFrequencyResponseFingerprint(contexts.frequencyResponse).catch(() => \"frequency_response_error\"),\n ]);\n\n // Test audio node creation capabilities\n const nodeCapabilities: Record<string, boolean> = {};\n try {\n const testContext = createOfflineAudioContext();\n if (testContext) {\n const nodeTypes = [\n 'createOscillator',\n 'createAnalyser',\n 'createBiquadFilter',\n 'createConvolver',\n 'createDelay',\n 'createDynamicsCompressor',\n 'createGain',\n 'createWaveShaper',\n 'createStereoPanner',\n 'createChannelSplitter',\n 'createChannelMerger'\n ];\n\n for (const nodeType of nodeTypes) {\n try {\n if (typeof (testContext as any)[nodeType] === 'function') {\n (testContext as any)[nodeType]();\n nodeCapabilities[nodeType] = true;\n }\n } catch {\n nodeCapabilities[nodeType] = false;\n }\n }\n \n // OfflineAudioContext doesn't have close method - it's automatically disposed after rendering\n if ('close' in testContext && typeof (testContext as any).close === 'function') {\n (testContext as any).close();\n }\n }\n } catch {\n // Node capability testing failed\n }\n\n // Calculate audio stack fingerprint\n const audioStackComponents = [\n multiOscillatorHash,\n compressorHash,\n frequencyResponseHash,\n sampleRate.toString(),\n JSON.stringify(contextCharacteristics),\n JSON.stringify(nodeCapabilities)\n ];\n\n const audioStackHash = hash32(audioStackComponents.join(\"|\"));\n\n const endTime = performance.now();\n\n const result: AudioFingerprint = {\n // Legacy fields for compatibility\n oscillator: multiOscillatorHash,\n compressor: compressorHash,\n sampleRate: sampleRate,\n maxChannelCount: contextCharacteristics.supportedSampleRates?.length || 2,\n \n // NEW: Enhanced audio analysis\n multiOscillatorFingerprint: multiOscillatorHash,\n frequencyResponseFingerprint: frequencyResponseHash,\n contextCharacteristics: contextCharacteristics,\n nodeCapabilities: nodeCapabilities,\n audioStackHash: audioStackHash,\n supportedSampleRates: contextCharacteristics.supportedSampleRates || []\n };\n\n return {\n value: result,\n duration: endTime - startTime,\n };\n } catch (error) {\n return {\n value: {\n oscillator: \"error\",\n compressor: \"error\",\n sampleRate: 0,\n maxChannelCount: 0,\n multiOscillatorFingerprint: \"error\",\n frequencyResponseFingerprint: \"error\",\n contextCharacteristics: {},\n nodeCapabilities: {},\n audioStackHash: \"error\",\n supportedSampleRates: []\n },\n duration: performance.now() - startTime,\n error:\n error instanceof Error ? error.message : \"Audio fingerprinting failed\",\n };\n }\n}\n\n/**\n * Check if audio fingerprinting is available\n * Prefers OfflineAudioContext (no user gesture needed)\n */\nexport function isAudioAvailable(): boolean {\n try {\n // Check for OfflineAudioContext first (preferred for fingerprinting)\n const OfflineAudioContextClass =\n window.OfflineAudioContext || (window as any).webkitOfflineAudioContext;\n if (typeof OfflineAudioContextClass === \"function\") {\n return true;\n }\n\n // Fallback to regular AudioContext (but it requires user gesture)\n const AudioContextClass =\n window.AudioContext || (window as any).webkitAudioContext;\n return typeof AudioContextClass === \"function\";\n } catch {\n return false;\n }\n}\n","/**\n * Browser Detection Utilities\n * Based on FingerprintJS browser detection patterns\n * Uses feature detection instead of user-agent parsing for reliability\n */\n\n/**\n * Detects if the browser is WebKit-based (Safari, mobile Safari)\n */\nexport function isWebKit(): boolean {\n try {\n return (\n \"WebKitAppearance\" in document.documentElement.style ||\n \"webkitRequestFileSystem\" in window ||\n \"webkitResolveLocalFileSystemURL\" in window ||\n Boolean((window as any).safari)\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is running on Android\n */\nexport function isAndroid(): boolean {\n try {\n return (\n \"ontouchstart\" in window &&\n (\"orientation\" in window || \"onorientationchange\" in window) &&\n /android/i.test(navigator.userAgent)\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Brave\n * Brave masquerades as Chrome but has specific APIs\n */\nexport function isBrave(): boolean {\n try {\n // Brave has navigator.brave API (most reliable method)\n if (\"brave\" in navigator && (navigator as any).brave) {\n return true;\n }\n\n // Secondary check: Brave blocks certain APIs that Chrome doesn't\n // Brave has specific user agent string patterns (less reliable)\n const ua = navigator.userAgent;\n if (ua.includes(\"Brave\")) {\n return true;\n }\n\n // Brave detection through missing APIs that Chrome has\n if (\n (window as any).chrome &&\n (window as any).chrome.runtime &&\n !(window as any).chrome.webstore &&\n !(window as any).navigator.getBattery && // Brave removes some APIs for privacy\n /Chrome/.test(ua)\n ) {\n return true;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Arc\n * Arc browser is Chromium-based but has unique characteristics\n */\nexport function isArc(): boolean {\n try {\n const ua = navigator.userAgent;\n\n // Arc specific detection\n if (ua.includes(\"Arc/\")) {\n return true;\n }\n\n // Arc may have specific window properties\n if ((window as any).arc || (window as any).Arc) {\n return true;\n }\n\n // Arc modifies some Chrome APIs\n if (\n (window as any).chrome &&\n (window as any).chrome.runtime &&\n /Chrome/.test(ua) &&\n // Arc specific user agent patterns or missing features\n (ua.includes(\"ArcBrowser\") || window.location.protocol === \"arc:\")\n ) {\n return true;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Opera (modern Chromium-based)\n */\nexport function isOpera(): boolean {\n try {\n // Opera has specific properties\n if ((window as any).opr || (window as any).opera) {\n return true;\n }\n\n const ua = navigator.userAgent;\n if (ua.includes(\"OPR/\") || ua.includes(\"Opera/\")) {\n return true;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Vivaldi\n */\nexport function isVivaldi(): boolean {\n try {\n const ua = navigator.userAgent;\n if (ua.includes(\"Vivaldi/\")) {\n return true;\n }\n\n // Vivaldi has specific window properties\n if ((window as any).vivaldi) {\n return true;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Samsung Internet\n */\nexport function isSamsungInternet(): boolean {\n try {\n const ua = navigator.userAgent;\n return ua.includes(\"SamsungBrowser/\") || ua.includes(\"Samsung Internet\");\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Chrome/Chromium-based (pure Chrome, not derivatives)\n */\nexport function isChrome(): boolean {\n try {\n // First, exclude known Chromium derivatives\n if (\n isBrave() ||\n isArc() ||\n isOpera() ||\n isVivaldi() ||\n isEdge() ||\n isSamsungInternet()\n ) {\n return false;\n }\n\n return Boolean(\n (window as any).chrome &&\n ((window as any).chrome.webstore || (window as any).chrome.runtime) &&\n /Chrome/.test(navigator.userAgent) &&\n !/Edg|OPR|Opera|Vivaldi|SamsungBrowser|Arc|Brave/.test(\n navigator.userAgent\n )\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Firefox\n */\nexport function isFirefox(): boolean {\n try {\n return (\n \"InstallTrigger\" in window ||\n \"mozInnerScreenX\" in window ||\n \"mozPaintCount\" in window ||\n Boolean((navigator as any).mozApps)\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Edge (legacy or Chromium)\n */\nexport function isEdge(): boolean {\n try {\n return (\n \"msCredentials\" in navigator ||\n Boolean((window as any).StyleMedia) ||\n (isChrome() && /edg/i.test(navigator.userAgent))\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Safari (not just WebKit)\n */\nexport function isSafari(): boolean {\n try {\n return (\n isWebKit() &&\n !isChrome() &&\n !isEdge() &&\n Boolean((window as any).safari) &&\n /safari/i.test(navigator.userAgent)\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser supports specific APIs safely\n */\nexport function supportsAPI(apiName: string): boolean {\n try {\n const parts = apiName.split(\".\");\n let obj: any = window;\n\n for (const part of parts) {\n if (!(part in obj)) {\n return false;\n }\n obj = obj[part];\n }\n\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is in a secure context\n */\nexport function isSecureContext(): boolean {\n try {\n return window.isSecureContext || location.protocol === \"https:\";\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is likely in private/incognito mode\n * This is a best-effort detection and not 100% reliable\n */\nexport function isLikelyPrivateMode(): boolean {\n try {\n // Quick checks for obvious private mode indicators\n if (\"webkitTemporaryStorage\" in navigator) {\n return false; // Likely not private\n }\n\n // Check for reduced storage quotas (common in private mode)\n if (navigator.storage && navigator.storage.estimate) {\n navigator.storage.estimate().then((estimate) => {\n const quota = estimate.quota || 0;\n return quota < 1024 * 1024 * 100; // Less than 100MB likely indicates private mode\n });\n }\n\n return false; // Default to not private if we can't determine\n } catch {\n return false;\n }\n}\n\n/**\n * Gets the exact browser name with proper Chromium-based browser detection\n */\nexport function getBrowserName(): string {\n try {\n // Check specific Chromium-based browsers first (order matters!)\n if (isBrave()) return \"Brave\";\n if (isArc()) return \"Arc\";\n if (isOpera()) return \"Opera\";\n if (isVivaldi()) return \"Vivaldi\";\n if (isSamsungInternet()) return \"Samsung Internet\";\n if (isEdge()) return \"Edge\";\n\n // Check non-Chromium browsers\n if (isFirefox()) return \"Firefox\";\n if (isSafari()) return \"Safari\";\n\n // Finally check pure Chrome (after excluding derivatives)\n if (isChrome()) return \"Chrome\";\n\n // Fallback: try to parse from user agent\n const ua = navigator.userAgent;\n if (/Firefox/i.test(ua) && !isChrome()) return \"Firefox\";\n if (/Safari/i.test(ua) && !isChrome()) return \"Safari\";\n if (/Chrome/i.test(ua)) return \"Chrome\"; // Last resort fallback\n\n return \"Unknown\";\n } catch {\n return \"Unknown\";\n }\n}\n\n/**\n * Gets browser engine name for debugging\n */\nexport function getBrowserEngine(): string {\n if (\n isBrave() ||\n isArc() ||\n isOpera() ||\n isVivaldi() ||\n isSamsungInternet() ||\n isChrome()\n )\n return \"Blink\";\n if (isEdge()) return \"EdgeHTML/Blink\";\n if (isFirefox()) return \"Gecko\";\n if (isWebKit() || isSafari()) return \"WebKit\";\n return \"Unknown\";\n}\n\n/**\n * Gets detailed browser information with accurate Chromium-based detection\n */\nexport function getBrowserInfo(): {\n name: string;\n engine: string;\n isChromiumBased: boolean;\n family: string;\n} {\n const name = getBrowserName();\n const engine = getBrowserEngine();\n\n const chromiumBased = [\n \"Brave\",\n \"Arc\",\n \"Opera\",\n \"Vivaldi\",\n \"Samsung Internet\",\n \"Edge\",\n \"Chrome\",\n ].includes(name);\n\n // Browser family for fingerprinting stability\n let family = name.toLowerCase();\n if (chromiumBased && name !== \"Chrome\") {\n family = `${name.toLowerCase()}-chromium`; // e.g., \"brave-chromium\"\n }\n\n return {\n name,\n engine,\n isChromiumBased: chromiumBased,\n family,\n };\n}\n\n/**\n * Checks if the current environment supports DOM manipulation\n */\nexport function supportsDOMManipulation(): boolean {\n try {\n return (\n typeof document !== \"undefined\" &&\n typeof document.createElement === \"function\" &&\n typeof document.body !== \"undefined\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if the current environment supports media queries\n */\nexport function supportsMediaQueries(): boolean {\n try {\n return (\n typeof window !== \"undefined\" && typeof window.matchMedia === \"function\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if WebGL is likely to be available and stable\n */\nexport function supportsWebGL(): boolean {\n try {\n if (!supportsDOMManipulation()) return false;\n\n const canvas = document.createElement(\"canvas\");\n const gl =\n canvas.getContext(\"webgl\") || canvas.getContext(\"experimental-webgl\");\n\n if (!gl) return false;\n\n // Quick stability check\n const webglContext = gl as WebGLRenderingContext;\n const renderer = webglContext.getParameter(webglContext.RENDERER);\n const isSupported = Boolean(renderer && typeof renderer === \"string\");\n\n // Cleanup context to avoid \"Too many active WebGL contexts\" warning\n const ext = webglContext.getExtension(\"WEBGL_lose_context\");\n if (ext) {\n ext.loseContext();\n }\n\n return isSupported;\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if audio context is available and not suspended\n */\nexport function supportsAudioContext(): boolean {\n try {\n const AudioContext =\n window.AudioContext || (window as any).webkitAudioContext;\n if (!AudioContext) return false;\n\n // Don't create context here, just check availability\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Comprehensive browser capability check\n */\nexport interface BrowserCapabilities {\n engine: string;\n supportsDOM: boolean;\n supportsMediaQueries: boolean;\n supportsWebGL: boolean;\n supportsAudio: boolean;\n isSecure: boolean;\n isPrivateMode: boolean;\n canRunDOMBlockers: boolean;\n canRunAccessibility: boolean;\n canRunBrowserAPIs: boolean;\n}\n\nexport function getBrowserCapabilities(): BrowserCapabilities {\n const supportsDOM = supportsDOMManipulation();\n const supportsMedia = supportsMediaQueries();\n\n return {\n engine: getBrowserEngine(),\n supportsDOM,\n supportsMediaQueries: supportsMedia,\n supportsWebGL: supportsWebGL(),\n supportsAudio: supportsAudioContext(),\n isSecure: isSecureContext(),\n isPrivateMode: isLikelyPrivateMode(),\n // DOM blockers work best on WebKit and Android\n canRunDOMBlockers: (isWebKit() || isAndroid()) && supportsDOM,\n // Accessibility requires media queries\n canRunAccessibility: supportsMedia,\n // Browser APIs need secure context for many features\n canRunBrowserAPIs: supportsDOM && typeof navigator !== \"undefined\",\n };\n}\n","/**\n * Browser and System Information Fingerprinting\n * Based on FingerprintJS browser component with enhanced detection\n */\n\nimport type { FingerprintComponent, BrowserFingerprint } from '../../types/fingerprint';\nimport { getBrowserInfo } from '../../utils/browser';\n\n/**\n * Get touch support information\n */\nfunction getTouchSupport(): { maxTouchPoints: number; touchEvent: boolean; touchStart: boolean } {\n try {\n let maxTouchPoints = 0;\n let touchEvent = false;\n let touchStart = false;\n \n // Check maxTouchPoints\n if ('maxTouchPoints' in navigator) {\n maxTouchPoints = navigator.maxTouchPoints;\n } else if ('msMaxTouchPoints' in navigator) {\n maxTouchPoints = (navigator as any).msMaxTouchPoints;\n }\n \n // Check touch events\n try {\n touchEvent = 'TouchEvent' in window;\n } catch {\n touchEvent = 'ontouchstart' in window;\n }\n \n // Check touch start\n touchStart = 'ontouchstart' in window;\n \n return { maxTouchPoints, touchEvent, touchStart };\n } catch {\n return { maxTouchPoints: 0, touchEvent: false, touchStart: false };\n }\n}\n\n/**\n * Get plugin information (mostly for legacy browser detection)\n */\nfunction getPluginInfo(): { length: number; names: string[] } {\n try {\n if (!navigator.plugins) {\n return { length: 0, names: [] };\n }\n \n const plugins = Array.from(navigator.plugins);\n const names = plugins\n .map(plugin => plugin.name)\n .filter(name => name)\n .sort();\n \n return {\n length: navigator.plugins.length,\n names: names.slice(0, 10) // Limit to first 10 to avoid huge fingerprints\n };\n } catch {\n return { length: 0, names: [] };\n }\n}\n\n/**\n * Get language and locale information\n */\nfunction getLanguageInfo(): { language: string; languages: string[] } {\n try {\n const language = navigator.language || '';\n let languages: string[] = [];\n \n if (navigator.languages) {\n languages = Array.from(navigator.languages);\n } else if (navigator.language) {\n languages = [navigator.language];\n }\n \n // Add fallback language properties\n const additionalLanguages = [\n (navigator as any).userLanguage,\n (navigator as any).browserLanguage,\n (navigator as any).systemLanguage\n ].filter(Boolean);\n \n languages = [...new Set([...languages, ...additionalLanguages])];\n \n return { language, languages };\n } catch {\n return { language: '', languages: [] };\n }\n}\n\n/**\n * Get timezone information\n */\nfunction getTimezoneInfo(): { timezone: string; timezoneOffset: number } {\n try {\n let timezone = '';\n \n // Modern API\n if (Intl && Intl.DateTimeFormat) {\n try {\n timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n } catch {\n // Fallback\n }\n }\n \n // Fallback: use timezone offset (STABLE - use standard time offset to avoid DST changes)\n if (!timezone) {\n // Use January date to get standard time offset (avoiding DST variations)\n const januaryDate = new Date(2024, 0, 1); // January 1st\n const offset = januaryDate.getTimezoneOffset();\n const sign = offset > 0 ? '-' : '+';\n const hours = Math.floor(Math.abs(offset) / 60);\n const minutes = Math.abs(offset) % 60;\n timezone = `UTC${sign}${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;\n }\n \n // Use January date for stable timezone offset (avoiding DST fluctuations)\n const timezoneOffset = new Date(2024, 0, 1).getTimezoneOffset();\n \n return { timezone, timezoneOffset };\n } catch {\n return { timezone: '', timezoneOffset: 0 };\n }\n}\n\n/**\n * Get hardware information\n */\nfunction getHardwareInfo(): { hardwareConcurrency: number; deviceMemory?: number } {\n try {\n const hardwareConcurrency = navigator.hardwareConcurrency || 0;\n \n // Device memory (Chrome-specific)\n let deviceMemory: number | undefined;\n if ('deviceMemory' in navigator) {\n deviceMemory = (navigator as any).deviceMemory;\n }\n \n const result: { hardwareConcurrency: number; deviceMemory?: number } = { hardwareConcurrency };\n if (deviceMemory !== undefined) {\n result.deviceMemory = deviceMemory;\n }\n return result;\n } catch {\n return { hardwareConcurrency: 0 };\n }\n}\n\n/**\n * Get platform information with enhanced detection\n */\nfunction getPlatformInfo(): { platform: string; userAgent: string } {\n try {\n const platform = navigator.platform || '';\n const userAgent = navigator.userAgent || '';\n \n return { platform, userAgent };\n } catch {\n return { platform: '', userAgent: '' };\n }\n}\n\n/**\n * Get precise browser information with Chromium-based browser detection\n */\nfunction getEnhancedBrowserInfo(): {\n name: string;\n engine: string;\n isChromiumBased: boolean;\n family: string;\n} {\n try {\n return getBrowserInfo();\n } catch {\n // Fallback if detection fails\n return {\n name: 'Unknown',\n engine: 'Unknown',\n isChromiumBased: false,\n family: 'unknown'\n };\n }\n}\n\n/**\n * Get browser capabilities\n */\nfunction getBrowserCapabilities(): { cookieEnabled: boolean; doNotTrack: string | null } {\n try {\n const cookieEnabled = navigator.cookieEnabled !== false;\n \n // Do Not Track\n let doNotTrack: string | null = null;\n if ('doNotTrack' in navigator) {\n doNotTrack = navigator.doNotTrack;\n } else if ('msDoNotTrack' in navigator) {\n doNotTrack = (navigator as any).msDoNotTrack;\n } else if ('mozDoNotTrack' in window) {\n doNotTrack = (window as any).mozDoNotTrack;\n }\n \n return { cookieEnabled, doNotTrack };\n } catch {\n return { cookieEnabled: true, doNotTrack: null };\n }\n}\n\n/**\n * Generate browser fingerprint\n */\nexport async function getBrowserFingerprint(): Promise<FingerprintComponent<BrowserFingerprint>> {\n const startTime = performance.now();\n \n try {\n // Collect all browser information\n const languageInfo = getLanguageInfo();\n const timezoneInfo = getTimezoneInfo();\n const platformInfo = getPlatformInfo();\n const hardwareInfo = getHardwareInfo();\n const capabilities = getBrowserCapabilities();\n const pluginInfo = getPluginInfo();\n const touchSupport = getTouchSupport();\n const enhancedBrowserInfo = getEnhancedBrowserInfo();\n \n const endTime = performance.now();\n \n const result: BrowserFingerprint = {\n // Language and locale\n language: languageInfo.language,\n languages: languageInfo.languages,\n \n // Timezone\n timezone: timezoneInfo.timezone,\n timezoneOffset: timezoneInfo.timezoneOffset,\n \n // Platform information\n platform: platformInfo.platform,\n userAgent: platformInfo.userAgent,\n \n // Enhanced browser identification (solves Chromium masquerading!)\n browserInfo: enhancedBrowserInfo,\n \n // Hardware information\n hardwareConcurrency: hardwareInfo.hardwareConcurrency,\n \n // Browser capabilities\n cookieEnabled: capabilities.cookieEnabled,\n doNotTrack: capabilities.doNotTrack,\n \n // Plugin information\n plugins: pluginInfo,\n \n // Touch support\n touchSupport\n };\n \n // Add optional properties conditionally\n if (hardwareInfo.deviceMemory !== undefined) {\n result.deviceMemory = hardwareInfo.deviceMemory;\n }\n \n return {\n value: result,\n duration: endTime - startTime\n };\n \n } catch (error) {\n return {\n value: {\n language: '',\n languages: [],\n timezone: '',\n timezoneOffset: 0,\n platform: '',\n userAgent: '',\n hardwareConcurrency: 0,\n cookieEnabled: true,\n doNotTrack: null,\n plugins: { length: 0, names: [] },\n touchSupport: { maxTouchPoints: 0, touchEvent: false, touchStart: false }\n },\n duration: performance.now() - startTime,\n error: error instanceof Error ? error.message : 'Browser fingerprinting failed'\n };\n }\n}\n\n/**\n * Check if browser fingerprinting is available\n */\nexport function isBrowserFingerprintingAvailable(): boolean {\n try {\n return typeof navigator === 'object' && navigator !== null;\n } catch {\n return false;\n }\n}","/**\n * Canvas Fingerprinting\n * Based on FingerprintJS canvas component with incognito detection\n */\n\nimport type {\n CanvasFingerprint,\n FingerprintComponent,\n} from \"../../types/fingerprint\";\nimport { hash32 } from \"./hashing\";\n\n/**\n * Text to render for canvas fingerprinting with maximum differentiation\n */\nconst CANVAS_TEXTS = [\n \"Zap Canvas 🎨🔒2024\",\n \"Żółć gęślą jaźń €$¢£¥\",\n \"αβγδεζηθικλμνξο\",\n \"中文测试字体渲染\",\n \"🌟🎯🚀💎🌊🎨\",\n];\n\n/**\n * Enhanced geometric shapes for canvas fingerprinting with sub-pixel precision\n */\nfunction drawAdvancedGeometry(ctx: CanvasRenderingContext2D): void {\n // Enable high-quality rendering for sub-pixel differences\n ctx.imageSmoothingEnabled = true;\n ctx.imageSmoothingQuality = \"high\";\n\n // Complex gradient with multiple stops\n const radialGradient = ctx.createRadialGradient(75, 75, 0, 75, 75, 50);\n radialGradient.addColorStop(0, \"rgba(255, 0, 0, 0.8)\");\n radialGradient.addColorStop(0.3, \"rgba(0, 255, 0, 0.6)\");\n radialGradient.addColorStop(0.7, \"rgba(0, 0, 255, 0.4)\");\n radialGradient.addColorStop(1, \"rgba(255, 255, 0, 0.2)\");\n\n ctx.fillStyle = radialGradient;\n ctx.fillRect(10, 10, 130, 100);\n\n // Sub-pixel positioned shapes for GPU/anti-aliasing differentiation\n ctx.fillStyle = \"rgba(102, 204, 0, 0.7)\";\n ctx.fillRect(15.5, 15.3, 49.7, 49.2);\n\n ctx.fillStyle = \"#f60\";\n ctx.fillRect(70.3, 10.7, 50.1, 50.9);\n\n // Complex bezier curves that stress different rendering engines\n ctx.beginPath();\n ctx.moveTo(25.2, 120.1);\n ctx.bezierCurveTo(25.2, 120.1, 75.8, 90.3, 125.5, 120.7);\n ctx.bezierCurveTo(125.5, 120.7, 90.1, 150.2, 60.8, 140.9);\n ctx.closePath();\n ctx.fillStyle = \"rgba(200, 100, 50, 0.6)\";\n ctx.fill();\n\n // Overlapping circles with complex blending\n ctx.globalCompositeOperation = \"multiply\";\n\n ctx.beginPath();\n ctx.arc(50.7, 80.3, 20.1, 0, Math.PI * 2);\n ctx.fillStyle = \"rgba(255, 0, 100, 0.5)\";\n ctx.fill();\n\n ctx.beginPath();\n ctx.arc(70.3, 80.7, 20.9, 0, Math.PI * 2);\n ctx.fillStyle = \"rgba(0, 255, 100, 0.5)\";\n ctx.fill();\n\n ctx.globalCompositeOperation = \"source-over\";\n\n // Thin lines to test anti-aliasing\n ctx.strokeStyle = \"rgba(50, 50, 50, 0.8)\";\n ctx.lineWidth = 0.5;\n ctx.setLineDash([2.3, 1.7]);\n\n for (let i = 0; i < 10; i++) {\n ctx.beginPath();\n ctx.moveTo(10 + i * 13.7, 160);\n ctx.lineTo(50 + i * 11.3, 200);\n ctx.stroke();\n }\n\n // Reset line dash\n ctx.setLineDash([]);\n\n // Pattern with complex repeating elements\n const patternCanvas = document.createElement(\"canvas\");\n patternCanvas.width = 20;\n patternCanvas.height = 20;\n const patternCtx = patternCanvas.getContext(\"2d\");\n\n if (patternCtx) {\n patternCtx.fillStyle = \"rgba(150, 75, 200, 0.3)\";\n patternCtx.fillRect(0, 0, 10, 10);\n patternCtx.fillRect(10, 10, 10, 10);\n\n const pattern = ctx.createPattern(patternCanvas, \"repeat\");\n if (pattern) {\n ctx.fillStyle = pattern;\n ctx.fillRect(150, 120, 80, 60);\n }\n }\n\n // Shadow effects for additional GPU differentiation\n ctx.shadowColor = \"rgba(0, 0, 0, 0.5)\";\n ctx.shadowBlur = 3.2;\n ctx.shadowOffsetX = 2.1;\n ctx.shadowOffsetY = 2.7;\n\n ctx.fillStyle = \"rgba(100, 200, 150, 0.8)\";\n ctx.fillRect(160, 30, 60, 40);\n\n // Reset shadow\n ctx.shadowColor = \"transparent\";\n ctx.shadowBlur = 0;\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n}\n\n/**\n * Draw multiple text samples with different fonts and effects for maximum differentiation\n */\nfunction drawAdvancedText(ctx: CanvasRenderingContext2D): void {\n const fonts = [\n \"14px Arial, sans-serif\",\n '13px \"Times New Roman\", serif',\n \"12px Georgia, serif\",\n \"15px Helvetica, Arial, sans-serif\",\n '11px \"Courier New\", monospace',\n \"13px Verdana, sans-serif\",\n \"16px Impact, fantasy\",\n '12px \"Comic Sans MS\", cursive',\n ];\n\n const colors = [\n \"#000\",\n \"#333\",\n \"#666\",\n \"#999\",\n \"rgba(255, 0, 0, 0.8)\",\n \"rgba(0, 255, 0, 0.7)\",\n \"rgba(0, 0, 255, 0.6)\",\n \"rgba(128, 64, 192, 0.9)\",\n ];\n\n // Test different text baselines and alignments\n const baselines: CanvasTextBaseline[] = [\n \"top\",\n \"hanging\",\n \"middle\",\n \"alphabetic\",\n \"bottom\",\n ];\n const alignments: CanvasTextAlign[] = [\"left\", \"center\", \"right\"];\n\n let y = 250;\n\n CANVAS_TEXTS.forEach((text, textIndex) => {\n fonts.forEach((font, fontIndex) => {\n const colorIndex = (textIndex + fontIndex) % colors.length;\n const baselineIndex = fontIndex % baselines.length;\n const alignIndex = fontIndex % alignments.length;\n\n ctx.font = font;\n ctx.fillStyle = colors[colorIndex] || colors[0] || \"#000\";\n ctx.textBaseline = baselines[baselineIndex] || \"top\";\n ctx.textAlign = alignments[alignIndex] || \"left\";\n\n // Sub-pixel positioning for enhanced differentiation\n const x = 10 + ((fontIndex * 0.7) % 200);\n const yPos = y + ((fontIndex * 18.3) % 100);\n\n ctx.fillText(text, x, yPos);\n\n // Add stroke text for additional GPU stress testing\n if (fontIndex % 2 === 0) {\n ctx.strokeStyle = `rgba(${100 + fontIndex * 20}, ${50 + fontIndex * 15}, ${150 + fontIndex * 10}, 0.5)`;\n ctx.lineWidth = 0.3;\n ctx.strokeText(text, x + 0.5, yPos + 0.5);\n }\n });\n y += 120;\n });\n\n // Test text with transformations that stress different rendering engines\n ctx.save();\n ctx.translate(100, 400);\n ctx.rotate(Math.PI / 6);\n ctx.scale(1.2, 0.8);\n ctx.font = \"italic 14px Arial\";\n ctx.fillStyle = \"rgba(200, 100, 50, 0.8)\";\n ctx.fillText(\"Transformed & Rotated Text\", 0, 0);\n ctx.restore();\n\n // Test very small and very large text\n ctx.font = \"6px Arial\";\n ctx.fillStyle = \"#000\";\n ctx.fillText(\"Tiny text rendering test\", 10, 500);\n\n ctx.font = \"32px Arial\";\n ctx.fillStyle = \"rgba(255, 0, 0, 0.5)\";\n ctx.fillText(\"Large\", 10, 540);\n\n // Reset text properties\n ctx.textAlign = \"left\";\n ctx.textBaseline = \"top\";\n}\n\n/**\n * Analyze sub-pixel differences for enhanced GPU/anti-aliasing detection\n */\nfunction analyzeSubPixels(\n ctx: CanvasRenderingContext2D,\n canvas: HTMLCanvasElement\n): string {\n try {\n // Create test pattern for sub-pixel analysis\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // Draw shapes at sub-pixel coordinates to stress anti-aliasing\n ctx.fillStyle = \"rgb(100, 150, 200)\";\n ctx.fillRect(10.3, 10.7, 20.1, 20.9);\n\n ctx.strokeStyle = \"rgb(200, 100, 50)\";\n ctx.lineWidth = 1.3;\n ctx.beginPath();\n ctx.moveTo(15.2, 35.8);\n ctx.lineTo(25.7, 45.1);\n ctx.stroke();\n\n // Get pixel data for analysis\n const imageData = ctx.getImageData(10, 10, 30, 40);\n const pixels = imageData.data;\n\n // Calculate sub-pixel characteristics with enhanced stability\n let redSum = 0,\n greenSum = 0,\n blueSum = 0;\n let edgeVariance = 0;\n let validPixels = 0;\n\n for (let i = 0; i < pixels.length; i += 4) {\n const r = pixels[i] || 0;\n const g = pixels[i + 1] || 0;\n const b = pixels[i + 2] || 0;\n const a = pixels[i + 3] || 0;\n\n // Only process non-transparent pixels for stability\n if (a > 25) { // Higher threshold than before\n redSum += r;\n greenSum += g;\n blueSum += b;\n validPixels++;\n\n // Calculate edge variance with larger step for stability\n if (i >= 16) { // Skip more pixels for stability\n const prevR = pixels[i - 16] || 0;\n const diff = Math.abs(r - prevR);\n // Only count significant differences to reduce noise\n if (diff >= 8) { // Higher threshold\n edgeVariance += diff;\n }\n }\n }\n }\n\n if (validPixels === 0) {\n return \"no-valid-pixels\";\n }\n\n // Round to nearest 10 for maximum stability\n const avgRed = Math.round((redSum / validPixels) / 10) * 10;\n const avgGreen = Math.round((greenSum / validPixels) / 10) * 10;\n const avgBlue = Math.round((blueSum / validPixels) / 10) * 10;\n const avgVariance = Math.round((edgeVariance / validPixels) / 10) * 10;\n\n return `${avgRed}-${avgGreen}-${avgBlue}-${avgVariance}`;\n } catch (error) {\n return \"subpixel-error\";\n }\n}\n\n/**\n * Detect potential incognito mode and canvas blocking through multiple methods\n */\nfunction detectAdvancedInconsistencies(\n textHash: string,\n geometryHash: string,\n subPixelData: string,\n ctx: CanvasRenderingContext2D\n): { isInconsistent: boolean; confidence: number; reasons: string[] } {\n const reasons: string[] = [];\n let suspiciousSignals = 0;\n\n try {\n // Test 1: Check if getImageData works consistently\n const imageData = ctx.getImageData(0, 0, 1, 1);\n if (!imageData || imageData.data.length === 0) {\n reasons.push(\"getImageData-blocked\");\n suspiciousSignals += 3;\n }\n\n // Test 2: Check hash lengths (blocked canvas often returns default values)\n if (textHash.length < 8 || geometryHash.length < 8) {\n reasons.push(\"short-hash\");\n suspiciousSignals += 2;\n }\n\n // Test 3: Check for known blocked patterns\n const knownBlockedHashes = [\n \"error\",\n \"blocked\",\n \"disabled\",\n \"00000000\",\n \"ffffffff\",\n \"12345678\",\n ];\n\n if (\n knownBlockedHashes.includes(textHash) ||\n knownBlockedHashes.includes(geometryHash)\n ) {\n reasons.push(\"known-blocked-hash\");\n suspiciousSignals += 3;\n }\n\n // Test 4: Sub-pixel analysis indicates blocking\n if (subPixelData === \"subpixel-error\" || subPixelData.includes(\"0-0-0\")) {\n reasons.push(\"subpixel-anomaly\");\n suspiciousSignals += 2;\n }\n\n // Test 5: Same hash for different operations (indicates fake canvas)\n if (textHash === geometryHash && textHash !== \"error\") {\n reasons.push(\"identical-hashes\");\n suspiciousSignals += 2;\n }\n\n // Test 6: toDataURL performance (some privacy tools slow it down)\n const canvas = document.createElement(\"canvas\");\n canvas.width = 10;\n canvas.height = 10;\n const testCtx = canvas.getContext(\"2d\");\n\n if (testCtx) {\n const start = performance.now();\n testCtx.fillStyle = \"red\";\n testCtx.fillRect(0, 0, 10, 10);\n canvas.toDataURL();\n const duration = performance.now() - start;\n\n // Suspiciously slow canvas operations\n if (duration > 50) {\n reasons.push(\"slow-canvas\");\n suspiciousSignals += 1;\n }\n }\n\n const confidence = Math.min(suspiciousSignals / 5, 1); // Normalize to 0-1\n const isInconsistent = suspiciousSignals >= 2; // Threshold for inconsistency\n\n return { isInconsistent, confidence, reasons };\n } catch (error) {\n return {\n isInconsistent: true,\n confidence: 1,\n reasons: [\"detection-error\"],\n };\n }\n}\n\n/**\n * Generate enhanced canvas fingerprint with multiple primitives and sub-pixel analysis\n */\nexport async function getCanvasFingerprint(): Promise<\n FingerprintComponent<CanvasFingerprint>\n> {\n const startTime = performance.now();\n\n try {\n // Create larger canvas for more detailed fingerprinting\n const canvas = document.createElement(\"canvas\");\n canvas.width = 300;\n canvas.height = 600;\n\n const ctx = canvas.getContext(\"2d\", {\n alpha: true,\n desynchronized: false,\n colorSpace: \"srgb\",\n willReadFrequently: true,\n });\n\n if (!ctx) {\n throw new Error(\"Canvas 2D context not available\");\n }\n\n // Test canvas winding (different behavior across browsers/GPUs)\n ctx.rect(0, 0, 10, 10);\n ctx.rect(2, 2, 6, 6);\n const isClockwise = ctx.isPointInPath(5, 5, \"evenodd\");\n\n // ENHANCED: Draw advanced text with multiple fonts and effects\n drawAdvancedText(ctx);\n const textData = canvas.toDataURL(\"image/png\");\n const textHash = hash32(textData);\n\n // Clear and draw advanced geometry\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n drawAdvancedGeometry(ctx);\n const geometryData = canvas.toDataURL(\"image/png\");\n const geometryHash = hash32(geometryData);\n\n // ENHANCED: Analyze sub-pixels for GPU/anti-aliasing differentiation\n const subPixelAnalysis = analyzeSubPixels(ctx, canvas);\n\n // ENHANCED: Advanced inconsistency detection\n const inconsistencyAnalysis = detectAdvancedInconsistencies(\n textHash,\n geometryHash,\n subPixelAnalysis,\n ctx\n );\n\n // Create composite canvas with both text and geometry for additional hash\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // Draw both text and geometry together\n drawAdvancedText(ctx);\n ctx.globalCompositeOperation = \"multiply\";\n drawAdvancedGeometry(ctx);\n ctx.globalCompositeOperation = \"source-over\";\n\n const compositeData = canvas.toDataURL(\"image/png\");\n const compositeHash = hash32(compositeData);\n\n const endTime = performance.now();\n\n const result: CanvasFingerprint = {\n text: textHash,\n geometry: geometryHash,\n winding: isClockwise,\n isInconsistent: inconsistencyAnalysis.isInconsistent,\n // NEW FIELDS\n subPixelAnalysis, // Sub-pixel characteristics for GPU differentiation\n compositeHash, // Combined text+geometry hash\n inconsistencyConfidence: inconsistencyAnalysis.confidence,\n blockingReasons: inconsistencyAnalysis.reasons,\n };\n\n return {\n value: result,\n duration: endTime - startTime,\n };\n } catch (error) {\n return {\n value: {\n text: \"error\",\n geometry: \"error\",\n winding: false,\n isInconsistent: true,\n subPixelAnalysis: \"error\",\n compositeHash: \"error\",\n inconsistencyConfidence: 1,\n blockingReasons: [\"canvas-error\"],\n },\n duration: performance.now() - startTime,\n error:\n error instanceof Error ? error.message : \"Canvas fingerprinting failed\",\n };\n }\n}\n\n/**\n * Check if canvas fingerprinting is available\n */\nexport function isCanvasAvailable(): boolean {\n try {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n return ctx !== null && typeof ctx.fillText === \"function\";\n } catch {\n return false;\n }\n}\n","/**\n * Font Detection Fingerprinting\n * Based on FingerprintJS font detection techniques\n */\n\nimport type { FingerprintComponent, FontFingerprint } from '../../types/fingerprint';\n\n/**\n * Font list for detection (commonly available system fonts)\n */\nconst FONT_LIST = [\n // Windows fonts\n 'Arial', 'Arial Black', 'Calibri', 'Cambria', 'Comic Sans MS', 'Consolas',\n 'Courier New', 'Georgia', 'Impact', 'Lucida Console', 'Lucida Sans Unicode',\n 'Microsoft Sans Serif', 'Palatino Linotype', 'Segoe UI', 'Tahoma', 'Times New Roman',\n 'Trebuchet MS', 'Verdana',\n \n // macOS fonts\n 'American Typewriter', 'Avenir', 'Baskerville', 'Big Caslon', 'Brush Script MT',\n 'Copperplate', 'Didot', 'Futura', 'Gill Sans', 'Helvetica', 'Helvetica Neue',\n 'Hoefler Text', 'Lucida Grande', 'Marker Felt', 'Optima', 'Papyrus',\n 'Phosphate', 'Rockwell', 'Savoye LET', 'SignPainter', 'Skia', 'Snell Roundhand',\n 'System Font', 'Zapfino',\n \n // Linux fonts\n 'DejaVu Sans', 'DejaVu Sans Mono', 'DejaVu Serif', 'Droid Sans', 'Droid Sans Mono',\n 'Droid Serif', 'Liberation Sans', 'Liberation Sans Narrow', 'Liberation Serif',\n 'Ubuntu', 'Ubuntu Mono',\n \n // Android fonts\n 'Roboto', 'Roboto Condensed', 'Roboto Mono', 'Roboto Slab', 'Droid Sans',\n 'Droid Sans Mono', 'Droid Serif',\n \n // iOS fonts\n 'Helvetica Neue', 'Arial', 'Helvetica', 'Courier New', 'Times New Roman',\n 'San Francisco', 'Avenir Next',\n \n // Common web fonts\n 'Open Sans', 'Lato', 'Montserrat', 'Source Sans Pro', 'Raleway', 'PT Sans',\n 'Lora', 'Playfair Display', 'Oswald', 'Slabo 27px', 'Fira Sans',\n \n // East Asian fonts\n 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Meiryo', 'MS Gothic', 'MS Mincho',\n 'SimSun', 'SimHei', 'Microsoft YaHei', 'Malgun Gothic', 'Apple SD Gothic Neo'\n];\n\n/**\n * Fallback fonts for measurement\n */\nconst FALLBACK_FONTS = ['monospace', 'sans-serif', 'serif'];\n\n/**\n * Test text for font measurement\n */\nconst TEST_TEXT = 'mmMwWLliI0O&1 ※';\n\n/**\n * Font measurement using canvas\n */\nfunction measureText(text: string, fontFamily: string): { width: number; height: number } {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n \n if (!ctx) {\n return { width: 0, height: 0 };\n }\n \n ctx.font = `12px ${fontFamily}`;\n const metrics = ctx.measureText(text);\n \n return {\n width: metrics.width,\n height: metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent\n };\n}\n\n/**\n * Font measurement using DOM (fallback method)\n */\nfunction measureTextDOM(text: string, fontFamily: string): { width: number; height: number } {\n const element = document.createElement('span');\n element.style.position = 'absolute';\n element.style.left = '-9999px';\n element.style.top = '-9999px';\n element.style.fontSize = '12px';\n element.style.fontFamily = fontFamily;\n element.style.whiteSpace = 'nowrap';\n element.textContent = text;\n \n document.body.appendChild(element);\n \n const rect = element.getBoundingClientRect();\n const result = {\n width: rect.width,\n height: rect.height\n };\n \n document.body.removeChild(element);\n \n return result;\n}\n\n/**\n * Detect if a font is available by comparing measurements\n */\nfunction isFontAvailable(fontName: string, method: 'canvas' | 'dom' = 'canvas'): boolean {\n const measureFunc = method === 'canvas' ? measureText : measureTextDOM;\n \n // Measure with fallback fonts first\n const fallbackMeasurements = FALLBACK_FONTS.map(fallback => \n measureFunc(TEST_TEXT, fallback)\n );\n \n // Measure with target font + fallback\n const targetMeasurements = FALLBACK_FONTS.map(fallback => \n measureFunc(TEST_TEXT, `${fontName}, ${fallback}`)\n );\n \n // Compare measurements - if font is available, measurements should differ\n for (let i = 0; i < fallbackMeasurements.length; i++) {\n const fallback = fallbackMeasurements[i];\n const target = targetMeasurements[i];\n \n if (fallback && target) {\n // Allow small tolerance for measurement differences\n const widthDiff = Math.abs(fallback.width - target.width);\n const heightDiff = Math.abs(fallback.height - target.height);\n \n if (widthDiff > 0.1 || heightDiff > 0.1) {\n return true; // Font likely available\n }\n }\n }\n \n return false;\n}\n\n/**\n * Advanced font detection with measurements\n */\nfunction detectFontsWithMeasurements(): { available: string[]; measurements: Record<string, { width: number; height: number }> } {\n const available: string[] = [];\n const measurements: Record<string, { width: number; height: number }> = {};\n \n for (const font of FONT_LIST) {\n try {\n const measurement = measureText(TEST_TEXT, font);\n measurements[font] = measurement;\n \n if (isFontAvailable(font, 'canvas')) {\n available.push(font);\n }\n } catch (error) {\n // Skip fonts that cause errors\n continue;\n }\n }\n \n return { available, measurements };\n}\n\n/**\n * Basic font detection (faster but less detailed)\n */\nfunction detectFontsBasic(): string[] {\n const available: string[] = [];\n \n for (const font of FONT_LIST) {\n try {\n if (isFontAvailable(font, 'dom')) {\n available.push(font);\n }\n } catch (error) {\n // Skip fonts that cause errors\n continue;\n }\n }\n \n return available;\n}\n\n/**\n * Generate font fingerprint\n */\nexport async function getFontFingerprint(useAdvanced: boolean = true): Promise<FingerprintComponent<FontFingerprint>> {\n const startTime = performance.now();\n \n try {\n let result: FontFingerprint;\n \n if (useAdvanced && isCanvasAvailable()) {\n // Advanced detection with measurements\n const { available, measurements } = detectFontsWithMeasurements();\n result = {\n available: available.sort(),\n method: 'advanced',\n measurements\n };\n } else {\n // Basic detection\n const available = detectFontsBasic();\n result = {\n available: available.sort(),\n method: 'basic'\n };\n }\n \n const endTime = performance.now();\n \n return {\n value: result,\n duration: endTime - startTime\n };\n \n } catch (error) {\n return {\n value: {\n available: [],\n method: 'basic'\n },\n duration: performance.now() - startTime,\n error: error instanceof Error ? error.message : 'Font detection failed'\n };\n }\n}\n\n/**\n * Check if canvas is available for font measurement\n */\nfunction isCanvasAvailable(): boolean {\n try {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n return ctx !== null && typeof ctx.measureText === 'function';\n } catch {\n return false;\n }\n}\n\n/**\n * Check if font detection is available\n */\nexport function isFontDetectionAvailable(): boolean {\n try {\n // Check if we can create DOM elements for measurement\n const element = document.createElement('span');\n return element && typeof element.style === 'object';\n } catch {\n return false;\n }\n}","/**\n * Screen and Viewport Fingerprinting\n * Based on FingerprintJS screen components\n */\n\nimport type {\n FingerprintComponent,\n ScreenFingerprint,\n} from \"../../types/fingerprint\";\n\n/**\n * Get screen orientation information\n */\nfunction getScreenOrientation(): { angle: number; type: string } | undefined {\n try {\n // Modern API\n if (screen.orientation) {\n return {\n angle: screen.orientation.angle,\n type: screen.orientation.type,\n };\n }\n\n // Legacy API\n const orientation =\n (screen as any).mozOrientation ||\n (screen as any).msOrientation ||\n (screen as any).webkitOrientation;\n\n if (orientation !== undefined) {\n return {\n angle: orientation,\n type: \"unknown\",\n };\n }\n\n // Fallback: estimate from dimensions\n const isLandscape = screen.width > screen.height;\n return {\n angle: isLandscape ? 90 : 0,\n type: isLandscape ? \"landscape-primary\" : \"portrait-primary\",\n };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Get device pixel ratio with fallbacks\n */\nfunction getPixelRatio(): number {\n try {\n return window.devicePixelRatio || 1;\n } catch {\n return 1;\n }\n}\n\n/**\n * Round dimensions to mitigate small variations (like macOS Dock appearing/disappearing)\n * Based on FingerprintJS stabilization technique\n */\nfunction roundDimension(value: number): number {\n // Round to nearest 10 to mitigate small variations\n // This handles cases like 1900x1440 -> 1900x1439 when Dock appears\n return Math.round(value / 10) * 10;\n}\n\n/**\n * Get screen frame with stabilization (rounded dimensions)\n * This is more stable than raw screen.availWidth/availHeight\n */\nfunction getScreenFrame(): { width: number; height: number } {\n try {\n // Check Safari 17+ privacy mode (always returns 0)\n const availWidth = screen.availWidth || 0;\n const availHeight = screen.availHeight || 0;\n\n if (availWidth === 0 && availHeight === 0) {\n // Safari private mode or unavailable, use screen dimensions\n return {\n width: roundDimension(screen.width || 0),\n height: roundDimension(screen.height || 0),\n };\n }\n\n return {\n width: roundDimension(availWidth),\n height: roundDimension(availHeight),\n };\n } catch {\n return {\n width: roundDimension(screen.width || 0),\n height: roundDimension(screen.height || 0),\n };\n }\n}\n\n/**\n * Get screen resolution (stable - doesn't change)\n * Screen resolution is consistent across sessions and orientations\n */\nfunction getScreenResolution(): { width: number; height: number } {\n try {\n return {\n width: screen.width || 0,\n height: screen.height || 0,\n };\n } catch {\n return { width: 0, height: 0 };\n }\n}\n\n/**\n * Get viewport dimensions with stabilization\n * Uses rounding to mitigate small variations from console, zoom, etc.\n */\nfunction getViewportDimensions(): { width: number; height: number } {\n try {\n // Use document.documentElement for more accurate measurements\n const element = document.documentElement;\n\n const width = Math.max(element.clientWidth || 0, window.innerWidth || 0);\n\n const height = Math.max(element.clientHeight || 0, window.innerHeight || 0);\n\n // Apply rounding to stabilize viewport (mitigates console/zoom changes)\n return {\n width: roundDimension(width),\n height: roundDimension(height),\n };\n } catch {\n const width = window.innerWidth || 0;\n const height = window.innerHeight || 0;\n\n return {\n width: roundDimension(width),\n height: roundDimension(height),\n };\n }\n}\n\n/**\n * Generate screen fingerprint with stabilization techniques\n * Based on FingerprintJS approach: uses rounding and consistent ordering\n */\nexport async function getScreenFingerprint(): Promise<\n FingerprintComponent<ScreenFingerprint>\n> {\n const startTime = performance.now();\n\n try {\n // Get screen resolution with consistent ordering (stable)\n const resolution = getScreenResolution();\n\n // Get color depth\n const colorDepth = screen.colorDepth || screen.pixelDepth || 0;\n\n // Get pixel ratio\n const pixelRatio = getPixelRatio();\n\n // Get screen frame (available space) with stabilization\n const screenFrame = getScreenFrame();\n\n // Get viewport dimensions with stabilization (rounded)\n const viewport = getViewportDimensions();\n\n // Get orientation\n const orientation = getScreenOrientation();\n\n const endTime = performance.now();\n\n const result: ScreenFingerprint = {\n // Screen resolution (stable - doesn't change)\n width: resolution.width,\n height: resolution.height,\n colorDepth,\n pixelRatio,\n\n // Screen frame (available space, stabilized with rounding)\n // Mitigates small variations like macOS Dock appearing/disappearing\n availableWidth: screenFrame.width,\n availableHeight: screenFrame.height,\n\n // Viewport dimensions (stabilized with rounding)\n // Mitigates variations from console open/closed, zoom changes, etc.\n viewportWidth: viewport.width,\n viewportHeight: viewport.height,\n };\n\n // Add optional properties conditionally\n if (orientation) {\n result.orientation = orientation;\n }\n\n return {\n value: result,\n duration: endTime - startTime,\n };\n } catch (error) {\n return {\n value: {\n width: 0,\n height: 0,\n colorDepth: 0,\n pixelRatio: 1,\n viewportWidth: 0,\n viewportHeight: 0,\n availableWidth: 0,\n availableHeight: 0,\n },\n duration: performance.now() - startTime,\n error:\n error instanceof Error ? error.message : \"Screen fingerprinting failed\",\n };\n }\n}\n\n/**\n * Check if screen fingerprinting is available\n */\nexport function isScreenAvailable(): boolean {\n try {\n return (\n typeof screen === \"object\" &&\n typeof screen.width === \"number\" &&\n typeof screen.height === \"number\"\n );\n } catch {\n return false;\n }\n}\n","/**\n * WebGL Context Caching Utility\n * Based on FingerprintJS WebGL optimization patterns\n * Prevents expensive WebGL context recreation\n */\n\ninterface WebGLContextCache {\n context: WebGLRenderingContext | null;\n canvas: HTMLCanvasElement | null;\n timestamp: number;\n isValid: boolean;\n usageCount: number;\n lastUsed: number;\n}\n\n// Global cache for WebGL context\nlet webglCache: WebGLContextCache | null = null;\n\n// Monitoring counters\nlet activeContextCount = 0;\nlet totalContextsCreated = 0;\n\n// Cache timeout (30 minutes) - increased from 5 minutes\nconst CACHE_TIMEOUT = 30 * 60 * 1000;\n\n// Maximum number of contexts to prevent memory leaks\nconst MAX_CONTEXTS = 8;\n\n/**\n * Gets or creates a cached WebGL context with intelligent reuse\n */\nexport function getCachedWebGLContext(): WebGLRenderingContext | null {\n try {\n // Use performance.now() for more stable timing measurements\n const now = performance.now();\n\n // Check if cache is valid and not expired\n if (webglCache && webglCache.isValid) {\n if (now - webglCache.timestamp < CACHE_TIMEOUT) {\n // Verify context is still valid\n if (webglCache.context && !webglCache.context.isContextLost()) {\n // Update usage statistics\n webglCache.usageCount++;\n webglCache.lastUsed = now;\n return webglCache.context;\n } else {\n // Context was lost, invalidate cache\n invalidateWebGLCache();\n }\n } else {\n // Cache expired, clean up old context\n invalidateWebGLCache();\n }\n }\n\n // Check if we're approaching the maximum context limit\n if (activeContextCount >= MAX_CONTEXTS) {\n console.warn('[WebGL Cache] Maximum context limit reached, reusing existing contexts');\n return null;\n }\n\n // Create new context\n const canvas = createWebGLCanvas();\n if (!canvas) {\n return null;\n }\n\n const context = getWebGLContext(canvas);\n if (!context) {\n return null;\n }\n\n // Update counters\n activeContextCount++;\n totalContextsCreated++;\n\n // Cache the context\n webglCache = {\n context,\n canvas,\n timestamp: now,\n isValid: true,\n usageCount: 1,\n lastUsed: now,\n };\n\n return context;\n } catch (error) {\n // Invalidate cache on error\n invalidateWebGLCache();\n return null;\n }\n}\n\n/**\n * Creates a WebGL canvas element\n */\nfunction createWebGLCanvas(): HTMLCanvasElement | null {\n try {\n if (typeof document === 'undefined') {\n return null;\n }\n\n const canvas = document.createElement('canvas');\n \n // Set minimal size to reduce memory usage\n canvas.width = 1;\n canvas.height = 1;\n \n return canvas;\n } catch {\n return null;\n }\n}\n\n/**\n * Gets WebGL context from canvas with optimized settings for fingerprinting\n */\nfunction getWebGLContext(canvas: HTMLCanvasElement): WebGLRenderingContext | null {\n try {\n // Optimized context attributes for fingerprinting (minimal overhead)\n const contextAttributes: WebGLContextAttributes = {\n alpha: false,\n antialias: false,\n depth: false,\n stencil: false,\n preserveDrawingBuffer: false,\n failIfMajorPerformanceCaveat: true,\n powerPreference: 'default'\n };\n\n // Try standard WebGL first, then experimental\n const context = canvas.getContext('webgl', contextAttributes) || \n canvas.getContext('experimental-webgl', contextAttributes);\n \n return context as WebGLRenderingContext | null;\n } catch {\n return null;\n }\n}\n\n/**\n * Invalidates the WebGL cache with proper cleanup and monitoring\n */\nexport function invalidateWebGLCache(): void {\n if (webglCache) {\n try {\n // Properly dispose of WebGL context\n if (webglCache.context) {\n const ext = webglCache.context.getExtension('WEBGL_lose_context');\n if (ext) {\n ext.loseContext();\n }\n }\n \n // Clean up canvas\n if (webglCache.canvas) {\n webglCache.canvas.width = 0;\n webglCache.canvas.height = 0;\n }\n \n // Update monitoring counters\n if (activeContextCount > 0) {\n activeContextCount--;\n }\n } catch {\n // Ignore disposal errors but still decrement counter\n if (activeContextCount > 0) {\n activeContextCount--;\n }\n }\n\n webglCache.isValid = false;\n webglCache = null;\n }\n}\n\n/**\n * Checks if WebGL context is still valid\n */\nexport function isWebGLContextValid(): boolean {\n if (!webglCache || !webglCache.context) {\n return false;\n }\n\n try {\n // Check if context is lost\n return !webglCache.context.isContextLost();\n } catch {\n return false;\n }\n}\n\n/**\n * Gets WebGL extensions with caching\n */\nexport function getCachedWebGLExtensions(): string[] {\n const context = getCachedWebGLContext();\n if (!context) {\n return [];\n }\n\n try {\n const extensions = context.getSupportedExtensions();\n return extensions ? Array.from(extensions).sort() : [];\n } catch {\n return [];\n }\n}\n\n/**\n * Gets WebGL parameters with caching\n */\nexport function getCachedWebGLParameters(): Record<string, any> {\n const context = getCachedWebGLContext();\n if (!context) {\n return {};\n }\n\n try {\n const parameters: Record<string, any> = {};\n \n // Safe parameter list that won't trigger console warnings\n const safeParameters = [\n 'VERSION',\n 'VENDOR',\n 'RENDERER',\n 'SHADING_LANGUAGE_VERSION',\n 'MAX_TEXTURE_SIZE',\n 'MAX_RENDERBUFFER_SIZE',\n 'MAX_VIEWPORT_DIMS',\n 'MAX_VERTEX_ATTRIBS',\n 'MAX_VERTEX_UNIFORM_VECTORS',\n 'MAX_FRAGMENT_UNIFORM_VECTORS',\n 'MAX_VARYING_VECTORS',\n ];\n\n for (const paramName of safeParameters) {\n try {\n const paramValue = (context as any)[paramName];\n if (paramValue !== undefined) {\n parameters[paramName] = context.getParameter(paramValue);\n }\n } catch {\n // Skip problematic parameters\n }\n }\n\n return parameters;\n } catch {\n return {};\n }\n}\n\n/**\n * Get WebGL cache monitoring statistics\n */\nexport function getWebGLCacheStats(): {\n activeContexts: number;\n totalCreated: number;\n cacheHits: number;\n lastUsed: number | null;\n} {\n return {\n activeContexts: activeContextCount,\n totalCreated: totalContextsCreated,\n cacheHits: webglCache?.usageCount || 0,\n lastUsed: webglCache?.lastUsed || null,\n };\n}\n\n/**\n * Force cleanup all WebGL resources\n */\nexport function forceCleanupWebGL(): void {\n invalidateWebGLCache();\n activeContextCount = 0; // Reset counter\n}\n\n/**\n * Cleanup function to be called on page unload with better error handling\n */\nexport function cleanupWebGLCache(): void {\n try {\n invalidateWebGLCache();\n \n // Reset monitoring counters\n activeContextCount = 0;\n totalContextsCreated = 0;\n } catch (error) {\n console.warn('[WebGL Cache] Cleanup error:', error);\n }\n}\n\n// Enhanced auto-cleanup on page unload with better browser support\nif (typeof window !== 'undefined') {\n // Standard page unload events\n window.addEventListener('beforeunload', cleanupWebGLCache);\n window.addEventListener('pagehide', cleanupWebGLCache);\n window.addEventListener('unload', cleanupWebGLCache);\n \n // Visibility API for better cleanup on tab switch\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden') {\n // Optional: Clean up on tab switch (uncomment if needed)\n // cleanupWebGLCache();\n }\n });\n \n // Memory pressure cleanup (if supported)\n if ('memory' in performance && typeof (performance as any).memory.addEventListener === 'function') {\n try {\n (performance as any).memory.addEventListener('memorypressure', cleanupWebGLCache);\n } catch (e) {\n // Not all browsers support this\n }\n }\n}","/**\n * WebGL Fingerprinting\n * Based on FingerprintJS WebGL component for GPU and driver detection\n * Enhanced with context caching for performance\n */\n\nimport type { FingerprintComponent, WebGLFingerprint } from '../../types/fingerprint';\nimport { \n getCachedWebGLContext, \n getCachedWebGLExtensions, \n getCachedWebGLParameters,\n isWebGLContextValid \n} from '../../utils/webgl-cache';\n\n/**\n * WebGL parameter constants for fingerprinting\n */\nconst WEBGL_PARAMS = {\n VENDOR: 0x1f00,\n RENDERER: 0x1f01,\n VERSION: 0x1f02,\n SHADING_LANGUAGE_VERSION: 0x8b8c,\n MAX_VERTEX_ATTRIBS: 0x8869,\n MAX_TEXTURE_SIZE: 0x0d33,\n MAX_RENDERBUFFER_SIZE: 0x84e8,\n MAX_VIEWPORT_DIMS: 0x0d3a,\n ALIASED_LINE_WIDTH_RANGE: 0x846e,\n ALIASED_POINT_SIZE_RANGE: 0x846d,\n MAX_FRAGMENT_UNIFORM_VECTORS: 0x8dfd,\n MAX_VERTEX_UNIFORM_VECTORS: 0x8dfb,\n MAX_VARYING_VECTORS: 0x8dfc,\n MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8b4c,\n MAX_TEXTURE_IMAGE_UNITS: 0x8872,\n MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8b4d,\n} as const;\n\n\n/**\n * Get WebGL extensions (cached)\n */\nfunction getWebGLExtensions(): string[] {\n try {\n return getCachedWebGLExtensions();\n } catch {\n return [];\n }\n}\n\n/**\n * Get WebGL parameters (cached)\n */\nfunction getWebGLParameters(): Record<string, any> {\n try {\n return getCachedWebGLParameters();\n } catch {\n return {};\n }\n}\n\n/**\n * Get WebGL parameter value safely\n */\nfunction getWebGLParameter(gl: WebGLRenderingContext, param: number): any {\n try {\n return gl.getParameter(param);\n } catch {\n return null;\n }\n}\n\n/**\n * Get shader precision information\n */\nfunction getShaderPrecision(gl: WebGLRenderingContext): { vertex: string; fragment: string } {\n const vertex: string[] = [];\n const fragment: string[] = [];\n \n try {\n const precisionTypes = [gl.LOW_FLOAT, gl.MEDIUM_FLOAT, gl.HIGH_FLOAT, gl.LOW_INT, gl.MEDIUM_INT, gl.HIGH_INT];\n const precisionNames = ['LOW_FLOAT', 'MEDIUM_FLOAT', 'HIGH_FLOAT', 'LOW_INT', 'MEDIUM_INT', 'HIGH_INT'];\n \n for (let i = 0; i < precisionTypes.length; i++) {\n const precisionType = precisionTypes[i];\n if (precisionType === undefined) continue;\n \n const vertexPrecision = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, precisionType);\n const fragmentPrecision = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, precisionType);\n \n if (vertexPrecision) {\n vertex.push(`${precisionNames[i]}:${vertexPrecision.precision},${vertexPrecision.rangeMin},${vertexPrecision.rangeMax}`);\n }\n \n if (fragmentPrecision) {\n fragment.push(`${precisionNames[i]}:${fragmentPrecision.precision},${fragmentPrecision.rangeMin},${fragmentPrecision.rangeMax}`);\n }\n }\n } catch {\n // Precision format not available\n }\n \n return {\n vertex: vertex.join(';'),\n fragment: fragment.join(';')\n };\n}\n\n/**\n * Collect WebGL parameters for fingerprinting\n */\nfunction collectWebGLParameters(gl: WebGLRenderingContext): Record<string, any> {\n const parameters: Record<string, any> = {};\n \n // Collect standard parameters\n Object.entries(WEBGL_PARAMS).forEach(([name, param]) => {\n const value = getWebGLParameter(gl, param);\n if (value !== null) {\n // Convert arrays to strings for consistent serialization\n parameters[name] = Array.isArray(value) ? value.join(',') : value;\n }\n });\n \n // Additional parameters that might be available\n const additionalParams = [\n 'UNMASKED_VENDOR_WEBGL',\n 'UNMASKED_RENDERER_WEBGL'\n ];\n \n additionalParams.forEach(paramName => {\n try {\n const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');\n if (debugInfo) {\n const param = (debugInfo as any)[paramName];\n if (param !== undefined) {\n const value = gl.getParameter(param);\n if (value) {\n parameters[paramName] = value;\n }\n }\n }\n } catch {\n // Debug renderer info not available\n }\n });\n \n return parameters;\n}\n\n/**\n * Create and compile a shader\n */\nfunction createShader(gl: WebGLRenderingContext, type: number, source: string): WebGLShader | null {\n const shader = gl.createShader(type);\n if (!shader) return null;\n \n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n \n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n gl.deleteShader(shader);\n return null;\n }\n \n return shader;\n}\n\n/**\n * Create and link a shader program\n */\nfunction createProgram(gl: WebGLRenderingContext, vertexShader: WebGLShader, fragmentShader: WebGLShader): WebGLProgram | null {\n const program = gl.createProgram();\n if (!program) return null;\n \n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n \n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n gl.deleteProgram(program);\n return null;\n }\n \n return program;\n}\n\n/**\n * Render 3D scene to generate GPU-specific hash\n * Based on FingerprintJS methodology for maximum differentiation\n */\nfunction render3DScene(gl: WebGLRenderingContext): string {\n try {\n // Vertex shader with complex calculations for GPU differentiation\n const vertexShaderSource = `\n attribute vec2 a_position;\n attribute vec3 a_color;\n varying vec3 v_color;\n uniform float u_time;\n \n void main() {\n // Complex mathematical operations to differentiate GPUs\n float wave = sin(a_position.x * 10.0 + u_time) * 0.1;\n vec2 position = a_position + vec2(wave, cos(a_position.y * 8.0) * 0.1);\n \n // GPU-specific floating point calculations\n float precision = sin(position.x * 123.456) + cos(position.y * 789.012);\n position += vec2(precision * 0.001);\n \n gl_Position = vec4(position, 0.0, 1.0);\n v_color = a_color;\n }\n `;\n \n // Fragment shader with GPU-specific precision differences\n const fragmentShaderSource = `\n precision mediump float;\n varying vec3 v_color;\n uniform float u_time;\n \n void main() {\n // Complex color calculations that vary between GPU vendors\n vec3 color = v_color;\n color.r += sin(gl_FragCoord.x * 0.1 + u_time) * 0.1;\n color.g += cos(gl_FragCoord.y * 0.1 + u_time) * 0.1;\n color.b += sin((gl_FragCoord.x + gl_FragCoord.y) * 0.05) * 0.1;\n \n // GPU-specific precision in color calculations\n color = normalize(color) * length(v_color);\n \n gl_FragColor = vec4(color, 1.0);\n }\n `;\n \n // Create shaders\n const vertexShader = createShader(gl, gl.VERTEX_SHADER, vertexShaderSource);\n const fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fragmentShaderSource);\n \n if (!vertexShader || !fragmentShader) {\n // Fallback to basic parameters hash if shader compilation fails\n return generateFallbackWebGLHash(gl);\n }\n \n // Create program\n const program = createProgram(gl, vertexShader, fragmentShader);\n if (!program) {\n // Fallback to basic parameters hash if program creation fails\n return generateFallbackWebGLHash(gl);\n }\n \n gl.useProgram(program);\n \n // Create complex geometry that differentiates GPU rendering\n const vertices = new Float32Array([\n // Triangle 1 (with colors)\n -0.8, -0.6, 1.0, 0.2, 0.3,\n 0.0, 0.8, 0.3, 1.0, 0.2,\n 0.8, -0.6, 0.2, 0.3, 1.0,\n // Triangle 2 (overlapping for blend complexity)\n -0.5, -0.2, 0.8, 0.9, 0.1,\n 0.3, 0.6, 0.1, 0.8, 0.9,\n 0.7, -0.3, 0.9, 0.1, 0.8,\n ]);\n \n const buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);\n \n // Set up attributes\n const positionLocation = gl.getAttribLocation(program, 'a_position');\n const colorLocation = gl.getAttribLocation(program, 'a_color');\n const timeLocation = gl.getUniformLocation(program, 'u_time');\n \n gl.enableVertexAttribArray(positionLocation);\n gl.enableVertexAttribArray(colorLocation);\n \n gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 20, 0);\n gl.vertexAttribPointer(colorLocation, 3, gl.FLOAT, false, 20, 8);\n \n // Set time uniform to create animation-like effects\n gl.uniform1f(timeLocation, 1.23456789);\n \n // Enable blending for more complex GPU calculations\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n \n // Clear with specific color to affect background\n gl.clearColor(0.1, 0.2, 0.3, 1.0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n \n // Draw triangles\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n \n // Read pixels to generate hash\n const pixels = new Uint8Array(gl.canvas.width * gl.canvas.height * 4);\n gl.readPixels(0, 0, gl.canvas.width, gl.canvas.height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n \n // Generate hash from rendered pixels\n let hash = 0;\n for (let i = 0; i < pixels.length; i += 4) {\n // Combine RGBA values with different weights (with null checks)\n const r = (pixels[i] ?? 0) * 1;\n const g = (pixels[i + 1] ?? 0) * 256;\n const b = (pixels[i + 2] ?? 0) * 65536;\n const a = (pixels[i + 3] ?? 0) * 16777216;\n const pixelValue = r + g + b + a;\n hash = (hash * 33 + pixelValue) >>> 0; // Use unsigned 32-bit arithmetic\n }\n \n // Cleanup\n gl.deleteProgram(program);\n gl.deleteShader(vertexShader);\n gl.deleteShader(fragmentShader);\n gl.deleteBuffer(buffer);\n \n return hash.toString(16);\n \n } catch (error) {\n // Fallback to basic parameters hash if rendering fails\n return generateFallbackWebGLHash(gl);\n }\n}\n\n/**\n * Generate fallback WebGL hash when rendering fails\n * Uses basic WebGL parameters to ensure consistent fingerprinting\n */\nfunction generateFallbackWebGLHash(gl: WebGLRenderingContext): string {\n try {\n // Collect basic but stable WebGL parameters\n const vendor = gl.getParameter(gl.VENDOR) || 'unknown';\n const renderer = gl.getParameter(gl.RENDERER) || 'unknown';\n const version = gl.getParameter(gl.VERSION) || 'unknown';\n const maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE) || 0;\n const maxVertexAttribs = gl.getParameter(gl.MAX_VERTEX_ATTRIBS) || 0;\n const maxViewportDims = gl.getParameter(gl.MAX_VIEWPORT_DIMS) || [0, 0];\n \n // Combine parameters into string\n const combined = `${vendor}|${renderer}|${version}|${maxTextureSize}|${maxVertexAttribs}|${maxViewportDims}`;\n \n // Generate simple hash\n let hash = 0;\n for (let i = 0; i < combined.length; i++) {\n const char = combined.charCodeAt(i);\n hash = ((hash << 5) - hash + char) & 0xffffffff;\n }\n \n return `fallback_${Math.abs(hash).toString(16)}`;\n } catch {\n return 'webgl_unavailable';\n }\n}\n\n/**\n * Get advanced WebGL capabilities for differentiation\n */\nfunction getAdvancedWebGLCapabilities(gl: WebGLRenderingContext): Record<string, any> {\n const capabilities: Record<string, any> = {};\n \n try {\n // GPU Memory information (if available)\n const memoryInfo = gl.getExtension('WEBGL_debug_renderer_info');\n if (memoryInfo) {\n capabilities.unmaskedVendor = gl.getParameter(memoryInfo.UNMASKED_VENDOR_WEBGL);\n capabilities.unmaskedRenderer = gl.getParameter(memoryInfo.UNMASKED_RENDERER_WEBGL);\n }\n \n // Texture capabilities\n capabilities.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n capabilities.maxCombinedTextureImageUnits = gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS);\n \n // Viewport and rendering capabilities\n capabilities.maxViewportDims = gl.getParameter(gl.MAX_VIEWPORT_DIMS);\n capabilities.maxRenderbufferSize = gl.getParameter(gl.MAX_RENDERBUFFER_SIZE);\n \n // Vertex and fragment shader limits\n capabilities.maxVertexAttribs = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\n capabilities.maxVertexUniformVectors = gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);\n capabilities.maxFragmentUniformVectors = gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS);\n capabilities.maxVaryingVectors = gl.getParameter(gl.MAX_VARYING_VECTORS);\n \n // Antialiasing support\n capabilities.antialias = gl.getContextAttributes()?.antialias || false;\n \n // Floating point texture support\n const floatTextureExt = gl.getExtension('OES_texture_float');\n capabilities.floatTextures = !!floatTextureExt;\n \n // Half float texture support\n const halfFloatTextureExt = gl.getExtension('OES_texture_half_float');\n capabilities.halfFloatTextures = !!halfFloatTextureExt;\n \n // Compressed texture formats\n const compressedFormats = gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS);\n capabilities.compressedTextureFormats = Array.isArray(compressedFormats) ? compressedFormats.length : 0;\n \n // WebGL 2.0 specific features (if available)\n const isWebGL2 = gl instanceof WebGL2RenderingContext;\n capabilities.webgl2 = isWebGL2;\n \n if (isWebGL2) {\n const gl2 = gl as WebGL2RenderingContext;\n capabilities.maxColorAttachments = gl2.getParameter(gl2.MAX_COLOR_ATTACHMENTS);\n capabilities.maxDrawBuffers = gl2.getParameter(gl2.MAX_DRAW_BUFFERS);\n capabilities.maxTexture3DSize = gl2.getParameter(gl2.MAX_3D_TEXTURE_SIZE);\n }\n \n // Line width range\n const lineWidthRange = gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE);\n capabilities.lineWidthRange = Array.isArray(lineWidthRange) ? lineWidthRange.join(',') : '';\n \n // Point size range\n const pointSizeRange = gl.getParameter(gl.ALIASED_POINT_SIZE_RANGE);\n capabilities.pointSizeRange = Array.isArray(pointSizeRange) ? pointSizeRange.join(',') : '';\n \n } catch (error) {\n // Capabilities detection failed\n }\n \n return capabilities;\n}\n\n/**\n * Generate WebGL fingerprint (enhanced with 3D rendering and advanced capabilities)\n */\nexport async function getWebGLFingerprint(): Promise<FingerprintComponent<WebGLFingerprint>> {\n const startTime = performance.now();\n \n try {\n // Check if WebGL is available for this browser\n if (!isWebGLAvailable()) {\n throw new Error('WebGL not supported in this browser');\n }\n\n const gl = getCachedWebGLContext();\n if (!gl) {\n throw new Error('WebGL context not available');\n }\n\n // Verify context is still valid\n if (!isWebGLContextValid()) {\n throw new Error('WebGL context lost');\n }\n \n // Get basic WebGL information using cached parameters\n const cachedParams = getWebGLParameters();\n const vendor = cachedParams.VENDOR || 'unknown';\n const renderer = cachedParams.RENDERER || 'unknown';\n const version = cachedParams.VERSION || 'unknown';\n \n // ENHANCED: Get unmasked vendor/renderer with retry logic\n let unmaskedVendor = vendor;\n let unmaskedRenderer = renderer;\n \n for (let attempt = 0; attempt < 3; attempt++) {\n try {\n const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');\n if (debugInfo) {\n const vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);\n const renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);\n \n if (vendor && vendor !== 'unknown') unmaskedVendor = vendor;\n if (renderer && renderer !== 'unknown') unmaskedRenderer = renderer;\n break; // Success, exit retry loop\n }\n } catch (error) {\n if (attempt === 2) {\n // Final attempt failed, use fallback\n break;\n }\n // Wait a bit before retry\n await new Promise(resolve => setTimeout(resolve, 10));\n }\n }\n \n // Collect extensions (cached)\n const extensions = getWebGLExtensions();\n \n // Collect parameters (cached)\n const parameters = collectWebGLParameters(gl);\n \n // Get shader precision\n const shaderPrecision = getShaderPrecision(gl);\n \n // ENHANCED: Render 3D scene for GPU-specific hash\n const renderHash = render3DScene(gl);\n \n // ENHANCED: Get advanced capabilities\n const capabilities = getAdvancedWebGLCapabilities(gl);\n \n // ENHANCED: Create vendor/renderer hash for stable identification\n const vendorRendererHash = (() => {\n const vendorStr = unmaskedVendor || vendor || '';\n const rendererStr = unmaskedRenderer || renderer || '';\n const combined = `${vendorStr}|${rendererStr}`.toLowerCase();\n \n // Simple hash function for consistent results\n let hash = 0;\n for (let i = 0; i < combined.length; i++) {\n const char = combined.charCodeAt(i);\n hash = ((hash << 5) - hash + char) & 0xffffffff;\n }\n return Math.abs(hash).toString(16);\n })();\n \n const endTime = performance.now();\n \n const result: WebGLFingerprint = {\n vendor: unmaskedVendor,\n renderer: unmaskedRenderer,\n version,\n extensions,\n parameters,\n shaderPrecision,\n renderHash, // NEW: GPU-specific 3D rendering hash\n capabilities, // NEW: Advanced WebGL capabilities\n vendorRendererHash, // NEW: Stable vendor/renderer identification\n contextAttributes: gl.getContextAttributes() || {} // NEW: Context configuration\n };\n \n return {\n value: result,\n duration: endTime - startTime\n };\n \n } catch (error) {\n return {\n value: {\n vendor: 'unknown',\n renderer: 'unknown',\n version: 'unknown',\n extensions: [],\n parameters: {},\n shaderPrecision: { vertex: '', fragment: '' },\n renderHash: '',\n capabilities: {},\n vendorRendererHash: '',\n contextAttributes: {}\n },\n duration: performance.now() - startTime,\n error: error instanceof Error ? error.message : 'WebGL fingerprinting failed'\n };\n }\n}\n\n/**\n * Singleton instance for WebGL availability check\n */\nlet webglAvailabilityCache: boolean | null = null;\n\n/**\n * Check if WebGL fingerprinting is available (with proper cleanup)\n */\nexport function isWebGLAvailable(): boolean {\n // Use cached result if available\n if (webglAvailabilityCache !== null) {\n return webglAvailabilityCache;\n }\n\n try {\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n \n const gl = canvas.getContext('webgl', { \n failIfMajorPerformanceCaveat: true,\n antialias: false,\n alpha: false,\n depth: false,\n stencil: false,\n preserveDrawingBuffer: false\n }) || canvas.getContext('experimental-webgl', {\n failIfMajorPerformanceCaveat: true,\n antialias: false,\n alpha: false,\n depth: false,\n stencil: false,\n preserveDrawingBuffer: false\n });\n \n const isAvailable = gl !== null;\n \n // Proper cleanup to prevent context leak\n if (gl && 'getExtension' in gl) {\n try {\n const webglContext = gl as WebGLRenderingContext;\n const ext = webglContext.getExtension('WEBGL_lose_context');\n if (ext) {\n ext.loseContext();\n }\n } catch (e) {\n // Ignore cleanup errors\n }\n }\n \n // Clean up canvas\n canvas.width = 0;\n canvas.height = 0;\n \n // Cache the result\n webglAvailabilityCache = isAvailable;\n return isAvailable;\n } catch {\n webglAvailabilityCache = false;\n return false;\n }\n}","/**\n * Enhanced Accessibility & Media Queries Detection Module\n * Based on FingerprintJS accessibility and preference detection with additional queries\n * \n * Detects comprehensive user accessibility preferences and display capabilities:\n * - Motion preferences (reduced motion, prefers animation)\n * - Color preferences (contrast, inverted colors, forced colors)\n * - Display capabilities (color gamut, HDR, monochrome)\n * - Transparency and visual effects preferences\n * - System-level accessibility settings\n */\n\nimport { getBrowserCapabilities } from '../../utils/browser';\n\n/**\n * Error types for accessibility detection\n */\nexport const enum AccessibilityError {\n NotSupported = 'NOT_SUPPORTED',\n MediaQueriesUnavailable = 'MEDIA_QUERIES_UNAVAILABLE',\n BrowserIncompatible = 'BROWSER_INCOMPATIBLE',\n}\n\n/**\n * Color Gamut Detection\n * Detects the range of colors that the display can show\n */\nexport type ColorGamut = 'srgb' | 'p3' | 'rec2020' | 'unknown';\n\nexport function getColorGamut(): ColorGamut {\n try {\n // Check from widest to narrowest (rec2020 includes p3, p3 includes srgb)\n for (const gamut of ['rec2020', 'p3', 'srgb'] as const) {\n const mq = safeMatchMedia(`(color-gamut: ${gamut})`);\n if (mq?.matches) {\n return gamut;\n }\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Forced Colors Detection\n * Detects if the user has enabled high contrast mode\n */\nexport function getForcedColors(): boolean | null {\n try {\n const activeMq = safeMatchMedia('(forced-colors: active)');\n if (activeMq?.matches) {\n return true;\n }\n const noneMq = safeMatchMedia('(forced-colors: none)');\n if (noneMq?.matches) {\n return false;\n }\n return null; // Not supported\n } catch {\n return null;\n }\n}\n\n/**\n * Contrast Preference Detection\n * Detects user's contrast preference\n */\nexport type ContrastPreference = 'no-preference' | 'more' | 'less' | 'forced' | 'unknown';\n\nexport function getContrastPreference(): ContrastPreference {\n try {\n const preferences = ['no-preference', 'high', 'more', 'low', 'less', 'forced'] as const;\n \n for (const preference of preferences) {\n const mq = safeMatchMedia(`(prefers-contrast: ${preference})`);\n if (mq?.matches) {\n // Normalize 'high' to 'more' and 'low' to 'less'\n if (preference === 'high') return 'more';\n if (preference === 'low') return 'less';\n return preference as ContrastPreference;\n }\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Reduced Motion Detection\n * Detects if user prefers reduced motion (accessibility feature)\n */\nexport function getReducedMotion(): boolean | null {\n try {\n const reduceMq = safeMatchMedia('(prefers-reduced-motion: reduce)');\n if (reduceMq?.matches) {\n return true;\n }\n const noPrefMq = safeMatchMedia('(prefers-reduced-motion: no-preference)');\n if (noPrefMq?.matches) {\n return false;\n }\n return null; // Not supported\n } catch {\n return null;\n }\n}\n\n/**\n * Reduced Transparency Detection\n * Detects if user prefers reduced transparency\n */\nexport function getReducedTransparency(): boolean | null {\n try {\n if (matchMedia('(prefers-reduced-transparency: reduce)').matches) {\n return true;\n }\n if (matchMedia('(prefers-reduced-transparency: no-preference)').matches) {\n return false;\n }\n return null; // Not supported\n } catch {\n return null;\n }\n}\n\n/**\n * Monochrome Detection\n * Detects monochrome displays and their bit depth\n */\nexport function getMonochromeDepth(): number {\n try {\n // Test common monochrome bit depths\n for (let depth = 8; depth >= 0; depth--) {\n if (matchMedia(`(monochrome: ${depth})`).matches) {\n return depth;\n }\n }\n return 0; // Color display\n } catch {\n return 0;\n }\n}\n\n/**\n * Inverted Colors Detection\n * Detects if the user has inverted colors enabled\n */\nexport function getInvertedColors(): boolean | null {\n try {\n if (matchMedia('(inverted-colors: inverted)').matches) {\n return true;\n }\n if (matchMedia('(inverted-colors: none)').matches) {\n return false;\n }\n return null; // Not supported\n } catch {\n return null;\n }\n}\n\n/**\n * HDR Support Detection\n * Detects High Dynamic Range display support\n */\nexport function getHDRSupport(): boolean | null {\n try {\n // Check for HDR support using dynamic-range media query\n if (matchMedia('(dynamic-range: high)').matches) {\n return true;\n }\n if (matchMedia('(dynamic-range: standard)').matches) {\n return false;\n }\n return null; // Not supported\n } catch {\n return null;\n }\n}\n\n/**\n * Color Depth Detection\n * Enhanced color depth detection with more granular values\n */\nexport function getEnhancedColorDepth(): number {\n try {\n // Test various color depths\n const depths = [48, 36, 30, 24, 16, 15, 8];\n for (const depth of depths) {\n if (matchMedia(`(color: ${depth})`).matches) {\n return depth;\n }\n }\n return screen.colorDepth || 24; // Fallback to screen property\n } catch {\n return screen.colorDepth || 24;\n }\n}\n\n/**\n * Hover Capability Detection\n * Detects if the primary input mechanism can hover\n */\nexport type HoverCapability = 'none' | 'hover' | 'unknown';\n\nexport function getHoverCapability(): HoverCapability {\n try {\n if (matchMedia('(hover: hover)').matches) {\n return 'hover';\n }\n if (matchMedia('(hover: none)').matches) {\n return 'none';\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Pointer Capability Detection\n * Detects the accuracy of the primary input mechanism\n */\nexport type PointerCapability = 'none' | 'coarse' | 'fine' | 'unknown';\n\nexport function getPointerCapability(): PointerCapability {\n try {\n if (matchMedia('(pointer: fine)').matches) {\n return 'fine';\n }\n if (matchMedia('(pointer: coarse)').matches) {\n return 'coarse';\n }\n if (matchMedia('(pointer: none)').matches) {\n return 'none';\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Check if accessibility detection is available\n * Enhanced with browser compatibility checks\n */\nexport function isAccessibilityDetectionAvailable(): boolean {\n const capabilities = getBrowserCapabilities();\n return capabilities.canRunAccessibility;\n}\n\n/**\n * Safe media query matcher with error handling\n */\nfunction safeMatchMedia(query: string): MediaQueryList | null {\n try {\n if (!isAccessibilityDetectionAvailable()) {\n return null;\n }\n return matchMedia(query);\n } catch (error) {\n // Some browsers might not support specific media queries\n return null;\n }\n}\n\n/**\n * Additional accessibility media queries from FingerprintJS\n */\n\n/**\n * Reduced Data Mode Detection\n * Detects if user has enabled data saving mode\n */\nexport function getReducedData(): boolean | null {\n try {\n if (matchMedia('(prefers-reduced-data: reduce)').matches) {\n return true;\n }\n if (matchMedia('(prefers-reduced-data: no-preference)').matches) {\n return false;\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Display Mode Detection \n * Detects if the application is running in a standalone display mode\n */\nexport type DisplayMode = 'browser' | 'minimal-ui' | 'standalone' | 'fullscreen' | 'unknown';\n\nexport function getDisplayMode(): DisplayMode {\n try {\n const modes: DisplayMode[] = ['fullscreen', 'standalone', 'minimal-ui', 'browser'];\n for (const mode of modes) {\n if (matchMedia(`(display-mode: ${mode})`).matches) {\n return mode;\n }\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Environment Blending Detection\n * Detects how the display is integrated with the environment\n */\nexport type EnvironmentBlending = 'opaque' | 'additive' | 'subtractive' | 'unknown';\n\nexport function getEnvironmentBlending(): EnvironmentBlending {\n try {\n const modes: EnvironmentBlending[] = ['opaque', 'additive', 'subtractive'];\n for (const mode of modes) {\n if (matchMedia(`(environment-blending: ${mode})`).matches) {\n return mode;\n }\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Any Hover Capability Detection\n * Detects if any available input mechanism can hover\n */\nexport function getAnyHover(): boolean | null {\n try {\n if (matchMedia('(any-hover: hover)').matches) {\n return true;\n }\n if (matchMedia('(any-hover: none)').matches) {\n return false;\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Any Pointer Capability Detection\n * Detects the accuracy of any available input mechanism\n */\nexport function getAnyPointer(): PointerCapability {\n try {\n if (matchMedia('(any-pointer: fine)').matches) {\n return 'fine';\n }\n if (matchMedia('(any-pointer: coarse)').matches) {\n return 'coarse';\n }\n if (matchMedia('(any-pointer: none)').matches) {\n return 'none';\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Color Scheme Preference Detection\n * Detects user's preferred color scheme (light/dark mode)\n */\nexport type ColorScheme = 'light' | 'dark' | 'no-preference' | 'unknown';\n\nexport function getColorScheme(): ColorScheme {\n try {\n if (matchMedia('(prefers-color-scheme: dark)').matches) {\n return 'dark';\n }\n if (matchMedia('(prefers-color-scheme: light)').matches) {\n return 'light';\n }\n if (matchMedia('(prefers-color-scheme: no-preference)').matches) {\n return 'no-preference';\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Complete accessibility fingerprint\n */\nexport interface AccessibilityFingerprint {\n // Original properties\n colorGamut: ColorGamut;\n forcedColors: boolean | null;\n contrastPreference: ContrastPreference;\n reducedMotion: boolean | null;\n reducedTransparency: boolean | null;\n monochromeDepth: number;\n invertedColors: boolean | null;\n hdrSupport: boolean | null;\n enhancedColorDepth: number;\n hoverCapability: HoverCapability;\n pointerCapability: PointerCapability;\n \n // New FingerprintJS-inspired properties\n reducedData: boolean | null;\n displayMode: DisplayMode;\n environmentBlending: EnvironmentBlending;\n anyHover: boolean | null;\n anyPointer: PointerCapability;\n colorScheme: ColorScheme;\n \n // Computed properties\n hasAccessibilityFeatures: boolean;\n displayCapabilities: string;\n interactionCapabilities: string;\n}\n\nexport function getAccessibilityFingerprint(): AccessibilityFingerprint {\n // Original properties\n const colorGamut = getColorGamut();\n const forcedColors = getForcedColors();\n const contrastPreference = getContrastPreference();\n const reducedMotion = getReducedMotion();\n const reducedTransparency = getReducedTransparency();\n const monochromeDepth = getMonochromeDepth();\n const invertedColors = getInvertedColors();\n const hdrSupport = getHDRSupport();\n const enhancedColorDepth = getEnhancedColorDepth();\n const hoverCapability = getHoverCapability();\n const pointerCapability = getPointerCapability();\n \n // New FingerprintJS-inspired properties\n const reducedData = getReducedData();\n const displayMode = getDisplayMode();\n const environmentBlending = getEnvironmentBlending();\n const anyHover = getAnyHover();\n const anyPointer = getAnyPointer();\n const colorScheme = getColorScheme();\n\n // Determine if user has accessibility features enabled\n const hasAccessibilityFeatures = Boolean(\n forcedColors ||\n reducedMotion ||\n reducedTransparency ||\n invertedColors ||\n reducedData ||\n contrastPreference !== 'no-preference' ||\n colorScheme !== 'no-preference' ||\n monochromeDepth > 0\n );\n\n // Create display capabilities signature\n const displayCapabilities = [\n colorGamut,\n hdrSupport ? 'hdr' : 'sdr',\n `${enhancedColorDepth}bit`,\n monochromeDepth > 0 ? `mono${monochromeDepth}` : 'color',\n colorScheme,\n displayMode,\n environmentBlending\n ].join('-');\n\n // Create interaction capabilities signature\n const interactionCapabilities = [\n hoverCapability,\n pointerCapability,\n anyHover ? 'anyhover' : 'nohover',\n anyPointer\n ].join('-');\n\n return {\n // Original properties\n colorGamut,\n forcedColors,\n contrastPreference,\n reducedMotion,\n reducedTransparency,\n monochromeDepth,\n invertedColors,\n hdrSupport,\n enhancedColorDepth,\n hoverCapability,\n pointerCapability,\n \n // New properties\n reducedData,\n displayMode,\n environmentBlending,\n anyHover,\n anyPointer,\n colorScheme,\n \n // Computed properties\n hasAccessibilityFeatures,\n displayCapabilities,\n interactionCapabilities,\n };\n}\n\n/**\n * Analyze accessibility fingerprint for confidence and uniqueness\n */\nexport function analyzeAccessibilityFingerprint(fingerprint: AccessibilityFingerprint): {\n confidence: number;\n uniqueness: number;\n accessibilityScore: number;\n modernBrowserScore: number;\n} {\n const features = [\n fingerprint.colorGamut !== 'unknown',\n fingerprint.forcedColors !== null,\n fingerprint.contrastPreference !== 'unknown',\n fingerprint.reducedMotion !== null,\n fingerprint.reducedTransparency !== null,\n fingerprint.invertedColors !== null,\n fingerprint.hdrSupport !== null,\n fingerprint.reducedData !== null,\n fingerprint.displayMode !== 'unknown',\n fingerprint.environmentBlending !== 'unknown',\n fingerprint.anyHover !== null,\n fingerprint.colorScheme !== 'unknown',\n ];\n\n const supportedFeatures = features.filter(Boolean).length;\n const totalFeatures = features.length;\n const confidence = supportedFeatures / totalFeatures;\n\n // Modern browser score based on support for newer features\n const modernFeatures = [\n fingerprint.reducedData !== null,\n fingerprint.displayMode !== 'unknown',\n fingerprint.environmentBlending !== 'unknown',\n fingerprint.colorScheme !== 'unknown',\n fingerprint.hdrSupport !== null,\n ];\n const modernBrowserScore = modernFeatures.filter(Boolean).length / modernFeatures.length;\n\n // Accessibility score based on enabled features\n const accessibilityFeatures = [\n fingerprint.forcedColors === true,\n fingerprint.reducedMotion === true,\n fingerprint.reducedTransparency === true,\n fingerprint.invertedColors === true,\n fingerprint.reducedData === true,\n fingerprint.contrastPreference !== 'no-preference',\n fingerprint.colorScheme === 'dark',\n fingerprint.monochromeDepth > 0,\n ];\n const accessibilityScore = accessibilityFeatures.filter(Boolean).length / accessibilityFeatures.length;\n\n // Uniqueness based on variation from defaults\n const nonDefaultValues = [\n fingerprint.colorGamut !== 'srgb',\n fingerprint.forcedColors === true,\n fingerprint.reducedMotion === true,\n fingerprint.reducedTransparency === true,\n fingerprint.invertedColors === true,\n fingerprint.reducedData === true,\n fingerprint.monochromeDepth > 0,\n fingerprint.hdrSupport === true,\n fingerprint.displayMode !== 'browser',\n fingerprint.environmentBlending !== 'opaque',\n fingerprint.colorScheme === 'dark',\n ];\n const uniqueness = nonDefaultValues.filter(Boolean).length / nonDefaultValues.length;\n\n return {\n confidence: Math.round(confidence * 100) / 100,\n uniqueness: Math.round(uniqueness * 100) / 100,\n accessibilityScore: Math.round(accessibilityScore * 100) / 100,\n modernBrowserScore: Math.round(modernBrowserScore * 100) / 100,\n };\n}","/**\n * DateTime Locale Detection\n * Based on FingerprintJS datetime locale detection\n * \n * This component uses the Intl API to detect user's actual locale preferences\n * which is more accurate than navigator.language and reveals true user settings.\n * \n * Key advantages:\n * - More accurate than navigator.language\n * - Reveals actual system locale settings\n * - Detects number formatting preferences\n * - Shows date/time formatting preferences\n * - Captures currency and timezone preferences\n * \n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/resolvedOptions\n */\n\nexport interface DateTimeLocaleData {\n // Basic locale information\n locale: string;\n calendar: string;\n numberingSystem: string;\n timeZone: string;\n \n // Date/time formatting preferences\n dateStyle: string;\n timeStyle: string;\n hourCycle: string;\n hour12: boolean;\n \n // Number formatting\n numberLocale: string;\n currencyDisplay: string;\n currencySign: string;\n notation: string;\n signDisplay: string;\n \n // Advanced formatting\n listStyle: string;\n relativeTimeStyle: string;\n pluralRules: string;\n \n // Comparison with navigator locale\n navigatorLanguage: string;\n localeMatch: boolean;\n \n // Availability flags\n intlSupport: {\n DateTimeFormat: boolean;\n NumberFormat: boolean;\n RelativeTimeFormat: boolean;\n ListFormat: boolean;\n PluralRules: boolean;\n Collator: boolean;\n };\n}\n\nexport const enum LocaleStatus {\n /** The browser doesn't support Intl API */\n IntlAPINotSupported = -1,\n /** The browser doesn't support DateTimeFormat constructor */\n DateTimeFormatNotSupported = -2,\n /** DateTimeFormat locale is undefined or null */\n LocaleNotAvailable = -3,\n /** NumberFormat is not supported */\n NumberFormatNotSupported = -4,\n}\n\n/**\n * Safely get DateTimeFormat options\n */\nfunction getDateTimeFormatOptions(): Partial<DateTimeLocaleData> | LocaleStatus {\n try {\n if (!window.Intl) {\n return LocaleStatus.IntlAPINotSupported;\n }\n\n const DateTimeFormat = window.Intl.DateTimeFormat;\n if (!DateTimeFormat) {\n return LocaleStatus.DateTimeFormatNotSupported;\n }\n\n const dtf = new DateTimeFormat();\n const options = dtf.resolvedOptions();\n\n if (!options.locale && options.locale !== '') {\n return LocaleStatus.LocaleNotAvailable;\n }\n\n return {\n locale: options.locale || 'unknown',\n calendar: options.calendar || 'unknown',\n numberingSystem: options.numberingSystem || 'unknown',\n timeZone: options.timeZone || 'unknown',\n hourCycle: (options as any).hourCycle || 'unknown',\n hour12: options.hour12 !== undefined ? options.hour12 : false,\n };\n } catch (error) {\n return LocaleStatus.DateTimeFormatNotSupported;\n }\n}\n\n/**\n * Safely get NumberFormat options\n */\nfunction getNumberFormatOptions(): Partial<DateTimeLocaleData> | LocaleStatus {\n try {\n if (!window.Intl || !window.Intl.NumberFormat) {\n return LocaleStatus.NumberFormatNotSupported;\n }\n\n const nf = new Intl.NumberFormat();\n const options = nf.resolvedOptions();\n\n // Test currency formatting\n const currencyFormatter = new Intl.NumberFormat(undefined, { \n style: 'currency', \n currency: 'USD' \n });\n const currencyOptions = currencyFormatter.resolvedOptions();\n\n return {\n numberLocale: options.locale || 'unknown',\n currencyDisplay: currencyOptions.currencyDisplay || 'unknown',\n currencySign: (currencyOptions as any).currencySign || 'unknown',\n notation: (options as any).notation || 'unknown',\n signDisplay: (options as any).signDisplay || 'unknown',\n };\n } catch (error) {\n return LocaleStatus.NumberFormatNotSupported;\n }\n}\n\n/**\n * Get advanced Intl API features\n */\nfunction getAdvancedIntlFeatures(): Partial<DateTimeLocaleData> {\n const features: Partial<DateTimeLocaleData> = {\n listStyle: 'unknown',\n relativeTimeStyle: 'unknown',\n pluralRules: 'unknown',\n };\n\n // Test ListFormat\n try {\n if (window.Intl && (window.Intl as any).ListFormat) {\n const lf = new (window.Intl as any).ListFormat();\n const options = lf.resolvedOptions();\n features.listStyle = options.style || 'unknown';\n }\n } catch (error) {\n // ListFormat not supported\n }\n\n // Test RelativeTimeFormat\n try {\n if (window.Intl && (window.Intl as any).RelativeTimeFormat) {\n const rtf = new (window.Intl as any).RelativeTimeFormat();\n const options = rtf.resolvedOptions();\n features.relativeTimeStyle = options.style || 'unknown';\n }\n } catch (error) {\n // RelativeTimeFormat not supported\n }\n\n // Test PluralRules\n try {\n if (window.Intl && (window.Intl as any).PluralRules) {\n const pr = new (window.Intl as any).PluralRules();\n const rule = pr.select(1);\n features.pluralRules = rule || 'unknown';\n }\n } catch (error) {\n // PluralRules not supported\n }\n\n return features;\n}\n\n/**\n * Check availability of Intl API components\n */\nfunction checkIntlSupport(): DateTimeLocaleData['intlSupport'] {\n const support = {\n DateTimeFormat: false,\n NumberFormat: false,\n RelativeTimeFormat: false,\n ListFormat: false,\n PluralRules: false,\n Collator: false,\n };\n\n try {\n if (window.Intl) {\n support.DateTimeFormat = typeof window.Intl.DateTimeFormat === 'function';\n support.NumberFormat = typeof window.Intl.NumberFormat === 'function';\n support.RelativeTimeFormat = typeof (window.Intl as any).RelativeTimeFormat === 'function';\n support.ListFormat = typeof (window.Intl as any).ListFormat === 'function';\n support.PluralRules = typeof (window.Intl as any).PluralRules === 'function';\n support.Collator = typeof window.Intl.Collator === 'function';\n }\n } catch (error) {\n // All remain false\n }\n\n return support;\n}\n\n/**\n * Get comprehensive datetime locale information\n */\nexport function getDateTimeLocale(): DateTimeLocaleData | LocaleStatus {\n // Get basic datetime formatting\n const dtfOptions = getDateTimeFormatOptions();\n if (typeof dtfOptions === 'number') {\n return dtfOptions; // Return error status\n }\n\n // Get number formatting\n const nfOptions = getNumberFormatOptions();\n const numberOptions = typeof nfOptions === 'number' ? {} : nfOptions;\n\n // Get advanced features\n const advancedFeatures = getAdvancedIntlFeatures();\n\n // Get Intl support information\n const intlSupport = checkIntlSupport();\n\n // Compare with navigator.language\n const navigatorLanguage = navigator.language || 'unknown';\n const localeMatch = dtfOptions.locale === navigatorLanguage;\n\n // Try to get more detailed formatting options\n let dateStyle = 'unknown';\n let timeStyle = 'unknown';\n\n try {\n if (window.Intl && typeof window.Intl.DateTimeFormat === 'function') {\n // Test with specific options to reveal more about formatting preferences\n const longDateFormatter = new Intl.DateTimeFormat(undefined, { dateStyle: 'long' });\n const longTimeFormatter = new Intl.DateTimeFormat(undefined, { timeStyle: 'long' });\n \n const longDateOptions = longDateFormatter.resolvedOptions();\n const longTimeOptions = longTimeFormatter.resolvedOptions();\n \n dateStyle = (longDateOptions as any).dateStyle || 'unknown';\n timeStyle = (longTimeOptions as any).timeStyle || 'unknown';\n }\n } catch (error) {\n // Use defaults\n }\n\n return {\n // Basic information\n locale: dtfOptions.locale || 'unknown',\n calendar: dtfOptions.calendar || 'unknown',\n numberingSystem: dtfOptions.numberingSystem || 'unknown',\n timeZone: dtfOptions.timeZone || 'unknown',\n \n // Date/time formatting\n dateStyle,\n timeStyle,\n hourCycle: dtfOptions.hourCycle || 'unknown',\n hour12: dtfOptions.hour12 || false,\n \n // Number formatting\n numberLocale: numberOptions.numberLocale || dtfOptions.locale || 'unknown',\n currencyDisplay: numberOptions.currencyDisplay || 'unknown',\n currencySign: numberOptions.currencySign || 'unknown',\n notation: numberOptions.notation || 'unknown',\n signDisplay: numberOptions.signDisplay || 'unknown',\n \n // Advanced features\n listStyle: advancedFeatures.listStyle || 'unknown',\n relativeTimeStyle: advancedFeatures.relativeTimeStyle || 'unknown',\n pluralRules: advancedFeatures.pluralRules || 'unknown',\n \n // Comparison data\n navigatorLanguage,\n localeMatch,\n \n // Support information\n intlSupport,\n };\n}\n\n/**\n * Check if datetime locale detection is available\n */\nexport function isDateTimeLocaleAvailable(): boolean {\n try {\n return typeof window !== 'undefined' && \n typeof window.Intl !== 'undefined';\n } catch {\n return false;\n }\n}\n\n/**\n * Analyze datetime locale data for confidence and uniqueness\n */\nexport function analyzeDateTimeLocale(localeData: DateTimeLocaleData): {\n confidence: number;\n uniqueness: number;\n intlApiSupport: number;\n localeComplexity: number;\n} {\n if (typeof localeData === 'number') {\n // It's an error status\n return {\n confidence: 0,\n uniqueness: 0,\n intlApiSupport: 0,\n localeComplexity: 0,\n };\n }\n\n // Count supported Intl features\n const supportedFeatures = Object.values(localeData.intlSupport).filter(Boolean).length;\n const totalFeatures = Object.keys(localeData.intlSupport).length;\n const intlApiSupport = supportedFeatures / totalFeatures;\n\n // Count non-unknown values\n const values = [\n localeData.locale,\n localeData.calendar,\n localeData.numberingSystem,\n localeData.timeZone,\n localeData.dateStyle,\n localeData.timeStyle,\n localeData.hourCycle,\n localeData.numberLocale,\n localeData.currencyDisplay,\n localeData.currencySign,\n localeData.notation,\n localeData.signDisplay,\n localeData.listStyle,\n localeData.relativeTimeStyle,\n localeData.pluralRules,\n ];\n\n const knownValues = values.filter(val => val !== 'unknown' && val !== '').length;\n const confidence = knownValues / values.length;\n\n // Measure locale complexity (more specific = more unique)\n const localeComplexity = [\n localeData.locale.length > 2 ? 1 : 0,\n localeData.calendar !== 'gregory' ? 1 : 0,\n localeData.numberingSystem !== 'latn' ? 1 : 0,\n localeData.hour12 ? 1 : 0,\n !localeData.localeMatch ? 1 : 0,\n ].reduce((sum, val) => sum + val, 0) / 5;\n\n const uniqueness = (confidence + intlApiSupport + localeComplexity) / 3;\n\n return {\n confidence: Math.round(confidence * 100) / 100,\n uniqueness: Math.round(uniqueness * 100) / 100,\n intlApiSupport: Math.round(intlApiSupport * 100) / 100,\n localeComplexity: Math.round(localeComplexity * 100) / 100,\n };\n}\n\n/**\n * Get a compact hash of datetime locale for quick comparison\n */\nexport function getDateTimeLocaleHash(localeData: DateTimeLocaleData): string {\n if (typeof localeData === 'number') {\n return `status-${localeData}`;\n }\n\n const keyValues = [\n localeData.locale,\n localeData.calendar,\n localeData.numberingSystem,\n localeData.timeZone,\n localeData.hourCycle,\n localeData.hour12 ? '1' : '0',\n localeData.localeMatch ? '1' : '0',\n Object.values(localeData.intlSupport).map(b => b ? '1' : '0').join(''),\n ];\n\n return keyValues.join('|');\n}","/**\n * Enhanced Font Preferences Detection with Iframe Isolation\n * Based on FingerprintJS font preferences detection with enhanced security and accuracy\n *\n * This component measures text rendering with different font settings using isolated iframes\n * to detect user's font preferences, OS-specific fonts, and browser rendering differences.\n *\n * Key advantages:\n * - Iframe isolation prevents external interference\n * - Detects OS-specific font rendering and anti-aliasing\n * - Captures user font size preferences and system settings\n * - Reveals browser-specific text rendering differences\n * - Very stable across sessions and difficult to spoof\n * - Enhanced with sub-pixel rendering analysis\n */\n\nimport { isChrome, isWebKit } from \"../../utils/browser\";\nimport { hash32 } from \"./hashing\";\n\nexport interface FontPreferences {\n // Font family measurements\n default: number;\n serif: number;\n sans: number;\n mono: number;\n\n // OS-specific fonts\n apple: number;\n system: number;\n\n // Size tests\n min: number;\n large: number;\n\n // Browser-specific measurements\n ui: number;\n emoji: number;\n math: number;\n\n // Advanced measurements\n cjk: number; // Chinese/Japanese/Korean fonts\n arabic: number; // Arabic script fonts\n hebrew: number; // Hebrew script fonts\n\n // Rendering characteristics\n subpixel: number; // Subpixel rendering differences\n kerning: number; // Kerning differences\n ligatures: number; // Ligature support\n\n // NEW: Enhanced rendering analysis\n antiAliasing: {\n enabled: boolean;\n type: string;\n smoothingLevel: number;\n };\n systemFontHints: {\n clearType: boolean;\n hintingLevel: number;\n subpixelRendering: boolean;\n };\n fallbackBehavior: Record<string, string>;\n isolatedHash: string;\n}\n\n/**\n * Text content for measurements - chosen for maximum variation\n */\nconst defaultText = \"mmMwWLliI0fiflO&1\";\nconst cjkText = \"中文测试\";\nconst arabicText = \"اختبار\";\nconst hebrewText = \"בדיקה\";\nconst emojiText = \"🎯🔥💯\";\nconst mathText = \"∑∆∇∂\";\nconst ligatureText = \"ffi ffl fi fl\";\n\n/**\n * Font measurement presets\n */\ninterface FontPreset {\n style?: Partial<CSSStyleDeclaration>;\n text?: string;\n}\n\nconst presets: Partial<Record<keyof FontPreferences, FontPreset>> = {\n // Basic font families\n default: { text: defaultText },\n serif: {\n style: { fontFamily: \"serif\" },\n text: defaultText,\n },\n sans: {\n style: { fontFamily: \"sans-serif\" },\n text: defaultText,\n },\n mono: {\n style: { fontFamily: \"monospace\" },\n text: defaultText,\n },\n\n // OS-specific fonts\n apple: {\n style: { font: \"-apple-system-body\" },\n text: defaultText,\n },\n system: {\n style: { fontFamily: \"system-ui\" },\n text: defaultText,\n },\n\n // Size variations\n min: {\n style: { fontSize: \"1px\" },\n text: defaultText,\n },\n large: {\n style: { fontSize: \"72px\" },\n text: defaultText,\n },\n\n // Browser UI fonts\n ui: {\n style: { fontFamily: \"ui-serif\" },\n text: defaultText,\n },\n emoji: {\n style: {\n fontFamily: \"Apple Color Emoji, Segoe UI Emoji, Noto Color Emoji\",\n },\n text: emojiText,\n },\n math: {\n style: { fontFamily: \"STIX Two Math, Cambria Math\" },\n text: mathText,\n },\n\n // Script-specific fonts\n cjk: {\n style: { fontFamily: \"Hiragino Sans, Microsoft YaHei, SimSun\" },\n text: cjkText,\n },\n arabic: {\n style: { fontFamily: \"Tahoma, Arial Unicode MS\" },\n text: arabicText,\n },\n hebrew: {\n style: { fontFamily: \"Tahoma, Arial Unicode MS\" },\n text: hebrewText,\n },\n\n // Advanced rendering features\n subpixel: {\n style: {\n fontFamily: \"Arial\",\n fontSize: \"11px\",\n textRendering: \"optimizeLegibility\",\n },\n text: defaultText,\n },\n kerning: {\n style: {\n fontFamily: \"Times\",\n fontSize: \"24px\",\n fontKerning: \"normal\",\n },\n text: \"AV To\",\n },\n ligatures: {\n style: {\n fontFamily: \"Times\",\n fontSize: \"24px\",\n fontVariantLigatures: \"common-ligatures\",\n },\n text: ligatureText,\n },\n};\n\n/**\n * Analyze rendering quality to detect anti-aliasing and font smoothing\n */\nfunction analyzeRenderingQuality(\n iframeDoc: Document,\n container: HTMLElement,\n fontFamily: string = \"Arial\"\n): { quality: number; antiAliasing: boolean; smoothing: number } {\n try {\n // Create canvas for pixel analysis\n const canvas = iframeDoc.createElement(\"canvas\");\n canvas.width = 100;\n canvas.height = 50;\n const ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n\n if (!ctx) return { quality: 0, antiAliasing: false, smoothing: 0 };\n\n // Draw text at sub-pixel position to trigger anti-aliasing\n ctx.font = `24px \"${fontFamily}\"`;\n ctx.fillStyle = \"#000000\";\n ctx.fillText(\"Wg\", 10.5, 30.7);\n\n // Analyze pixel data for anti-aliasing detection\n const imageData = ctx.getImageData(10, 20, 30, 20);\n const pixels = imageData.data;\n\n let edgePixels = 0;\n let grayscalePixels = 0;\n let totalNonWhitePixels = 0;\n\n for (let i = 0; i < pixels.length; i += 4) {\n const r = pixels[i] || 0;\n const g = pixels[i + 1] || 0;\n const b = pixels[i + 2] || 0;\n const alpha = pixels[i + 3] || 0;\n\n // Skip transparent pixels\n if (alpha < 10) continue;\n\n totalNonWhitePixels++;\n\n // Detect grayscale pixels (anti-aliasing indicator)\n if (r === g && g === b && r > 0 && r < 255) {\n grayscalePixels++;\n }\n\n // Detect edge transitions\n if (i > 4 && Math.abs(r - (pixels[i - 4] || 0)) > 50) {\n edgePixels++;\n }\n }\n\n const antiAliasingRatio =\n totalNonWhitePixels > 0 ? grayscalePixels / totalNonWhitePixels : 0;\n const smoothingLevel =\n totalNonWhitePixels > 0\n ? (grayscalePixels * 100) / totalNonWhitePixels\n : 0;\n\n return {\n quality: Math.round(smoothingLevel),\n antiAliasing: antiAliasingRatio > 0.1,\n smoothing: Math.round(smoothingLevel * 100) / 100,\n };\n } catch (error) {\n return { quality: 0, antiAliasing: false, smoothing: 0 };\n }\n}\n\n/**\n * Detect system font hinting and ClearType\n */\nfunction detectSystemFontHints(\n iframeDoc: Document,\n container: HTMLElement\n): {\n clearType: boolean;\n hintingLevel: number;\n subpixelRendering: boolean;\n} {\n try {\n const canvas = iframeDoc.createElement(\"canvas\");\n canvas.width = 100;\n canvas.height = 50;\n const ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n\n if (!ctx) {\n return { clearType: false, hintingLevel: 0, subpixelRendering: false };\n }\n\n // Test with known problematic character combinations\n const testTexts = [\"rn\", \"il\", \"WW\", \"mm\"];\n let clearTypeIndicators = 0;\n let subpixelIndicators = 0;\n let hintingScore = 0;\n\n for (const text of testTexts) {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.font = \"16px Arial\";\n ctx.fillStyle = \"#000\";\n ctx.fillText(text, 10, 25);\n\n const imageData = ctx.getImageData(10, 15, 40, 20);\n const pixels = imageData.data;\n\n // Analyze RGB sub-pixel rendering patterns\n for (let i = 0; i < pixels.length; i += 12) {\n // Check every 3rd pixel\n const r1 = pixels[i] || 0;\n const g1 = pixels[i + 1] || 0;\n const b1 = pixels[i + 2] || 0;\n const r2 = pixels[i + 4] || 0;\n const g2 = pixels[i + 5] || 0;\n const b2 = pixels[i + 6] || 0;\n\n // ClearType creates RGB fringing\n if (Math.abs(r1 - g1) > 20 || Math.abs(g1 - b1) > 20) {\n clearTypeIndicators++;\n }\n\n // Sub-pixel rendering shows color channel differences\n if (Math.abs(r1 - r2) + Math.abs(g1 - g2) + Math.abs(b1 - b2) > 50) {\n subpixelIndicators++;\n }\n\n // Font hinting creates consistent patterns\n if (\n (r1 > 0 && r1 < 255) ||\n (g1 > 0 && g1 < 255) ||\n (b1 > 0 && b1 < 255)\n ) {\n hintingScore++;\n }\n }\n }\n\n return {\n clearType: clearTypeIndicators > 10,\n hintingLevel: Math.min(Math.round(hintingScore / 10), 5),\n subpixelRendering: subpixelIndicators > 5,\n };\n } catch (error) {\n return {\n clearType: false,\n hintingLevel: 0,\n subpixelRendering: false,\n };\n }\n}\n\n/**\n * Test font fallback behavior\n */\nfunction testFontFallback(\n iframeDoc: Document,\n container: HTMLElement,\n fontFamily: string\n): string {\n try {\n const testString = \"mmmmmmmmmmlli\"; // Characters that vary significantly between fonts\n\n // Measure with specified font\n const withFont = measureText(iframeDoc, container, {\n style: { fontFamily },\n text: testString,\n });\n\n // Measure with known fallback\n const withFallback = measureText(iframeDoc, container, {\n style: { fontFamily: \"monospace\" },\n text: testString,\n });\n\n // Compare dimensions to detect fallback\n const widthDiff = Math.abs(withFont - withFallback);\n\n if (widthDiff < 1) {\n return \"monospace-fallback\";\n }\n\n const withSansSerif = measureText(iframeDoc, container, {\n style: { fontFamily: \"sans-serif\" },\n text: testString,\n });\n\n const sansWidthDiff = Math.abs(withFont - withSansSerif);\n\n if (sansWidthDiff < 1) {\n return \"sans-serif-fallback\";\n }\n\n return \"native-font\";\n } catch (error) {\n return \"fallback-error\";\n }\n}\n\n/**\n * Create measurement iframe for isolated font rendering\n */\nfunction createMeasurementIframe(): Promise<{\n document: Document;\n container: HTMLElement;\n cleanup: () => void;\n}> {\n return new Promise((resolve, reject) => {\n const iframe = document.createElement(\"iframe\");\n\n // Iframe HTML with proper viewport for Android font size detection\n const iframeHtml = `<!doctype html>\n <html>\n <head>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <style>\n body { \n margin: 0; \n padding: 20px; \n width: 4000px;\n text-size-adjust: none;\n -webkit-text-size-adjust: none;\n }\n </style>\n </head>\n <body></body>\n </html>`;\n\n // Hide iframe\n iframe.style.cssText =\n \"position: absolute; left: -9999px; top: -9999px; width: 1px; height: 1px; opacity: 0;\";\n iframe.srcdoc = iframeHtml;\n\n iframe.onload = () => {\n try {\n const iframeDocument = iframe.contentDocument;\n const iframeWindow = iframe.contentWindow;\n\n if (!iframeDocument || !iframeWindow) {\n reject(new Error(\"Cannot access iframe content\"));\n return;\n }\n\n const body = iframeDocument.body;\n\n // Apply zoom correction for better precision\n if (isChrome()) {\n body.style.zoom = `${1 / iframeWindow.devicePixelRatio}`;\n } else if (isWebKit()) {\n body.style.zoom = \"reset\";\n }\n\n // Add dummy content for Android font size detection\n const dummyText = iframeDocument.createElement(\"div\");\n dummyText.textContent = Array(200).fill(\"word\").join(\" \");\n body.appendChild(dummyText);\n\n const cleanup = () => {\n if (iframe.parentNode) {\n iframe.parentNode.removeChild(iframe);\n }\n };\n\n resolve({\n document: iframeDocument,\n container: body,\n cleanup,\n });\n } catch (error) {\n reject(error);\n }\n };\n\n iframe.onerror = () => {\n reject(new Error(\"Failed to load iframe\"));\n };\n\n document.body.appendChild(iframe);\n });\n}\n\n/**\n * Measure text width with specific font settings\n */\nfunction measureText(\n document: Document,\n container: HTMLElement,\n preset: FontPreset\n): number {\n const element = document.createElement(\"span\");\n const { style = {}, text = defaultText } = preset;\n\n // Set text content\n element.textContent = text;\n\n // Apply base styles\n element.style.cssText =\n \"position: absolute; left: 0; top: 0; white-space: nowrap; visibility: hidden;\";\n\n // Apply preset styles\n Object.entries(style).forEach(([key, value]) => {\n if (value !== undefined) {\n (element.style as any)[key] = value;\n }\n });\n\n // Add to DOM and measure\n container.appendChild(element);\n const width = element.getBoundingClientRect().width;\n container.removeChild(element);\n\n return Math.round(width * 100) / 100; // Round to 2 decimal places\n}\n\n/**\n * Get enhanced font preferences fingerprint with iframe isolation\n */\nexport async function getFontPreferences(): Promise<FontPreferences> {\n try {\n const {\n document: iframeDoc,\n container,\n cleanup,\n } = await createMeasurementIframe();\n\n const measurements: Partial<FontPreferences> = {};\n\n // Measure all presets\n for (const [key, preset] of Object.entries(presets)) {\n try {\n (measurements as any)[key] = measureText(iframeDoc, container, preset);\n } catch (error) {\n // Fallback to 0 if measurement fails\n (measurements as any)[key] = 0;\n }\n }\n\n // NEW: Enhanced rendering analysis\n const renderingAnalysis = analyzeRenderingQuality(\n iframeDoc,\n container,\n \"Arial\"\n );\n const systemHints = detectSystemFontHints(iframeDoc, container);\n\n // NEW: Test fallback behavior for common fonts\n const fallbackBehavior: Record<string, string> = {};\n const commonFonts = [\n \"Arial\",\n \"Helvetica\",\n \"Times New Roman\",\n \"Georgia\",\n \"Courier New\",\n ];\n\n for (const font of commonFonts) {\n try {\n fallbackBehavior[font] = testFontFallback(iframeDoc, container, font);\n } catch (error) {\n fallbackBehavior[font] = \"fallback-error\";\n }\n }\n\n // NEW: Create comprehensive hash for isolation verification\n const hashComponents = [\n JSON.stringify(measurements),\n JSON.stringify(renderingAnalysis),\n JSON.stringify(systemHints),\n JSON.stringify(fallbackBehavior),\n ];\n\n const isolatedHash = hash32(hashComponents.join(\"|\"));\n\n cleanup();\n\n return {\n ...(measurements as Omit<\n FontPreferences,\n \"antiAliasing\" | \"systemFontHints\" | \"fallbackBehavior\" | \"isolatedHash\"\n >),\n antiAliasing: {\n enabled: renderingAnalysis.antiAliasing,\n type: systemHints.clearType\n ? \"cleartype\"\n : renderingAnalysis.antiAliasing\n ? \"standard\"\n : \"none\",\n smoothingLevel: renderingAnalysis.smoothing,\n },\n systemFontHints: systemHints,\n fallbackBehavior,\n isolatedHash,\n };\n } catch (error) {\n // Return fallback measurements if iframe creation fails\n const fallbackMeasurements = Object.keys(presets).reduce((acc, key) => {\n acc[key as keyof FontPreferences] = 0;\n return acc;\n }, {} as any);\n\n return {\n ...fallbackMeasurements,\n antiAliasing: { enabled: false, type: \"unknown\", smoothingLevel: 0 },\n systemFontHints: {\n clearType: false,\n hintingLevel: 0,\n subpixelRendering: false,\n },\n fallbackBehavior: {},\n isolatedHash: \"error\",\n };\n }\n}\n\n/**\n * Check if font preferences detection is available\n */\nexport function isFontPreferencesAvailable(): boolean {\n try {\n return (\n typeof document !== \"undefined\" &&\n typeof document.createElement === \"function\" &&\n typeof document.body !== \"undefined\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Analyze enhanced font preferences for confidence and uniqueness\n */\nexport function analyzeFontPreferences(preferences: FontPreferences): {\n confidence: number;\n uniqueness: number;\n hasSystemFonts: boolean;\n hasAdvancedFeatures: boolean;\n renderingQuality: \"high\" | \"medium\" | \"low\";\n isolationIntegrity: boolean;\n} {\n // Get numeric measurements (excluding enhanced objects)\n const numericValues = [\n preferences.default,\n preferences.serif,\n preferences.sans,\n preferences.mono,\n preferences.apple,\n preferences.system,\n preferences.min,\n preferences.large,\n preferences.ui,\n preferences.emoji,\n preferences.math,\n preferences.cjk,\n preferences.arabic,\n preferences.hebrew,\n preferences.subpixel,\n preferences.kerning,\n preferences.ligatures,\n ];\n\n // Check if we have real measurements (not all zeros)\n const hasRealValues = numericValues.some((val) => val > 0);\n const nonZeroCount = numericValues.filter((val) => val > 0).length;\n const totalCount = numericValues.length;\n\n let confidence = hasRealValues ? nonZeroCount / totalCount : 0;\n\n // Boost confidence if enhanced features are working\n if (\n preferences.antiAliasing.enabled ||\n preferences.systemFontHints.clearType\n ) {\n confidence += 0.2;\n }\n\n if (Object.keys(preferences.fallbackBehavior).length > 0) {\n confidence += 0.1;\n }\n\n confidence = Math.min(confidence, 1);\n\n // Check for system font support\n const hasSystemFonts = preferences.apple > 0 || preferences.system > 0;\n\n // Check for advanced rendering features\n const hasAdvancedFeatures =\n [\n preferences.subpixel,\n preferences.kerning,\n preferences.ligatures,\n preferences.emoji,\n preferences.math,\n ].some((val) => val > 0) ||\n preferences.antiAliasing.enabled ||\n preferences.systemFontHints.clearType;\n\n // Calculate uniqueness based on measurement variance\n const average =\n numericValues.reduce((sum, val) => sum + val, 0) / numericValues.length;\n const variance =\n numericValues.reduce((sum, val) => sum + Math.pow(val - average, 2), 0) /\n numericValues.length;\n let uniqueness = Math.min(variance / 100, 1); // Normalize to 0-1\n\n // Boost uniqueness with enhanced features\n if (preferences.antiAliasing.smoothingLevel > 0) {\n uniqueness += 0.1;\n }\n\n if (preferences.systemFontHints.hintingLevel > 0) {\n uniqueness += 0.1;\n }\n\n uniqueness = Math.min(uniqueness, 1);\n\n // Determine rendering quality\n let renderingQuality: \"high\" | \"medium\" | \"low\" = \"low\";\n const smoothingLevel = preferences.antiAliasing.smoothingLevel;\n\n if (smoothingLevel > 50 || preferences.systemFontHints.clearType) {\n renderingQuality = \"high\";\n } else if (\n smoothingLevel > 20 ||\n preferences.systemFontHints.hintingLevel > 2\n ) {\n renderingQuality = \"medium\";\n }\n\n // Check isolation integrity\n const isolationIntegrity =\n preferences.isolatedHash !== \"error\" && preferences.isolatedHash.length > 0;\n\n return {\n confidence: Math.round(confidence * 100) / 100,\n uniqueness: Math.round(uniqueness * 100) / 100,\n hasSystemFonts,\n hasAdvancedFeatures,\n renderingQuality,\n isolationIntegrity,\n };\n}\n\n/**\n * Get a compact hash of enhanced font preferences for quick comparison\n */\nexport function getFontPreferencesHash(preferences: FontPreferences): string {\n // Use the isolated hash if available (most comprehensive)\n if (preferences.isolatedHash && preferences.isolatedHash !== \"error\") {\n return preferences.isolatedHash;\n }\n\n // Fallback to creating hash from numeric values\n const numericValues = [\n preferences.default,\n preferences.serif,\n preferences.sans,\n preferences.mono,\n preferences.apple,\n preferences.system,\n preferences.min,\n preferences.large,\n preferences.ui,\n preferences.emoji,\n preferences.math,\n preferences.cjk,\n preferences.arabic,\n preferences.hebrew,\n preferences.subpixel,\n preferences.kerning,\n preferences.ligatures,\n ].map((val) => Math.round(val));\n\n // Include rendering characteristics in fallback hash\n const renderingIndicators = [\n preferences.antiAliasing.enabled ? 1 : 0,\n preferences.systemFontHints.clearType ? 1 : 0,\n preferences.systemFontHints.hintingLevel,\n Math.round(preferences.antiAliasing.smoothingLevel),\n ];\n\n return [...numericValues, ...renderingIndicators].join(\",\");\n}\n","/**\n * Enhanced Font Detection with Iframe Isolation\n * Based on FingerprintJS advanced font detection techniques\n * \n * Key improvements over basic font detection:\n * - Uses iframe isolation to prevent CSS interference\n * - More comprehensive font list from FingerprintJS\n * - Better measurement precision\n * - Fallback compatibility for various browsers\n */\n\nexport interface EnhancedFontFingerprint {\n available: string[];\n method: 'iframe' | 'dom' | 'fallback';\n measurements: Record<string, { width: number; height: number }>;\n precision: number;\n totalTested: number;\n detectionTime: number;\n}\n\n/**\n * Comprehensive font list from FingerprintJS\n * These fonts are carefully chosen to maximize OS and browser differentiation\n */\nconst FINGERPRINT_FONTS = [\n // Android-specific font\n 'sans-serif-thin',\n \n // Professional fonts\n 'ARNO PRO',\n 'Agency FB', \n 'Arabic Typesetting',\n 'Arial Unicode MS',\n 'AvantGarde Bk BT',\n 'BankGothic Md BT',\n 'Batang',\n 'Bitstream Vera Sans Mono',\n 'Calibri',\n 'Century',\n 'Century Gothic',\n 'Clarendon',\n 'EUROSTILE',\n 'Franklin Gothic',\n 'Futura Bk BT',\n 'Futura Md BT',\n 'GOTHAM',\n 'Gill Sans',\n 'HELV',\n 'Haettenschweiler',\n 'Helvetica Neue',\n 'Humanst521 BT',\n 'Leelawadee',\n 'Letter Gothic',\n 'Levenim MT',\n 'Lucida Bright',\n 'Lucida Sans',\n 'Menlo',\n 'MS Mincho',\n 'MS Outlook',\n 'MS Reference Specialty',\n 'MS UI Gothic',\n 'MT Extra',\n 'MYRIAD PRO',\n 'Marlett',\n 'Meiryo UI',\n 'Microsoft Uighur',\n 'Minion Pro',\n 'Monotype Corsiva',\n 'PMingLiU',\n 'Pristina',\n 'SCRIPTINA',\n 'Segoe UI Light',\n 'Serifa',\n 'SimHei',\n 'Small Fonts',\n 'Staccato222 BT',\n 'TRAJAN PRO',\n 'Univers CE 55 Medium',\n 'Vrinda',\n 'ZWAdobeF',\n \n // Additional commonly available system fonts\n 'Arial',\n 'Arial Black',\n 'Comic Sans MS',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Palatino Linotype',\n 'Tahoma',\n 'Times New Roman',\n 'Trebuchet MS',\n 'Verdana',\n \n // macOS specific\n 'American Typewriter',\n 'Avenir',\n 'Baskerville',\n 'Big Caslon',\n 'Brush Script MT',\n 'Copperplate',\n 'Didot',\n 'Futura',\n 'Helvetica',\n 'Hoefler Text',\n 'Lucida Grande',\n 'Marker Felt',\n 'Optima',\n 'Papyrus',\n 'Phosphate',\n 'Rockwell',\n 'Savoye LET',\n 'SignPainter',\n 'Skia',\n 'Snell Roundhand',\n 'Zapfino',\n \n // Linux specific\n 'DejaVu Sans',\n 'DejaVu Sans Mono',\n 'DejaVu Serif',\n 'Liberation Sans',\n 'Liberation Serif',\n 'Ubuntu',\n 'Ubuntu Mono',\n] as const;\n\n// Text chosen for maximum width variation between fonts\nconst TEST_STRING = 'mmMwWLliI0O&1';\nconst TEXT_SIZE = '48px';\nconst BASE_FONTS = ['monospace', 'sans-serif', 'serif'] as const;\n\n/**\n * Create isolated iframe for font measurement\n * This prevents page CSS from affecting measurements\n */\nfunction createFontMeasurementIframe(): Promise<{\n document: Document;\n body: HTMLElement;\n cleanup: () => void;\n}> {\n return new Promise((resolve, reject) => {\n const iframe = document.createElement('iframe');\n \n // Hide iframe completely\n iframe.style.cssText = 'position: absolute; left: -9999px; top: -9999px; width: 1px; height: 1px; opacity: 0; pointer-events: none;';\n \n iframe.onload = () => {\n try {\n const iframeDocument = iframe.contentDocument;\n if (!iframeDocument) {\n throw new Error('Cannot access iframe document');\n }\n \n const body = iframeDocument.body;\n if (!body) {\n throw new Error('Iframe body not available');\n }\n \n // Set up measurement environment\n body.style.fontSize = TEXT_SIZE;\n body.style.margin = '0';\n body.style.padding = '0';\n \n const cleanup = () => {\n if (iframe.parentNode) {\n iframe.parentNode.removeChild(iframe);\n }\n };\n \n resolve({\n document: iframeDocument,\n body,\n cleanup\n });\n } catch (error) {\n reject(error);\n }\n };\n \n iframe.onerror = () => {\n reject(new Error('Failed to load font measurement iframe'));\n };\n \n // Add to DOM to trigger load\n document.body.appendChild(iframe);\n });\n}\n\n/**\n * Create measurement span in iframe\n */\nfunction createMeasurementSpan(\n document: Document,\n fontFamily: string\n): HTMLSpanElement {\n const span = document.createElement('span');\n span.style.position = 'absolute';\n span.style.top = '0';\n span.style.left = '0';\n span.style.fontFamily = fontFamily;\n span.style.fontSize = TEXT_SIZE;\n span.style.whiteSpace = 'nowrap';\n span.textContent = TEST_STRING;\n \n return span;\n}\n\n/**\n * Create span with font to detect and base font fallback\n */\nfunction createSpanWithFonts(\n document: Document,\n fontToDetect: string,\n baseFont: string\n): HTMLSpanElement {\n return createMeasurementSpan(document, `'${fontToDetect}',${baseFont}`);\n}\n\n/**\n * Check if font is available by comparing measurements\n */\nfunction isFontAvailable(\n fontSpans: HTMLSpanElement[],\n defaultMeasurements: Record<string, { width: number; height: number }>\n): boolean {\n return BASE_FONTS.some((baseFont, index) => {\n const span = fontSpans[index];\n const defaultSize = defaultMeasurements[baseFont];\n \n // Check if span exists before accessing properties\n if (!span || !defaultSize) {\n return false;\n }\n \n return (\n span.offsetWidth !== defaultSize.width ||\n span.offsetHeight !== defaultSize.height\n );\n });\n}\n\n/**\n * Enhanced font detection using iframe isolation\n */\nexport async function getEnhancedFontFingerprint(): Promise<EnhancedFontFingerprint> {\n const startTime = performance.now();\n \n try {\n const { document: iframeDoc, body, cleanup } = await createFontMeasurementIframe();\n \n try {\n // Create container for spans\n const spansContainer = iframeDoc.createElement('div');\n spansContainer.style.setProperty('visibility', 'hidden', 'important');\n \n // Measure base fonts first\n const baseFontSpans = BASE_FONTS.map(font => createMeasurementSpan(iframeDoc, font));\n baseFontSpans.forEach(span => spansContainer.appendChild(span));\n \n // Create spans for fonts to detect\n const fontSpans: Record<string, HTMLSpanElement[]> = {};\n for (const font of FINGERPRINT_FONTS) {\n fontSpans[font] = BASE_FONTS.map(baseFont => \n createSpanWithFonts(iframeDoc, font, baseFont)\n );\n fontSpans[font].forEach(span => spansContainer.appendChild(span));\n }\n \n // Add all spans to DOM\n body.appendChild(spansContainer);\n \n // Get default measurements for base fonts\n const defaultMeasurements: Record<string, { width: number; height: number }> = {};\n BASE_FONTS.forEach((font, index) => {\n const span = baseFontSpans[index];\n if (span) {\n defaultMeasurements[font] = {\n width: span.offsetWidth,\n height: span.offsetHeight\n };\n }\n });\n \n // Check which fonts are available and collect measurements\n const availableFonts: string[] = [];\n const measurements: Record<string, { width: number; height: number }> = {};\n \n for (const font of FINGERPRINT_FONTS) {\n const spans = fontSpans[font];\n if (!spans) continue; // Skip if spans are undefined\n \n const isAvailable = isFontAvailable(spans, defaultMeasurements);\n \n if (isAvailable) {\n availableFonts.push(font);\n }\n \n // Store measurement from first span for analysis\n if (spans.length > 0 && spans[0]) {\n measurements[font] = {\n width: spans[0].offsetWidth,\n height: spans[0].offsetHeight\n };\n }\n }\n \n const detectionTime = performance.now() - startTime;\n \n // Calculate precision based on measurement variance\n const widths = Object.values(measurements).map(m => m.width);\n const uniqueWidths = new Set(widths).size;\n const precision = uniqueWidths / widths.length;\n \n return {\n available: availableFonts,\n method: 'iframe',\n measurements,\n precision,\n totalTested: FINGERPRINT_FONTS.length,\n detectionTime\n };\n \n } finally {\n cleanup();\n }\n \n } catch (error) {\n // Fallback to DOM-based detection if iframe fails\n return getFallbackFontDetection(startTime);\n }\n}\n\n/**\n * Fallback font detection using direct DOM manipulation\n */\nfunction getFallbackFontDetection(startTime: number): EnhancedFontFingerprint {\n const availableFonts: string[] = [];\n const measurements: Record<string, { width: number; height: number }> = {};\n \n try {\n // Create measurement container\n const container = document.createElement('div');\n container.style.cssText = 'position: absolute; left: -9999px; top: -9999px; visibility: hidden;';\n \n // Create base font spans\n const baseMeasurements: Record<string, { width: number; height: number }> = {};\n BASE_FONTS.forEach(font => {\n const span = document.createElement('span');\n span.style.fontFamily = font;\n span.style.fontSize = TEXT_SIZE;\n span.style.whiteSpace = 'nowrap';\n span.textContent = TEST_STRING;\n \n container.appendChild(span);\n document.body.appendChild(container);\n \n baseMeasurements[font] = {\n width: span.offsetWidth,\n height: span.offsetHeight\n };\n \n document.body.removeChild(container);\n container.removeChild(span);\n });\n \n // Test each font\n for (const font of FINGERPRINT_FONTS) {\n let isAvailable = false;\n \n for (const baseFont of BASE_FONTS) {\n const span = document.createElement('span');\n span.style.fontFamily = `'${font}',${baseFont}`;\n span.style.fontSize = TEXT_SIZE;\n span.style.whiteSpace = 'nowrap';\n span.textContent = TEST_STRING;\n \n container.appendChild(span);\n document.body.appendChild(container);\n \n const measurement = {\n width: span.offsetWidth,\n height: span.offsetHeight\n };\n \n measurements[font] = measurement;\n \n // Check if different from base font\n const baseSize = baseMeasurements[baseFont];\n if (baseSize && (measurement.width !== baseSize.width || measurement.height !== baseSize.height)) {\n isAvailable = true;\n }\n \n document.body.removeChild(container);\n container.removeChild(span);\n \n if (isAvailable) break; // Found difference, font is available\n }\n \n if (isAvailable) {\n availableFonts.push(font);\n }\n }\n \n } catch (error) {\n // If everything fails, return minimal data\n }\n \n const detectionTime = performance.now() - startTime;\n const widths = Object.values(measurements).map(m => m.width);\n const uniqueWidths = new Set(widths).size;\n const precision = widths.length > 0 ? uniqueWidths / widths.length : 0;\n \n return {\n available: availableFonts,\n method: 'dom',\n measurements,\n precision,\n totalTested: FINGERPRINT_FONTS.length,\n detectionTime\n };\n}\n\n/**\n * Check if enhanced font detection is available\n */\nexport function isEnhancedFontDetectionAvailable(): boolean {\n try {\n return typeof document !== 'undefined' &&\n typeof document.createElement === 'function' &&\n typeof document.body !== 'undefined';\n } catch {\n return false;\n }\n}\n\n/**\n * Analyze enhanced font fingerprint for confidence and uniqueness\n */\nexport function analyzeEnhancedFontFingerprint(fingerprint: EnhancedFontFingerprint): {\n confidence: number;\n uniqueness: number;\n osSignature: string;\n browserCapabilities: number;\n} {\n const { available, method, precision, totalTested, detectionTime } = fingerprint;\n \n // Confidence based on method used and precision\n let confidence = 0.5;\n if (method === 'iframe') confidence = 0.9;\n else if (method === 'dom') confidence = 0.7;\n \n confidence *= precision; // Adjust by measurement precision\n \n // OS signature based on font patterns\n const windowsFonts = available.filter(f => \n ['Calibri', 'Segoe UI Light', 'MS UI Gothic', 'Arial Unicode MS'].includes(f)\n ).length;\n \n const macOSFonts = available.filter(f =>\n ['Helvetica Neue', 'Avenir', 'Menlo', 'Zapfino', 'Baskerville'].includes(f)\n ).length;\n \n const linuxFonts = available.filter(f =>\n ['DejaVu Sans', 'Liberation Sans', 'Ubuntu'].includes(f)\n ).length;\n \n const androidFonts = available.filter(f =>\n ['sans-serif-thin', 'Roboto'].includes(f)\n ).length;\n \n let osSignature = 'unknown';\n if (windowsFonts >= 2) osSignature = 'windows';\n else if (macOSFonts >= 2) osSignature = 'macos';\n else if (linuxFonts >= 1) osSignature = 'linux';\n else if (androidFonts >= 1) osSignature = 'android';\n \n // Browser capabilities score\n const browserCapabilities = Math.min(detectionTime < 100 ? 1 : 0.8, 1);\n \n // Uniqueness based on font combination rarity\n const commonFonts = ['Arial', 'Times New Roman', 'Helvetica'];\n const rareFonts = available.filter(f => !commonFonts.includes(f));\n const uniqueness = Math.min(rareFonts.length / 10, 1);\n \n return {\n confidence: Math.round(confidence * 100) / 100,\n uniqueness: Math.round(uniqueness * 100) / 100,\n osSignature,\n browserCapabilities: Math.round(browserCapabilities * 100) / 100\n };\n}\n\n/**\n * Get a compact hash of the font fingerprint\n */\nexport function getEnhancedFontFingerprintHash(fingerprint: EnhancedFontFingerprint): string {\n const sortedFonts = fingerprint.available.sort();\n return `${sortedFonts.join(',')}|${fingerprint.method}|${fingerprint.precision.toFixed(2)}`;\n}","/**\n * Enhanced Math Fingerprinting\n * Based on FingerprintJS math fingerprinting with additional precision tests\n * \n * This component tests JavaScript math operations precision which varies between:\n * - Different JavaScript engines (V8, SpiderMonkey, JavaScriptCore)\n * - Different hardware architectures (x86, ARM, etc.)\n * - Different operating systems\n * - Different browser versions\n * \n * @see https://gitlab.torproject.org/legacy/trac/-/issues/13018\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=531915\n */\n\nexport interface MathFingerprint {\n // Basic trigonometric functions\n acos: number;\n asin: number;\n atan: number;\n cos: number;\n sin: number;\n tan: number;\n \n // Hyperbolic functions\n acosh: number;\n asinh: number;\n atanh: number;\n cosh: number;\n sinh: number;\n tanh: number;\n \n // Exponential and logarithmic functions\n exp: number;\n expm1: number;\n log1p: number;\n \n // Advanced mathematical operations\n powPI: number;\n cbrt: number;\n hypot: number;\n log10: number;\n log2: number;\n \n // Polyfill implementations for comparison\n acoshPf: number;\n asinhPf: number;\n atanhPf: number;\n sinhPf: number;\n coshPf: number;\n expm1Pf: number;\n tanhPf: number;\n log1pPf: number;\n \n // Engine-specific precision tests\n precision: {\n float32: number;\n float64: number;\n bigNumbers: number;\n smallNumbers: number;\n };\n}\n\nconst M = Math; // Minification optimization\nconst fallbackFn = () => 0;\n\n/**\n * Enhanced math fingerprinting with additional precision tests\n */\nexport function getMathFingerprint(): MathFingerprint {\n // Native operations with fallbacks\n const acos = M.acos || fallbackFn;\n const acosh = M.acosh || fallbackFn;\n const asin = M.asin || fallbackFn;\n const asinh = M.asinh || fallbackFn;\n const atanh = M.atanh || fallbackFn;\n const atan = M.atan || fallbackFn;\n const sin = M.sin || fallbackFn;\n const sinh = M.sinh || fallbackFn;\n const cos = M.cos || fallbackFn;\n const cosh = M.cosh || fallbackFn;\n const tan = M.tan || fallbackFn;\n const tanh = M.tanh || fallbackFn;\n const exp = M.exp || fallbackFn;\n const expm1 = M.expm1 || fallbackFn;\n const log1p = M.log1p || fallbackFn;\n const cbrt = M.cbrt || fallbackFn;\n const hypot = M.hypot || fallbackFn;\n const log10 = M.log10 || fallbackFn;\n const log2 = M.log2 || fallbackFn;\n\n // Polyfill implementations for comparison\n const powPI = (value: number) => M.pow(M.PI, value);\n const acoshPf = (value: number) => M.log(value + M.sqrt(value * value - 1));\n const asinhPf = (value: number) => M.log(value + M.sqrt(value * value + 1));\n const atanhPf = (value: number) => M.log((1 + value) / (1 - value)) / 2;\n const sinhPf = (value: number) => (M.exp(value) - M.exp(-value)) / 2;\n const coshPf = (value: number) => (M.exp(value) + M.exp(-value)) / 2;\n const expm1Pf = (value: number) => M.exp(value) - 1;\n const tanhPf = (value: number) => (M.exp(2 * value) - 1) / (M.exp(2 * value) + 1);\n const log1pPf = (value: number) => M.log(1 + value);\n\n // Precision tests for different number ranges\n const testFloat32 = () => {\n // Test 32-bit float precision\n const a = 1.0000001;\n const b = 1.0000002;\n return M.abs(a + b - 2.0000003);\n };\n\n const testFloat64 = () => {\n // Test 64-bit float precision\n const a = 1.0000000000000001;\n const b = 1.0000000000000002;\n return M.abs(a + b - 2.0000000000000003);\n };\n\n const testBigNumbers = () => {\n // Test precision with large numbers\n const big1 = 1e15;\n const big2 = 1e15 + 1;\n return M.abs(big2 - big1);\n };\n\n const testSmallNumbers = () => {\n // Test precision with very small numbers\n const small1 = 1e-15;\n const small2 = 2e-15;\n return M.abs(small1 + small2 - 3e-15);\n };\n\n // Empirically chosen constants for maximum fingerprint stability\n return {\n // Basic trigonometric functions\n acos: acos(0.123124234234234242),\n asin: asin(0.123124234234234242),\n atan: atan(0.5),\n cos: cos(10.000000000123),\n sin: sin(-1e300),\n tan: tan(-1e300),\n \n // Hyperbolic functions\n acosh: acosh(1e308),\n asinh: asinh(1),\n atanh: atanh(0.5),\n cosh: cosh(1),\n sinh: sinh(1),\n tanh: tanh(1),\n \n // Exponential and logarithmic functions\n exp: exp(1),\n expm1: expm1(1),\n log1p: log1p(10),\n \n // Advanced mathematical operations\n powPI: powPI(-100),\n cbrt: cbrt(27),\n hypot: hypot(3, 4),\n log10: log10(100),\n log2: log2(8),\n \n // Polyfill implementations\n acoshPf: acoshPf(1e154), // 1e308 will not work for polyfill\n asinhPf: asinhPf(1),\n atanhPf: atanhPf(0.5),\n sinhPf: sinhPf(1),\n coshPf: coshPf(1),\n expm1Pf: expm1Pf(1),\n tanhPf: tanhPf(1),\n log1pPf: log1pPf(10),\n \n // Precision tests\n precision: {\n float32: testFloat32(),\n float64: testFloat64(),\n bigNumbers: testBigNumbers(),\n smallNumbers: testSmallNumbers(),\n }\n };\n}\n\n/**\n * Check if math fingerprinting is available\n */\nexport function isMathFingerprintingAvailable(): boolean {\n try {\n return typeof Math !== 'undefined' && \n typeof Math.sin === 'function';\n } catch {\n return false;\n }\n}\n\n/**\n * Get a hash of the math fingerprint for quick comparison\n */\nexport function getMathFingerprintHash(): string {\n try {\n const mathData = getMathFingerprint();\n \n // Create a stable string representation\n const values = [\n mathData.acos, mathData.asin, mathData.atan,\n mathData.cos, mathData.sin, mathData.tan,\n mathData.acosh, mathData.asinh, mathData.atanh,\n mathData.cosh, mathData.sinh, mathData.tanh,\n mathData.exp, mathData.expm1, mathData.log1p,\n mathData.powPI, mathData.cbrt, mathData.hypot,\n mathData.log10, mathData.log2,\n mathData.precision.float32, mathData.precision.float64,\n mathData.precision.bigNumbers, mathData.precision.smallNumbers\n ];\n \n return values.join(',');\n } catch {\n return 'math-unavailable';\n }\n}\n\n/**\n * Analyze math fingerprint stability and provide confidence score\n */\nexport function analyzeMathFingerprint(mathData: MathFingerprint): {\n confidence: number;\n stability: 'high' | 'medium' | 'low';\n uniqueness: number;\n} {\n let confidence = 0.9; // Start with high confidence\n let uniqueness = 0.8;\n \n // Check for obvious fallback values (all zeros)\n const hasRealValues = Object.values(mathData).some(val => \n typeof val === 'number' && val !== 0\n );\n \n if (!hasRealValues) {\n confidence = 0.1;\n uniqueness = 0.1;\n }\n \n // Check precision test results\n const precisionScore = Object.values(mathData.precision).reduce((sum, val) => {\n return sum + (typeof val === 'number' && !isNaN(val) ? 1 : 0);\n }, 0) / 4;\n \n confidence *= precisionScore;\n \n // Determine stability based on confidence\n let stability: 'high' | 'medium' | 'low' = 'high';\n if (confidence < 0.3) stability = 'low';\n else if (confidence < 0.7) stability = 'medium';\n \n return {\n confidence: Math.round(confidence * 100) / 100,\n stability,\n uniqueness: Math.round(uniqueness * 100) / 100\n };\n}","/**\n * Fingerprint Orchestrator\n * Main fingerprinting engine that coordinates all components\n * Based on FingerprintJS architecture with privacy-first approach\n */\n\nimport type {\n FingerprintComponent,\n FingerprintComponentType,\n FingerprintData,\n FingerprintOptions,\n FingerprintResult,\n} from \"../types/fingerprint\";\n\n// Import individual fingerprinting components\nimport { getAudioFingerprint, isAudioAvailable } from \"./fingerprint/audio\";\nimport {\n getBrowserFingerprint,\n isBrowserFingerprintingAvailable,\n} from \"./fingerprint/browser\";\nimport { getCanvasFingerprint, isCanvasAvailable } from \"./fingerprint/canvas\";\nimport {\n getFontFingerprint,\n isFontDetectionAvailable,\n} from \"./fingerprint/fonts\";\nimport {\n generateVisitorId,\n hashFingerprint,\n hashStableCore,\n} from \"./fingerprint/hashing\";\nimport { getScreenFingerprint, isScreenAvailable } from \"./fingerprint/screen\";\nimport { getWebGLFingerprint, isWebGLAvailable } from \"./fingerprint/webgl\";\n\n// Import new enhanced components from FingerprintJS\nimport {\n analyzeAccessibilityFingerprint,\n getAccessibilityFingerprint,\n isAccessibilityDetectionAvailable,\n} from \"./fingerprint/accessibility\";\nimport {\n analyzeDateTimeLocale,\n getDateTimeLocale,\n getDateTimeLocaleHash,\n isDateTimeLocaleAvailable,\n} from \"./fingerprint/datetime-locale\";\nimport {\n analyzeFontPreferences,\n getFontPreferences,\n getFontPreferencesHash,\n isFontPreferencesAvailable,\n} from \"./fingerprint/font-preferences\";\nimport {\n analyzeEnhancedFontFingerprint,\n getEnhancedFontFingerprint,\n getEnhancedFontFingerprintHash,\n isEnhancedFontDetectionAvailable,\n} from \"./fingerprint/fonts-enhanced\";\nimport {\n analyzeMathFingerprint,\n getMathFingerprint,\n getMathFingerprintHash,\n isMathFingerprintingAvailable,\n} from \"./fingerprint/math-enhanced\";\n\n// Import enhanced browser detection utilities\nimport { getBrowserInfo } from \"../utils/browser\";\n\n/**\n * Default fingerprint options (cookieless - memory cache only)\n */\nconst DEFAULT_OPTIONS: Required<FingerprintOptions> = {\n gdprMode: false,\n includeInvasive: true,\n timeout: 5000,\n debug: false,\n excludeComponents: [],\n};\n\n/**\n * Session-only cache for fingerprint components (memory only, no persistence)\n */\nconst sessionCache = new Map<string, any>();\n\n/**\n * Check if component should be included based on options\n */\nfunction shouldIncludeComponent(\n component: FingerprintComponentType,\n options: Required<FingerprintOptions>\n): boolean {\n // Check if component is excluded\n if (options.excludeComponents.includes(component)) {\n return false;\n }\n\n // In GDPR mode, exclude invasive components unless explicitly allowed\n if (options.gdprMode && !options.includeInvasive) {\n const invasiveComponents: FingerprintComponentType[] = [\n \"canvas\",\n \"webgl\",\n \"audio\",\n \"fontPreferences\", // Uses iframe, could be considered invasive\n \"enhancedFonts\", // Uses iframe, could be considered invasive\n ];\n if (invasiveComponents.includes(component)) {\n return false;\n }\n }\n\n // New FingerprintJS components are enabled by default in non-GDPR mode\n const fingerprintJSComponents: FingerprintComponentType[] = [\n \"mathFingerprint\",\n \"dateTimeLocale\",\n \"accessibilityEnhanced\",\n \"fontPreferences\",\n \"enhancedFonts\",\n ];\n\n // Always allow FingerprintJS components unless specifically excluded\n if (fingerprintJSComponents.includes(component)) {\n return true;\n }\n\n return true;\n}\n\n/**\n * Get cached component data from session cache (memory only)\n */\nfunction getSessionCachedComponent(key: string): any | null {\n return sessionCache.get(key) || null;\n}\n\n/**\n * Cache component data in session memory only\n */\nfunction setSessionCachedComponent(key: string, data: any): void {\n sessionCache.set(key, data);\n}\n\n/**\n * Collect fingerprint component with timeout, intelligent retry logic, and session caching\n * Enhanced to prevent WebGL context leaks during retries\n */\nasync function collectComponent<T>(\n componentType: FingerprintComponentType,\n collector: () => Promise<T>,\n options: Required<FingerprintOptions>\n): Promise<T | null> {\n const cacheKey = `${componentType}_${options.gdprMode}`;\n\n // Check session cache first (memory only)\n const cached = getSessionCachedComponent(cacheKey);\n if (cached) {\n return cached;\n }\n\n // Enhanced retry logic - limit retries for WebGL to prevent context leaks\n const isWebGLComponent = componentType === \"webgl\";\n const isCriticalComponent = [\n \"canvas\",\n \"webgl\",\n \"audio\",\n \"hardware\",\n \"system\",\n ].includes(componentType);\n\n // Reduce retries for WebGL to prevent context leaks\n const maxRetries = isWebGLComponent ? 2 : isCriticalComponent ? 3 : 1;\n const retryDelays = isWebGLComponent ? [200, 500] : [100, 250, 500]; // Longer delays for WebGL\n\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n // Create timeout promise with progressive timeout increase\n const timeoutDuration =\n options.timeout + attempt * (isWebGLComponent ? 2000 : 1000);\n const timeoutPromise = new Promise<T>((_, reject) => {\n setTimeout(\n () =>\n reject(\n new Error(\n `${componentType} timeout after ${timeoutDuration}ms (attempt ${attempt + 1})`\n )\n ),\n timeoutDuration\n );\n });\n\n // Race collection vs timeout\n const result = await Promise.race([collector(), timeoutPromise]);\n\n // Validate result before caching\n if (result !== null && result !== undefined) {\n // Cache successful result in session memory only\n setSessionCachedComponent(cacheKey, result);\n return result;\n } else {\n throw new Error(`${componentType} returned null/undefined result`);\n }\n } catch (error) {\n const isLastAttempt = attempt === maxRetries - 1;\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n\n // Special handling for WebGL context issues\n if (isWebGLComponent && errorMessage.includes(\"context\")) {\n console.warn(\n `[RabbitTracker] WebGL context issue detected: ${errorMessage}`\n );\n // Force cleanup WebGL cache to prevent context accumulation\n try {\n const { forceCleanupWebGL } = await import(\"../utils/webgl-cache\");\n forceCleanupWebGL();\n } catch (cleanupError) {\n // Ignore cleanup errors\n }\n // Don't retry on context issues - they're unlikely to resolve quickly\n return null;\n }\n\n if (isLastAttempt) {\n // Log final failure for debugging\n console.warn(\n `[RabbitTracker] Component ${componentType} failed after ${maxRetries} attempts: ${errorMessage}`\n );\n return null;\n } else {\n // Wait before retry (with longer delays for WebGL)\n if (!errorMessage.includes(\"timeout\") && attempt < retryDelays.length) {\n await new Promise((resolve) =>\n setTimeout(resolve, retryDelays[attempt])\n );\n }\n\n // For WebGL, add small additional delay to let contexts settle\n if (isWebGLComponent) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n }\n }\n }\n\n return null;\n}\n\n/**\n * Main fingerprint collection function\n */\nexport async function collectFingerprint(\n options: Partial<FingerprintOptions> = {}\n): Promise<FingerprintResult> {\n const startTime = performance.now();\n const opts = { ...DEFAULT_OPTIONS, ...options };\n\n const collectedComponents: FingerprintComponentType[] = [];\n const failedComponents: {\n component: FingerprintComponentType;\n error: string;\n }[] = [];\n\n const fingerprintData: Partial<FingerprintData> = {\n collectionTime: startTime,\n gdprMode: opts.gdprMode,\n components: [],\n };\n\n // OPTIMIZATION: Collect independent fingerprint components in parallel\n // This reduces total collection time from 3-5s to 500ms-1s\n const parallelTasks: Promise<{ component: string; result: any }>[] = [];\n\n // Group 1: Independent rendering components (can run in parallel)\n if (shouldIncludeComponent(\"canvas\", opts) && isCanvasAvailable()) {\n parallelTasks.push(\n collectComponent(\"canvas\", getCanvasFingerprint, opts).then(result => ({\n component: \"canvas\",\n result\n }))\n );\n }\n\n if (shouldIncludeComponent(\"webgl\", opts) && isWebGLAvailable()) {\n parallelTasks.push(\n collectComponent(\"webgl\", getWebGLFingerprint, opts).then(result => ({\n component: \"webgl\", \n result\n }))\n );\n }\n\n if (shouldIncludeComponent(\"audio\", opts) && isAudioAvailable()) {\n parallelTasks.push(\n collectComponent(\"audio\", getAudioFingerprint, opts).then(result => ({\n component: \"audio\",\n result\n }))\n );\n }\n\n // Group 2: Fast synchronous components (can run in parallel)\n if (shouldIncludeComponent(\"fonts\", opts) && isFontDetectionAvailable()) {\n parallelTasks.push(\n collectComponent(\"fonts\", () => getFontFingerprint(!opts.gdprMode), opts).then(result => ({\n component: \"fonts\",\n result\n }))\n );\n }\n\n if (shouldIncludeComponent(\"screen\", opts) && isScreenAvailable()) {\n parallelTasks.push(\n collectComponent(\"screen\", getScreenFingerprint, opts).then(result => ({\n component: \"screen\",\n result\n }))\n );\n }\n\n if (shouldIncludeComponent(\"browser\", opts) && isBrowserFingerprintingAvailable()) {\n parallelTasks.push(\n collectComponent(\"browser\", getBrowserFingerprint, opts).then(result => ({\n component: \"browser\",\n result\n }))\n );\n }\n\n // Execute all parallel tasks and handle results\n const parallelResults = await Promise.allSettled(parallelTasks);\n \n parallelResults.forEach((promiseResult, index) => {\n if (promiseResult.status === 'fulfilled' && promiseResult.value.result) {\n const { component, result } = promiseResult.value;\n (fingerprintData as any)[component] = result;\n collectedComponents.push(component as any);\n } else {\n // Extract component name from the corresponding task\n const taskComponent = parallelTasks[index];\n const componentName = taskComponent?.toString().match(/component: \"(\\w+)\"/)?.[1] || 'unknown';\n failedComponents.push({\n component: componentName as any,\n error: promiseResult.status === 'rejected' \n ? promiseResult.reason?.message || \"Promise rejected\"\n : \"Collection failed or timeout\",\n });\n }\n });\n\n // ADDED: Collect Incognito Detection (IMPROVED - 2024)\n // Only in enhanced mode for better accuracy\n if (!opts.gdprMode) {\n try {\n // Import incognito detection module\n const { detectIncognitoHeuristics } = await import(\n \"./fingerprint/incognito\"\n );\n const incognitoResult = await detectIncognitoHeuristics();\n\n if (incognitoResult) {\n (fingerprintData as any).incognitoDetection = {\n likelihood: incognitoResult.likelihood,\n methods: incognitoResult.methods,\n };\n\n // Add incognito to collected components for tracking\n collectedComponents.push(\"incognito\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"incognito\",\n error:\n error instanceof Error ? error.message : \"Incognito detection failed\",\n });\n }\n }\n\n // Collect Hardware fingerprint (NEW - inspired by FingerprintJS)\n if (shouldIncludeComponent(\"hardware\", opts)) {\n try {\n const hardwareModule = await import(\"./fingerprint/hardware\").catch(() => null);\n if (hardwareModule?.isHardwareDetectionAvailable?.()) {\n const result = hardwareModule.getHardwareFingerprint?.();\n if (result) {\n (fingerprintData as any).hardware = {\n value: result,\n duration: 0, // Synchronous operation\n };\n collectedComponents.push(\"hardware\");\n }\n } else if (!hardwareModule) {\n // Fallback for when module fails to load\n const fallbackHardware = {\n hardwareConcurrency: navigator.hardwareConcurrency || 0,\n deviceMemory: (navigator as any).deviceMemory || 0,\n platform: navigator.platform || 'unknown'\n };\n (fingerprintData as any).hardware = {\n value: fallbackHardware,\n duration: 0,\n };\n collectedComponents.push(\"hardware\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"hardware\",\n error:\n error instanceof Error ? error.message : \"Hardware detection failed\",\n });\n }\n }\n\n // Collect System fingerprint (NEW - inspired by FingerprintJS)\n if (shouldIncludeComponent(\"system\", opts)) {\n try {\n const { getSystemFingerprint, isSystemDetectionAvailable } = await import(\n \"./fingerprint/system\"\n );\n if (isSystemDetectionAvailable()) {\n const result = getSystemFingerprint();\n if (result) {\n (fingerprintData as any).system = {\n value: result,\n duration: 0, // Synchronous operation\n };\n collectedComponents.push(\"system\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"system\",\n error:\n error instanceof Error ? error.message : \"System detection failed\",\n });\n }\n }\n\n // Collect Storage fingerprint (NEW - inspired by FingerprintJS)\n if (shouldIncludeComponent(\"storage\", opts)) {\n try {\n const { getStorageFingerprint, isStorageDetectionAvailable } =\n await import(\"./fingerprint/storage\");\n if (isStorageDetectionAvailable()) {\n const startTime = performance.now();\n const result = await getStorageFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).storage = {\n value: result,\n duration,\n };\n collectedComponents.push(\"storage\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"storage\",\n error:\n error instanceof Error ? error.message : \"Storage detection failed\",\n });\n }\n }\n\n // Collect Math fingerprint (NEW - inspired by FingerprintJS)\n if (shouldIncludeComponent(\"math\", opts)) {\n try {\n const { getCompleteMathFingerprint, isMathDetectionAvailable } =\n await import(\"./fingerprint/math\");\n if (isMathDetectionAvailable()) {\n const startTime = performance.now();\n const result = getCompleteMathFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).math = {\n value: result,\n duration,\n };\n collectedComponents.push(\"math\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"math\",\n error:\n error instanceof Error ? error.message : \"Math fingerprinting failed\",\n });\n }\n }\n\n // Collect DOM Blockers fingerprint (NEW - advanced FingerprintJS technique)\n if (shouldIncludeComponent(\"domBlockers\", opts)) {\n try {\n const { getDomBlockersFingerprint, isDomBlockersDetectionAvailable } =\n await import(\"./fingerprint/dom-blockers\");\n if (isDomBlockersDetectionAvailable()) {\n const startTime = performance.now();\n const result = await getDomBlockersFingerprint({ debug: opts.debug });\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).domBlockers = {\n value: result,\n duration,\n };\n collectedComponents.push(\"domBlockers\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"domBlockers\",\n error:\n error instanceof Error\n ? error.message\n : \"DOM blockers detection failed\",\n });\n }\n }\n\n // Collect Accessibility fingerprint (NEW - media queries and preferences)\n if (shouldIncludeComponent(\"accessibility\", opts)) {\n try {\n const { getAccessibilityFingerprint, isAccessibilityDetectionAvailable } =\n await import(\"./fingerprint/accessibility\");\n if (isAccessibilityDetectionAvailable()) {\n const startTime = performance.now();\n const result = getAccessibilityFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).accessibility = {\n value: result,\n duration,\n };\n collectedComponents.push(\"accessibility\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"accessibility\",\n error:\n error instanceof Error\n ? error.message\n : \"Accessibility detection failed\",\n });\n }\n }\n\n // Collect Browser APIs fingerprint (NEW - browser-specific APIs)\n if (shouldIncludeComponent(\"browserApis\", opts)) {\n try {\n const { getBrowserApisFingerprint, isBrowserApisDetectionAvailable } =\n await import(\"./fingerprint/browser-apis\");\n if (isBrowserApisDetectionAvailable()) {\n const startTime = performance.now();\n const result = getBrowserApisFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).browserApis = {\n value: result,\n duration,\n };\n collectedComponents.push(\"browserApis\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"browserApis\",\n error:\n error instanceof Error\n ? error.message\n : \"Browser APIs detection failed\",\n });\n }\n }\n\n // Collect Enhanced Plugins fingerprint (NEW - enhanced plugin detection)\n if (shouldIncludeComponent(\"pluginsEnhanced\", opts)) {\n try {\n const {\n getEnhancedPluginFingerprint,\n isEnhancedPluginDetectionAvailable,\n } = await import(\"./fingerprint/plugins-enhanced\");\n if (isEnhancedPluginDetectionAvailable()) {\n const startTime = performance.now();\n const result = getEnhancedPluginFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).pluginsEnhanced = {\n value: result,\n duration,\n };\n collectedComponents.push(\"pluginsEnhanced\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"pluginsEnhanced\",\n error:\n error instanceof Error\n ? error.message\n : \"Enhanced plugin detection failed\",\n });\n }\n }\n\n // ===== NEW FINGERPRINTJS-INSPIRED COMPONENTS =====\n\n // Collect Math fingerprinting (PRIORITY 1 - Maximum stability)\n if (\n shouldIncludeComponent(\"mathFingerprint\", opts) &&\n isMathFingerprintingAvailable()\n ) {\n try {\n const startTime = performance.now();\n const result = getMathFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).mathFingerprint = {\n value: result,\n duration,\n analysis: analyzeMathFingerprint(result),\n hash: getMathFingerprintHash(),\n };\n collectedComponents.push(\"mathFingerprint\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"mathFingerprint\",\n error:\n error instanceof Error ? error.message : \"Math fingerprinting failed\",\n });\n }\n }\n\n // Collect Font Preferences (PRIORITY 2 - High differentiation)\n if (\n shouldIncludeComponent(\"fontPreferences\", opts) &&\n isFontPreferencesAvailable()\n ) {\n try {\n const startTime = performance.now();\n const result = await getFontPreferences();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).fontPreferences = {\n value: result,\n duration,\n analysis: analyzeFontPreferences(result),\n hash: getFontPreferencesHash(result),\n };\n collectedComponents.push(\"fontPreferences\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"fontPreferences\",\n error:\n error instanceof Error\n ? error.message\n : \"Font preferences detection failed\",\n });\n }\n }\n\n // Collect DateTime Locale (PRIORITY 3 - Improved precision)\n if (\n shouldIncludeComponent(\"dateTimeLocale\", opts) &&\n isDateTimeLocaleAvailable()\n ) {\n try {\n const startTime = performance.now();\n const result = getDateTimeLocale();\n const duration = performance.now() - startTime;\n\n if (result && typeof result === \"object\") {\n (fingerprintData as any).dateTimeLocale = {\n value: result,\n duration,\n analysis: analyzeDateTimeLocale(result),\n hash: getDateTimeLocaleHash(result),\n };\n collectedComponents.push(\"dateTimeLocale\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"dateTimeLocale\",\n error:\n error instanceof Error\n ? error.message\n : \"DateTime locale detection failed\",\n });\n }\n }\n\n // Collect Enhanced Accessibility (PRIORITY 4 - Additional entropy)\n if (\n shouldIncludeComponent(\"accessibilityEnhanced\", opts) &&\n isAccessibilityDetectionAvailable()\n ) {\n try {\n const startTime = performance.now();\n const result = getAccessibilityFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).accessibilityEnhanced = {\n value: result,\n duration,\n analysis: analyzeAccessibilityFingerprint(result),\n };\n collectedComponents.push(\"accessibilityEnhanced\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"accessibilityEnhanced\",\n error:\n error instanceof Error\n ? error.message\n : \"Enhanced accessibility detection failed\",\n });\n }\n }\n\n // Collect Enhanced Font Detection with iframe isolation (PRIORITY 5)\n if (\n shouldIncludeComponent(\"enhancedFonts\", opts) &&\n isEnhancedFontDetectionAvailable()\n ) {\n try {\n const startTime = performance.now();\n const result = await getEnhancedFontFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).enhancedFonts = {\n value: result,\n duration,\n analysis: analyzeEnhancedFontFingerprint(result),\n hash: getEnhancedFontFingerprintHash(result),\n };\n collectedComponents.push(\"enhancedFonts\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"enhancedFonts\",\n error:\n error instanceof Error\n ? error.message\n : \"Enhanced font detection failed\",\n });\n }\n }\n\n // Generate hash from collected components\n const componentValues: Record<string, any> = {};\n\n collectedComponents.forEach((component) => {\n const componentData = fingerprintData[\n component as keyof FingerprintData\n ] as FingerprintComponent<any>;\n if (componentData && componentData.value) {\n componentValues[component] = componentData.value;\n }\n });\n\n // PLACEHOLDER: Final fingerprint hash will be generated after stable core vector\n const hash = \"\";\n\n // Calculate confidence score using the new confidence system\n let confidenceResult;\n try {\n const { calculateConfidence } = await import(\"./fingerprint/confidence\");\n const componentResults = [\n ...collectedComponents.map((comp) => ({\n component: comp,\n success: true,\n duration: (fingerprintData as any)[comp]?.duration || 0,\n value: (fingerprintData as any)[comp]?.value,\n })),\n ...failedComponents.map((fail) => ({\n component: fail.component,\n success: false,\n duration: 0,\n error: fail.error,\n })),\n ];\n\n confidenceResult = calculateConfidence(componentResults, {\n requireMinimumComponents: 6,\n penalizeMissingCore: true,\n adjustForIncognito: true,\n });\n\n // Add confidence data to fingerprint\n (fingerprintData as any).confidence = {\n score: confidenceResult.score,\n level: confidenceResult.level,\n factors: confidenceResult.factors,\n recommendations: confidenceResult.recommendations,\n };\n } catch (error) {\n // Fallback confidence calculation\n const successRate =\n collectedComponents.length /\n (collectedComponents.length + failedComponents.length || 1);\n (fingerprintData as any).confidence = {\n score: successRate >= 0.8 ? 0.95 : successRate >= 0.6 ? 0.8 : 0.5,\n level:\n successRate >= 0.8 ? \"High\" : successRate >= 0.6 ? \"Medium\" : \"Low\",\n factors: {\n componentCount: collectedComponents.length,\n weightedScore: successRate,\n stabilityScore: successRate,\n entropyScore: successRate,\n spoofResistanceScore: successRate,\n },\n recommendations:\n successRate < 0.8 ? [\"Enable more fingerprinting components\"] : [],\n };\n }\n\n // Finalize fingerprint data\n const finalData: FingerprintData = {\n ...(fingerprintData as FingerprintData),\n hash,\n components: collectedComponents,\n collectionTime: performance.now() - startTime,\n };\n\n const result: FingerprintResult = {\n success: collectedComponents.length > 0,\n collectedComponents,\n failedComponents,\n confidence: confidenceResult || (fingerprintData as any).confidence,\n };\n\n if (collectedComponents.length > 0) {\n // Build stable core vector (invariants only)\n const browser = finalData.browser?.value;\n const screen = finalData.screen?.value;\n const uaStr = browser?.userAgent || \"\";\n const isSafari =\n /safari/i.test(uaStr) && !/chrome|chromium|opr|edg|edge/i.test(uaStr);\n const deviceType = (() => {\n const isMobileCH = (navigator as any).userAgentData?.mobile === true;\n const touch = (navigator as any).maxTouchPoints || 0;\n const w = screen?.width || 0;\n const h = screen?.height || 0;\n const minDim = Math.min(w, h);\n const maxDim = Math.max(w, h);\n\n // More precise detection: differentiate mobile, tablet, and desktop\n if (isMobileCH) {\n // Client Hints says mobile = definitely mobile\n return \"mobile\";\n }\n\n if (touch > 0) {\n // Has touch capability\n if (minDim <= 480) {\n return \"mobile\"; // Small screen = phone\n } else if (minDim <= 1024 && maxDim <= 1366) {\n return \"tablet\"; // Medium screen = tablet\n } else {\n return \"tablet\"; // Large touch device = tablet\n }\n }\n\n // No touch, large screen = desktop\n if (minDim > 1024) {\n return \"desktop\";\n }\n\n // Small screen without touch = could be mobile in desktop mode\n // Default to mobile for safety\n return minDim <= 480 ? \"mobile\" : \"desktop\";\n })();\n\n // Collect device-specific signals (FingerprintJS-inspired)\n let deviceSignals: any = {};\n try {\n const { collectDeviceSignals } = await import(\n \"./fingerprint/device-signals\"\n );\n deviceSignals = collectDeviceSignals();\n } catch (error) {\n // Silently fail - device signals are optional\n }\n\n const coreVector: Record<string, any> = {\n // PRIORITY 1: Enhanced browser detection with precise Chromium-based browser identification\n ua: (() => {\n try {\n const browserInfo = getBrowserInfo();\n\n // Use the precise browser family for maximum differentiation\n // This properly distinguishes Brave, Arc, Opera, etc. from Chrome\n return browserInfo.family; // e.g., \"brave-chromium\", \"arc-chromium\", \"chrome\", \"firefox\"\n } catch {\n // Fallback to legacy detection if imports fail\n const ua = uaStr;\n const m = ua.match(\n /(chrome|safari|firefox|edge|edg|brave|opera|opr|chromium)/i\n );\n const family = (\n m?.[1] ||\n ua.split(\" \")[0] ||\n \"unknown\"\n ).toLowerCase();\n return family;\n }\n })(),\n // PRIORITY 2: Timezone (very stable, changes rarely)\n timezone: browser?.timezone || \"unknown\",\n\n // PRIORITY 3: Primary language only (most stable language preference)\n // Remove secondary languages as they can change more frequently\n primaryLanguage:\n Array.isArray(browser?.languages) &&\n browser.languages.length > 0 &&\n browser.languages[0]\n ? browser.languages[0].toLowerCase().split(\"-\")[0] // Only language code (en, pt, fr), not region\n : \"unknown\",\n // PRIORITY 4: Platform (ultra-stable - OS doesn't change)\n platform: (browser?.platform || \"unknown\").toLowerCase(),\n\n // PRIORITY 5: Device type (critical for differentiation, ultra-stable)\n deviceType,\n // PRIORITY 6: Enhanced screen resolution with exact dimensions for mobile differentiation\n // For mobile devices, we NEED exact dimensions to differentiate between similar models (S22 vs A54)\n // For desktop, bucketing is sufficient as hardware varies more\n screen: screen\n ? (() => {\n // Use enhanced screen buckets for modern display landscape\n const dims = [screen.width, screen.height].sort((a, b) => b - a);\n const w = dims[0];\n const h = dims[1];\n\n // Enhanced screen bucketing based on 2024 display standards\n const getScreenBucket = (width: number, height: number) => {\n // Ultra-high resolution displays (2024: 8K, 5K, etc.)\n if (width >= 7680) return \"8k\"; // 8K displays\n if (width >= 5120) return \"5k\"; // 5K displays (iMac, etc.)\n if (width >= 4096) return \"4k_cinema\"; // Cinema 4K\n if (width >= 3840) return \"4k_uhd\"; // 4K UHD standard\n if (width >= 3440) return \"ultrawide\"; // Ultrawide QHD\n if (width >= 2880) return \"retina_4k\"; // Retina 4K/5K scaled\n if (width >= 2560) return \"qhd\"; // QHD/WQHD\n\n // Standard high-resolution displays\n if (width >= 2048) return \"qxga\"; // QXGA\n if (width >= 1920) return \"fhd\"; // Full HD 1080p\n if (width >= 1680) return \"wsxga+\"; // WSXGA+\n if (width >= 1600) return \"uxga\"; // UXGA\n if (width >= 1440) return \"wxga++\"; // WXGA++\n if (width >= 1366) return \"hd\"; // HD 720p\n if (width >= 1280) return \"sxga\"; // SXGA\n\n // Tablet and mobile displays\n if (width >= 1024) return \"xga\"; // XGA (tablets)\n if (width >= 768) return \"svga\"; // SVGA (small tablets)\n if (width >= 640) return \"vga\"; // VGA (phones)\n if (width >= 480) return \"hvga\"; // HVGA (older phones)\n if (width >= 320) return \"qvga\"; // QVGA (legacy phones)\n return \"minimal\"; // Sub-QVGA\n };\n\n // Enhanced aspect ratio classification for device type hints\n const getAspectRatioClass = (width: number, height: number) => {\n if (height === 0) return \"unknown\";\n const ratio = width / height;\n\n // Ultra-wide displays (gaming, productivity)\n if (ratio >= 3.0) return \"super_ultrawide\"; // 32:9+\n if (ratio >= 2.3) return \"ultrawide\"; // 21:9\n if (ratio >= 2.0) return \"wide\"; // 18:9\n\n // Standard desktop ratios\n if (ratio >= 1.7 && ratio <= 1.8) return \"standard\"; // 16:9\n if (ratio >= 1.6 && ratio <= 1.67) return \"classic\"; // 16:10, 5:3\n if (ratio >= 1.3 && ratio <= 1.35) return \"traditional\"; // 4:3\n\n // Mobile/portrait ratios\n if (ratio >= 0.5 && ratio <= 0.8) return \"mobile_portrait\"; // Phones in portrait\n if (ratio >= 0.4 && ratio <= 0.5) return \"tall_mobile\"; // Modern tall phones\n\n return \"custom\"; // Non-standard ratio\n };\n\n // Ensure w and h are valid numbers\n const width = w || 0;\n const height = h || 0;\n\n // Screen density class based on common DPR patterns\n const getDensityClass = (pixelRatio?: number) => {\n if (!pixelRatio) return \"standard\";\n if (pixelRatio >= 3.0) return \"ultra_high\"; // iPhone Plus, high-end Android\n if (pixelRatio >= 2.0) return \"high\"; // Retina, standard high-DPI\n if (pixelRatio >= 1.5) return \"medium\"; // Mid-range displays\n if (pixelRatio >= 1.25) return \"enhanced\"; // Slightly enhanced DPI\n return \"standard\"; // Standard 1x displays\n };\n\n // CRITICAL: Do NOT include exact dimensions in stableCoreVector for mobile!\n // Reason: Screen dimensions change when:\n // - Chrome address bar appears/disappears (scroll behavior)\n // - Virtual keyboard opens/closes\n // - Screen rotates (portrait ↔ landscape)\n // - Browser zoom changes\n // These changes would cause stableCoreHash to change, breaking visitor identification\n //\n // INSTEAD: Use ONLY stable screen characteristics (bucket, aspect, density)\n // For device differentiation (S22 vs A54), use:\n // - screenFrame (bezel measurements)\n // - Combination of bucket + hardware + display\n // - Vector similarity in IdentityResolver\n\n return {\n bucket: getScreenBucket(width, height),\n aspectClass: getAspectRatioClass(width, height),\n densityClass: getDensityClass(\n screen.pixelRatio || window.devicePixelRatio\n ),\n // Simplified ratio for matching (rounded to prevent micro-variations)\n ratio: height > 0 ? Math.round((width / height) * 100) / 100 : 0,\n // Size category for general device classification\n sizeCategory:\n width >= 2560\n ? \"large\"\n : width >= 1920\n ? \"desktop\"\n : width >= 1024\n ? \"laptop\"\n : width >= 768\n ? \"tablet\"\n : \"mobile\",\n // ❌ REMOVED: exact dimensions (causes instability on mobile)\n // Device differentiation is now handled by:\n // 1. screenFrame (bezel measurements - stable)\n // 2. hardware + display combination\n // 3. Vector similarity in IdentityResolver\n };\n })()\n : {\n bucket: \"unknown\",\n aspectClass: \"unknown\",\n densityClass: \"unknown\",\n ratio: 0,\n sizeCategory: \"unknown\",\n },\n // CRITICAL: Do NOT include availability flags (canvas/webgl/audio) in stableCoreVector\n // These flags can change between requests due to timeouts, permissions, or hardware issues\n // and would cause the stableCoreHash to change, breaking visitor identification\n // CRITICAL: Plugins removed from stableCoreVector - they are unstable:\n // - Can vary between normal/incognito mode\n // - Can be blocked/hidden in private mode\n // - Can be installed/uninstalled by users\n // - Extensions can change plugin list\n // - Order may vary despite sorting\n // Keep plugins only in full fingerprint for analysis, not in stableCoreHash\n // plugins: removed for stability\n\n // PRIORITY 7: Enhanced hardware characteristics with precise 2024 buckets\n // Use advanced hardware buckets based on current hardware landscape for maximum stability\n hardware: (() => {\n const cores = deviceSignals.hardwareConcurrency;\n const memory = deviceSignals.deviceMemory;\n\n if (!cores && !memory) return undefined;\n\n // Enhanced CPU core buckets based on 2024 hardware trends\n const getCoreBucket = (cores: number) => {\n // High-end workstations and servers (2024: up to 128 cores available)\n if (cores >= 32) return \"workstation\"; // 32+ cores: Threadripper, Xeon\n if (cores >= 20) return \"ultra\"; // 20-31 cores: High-end desktop\n if (cores >= 16) return \"high\"; // 16-19 cores: Gaming/content creation\n if (cores >= 12) return \"premium\"; // 12-15 cores: Modern mid-high desktop\n if (cores >= 8) return \"mid\"; // 8-11 cores: Standard desktop/laptop\n if (cores >= 6) return \"normal\"; // 6-7 cores: Entry-level modern\n if (cores >= 4) return \"basic\"; // 4-5 cores: Older desktop/budget laptop\n if (cores >= 2) return \"low\"; // 2-3 cores: Older mobile/budget\n return \"minimal\"; // 1 core: Legacy/embedded\n };\n\n // Enhanced memory buckets based on 2024 standards\n const getMemoryBucket = (memory: number) => {\n // Professional/Gaming systems (2024: up to 256GB+ available)\n if (memory >= 64) return \"workstation\"; // 64GB+: Professional/content creation\n if (memory >= 32) return \"ultra\"; // 32-63GB: High-end gaming/work\n if (memory >= 24) return \"high\"; // 24-31GB: Premium gaming\n if (memory >= 16) return \"premium\"; // 16-23GB: Standard gaming/work\n if (memory >= 12) return \"mid\"; // 12-15GB: Good performance\n if (memory >= 8) return \"normal\"; // 8-11GB: Acceptable performance\n if (memory >= 4) return \"basic\"; // 4-7GB: Budget desktop/laptop\n if (memory >= 2) return \"low\"; // 2-3GB: Older mobile devices\n return \"minimal\"; // <2GB: Legacy/embedded devices\n };\n\n // CPU architecture detection for additional differentiation\n const getArchitectureBucket = (arch?: number) => {\n if (arch === undefined) return \"unknown\";\n // Based on floating point NaN behavior patterns\n if (arch === 255) return \"arm64\"; // ARM processors\n if (arch === 0) return \"x86_64\"; // Intel/AMD x86-64\n return \"other\"; // Other architectures\n };\n\n // Combined hardware profile for enhanced bucketing\n const coresBucket = cores ? getCoreBucket(cores) : \"unknown\";\n const memoryBucket = memory ? getMemoryBucket(memory) : \"unknown\";\n const archBucket = getArchitectureBucket(deviceSignals.architecture);\n\n // Create hardware class based on combined characteristics\n const getHardwareClass = (\n cores: string,\n memory: string,\n arch: string\n ) => {\n // Professional workstation patterns\n if (\n (cores === \"workstation\" || cores === \"ultra\") &&\n (memory === \"workstation\" || memory === \"ultra\")\n ) {\n return \"professional\";\n }\n\n // High-end gaming/content creation\n if (\n (cores === \"high\" || cores === \"premium\") &&\n (memory === \"high\" || memory === \"premium\" || memory === \"ultra\")\n ) {\n return \"enthusiast\";\n }\n\n // Standard desktop/laptop\n if (\n (cores === \"mid\" || cores === \"normal\") &&\n (memory === \"mid\" || memory === \"normal\" || memory === \"premium\")\n ) {\n return \"mainstream\";\n }\n\n // Budget/older systems\n if (\n (cores === \"basic\" || cores === \"low\") &&\n (memory === \"basic\" || memory === \"low\" || memory === \"normal\")\n ) {\n return \"budget\";\n }\n\n // Mobile/embedded devices\n if (cores === \"minimal\" || memory === \"minimal\") {\n return \"mobile\";\n }\n\n // Mixed/uncertain configuration\n return \"mixed\";\n };\n\n return {\n cores: coresBucket,\n memory: memoryBucket,\n arch: archBucket,\n class: getHardwareClass(coresBucket, memoryBucket, archBucket),\n // Touch capability for mobile/desktop differentiation\n touch: deviceSignals.touchSupport?.maxTouchPoints\n ? deviceSignals.touchSupport.maxTouchPoints >= 10\n ? \"multi\"\n : deviceSignals.touchSupport.maxTouchPoints >= 5\n ? \"standard\"\n : \"basic\"\n : \"none\",\n };\n })(),\n\n // PRIORITY 8: Screen frame (bezel measurements) for mobile device differentiation\n // CRITICAL: This is STABLE across page loads and provides device-specific fingerprint\n // Samsung S22 vs A54 have different screen frames despite similar resolutions\n screenFrame: deviceSignals?.screenFrame\n ? {\n top: deviceSignals.screenFrame.top || 0,\n right: deviceSignals.screenFrame.right || 0,\n bottom: deviceSignals.screenFrame.bottom || 0,\n left: deviceSignals.screenFrame.left || 0,\n }\n : undefined,\n\n // PRIORITY 9: Enhanced color and display capabilities bucketing\n display: (() => {\n const depth = deviceSignals.colorDepth;\n const gamut = deviceSignals.colorGamut;\n\n // Enhanced color depth classification\n const getDepthClass = (depth?: number) => {\n if (!depth) return \"unknown\";\n if (depth >= 48) return \"ultra_high\"; // 48-bit+ (professional displays)\n if (depth >= 32) return \"high\"; // 32-bit (high-end displays)\n if (depth >= 24) return \"normal\"; // 24-bit (standard displays)\n if (depth >= 16) return \"basic\"; // 16-bit (older displays)\n return \"low\"; // <16-bit (legacy displays)\n };\n\n // Color gamut classification for display capabilities\n const getGamutClass = (gamut?: string) => {\n if (!gamut) return \"unknown\";\n switch (gamut) {\n case \"rec2020\":\n return \"professional\"; // Professional/HDR displays\n case \"p3\":\n return \"enhanced\"; // Modern displays (Apple, etc.)\n case \"srgb\":\n return \"standard\"; // Standard displays\n default:\n return \"unknown\";\n }\n };\n\n // Combined display quality classification\n const getDisplayClass = (depthClass: string, gamutClass: string) => {\n if (depthClass === \"ultra_high\" || gamutClass === \"professional\") {\n return \"professional\"; // Pro displays\n }\n if (depthClass === \"high\" || gamutClass === \"enhanced\") {\n return \"premium\"; // High-end displays\n }\n if (depthClass === \"normal\" && gamutClass === \"standard\") {\n return \"standard\"; // Standard displays\n }\n if (depthClass === \"basic\") {\n return \"basic\"; // Older displays\n }\n return \"legacy\"; // Legacy displays\n };\n\n const depthClass = getDepthClass(depth);\n const gamutClass = getGamutClass(gamut);\n\n return {\n depth: depthClass,\n gamut: gamutClass,\n class: getDisplayClass(depthClass, gamutClass),\n };\n })(),\n };\n\n // ADDITIONAL ENTROPY: Add a deterministic but unique component based on ultra-stable signals\n // This helps prevent collisions while maintaining deterministic behavior\n const entropyComponents = [\n coreVector.ua || \"\",\n coreVector.platform || \"\",\n coreVector.deviceType || \"\",\n coreVector.screen?.bucket || \"\",\n coreVector.timezone || \"\",\n ].filter(Boolean);\n\n if (entropyComponents.length >= 3) {\n // Create a stable entropy string from the most stable components\n const entropyString = entropyComponents.join(\"|\");\n // Add a simple checksum for additional uniqueness (deterministic)\n let checksum = 0;\n for (let i = 0; i < entropyString.length; i++) {\n checksum =\n ((checksum << 5) - checksum + entropyString.charCodeAt(i)) &\n 0xffffffff;\n }\n coreVector._entropy = Math.abs(checksum).toString(36).substring(0, 8);\n }\n\n // EXCLUSIONS from stableCoreVector for maximum stability:\n // - Exact screen dimensions (use buckets instead)\n // - Browser versions (use family only)\n // - Secondary languages (use primary only)\n // - Pixel ratio (varies with zoom)\n // - Plugin lists (change frequently)\n // - Canvas/WebGL availability (can timeout)\n // - Color gamut (varies with settings)\n // - Screen frame (can vary slightly)\n // - Vendor flavors (can change)\n // - Exact hardware values (use buckets)\n\n // DEBUG: Log coreVector components to identify DevTools instability\n if (opts.debug || (typeof window !== 'undefined' && (window as any)._rabbitTrackerDebug)) {\n console.log('[RabbitTracker DEBUG] coreVector components:', {\n ua: coreVector.ua,\n platform: coreVector.platform,\n deviceType: coreVector.deviceType,\n screenBucket: coreVector.screen?.bucket,\n timezone: coreVector.timezone,\n _entropy: coreVector._entropy\n });\n }\n\n // Generate ultra-stable hash with additional collision resistance\n const stableCoreHash = hashStableCore(coreVector, opts.debug);\n\n // CRITICAL: Generate enhanced fingerprint hash combining STABLE components only\n // Filter out unstable components that change between requests (canvas, webgl, audio)\n // These components can vary due to GPU state, rendering context, permissions, etc.\n const unstableComponentKeys = [\n \"canvas\",\n \"webgl\",\n \"audio\", // Visual/audio fingerprints (vary with context)\n \"mathFingerprint\",\n \"fontPreferences\",\n \"enhancedFonts\", // Measurement-based (can timeout/vary)\n \"dateTimeLocale\",\n \"accessibilityEnhanced\", // Locale/accessibility (can change)\n \"domBlockers\",\n \"pluginsEnhanced\", // Privacy tools detection (can change)\n ];\n\n const stableComponentValues: Record<string, any> = {};\n for (const [key, value] of Object.entries(componentValues)) {\n if (!unstableComponentKeys.includes(key)) {\n stableComponentValues[key] = value;\n }\n }\n\n const enhancedComponentValues = {\n ...stableComponentValues, // STABLE components only (screen, browser, system, etc.)\n _stableCore: coreVector, // + Ultra-stable components (ua, platform, deviceType, etc.)\n // REMOVED: _hourlyEntropy - was causing visitor ID instability (same user = different IDs)\n };\n\n // Generate collision-resistant fingerprint hash\n const enhancedHash = hashFingerprint(enhancedComponentValues, opts.debug);\n\n // Update finalData with the enhanced hash\n finalData.hash = enhancedHash;\n\n // Log stable core components for debugging collision issues\n if (opts.debug) {\n console.log(\"[RabbitTracker] Ultra-stable core vector:\", {\n components: Object.keys(coreVector),\n entropy: coreVector._entropy,\n stableCoreHash: stableCoreHash.substring(0, 16),\n enhancedFingerprintHash: enhancedHash.substring(0, 16),\n ua: coreVector.ua,\n deviceType: coreVector.deviceType,\n platform: coreVector.platform,\n screenBucket: coreVector.screen?.bucket,\n totalComponentsInHash: Object.keys(enhancedComponentValues).length,\n });\n }\n\n result.data = {\n ...finalData,\n stableCoreHash,\n stableCoreVector: coreVector,\n } as any;\n\n // Log collection summary if debug mode\n if (opts.debug) {\n console.log(\"[RabbitTracker] Fingerprint collection completed:\", {\n collected: collectedComponents.length,\n failed: failedComponents.length,\n duration: finalData.collectionTime,\n enhancedFingerprintHash: finalData.hash,\n stableCoreHash,\n confidence: confidenceResult?.level || \"Unknown\",\n score: confidenceResult?.score || 0,\n collisionResistance:\n \"Enhanced with stable + unstable components (no temporal entropy)\",\n });\n\n if (confidenceResult?.recommendations.length) {\n console.log(\n \"[RabbitTracker] Confidence recommendations:\",\n confidenceResult.recommendations\n );\n }\n }\n } else {\n result.error = \"No components could be collected\";\n }\n\n return result;\n}\n\n/**\n * Generate visitor ID from fingerprint\n */\nexport function generateVisitorIdFromFingerprint(\n fingerprintData: FingerprintData\n): string {\n return generateVisitorId(fingerprintData.hash);\n}\n\n/**\n * Get a lightweight fingerprint (GDPR-compliant)\n */\nexport async function getLightweightFingerprint(): Promise<FingerprintResult> {\n return collectFingerprint({\n gdprMode: true,\n includeInvasive: false,\n excludeComponents: [\"canvas\", \"webgl\", \"audio\"],\n timeout: 2000,\n });\n}\n\n/**\n * Get a complete fingerprint (enhanced mode)\n */\nexport async function getCompleteFingerprint(): Promise<FingerprintResult> {\n return collectFingerprint({\n gdprMode: false,\n includeInvasive: true,\n timeout: 5000,\n });\n}\n\n/**\n * Clear session fingerprint cache (memory only)\n */\nexport function clearFingerprintCache(): void {\n sessionCache.clear();\n}\n\n/**\n * Check if fingerprinting is available\n */\nexport function isFingerprintingAvailable(): boolean {\n // At minimum, we need screen and browser fingerprinting\n return isScreenAvailable() && isBrowserFingerprintingAvailable();\n}\n\n/**\n * Get available fingerprinting components\n */\nexport function getAvailableComponents(): FingerprintComponentType[] {\n const available: FingerprintComponentType[] = [];\n\n if (isCanvasAvailable()) available.push(\"canvas\");\n if (isWebGLAvailable()) available.push(\"webgl\");\n if (isAudioAvailable()) available.push(\"audio\");\n if (isFontDetectionAvailable()) available.push(\"fonts\");\n if (isScreenAvailable()) available.push(\"screen\");\n if (isBrowserFingerprintingAvailable()) available.push(\"browser\");\n\n return available;\n}\n","/**\n * Anti-Adblock Manager\n * Implements multiple transport methods to bypass adblockers\n * Includes WebSocket, Resource Spoofing, and WebRTC fallbacks\n */\n\nexport interface TransportResponse {\n success: boolean;\n method: string;\n latency?: number;\n error?: string;\n}\n\nexport interface AntiAdblockConfig {\n enabled: boolean;\n methods: ('fetch' | 'websocket' | 'resource' | 'webrtc')[];\n fallbackDelay: number;\n maxRetries: number;\n debug: boolean;\n}\n\n/**\n * Base Transport Interface\n */\nexport interface Transport {\n name: string;\n available: boolean;\n send(data: any, endpoint: string): Promise<TransportResponse>;\n destroy?(): void;\n}\n\n/**\n * Standard Fetch Transport\n */\nexport class FetchTransport implements Transport {\n name = 'fetch';\n available = typeof fetch !== 'undefined';\n\n async send(data: any, endpoint: string): Promise<TransportResponse> {\n const start = Date.now();\n \n try {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(data)\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`);\n }\n\n return {\n success: true,\n method: this.name,\n latency: Date.now() - start\n };\n } catch (error) {\n return {\n success: false,\n method: this.name,\n latency: Date.now() - start,\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n}\n\n/**\n * WebSocket Transport\n */\nexport class WebSocketTransport implements Transport {\n name = 'websocket';\n available = typeof WebSocket !== 'undefined';\n private ws?: WebSocket;\n private connected = false;\n private messageQueue: Array<{ data: any; resolve: (value: TransportResponse) => void }> = [];\n private baseUrl: string;\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl.replace(/^http/, 'ws');\n }\n\n private async connect(): Promise<void> {\n if (this.connected || !this.available) return;\n\n return new Promise((resolve, reject) => {\n try {\n this.ws = new WebSocket(`${this.baseUrl}/ws/track`);\n \n this.ws.onopen = () => {\n this.connected = true;\n this.processQueue();\n resolve();\n };\n\n this.ws.onerror = () => {\n reject(new Error('WebSocket connection failed'));\n };\n\n this.ws.onclose = () => {\n this.connected = false;\n // Try to reconnect after 5 seconds\n setTimeout(() => this.connect().catch(() => {}), 5000);\n };\n } catch (error) {\n reject(error);\n }\n });\n }\n\n private processQueue(): void {\n while (this.messageQueue.length > 0 && this.connected) {\n const item = this.messageQueue.shift();\n if (item && this.ws) {\n try {\n this.ws.send(JSON.stringify(item.data));\n item.resolve({ success: true, method: this.name });\n } catch (error) {\n item.resolve({ \n success: false, \n method: this.name, \n error: error instanceof Error ? error.message : String(error)\n });\n }\n }\n }\n }\n\n async send(data: any, endpoint: string): Promise<TransportResponse> {\n const start = Date.now();\n\n if (!this.available) {\n return { success: false, method: this.name, error: 'WebSocket not available' };\n }\n\n // Try to connect if not connected\n if (!this.connected) {\n try {\n await this.connect();\n } catch (error) {\n return { \n success: false, \n method: this.name, \n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n return new Promise((resolve) => {\n if (this.connected && this.ws) {\n try {\n this.ws.send(JSON.stringify(data));\n resolve({ \n success: true, \n method: this.name, \n latency: Date.now() - start \n });\n } catch (error) {\n resolve({ \n success: false, \n method: this.name, \n error: error instanceof Error ? error.message : String(error)\n });\n }\n } else {\n // Queue message for later\n this.messageQueue.push({ data, resolve: (response) => resolve({\n ...response,\n latency: Date.now() - start\n }) });\n }\n });\n }\n\n destroy(): void {\n if (this.ws) {\n this.ws.close();\n this.connected = false;\n }\n }\n}\n\n/**\n * Resource Spoofing Transport (GET requests disguised as assets)\n */\nexport class ResourceSpoofTransport implements Transport {\n name = 'resource';\n available = typeof fetch !== 'undefined';\n private baseUrl: string;\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl;\n }\n\n async send(data: any, endpoint: string): Promise<TransportResponse> {\n const start = Date.now();\n \n try {\n // Compress and encode data\n const encoded = this.encodeData(data);\n \n // Try different resource types\n const resourceTypes = [\n { path: '/assets/styles.css', type: 'text/css' },\n { path: '/images/pixel.gif', type: 'image/gif' },\n { path: '/fonts/roboto.woff2', type: 'font/woff2' },\n { path: '/js/analytics.js', type: 'application/javascript' }\n ];\n\n const randomType = resourceTypes[Math.floor(Math.random() * resourceTypes.length)]!;\n const url = `${this.baseUrl}${randomType.path}?d=${encoded}&t=${Date.now()}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Accept': randomType.type,\n 'Cache-Control': 'no-cache',\n 'User-Agent': navigator.userAgent\n }\n });\n\n // Even if status is not OK, adblockers might have blocked it\n // But the data might still reach the server\n return {\n success: true, // Optimistic success\n method: this.name,\n latency: Date.now() - start\n };\n } catch (error) {\n return {\n success: false,\n method: this.name,\n latency: Date.now() - start,\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n private encodeData(data: any): string {\n try {\n const json = JSON.stringify(data);\n return btoa(encodeURIComponent(json)).replace(/[+/=]/g, (match) => ({\n '+': '-',\n '/': '_',\n '=': ''\n }[match] || match));\n } catch (error) {\n return '';\n }\n }\n}\n\n/**\n * WebRTC DataChannel Transport (experimental)\n */\nexport class WebRTCTransport implements Transport {\n name = 'webrtc';\n available = typeof (globalThis as any).RTCPeerConnection !== 'undefined';\n private pc?: any;\n private dataChannel?: any;\n private connected = false;\n\n async send(data: any, endpoint: string): Promise<TransportResponse> {\n const start = Date.now();\n\n if (!this.available) {\n return { success: false, method: this.name, error: 'WebRTC not available' };\n }\n\n try {\n await this.setupConnection();\n \n if (this.dataChannel && this.connected) {\n this.dataChannel.send(JSON.stringify(data));\n return {\n success: true,\n method: this.name,\n latency: Date.now() - start\n };\n } else {\n return {\n success: false,\n method: this.name,\n error: 'DataChannel not ready'\n };\n }\n } catch (error) {\n return {\n success: false,\n method: this.name,\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n private async setupConnection(): Promise<void> {\n if (this.connected) return;\n\n return new Promise((resolve, reject) => {\n try {\n this.pc = new (globalThis as any).RTCPeerConnection({\n iceServers: [{ urls: 'stun:stun.l.google.com:19302' }]\n });\n\n this.dataChannel = this.pc.createDataChannel('tracking', {\n ordered: false,\n maxRetransmits: 0\n });\n\n this.dataChannel.onopen = () => {\n this.connected = true;\n resolve();\n };\n\n this.dataChannel.onerror = (error: any) => {\n reject(error);\n };\n\n // Note: This is a simplified WebRTC setup\n // In practice, you'd need a signaling server for full P2P\n } catch (error) {\n reject(error);\n }\n });\n }\n\n destroy(): void {\n if (this.dataChannel) {\n this.dataChannel.close();\n }\n if (this.pc) {\n this.pc.close();\n }\n this.connected = false;\n }\n}\n\n/**\n * Main Anti-Adblock Manager\n */\nexport class AntiAdblockManager {\n private config: AntiAdblockConfig;\n private transports: Transport[] = [];\n private baseUrl: string;\n private stats = {\n totalRequests: 0,\n successfulRequests: 0,\n methodSuccess: new Map<string, number>(),\n methodFailures: new Map<string, number>()\n };\n\n constructor(baseUrl: string, config: Partial<AntiAdblockConfig> = {}) {\n this.baseUrl = baseUrl;\n this.config = {\n enabled: true,\n methods: ['fetch', 'websocket', 'resource'],\n fallbackDelay: 100,\n maxRetries: 2,\n debug: false,\n ...config\n };\n\n this.initializeTransports();\n }\n\n private initializeTransports(): void {\n const transportMap = {\n fetch: () => new FetchTransport(),\n websocket: () => new WebSocketTransport(this.baseUrl),\n resource: () => new ResourceSpoofTransport(this.baseUrl),\n webrtc: () => new WebRTCTransport()\n };\n\n this.transports = this.config.methods\n .map(method => transportMap[method]?.())\n .filter((transport): transport is Transport => \n transport !== undefined && transport.available\n );\n\n if (this.config.debug) {\n console.log('[Zaplier] Anti-adblock initialized with transports:', \n this.transports.map(t => t.name));\n }\n }\n\n /**\n * Send data using the best available transport\n */\n async send(data: any, endpoint: string = '/tracking/event'): Promise<TransportResponse> {\n this.stats.totalRequests++;\n\n if (!this.config.enabled || this.transports.length === 0) {\n return { success: false, method: 'none', error: 'No transports available' };\n }\n\n let lastError = '';\n\n // Try each transport in order\n for (const transport of this.transports) {\n try {\n const result = await transport.send(data, `${this.baseUrl}${endpoint}`);\n \n // Update stats\n if (result.success) {\n this.stats.successfulRequests++;\n this.updateMethodStats(transport.name, true);\n \n if (this.config.debug) {\n console.log(`[Zaplier] Data sent successfully via ${transport.name}`, result);\n }\n \n return result;\n } else {\n this.updateMethodStats(transport.name, false);\n lastError = result.error || 'Unknown error';\n \n if (this.config.debug) {\n console.warn(`[Zaplier] Transport ${transport.name} failed:`, result.error);\n }\n }\n } catch (error) {\n lastError = error instanceof Error ? error.message : String(error);\n this.updateMethodStats(transport.name, false);\n \n if (this.config.debug) {\n console.warn(`[Zaplier] Transport ${transport.name} threw error:`, error);\n }\n }\n\n // Wait before trying next transport\n if (this.config.fallbackDelay > 0) {\n await new Promise(resolve => setTimeout(resolve, this.config.fallbackDelay));\n }\n }\n\n return {\n success: false,\n method: 'all_failed',\n error: `All transports failed. Last error: ${lastError}`\n };\n }\n\n private updateMethodStats(method: string, success: boolean): void {\n if (success) {\n this.stats.methodSuccess.set(method, (this.stats.methodSuccess.get(method) || 0) + 1);\n } else {\n this.stats.methodFailures.set(method, (this.stats.methodFailures.get(method) || 0) + 1);\n }\n }\n\n /**\n * Get transport statistics\n */\n getStats(): typeof this.stats {\n return { ...this.stats };\n }\n\n /**\n * Get success rate by method\n */\n getSuccessRates(): Record<string, number> {\n const rates: Record<string, number> = {};\n \n for (const transport of this.transports) {\n const successes = this.stats.methodSuccess.get(transport.name) || 0;\n const failures = this.stats.methodFailures.get(transport.name) || 0;\n const total = successes + failures;\n \n rates[transport.name] = total > 0 ? (successes / total) * 100 : 0;\n }\n \n return rates;\n }\n\n /**\n * Destroy all transports\n */\n destroy(): void {\n this.transports.forEach(transport => {\n if (transport.destroy) {\n transport.destroy();\n }\n });\n this.transports = [];\n }\n\n /**\n * Test transport effectiveness\n */\n async testTransports(): Promise<Record<string, TransportResponse>> {\n const results: Record<string, TransportResponse> = {};\n const testData = { test: true, timestamp: Date.now() };\n\n for (const transport of this.transports) {\n try {\n results[transport.name] = await transport.send(testData, `${this.baseUrl}/test`);\n } catch (error) {\n results[transport.name] = {\n success: false,\n method: transport.name,\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n return results;\n }\n}","/**\n * Heatmap Engine\n * Captures click coordinates, scroll depth, mouse movements and rage clicks\n * for visual analytics and user behavior insights\n */\n\nexport interface HeatmapClick {\n x: number;\n y: number;\n absoluteX: number;\n absoluteY: number;\n element: string;\n timestamp: number;\n button: number;\n rageClick?: boolean;\n}\n\nexport interface HeatmapScroll {\n depth: number;\n maxDepth: number;\n timestamp: number;\n viewport: { width: number; height: number };\n}\n\nexport interface HeatmapMouseMove {\n path: Array<{ x: number; y: number; timestamp: number }>;\n timestamp: number;\n}\n\nexport interface HeatmapConfig {\n enabled: boolean;\n trackClicks: boolean;\n trackScrollDepth: boolean;\n trackMouseMoves: boolean;\n trackRageClicks: boolean;\n mouseMoveThrottle: number;\n batchInterval: number;\n maxClickBuffer: number;\n rageClickThreshold: number;\n rageClickTimeWindow: number;\n}\n\nexport class HeatmapEngine {\n private config: HeatmapConfig;\n private clicks: HeatmapClick[] = [];\n private scrollData: HeatmapScroll[] = [];\n private mouseMoves: Array<{ x: number; y: number; timestamp: number }> = [];\n private lastMouseMove = 0;\n private maxScrollDepth = 0;\n private batchTimer?: number;\n private isActive = false;\n private sessionId: string;\n \n // Rage click detection\n private recentClicks: Array<{ x: number; y: number; timestamp: number }> = [];\n \n constructor(sessionId: string, config: Partial<HeatmapConfig> = {}) {\n this.sessionId = sessionId;\n this.config = {\n enabled: true,\n trackClicks: true,\n trackScrollDepth: true,\n trackMouseMoves: false, // Disabled by default for performance\n trackRageClicks: true,\n mouseMoveThrottle: 200,\n batchInterval: 10000, // 10 seconds\n maxClickBuffer: 500,\n rageClickThreshold: 3, // 3 clicks in time window = rage\n rageClickTimeWindow: 1000, // 1 second\n ...config\n };\n }\n\n /**\n * Start heatmap tracking\n */\n start(): boolean {\n if (!this.config.enabled || this.isActive) {\n return false;\n }\n\n this.isActive = true;\n this.setupEventListeners();\n this.startBatchTimer();\n this.trackInitialViewport();\n\n return true;\n }\n\n /**\n * Stop heatmap tracking\n */\n stop(): void {\n if (!this.isActive) return;\n\n this.isActive = false;\n this.removeEventListeners();\n \n if (this.batchTimer) {\n clearInterval(this.batchTimer);\n this.batchTimer = undefined;\n }\n\n // Send final batch\n this.sendBatch();\n }\n\n /**\n * Setup event listeners\n */\n private setupEventListeners(): void {\n if (this.config.trackClicks) {\n document.addEventListener('click', this.handleClick, true);\n }\n\n if (this.config.trackScrollDepth) {\n window.addEventListener('scroll', this.handleScroll, { passive: true });\n document.addEventListener('scroll', this.handleScroll, { passive: true });\n }\n\n if (this.config.trackMouseMoves) {\n document.addEventListener('mousemove', this.handleMouseMove, { passive: true });\n }\n\n // Track viewport changes\n window.addEventListener('resize', this.handleResize);\n window.addEventListener('orientationchange', this.handleResize);\n }\n\n /**\n * Remove event listeners\n */\n private removeEventListeners(): void {\n document.removeEventListener('click', this.handleClick, true);\n window.removeEventListener('scroll', this.handleScroll);\n document.removeEventListener('scroll', this.handleScroll);\n document.removeEventListener('mousemove', this.handleMouseMove);\n window.removeEventListener('resize', this.handleResize);\n window.removeEventListener('orientationchange', this.handleResize);\n }\n\n /**\n * Track initial viewport for context\n */\n private trackInitialViewport(): void {\n const scrollDepth = this.calculateScrollDepth();\n this.scrollData.push({\n depth: scrollDepth,\n maxDepth: scrollDepth,\n timestamp: Date.now(),\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight\n }\n });\n }\n\n /**\n * Handle click events\n */\n private handleClick = (event: MouseEvent): void => {\n if (!this.config.trackClicks) return;\n\n const target = event.target as Element;\n const rect = target.getBoundingClientRect();\n const scrollX = window.pageXOffset || document.documentElement.scrollLeft;\n const scrollY = window.pageYOffset || document.documentElement.scrollTop;\n \n const click: HeatmapClick = {\n x: event.clientX,\n y: event.clientY,\n absoluteX: event.clientX + scrollX,\n absoluteY: event.clientY + scrollY,\n element: this.getElementSelector(target),\n timestamp: Date.now(),\n button: event.button\n };\n\n // Check for rage clicks\n if (this.config.trackRageClicks) {\n const isRage = this.detectRageClick(click.x, click.y, click.timestamp);\n if (isRage) {\n click.rageClick = true;\n }\n }\n\n this.clicks.push(click);\n\n // Prevent buffer overflow\n if (this.clicks.length > this.config.maxClickBuffer) {\n this.clicks = this.clicks.slice(-this.config.maxClickBuffer);\n }\n };\n\n /**\n * Handle scroll events\n */\n private handleScroll = (): void => {\n if (!this.config.trackScrollDepth) return;\n\n const scrollDepth = this.calculateScrollDepth();\n this.maxScrollDepth = Math.max(this.maxScrollDepth, scrollDepth);\n\n this.scrollData.push({\n depth: scrollDepth,\n maxDepth: this.maxScrollDepth,\n timestamp: Date.now(),\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight\n }\n });\n\n // Limit scroll data points\n if (this.scrollData.length > 100) {\n this.scrollData = this.scrollData.slice(-50);\n }\n };\n\n /**\n * Handle mouse move events (throttled)\n */\n private handleMouseMove = (event: MouseEvent): void => {\n if (!this.config.trackMouseMoves) return;\n\n const now = Date.now();\n if (now - this.lastMouseMove < this.config.mouseMoveThrottle) {\n return;\n }\n this.lastMouseMove = now;\n\n this.mouseMoves.push({\n x: event.clientX,\n y: event.clientY,\n timestamp: now\n });\n\n // Limit mouse move data\n if (this.mouseMoves.length > 200) {\n this.mouseMoves = this.mouseMoves.slice(-100);\n }\n };\n\n /**\n * Handle viewport resize\n */\n private handleResize = (): void => {\n // Update scroll depth calculation on resize\n const scrollDepth = this.calculateScrollDepth();\n this.scrollData.push({\n depth: scrollDepth,\n maxDepth: this.maxScrollDepth,\n timestamp: Date.now(),\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight\n }\n });\n };\n\n /**\n * Calculate current scroll depth as percentage\n */\n private calculateScrollDepth(): number {\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n const documentHeight = Math.max(\n document.body.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n );\n const viewportHeight = window.innerHeight;\n \n if (documentHeight <= viewportHeight) {\n return 100; // Page fits entirely in viewport\n }\n\n return Math.min(100, Math.round(((scrollTop + viewportHeight) / documentHeight) * 100));\n }\n\n /**\n * Detect rage clicks (multiple clicks in same area within time window)\n */\n private detectRageClick(x: number, y: number, timestamp: number): boolean {\n const clickRadius = 50; // pixels\n const timeWindow = this.config.rageClickTimeWindow;\n\n // Clean old clicks outside time window\n this.recentClicks = this.recentClicks.filter(\n click => timestamp - click.timestamp <= timeWindow\n );\n\n // Count clicks in the same area\n const nearbyClicks = this.recentClicks.filter(click => {\n const distance = Math.sqrt(\n Math.pow(click.x - x, 2) + Math.pow(click.y - y, 2)\n );\n return distance <= clickRadius;\n });\n\n // Add current click\n this.recentClicks.push({ x, y, timestamp });\n\n return nearbyClicks.length >= this.config.rageClickThreshold - 1;\n }\n\n /**\n * Get element selector for targeting\n */\n private getElementSelector(element: Element): string {\n // Try ID first\n if (element.id) {\n return `#${element.id}`;\n }\n\n // Try classes\n if (element.className && typeof element.className === 'string') {\n const classes = element.className.split(' ').filter(c => c.length > 0);\n if (classes.length > 0) {\n return `.${classes.slice(0, 2).join('.')}`;\n }\n }\n\n // Fallback to tag + nth-child\n const tag = element.tagName.toLowerCase();\n if (element.parentElement) {\n const siblings = Array.from(element.parentElement.children);\n const index = siblings.indexOf(element);\n return `${tag}:nth-child(${index + 1})`;\n }\n\n return tag;\n }\n\n /**\n * Start batch timer\n */\n private startBatchTimer(): void {\n this.batchTimer = window.setInterval(() => {\n this.sendBatch();\n }, this.config.batchInterval);\n }\n\n /**\n * Send batch of heatmap data\n */\n private sendBatch(): void {\n if (this.clicks.length === 0 && this.scrollData.length === 0 && this.mouseMoves.length === 0) {\n return;\n }\n\n const payload = {\n sessionId: this.sessionId,\n pageMetadata: {\n url: window.location.href,\n title: document.title,\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight\n },\n documentSize: {\n width: Math.max(\n document.body.scrollWidth,\n document.body.offsetWidth,\n document.documentElement.clientWidth,\n document.documentElement.scrollWidth,\n document.documentElement.offsetWidth\n ),\n height: Math.max(\n document.body.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n )\n }\n },\n clicks: [...this.clicks],\n scrollData: [...this.scrollData],\n mouseMoves: this.config.trackMouseMoves ? [...this.mouseMoves] : [],\n maxScrollDepth: this.maxScrollDepth,\n timestamp: Date.now()\n };\n\n // Clear data after copying\n this.clicks = [];\n this.scrollData = [];\n this.mouseMoves = [];\n\n // Send to backend\n this.sendToBackend(payload);\n }\n\n /**\n * Send data to backend (will be enhanced with anti-adblock)\n */\n private async sendToBackend(payload: any): Promise<void> {\n try {\n // For now, use standard fetch - will be replaced with anti-adblock manager\n const response = await fetch('/api/heatmap/track', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload)\n });\n\n if (!response.ok) {\n console.warn('[Zaplier] Heatmap batch failed to send');\n }\n } catch (error) {\n console.warn('[Zaplier] Heatmap error:', error);\n }\n }\n\n /**\n * Get current statistics\n */\n getStats(): {\n clickCount: number;\n maxScrollDepth: number;\n isRecording: boolean;\n mouseMovements: number;\n rageClicks: number;\n } {\n const rageClicks = this.clicks.filter(click => click.rageClick).length;\n \n return {\n clickCount: this.clicks.length,\n maxScrollDepth: this.maxScrollDepth,\n isRecording: this.isActive,\n mouseMovements: this.mouseMoves.length,\n rageClicks\n };\n }\n\n /**\n * Enable mouse movement tracking\n */\n enableMouseTracking(): void {\n if (this.config.trackMouseMoves) return;\n \n this.config.trackMouseMoves = true;\n if (this.isActive) {\n document.addEventListener('mousemove', this.handleMouseMove, { passive: true });\n }\n }\n\n /**\n * Disable mouse movement tracking\n */\n disableMouseTracking(): void {\n if (!this.config.trackMouseMoves) return;\n \n this.config.trackMouseMoves = false;\n document.removeEventListener('mousemove', this.handleMouseMove);\n this.mouseMoves = [];\n }\n\n /**\n * Check if heatmap is recording\n */\n isRecording(): boolean {\n return this.isActive;\n }\n}","/**\n * Session Replay Engine\n * Captures DOM mutations, user interactions, and viewport changes\n * for comprehensive session recording\n */\n\nexport interface ReplayEvent {\n type: 'mutation' | 'click' | 'scroll' | 'input' | 'mouse' | 'viewport' | 'navigation';\n timestamp: number;\n data: any;\n sequence: number;\n}\n\nexport interface ReplayConfig {\n enabled: boolean;\n sampleRate: number;\n maskSensitiveFields: boolean;\n maxEventBuffer: number;\n batchInterval: number;\n captureClicks: boolean;\n captureScrolls: boolean;\n captureInputs: boolean;\n captureMouseMoves: boolean;\n compressionEnabled: boolean;\n}\n\nexport class SessionReplayEngine {\n private config: ReplayConfig;\n private events: ReplayEvent[] = [];\n private observer?: MutationObserver;\n private sequence = 0;\n private batchTimer?: number;\n private isActive = false;\n private sessionId: string;\n private lastMouseMove = 0;\n private mouseMoveThrottle = 100; // ms\n\n constructor(sessionId: string, config: Partial<ReplayConfig> = {}) {\n this.sessionId = sessionId;\n this.config = {\n enabled: true,\n sampleRate: 0.1,\n maskSensitiveFields: true,\n maxEventBuffer: 1000,\n batchInterval: 5000,\n captureClicks: true,\n captureScrolls: true,\n captureInputs: true,\n captureMouseMoves: false, // Disabled by default for performance\n compressionEnabled: true,\n ...config\n };\n }\n\n /**\n * Start session replay recording\n */\n start(): boolean {\n if (!this.config.enabled || this.isActive) {\n return false;\n }\n\n // Check sampling\n if (Math.random() > this.config.sampleRate) {\n return false;\n }\n\n this.isActive = true;\n this.setupDOMObserver();\n this.setupEventListeners();\n this.startBatchTimer();\n\n // Record initial state\n this.recordInitialState();\n\n return true;\n }\n\n /**\n * Stop session replay recording\n */\n stop(): void {\n if (!this.isActive) return;\n\n this.isActive = false;\n \n if (this.observer) {\n this.observer.disconnect();\n this.observer = undefined;\n }\n\n this.removeEventListeners();\n \n if (this.batchTimer) {\n clearInterval(this.batchTimer);\n this.batchTimer = undefined;\n }\n\n // Send final batch\n this.sendBatch();\n }\n\n /**\n * Setup DOM mutation observer\n */\n private setupDOMObserver(): void {\n if (typeof MutationObserver === 'undefined') return;\n\n this.observer = new MutationObserver((mutations) => {\n const serializedMutations = mutations\n .map(mutation => this.serializeMutation(mutation))\n .filter(Boolean);\n\n if (serializedMutations.length > 0) {\n this.addEvent({\n type: 'mutation',\n timestamp: Date.now(),\n data: { mutations: serializedMutations },\n sequence: this.sequence++\n });\n }\n });\n\n this.observer.observe(document, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeOldValue: true,\n characterData: true,\n characterDataOldValue: true\n });\n }\n\n /**\n * Setup event listeners\n */\n private setupEventListeners(): void {\n if (this.config.captureClicks) {\n document.addEventListener('click', this.handleClick, true);\n }\n\n if (this.config.captureScrolls) {\n window.addEventListener('scroll', this.handleScroll, { passive: true });\n document.addEventListener('scroll', this.handleScroll, { passive: true });\n }\n\n if (this.config.captureInputs) {\n document.addEventListener('input', this.handleInput, true);\n document.addEventListener('change', this.handleChange, true);\n }\n\n if (this.config.captureMouseMoves) {\n document.addEventListener('mousemove', this.handleMouseMove, { passive: true });\n }\n\n // Viewport changes\n window.addEventListener('resize', this.handleViewportChange);\n window.addEventListener('orientationchange', this.handleViewportChange);\n\n // Navigation\n window.addEventListener('beforeunload', this.handleNavigation);\n window.addEventListener('pagehide', this.handleNavigation);\n }\n\n /**\n * Remove event listeners\n */\n private removeEventListeners(): void {\n document.removeEventListener('click', this.handleClick, true);\n window.removeEventListener('scroll', this.handleScroll);\n document.removeEventListener('scroll', this.handleScroll);\n document.removeEventListener('input', this.handleInput, true);\n document.removeEventListener('change', this.handleChange, true);\n document.removeEventListener('mousemove', this.handleMouseMove);\n window.removeEventListener('resize', this.handleViewportChange);\n window.removeEventListener('orientationchange', this.handleViewportChange);\n window.removeEventListener('beforeunload', this.handleNavigation);\n window.removeEventListener('pagehide', this.handleNavigation);\n }\n\n /**\n * Record initial DOM state\n */\n private recordInitialState(): void {\n this.addEvent({\n type: 'navigation',\n timestamp: Date.now(),\n data: {\n url: window.location.href,\n referrer: document.referrer,\n title: document.title,\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight\n },\n screen: {\n width: window.screen?.width || 0,\n height: window.screen?.height || 0\n }\n },\n sequence: this.sequence++\n });\n }\n\n /**\n * Handle click events\n */\n private handleClick = (event: MouseEvent): void => {\n const target = event.target as Element;\n const path = this.getElementPath(target);\n \n this.addEvent({\n type: 'click',\n timestamp: Date.now(),\n data: {\n x: event.clientX,\n y: event.clientY,\n element: path,\n button: event.button,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey\n },\n sequence: this.sequence++\n });\n };\n\n /**\n * Handle scroll events\n */\n private handleScroll = (): void => {\n this.addEvent({\n type: 'scroll',\n timestamp: Date.now(),\n data: {\n x: window.pageXOffset || document.documentElement.scrollLeft,\n y: window.pageYOffset || document.documentElement.scrollTop\n },\n sequence: this.sequence++\n });\n };\n\n /**\n * Handle input events\n */\n private handleInput = (event: Event): void => {\n const target = event.target as HTMLInputElement;\n const path = this.getElementPath(target);\n \n let value = target.value;\n \n // Mask sensitive fields\n if (this.config.maskSensitiveFields && this.isSensitiveField(target)) {\n value = '*'.repeat(value.length);\n }\n\n this.addEvent({\n type: 'input',\n timestamp: Date.now(),\n data: {\n element: path,\n value: value,\n inputType: (event as InputEvent).inputType\n },\n sequence: this.sequence++\n });\n };\n\n /**\n * Handle change events\n */\n private handleChange = (event: Event): void => {\n const target = event.target as HTMLInputElement | HTMLSelectElement;\n const path = this.getElementPath(target);\n \n let value = (target as HTMLInputElement).value;\n \n if (this.config.maskSensitiveFields && this.isSensitiveField(target)) {\n value = '*'.repeat(value.length);\n }\n\n this.addEvent({\n type: 'input',\n timestamp: Date.now(),\n data: {\n element: path,\n value: value,\n type: 'change'\n },\n sequence: this.sequence++\n });\n };\n\n /**\n * Handle mouse move events (throttled)\n */\n private handleMouseMove = (event: MouseEvent): void => {\n const now = Date.now();\n if (now - this.lastMouseMove < this.mouseMoveThrottle) {\n return;\n }\n this.lastMouseMove = now;\n\n this.addEvent({\n type: 'mouse',\n timestamp: now,\n data: {\n x: event.clientX,\n y: event.clientY\n },\n sequence: this.sequence++\n });\n };\n\n /**\n * Handle viewport changes\n */\n private handleViewportChange = (): void => {\n this.addEvent({\n type: 'viewport',\n timestamp: Date.now(),\n data: {\n width: window.innerWidth,\n height: window.innerHeight\n },\n sequence: this.sequence++\n });\n };\n\n /**\n * Handle navigation events\n */\n private handleNavigation = (): void => {\n // Send final batch before navigation\n this.sendBatch();\n };\n\n /**\n * Serialize DOM mutation\n */\n private serializeMutation(mutation: MutationRecord): any {\n const result: any = {\n type: mutation.type,\n target: this.getElementPath(mutation.target as Element)\n };\n\n switch (mutation.type) {\n case 'childList':\n result.addedNodes = Array.from(mutation.addedNodes)\n .filter(node => node.nodeType === Node.ELEMENT_NODE)\n .map(node => this.serializeElement(node as Element))\n .slice(0, 10); // Limit to prevent huge payloads\n \n result.removedNodes = Array.from(mutation.removedNodes)\n .filter(node => node.nodeType === Node.ELEMENT_NODE)\n .map(node => this.getElementPath(node as Element))\n .slice(0, 10);\n break;\n\n case 'attributes':\n result.attributeName = mutation.attributeName;\n result.oldValue = mutation.oldValue;\n result.newValue = (mutation.target as Element).getAttribute(mutation.attributeName!);\n break;\n\n case 'characterData':\n result.oldValue = mutation.oldValue;\n result.newValue = mutation.target.textContent;\n break;\n }\n\n return result;\n }\n\n /**\n * Serialize DOM element\n */\n private serializeElement(element: Element): any {\n const attributes: Record<string, string> = {};\n \n for (const attr of Array.from(element.attributes)) {\n // Skip sensitive attributes\n if (!this.isSensitiveAttribute(attr.name)) {\n attributes[attr.name] = attr.value;\n }\n }\n\n return {\n tagName: element.tagName.toLowerCase(),\n attributes,\n textContent: element.textContent?.substring(0, 1000) || '' // Limit text content\n };\n }\n\n /**\n * Get element path for targeting\n */\n private getElementPath(element: Element): string {\n const path: string[] = [];\n let current = element;\n\n while (current && current !== document.body) {\n let selector = current.tagName.toLowerCase();\n \n if (current.id) {\n selector += `#${current.id}`;\n path.unshift(selector);\n break;\n }\n \n if (current.className) {\n const classes = current.className.toString().split(/\\s+/).slice(0, 2);\n selector += `.${classes.join('.')}`;\n }\n \n // Add nth-child if no unique identifier\n if (!current.id && !current.className) {\n const siblings = Array.from(current.parentElement?.children || []);\n const index = siblings.indexOf(current);\n selector += `:nth-child(${index + 1})`;\n }\n \n path.unshift(selector);\n current = current.parentElement!;\n }\n\n return path.join(' > ');\n }\n\n /**\n * Check if field should be masked\n */\n private isSensitiveField(element: Element): boolean {\n const sensitiveTypes = ['password', 'email', 'tel', 'ssn', 'cc'];\n const sensitiveNames = ['password', 'email', 'phone', 'credit', 'card', 'ssn', 'social'];\n \n const type = element.getAttribute('type')?.toLowerCase();\n const name = element.getAttribute('name')?.toLowerCase();\n const className = element.className.toLowerCase();\n \n return sensitiveTypes.includes(type || '') ||\n sensitiveNames.some(term => \n (name && name.includes(term)) ||\n className.includes(term)\n );\n }\n\n /**\n * Check if attribute should be masked\n */\n private isSensitiveAttribute(attrName: string): boolean {\n const sensitiveAttrs = ['data-token', 'data-key', 'data-secret', 'authorization'];\n return sensitiveAttrs.includes(attrName.toLowerCase());\n }\n\n /**\n * Add event to buffer\n */\n private addEvent(event: ReplayEvent): void {\n this.events.push(event);\n \n // Prevent memory overflow\n if (this.events.length > this.config.maxEventBuffer) {\n this.events = this.events.slice(-this.config.maxEventBuffer);\n }\n }\n\n /**\n * Start batch timer\n */\n private startBatchTimer(): void {\n this.batchTimer = window.setInterval(() => {\n this.sendBatch();\n }, this.config.batchInterval);\n }\n\n /**\n * Send batch of events\n */\n private sendBatch(): void {\n if (this.events.length === 0) return;\n\n const batch = [...this.events];\n this.events = [];\n\n const payload = {\n sessionId: this.sessionId,\n events: batch,\n metadata: {\n userAgent: navigator.userAgent,\n timestamp: Date.now(),\n compression: this.config.compressionEnabled\n }\n };\n\n // This will be handled by the anti-adblock manager\n this.sendToBackend(payload);\n }\n\n /**\n * Send data to backend (will be enhanced with anti-adblock)\n */\n private async sendToBackend(payload: any): Promise<void> {\n try {\n // For now, use standard fetch - will be replaced with anti-adblock manager\n const response = await fetch('/api/replay/record', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload)\n });\n\n if (!response.ok) {\n console.warn('[Zaplier] Session replay batch failed to send');\n }\n } catch (error) {\n console.warn('[Zaplier] Session replay error:', error);\n }\n }\n\n /**\n * Get current event count\n */\n getEventCount(): number {\n return this.events.length;\n }\n\n /**\n * Check if recording is active\n */\n isRecording(): boolean {\n return this.isActive;\n }\n}","/**\n * Zaplier SDK v1.0.0\n * 100% Cookieless Analytics Tracking\n *\n * Main SDK class for client-side tracking integration\n */\n\nimport type {\n InternalConfig,\n ZaplierSDK as IZaplierSDK,\n PageViewEvent,\n SDKConfig,\n UserData,\n VisitorHistory,\n VisitorInfo,\n} from \"./types\";\n\nimport {\n getCompleteFingerprint,\n getLightweightFingerprint,\n} from \"./modules/fingerprint\";\n\nimport { AntiAdblockManager } from \"./modules/anti-adblock\";\nimport { HeatmapEngine } from \"./modules/heatmap\";\nimport { SessionReplayEngine } from \"./modules/session-replay\";\n\n/**\n * Default internal configuration\n */\nconst DEFAULT_CONFIG: Omit<InternalConfig, keyof SDKConfig> = {\n apiEndpoint: \"https://api.zaplier.com\",\n retryEnabled: true,\n maxRetries: 3,\n retryDelays: [1000, 2000, 4000],\n autoTrack: true,\n dedupeEnabled: true,\n fingerprintEnabled: true,\n presenceTracking: false,\n heartbeatInterval: 30000,\n scrollTracking: true,\n scrollDepthTracking: true,\n gdprCompliant: true,\n enhancedTracking: \"ask\",\n replaySampling: 0.1,\n replayMaskInputs: true,\n};\n\n/**\n * Main Zaplier SDK Class\n */\nexport class ZaplierSDK implements IZaplierSDK {\n public config: InternalConfig;\n public version = \"3.0.0\";\n\n private visitorId?: string; // Client-side (deprecated). Do not use.\n private backendVisitorId?: string; // Real visitor ID from backend (UUID)\n private sessionId?: string;\n private fingerprint?: any;\n private isInitialized = false;\n private eventQueue: any[] = [];\n\n // Enhanced tracking engines\n private replayEngine?: SessionReplayEngine;\n private heatmapEngine?: HeatmapEngine;\n private antiAdblockManager?: AntiAdblockManager;\n\n constructor(userConfig: SDKConfig) {\n // Validate required config\n if (!userConfig.token) {\n throw new Error(\"Zaplier: token is required\");\n }\n\n // Merge user config with defaults\n this.config = {\n ...DEFAULT_CONFIG,\n ...userConfig,\n gdprMode: userConfig.gdprMode ?? false,\n };\n\n // Auto-initialize if in browser\n if (typeof window !== \"undefined\") {\n this.initialize();\n }\n }\n\n /**\n * Initialize SDK\n */\n private async initialize(): Promise<void> {\n try {\n if (this.config.debug) {\n console.log(\"[Zaplier] Initializing SDK v\" + this.version);\n }\n\n // Check localhost restriction\n if (!this.config.allow_localhost && this.isLocalhost()) {\n if (this.config.debug) {\n console.log(\"[Zaplier] Skipping tracking on localhost\");\n }\n return;\n }\n\n // Collect fingerprint\n await this.collectFingerprint();\n\n // Auto-track page view if enabled\n if (this.config.autoTrack) {\n this.trackPageView();\n }\n\n this.isInitialized = true;\n\n // Initialize tracking engines and anti-adblock system\n this.initializeTrackingEngines();\n this.initializeAntiAdblock();\n\n // Process queued events\n this.processEventQueue();\n\n if (this.config.debug) {\n console.log(\"[Zaplier] SDK initialized successfully\", {\n visitorId: this.visitorId,\n gdprMode: this.config.gdprMode,\n });\n }\n } catch (error) {\n console.error(\"[Zaplier] Initialization failed:\", error);\n }\n }\n\n /**\n * Initialize tracking engines (Session Replay & Heatmap)\n */\n private initializeTrackingEngines(): void {\n try {\n // Generate session ID once and only once during initialization\n if (!this.sessionId) {\n this.sessionId = this.generateSessionId();\n if (this.config.debug) {\n console.log(\"[Zaplier] Generated session ID:\", this.sessionId);\n }\n }\n\n // Initialize Session Replay Engine\n if (this.config.replay) {\n this.replayEngine = new SessionReplayEngine(this.sessionId, {\n sampleRate: this.config.replaySampling,\n maskSensitiveFields: this.config.replayMaskInputs,\n compressionEnabled: true,\n });\n this.replayEngine.start();\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Session Replay started\");\n }\n }\n\n // Initialize Heatmap Engine\n if (this.config.heatmap) {\n this.heatmapEngine = new HeatmapEngine(this.sessionId, {\n trackClicks: true,\n trackScrollDepth: true,\n trackRageClicks: true,\n trackMouseMoves: false, // Can be enabled via API\n });\n this.heatmapEngine.start();\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Heatmap tracking started\");\n }\n }\n } catch (error) {\n console.error(\"[Zaplier] Failed to initialize tracking engines:\", error);\n }\n }\n\n /**\n * Generate session ID\n */\n private generateSessionId(): string {\n // Create deterministic session ID based on page load time and stable browser characteristics\n const pageLoadTime = performance.timeOrigin || Date.now();\n const browserFingerprint = this.getBrowserFingerprint();\n \n // Use page load time + browser fingerprint for session uniqueness within same page load\n return pageLoadTime.toString(36) + browserFingerprint.substring(0, 8);\n }\n\n /**\n * Get stable browser characteristics for session ID generation\n * Uses only stable, privacy-safe values that don't change during session\n */\n private getBrowserFingerprint(): string {\n const components = [\n navigator.userAgent || '',\n navigator.platform || '',\n screen.width || 0,\n screen.height || 0,\n new Date(2024, 0, 1).getTimezoneOffset(),\n navigator.language || '',\n navigator.hardwareConcurrency || 0\n ];\n \n const combined = components.join('|');\n let hash = 0;\n for (let i = 0; i < combined.length; i++) {\n const char = combined.charCodeAt(i);\n hash = ((hash << 5) - hash + char) & 0xffffffff;\n }\n return Math.abs(hash).toString(36);\n }\n\n /**\n * Initialize Anti-Adblock Manager\n */\n private initializeAntiAdblock(): void {\n try {\n this.antiAdblockManager = new AntiAdblockManager(\n this.config.apiEndpoint,\n {\n enabled: true,\n methods: [\"fetch\", \"websocket\", \"resource\"],\n fallbackDelay: 100,\n maxRetries: 2,\n debug: this.config.debug,\n }\n );\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Anti-Adblock Manager initialized\");\n }\n } catch (error) {\n console.error(\n \"[Zaplier] Failed to initialize Anti-Adblock Manager:\",\n error\n );\n }\n }\n\n /**\n * Collect fingerprint and generate visitor ID (IMPROVED - 2024)\n * Enhanced with better incognito detection\n */\n private async collectFingerprint(): Promise<void> {\n try {\n // Use appropriate fingerprinting based on GDPR mode\n const result = this.config.gdprMode\n ? await getLightweightFingerprint()\n : await getCompleteFingerprint();\n\n if (result.success && result.data) {\n this.fingerprint = result.data;\n\n // ENHANCED: Include improved incognito detection in fingerprint data\n if (result.data.incognitoDetection) {\n // Store incognito detection results for better server-side analysis\n this.fingerprint.incognitoDetection = {\n ...result.data.incognitoDetection,\n // Add timestamp for analysis\n detectionTimestamp: Date.now(),\n // Add SDK version for debugging\n sdkVersion: this.version,\n };\n }\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Fingerprint collected:\", {\n components: result.collectedComponents,\n hashes: {\n full: result.data.hash,\n stableCore: (result.data as any).stableCoreHash,\n },\n gdprMode: this.config.gdprMode,\n incognitoDetected: result.data.incognitoDetection?.isIncognito,\n incognitoConfidence: result.data.incognitoDetection?.confidence,\n });\n }\n } else {\n throw new Error(\"Fingerprint collection failed\");\n }\n } catch (error) {\n if (this.config.debug) {\n console.error(\"[Zaplier] Fingerprint collection failed:\", error);\n }\n // Fallback: collect entropy for diagnostics only; do NOT set local visitorId\n try {\n // Collect stable entropy sources (no random values for consistency)\n const entropyComponents = [\n navigator.userAgent || \"\",\n navigator.language || \"\",\n navigator.platform || \"\",\n screen.width || 0,\n screen.height || 0,\n screen.colorDepth || 0,\n new Date(2024, 0, 1).getTimezoneOffset(),\n // Hardware-specific (stable values)\n navigator.hardwareConcurrency || 0,\n (navigator as any).deviceMemory || 0,\n navigator.maxTouchPoints || 0,\n // Use page load time (stable during session) instead of current time\n performance.timeOrigin || 0,\n // Deterministic entropy from browser characteristics\n (navigator.plugins ? navigator.plugins.length : 0),\n (navigator.mimeTypes ? navigator.mimeTypes.length : 0),\n // Memory usage pattern (if available, use rounded values for stability)\n Math.floor(((performance as any).memory?.usedJSHeapSize || 0) / 1000000),\n Math.floor(((performance as any).memory?.totalJSHeapSize || 0) / 1000000),\n // Connection info (if available)\n (navigator as any).connection?.effectiveType || \"\",\n Math.floor((navigator as any).connection?.downlink || 0),\n // Additional browser-specific entropy\n window.outerHeight || 0,\n window.outerWidth || 0,\n Math.floor((window.devicePixelRatio || 1) * 100) / 100, // Round to 2 decimals\n // Canvas support (deterministic)\n typeof document.createElement('canvas').getContext === 'function' ? 1 : 0,\n ];\n\n // Create deterministic entropy string\n const entropyString = entropyComponents.join(\"|\");\n\n // Add deterministic checksum instead of random values\n let checksum = 0;\n for (let i = 0; i < entropyString.length; i++) {\n checksum = ((checksum << 5) - checksum + entropyString.charCodeAt(i)) & 0xffffffff;\n }\n const deterministic = Math.abs(checksum).toString(36);\n\n // Advanced hash function with better distribution\n let hash = 0;\n const finalString = entropyString + deterministic;\n for (let i = 0; i < finalString.length; i++) {\n const char = finalString.charCodeAt(i);\n hash = ((hash << 5) - hash + char) & 0xffffffff;\n hash = hash ^ (hash >>> 16); // XOR with shifted bits for better distribution\n }\n\n if (!this.fingerprint) this.fingerprint = {} as any;\n (this.fingerprint as any).fallbackEntropy = Math.abs(hash).toString(36);\n } catch {\n // Last resort: noop\n }\n }\n }\n\n /**\n * Check if running on localhost\n */\n private isLocalhost(): boolean {\n if (typeof window === \"undefined\" || !window.location) return false;\n return (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\" ||\n window.location.hostname.startsWith(\"192.168.\") ||\n window.location.hostname.startsWith(\"10.\") ||\n window.location.hostname.includes(\"local\")\n );\n }\n\n /**\n * Send event to backend\n */\n private async sendEvent(eventData: any): Promise<any> {\n if (!this.isInitialized) {\n this.eventQueue.push(eventData);\n return;\n }\n\n try {\n const payload = {\n // workspaceId moved to query parameter\n fingerprintHash: this.fingerprint?.hash,\n stableCoreHash: (this.fingerprint as any)?.stableCoreHash,\n stableCoreVector: (this.fingerprint as any)?.stableCoreVector,\n // Send complete fingerprint data for embedding generation (includes all components: canvas, webgl, audio, fonts, etc.)\n fingerprintVector: this.fingerprint || undefined,\n incognitoDetection:\n (this.fingerprint as any)?.incognitoDetection &&\n ((this.fingerprint as any).incognitoDetection.likelihood !==\n undefined ||\n ((this.fingerprint as any).incognitoDetection.methods &&\n (this.fingerprint as any).incognitoDetection.methods.length > 0))\n ? (this.fingerprint as any).incognitoDetection\n : undefined,\n isSafari:\n typeof navigator !== \"undefined\" &&\n /safari/i.test(navigator.userAgent) &&\n !/chrome|chromium|opr|edg|edge/i.test(navigator.userAgent),\n // Client Hints (quando disponíveis)\n ch: (navigator as any).userAgentData\n ? {\n brands: (navigator as any).userAgentData.brands || [],\n platform: (navigator as any).userAgentData.platform || undefined,\n mobile: (navigator as any).userAgentData.mobile || undefined,\n model: (navigator as any).userAgentData.model || undefined,\n }\n : undefined,\n fingerprintComponents: this.fingerprint?.components || {},\n ...eventData,\n timestamp: new Date().toISOString(),\n url:\n typeof window !== \"undefined\" && window.location\n ? window.location.href\n : \"\",\n referrer: typeof document !== \"undefined\" ? document.referrer : \"\",\n pageTitle: typeof document !== \"undefined\" ? document.title : \"\",\n userAgent: typeof navigator !== \"undefined\" ? navigator.userAgent : \"\",\n // Use stabilized screen/viewport dimensions from fingerprint if available\n screenWidth:\n this.fingerprint?.screen?.value?.width ||\n (typeof window !== \"undefined\" && window.screen\n ? window.screen.width\n : 0),\n screenHeight:\n this.fingerprint?.screen?.value?.height ||\n (typeof window !== \"undefined\" && window.screen\n ? window.screen.height\n : 0),\n viewportWidth:\n this.fingerprint?.screen?.value?.viewportWidth ||\n (typeof window !== \"undefined\" ? window.innerWidth : 0),\n viewportHeight:\n this.fingerprint?.screen?.value?.viewportHeight ||\n (typeof window !== \"undefined\" ? window.innerHeight : 0),\n gdprMode: this.config.gdprMode,\n };\n\n const response = await this.makeRequest(\n `/tracking/event?token=${encodeURIComponent(this.config.token)}`,\n payload\n );\n\n // Store backend visitor ID and session ID from response\n if (response.visitorId) {\n this.backendVisitorId = response.visitorId;\n if (this.config.debug) {\n console.log(\n \"[Zaplier] Backend visitor ID received:\",\n response.visitorId\n );\n }\n }\n\n if (response.sessionId) {\n this.sessionId = response.sessionId;\n }\n\n return response;\n } catch (error) {\n if (this.config.debug) {\n console.error(\"[Zaplier] Event sending failed:\", error);\n }\n\n // Retry logic\n if (this.config.retryEnabled) {\n // Queue for retry (simplified)\n setTimeout(() => this.sendEvent(eventData), 5000);\n }\n }\n }\n\n /**\n * Make HTTP request to backend using anti-adblock system\n */\n private async makeRequest(\n endpoint: string,\n data: any,\n method: \"GET\" | \"POST\" = \"POST\"\n ): Promise<any> {\n const url = `${this.config.apiEndpoint}${endpoint}`;\n\n // Always try standard fetch first to get the response JSON (which contains visitorId)\n // Use anti-adblock as fallback if standard fetch is blocked or fails\n const options: RequestInit = {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n };\n\n if (method === \"POST\" && data) {\n options.body = JSON.stringify(data);\n }\n\n try {\n // Add timeout to detect if fetch is blocked/hanging\n const fetchWithTimeout = Promise.race([\n fetch(url, options),\n new Promise<Response>((_, reject) =>\n setTimeout(\n () => reject(new Error(\"Fetch timeout - possibly blocked\")),\n 5000\n )\n ),\n ]);\n\n const response = await fetchWithTimeout;\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const jsonResponse = await response.json();\n\n // If anti-adblock is enabled, also send via anti-adblock as a backup\n // (but don't wait for it or use its response)\n if (this.antiAdblockManager && method === \"POST\") {\n // Send in parallel without blocking\n this.antiAdblockManager.send(data, endpoint).catch(() => {\n // Silently fail - we already got the response from standard fetch\n });\n }\n\n return jsonResponse;\n } catch (error) {\n // If standard fetch fails (blocked, timeout, or network error), try anti-adblock as fallback\n if (this.antiAdblockManager && method === \"POST\") {\n if (this.config.debug) {\n console.warn(\n `[Zaplier] Standard fetch failed (${error instanceof Error ? error.message : String(error)}), trying anti-adblock fallback`\n );\n }\n\n try {\n const result = await this.antiAdblockManager.send(data, endpoint);\n\n if (result.success) {\n if (this.config.debug) {\n console.log(\n `[Zaplier] Request sent via ${result.method} (${result.latency}ms) as fallback`\n );\n }\n\n // Event was successfully sent via anti-adblock fallback\n // Note: visitorId will be obtained on the next successful request\n // (either standard fetch or anti-adblock) when the backend responds with it\n // This is acceptable because:\n // 1. The event was successfully tracked\n // 2. The visitorId will be available after the next event is sent\n // 3. Making an additional GET request here could also be blocked\n return { success: true, method: result.method };\n }\n } catch (antiAdblockError) {\n if (this.config.debug) {\n console.warn(\n \"[Zaplier] Both standard fetch and anti-adblock failed:\",\n antiAdblockError\n );\n }\n }\n }\n\n // Re-throw original error if all methods failed\n throw error;\n }\n }\n\n /**\n * Process queued events\n */\n private processEventQueue(): void {\n while (this.eventQueue.length > 0) {\n const event = this.eventQueue.shift();\n this.sendEvent(event);\n }\n }\n\n // Public API Methods\n\n /**\n * Track generic event\n */\n track(eventType: string, eventData?: Record<string, any>): void {\n this.sendEvent({\n eventType,\n eventName: eventType,\n customData: eventData,\n });\n }\n\n /**\n * Track custom event\n */\n trackCustomEvent(eventName: string, metadata?: Record<string, any>): boolean {\n this.sendEvent({\n eventType: \"custom\",\n eventName,\n customData: metadata,\n });\n return true;\n }\n\n /**\n * Track conversion event\n */\n trackConversion(\n eventName: string,\n value?: number,\n currency?: string,\n metadata?: Record<string, any>\n ): boolean {\n this.sendEvent({\n eventType: \"conversion\",\n eventName,\n revenue: value,\n currency: currency || \"USD\",\n customData: metadata,\n });\n return true;\n }\n\n /**\n * Track page view\n */\n trackPageView(data?: Partial<PageViewEvent>): void {\n this.sendEvent({\n eventType: \"page_view\",\n eventName: \"page_view\",\n ...data,\n });\n }\n\n /**\n * Track purchase\n */\n trackPurchase(data: {\n value?: number;\n revenue?: number;\n currency?: string;\n quantity?: number;\n productId?: string;\n productName?: string;\n orderId?: string;\n customData?: Record<string, any>;\n }): void {\n this.sendEvent({\n eventType: \"purchase\",\n eventName: \"purchase\",\n revenue: data.value || data.revenue,\n currency: data.currency || \"USD\",\n quantity: data.quantity || 1,\n productId: data.productId,\n customData: {\n productName: data.productName,\n orderId: data.orderId,\n ...data.customData,\n },\n });\n }\n\n /**\n * Track add to cart\n */\n trackAddToCart(data?: {\n productId?: string;\n productName?: string;\n price?: number;\n quantity?: number;\n customData?: Record<string, any>;\n }): void {\n this.sendEvent({\n eventType: \"add_to_cart\",\n eventName: \"add_to_cart\",\n revenue: data?.price,\n quantity: data?.quantity || 1,\n productId: data?.productId,\n customData: {\n productName: data?.productName,\n ...data?.customData,\n },\n });\n }\n\n /**\n * Track view content\n */\n trackViewContent(data?: {\n productId?: string;\n productName?: string;\n category?: string;\n customData?: Record<string, any>;\n }): void {\n this.sendEvent({\n eventType: \"view_content\",\n eventName: \"view_content\",\n productId: data?.productId,\n customData: {\n productName: data?.productName,\n category: data?.category,\n ...data?.customData,\n },\n });\n }\n\n /**\n * Track initiate checkout\n */\n trackInitiateCheckout(data?: {\n value?: number;\n currency?: string;\n numItems?: number;\n customData?: Record<string, any>;\n }): void {\n this.sendEvent({\n eventType: \"initiate_checkout\",\n eventName: \"initiate_checkout\",\n revenue: data?.value,\n currency: data?.currency || \"USD\",\n quantity: data?.numItems,\n customData: data?.customData,\n });\n }\n\n /**\n * Track lead\n */\n trackLead(data?: Record<string, any>): void {\n this.sendEvent({\n eventType: \"lead\",\n eventName: \"lead\",\n customData: data,\n });\n }\n\n /**\n * Identify user\n */\n identify(userData: {\n email?: string;\n phone?: string;\n [key: string]: any;\n }): void {\n this.sendEvent({\n eventType: \"identify\",\n eventName: \"identify\",\n email: userData.email,\n phone: userData.phone,\n customData: userData,\n });\n }\n\n /**\n * Track SPA navigation\n */\n trackSPANavigation(url?: string, title?: string): void {\n this.trackPageView({\n url:\n url ||\n (typeof window !== \"undefined\" && window.location\n ? window.location.href\n : \"\"),\n pageTitle:\n title || (typeof document !== \"undefined\" ? document.title : \"\"),\n });\n }\n\n /**\n * Reset scroll tracking\n */\n resetScrollTracking(): void {\n // Implementation for scroll tracking reset\n if (this.config.debug) {\n console.log(\"[Zaplier] Scroll tracking reset\");\n }\n }\n\n /**\n * Start presence tracking\n */\n startPresenceTracking(): void {\n this.config.presenceTracking = true;\n if (this.config.debug) {\n console.log(\"[Zaplier] Presence tracking started\");\n }\n }\n\n /**\n * Stop presence tracking\n */\n stopPresenceTracking(): void {\n this.config.presenceTracking = false;\n if (this.config.debug) {\n console.log(\"[Zaplier] Presence tracking stopped\");\n }\n }\n\n /**\n * Heatmap API\n */\n heatmap = {\n enable: (): void => {\n this.config.heatmap = true;\n\n if (!this.heatmapEngine && this.isInitialized) {\n // Ensure sessionId is available (should be set during initialization)\n if (!this.sessionId) {\n this.sessionId = this.generateSessionId();\n }\n const sessionId = this.sessionId;\n this.heatmapEngine = new HeatmapEngine(sessionId, {\n trackClicks: true,\n trackScrollDepth: true,\n trackRageClicks: true,\n trackMouseMoves: false,\n });\n this.heatmapEngine.start();\n }\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Heatmap enabled\");\n }\n },\n disable: (): void => {\n this.config.heatmap = false;\n\n if (this.heatmapEngine) {\n this.heatmapEngine.stop();\n this.heatmapEngine = undefined;\n }\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Heatmap disabled\");\n }\n },\n enableMouseTracking: (): void => {\n if (this.heatmapEngine) {\n this.heatmapEngine.enableMouseTracking();\n }\n },\n disableMouseTracking: (): void => {\n if (this.heatmapEngine) {\n this.heatmapEngine.disableMouseTracking();\n }\n },\n getStats: () => {\n return this.heatmapEngine ? this.heatmapEngine.getStats() : null;\n },\n isRecording: (): boolean => {\n return this.heatmapEngine ? this.heatmapEngine.isRecording() : false;\n },\n };\n\n /**\n * Replay API\n */\n replay = {\n enable: (): void => {\n this.config.replay = true;\n\n if (!this.replayEngine && this.isInitialized) {\n // Ensure sessionId is available (should be set during initialization)\n if (!this.sessionId) {\n this.sessionId = this.generateSessionId();\n }\n const sessionId = this.sessionId;\n this.replayEngine = new SessionReplayEngine(sessionId, {\n sampleRate: this.config.replaySampling,\n maskSensitiveFields: this.config.replayMaskInputs,\n compressionEnabled: true,\n });\n this.replayEngine.start();\n }\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Replay enabled\");\n }\n },\n disable: (): void => {\n this.config.replay = false;\n\n if (this.replayEngine) {\n this.replayEngine.stop();\n this.replayEngine = undefined;\n }\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Replay disabled\");\n }\n },\n start: (): boolean => {\n if (!this.replayEngine && this.isInitialized) {\n // Ensure sessionId is available (should be set during initialization)\n if (!this.sessionId) {\n this.sessionId = this.generateSessionId();\n }\n const sessionId = this.sessionId;\n this.replayEngine = new SessionReplayEngine(sessionId, {\n sampleRate: 1.0, // Force recording when manually started\n maskSensitiveFields: this.config.replayMaskInputs,\n compressionEnabled: true,\n });\n return this.replayEngine.start();\n }\n return this.replayEngine ? this.replayEngine.start() : false;\n },\n stop: (): void => {\n if (this.replayEngine) {\n this.replayEngine.stop();\n }\n },\n isRecording: (): boolean => {\n return this.replayEngine ? this.replayEngine.isRecording() : false;\n },\n getEventCount: (): number => {\n return this.replayEngine ? this.replayEngine.getEventCount() : 0;\n },\n addFunnelStep: (stepData: Record<string, any>): void => {\n this.sendEvent({\n eventType: \"funnel_step\",\n eventName: \"funnel_step\",\n customData: stepData,\n });\n },\n markConversion: (data: Record<string, any>): void => {\n this.trackConversion(\n \"funnel_conversion\",\n data.value,\n data.currency,\n data\n );\n },\n };\n\n /**\n * Enable enhanced tracking\n */\n enableEnhancedTracking(): boolean {\n this.config.enhancedTracking = \"true\";\n this.config.gdprMode = false;\n\n // Re-collect fingerprint with enhanced mode\n this.collectFingerprint();\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Enhanced tracking enabled\");\n }\n return true;\n }\n\n /**\n * Disable enhanced tracking\n */\n disableEnhancedTracking(): void {\n this.config.enhancedTracking = \"false\";\n this.config.gdprMode = true;\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Enhanced tracking disabled\");\n }\n }\n\n /**\n * Check if enhanced mode is active\n */\n isEnhancedMode(): boolean {\n return this.config.enhancedTracking === \"true\" && !this.config.gdprMode;\n }\n\n /**\n * Get visitor ID (real UUID from backend, or fallback)\n */\n getVisitorId(): string | null {\n return this.backendVisitorId || this.visitorId || null;\n }\n\n /**\n * Get visitor information from backend\n * Returns detailed visitor data including location, device info, and stats\n *\n * IMPORTANT: Only uses backendVisitorId (UUID), not the local visitorId with 'vis_' prefix\n */\n async getVisitorInfo(): Promise<VisitorInfo | null> {\n // Only use backendVisitorId (UUID), not the local visitorId\n // The backend endpoint expects UUID format, not 'vis_xxx' format\n const visitorId = this.backendVisitorId;\n\n if (!visitorId) {\n if (this.config.debug) {\n console.warn(\n \"[Zaplier] No backend visitor ID available. Track an event first and wait for the response.\"\n );\n }\n return null;\n }\n\n // Validate that it's a UUID format (not the local 'vis_xxx' format)\n const uuidRegex =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n if (!uuidRegex.test(visitorId)) {\n if (this.config.debug) {\n console.warn(\n \"[Zaplier] Invalid visitor ID format. Expected UUID, got:\",\n visitorId\n );\n }\n return null;\n }\n\n try {\n const response = await this.makeRequest(\n `/tracking/visitor/${visitorId}?token=${encodeURIComponent(\n this.config.token\n )}`,\n null,\n \"GET\"\n );\n\n return response;\n } catch (error) {\n if (this.config.debug) {\n console.error(\"[Zaplier] Failed to get visitor info:\", error);\n }\n return null;\n }\n }\n\n /**\n * Get visitor history (visits/events)\n * Returns visit history with location, IP, incognito, VPN detection\n */\n async getVisitorHistory(): Promise<VisitorHistory | null> {\n // Only use backendVisitorId (UUID), not the local visitorId\n const visitorId = this.backendVisitorId;\n\n if (!visitorId) {\n if (this.config.debug) {\n console.warn(\n \"[Zaplier] No backend visitor ID available. Track an event first and wait for the response.\"\n );\n }\n return null;\n }\n\n // Validate that it's a UUID format\n const uuidRegex =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n if (!uuidRegex.test(visitorId)) {\n if (this.config.debug) {\n console.warn(\n \"[Zaplier] Invalid visitor ID format. Expected UUID, got:\",\n visitorId\n );\n }\n return null;\n }\n\n try {\n const response = await this.makeRequest(\n `/tracking/visitor/${visitorId}/history?token=${encodeURIComponent(\n this.config.token\n )}`,\n null,\n \"GET\"\n );\n\n return response;\n } catch (error) {\n if (this.config.debug) {\n console.error(\"[Zaplier] Failed to get visitor history:\", error);\n }\n return null;\n }\n }\n\n /**\n * Get user data\n */\n getUserData(): UserData {\n // Default values for SSR compatibility\n const defaultDevice = {\n userAgent: \"\",\n language: \"\",\n screen: { width: 0, height: 0 },\n };\n\n // Only access browser APIs if available\n const device =\n typeof window !== \"undefined\" && typeof navigator !== \"undefined\"\n ? {\n userAgent: navigator.userAgent || \"\",\n language: navigator.language || \"\",\n screen: {\n width: window.screen?.width || 0,\n height: window.screen?.height || 0,\n },\n }\n : defaultDevice;\n\n return {\n sessionId: this.sessionId || \"\",\n visitorId: this.getVisitorId() || undefined,\n location: {}, // Will be populated by backend\n device,\n journey: [], // Will be populated by backend\n fingerprint: this.fingerprint?.hash,\n };\n }\n\n /**\n * Get conversion likelihood (mock implementation)\n */\n getConversionLikelihood(): {\n score: number;\n factors: string[];\n } {\n return {\n score: 0.5,\n factors: [\"Requires backend analysis\"],\n };\n }\n\n /**\n * Get user segment (mock implementation)\n */\n getUserSegment(): {\n type: \"high_intent\" | \"medium_intent\" | \"exploring\";\n confidence: number;\n } {\n return {\n type: \"medium_intent\",\n confidence: 0.5,\n };\n }\n}\n\n/**\n * Default export for ES modules\n */\nexport default ZaplierSDK;\n","/**\n * Global Interface for Zaplier SDK\n * Provides unified API for both Script tag and NPM usage\n */\n\nimport { ZaplierSDK } from \"../sdk\";\nimport type { SDKConfig } from \"../types\";\n\n// Global instance holder\nlet globalInstance: ZaplierSDK | null = null;\n\n/**\n * Unified Zaplier interface\n */\nexport const Zaplier = {\n /**\n * Initialize SDK\n */\n init: (config: SDKConfig): ZaplierSDK => {\n if (globalInstance) {\n console.warn('[Zaplier] SDK already initialized');\n return globalInstance;\n }\n\n globalInstance = new ZaplierSDK(config);\n return globalInstance;\n },\n\n /**\n * Get current instance\n */\n getInstance: (): ZaplierSDK | null => {\n return globalInstance;\n },\n\n /**\n * Track custom event\n */\n track: (eventType: string, eventData?: Record<string, any>): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.track(eventType, eventData);\n },\n\n /**\n * Track page view\n */\n trackPageView: (data?: any): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.trackPageView(data);\n },\n\n /**\n * Track custom event (alias for track)\n */\n trackEvent: (eventName: string, metadata?: Record<string, any>): boolean => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return false;\n }\n return globalInstance.trackCustomEvent(eventName, metadata);\n },\n\n /**\n * Track conversion\n */\n trackConversion: (\n conversionType: string,\n value?: number,\n currency?: string,\n metadata?: Record<string, any>\n ): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.trackConversion(conversionType, value, currency, metadata);\n },\n\n /**\n * Track purchase\n */\n trackPurchase: (data: {\n value: number;\n currency?: string;\n items?: Array<{\n id: string;\n name: string;\n category?: string;\n quantity?: number;\n price?: number;\n }>;\n orderId?: string;\n coupon?: string;\n }): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.trackPurchase(data);\n },\n\n /**\n * Track add to cart\n */\n trackAddToCart: (data?: {\n productId?: string;\n productName?: string;\n price?: number;\n quantity?: number;\n customData?: Record<string, any>;\n }): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.trackAddToCart(data);\n },\n\n /**\n * Identify user\n */\n identify: (userData: {\n email?: string;\n name?: string;\n id?: string;\n properties?: Record<string, any>;\n }): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.identify(userData);\n },\n\n /**\n * Get visitor ID\n */\n getVisitorId: (): string | null => {\n if (!globalInstance) {\n return null;\n }\n return globalInstance.getVisitorId();\n },\n\n /**\n * Get visitor info\n */\n getVisitorInfo: (): Promise<any> => {\n if (!globalInstance) {\n return Promise.resolve(null);\n }\n return globalInstance.getVisitorInfo();\n },\n\n /**\n * Get user data\n */\n getUserData: (): any => {\n if (!globalInstance) {\n return null;\n }\n return globalInstance.getUserData();\n },\n\n /**\n * Enable enhanced tracking\n */\n enableEnhancedTracking: (): boolean => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return false;\n }\n return globalInstance.enableEnhancedTracking();\n },\n\n /**\n * Disable enhanced tracking\n */\n disableEnhancedTracking: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.disableEnhancedTracking();\n },\n\n /**\n * Check if enhanced mode is active\n */\n isEnhancedMode: (): boolean => {\n if (!globalInstance) {\n return false;\n }\n return globalInstance.isEnhancedMode();\n },\n\n /**\n * Heatmap controls\n */\n heatmap: {\n enable: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.heatmap.enable();\n },\n disable: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.heatmap.disable();\n },\n enableMouseTracking: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.heatmap.enableMouseTracking();\n },\n disableMouseTracking: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.heatmap.disableMouseTracking();\n },\n getStats: () => {\n if (!globalInstance) {\n return null;\n }\n return globalInstance.heatmap.getStats();\n },\n isRecording: (): boolean => {\n if (!globalInstance) {\n return false;\n }\n return globalInstance.heatmap.isRecording();\n }\n },\n\n /**\n * Session replay controls\n */\n replay: {\n enable: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.replay.enable();\n },\n disable: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.replay.disable();\n },\n start: (): boolean => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return false;\n }\n return globalInstance.replay.start();\n },\n stop: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.replay.stop();\n },\n isRecording: (): boolean => {\n if (!globalInstance) {\n return false;\n }\n return globalInstance.replay.isRecording();\n },\n getEventCount: (): number => {\n if (!globalInstance) {\n return 0;\n }\n return globalInstance.replay.getEventCount();\n },\n addFunnelStep: (stepData: Record<string, any>): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.replay.addFunnelStep(stepData);\n },\n markConversion: (data: Record<string, any>): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.replay.markConversion(data);\n }\n },\n\n /**\n * Debug and utility functions\n */\n debug: {\n getStats: () => {\n if (!globalInstance || !globalInstance['antiAdblockManager']) {\n return null;\n }\n return (globalInstance as any).antiAdblockManager.getStats();\n },\n getSuccessRates: () => {\n if (!globalInstance || !globalInstance['antiAdblockManager']) {\n return null;\n }\n return (globalInstance as any).antiAdblockManager.getSuccessRates();\n },\n testTransports: () => {\n if (!globalInstance || !globalInstance['antiAdblockManager']) {\n return Promise.resolve(null);\n }\n return (globalInstance as any).antiAdblockManager.testTransports();\n }\n },\n\n /**\n * Version info\n */\n version: '3.0.0'\n};\n\n/**\n * Auto-initialization from script tag data attributes\n */\nexport function autoInitializeFromScript(): void {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n\n // Look for script tag with data attributes\n const scripts = document.getElementsByTagName('script');\n let configScript: HTMLScriptElement | null = null;\n\n for (const script of Array.from(scripts)) {\n if (script.src && (\n script.src.includes('zaplier') ||\n script.src.includes('sdk.js') ||\n script.src.includes('sdk.min.js')\n ) && script.dataset.token) {\n configScript = script;\n break;\n }\n }\n\n if (!configScript || !configScript.dataset.token) {\n return;\n }\n\n // Build config from data attributes\n const config: SDKConfig = {\n token: configScript.dataset.token,\n debug: configScript.dataset.debug === 'true',\n gdprMode: configScript.dataset.gdprMode === 'true',\n heatmap: configScript.dataset.heatmap === 'true',\n replay: configScript.dataset.replay === 'true',\n allow_localhost: configScript.dataset.allowLocalhost === 'true'\n };\n\n // Initialize SDK\n try {\n Zaplier.init(config);\n \n if (config.debug) {\n console.log('[Zaplier] Auto-initialized from script tag', config);\n }\n } catch (error) {\n console.error('[Zaplier] Auto-initialization failed:', error);\n }\n}\n\n// Expose to global scope for script tag usage\nif (typeof window !== 'undefined') {\n (window as any).Zaplier = Zaplier;\n \n // Auto-initialize if DOM is ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', autoInitializeFromScript);\n } else {\n autoInitializeFromScript();\n }\n}","/**\n * Bot Detection Module\n * Comprehensive client-side bot detection based on multiple techniques\n * Detects headless browsers, automation tools, and suspicious behavior\n */\n\nimport type { BotDetectionResult, BotDetectionMethods, DetectionResult, UserAgentAnalysis } from '../types/detection';\n\n/**\n * Known bot user agent patterns\n */\nconst BOT_PATTERNS = [\n // Headless browsers\n /HeadlessChrome/i,\n /PhantomJS/i,\n /SlimerJS/i,\n \n // Automation tools\n /Selenium/i,\n /WebDriver/i,\n /ChromeDriver/i,\n /GeckoDriver/i,\n \n // Crawlers and bots\n /bot/i,\n /crawler/i,\n /spider/i,\n /scraper/i,\n \n // Specific bots\n /Googlebot/i,\n /Bingbot/i,\n /Slurp/i,\n /DuckDuckBot/i,\n /Baiduspider/i,\n /YandexBot/i,\n /facebookexternalhit/i,\n /Twitterbot/i,\n /LinkedInBot/i,\n /WhatsApp/i,\n /SkypeUriPreview/i\n];\n\n/**\n * Suspicious user agent patterns\n */\nconst SUSPICIOUS_PATTERNS = [\n /^Mozilla\\/5\\.0$/,\n /Headless/i,\n /automated/i,\n /testing/i,\n /^$/\n];\n\n/**\n * Detect WebDriver presence\n */\nfunction detectWebDriver(): DetectionResult {\n try {\n // Check for webdriver property\n if (navigator.webdriver === true) {\n return {\n detected: true,\n confidence: 95,\n method: 'navigator.webdriver_true'\n };\n }\n \n // Check for webdriver in window\n if ((window as any).webdriver === true) {\n return {\n detected: true,\n confidence: 90,\n method: 'window.webdriver_true'\n };\n }\n \n // Check for selenium-specific properties\n const seleniumKeys = [\n '_selenium',\n 'callSelenium',\n '_Selenium_IDE_Recorder',\n 'callPhantom',\n '_phantom',\n '__phantomas',\n '__fxdriver_evaluate',\n '__fxdriver_unwrapped',\n '_fxdriver_evaluate',\n '_fxdriver_unwrapped'\n ];\n \n for (const key of seleniumKeys) {\n if (key in window || key in document) {\n return {\n detected: true,\n confidence: 85,\n method: `selenium_property_${key}`\n };\n }\n }\n \n // Check for webdriver in document\n if (document.documentElement.getAttribute('webdriver')) {\n return {\n detected: true,\n confidence: 80,\n method: 'document_webdriver_attribute'\n };\n }\n \n return {\n detected: false,\n confidence: 0,\n method: 'webdriver_not_detected'\n };\n \n } catch (error) {\n return {\n detected: false,\n confidence: 0,\n method: 'webdriver_error',\n details: { error: error instanceof Error ? error.message : 'Unknown' }\n };\n }\n}\n\n/**\n * Detect headless browser characteristics\n */\nfunction detectHeadlessBrowser(): DetectionResult {\n try {\n let suspiciousCount = 0;\n const issues: string[] = [];\n \n // Check for missing window properties\n if (!window.outerHeight || !window.outerWidth) {\n suspiciousCount++;\n issues.push('missing_outer_dimensions');\n }\n \n // Check for plugins\n if (navigator.plugins.length === 0) {\n suspiciousCount++;\n issues.push('no_plugins');\n }\n \n // Check for languages\n if (!navigator.languages || navigator.languages.length === 0) {\n suspiciousCount++;\n issues.push('no_languages');\n }\n \n // Check for inconsistent user agent\n const userAgent = navigator.userAgent;\n if (!userAgent || userAgent.length < 50) {\n suspiciousCount++;\n issues.push('short_user_agent');\n }\n \n // Check for notification permission (often undefined in headless)\n if (typeof (Notification as any)?.permission === 'undefined') {\n suspiciousCount++;\n issues.push('no_notification_permission');\n }\n \n // Check for missing performance API\n if (!window.performance || !window.performance.timing) {\n suspiciousCount++;\n issues.push('missing_performance_api');\n }\n \n // Check Chrome-specific headless indicators\n if (userAgent.includes('Chrome')) {\n // Check for missing chrome object\n if (!(window as any).chrome) {\n suspiciousCount++;\n issues.push('missing_chrome_object');\n }\n \n // Check for headless in user agent\n if (userAgent.includes('HeadlessChrome')) {\n return {\n detected: true,\n confidence: 95,\n method: 'chrome_headless_user_agent'\n };\n }\n }\n \n const confidence = Math.min(suspiciousCount * 15, 90);\n \n return {\n detected: suspiciousCount >= 3,\n confidence,\n method: 'headless_characteristics',\n details: { issues, suspiciousCount }\n };\n \n } catch (error) {\n return {\n detected: false,\n confidence: 0,\n method: 'headless_detection_error',\n details: { error: error instanceof Error ? error.message : 'Unknown' }\n };\n }\n}\n\n/**\n * Detect automation tools\n */\nfunction detectAutomationTools(): DetectionResult {\n try {\n const automationIndicators = [\n 'webdriver',\n 'selenium',\n 'phantomjs',\n 'slimerjs',\n 'chromedriver',\n 'geckodriver',\n 'automation',\n 'puppeteer'\n ];\n \n const detectedTools: string[] = [];\n \n // Check window properties\n for (const tool of automationIndicators) {\n if ((window as any)[tool] || (window as any)[`_${tool}`] || (window as any)[`__${tool}`]) {\n detectedTools.push(tool);\n }\n }\n \n // Check document properties\n for (const tool of automationIndicators) {\n if ((document as any)[tool] || (document as any)[`_${tool}`] || (document as any)[`__${tool}`]) {\n detectedTools.push(tool);\n }\n }\n \n // Check for automation-specific errors\n try {\n // Use safer method to test navigation object access\n const nav = (window as any).navigator;\n if (!nav) {\n detectedTools.push('navigation_missing');\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : '';\n if (errorMessage.includes('automation') || errorMessage.includes('webdriver')) {\n detectedTools.push('navigation_automation_error');\n }\n }\n \n if (detectedTools.length > 0) {\n return {\n detected: true,\n confidence: Math.min(detectedTools.length * 30, 95),\n method: 'automation_tools_detected',\n details: { tools: detectedTools }\n };\n }\n \n return {\n detected: false,\n confidence: 0,\n method: 'no_automation_tools'\n };\n \n } catch (error) {\n return {\n detected: false,\n confidence: 0,\n method: 'automation_detection_error',\n details: { error: error instanceof Error ? error.message : 'Unknown' }\n };\n }\n}\n\n/**\n * Detect DOM blockers (ad blockers and privacy tools)\n */\nfunction detectDOMBlockers(): DetectionResult {\n try {\n const blockerSelectors = [\n // Ad blocker elements\n '#ad-banner',\n '.advertisement',\n '.google-ads',\n '.adsense',\n \n // Analytics blockers\n '#google-analytics',\n '.analytics',\n '[src*=\"google-analytics\"]',\n '[src*=\"googletagmanager\"]',\n \n // Social media blockers\n '.facebook-widget',\n '.twitter-widget',\n '.social-share'\n ];\n \n let blockedCount = 0;\n \n for (const selector of blockerSelectors) {\n const element = document.querySelector(selector);\n if (!element) {\n blockedCount++;\n }\n }\n \n // Test if we can create tracking pixels\n try {\n const pixel = document.createElement('img');\n pixel.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n pixel.style.display = 'none';\n document.body.appendChild(pixel);\n \n setTimeout(() => {\n if (pixel.parentNode) {\n pixel.parentNode.removeChild(pixel);\n }\n }, 100);\n } catch {\n blockedCount++;\n }\n \n const confidence = Math.min(blockedCount * 20, 80);\n \n return {\n detected: blockedCount >= 2,\n confidence,\n method: 'dom_blockers',\n details: { blockedCount, totalTests: blockerSelectors.length + 1 }\n };\n \n } catch (error) {\n return {\n detected: false,\n confidence: 0,\n method: 'dom_blocker_error',\n details: { error: error instanceof Error ? error.message : 'Unknown' }\n };\n }\n}\n\n/**\n * Check for missing languages (common in bots)\n */\nfunction detectMissingLanguages(): DetectionResult {\n try {\n if (!navigator.languages || navigator.languages.length === 0) {\n return {\n detected: true,\n confidence: 70,\n method: 'no_languages'\n };\n }\n \n if (navigator.languages.length === 1 && navigator.languages[0] === 'en-US') {\n return {\n detected: true,\n confidence: 40,\n method: 'single_default_language'\n };\n }\n \n // Check for inconsistent language settings\n if (navigator.language !== navigator.languages[0]) {\n return {\n detected: true,\n confidence: 30,\n method: 'inconsistent_languages',\n details: {\n language: navigator.language,\n firstLanguage: navigator.languages[0]\n }\n };\n }\n \n return {\n detected: false,\n confidence: 0,\n method: 'languages_normal',\n details: { languageCount: navigator.languages.length }\n };\n \n } catch (error) {\n return {\n detected: true,\n confidence: 50,\n method: 'language_detection_error',\n details: { error: error instanceof Error ? error.message : 'Unknown' }\n };\n }\n}\n\n/**\n * Test for inconsistent eval behavior\n */\nfunction detectInconsistentEval(): DetectionResult {\n try {\n // Test if basic math computation works normally\n const testFunction = new Function('return 2 + 2');\n const result = testFunction();\n \n if (result !== 4) {\n return {\n detected: true,\n confidence: 90,\n method: 'function_constructor_incorrect_result',\n details: { expected: 4, actual: result }\n };\n }\n \n // Test if Function constructor toString() is modified\n const functionString = Function.toString();\n if (!functionString.includes('[native code]') && !functionString.includes('function Function()')) {\n return {\n detected: true,\n confidence: 70,\n method: 'function_constructor_modified_toString',\n details: { functionString: functionString.substring(0, 100) }\n };\n }\n \n return {\n detected: false,\n confidence: 0,\n method: 'eval_normal'\n };\n \n } catch (error) {\n return {\n detected: true,\n confidence: 60,\n method: 'eval_error',\n details: { error: error instanceof Error ? error.message : 'Unknown' }\n };\n }\n}\n\n/**\n * Analyze user agent for bot patterns\n */\nfunction analyzeUserAgent(): UserAgentAnalysis {\n const userAgent = navigator.userAgent;\n \n // Check for bot patterns\n const botPatterns = BOT_PATTERNS.filter(pattern => pattern.test(userAgent));\n const suspiciousPatterns = SUSPICIOUS_PATTERNS.filter(pattern => pattern.test(userAgent));\n \n let category: 'crawler' | 'automation' | 'headless' | 'legitimate' = 'legitimate';\n \n if (botPatterns.some(p => p.source.includes('bot|crawler|spider'))) {\n category = 'crawler';\n } else if (botPatterns.some(p => p.source.includes('Selenium|WebDriver'))) {\n category = 'automation';\n } else if (botPatterns.some(p => p.source.includes('Headless|Phantom'))) {\n category = 'headless';\n }\n \n const allPatterns = [...botPatterns.map(p => p.source), ...suspiciousPatterns.map(p => p.source)];\n \n return {\n browser: {\n name: 'Unknown',\n version: 'Unknown',\n major: 'Unknown',\n engine: 'unknown'\n },\n os: {\n name: 'Unknown',\n version: 'Unknown',\n family: 'unknown'\n },\n device: {\n type: 'desktop'\n },\n suspicious: {\n isBot: botPatterns.length > 0 || suspiciousPatterns.length > 0,\n patterns: allPatterns,\n category: botPatterns.length > 0 ? category : 'legitimate'\n },\n isMobile: false,\n isTablet: false,\n isDesktop: true,\n isBot: botPatterns.length > 0 || suspiciousPatterns.length > 0,\n raw: userAgent\n };\n}\n\n/**\n * Main bot detection function\n */\nexport async function detectBot(): Promise<BotDetectionResult> {\n // Run all detection methods\n const detectors: BotDetectionMethods = {\n webDriver: detectWebDriver(),\n headlessBrowser: detectHeadlessBrowser(),\n automationTools: detectAutomationTools(),\n domBlockers: detectDOMBlockers(),\n missingLanguages: detectMissingLanguages(),\n inconsistentEval: detectInconsistentEval(),\n \n // Behavioral detection (placeholder - would need more time to implement)\n humanBehavior: { detected: false, confidence: 0, method: 'not_implemented' },\n mouseMovement: { detected: false, confidence: 0, method: 'not_implemented' },\n clickPatterns: { detected: false, confidence: 0, method: 'not_implemented' },\n \n // Canvas/WebGL consistency (placeholder - would integrate with fingerprinting)\n canvasInconsistency: { detected: false, confidence: 0, method: 'not_implemented' },\n webglAnomaly: { detected: false, confidence: 0, method: 'not_implemented' },\n \n // Plugin detection\n missingPlugins: { detected: navigator.plugins.length === 0, confidence: 30, method: 'plugin_count' },\n inconsistentProperties: { detected: false, confidence: 0, method: 'not_implemented' },\n \n // Modified built-ins detection\n modifiedBuiltins: { detected: false, confidence: 0, method: 'not_implemented' }\n };\n \n // Analyze user agent\n const userAgent = analyzeUserAgent();\n \n // Calculate overall bot detection\n const positiveDetections = Object.values(detectors).filter(d => d.detected);\n const totalConfidence = positiveDetections.reduce((sum, d) => sum + d.confidence, 0);\n const averageConfidence = positiveDetections.length > 0 ? totalConfidence / positiveDetections.length : 0;\n \n // Determine if bot is detected\n const isBot = positiveDetections.length >= 2 || // Multiple detections\n positiveDetections.some(d => d.confidence >= 90) || // High confidence detection\n (userAgent.suspicious?.isBot ?? false); // User agent indicates bot\n \n // Determine risk level\n let riskLevel: 'low' | 'medium' | 'high' = 'low';\n if (averageConfidence >= 70) {\n riskLevel = 'high';\n } else if (averageConfidence >= 40 || positiveDetections.length >= 2) {\n riskLevel = 'medium';\n }\n \n return {\n isBot,\n confidence: Math.round(Math.min(averageConfidence, 95)),\n riskLevel,\n detectionMethods: Object.keys(detectors).filter(key => detectors[key]?.detected),\n detectors,\n userAgent\n };\n}\n\n/**\n * Quick bot detection (faster, less comprehensive)\n */\nexport async function quickBotDetection(): Promise<boolean> {\n // Check only the most reliable indicators\n const webDriver = detectWebDriver();\n const userAgent = analyzeUserAgent();\n \n return webDriver.detected || (userAgent.suspicious?.isBot ?? false);\n}","/**\n * Incognito Mode Detection (Analytics Only)\n *\n * Detects private/incognito browsing mode for analytics purposes only.\n * Does NOT use localStorage/sessionStorage for tracking or data persistence.\n * Used only to enrich analytics data with browser context information.\n */\n\nimport type {\n DetectionResult,\n IncognitoDetectionMethods,\n IncognitoDetectionResult,\n} from \"../types/detection\";\n\n/**\n * Test localStorage availability and behavior (ANALYTICS ONLY)\n *\n * NOTE: This function uses localStorage purely for DETECTION purposes.\n * It does NOT store any tracking data or persistent information.\n * Used only to analyze browser capabilities for analytics context.\n */\nasync function testLocalStorage(): Promise<DetectionResult> {\n try {\n const testKey = \"__incognito_test_\" + Date.now();\n const testValue = \"test\";\n\n // Try to set and get localStorage item (for detection only, immediately cleaned up)\n localStorage.setItem(testKey, testValue);\n const retrieved = localStorage.getItem(testKey);\n localStorage.removeItem(testKey); // Immediately cleanup test data\n\n // In some incognito modes, localStorage works but has limited capacity\n if (retrieved !== testValue) {\n return {\n detected: true,\n confidence: 80,\n method: \"localStorage_inconsistency\",\n details: { retrieved, expected: testValue },\n };\n }\n\n // Test storage capacity (incognito often has reduced limits) - DETECTION ONLY\n try {\n const largData = \"x\".repeat(1024 * 1024); // 1MB\n localStorage.setItem(\"__capacity_test\", largData); // Test only, immediately removed\n localStorage.removeItem(\"__capacity_test\"); // Immediate cleanup\n\n return {\n detected: false,\n confidence: 30,\n method: \"localStorage_capacity\",\n };\n } catch (capacityError) {\n // Limited capacity might indicate incognito\n return {\n detected: true,\n confidence: 60,\n method: \"localStorage_capacity_limited\",\n details: {\n error:\n capacityError instanceof Error ? capacityError.message : \"Unknown\",\n },\n };\n }\n } catch (error) {\n // localStorage completely unavailable\n return {\n detected: true,\n confidence: 90,\n method: \"localStorage_unavailable\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test sessionStorage availability (ANALYTICS ONLY)\n *\n * NOTE: Uses sessionStorage purely for browser capability detection.\n * No tracking data is stored - all test data is immediately removed.\n */\nasync function testSessionStorage(): Promise<DetectionResult> {\n try {\n const testKey = \"__session_test_\" + Date.now();\n const testValue = \"test\";\n\n sessionStorage.setItem(testKey, testValue); // Test only, immediately cleaned\n const retrieved = sessionStorage.getItem(testKey);\n sessionStorage.removeItem(testKey); // Immediate cleanup\n\n if (retrieved !== testValue) {\n return {\n detected: true,\n confidence: 75,\n method: \"sessionStorage_inconsistency\",\n details: { retrieved, expected: testValue },\n };\n }\n\n return {\n detected: false,\n confidence: 20,\n method: \"sessionStorage_working\",\n };\n } catch (error) {\n return {\n detected: true,\n confidence: 85,\n method: \"sessionStorage_unavailable\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test IndexedDB availability and behavior\n */\nasync function testIndexedDB(): Promise<DetectionResult> {\n try {\n if (!window.indexedDB) {\n return {\n detected: true,\n confidence: 70,\n method: \"indexedDB_unavailable\",\n };\n }\n\n return new Promise<DetectionResult>((resolve) => {\n const dbName = \"__incognito_test_\" + Date.now();\n const request = indexedDB.open(dbName, 1);\n\n const timeout = setTimeout(() => {\n resolve({\n detected: true,\n confidence: 60,\n method: \"indexedDB_timeout\",\n });\n }, 1000);\n\n request.onerror = () => {\n clearTimeout(timeout);\n resolve({\n detected: true,\n confidence: 80,\n method: \"indexedDB_error\",\n details: { error: request.error?.message },\n });\n };\n\n request.onsuccess = () => {\n clearTimeout(timeout);\n const db = request.result;\n\n // Clean up\n db.close();\n indexedDB.deleteDatabase(dbName);\n\n resolve({\n detected: false,\n confidence: 25,\n method: \"indexedDB_working\",\n });\n };\n\n request.onblocked = () => {\n clearTimeout(timeout);\n resolve({\n detected: true,\n confidence: 70,\n method: \"indexedDB_blocked\",\n });\n };\n });\n } catch (error) {\n return {\n detected: true,\n confidence: 85,\n method: \"indexedDB_exception\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test WebSQL availability (legacy browsers)\n */\nasync function testOpenDatabase(): Promise<DetectionResult> {\n try {\n const openDatabase = (window as any).openDatabase;\n\n if (!openDatabase) {\n return {\n detected: false,\n confidence: 10,\n method: \"openDatabase_unsupported\",\n };\n }\n\n const db = openDatabase(\"__test\", \"1.0\", \"Test\", 1024);\n\n if (!db) {\n return {\n detected: true,\n confidence: 60,\n method: \"openDatabase_failed\",\n };\n }\n\n return {\n detected: false,\n confidence: 20,\n method: \"openDatabase_working\",\n };\n } catch (error) {\n return {\n detected: true,\n confidence: 70,\n method: \"openDatabase_error\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test permissions API behavior\n */\nasync function testPermissions(): Promise<DetectionResult> {\n try {\n if (!navigator.permissions) {\n return {\n detected: false,\n confidence: 10,\n method: \"permissions_unsupported\",\n };\n }\n\n // Test notification permission (often different in incognito)\n const result = await navigator.permissions.query({ name: \"notifications\" });\n\n // In some browsers, incognito mode always returns \"denied\" for notifications\n if (result.state === \"denied\") {\n return {\n detected: true,\n confidence: 40,\n method: \"permissions_notifications_denied\",\n details: { state: result.state },\n };\n }\n\n return {\n detected: false,\n confidence: 30,\n method: \"permissions_working\",\n details: { state: result.state },\n };\n } catch (error) {\n return {\n detected: true,\n confidence: 50,\n method: \"permissions_error\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test quota management API (IMPROVED - 2024)\n *\n * Enhanced with better thresholds and browser-specific detection\n */\nasync function testQuotaManagement(): Promise<DetectionResult> {\n try {\n if (!navigator.storage || !navigator.storage.estimate) {\n return {\n detected: false,\n confidence: 10,\n method: \"quota_unsupported\",\n };\n }\n\n const estimate = await navigator.storage.estimate();\n const userAgent = navigator.userAgent;\n const isChrome = /Chrome/.test(userAgent) && !/Edg|OPR/.test(userAgent);\n const isSafari = /Safari/.test(userAgent) && !/Chrome/.test(userAgent);\n\n // Browser-specific quota thresholds for incognito detection\n let suspiciousQuota: number;\n let highConfidenceQuota: number;\n\n if (isChrome) {\n // Chrome incognito typically has 120MB or less\n suspiciousQuota = 150 * 1024 * 1024; // 150MB\n highConfidenceQuota = 120 * 1024 * 1024; // 120MB\n } else if (isSafari) {\n // Safari private mode has different limits\n suspiciousQuota = 50 * 1024 * 1024; // 50MB\n highConfidenceQuota = 25 * 1024 * 1024; // 25MB\n } else {\n // Generic thresholds for other browsers\n suspiciousQuota = 100 * 1024 * 1024; // 100MB\n highConfidenceQuota = 50 * 1024 * 1024; // 50MB\n }\n\n if (estimate.quota) {\n if (estimate.quota <= highConfidenceQuota) {\n return {\n detected: true,\n confidence: 85,\n method: \"quota_very_limited\",\n details: {\n quota: estimate.quota,\n usage: estimate.usage,\n quotaMB: Math.round(estimate.quota / (1024 * 1024)),\n threshold: Math.round(highConfidenceQuota / (1024 * 1024)),\n },\n };\n } else if (estimate.quota <= suspiciousQuota) {\n return {\n detected: true,\n confidence: 65,\n method: \"quota_limited\",\n details: {\n quota: estimate.quota,\n usage: estimate.usage,\n quotaMB: Math.round(estimate.quota / (1024 * 1024)),\n threshold: Math.round(suspiciousQuota / (1024 * 1024)),\n },\n };\n }\n }\n\n return {\n detected: false,\n confidence: 30,\n method: \"quota_normal\",\n details: {\n quota: estimate.quota,\n usage: estimate.usage,\n quotaMB: estimate.quota\n ? Math.round(estimate.quota / (1024 * 1024))\n : null,\n },\n };\n } catch (error) {\n return {\n detected: true,\n confidence: 50, // Lower confidence for errors\n method: \"quota_error\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test modern Chrome-specific incognito detection (ADDED - 2024)\n *\n * Based on detectIncognito library methodology\n * Uses Chrome's specific storage allocation in incognito mode\n */\nasync function testChromeIncognitoDetection(): Promise<DetectionResult> {\n try {\n const userAgent = navigator.userAgent;\n const isChrome = /Chrome/.test(userAgent) && !/Edg|OPR/.test(userAgent);\n\n if (!isChrome) {\n return {\n detected: false,\n confidence: 0,\n method: \"chrome_detection_not_applicable\",\n };\n }\n\n // Chrome-specific: Test FileSystem API quota behavior\n if ((window as any).webkitRequestFileSystem) {\n return new Promise<DetectionResult>((resolve) => {\n const success = () => {\n resolve({\n detected: false,\n confidence: 40,\n method: \"chrome_filesystem_available\",\n });\n };\n\n const error = () => {\n resolve({\n detected: true,\n confidence: 80,\n method: \"chrome_filesystem_blocked\",\n });\n };\n\n try {\n (window as any).webkitRequestFileSystem(0, 1, success, error);\n } catch (e) {\n resolve({\n detected: true,\n confidence: 70,\n method: \"chrome_filesystem_exception\",\n });\n }\n\n // Timeout fallback\n setTimeout(() => {\n resolve({\n detected: false,\n confidence: 20,\n method: \"chrome_filesystem_timeout\",\n });\n }, 1000);\n });\n }\n\n return {\n detected: false,\n confidence: 10,\n method: \"chrome_filesystem_unsupported\",\n };\n } catch (error) {\n return {\n detected: false,\n confidence: 10,\n method: \"chrome_detection_error\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test Safari-specific incognito detection (ADDED - 2024)\n *\n * Safari has unique behaviors in private mode\n */\nasync function testSafariIncognitoDetection(): Promise<DetectionResult> {\n try {\n const userAgent = navigator.userAgent;\n const isSafari = /Safari/.test(userAgent) && !/Chrome/.test(userAgent);\n\n if (!isSafari) {\n return {\n detected: false,\n confidence: 0,\n method: \"safari_detection_not_applicable\",\n };\n }\n\n // Safari-specific: Test localStorage.length behavior\n try {\n localStorage.setItem(\"__safari_test\", \"test\");\n const lengthBefore = localStorage.length;\n localStorage.removeItem(\"__safari_test\");\n\n if (lengthBefore === 0) {\n return {\n detected: true,\n confidence: 75,\n method: \"safari_localStorage_blocked\",\n };\n }\n } catch (e) {\n return {\n detected: true,\n confidence: 80,\n method: \"safari_localStorage_exception\",\n };\n }\n\n // Safari: Test window.indexedDB behavior\n if (!window.indexedDB) {\n return {\n detected: true,\n confidence: 70,\n method: \"safari_indexedDB_missing\",\n };\n }\n\n return {\n detected: false,\n confidence: 30,\n method: \"safari_detection_normal\",\n };\n } catch (error) {\n return {\n detected: false,\n confidence: 10,\n method: \"safari_detection_error\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test filesystem API availability\n */\nasync function testFilesystem(): Promise<DetectionResult> {\n try {\n const requestFileSystem =\n (window as any).requestFileSystem ||\n (window as any).webkitRequestFileSystem;\n\n if (!requestFileSystem) {\n return {\n detected: false,\n confidence: 10,\n method: \"filesystem_unsupported\",\n };\n }\n\n return new Promise<DetectionResult>((resolve) => {\n requestFileSystem(\n (window as any).TEMPORARY || 0,\n 1024,\n () => {\n resolve({\n detected: false,\n confidence: 30,\n method: \"filesystem_working\",\n });\n },\n (error: any) => {\n resolve({\n detected: true,\n confidence: 60,\n method: \"filesystem_error\",\n details: { error: error.name || \"Unknown\" },\n });\n }\n );\n\n // Timeout\n setTimeout(() => {\n resolve({\n detected: true,\n confidence: 50,\n method: \"filesystem_timeout\",\n });\n }, 1000);\n });\n } catch (error) {\n return {\n detected: true,\n confidence: 70,\n method: \"filesystem_exception\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test cookies enabled state\n */\nasync function testCookiesEnabled(): Promise<DetectionResult> {\n try {\n const cookiesEnabled = navigator.cookieEnabled;\n\n // Test by setting a cookie\n document.cookie = \"__incognito_test=test; path=/\";\n const cookieSet = document.cookie.includes(\"__incognito_test=test\");\n\n // Clean up\n document.cookie =\n \"__incognito_test=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/\";\n\n if (!cookiesEnabled || !cookieSet) {\n return {\n detected: true,\n confidence: 50,\n method: \"cookies_disabled\",\n details: { cookiesEnabled, cookieSet },\n };\n }\n\n return {\n detected: false,\n confidence: 20,\n method: \"cookies_working\",\n details: { cookiesEnabled, cookieSet },\n };\n } catch (error) {\n return {\n detected: true,\n confidence: 60,\n method: \"cookies_error\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test cache detection through timing\n */\nasync function testCacheDetection(): Promise<DetectionResult> {\n try {\n const image = new Image();\n const startTime = performance.now();\n\n return new Promise<DetectionResult>((resolve) => {\n const timeout = setTimeout(() => {\n resolve({\n detected: false,\n confidence: 10,\n method: \"cache_timeout\",\n });\n }, 3000);\n\n image.onload = () => {\n clearTimeout(timeout);\n const loadTime = performance.now() - startTime;\n\n // Very fast load might indicate cache is disabled (incognito)\n if (loadTime < 5) {\n resolve({\n detected: true,\n confidence: 30,\n method: \"cache_too_fast\",\n details: { loadTime },\n });\n } else {\n resolve({\n detected: false,\n confidence: 20,\n method: \"cache_normal\",\n details: { loadTime },\n });\n }\n };\n\n image.onerror = () => {\n clearTimeout(timeout);\n resolve({\n detected: false,\n confidence: 10,\n method: \"cache_error\",\n });\n };\n\n // Use a small, commonly cached image\n image.src =\n \"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\";\n });\n } catch (error) {\n return {\n detected: false,\n confidence: 10,\n method: \"cache_exception\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Detect browser-specific incognito patterns\n */\nfunction detectBrowserSpecificPatterns(): {\n browser: string;\n supportsDetection: boolean;\n} {\n const userAgent = navigator.userAgent.toLowerCase();\n\n if (userAgent.includes(\"chrome\")) {\n return { browser: \"Chrome\", supportsDetection: true };\n } else if (userAgent.includes(\"firefox\")) {\n return { browser: \"Firefox\", supportsDetection: true };\n } else if (userAgent.includes(\"safari\")) {\n return { browser: \"Safari\", supportsDetection: true };\n } else if (userAgent.includes(\"edge\")) {\n return { browser: \"Edge\", supportsDetection: true };\n }\n\n return { browser: \"Unknown\", supportsDetection: false };\n}\n\n/**\n * Main incognito detection function (IMPROVED - 2024)\n *\n * Enhanced with:\n * - Weighted scoring system to reduce false positives\n * - Browser-specific detection weights\n * - Multi-signal validation requirements\n * - Improved confidence thresholds\n */\nexport async function detectIncognitoMode(): Promise<IncognitoDetectionResult> {\n const browserInfo = detectBrowserSpecificPatterns();\n\n // Browser detection for specific weights\n const userAgent = navigator.userAgent;\n const isChrome = /Chrome/.test(userAgent) && !/Edg|OPR/.test(userAgent);\n const isSafari = /Safari/.test(userAgent) && !/Chrome/.test(userAgent);\n const isFirefox = /Firefox/.test(userAgent);\n const isEdge = /Edg/.test(userAgent);\n\n // Run critical detection methods with timeout protection\n const testTimeout = 2000; // 2 second timeout for each test\n\n const [\n localStorage,\n sessionStorage,\n indexedDB,\n permissions,\n quotaManagement,\n filesystem,\n cacheDetection,\n chromeSpecific,\n safariSpecific,\n ] = await Promise.allSettled([\n Promise.race([\n testLocalStorage(),\n timeoutPromise(testTimeout, \"localStorage\"),\n ]),\n Promise.race([\n testSessionStorage(),\n timeoutPromise(testTimeout, \"sessionStorage\"),\n ]),\n Promise.race([testIndexedDB(), timeoutPromise(testTimeout, \"indexedDB\")]),\n Promise.race([\n testPermissions(),\n timeoutPromise(testTimeout, \"permissions\"),\n ]),\n Promise.race([\n testQuotaManagement(),\n timeoutPromise(testTimeout, \"quotaManagement\"),\n ]),\n Promise.race([testFilesystem(), timeoutPromise(testTimeout, \"filesystem\")]),\n Promise.race([\n testCacheDetection(),\n timeoutPromise(testTimeout, \"cacheDetection\"),\n ]),\n Promise.race([\n testChromeIncognitoDetection(),\n timeoutPromise(testTimeout, \"chromeSpecific\"),\n ]),\n Promise.race([\n testSafariIncognitoDetection(),\n timeoutPromise(testTimeout, \"safariSpecific\"),\n ]),\n ]);\n\n // Process results with weighted scoring\n const detectedSignals: {\n method: string;\n confidence: number;\n weight: number;\n }[] = [];\n\n // Process each test result with browser-specific weights\n const testResults = [\n { name: \"localStorage\", result: localStorage },\n { name: \"sessionStorage\", result: sessionStorage },\n { name: \"indexedDB\", result: indexedDB },\n { name: \"permissions\", result: permissions },\n { name: \"quotaManagement\", result: quotaManagement },\n { name: \"filesystem\", result: filesystem },\n { name: \"cacheDetection\", result: cacheDetection },\n { name: \"chromeSpecific\", result: chromeSpecific },\n { name: \"safariSpecific\", result: safariSpecific },\n ];\n\n testResults.forEach(({ name, result }) => {\n if (result.status === \"fulfilled\" && result.value.detected) {\n const weight = getBrowserSpecificWeight(\n name,\n {\n isChrome,\n isSafari,\n isFirefox,\n isEdge,\n },\n result.value.confidence\n );\n\n detectedSignals.push({\n method: result.value.method,\n confidence: result.value.confidence,\n weight: weight,\n });\n }\n });\n\n // IMPROVED CONFIDENCE CALCULATION with weighted scoring\n const totalWeight = detectedSignals.reduce(\n (sum, signal) => sum + signal.weight,\n 0\n );\n const weightedConfidence = detectedSignals.reduce(\n (sum, signal) => sum + (signal.confidence * signal.weight) / 100,\n 0\n );\n\n // Browser-specific minimum weight thresholds to reduce false positives\n let minWeightThreshold: number;\n if (isSafari) {\n minWeightThreshold = 35; // Safari has some reliable signals\n } else if (isChrome || isEdge) {\n minWeightThreshold = 45; // Chrome/Edge need stronger evidence\n } else if (isFirefox) {\n minWeightThreshold = 40; // Firefox somewhere in between\n } else {\n minWeightThreshold = 50; // Unknown browsers need strongest evidence\n }\n\n // Require significant combined evidence\n const isDetected = totalWeight >= minWeightThreshold;\n const finalConfidence =\n totalWeight > 0\n ? Math.min(95, (weightedConfidence / totalWeight) * 100)\n : 0;\n\n // Legacy structure for compatibility\n const detectionMethods: IncognitoDetectionMethods = {\n localStorage:\n localStorage.status === \"fulfilled\"\n ? localStorage.value\n : { detected: false, confidence: 0, method: \"failed\" },\n sessionStorage:\n sessionStorage.status === \"fulfilled\"\n ? sessionStorage.value\n : { detected: false, confidence: 0, method: \"failed\" },\n indexedDB:\n indexedDB.status === \"fulfilled\"\n ? indexedDB.value\n : { detected: false, confidence: 0, method: \"failed\" },\n openDatabase: { detected: false, confidence: 0, method: \"deprecated\" }, // Deprecated\n permissions:\n permissions.status === \"fulfilled\"\n ? permissions.value\n : { detected: false, confidence: 0, method: \"failed\" },\n quotaManagement:\n quotaManagement.status === \"fulfilled\"\n ? quotaManagement.value\n : { detected: false, confidence: 0, method: \"failed\" },\n filesystem:\n filesystem.status === \"fulfilled\"\n ? filesystem.value\n : { detected: false, confidence: 0, method: \"failed\" },\n cookiesEnabled: { detected: false, confidence: 0, method: \"deprecated\" }, // Handled in server-side now\n cacheDetection:\n cacheDetection.status === \"fulfilled\"\n ? cacheDetection.value\n : { detected: false, confidence: 0, method: \"failed\" },\n };\n\n // Debug logging for development\n if (\n typeof window !== \"undefined\" &&\n (window as any).RabbitTracker?.config?.debug\n ) {\n console.debug(\"Incognito Detection Analysis:\", {\n browserInfo: { isChrome, isSafari, isFirefox, isEdge },\n detectedSignals,\n totalWeight,\n minWeightThreshold,\n finalConfidence,\n isDetected,\n });\n }\n\n return {\n isIncognito: isDetected,\n confidence: Math.round(finalConfidence),\n detectionMethods: detectedSignals.map((s) => s.method),\n details: {\n localStorage: detectionMethods.localStorage?.detected ?? false,\n sessionStorage: detectionMethods.sessionStorage?.detected ?? false,\n indexedDB: detectionMethods.indexedDB?.detected ?? false,\n cookiesEnabled: false, // Deprecated - handled server-side\n quota: detectionMethods.quotaManagement?.detected ? 0 : null,\n permissions: detectionMethods.permissions?.details || {},\n },\n };\n}\n\n/**\n * Helper function for timeout promises\n */\nfunction timeoutPromise(timeout: number, methodName: string): Promise<any> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n detected: false,\n confidence: 0,\n method: `${methodName}_timeout`,\n });\n }, timeout);\n });\n}\n\n/**\n * Get browser-specific weights for detection methods\n */\nfunction getBrowserSpecificWeight(\n method: string,\n browserInfo: {\n isChrome: boolean;\n isSafari: boolean;\n isFirefox: boolean;\n isEdge: boolean;\n },\n baseConfidence: number\n): number {\n const baseWeight = Math.floor(baseConfidence * 0.5); // More conservative base weight\n\n switch (method) {\n case \"quotaManagement\":\n // Chrome's quotaManagement is very reliable for incognito detection\n if (browserInfo.isChrome || browserInfo.isEdge)\n return Math.min(50, baseWeight + 25);\n if (browserInfo.isSafari) return Math.min(40, baseWeight + 15);\n return Math.min(30, baseWeight + 10);\n\n case \"filesystem\":\n // Chrome filesystem API is reliable\n if (browserInfo.isChrome || browserInfo.isEdge)\n return Math.min(40, baseWeight + 20);\n return Math.max(5, baseWeight - 5); // Less reliable in other browsers\n\n case \"indexedDB\":\n // Firefox often blocks IndexedDB in private mode\n if (browserInfo.isFirefox) return Math.min(45, baseWeight + 20);\n if (browserInfo.isSafari) return Math.min(35, baseWeight + 10);\n return baseWeight;\n\n case \"localStorage\":\n // localStorage tests are generally less reliable now\n return Math.max(5, baseWeight - 15);\n\n case \"sessionStorage\":\n // sessionStorage tests are also less reliable\n return Math.max(5, baseWeight - 10);\n\n case \"permissions\":\n // Permission API behavior can be useful\n if (browserInfo.isChrome) return Math.min(30, baseWeight + 10);\n return Math.max(5, baseWeight - 5);\n\n case \"cacheDetection\":\n // Cache detection is generally unreliable\n return Math.max(5, baseWeight - 20);\n\n case \"chromeSpecific\":\n // Chrome-specific detection methods are highly reliable\n if (browserInfo.isChrome) return Math.min(50, baseWeight + 30);\n return 0; // Not applicable to other browsers\n\n case \"safariSpecific\":\n // Safari-specific detection methods are highly reliable\n if (browserInfo.isSafari) return Math.min(45, baseWeight + 25);\n return 0; // Not applicable to other browsers\n\n default:\n return Math.max(5, baseWeight);\n }\n}\n\n/**\n * Quick incognito detection (less comprehensive but faster)\n */\nexport async function quickIncognitoDetection(): Promise<boolean> {\n try {\n // Test the most reliable indicators quickly\n const [localStorage, indexedDB] = await Promise.all([\n testLocalStorage(),\n testIndexedDB(),\n ]);\n\n return localStorage.detected || indexedDB.detected;\n } catch {\n return false;\n }\n}\n","/**\n * Enhanced User Agent Parser\n * Based on FingerprintJS browser detection with advanced engine and version parsing\n */\n\nimport type { UserAgentAnalysis } from '../types/detection';\n\n/**\n * Browser engine detection (based on FingerprintJS)\n */\nexport function isChromium(): boolean {\n try {\n return typeof (window as any).chrome === 'object' && \n (window as any).chrome !== null && \n typeof (window as any).chrome.runtime === 'object';\n } catch {\n return false;\n }\n}\n\nexport function isWebKit(): boolean {\n return navigator.userAgent.includes('WebKit') && \n !navigator.userAgent.includes('Chrome');\n}\n\nexport function isGecko(): boolean {\n return navigator.userAgent.includes('Gecko') && \n !navigator.userAgent.includes('Chrome');\n}\n\nexport function isSamsungInternet(): boolean {\n return navigator.userAgent.includes('SamsungBrowser') || \n navigator.userAgent.includes('Samsung Internet');\n}\n\nexport function isIPad(): boolean {\n // iPad detection (iOS 13+ shows as desktop Safari)\n return navigator.userAgent.includes('iPad') ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);\n}\n\nexport function isAndroid(): boolean {\n return navigator.userAgent.includes('Android');\n}\n\n/**\n * Extract browser version from user agent\n */\nfunction extractVersion(userAgent: string, pattern: RegExp): string {\n const match = userAgent.match(pattern);\n return match ? (match[1] || 'Unknown') : 'Unknown';\n}\n\n/**\n * Detect browser name and version\n */\nfunction detectBrowser(userAgent: string): { name: string; version: string; major: string; engine: string } {\n const ua = userAgent.toLowerCase();\n \n // Edge (Chromium-based)\n if (ua.includes('edg/')) {\n const version = extractVersion(userAgent, /edg\\/([0-9.]+)/i);\n return {\n name: 'Edge',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Edge Legacy\n if (ua.includes('edge/')) {\n const version = extractVersion(userAgent, /edge\\/([0-9.]+)/i);\n return {\n name: 'Edge Legacy',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'edgehtml'\n };\n }\n \n // Brave Browser (check before Chrome)\n if (ua.includes('brave/') || (navigator as any).brave) {\n const version = extractVersion(userAgent, /chrome\\/([0-9.]+)/i);\n return {\n name: 'Brave',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Samsung Internet\n if (isSamsungInternet()) {\n const version = extractVersion(userAgent, /samsungbrowser\\/([0-9.]+)/i) ||\n extractVersion(userAgent, /samsung internet ([0-9.]+)/i);\n return {\n name: 'Samsung Internet',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Chrome (check after other Chromium browsers)\n if (ua.includes('chrome/') && !ua.includes('edg')) {\n const version = extractVersion(userAgent, /chrome\\/([0-9.]+)/i);\n return {\n name: 'Chrome',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Firefox\n if (ua.includes('firefox/')) {\n const version = extractVersion(userAgent, /firefox\\/([0-9.]+)/i);\n return {\n name: 'Firefox',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'gecko'\n };\n }\n \n // Safari (check after Chrome to avoid false positives)\n if (ua.includes('safari/') && !ua.includes('chrome')) {\n const version = extractVersion(userAgent, /version\\/([0-9.]+)/i);\n return {\n name: 'Safari',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'webkit'\n };\n }\n \n // Opera (modern versions)\n if (ua.includes('opr/') || ua.includes('opera/')) {\n const version = extractVersion(userAgent, /(?:opr|opera)\\/([0-9.]+)/i);\n return {\n name: 'Opera',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: isChromium() ? 'chromium' : 'unknown'\n };\n }\n \n // Vivaldi\n if (ua.includes('vivaldi/')) {\n const version = extractVersion(userAgent, /vivaldi\\/([0-9.]+)/i);\n return {\n name: 'Vivaldi',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Yandex Browser\n if (ua.includes('yabrowser/')) {\n const version = extractVersion(userAgent, /yabrowser\\/([0-9.]+)/i);\n return {\n name: 'Yandex Browser',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Internet Explorer\n if (ua.includes('msie') || ua.includes('trident/')) {\n const version = extractVersion(userAgent, /(?:msie |rv:)([0-9.]+)/i);\n return {\n name: 'Internet Explorer',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'trident'\n };\n }\n \n // UC Browser\n if (ua.includes('ucbrowser/')) {\n const version = extractVersion(userAgent, /ucbrowser\\/([0-9.]+)/i);\n return {\n name: 'UC Browser',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // QQ Browser\n if (ua.includes('qqbrowser/')) {\n const version = extractVersion(userAgent, /qqbrowser\\/([0-9.]+)/i);\n return {\n name: 'QQ Browser',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Unknown browser\n return {\n name: 'Unknown',\n version: 'Unknown',\n major: 'Unknown',\n engine: 'unknown'\n };\n}\n\n/**\n * Detect operating system\n */\nfunction detectOS(userAgent: string): { name: string; version: string; family: string } {\n const ua = userAgent.toLowerCase();\n \n // Windows\n if (ua.includes('windows nt')) {\n const version = extractVersion(userAgent, /windows nt ([0-9.]+)/i);\n let osName = 'Windows';\n \n // Map NT versions to friendly names\n switch (version) {\n case '10.0': osName = 'Windows 10/11'; break;\n case '6.3': osName = 'Windows 8.1'; break;\n case '6.2': osName = 'Windows 8'; break;\n case '6.1': osName = 'Windows 7'; break;\n case '6.0': osName = 'Windows Vista'; break;\n case '5.1': osName = 'Windows XP'; break;\n default: osName = 'Windows';\n }\n \n return {\n name: osName,\n version,\n family: 'windows'\n };\n }\n \n // macOS / Mac OS X\n if (ua.includes('mac os x') || ua.includes('macos')) {\n const version = extractVersion(userAgent, /mac os x ([0-9._]+)/i) ||\n extractVersion(userAgent, /macos ([0-9._]+)/i);\n return {\n name: 'macOS',\n version: version.replace(/_/g, '.'),\n family: 'macos'\n };\n }\n \n // iOS\n if (ua.includes('iphone') || ua.includes('ipad') || ua.includes('ipod') || isIPad()) {\n const version = extractVersion(userAgent, /os ([0-9._]+)/i);\n return {\n name: 'iOS',\n version: version.replace(/_/g, '.'),\n family: 'ios'\n };\n }\n \n // Android\n if (isAndroid()) {\n const version = extractVersion(userAgent, /android ([0-9.]+)/i);\n return {\n name: 'Android',\n version,\n family: 'android'\n };\n }\n \n // Linux\n if (ua.includes('linux')) {\n return {\n name: 'Linux',\n version: 'Unknown',\n family: 'linux'\n };\n }\n \n // Chrome OS\n if (ua.includes('cros')) {\n const version = extractVersion(userAgent, /cros [a-z0-9_]+ ([0-9.]+)/i);\n return {\n name: 'Chrome OS',\n version,\n family: 'linux'\n };\n }\n \n // FreeBSD\n if (ua.includes('freebsd')) {\n return {\n name: 'FreeBSD',\n version: 'Unknown',\n family: 'unix'\n };\n }\n \n // Unknown OS\n return {\n name: 'Unknown',\n version: 'Unknown',\n family: 'unknown'\n };\n}\n\n/**\n * Detect device type\n */\nfunction detectDevice(userAgent: string): { type: 'desktop' | 'mobile' | 'tablet'; vendor?: string; model?: string } {\n const ua = userAgent.toLowerCase();\n \n // Tablet detection\n if (ua.includes('tablet') || isIPad()) {\n if (isIPad()) {\n return { type: 'tablet', vendor: 'Apple', model: 'iPad' };\n }\n if (ua.includes('kindle')) {\n return { type: 'tablet', vendor: 'Amazon', model: 'Kindle' };\n }\n return { type: 'tablet' };\n }\n \n // Mobile detection\n if (ua.includes('mobile') || \n ua.includes('iphone') || \n ua.includes('ipod') || \n isAndroid()) {\n \n if (ua.includes('iphone')) {\n return { type: 'mobile', vendor: 'Apple', model: 'iPhone' };\n }\n if (ua.includes('ipod')) {\n return { type: 'mobile', vendor: 'Apple', model: 'iPod' };\n }\n if (isAndroid() && ua.includes('mobile')) {\n return { type: 'mobile', vendor: 'Android' };\n }\n \n return { type: 'mobile' };\n }\n \n // Desktop (default)\n return { type: 'desktop' };\n}\n\n/**\n * Check for suspicious patterns in user agent\n */\nfunction analyzeSuspiciousPatterns(userAgent: string): { isBot: boolean; patterns: string[]; category: string } {\n const patterns: string[] = [];\n let category = 'legitimate';\n \n // Bot patterns\n const botKeywords = [\n 'bot', 'crawler', 'spider', 'scraper', 'automation',\n 'headless', 'phantom', 'selenium', 'webdriver',\n 'google', 'bing', 'yahoo', 'baidu', 'yandex',\n 'facebook', 'twitter', 'linkedin', 'whatsapp'\n ];\n \n for (const keyword of botKeywords) {\n if (userAgent.toLowerCase().includes(keyword)) {\n patterns.push(keyword);\n \n if (['bot', 'crawler', 'spider', 'scraper'].some(k => keyword.includes(k))) {\n category = 'crawler';\n } else if (['selenium', 'webdriver', 'automation'].some(k => keyword.includes(k))) {\n category = 'automation';\n } else if (['headless', 'phantom'].some(k => keyword.includes(k))) {\n category = 'headless';\n }\n }\n }\n \n // Suspicious patterns\n if (userAgent.length < 10) {\n patterns.push('too_short');\n }\n \n if (!userAgent || userAgent === 'Mozilla/5.0') {\n patterns.push('generic_mozilla');\n }\n \n const isBot = patterns.length > 0;\n \n return { isBot, patterns, category };\n}\n\n/**\n * Enhanced user agent analysis\n */\nexport function analyzeUserAgent(userAgent?: string): UserAgentAnalysis {\n const ua = userAgent || navigator.userAgent || '';\n \n const browser = detectBrowser(ua);\n const os = detectOS(ua);\n const device = detectDevice(ua);\n const suspicious = analyzeSuspiciousPatterns(ua);\n \n return {\n browser: {\n name: browser.name,\n version: browser.version,\n major: browser.major,\n engine: browser.engine as any\n },\n os: {\n name: os.name,\n version: os.version,\n family: os.family as any\n },\n device: {\n type: device.type,\n vendor: device.vendor,\n model: device.model\n },\n suspicious: {\n isBot: suspicious.isBot,\n patterns: suspicious.patterns,\n category: suspicious.category as any\n },\n isMobile: device.type === 'mobile',\n isTablet: device.type === 'tablet',\n isDesktop: device.type === 'desktop',\n isBot: suspicious.isBot,\n raw: ua\n };\n}\n\n/**\n * Get browser engine type\n */\nexport function getBrowserEngine(): 'chromium' | 'webkit' | 'gecko' | 'trident' | 'unknown' {\n if (isChromium()) return 'chromium';\n if (isWebKit()) return 'webkit';\n if (isGecko()) return 'gecko';\n \n const ua = navigator.userAgent.toLowerCase();\n if (ua.includes('trident')) return 'trident';\n \n return 'unknown';\n}\n\n/**\n * Check if running on mobile device\n */\nexport function isMobile(): boolean {\n return detectDevice(navigator.userAgent).type === 'mobile';\n}\n\n/**\n * Check if running on tablet\n */\nexport function isTablet(): boolean {\n return detectDevice(navigator.userAgent).type === 'tablet';\n}\n\n/**\n * Check if running on desktop\n */\nexport function isDesktop(): boolean {\n return detectDevice(navigator.userAgent).type === 'desktop';\n}","export interface IncognitoDetection {\n likelihood: number; // 0..1\n methods: string[];\n}\n\nfunction safeHas(fn: () => any): boolean {\n try {\n return !!fn();\n } catch {\n return false;\n }\n}\n\n/**\n * Test if localStorage actually works (not just exists)\n */\nasync function testLocalStorage(): Promise<boolean> {\n try {\n const testKey = \"__incognito_test__\";\n const testValue = Date.now().toString();\n localStorage.setItem(testKey, testValue);\n const retrieved = localStorage.getItem(testKey);\n localStorage.removeItem(testKey);\n return retrieved === testValue;\n } catch {\n return false;\n }\n}\n\n/**\n * Test if sessionStorage actually works (not just exists)\n */\nasync function testSessionStorage(): Promise<boolean> {\n try {\n const testKey = \"__incognito_test__\";\n const testValue = Date.now().toString();\n sessionStorage.setItem(testKey, testValue);\n const retrieved = sessionStorage.getItem(testKey);\n sessionStorage.removeItem(testKey);\n return retrieved === testValue;\n } catch {\n return false;\n }\n}\n\n/**\n * Test if IndexedDB actually works (not just exists)\n */\nasync function testIndexedDB(): Promise<boolean> {\n try {\n if (!window.indexedDB) return false;\n // Try to open a test database\n return new Promise((resolve) => {\n const request = indexedDB.open(\"__incognito_test__\", 1);\n request.onsuccess = () => {\n request.result.close();\n indexedDB.deleteDatabase(\"__incognito_test__\");\n resolve(true);\n };\n request.onerror = () => resolve(false);\n request.onblocked = () => resolve(false);\n });\n } catch {\n return false;\n }\n}\n\n/**\n * Test if cookies actually work (write and read)\n */\nfunction testCookies(): boolean {\n try {\n const testKey = \"__incognito_test__\";\n const testValue = Date.now().toString();\n document.cookie = `${testKey}=${testValue}; SameSite=Strict; path=/`;\n const hasCookie = document.cookie.indexOf(`${testKey}=${testValue}`) !== -1;\n // Clean up\n document.cookie = `${testKey}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`;\n return hasCookie;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if navigator.languages is suspicious (Chrome 86+ incognito has only 1 value)\n */\nfunction checkLanguagesAnomaly(): boolean {\n try {\n if (Array.isArray(navigator.languages)) {\n // In Chrome 86+ incognito, navigator.languages only has 1 element (same as navigator.language)\n // In normal mode, it usually has multiple\n if (navigator.languages.length === 1 && navigator.language) {\n return navigator.languages[0] === navigator.language;\n }\n }\n return false;\n } catch {\n return false;\n }\n}\n\nexport async function detectIncognitoHeuristics(): Promise<IncognitoDetection> {\n const methods: string[] = [];\n let score = 0;\n\n // CRITICAL: Test if localStorage actually works (not just exists)\n // In incognito, localStorage may exist but fail on write/read\n const localStorageWorks = await testLocalStorage();\n if (!localStorageWorks) {\n score += 0.25;\n methods.push(\"localStorage_blocked\");\n }\n\n // CRITICAL: Test if sessionStorage actually works\n const sessionStorageWorks = await testSessionStorage();\n if (!sessionStorageWorks) {\n score += 0.2;\n methods.push(\"sessionStorage_blocked\");\n }\n\n // CRITICAL: Test if IndexedDB actually works\n // In Firefox incognito, IndexedDB exists but throws errors\n const indexedDBWorks = await testIndexedDB();\n if (!indexedDBWorks) {\n score += 0.15;\n methods.push(\"indexedDB_blocked\");\n }\n\n // CRITICAL: Test if cookies actually work\n const cookiesWork = testCookies();\n if (!cookiesWork) {\n score += 0.2;\n methods.push(\"cookies_blocked\");\n }\n\n // Chrome 86+ incognito: navigator.languages has only 1 value\n // This is a strong indicator in Chrome/Brave\n if (checkLanguagesAnomaly()) {\n score += 0.25; // Increased weight - very reliable in Chrome/Brave\n methods.push(\"languages_single_value\");\n }\n\n // Additional Chrome/Brave-specific checks\n // In Chrome/Brave incognito, some APIs may exist but behave differently\n try {\n // Check if we can actually write to localStorage (even if it exists)\n if (localStorageWorks) {\n // Try to detect if localStorage is in a \"temporary\" state\n // In incognito, localStorage may work but be cleared between sessions\n const testKey = \"__incognito_persistence_test__\";\n const testValue = \"persist_test\";\n localStorage.setItem(testKey, testValue);\n // Immediately check if it persisted (some browsers clear it instantly in incognito)\n const persisted = localStorage.getItem(testKey) === testValue;\n localStorage.removeItem(testKey);\n if (!persisted) {\n score += 0.2;\n methods.push(\"localStorage_not_persistent\");\n }\n }\n } catch {\n // Ignore\n }\n\n // storage.estimate quota anomalies (more precise thresholds)\n try {\n if ((navigator as any).storage?.estimate) {\n const est = await (navigator as any).storage.estimate();\n const quota = est?.quota || 0;\n const usage = est?.usage || 0;\n\n // In incognito, quota is usually very low (< 120MB) or 0\n if (quota === 0) {\n score += 0.3;\n methods.push(\"storage_quota_zero\");\n } else if (quota > 0 && quota < 120 * 1024 * 1024) {\n score += 0.25;\n methods.push(\"storage_quota_low\");\n }\n\n // Usage is usually 0 in incognito\n if (usage === 0 && quota > 0) {\n score += 0.1;\n methods.push(\"storage_usage_zero\");\n }\n } else {\n methods.push(\"storage_estimate_unavailable\");\n }\n } catch {\n methods.push(\"storage_estimate_error\");\n }\n\n // ServiceWorker/Cache restritos\n if (!(\"serviceWorker\" in navigator)) {\n score += 0.1;\n methods.push(\"service_worker_absent\");\n }\n if (!(\"caches\" in window)) {\n score += 0.05;\n methods.push(\"cache_api_absent\");\n }\n\n // Permissions API (push/notifications) - more reliable test\n try {\n if ((navigator as any).permissions?.query) {\n const res = await (navigator as any).permissions.query({\n name: \"notifications\" as any,\n });\n if (res?.state === \"denied\") {\n score += 0.05;\n methods.push(\"notifications_denied\");\n }\n }\n } catch {\n methods.push(\"permissions_query_error\");\n }\n\n // File System Access API (Chrome only, blocked in incognito)\n if (!safeHas(() => (window as any).showOpenFilePicker)) {\n methods.push(\"fs_access_absent\");\n }\n\n // Network Information API (blocked in some browsers incognito)\n if (!(\"connection\" in navigator)) {\n methods.push(\"network_info_absent\");\n }\n\n // Bound score and determine likelihood\n score = Math.max(0, Math.min(1, score));\n\n // High confidence thresholds\n // If multiple storage APIs are blocked, very likely incognito\n const blockedStorageCount = [\n localStorageWorks,\n sessionStorageWorks,\n indexedDBWorks,\n cookiesWork,\n ].filter((x) => !x).length;\n if (blockedStorageCount >= 3) {\n score = Math.max(score, 0.85); // High confidence\n } else if (blockedStorageCount >= 2) {\n score = Math.max(score, 0.7); // Medium-high confidence\n }\n\n // CRITICAL: Chrome/Brave incognito often shows languages_single_value\n // If this is detected along with other signals, boost confidence\n const hasLanguagesAnomaly = methods.includes(\"languages_single_value\");\n if (hasLanguagesAnomaly && (blockedStorageCount >= 1 || score >= 0.2)) {\n score = Math.max(score, 0.5); // Medium confidence - likely incognito\n }\n\n return { likelihood: score, methods };\n}\n","/**\n * Hardware Fingerprinting Module\n * Based on FingerprintJS hardware detection techniques\n */\n\n/**\n * Device Memory Detection\n * Detects available device memory in GB\n */\nexport function getDeviceMemory(): number | null {\n try {\n // navigator.deviceMemory returns memory in GB (e.g., 8 for 8GB)\n if ('deviceMemory' in navigator) {\n const memory = (navigator as any).deviceMemory;\n return typeof memory === 'number' ? memory : null;\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Hardware Concurrency Detection\n * Detects number of logical processors\n */\nexport function getHardwareConcurrency(): number | null {\n try {\n if ('hardwareConcurrency' in navigator) {\n const concurrency = navigator.hardwareConcurrency;\n return typeof concurrency === 'number' ? concurrency : null;\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * CPU Architecture Detection\n * Attempts to detect CPU architecture from various sources\n */\nexport function getArchitecture(): string {\n try {\n // Try multiple methods to detect architecture\n const sources = [\n navigator.platform,\n navigator.userAgent,\n // Check for ARM indicators\n navigator.userAgent.includes('ARM') ? 'ARM' : null,\n navigator.userAgent.includes('arm64') ? 'ARM64' : null,\n navigator.userAgent.includes('aarch64') ? 'ARM64' : null,\n // Check for x86 indicators\n navigator.userAgent.includes('x86_64') ? 'x86_64' : null,\n navigator.userAgent.includes('WOW64') ? 'x86_64' : null,\n navigator.userAgent.includes('Win64') ? 'x86_64' : null,\n // Check for Intel indicators\n navigator.userAgent.includes('Intel') ? 'Intel' : null,\n ].filter(Boolean);\n\n return sources.join('|') || 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Max Touch Points Detection\n * Detects maximum number of simultaneous touch contact points\n */\nexport function getMaxTouchPoints(): number {\n try {\n return navigator.maxTouchPoints || 0;\n } catch {\n return 0;\n }\n}\n\n/**\n * Check if hardware fingerprinting is available\n */\nexport function isHardwareDetectionAvailable(): boolean {\n return typeof navigator !== 'undefined';\n}\n\n/**\n * Get complete hardware fingerprint\n */\nexport interface HardwareFingerprint {\n deviceMemory: number | null;\n hardwareConcurrency: number | null;\n architecture: string;\n maxTouchPoints: number;\n platform: string;\n}\n\nexport function getHardwareFingerprint(): HardwareFingerprint {\n return {\n deviceMemory: getDeviceMemory(),\n hardwareConcurrency: getHardwareConcurrency(),\n architecture: getArchitecture(),\n maxTouchPoints: getMaxTouchPoints(),\n platform: navigator.platform || 'unknown',\n };\n}","/**\n * System Fingerprinting Module\n * Based on FingerprintJS system detection techniques\n */\n\n/**\n * Timezone Detection\n * Gets the user's timezone with multiple fallbacks\n */\nexport function getTimezone(): string {\n try {\n // Primary method: Intl.DateTimeFormat\n if (typeof Intl !== 'undefined' && Intl.DateTimeFormat) {\n const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if (timezone) {\n return timezone;\n }\n }\n\n // Fallback: timezone offset (STABLE - use standard time to avoid DST changes)\n const offset = new Date(2024, 0, 1).getTimezoneOffset();\n return `UTC${offset > 0 ? '-' : '+'}${Math.abs(offset / 60)}`;\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Languages Detection\n * Gets complete language preferences list\n */\nexport function getLanguages(): string[] {\n try {\n const languages: string[] = [];\n \n // Get navigator.languages (preferred)\n if (navigator.languages && Array.isArray(navigator.languages)) {\n languages.push(...navigator.languages);\n }\n \n // Fallback to navigator.language\n if (navigator.language) {\n languages.push(navigator.language);\n }\n \n // Additional fallbacks\n const legacyLanguage = (navigator as any).userLanguage || (navigator as any).browserLanguage;\n if (legacyLanguage) {\n languages.push(legacyLanguage);\n }\n\n // Remove duplicates and return\n return [...new Set(languages)];\n } catch {\n return ['unknown'];\n }\n}\n\n/**\n * Date/Time Locale Detection\n * Detects locale formatting preferences\n */\nexport function getDateTimeLocale(): Record<string, string> {\n try {\n if (typeof Intl !== 'undefined' && Intl.DateTimeFormat) {\n const formatter = new Intl.DateTimeFormat();\n const options = formatter.resolvedOptions();\n \n return {\n locale: options.locale || 'unknown',\n calendar: options.calendar || 'unknown',\n numberingSystem: options.numberingSystem || 'unknown',\n timeZone: options.timeZone || 'unknown',\n };\n }\n \n return { locale: 'unknown' };\n } catch {\n return { locale: 'unknown' };\n }\n}\n\n/**\n * Platform Extended Detection\n * Enhanced platform detection with additional info\n */\nexport function getPlatformExtended(): Record<string, any> {\n try {\n const platform: Record<string, any> = {\n platform: navigator.platform || 'unknown',\n oscpu: (navigator as any).oscpu || null,\n vendor: navigator.vendor || null,\n };\n\n // Try to detect OS from user agent\n const userAgent = navigator.userAgent;\n if (userAgent.includes('Windows')) {\n platform.os = 'Windows';\n if (userAgent.includes('Windows NT 10.0')) platform.osVersion = '10';\n else if (userAgent.includes('Windows NT 6.3')) platform.osVersion = '8.1';\n else if (userAgent.includes('Windows NT 6.2')) platform.osVersion = '8';\n else if (userAgent.includes('Windows NT 6.1')) platform.osVersion = '7';\n } else if (userAgent.includes('Macintosh') || userAgent.includes('Mac OS')) {\n platform.os = 'macOS';\n const match = userAgent.match(/Mac OS X ([0-9_]+)/);\n if (match && match[1]) platform.osVersion = match[1].replace(/_/g, '.');\n } else if (userAgent.includes('Linux')) {\n platform.os = 'Linux';\n } else if (userAgent.includes('Android')) {\n platform.os = 'Android';\n const match = userAgent.match(/Android ([0-9.]+)/);\n if (match && match[1]) platform.osVersion = match[1];\n } else if (userAgent.includes('iOS') || userAgent.includes('iPhone') || userAgent.includes('iPad')) {\n platform.os = 'iOS';\n const match = userAgent.match(/OS ([0-9_]+)/);\n if (match && match[1]) platform.osVersion = match[1].replace(/_/g, '.');\n }\n\n return platform;\n } catch {\n return { platform: 'unknown' };\n }\n}\n\n/**\n * Check if system fingerprinting is available\n */\nexport function isSystemDetectionAvailable(): boolean {\n return typeof navigator !== 'undefined';\n}\n\n/**\n * Get complete system fingerprint\n */\nexport interface SystemFingerprint {\n timezone: string;\n languages: string[];\n dateTimeLocale: Record<string, string>;\n platform: Record<string, any>;\n cookiesEnabled: boolean;\n}\n\nexport function getSystemFingerprint(): SystemFingerprint {\n return {\n timezone: getTimezone(),\n languages: getLanguages(),\n dateTimeLocale: getDateTimeLocale(),\n platform: getPlatformExtended(),\n cookiesEnabled: navigator.cookieEnabled || false,\n };\n}","/**\n * Storage Fingerprinting Module\n * Based on FingerprintJS storage detection techniques\n */\n\n/**\n * Local Storage Detection\n * Tests availability and behavior of localStorage\n */\nexport function getLocalStorageSupport(): boolean | \"blocked\" {\n try {\n if (typeof localStorage === \"undefined\") {\n return false;\n }\n\n const testKey = \"__rb_test__\";\n const testValue = \"test\";\n\n localStorage.setItem(testKey, testValue);\n const retrieved = localStorage.getItem(testKey);\n localStorage.removeItem(testKey);\n\n return retrieved === testValue;\n } catch (error) {\n // Storage might be blocked or disabled\n return \"blocked\";\n }\n}\n\n/**\n * Session Storage Detection\n * Tests availability and behavior of sessionStorage\n */\nexport function getSessionStorageSupport(): boolean | \"blocked\" {\n try {\n if (typeof sessionStorage === \"undefined\") {\n return false;\n }\n\n const testKey = \"__rb_test__\";\n const testValue = \"test\";\n\n sessionStorage.setItem(testKey, testValue);\n const retrieved = sessionStorage.getItem(testKey);\n sessionStorage.removeItem(testKey);\n\n return retrieved === testValue;\n } catch (error) {\n return \"blocked\";\n }\n}\n\n/**\n * IndexedDB Detection\n * Tests availability of IndexedDB\n */\nexport function getIndexedDBSupport(): Promise<boolean | \"blocked\"> {\n return new Promise((resolve) => {\n try {\n if (!(\"indexedDB\" in window)) {\n resolve(false);\n return;\n }\n\n const testName = \"__rb_test_db__\";\n const request = indexedDB.open(testName, 1);\n\n let hasResolved = false;\n\n const resolveOnce = (value: boolean | \"blocked\") => {\n if (!hasResolved) {\n hasResolved = true;\n resolve(value);\n }\n };\n\n // Set a timeout to avoid hanging\n setTimeout(() => resolveOnce(\"blocked\"), 1000);\n\n request.onerror = () => resolveOnce(\"blocked\");\n request.onsuccess = () => {\n try {\n const db = request.result;\n db.close();\n // Try to delete the test database\n const deleteRequest = indexedDB.deleteDatabase(testName);\n deleteRequest.onsuccess = () => resolveOnce(true);\n deleteRequest.onerror = () => resolveOnce(true); // Still consider it working\n } catch {\n resolveOnce(\"blocked\");\n }\n };\n\n request.onupgradeneeded = () => {\n try {\n const db = request.result;\n if (!db.objectStoreNames.contains(\"test\")) {\n db.createObjectStore(\"test\");\n }\n } catch {\n resolveOnce(\"blocked\");\n }\n };\n } catch {\n resolve(\"blocked\");\n }\n });\n}\n\n/**\n * WebSQL Detection (Legacy)\n * Tests availability of WebSQL (deprecated but still useful for fingerprinting)\n */\nexport function getWebSQLSupport(): boolean {\n try {\n return (\n \"openDatabase\" in window &&\n typeof (window as any).openDatabase === \"function\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Storage Quota Detection\n * Attempts to detect storage quota information\n */\nexport async function getStorageQuota(): Promise<Record<string, any>> {\n try {\n if (\"storage\" in navigator && \"estimate\" in navigator.storage) {\n const estimate = await navigator.storage.estimate();\n return {\n quota: estimate.quota || null,\n usage: estimate.usage || null,\n available:\n estimate.quota && estimate.usage\n ? estimate.quota - estimate.usage\n : null,\n };\n }\n return {};\n } catch {\n return {};\n }\n}\n\n/**\n * Check if storage fingerprinting is available\n */\nexport function isStorageDetectionAvailable(): boolean {\n return typeof window !== \"undefined\";\n}\n\n/**\n * Get complete storage fingerprint\n */\nexport interface StorageFingerprint {\n localStorage: boolean | \"blocked\";\n sessionStorage: boolean | \"blocked\";\n indexedDB: boolean | \"blocked\";\n webSQL: boolean;\n quota: Record<string, any>;\n}\n\nexport async function getStorageFingerprint(): Promise<StorageFingerprint> {\n const [indexedDBSupport, quota] = await Promise.all([\n getIndexedDBSupport(),\n getStorageQuota(),\n ]);\n\n return {\n localStorage: getLocalStorageSupport(),\n sessionStorage: getSessionStorageSupport(),\n indexedDB: indexedDBSupport,\n webSQL: getWebSQLSupport(),\n quota,\n };\n}\n","/**\n * Math Fingerprinting Module\n * Based on FingerprintJS mathematical operations fingerprinting\n * Different JavaScript engines and browsers handle floating-point operations differently\n */\n\n/**\n * Math operations that produce different results across browsers/engines\n * These are based on engine-specific implementations and optimizations\n */\nexport function getMathFingerprint(): Record<string, number> {\n const M = Math;\n const fallback = () => 0;\n\n // Native operations (some might not be available in older browsers)\n const acos = M.acos || fallback;\n const acosh = M.acosh || fallback;\n const asin = M.asin || fallback;\n const asinh = M.asinh || fallback;\n const atanh = M.atanh || fallback;\n const atan = M.atan || fallback;\n const sin = M.sin || fallback;\n const sinh = M.sinh || fallback;\n const cos = M.cos || fallback;\n const cosh = M.cosh || fallback;\n const tan = M.tan || fallback;\n const tanh = M.tanh || fallback;\n const exp = M.exp || fallback;\n const expm1 = M.expm1 || fallback;\n const log1p = M.log1p || fallback;\n\n // Polyfill operations for comparison\n const powPI = (value: number) => M.pow(M.PI, value);\n const acoshPf = (value: number) => M.log(value + M.sqrt(value * value - 1));\n const asinhPf = (value: number) => M.log(value + M.sqrt(value * value + 1));\n const atanhPf = (value: number) => M.log((1 + value) / (1 - value)) / 2;\n const sinhPf = (value: number) => (M.exp(value) - 1 / M.exp(value)) / 2;\n const coshPf = (value: number) => (M.exp(value) + 1 / M.exp(value)) / 2;\n const expm1Pf = (value: number) => M.exp(value) - 1;\n const tanhPf = (value: number) => (M.exp(2 * value) - 1) / (M.exp(2 * value) + 1);\n const log1pPf = (value: number) => M.log(1 + value);\n\n try {\n // These values are empirically chosen to produce different results across engines\n return {\n // Basic trigonometric functions\n acos: acos(0.123124234234234242),\n asin: asin(0.123124234234234242),\n atan: atan(0.5),\n cos: cos(10.000000000123),\n sin: sin(-1e300),\n tan: tan(-1e300),\n\n // Hyperbolic functions\n acosh: acosh(1e308),\n acoshPf: acoshPf(1e154), // 1e308 will not work for polyfill\n asinh: asinh(1),\n asinhPf: asinhPf(1),\n atanh: atanh(0.5),\n atanhPf: atanhPf(0.5),\n cosh: cosh(1),\n coshPf: coshPf(1),\n sinh: sinh(1),\n sinhPf: sinhPf(1),\n tanh: tanh(1),\n tanhPf: tanhPf(1),\n\n // Exponential and logarithmic functions\n exp: exp(1),\n expm1: expm1(1),\n expm1Pf: expm1Pf(1),\n log1p: log1p(10),\n log1pPf: log1pPf(10),\n\n // Power functions\n powPI: powPI(-100),\n \n // Additional operations that may vary\n sqrt: M.sqrt(2),\n cbrt: M.cbrt ? M.cbrt(8) : fallback(),\n log: M.log(M.E),\n log10: M.log10 ? M.log10(10) : fallback(),\n log2: M.log2 ? M.log2(2) : fallback(),\n \n // Edge cases that might produce different results\n special_0: M.sin(M.PI),\n special_1: M.cos(M.PI / 2),\n special_2: M.tan(M.PI / 4),\n special_3: M.sqrt(-1), // Should be NaN\n special_4: M.log(-1), // Should be NaN\n special_5: 1 / 0, // Should be Infinity\n special_6: 0 / 0, // Should be NaN\n };\n } catch (error) {\n // If any operation fails, return a basic fingerprint\n return {\n error: 1,\n basicMath: M.PI + M.E,\n };\n }\n}\n\n/**\n * Additional mathematical constants that might vary\n */\nexport function getMathConstants(): Record<string, number> {\n try {\n return {\n PI: Math.PI,\n E: Math.E,\n LN2: Math.LN2,\n LN10: Math.LN10,\n LOG2E: Math.LOG2E,\n LOG10E: Math.LOG10E,\n SQRT1_2: Math.SQRT1_2,\n SQRT2: Math.SQRT2,\n };\n } catch {\n return {};\n }\n}\n\n/**\n * Test floating-point precision differences\n */\nexport function getFloatingPointBehavior(): Record<string, number> {\n try {\n return {\n // These operations can reveal precision differences\n precision1: 0.1 + 0.2,\n precision2: 0.3 - 0.1,\n precision3: 0.1 * 3,\n precision4: 1.1 - 0.9,\n \n // Large number operations\n largeAdd: 1e16 + 1,\n largeSub: 1e16 - 1,\n \n // Very small numbers\n tiny: Number.MIN_VALUE,\n epsilon: Number.EPSILON || 2.220446049250313e-16,\n \n // Special number properties\n maxValue: Number.MAX_VALUE,\n maxSafeInteger: Number.MAX_SAFE_INTEGER || 9007199254740991,\n minSafeInteger: Number.MIN_SAFE_INTEGER || -9007199254740991,\n };\n } catch {\n return {};\n }\n}\n\n/**\n * Check if math fingerprinting is available\n */\nexport function isMathDetectionAvailable(): boolean {\n return typeof Math !== 'undefined';\n}\n\n/**\n * Get complete math fingerprint\n */\nexport interface MathFingerprint {\n operations: Record<string, number>;\n constants: Record<string, number>;\n floatingPoint: Record<string, number>;\n}\n\nexport function getCompleteMathFingerprint(): MathFingerprint {\n return {\n operations: getMathFingerprint(),\n constants: getMathConstants(),\n floatingPoint: getFloatingPointBehavior(),\n };\n}","/**\n * DOM Blockers Detection Module\n * Based on FingerprintJS advanced content blocker detection\n * Detects ad blockers, privacy extensions, and content filters\n */\n\nimport { getBrowserCapabilities } from '../../utils/browser';\n\ntype BlockerFilters = Record<string, string[]>;\n\n/**\n * Error types for DOM blockers detection\n */\nexport const enum DOMBlockerError {\n NotSupported = 'NOT_SUPPORTED',\n BrowserIncompatible = 'BROWSER_INCOMPATIBLE',\n DOMNotAvailable = 'DOM_NOT_AVAILABLE',\n Timeout = 'TIMEOUT',\n SecurityError = 'SECURITY_ERROR',\n}\n\n/**\n * Ad blocker and content blocker selectors\n * Obfuscated using base64 to avoid detection by the blockers themselves\n */\nexport function getBlockerFilters(): BlockerFilters {\n const fromB64 = atob; // Base64 decoder for obfuscated selectors\n \n return {\n // Popular ad blockers\n adBlock: [\n '#ad-banner',\n '.advertisement',\n fromB64('I2FkLWNvbnRhaW5lcg=='), // #ad-container\n fromB64('LmFkdmVydGlzZW1lbnQ='), // .advertisement\n fromB64('W2NsYXNzKj0iYWQtIl0='), // [class*=\"ad-\"]\n ],\n \n uBlockOrigin: [\n '#ublock-stats',\n '.adsbygoogle',\n fromB64('I2dvb2dsZV9hZHM='), // #google_ads\n fromB64('LmFkc2J5Z29vZ2xl'), // .adsbygoogle\n fromB64('LnVibG9jay1ibG9ja2Vk'), // .ublock-blocked\n ],\n \n adGuardBase: [\n '.BetterJsPopOverlay',\n fromB64('I2FkXzMwMFgyNTA='), // #ad_300X250\n fromB64('I2Jhbm5lcmZsb2F0'), // #bannerfloat\n fromB64('I2NhbXBhaWduLWJhbm5lcg=='), // #campaign-banner\n fromB64('I0FkLUNvbnRlbnQ='), // #Ad-Content\n ],\n \n adGuardAnnoyances: [\n '.hs-sosyal',\n '#cookieconsentdiv',\n 'div[class^=\"app_gdpr\"]',\n '.as-oil',\n '[data-cypress=\"soft-push-notification-modal\"]',\n ],\n \n easyList: [\n '.yb-floorad',\n fromB64('LndpZGdldF9wb19hZHNfd2lkZ2V0'), // .widget_po_ads_widget\n fromB64('LnRyYWZmaWNqdW5reS1hZA=='), // .trafficjunky-ad\n '.textad_headline',\n fromB64('LnNwb25zb3JlZC10ZXh0LWxpbmtz'), // .sponsored-text-links\n ],\n \n // Privacy focused blockers\n privacyBadger: [\n '#privacy-badger-popup',\n '.privacy-badger-blocked',\n fromB64('LnByaXZhY3ktYmFkZ2Vy'), // .privacy-badger\n ],\n \n ghostery: [\n '#ghostery-popup',\n '.ghostery-blocking',\n fromB64('Lmdob3N0ZXJ5LWJsb2NrZWQ='), // .ghostery-blocked\n ],\n \n // Browser built-in blockers\n brave: [\n '#brave-ads-blocked',\n '.brave-blocked',\n fromB64('LmJyYXZlLWFkLWJsb2Nr'), // .brave-ad-block\n ],\n \n // Social media blockers\n facebookContainer: [\n '.facebook-container-blocked',\n fromB64('LmZiLWJsb2NrZWQ='), // .fb-blocked\n ],\n \n // Cookie and GDPR blockers\n cookieBlockers: [\n '.cookie-notice-blocked',\n '#cookie-banner-hidden',\n fromB64('LmNvb2tpZS1ibG9ja2Vy'), // .cookie-blocker\n ],\n \n // Tracker blockers\n trackingProtection: [\n '.tracking-blocked',\n '#tracking-protection-enabled',\n fromB64('LnRyYWNrZXItYmxvY2tlZA=='), // .tracker-blocked\n ],\n };\n}\n\n/**\n * Creates a DOM element based on a CSS selector\n */\nfunction selectorToElement(selector: string): HTMLElement {\n const element = document.createElement('div');\n \n // Parse basic selectors\n if (selector.startsWith('#')) {\n element.id = selector.substring(1);\n } else if (selector.startsWith('.')) {\n element.className = selector.substring(1);\n } else if (selector.includes('[')) {\n // Handle attribute selectors like [class*=\"ad-\"]\n try {\n const match = selector.match(/\\[([^=]+)([*^$|~]?=)\"([^\"]+)\"\\]/);\n if (match && match[1] && match[3]) {\n const [, attr, operator, value] = match;\n if (operator === '*=') {\n element.setAttribute(attr, `test-${value}-test`);\n } else {\n element.setAttribute(attr, value);\n }\n }\n } catch {\n // Fallback to class\n element.className = 'test-element';\n }\n } else {\n // Default fallback\n element.className = selector.replace(/[^a-zA-Z0-9-_]/g, '');\n }\n \n return element;\n}\n\n/**\n * Forces an element to be visible for testing (optimized)\n * Based on FingerprintJS implementation\n */\nfunction forceShow(element: HTMLElement): void {\n const style = element.style;\n style.setProperty('visibility', 'hidden', 'important');\n style.setProperty('display', 'block', 'important');\n style.setProperty('position', 'absolute', 'important');\n style.setProperty('left', '-9999px', 'important');\n style.setProperty('width', '1px', 'important');\n style.setProperty('height', '1px', 'important');\n // Prevent interference from other styles\n style.setProperty('pointer-events', 'none', 'important');\n style.setProperty('z-index', '-1', 'important');\n}\n\n/**\n * Waits for a specified amount of time\n */\nfunction wait(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n/**\n * Tests which CSS selectors are blocked by content blockers\n * Optimized for performance and stability\n */\nexport async function getBlockedSelectors<T extends string>(\n selectors: readonly T[]\n): Promise<{ [K in T]?: true }> {\n const doc = document;\n const root = doc.createElement('div');\n const elements = new Array<HTMLElement | undefined>(selectors.length);\n const blockedSelectors: { [K in T]?: true } = {};\n\n forceShow(root);\n \n // Create document fragment for better performance\n const fragment = doc.createDocumentFragment();\n\n // Create all test elements first (batched DOM operations)\n for (let i = 0; i < selectors.length; i++) {\n const selector = selectors[i];\n if (selector) {\n try {\n const element = selectorToElement(selector);\n const holder = doc.createElement('div');\n \n // Special handling for dialog elements\n if (element.tagName === 'DIALOG') {\n (element as HTMLDialogElement).show?.();\n }\n \n forceShow(holder);\n holder.appendChild(element);\n fragment.appendChild(holder);\n elements[i] = element;\n } catch (error) {\n // Skip problematic selectors\n elements[i] = undefined;\n }\n }\n }\n\n root.appendChild(fragment);\n\n // Wait for document.body to be available with timeout\n let attempts = 0;\n while (!doc.body && attempts < 100) {\n await wait(50);\n attempts++;\n }\n \n if (!doc.body) {\n throw new Error('Document body not available for DOM blockers detection');\n }\n \n doc.body.appendChild(root);\n\n try {\n // Small delay to let blockers process (reduced from 100ms to 50ms)\n await wait(50);\n \n // Check which elements are blocked using requestAnimationFrame for better performance\n await new Promise<void>((resolve) => {\n requestAnimationFrame(() => {\n for (let i = 0; i < selectors.length; i++) {\n const element = elements[i];\n const selector = selectors[i];\n if (element && selector && !element.offsetParent) {\n blockedSelectors[selector] = true;\n }\n }\n resolve();\n });\n });\n } finally {\n // Ensure cleanup even if errors occur\n try {\n if (root.parentNode) {\n root.parentNode.removeChild(root);\n }\n } catch (error) {\n // Fallback cleanup\n setTimeout(() => {\n try {\n if (root.parentNode) {\n root.parentNode.removeChild(root);\n }\n } catch {\n // Last resort - ignore cleanup errors\n }\n }, 0);\n }\n }\n\n return blockedSelectors;\n}\n\n/**\n * Counts truthy values in an array\n */\nfunction countTruthy<T>(array: T[]): number {\n return array.filter(Boolean).length;\n}\n\n/**\n * Main DOM blockers detection function\n * Enhanced with browser compatibility and error handling\n */\nexport async function getDomBlockers(options: { debug?: boolean; timeout?: number } = {}): Promise<string[] | DOMBlockerError> {\n const { debug = false, timeout = 5000 } = options;\n \n try {\n // Check if detection is applicable for this browser\n if (!isDomBlockersDetectionAvailable()) {\n if (debug) {\n console.log('[RabbitTracker] DOM Blockers detection not applicable for this browser');\n }\n return DOMBlockerError.BrowserIncompatible;\n }\n\n // Check DOM availability\n if (!document || !document.body) {\n if (debug) {\n console.log('[RabbitTracker] DOM not ready for blockers detection');\n }\n return DOMBlockerError.DOMNotAvailable;\n }\n\n const filters = getBlockerFilters();\n const filterNames = Object.keys(filters) as Array<keyof typeof filters>;\n const allSelectors = ([] as string[]).concat(\n ...filterNames.map((filterName) => filters[filterName] || [])\n );\n \n // Add timeout protection\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error('DOM blockers detection timeout')), timeout);\n });\n\n const blockedSelectors = await Promise.race([\n getBlockedSelectors(allSelectors),\n timeoutPromise\n ]);\n\n if (debug) {\n console.log('[RabbitTracker] DOM Blockers Debug:', {\n totalSelectors: allSelectors.length,\n blockedCount: Object.keys(blockedSelectors).length,\n blockedSelectors,\n });\n }\n\n // Detect active blockers (if >60% of selectors are blocked)\n const activeBlockers = filterNames.filter((filterName) => {\n const selectors = filters[filterName];\n if (!selectors || selectors.length === 0) {\n return false;\n }\n const blockedCount = countTruthy(\n selectors.map((selector) => blockedSelectors[selector])\n );\n return blockedCount > selectors.length * 0.6;\n });\n\n return activeBlockers.sort();\n } catch (error) {\n if (debug) {\n console.error('[RabbitTracker] DOM Blockers detection failed:', error);\n }\n \n // Classify error types\n if (error instanceof Error) {\n if (error.message.includes('timeout')) {\n return DOMBlockerError.Timeout;\n }\n if (error.name === 'SecurityError' || error.message.includes('SecurityError')) {\n return DOMBlockerError.SecurityError;\n }\n }\n \n return DOMBlockerError.NotSupported;\n }\n}\n\n/**\n * Check if DOM blockers detection is applicable\n * Based on FingerprintJS best practices\n */\nexport function isDomBlockersDetectionAvailable(): boolean {\n const capabilities = getBrowserCapabilities();\n return capabilities.canRunDOMBlockers;\n}\n\n/**\n * Complete DOM blockers fingerprint\n */\nexport interface DomBlockersFingerprint {\n activeBlockers: string[];\n blockerCount: number;\n hasAdBlocker: boolean;\n hasPrivacyExtension: boolean;\n hasTrackingProtection: boolean;\n}\n\nexport async function getDomBlockersFingerprint(options: { debug?: boolean } = {}): Promise<DomBlockersFingerprint> {\n const activeBlockersResult = await getDomBlockers(options);\n \n // Handle error cases\n const activeBlockers = Array.isArray(activeBlockersResult) ? activeBlockersResult : [];\n \n return {\n activeBlockers,\n blockerCount: activeBlockers.length,\n hasAdBlocker: activeBlockers.some(blocker => \n ['adBlock', 'uBlockOrigin', 'adGuardBase', 'easyList'].includes(blocker)\n ),\n hasPrivacyExtension: activeBlockers.some(blocker =>\n ['privacyBadger', 'ghostery', 'brave'].includes(blocker)\n ),\n hasTrackingProtection: activeBlockers.includes('trackingProtection'),\n };\n}","/**\n * Browser-Specific APIs Detection Module\n * Based on FingerprintJS browser-specific API detection\n * Detects availability and state of browser-specific features and APIs\n */\n\nimport { getBrowserCapabilities, isSecureContext, isSafari, isChrome } from '../../utils/browser';\n\n/**\n * Error types for browser APIs detection\n */\nexport const enum BrowserAPIError {\n NotSupported = 'NOT_SUPPORTED',\n SecurityError = 'SECURITY_ERROR',\n FeatureUnavailable = 'FEATURE_UNAVAILABLE',\n BrowserIncompatible = 'BROWSER_INCOMPATIBLE',\n}\n\n/**\n * PDF Viewer Detection\n * Detects if native PDF viewer is enabled (Chrome/Edge feature)\n */\nexport function getPdfViewerEnabled(): boolean | null {\n try {\n // PDF viewer is primarily a Chrome/Edge feature\n if (!isChrome()) {\n return null;\n }\n return (navigator as any).pdfViewerEnabled ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Apple Pay State Detection\n * Detects Apple Pay availability and state (Safari/iOS feature)\n */\nexport const enum ApplePayState {\n Disabled = 0,\n Enabled = 1,\n NoAPI = -1,\n NotAvailableInInsecureContext = -2,\n NotAvailableInFrame = -3,\n}\n\nexport function getApplePayState(): ApplePayState {\n try {\n // Apple Pay is only available on Safari/iOS\n if (!isSafari()) {\n return ApplePayState.NoAPI;\n }\n\n const { ApplePaySession } = window as any;\n\n if (typeof ApplePaySession?.canMakePayments !== 'function') {\n return ApplePayState.NoAPI;\n }\n\n // Check if we're in an insecure context or frame that might cause issues\n if (!isSecureContext()) {\n return ApplePayState.NotAvailableInInsecureContext;\n }\n\n // Check for cross-origin frame issues\n if (window.self !== window.top) {\n return ApplePayState.NotAvailableInFrame;\n }\n\n try {\n return ApplePaySession.canMakePayments() \n ? ApplePayState.Enabled \n : ApplePayState.Disabled;\n } catch (error) {\n // Handle security errors\n if (error instanceof Error && error.name === 'InvalidAccessError') {\n return ApplePayState.NotAvailableInInsecureContext;\n }\n throw error;\n }\n } catch {\n return ApplePayState.NoAPI;\n }\n}\n\n/**\n * Private Click Measurement Detection\n * Detects Safari's Private Click Measurement API\n */\nexport function getPrivateClickMeasurement(): boolean | null {\n try {\n // Check for Private Click Measurement API (Safari 14.1+)\n return 'attributionReporting' in window || \n 'privateClickMeasurement' in window ||\n null;\n } catch {\n return null;\n }\n}\n\n/**\n * Enhanced Cookies Detection\n * More detailed cookie support detection\n */\nexport interface CookieCapabilities {\n enabled: boolean;\n sameSiteSupport: boolean;\n secureSupport: boolean;\n partitionedSupport: boolean;\n}\n\nexport function getCookieCapabilities(): CookieCapabilities {\n const capabilities: CookieCapabilities = {\n enabled: false,\n sameSiteSupport: false,\n secureSupport: false,\n partitionedSupport: false,\n };\n\n try {\n // Basic cookie support\n capabilities.enabled = navigator.cookieEnabled;\n\n if (!capabilities.enabled) {\n return capabilities;\n }\n\n // Test SameSite support with proper cleanup\n capabilities.sameSiteSupport = testCookieAttribute('__rb_test_samesite', 'SameSite=Strict');\n\n // Test Secure support (only meaningful in HTTPS context)\n if (isSecureContext()) {\n capabilities.secureSupport = testCookieAttribute('__rb_test_secure', 'Secure');\n }\n\n // Test Partitioned support (Chrome 118+) only in secure context\n if (isSecureContext() && isChrome()) {\n capabilities.partitionedSupport = testCookieAttribute(\n '__rb_test_partitioned', \n 'Partitioned; Secure; SameSite=None'\n );\n }\n } catch {\n // Default values already set\n }\n\n return capabilities;\n}\n\n/**\n * Safely test cookie attribute support with guaranteed cleanup\n */\nfunction testCookieAttribute(cookieName: string, attributes: string): boolean {\n try {\n const testValue = '1';\n const cookieString = `${cookieName}=${testValue}; ${attributes}; path=/`;\n \n document.cookie = cookieString;\n const hasSupport = document.cookie.includes(`${cookieName}=${testValue}`);\n \n // Always clean up, even if the test failed\n cleanupTestCookie(cookieName);\n \n return hasSupport;\n } catch {\n // Ensure cleanup even on error\n cleanupTestCookie(cookieName);\n return false;\n }\n}\n\n/**\n * Guaranteed cookie cleanup with multiple fallback strategies\n */\nfunction cleanupTestCookie(cookieName: string): void {\n try {\n // Multiple cleanup strategies to ensure removal\n const cleanupStrategies = [\n `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`,\n `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=${location.hostname}`,\n `${cookieName}=; max-age=0; path=/`,\n `${cookieName}=; max-age=0; path=/; domain=${location.hostname}`\n ];\n \n for (const strategy of cleanupStrategies) {\n try {\n document.cookie = strategy;\n } catch {\n // Continue with next strategy\n }\n }\n \n // Async cleanup as fallback\n setTimeout(() => {\n try {\n document.cookie = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`;\n } catch {\n // Final fallback - ignore errors\n }\n }, 100);\n } catch {\n // Ignore cleanup errors\n }\n}\n\n/**\n * WebGL Extensions Detection\n * Enhanced WebGL extension detection\n */\nexport function getWebGLExtensions(): string[] {\n try {\n const canvas = document.createElement('canvas');\n const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n \n if (!gl) {\n return [];\n }\n\n const extensions = (gl as WebGLRenderingContext).getSupportedExtensions() || [];\n return extensions.sort();\n } catch {\n return [];\n }\n}\n\n/**\n * Performance Memory Detection\n * Chrome-specific memory information\n */\nexport interface PerformanceMemory {\n usedJSHeapSize?: number;\n totalJSHeapSize?: number;\n jsHeapSizeLimit?: number;\n}\n\nexport function getPerformanceMemory(): PerformanceMemory | null {\n try {\n const memory = (performance as any).memory;\n if (!memory) {\n return null;\n }\n\n return {\n usedJSHeapSize: memory.usedJSHeapSize,\n totalJSHeapSize: memory.totalJSHeapSize,\n jsHeapSizeLimit: memory.jsHeapSizeLimit,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Connection Information Detection\n * Network connection information (Chrome/Edge)\n */\nexport interface ConnectionInfo {\n effectiveType?: string;\n downlink?: number;\n rtt?: number;\n saveData?: boolean;\n}\n\nexport function getConnectionInfo(): ConnectionInfo | null {\n try {\n const connection = (navigator as any).connection || \n (navigator as any).mozConnection || \n (navigator as any).webkitConnection;\n \n if (!connection) {\n return null;\n }\n\n return {\n effectiveType: connection.effectiveType,\n downlink: connection.downlink,\n rtt: connection.rtt,\n saveData: connection.saveData,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Vendor-specific Properties Detection\n * Detects browser vendor-specific properties\n */\nexport interface VendorProperties {\n webkitTemporaryStorage?: boolean;\n webkitPersistentStorage?: boolean;\n safariObjectTypes?: string[];\n chromeRuntime?: boolean;\n mozInnerScreenX?: boolean;\n msCredentials?: boolean;\n}\n\nexport function getVendorProperties(): VendorProperties {\n const properties: VendorProperties = {};\n\n try {\n // Webkit-specific\n properties.webkitTemporaryStorage = 'webkitTemporaryStorage' in navigator;\n properties.webkitPersistentStorage = 'webkitPersistentStorage' in navigator;\n\n // Safari-specific\n if ((window as any).safari) {\n properties.safariObjectTypes = Object.getOwnPropertyNames((window as any).safari);\n }\n\n // Chrome-specific\n properties.chromeRuntime = !!(window as any).chrome?.runtime;\n\n // Firefox-specific\n properties.mozInnerScreenX = 'mozInnerScreenX' in window;\n\n // Edge/IE-specific\n properties.msCredentials = 'msCredentials' in navigator;\n } catch {\n // Properties will remain undefined\n }\n\n return properties;\n}\n\n/**\n * Check if browser APIs detection is available\n */\nexport function isBrowserApisDetectionAvailable(): boolean {\n return typeof window !== 'undefined' && typeof navigator !== 'undefined';\n}\n\n/**\n * Complete browser APIs fingerprint\n */\nexport interface BrowserApisFingerprint {\n pdfViewerEnabled: boolean | null;\n applePayState: ApplePayState;\n privateClickMeasurement: boolean | null;\n cookieCapabilities: CookieCapabilities;\n webglExtensions: string[];\n performanceMemory: PerformanceMemory | null;\n connectionInfo: ConnectionInfo | null;\n vendorProperties: VendorProperties;\n // Computed properties\n browserVendor: string;\n hasNativeFeatures: boolean;\n apiScore: number; // 0-100 based on available APIs\n}\n\nexport function getBrowserApisFingerprint(): BrowserApisFingerprint {\n const pdfViewerEnabled = getPdfViewerEnabled();\n const applePayState = getApplePayState();\n const privateClickMeasurement = getPrivateClickMeasurement();\n const cookieCapabilities = getCookieCapabilities();\n const webglExtensions = getWebGLExtensions();\n const performanceMemory = getPerformanceMemory();\n const connectionInfo = getConnectionInfo();\n const vendorProperties = getVendorProperties();\n\n // Determine browser vendor based on available APIs\n let browserVendor = 'unknown';\n if (vendorProperties.chromeRuntime) {\n browserVendor = 'chrome';\n } else if (applePayState !== ApplePayState.NoAPI) {\n browserVendor = 'safari';\n } else if (vendorProperties.mozInnerScreenX) {\n browserVendor = 'firefox';\n } else if (vendorProperties.msCredentials) {\n browserVendor = 'edge';\n }\n\n // Check for native features\n const hasNativeFeatures = Boolean(\n pdfViewerEnabled ||\n applePayState > ApplePayState.NoAPI ||\n privateClickMeasurement ||\n performanceMemory ||\n connectionInfo\n );\n\n // Calculate API score (0-100)\n const availableApis = [\n pdfViewerEnabled !== null,\n applePayState !== ApplePayState.NoAPI,\n privateClickMeasurement !== null,\n cookieCapabilities.enabled,\n webglExtensions.length > 0,\n performanceMemory !== null,\n connectionInfo !== null,\n Object.keys(vendorProperties).length > 0,\n ];\n \n const apiScore = Math.round((availableApis.filter(Boolean).length / availableApis.length) * 100);\n\n return {\n pdfViewerEnabled,\n applePayState,\n privateClickMeasurement,\n cookieCapabilities,\n webglExtensions,\n performanceMemory,\n connectionInfo,\n vendorProperties,\n browserVendor,\n hasNativeFeatures,\n apiScore,\n };\n}","/**\n * Enhanced Plugin Detection Module\n * Based on FingerprintJS advanced plugin enumeration and detection\n * Provides comprehensive browser plugin, extension, and capability detection\n * Enhanced with browser compatibility and edge case handling\n */\n\nimport { getBrowserCapabilities, isChrome, isFirefox, isEdge } from '../../utils/browser';\n\n/**\n * Error types for plugin detection\n */\nexport const enum PluginDetectionError {\n NotSupported = 'NOT_SUPPORTED',\n SecurityRestricted = 'SECURITY_RESTRICTED',\n NavigatorUnavailable = 'NAVIGATOR_UNAVAILABLE',\n PluginsBlocked = 'PLUGINS_BLOCKED',\n}\n\n/**\n * Plugin information interface\n */\nexport interface PluginInfo {\n name: string;\n filename: string;\n description: string;\n version?: string;\n mimeTypes: string[];\n}\n\n/**\n * Enhanced plugin detection result\n */\nexport interface EnhancedPluginFingerprint {\n plugins: PluginInfo[];\n pluginCount: number;\n mimeTypes: string[];\n mimeTypeCount: number;\n // Capability detection\n flashEnabled: boolean;\n javaEnabled: boolean;\n silverLightEnabled: boolean;\n // Browser-specific detection\n chromeExtensionsBlocked: boolean;\n firefoxExtensionsBlocked: boolean;\n // Security indicators\n securityPlugins: string[];\n adBlockerPlugins: string[];\n // Computed properties\n pluginSignature: string;\n securityScore: number;\n}\n\n/**\n * Get traditional navigator.plugins information (enhanced)\n */\nexport function getNavigatorPlugins(): PluginInfo[] | PluginDetectionError {\n try {\n if (!isEnhancedPluginDetectionAvailable()) {\n return PluginDetectionError.NotSupported;\n }\n\n const navigatorPlugins = safeGetPlugins();\n if (!navigatorPlugins) {\n return PluginDetectionError.NavigatorUnavailable;\n }\n\n const plugins: PluginInfo[] = [];\n\n if (navigatorPlugins.length === 0) {\n return plugins; // Empty but valid\n }\n\n for (let i = 0; i < navigatorPlugins.length; i++) {\n const plugin = navigatorPlugins[i];\n if (!plugin) continue;\n\n const mimeTypes: string[] = [];\n if (plugin.length > 0) {\n for (let j = 0; j < plugin.length; j++) {\n const mimeType = plugin[j];\n if (mimeType && mimeType.type) {\n mimeTypes.push(mimeType.type);\n }\n }\n }\n\n plugins.push({\n name: plugin.name || '',\n filename: plugin.filename || '',\n description: plugin.description || '',\n version: (plugin as any).version || undefined,\n mimeTypes,\n });\n }\n\n return plugins.sort((a, b) => a.name.localeCompare(b.name));\n } catch (error) {\n if ((error as any).name === 'SecurityError') {\n return PluginDetectionError.SecurityRestricted;\n }\n return [];\n }\n}\n\n/**\n * Get MIME types from navigator.mimeTypes\n */\nexport function getMimeTypes(): string[] {\n try {\n if (!navigator.mimeTypes || navigator.mimeTypes.length === 0) {\n return [];\n }\n\n const mimeTypes: string[] = [];\n for (let i = 0; i < navigator.mimeTypes.length; i++) {\n const mimeType = navigator.mimeTypes[i];\n if (mimeType && mimeType.type) {\n mimeTypes.push(mimeType.type);\n }\n }\n\n return mimeTypes.sort();\n } catch {\n return [];\n }\n}\n\n/**\n * Test if Flash is enabled and available\n */\nexport function testFlashEnabled(): boolean {\n try {\n // Check for Flash plugin\n const hasFlashPlugin = navigator.plugins && \n Array.from(navigator.plugins).some(plugin => \n plugin.name.toLowerCase().includes('flash') ||\n plugin.description.toLowerCase().includes('flash')\n );\n\n if (hasFlashPlugin) {\n return true;\n }\n\n // Check for Flash MIME type\n const hasFlashMimeType = navigator.mimeTypes && \n Array.from(navigator.mimeTypes).some(mimeType =>\n mimeType.type === 'application/x-shockwave-flash'\n );\n\n if (hasFlashMimeType) {\n return true;\n }\n\n // Check ActiveX for IE/Edge\n if (typeof (window as any).ActiveXObject !== 'undefined') {\n try {\n return !!(new (window as any).ActiveXObject('ShockwaveFlash.ShockwaveFlash'));\n } catch {\n return false;\n }\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Test if Java is enabled and available\n */\nexport function testJavaEnabled(): boolean {\n try {\n // Check for Java plugin\n const hasJavaPlugin = navigator.plugins &&\n Array.from(navigator.plugins).some(plugin =>\n plugin.name.toLowerCase().includes('java') &&\n !plugin.name.toLowerCase().includes('javascript')\n );\n\n if (hasJavaPlugin) {\n return true;\n }\n\n // Check for Java MIME types\n const javaMimeTypes = [\n 'application/x-java-applet',\n 'application/x-java-bean',\n 'application/x-java-vm'\n ];\n\n const hasJavaMimeType = navigator.mimeTypes &&\n javaMimeTypes.some(type =>\n Array.from(navigator.mimeTypes).some(mimeType => mimeType.type === type)\n );\n\n if (hasJavaMimeType) {\n return true;\n }\n\n // Legacy navigator.javaEnabled() method\n if (typeof navigator.javaEnabled === 'function') {\n return navigator.javaEnabled();\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Test if Silverlight is enabled and available\n */\nexport function testSilverlightEnabled(): boolean {\n try {\n // Check for Silverlight plugin\n const hasSilverlightPlugin = navigator.plugins &&\n Array.from(navigator.plugins).some(plugin =>\n plugin.name.toLowerCase().includes('silverlight')\n );\n\n if (hasSilverlightPlugin) {\n return true;\n }\n\n // Check for Silverlight MIME type\n const hasSilverlightMimeType = navigator.mimeTypes &&\n Array.from(navigator.mimeTypes).some(mimeType =>\n mimeType.type === 'application/x-silverlight'\n );\n\n if (hasSilverlightMimeType) {\n return true;\n }\n\n // Check ActiveX for IE/Edge\n if (typeof (window as any).ActiveXObject !== 'undefined') {\n try {\n return !!(new (window as any).ActiveXObject('AgControl.AgControl'));\n } catch {\n return false;\n }\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Detect Chrome extension blocking (enhanced)\n */\nexport function detectChromeExtensionsBlocked(): boolean | PluginDetectionError {\n try {\n if (!isChrome()) {\n return PluginDetectionError.NotSupported;\n }\n\n if (!navigator.plugins) {\n return PluginDetectionError.NavigatorUnavailable;\n }\n\n const pluginCount = navigator.plugins.length;\n \n // Modern Chrome usually has some plugins, even in restricted mode\n // Complete absence is suspicious\n if (pluginCount === 0) {\n return true;\n }\n \n // Check for Chrome runtime (indicates extension environment)\n const hasChromeRuntime = !!(window as any).chrome?.runtime;\n \n // Chrome without runtime access might indicate restrictions\n if (!hasChromeRuntime) {\n // However, this could be normal in some contexts (web workers, etc.)\n // Additional checks needed\n const hasWebstore = !!(window as any).chrome?.webstore;\n if (!hasWebstore && typeof (window as any).chrome !== 'undefined') {\n return true; // Likely restricted\n }\n }\n\n // Check for abnormally limited plugin access\n // Most Chrome installations have at least PDF viewer\n const hasCommonPlugins = Array.from(navigator.plugins).some(plugin =>\n plugin.name.toLowerCase().includes('pdf') ||\n plugin.name.toLowerCase().includes('chrome')\n );\n\n // If no common plugins found in Chrome, might be blocked\n if (!hasCommonPlugins && pluginCount < 3) {\n return true;\n }\n\n return false;\n } catch (error) {\n if ((error as any).name === 'SecurityError') {\n return PluginDetectionError.SecurityRestricted;\n }\n return false;\n }\n}\n\n/**\n * Detect Firefox extension blocking (enhanced)\n */\nexport function detectFirefoxExtensionsBlocked(): boolean | PluginDetectionError {\n try {\n if (!isFirefox()) {\n return PluginDetectionError.NotSupported;\n }\n\n // Firefox-specific checks\n const firefoxChecks = {\n mozInnerScreenX: 'mozInnerScreenX' in window,\n mozPaintCount: 'mozPaintCount' in window,\n mozApps: !!(navigator as any).mozApps,\n buildID: !!(navigator as any).buildID,\n oscpu: !!(navigator as any).oscpu,\n };\n\n const passedChecks = Object.values(firefoxChecks).filter(Boolean).length;\n \n // Firefox usually has at least some of these properties\n // Complete absence suggests restrictions\n if (passedChecks === 0) {\n return true;\n }\n\n // Check plugin access patterns\n if (!navigator.plugins) {\n return PluginDetectionError.NavigatorUnavailable;\n }\n\n const pluginCount = navigator.plugins.length;\n \n // Firefox in normal mode usually has some plugins\n // Check for abnormally restricted plugin access\n if (pluginCount === 0 && passedChecks < 2) {\n return true;\n }\n\n return false;\n } catch (error) {\n if ((error as any).name === 'SecurityError') {\n return PluginDetectionError.SecurityRestricted;\n }\n return false;\n }\n}\n\n/**\n * Identify security-related plugins\n */\nexport function identifySecurityPlugins(plugins: PluginInfo[]): string[] {\n const securityKeywords = [\n 'antivirus', 'security', 'firewall', 'malware', 'protection',\n 'kaspersky', 'norton', 'mcafee', 'avast', 'avira', 'bitdefender',\n 'eset', 'sophos', 'symantec', 'trend micro', 'f-secure'\n ];\n\n return plugins\n .filter(plugin => \n securityKeywords.some(keyword =>\n plugin.name.toLowerCase().includes(keyword) ||\n plugin.description.toLowerCase().includes(keyword)\n )\n )\n .map(plugin => plugin.name);\n}\n\n/**\n * Identify ad blocker plugins\n */\nexport function identifyAdBlockerPlugins(plugins: PluginInfo[]): string[] {\n const adBlockerKeywords = [\n 'adblock', 'adblocker', 'ad block', 'ublock', 'ghostery',\n 'privacy badger', 'disconnect', 'noscript', 'tracking protection'\n ];\n\n return plugins\n .filter(plugin =>\n adBlockerKeywords.some(keyword =>\n plugin.name.toLowerCase().includes(keyword) ||\n plugin.description.toLowerCase().includes(keyword)\n )\n )\n .map(plugin => plugin.name);\n}\n\n/**\n * Calculate plugin-based security score\n */\nexport function calculateSecurityScore(\n securityPlugins: string[],\n adBlockerPlugins: string[],\n flashEnabled: boolean,\n javaEnabled: boolean\n): number {\n let score = 50; // Base score\n\n // Security plugins increase score\n score += securityPlugins.length * 10;\n\n // Ad blockers increase score\n score += adBlockerPlugins.length * 5;\n\n // Flash enabled decreases score (security risk)\n if (flashEnabled) {\n score -= 15;\n }\n\n // Java enabled decreases score (security risk)\n if (javaEnabled) {\n score -= 10;\n }\n\n // Ensure score is between 0 and 100\n return Math.max(0, Math.min(100, score));\n}\n\n/**\n * Generate plugin signature for fingerprinting\n */\nexport function generatePluginSignature(\n plugins: PluginInfo[],\n mimeTypes: string[]\n): string {\n const pluginNames = plugins.map(p => p.name).sort();\n const topMimeTypes = mimeTypes.slice(0, 10).sort(); // Limit to prevent huge signatures\n \n const signature = [\n `plugins:${pluginNames.length}`,\n `mimes:${mimeTypes.length}`,\n ...pluginNames.slice(0, 5), // Top 5 plugins\n ...topMimeTypes.slice(0, 5) // Top 5 MIME types\n ].join('|');\n\n return signature;\n}\n\n/**\n * Check if enhanced plugin detection is available\n * Enhanced with browser capability checks\n */\nexport function isEnhancedPluginDetectionAvailable(): boolean {\n const capabilities = getBrowserCapabilities();\n return capabilities.canRunBrowserAPIs && typeof navigator !== 'undefined';\n}\n\n/**\n * Safely get navigator plugins with error handling\n */\nfunction safeGetPlugins(): PluginArray | null {\n try {\n return navigator.plugins || null;\n } catch (error) {\n if ((error as any).name === 'SecurityError') {\n return null;\n }\n throw error;\n }\n}\n\n/**\n * Safely get navigator mime types with error handling\n */\nfunction safeGetMimeTypes(): MimeTypeArray | null {\n try {\n return navigator.mimeTypes || null;\n } catch (error) {\n if ((error as any).name === 'SecurityError') {\n return null;\n }\n throw error;\n }\n}\n\n/**\n * Get complete enhanced plugin fingerprint\n */\nexport function getEnhancedPluginFingerprint(): EnhancedPluginFingerprint {\n const pluginsResult = getNavigatorPlugins();\n const plugins = Array.isArray(pluginsResult) ? pluginsResult : [];\n \n const mimeTypesResult = getMimeTypes();\n const mimeTypes = Array.isArray(mimeTypesResult) ? mimeTypesResult : [];\n \n const flashEnabled = testFlashEnabled();\n const javaEnabled = testJavaEnabled();\n const silverLightEnabled = testSilverlightEnabled();\n \n const chromeExtensionsBlockedResult = detectChromeExtensionsBlocked();\n const chromeExtensionsBlocked = typeof chromeExtensionsBlockedResult === 'boolean' ? chromeExtensionsBlockedResult : false;\n \n const firefoxExtensionsBlockedResult = detectFirefoxExtensionsBlocked();\n const firefoxExtensionsBlocked = typeof firefoxExtensionsBlockedResult === 'boolean' ? firefoxExtensionsBlockedResult : false;\n \n const securityPlugins = identifySecurityPlugins(plugins);\n const adBlockerPlugins = identifyAdBlockerPlugins(plugins);\n const pluginSignature = generatePluginSignature(plugins, mimeTypes);\n const securityScore = calculateSecurityScore(\n securityPlugins,\n adBlockerPlugins,\n flashEnabled,\n javaEnabled\n );\n\n return {\n plugins,\n pluginCount: plugins.length,\n mimeTypes,\n mimeTypeCount: mimeTypes.length,\n flashEnabled,\n javaEnabled,\n silverLightEnabled,\n chromeExtensionsBlocked,\n firefoxExtensionsBlocked,\n securityPlugins,\n adBlockerPlugins,\n pluginSignature,\n securityScore,\n };\n}","/**\n * Confidence Scoring System\n * Based on FingerprintJS confidence calculation methodology\n * Provides intelligent weighting and stability scoring for fingerprint components\n */\n\nimport type { FingerprintComponentType } from '../../types/fingerprint';\n\n/**\n * Confidence levels enum\n */\nexport const enum Confidence {\n /** At least 99.5% chance of correct identification */\n VeryHigh = 0.995,\n /** At least 99% chance of correct identification */\n High = 0.99,\n /** At least 95% chance of correct identification */\n Medium = 0.95,\n /** At least 80% chance of correct identification */\n Low = 0.8,\n /** Less than 80% chance - not reliable for identification */\n VeryLow = 0.5,\n}\n\n/**\n * Component stability levels\n */\nexport interface ComponentStability {\n /** How stable the component is across sessions (0-1) */\n stability: number;\n /** How much entropy the component provides (0-1) */\n entropy: number;\n /** How unique the component is across users (0-1) */\n uniqueness: number;\n /** How resistant the component is to spoofing (0-1) */\n spoofResistance: number;\n}\n\n/**\n * Component weights and characteristics\n * Based on extensive research and real-world data analysis\n */\nexport const COMPONENT_CHARACTERISTICS: Record<FingerprintComponentType, ComponentStability> = {\n // Core components (most stable and unique)\n canvas: {\n stability: 0.95,\n entropy: 0.9,\n uniqueness: 0.85,\n spoofResistance: 0.8,\n },\n webgl: {\n stability: 0.92,\n entropy: 0.88,\n uniqueness: 0.82,\n spoofResistance: 0.85,\n },\n audio: {\n stability: 0.9,\n entropy: 0.85,\n uniqueness: 0.8,\n spoofResistance: 0.9,\n },\n\n // Hardware components (very stable)\n hardware: {\n stability: 0.98,\n entropy: 0.7,\n uniqueness: 0.75,\n spoofResistance: 0.95,\n },\n screen: {\n stability: 0.85,\n entropy: 0.6,\n uniqueness: 0.65,\n spoofResistance: 0.7,\n },\n\n // System components (moderately stable)\n system: {\n stability: 0.8,\n entropy: 0.65,\n uniqueness: 0.7,\n spoofResistance: 0.6,\n },\n browser: {\n stability: 0.75,\n entropy: 0.6,\n uniqueness: 0.65,\n spoofResistance: 0.5,\n },\n fonts: {\n stability: 0.7,\n entropy: 0.75,\n uniqueness: 0.7,\n spoofResistance: 0.4,\n },\n\n // Advanced components (variable stability)\n math: {\n stability: 0.95,\n entropy: 0.8,\n uniqueness: 0.9,\n spoofResistance: 0.95,\n },\n storage: {\n stability: 0.6,\n entropy: 0.5,\n uniqueness: 0.6,\n spoofResistance: 0.3,\n },\n \n // Detection components (moderate reliability)\n incognito: {\n stability: 0.5,\n entropy: 0.4,\n uniqueness: 0.3,\n spoofResistance: 0.2,\n },\n\n // New advanced components (from FingerprintJS inspiration)\n domBlockers: {\n stability: 0.8,\n entropy: 0.7,\n uniqueness: 0.6,\n spoofResistance: 0.9,\n },\n accessibility: {\n stability: 0.9,\n entropy: 0.6,\n uniqueness: 0.7,\n spoofResistance: 0.85,\n },\n browserApis: {\n stability: 0.85,\n entropy: 0.75,\n uniqueness: 0.8,\n spoofResistance: 0.7,\n },\n pluginsEnhanced: {\n stability: 0.7,\n entropy: 0.65,\n uniqueness: 0.75,\n spoofResistance: 0.5,\n },\n\n // NEW: FingerprintJS-inspired components with enhanced characteristics\n mathFingerprint: {\n stability: 0.99, // Extremely stable across sessions\n entropy: 0.95, // High entropy from precision differences\n uniqueness: 0.9, // Very unique across different engines\n spoofResistance: 0.98, // Nearly impossible to spoof consistently\n },\n fontPreferences: {\n stability: 0.92, // Stable but can change with OS updates\n entropy: 0.88, // High entropy from font rendering differences\n uniqueness: 0.85, // Good uniqueness across systems\n spoofResistance: 0.75, // Moderate spoof resistance\n },\n dateTimeLocale: {\n stability: 0.95, // Very stable user setting\n entropy: 0.7, // Good entropy from locale combinations\n uniqueness: 0.75, // Decent uniqueness\n spoofResistance: 0.8, // Good spoof resistance\n },\n accessibilityEnhanced: {\n stability: 0.93, // Very stable accessibility settings\n entropy: 0.65, // Moderate entropy from rare settings\n uniqueness: 0.8, // High uniqueness when features enabled\n spoofResistance: 0.9, // Hard to spoof media queries\n },\n enhancedFonts: {\n stability: 0.88, // Stable but OS-dependent\n entropy: 0.85, // High entropy from font combinations\n uniqueness: 0.82, // Good uniqueness across systems\n spoofResistance: 0.7, // Moderate spoof resistance\n },\n};\n\n/**\n * New advanced components characteristics\n */\nexport const ADVANCED_COMPONENT_CHARACTERISTICS: Record<string, ComponentStability> = {\n domBlockers: {\n stability: 0.8,\n entropy: 0.7,\n uniqueness: 0.6,\n spoofResistance: 0.9,\n },\n accessibility: {\n stability: 0.9,\n entropy: 0.6,\n uniqueness: 0.7,\n spoofResistance: 0.85,\n },\n browserApis: {\n stability: 0.85,\n entropy: 0.75,\n uniqueness: 0.8,\n spoofResistance: 0.7,\n },\n};\n\n/**\n * Calculate component weight based on its characteristics\n */\nexport function calculateComponentWeight(componentType: string): number {\n const characteristics = COMPONENT_CHARACTERISTICS[componentType as FingerprintComponentType] ||\n ADVANCED_COMPONENT_CHARACTERISTICS[componentType];\n \n if (!characteristics) {\n return 0.5; // Default weight for unknown components\n }\n\n // Weight calculation formula emphasizing stability and uniqueness\n const weight = (\n characteristics.stability * 0.3 +\n characteristics.entropy * 0.25 +\n characteristics.uniqueness * 0.25 +\n characteristics.spoofResistance * 0.2\n );\n\n return Math.max(0.1, Math.min(1.0, weight));\n}\n\n/**\n * Component result for confidence calculation\n */\nexport interface ComponentResult {\n component: string;\n success: boolean;\n duration: number;\n value?: any;\n error?: string;\n}\n\n/**\n * Confidence calculation result\n */\nexport interface ConfidenceResult {\n score: Confidence;\n level: string;\n factors: {\n componentCount: number;\n weightedScore: number;\n stabilityScore: number;\n entropyScore: number;\n spoofResistanceScore: number;\n };\n recommendations: string[];\n}\n\n/**\n * Calculate overall confidence score for a fingerprint\n */\nexport function calculateConfidence(\n componentResults: ComponentResult[],\n options: {\n requireMinimumComponents?: number;\n penalizeMissingCore?: boolean;\n adjustForIncognito?: boolean;\n } = {}\n): ConfidenceResult {\n const {\n requireMinimumComponents = 4,\n penalizeMissingCore = true,\n adjustForIncognito = true,\n } = options;\n\n const successfulComponents = componentResults.filter(c => c.success);\n const recommendations: string[] = [];\n\n // Check minimum component requirement\n if (successfulComponents.length < requireMinimumComponents) {\n recommendations.push(`Collect at least ${requireMinimumComponents} components for reliable identification`);\n }\n\n // Calculate weighted scores\n let totalWeight = 0;\n let weightedStability = 0;\n let weightedEntropy = 0;\n let weightedUniqueness = 0;\n let weightedSpoofResistance = 0;\n\n const coreComponents = ['canvas', 'webgl', 'audio', 'hardware'];\n const missingCoreComponents = coreComponents.filter(\n core => !successfulComponents.some(c => c.component === core)\n );\n\n for (const result of successfulComponents) {\n const weight = calculateComponentWeight(result.component);\n const characteristics = COMPONENT_CHARACTERISTICS[result.component as FingerprintComponentType] ||\n ADVANCED_COMPONENT_CHARACTERISTICS[result.component];\n\n if (characteristics) {\n totalWeight += weight;\n weightedStability += characteristics.stability * weight;\n weightedEntropy += characteristics.entropy * weight;\n weightedUniqueness += characteristics.uniqueness * weight;\n weightedSpoofResistance += characteristics.spoofResistance * weight;\n }\n }\n\n // Normalize scores\n const stabilityScore = totalWeight > 0 ? weightedStability / totalWeight : 0;\n const entropyScore = totalWeight > 0 ? weightedEntropy / totalWeight : 0;\n const uniquenessScore = totalWeight > 0 ? weightedUniqueness / totalWeight : 0;\n const spoofResistanceScore = totalWeight > 0 ? weightedSpoofResistance / totalWeight : 0;\n\n // Calculate base weighted score\n let weightedScore = (\n stabilityScore * 0.35 +\n entropyScore * 0.25 +\n uniquenessScore * 0.25 +\n spoofResistanceScore * 0.15\n );\n\n // Apply penalties and adjustments\n let finalScore = weightedScore;\n\n // Penalty for missing core components\n if (penalizeMissingCore && missingCoreComponents.length > 0) {\n const penalty = missingCoreComponents.length * 0.1;\n finalScore -= penalty;\n recommendations.push(`Missing core components: ${missingCoreComponents.join(', ')}`);\n }\n\n // Penalty for too few components\n if (successfulComponents.length < 6) {\n const penalty = (6 - successfulComponents.length) * 0.05;\n finalScore -= penalty;\n }\n\n // Adjustment for incognito detection\n if (adjustForIncognito) {\n const hasIncognitoDetection = successfulComponents.some(c => c.component === 'incognito');\n if (hasIncognitoDetection) {\n // Slight boost for incognito detection capability\n finalScore += 0.02;\n }\n }\n\n // Bonus for having advanced components\n const advancedComponents = successfulComponents.filter(c => \n ['domBlockers', 'accessibility', 'browserApis', 'math'].includes(c.component)\n );\n if (advancedComponents.length >= 2) {\n finalScore += 0.05;\n }\n\n // Ensure score stays within bounds\n finalScore = Math.max(0, Math.min(1, finalScore));\n\n // Determine confidence level\n let confidenceLevel: Confidence;\n let levelName: string;\n\n if (finalScore >= Confidence.VeryHigh) {\n confidenceLevel = Confidence.VeryHigh;\n levelName = 'Very High';\n } else if (finalScore >= Confidence.High) {\n confidenceLevel = Confidence.High;\n levelName = 'High';\n } else if (finalScore >= Confidence.Medium) {\n confidenceLevel = Confidence.Medium;\n levelName = 'Medium';\n } else if (finalScore >= Confidence.Low) {\n confidenceLevel = Confidence.Low;\n levelName = 'Low';\n } else {\n confidenceLevel = Confidence.VeryLow;\n levelName = 'Very Low';\n recommendations.push('Consider implementing additional fingerprinting techniques');\n }\n\n // Add specific recommendations\n if (finalScore < Confidence.Medium) {\n recommendations.push('Enable all available fingerprinting components for better accuracy');\n }\n if (spoofResistanceScore < 0.6) {\n recommendations.push('Include more spoof-resistant components like audio and WebGL');\n }\n if (entropyScore < 0.6) {\n recommendations.push('Add high-entropy components like canvas and math fingerprinting');\n }\n\n return {\n score: confidenceLevel,\n level: levelName,\n factors: {\n componentCount: successfulComponents.length,\n weightedScore: Math.round(weightedScore * 1000) / 1000,\n stabilityScore: Math.round(stabilityScore * 1000) / 1000,\n entropyScore: Math.round(entropyScore * 1000) / 1000,\n spoofResistanceScore: Math.round(spoofResistanceScore * 1000) / 1000,\n },\n recommendations: recommendations.slice(0, 3), // Limit to top 3 recommendations\n };\n}\n\n/**\n * Get confidence level name from score\n */\nexport function getConfidenceLevelName(score: number): string {\n if (score >= Confidence.VeryHigh) return 'Very High';\n if (score >= Confidence.High) return 'High';\n if (score >= Confidence.Medium) return 'Medium';\n if (score >= Confidence.Low) return 'Low';\n return 'Very Low';\n}\n\n/**\n * Check if a confidence score is acceptable for identification\n */\nexport function isConfidenceAcceptable(\n score: number, \n minLevel: Confidence = Confidence.Medium\n): boolean {\n return score >= minLevel;\n}","/**\n * Device-specific signals inspired by FingerprintJS\n * Helps differentiate devices by hardware characteristics\n */\n\nexport interface DeviceSignals {\n // Screen frame (availTop, availRight, availBottom, availLeft)\n // Very useful for mobile devices - differentiates devices with same resolution\n screenFrame?: {\n top: number | null;\n right: number | null;\n bottom: number | null;\n left: number | null;\n } | null;\n\n // Hardware characteristics\n hardwareConcurrency?: number; // CPU cores\n deviceMemory?: number; // RAM in GB (rounded)\n architecture?: number; // CPU architecture signature (ARM vs x86)\n\n // Enhanced touch support\n touchSupport?: {\n maxTouchPoints: number;\n touchEvent: boolean;\n touchStart: boolean;\n };\n\n // Browser vendor flavors (Brave, Edge, etc)\n vendorFlavors?: string[];\n\n // CPU class (if available)\n cpuClass?: string;\n\n // Display capabilities\n colorDepth?: number;\n colorGamut?: \"srgb\" | \"p3\" | \"rec2020\";\n}\n\n/**\n * Get screen frame (available area) - critical for mobile device differentiation\n */\nfunction getScreenFrame(): DeviceSignals[\"screenFrame\"] {\n try {\n const s = screen;\n\n // Calculate frame: top, right, bottom, left\n // Note: availTop/availLeft may not exist in all browsers\n const availTop = (s as any).availTop ?? 0;\n const availLeft = (s as any).availLeft ?? 0;\n const availWidth = s.availWidth ?? s.width;\n const availHeight = s.availHeight ?? s.height;\n\n const top = availTop || null;\n const right = s.width - availWidth - availLeft || null;\n const bottom = s.height - availHeight - availTop || null;\n const left = availLeft || null;\n\n // Return null if all are zero/null (some browsers hide this in private mode)\n if (top === null && right === null && bottom === null && left === null) {\n return null;\n }\n\n // Round to reduce micro-variance (macOS Dock can change slightly)\n const round = (v: number | null) =>\n v === null ? null : Math.round(v / 10) * 10;\n\n return {\n top: round(top),\n right: round(right),\n bottom: round(bottom),\n left: round(left),\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Get CPU architecture signature (ARM vs x86)\n * Uses multiple detection methods for maximum reliability\n */\nfunction getArchitecture(): number | undefined {\n try {\n // Method 1: Enhanced platform string detection (most reliable)\n const platform = navigator.platform?.toLowerCase() || '';\n const userAgent = navigator.userAgent?.toLowerCase() || '';\n \n // CRITICAL FIX: Prioritize desktop x86_64 detection first\n \n // Windows x64/x86 detection (highest priority for x86_64)\n if (platform.includes('win') && (userAgent.includes('wow64') || userAgent.includes('x64') || userAgent.includes('x86_64'))) {\n return 0; // x86_64 - Windows\n }\n \n // Linux x86_64 detection\n if (platform.includes('linux') && (platform.includes('x86_64') || userAgent.includes('x86_64'))) {\n return 0; // x86_64 - Linux\n }\n \n // MacOS Intel detection (before ARM check)\n if (platform.includes('mac') && (platform.includes('intel') || userAgent.includes('intel mac'))) {\n return 0; // x86_64 - Intel Mac\n }\n \n // Generic x86/x64 detection\n if (platform.includes('x86') || platform.includes('x64') || \n platform.includes('intel') || platform.includes('amd64') ||\n userAgent.includes('x86') || userAgent.includes('amd64')) {\n return 0; // x86_64\n }\n \n // ARM detection (after x86_64 checks)\n if (platform.includes('arm') || userAgent.includes('arm') || \n userAgent.includes('aarch64') || platform.includes('aarch64')) {\n return 255; // ARM\n }\n \n // Method 2: WebGL vendor detection (secondary check)\n try {\n const canvas = document.createElement('canvas');\n const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n if (gl && 'getExtension' in gl && 'getParameter' in gl) {\n const debugInfo = (gl as WebGLRenderingContext).getExtension('WEBGL_debug_renderer_info');\n if (debugInfo) {\n const vendor = (gl as WebGLRenderingContext).getParameter(debugInfo.UNMASKED_VENDOR_WEBGL)?.toLowerCase() || '';\n const renderer = (gl as WebGLRenderingContext).getParameter(debugInfo.UNMASKED_RENDERER_WEBGL)?.toLowerCase() || '';\n \n // Enhanced x86_64 GPU detection (desktop GPUs)\n if (vendor.includes('intel') || vendor.includes('nvidia') || vendor.includes('amd') ||\n renderer.includes('intel') || renderer.includes('nvidia') || renderer.includes('amd') || \n renderer.includes('radeon') || renderer.includes('geforce') || renderer.includes('quadro') ||\n renderer.includes('iris') || renderer.includes('uhd') || renderer.includes('hd graphics')) {\n return 0; // x86_64 - Desktop GPU\n }\n \n // ARM GPU detection (mobile and ARM devices)\n if (renderer.includes('mali') || renderer.includes('adreno') || \n renderer.includes('powervr') || renderer.includes('tegra') ||\n renderer.includes('apple gpu') || vendor.includes('arm') ||\n renderer.includes('videocore')) {\n return 255; // ARM - Mobile/ARM GPU\n }\n }\n }\n } catch {\n // WebGL detection failed, continue\n }\n \n // Method 3: Fallback floating point NaN behavior (least reliable)\n try {\n const f = new Float32Array(1);\n const u8 = new Uint8Array(f.buffer);\n f[0] = Infinity;\n f[0] = f[0] - f[0]; // Should produce NaN\n const nanBehavior = u8[3];\n \n // Only trust this if platform detection was inconclusive\n // AND we have strong indicators from other methods\n if (platform.includes('linux') && nanBehavior === 255) {\n // Linux on ARM is less common, but validate with other signals\n return nanBehavior;\n }\n \n return nanBehavior;\n } catch {\n return undefined;\n }\n \n } catch {\n return undefined;\n }\n}\n\n/**\n * Get enhanced touch support\n */\nfunction getTouchSupport(): DeviceSignals[\"touchSupport\"] {\n try {\n const n = navigator;\n\n let maxTouchPoints = 0;\n if (n.maxTouchPoints !== undefined) {\n maxTouchPoints = n.maxTouchPoints;\n } else if ((n as any).msMaxTouchPoints !== undefined) {\n maxTouchPoints = (n as any).msMaxTouchPoints;\n }\n\n let touchEvent = false;\n try {\n document.createEvent(\"TouchEvent\");\n touchEvent = true;\n } catch {\n touchEvent = false;\n }\n\n const touchStart = \"ontouchstart\" in window;\n\n return {\n maxTouchPoints,\n touchEvent,\n touchStart,\n };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Get vendor flavors (Brave, Edge, etc)\n */\nfunction getVendorFlavors(): string[] {\n const flavors: string[] = [];\n\n const checks = [\n \"chrome\", // Chrome/Chromium\n \"safari\", // Safari\n \"__crWeb\", // Chrome iOS\n \"__gCrWeb\", // Chrome iOS\n \"yandex\", // Yandex Browser\n \"__yb\", // Yandex iOS\n \"__ybro\", // Yandex iOS\n \"__firefox__\", // Firefox iOS\n \"__edgeTrackingPreventionStatistics\", // Edge\n \"webkit\", // WebKit\n \"oprt\", // Opera Touch\n \"samsungAr\", // Samsung Internet\n \"ucweb\", // UC Browser\n \"UCShellJava\", // UC Browser\n \"puffinDevice\", // Puffin\n ];\n\n for (const key of checks) {\n const value = (window as any)[key];\n if (value && typeof value === \"object\") {\n flavors.push(key);\n }\n }\n\n return flavors.sort();\n}\n\n/**\n * Get device memory (rounded to reduce variance)\n */\nfunction getDeviceMemory(): number | undefined {\n try {\n const mem = (navigator as any).deviceMemory;\n if (typeof mem === \"number\") {\n // Round to nearest GB to reduce variance\n return Math.round(mem);\n }\n if (typeof mem === \"string\") {\n const parsed = parseFloat(mem);\n return isNaN(parsed) ? undefined : Math.round(parsed);\n }\n return undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Get color depth (bits per pixel)\n */\nfunction getColorDepth(): number | undefined {\n try {\n return screen.colorDepth || undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Get color gamut (display color space capabilities)\n */\nfunction getColorGamut(): DeviceSignals[\"colorGamut\"] {\n try {\n // rec2020 includes p3 and p3 includes srgb\n for (const gamut of [\"rec2020\", \"p3\", \"srgb\"] as const) {\n if (window.matchMedia(`(color-gamut: ${gamut})`).matches) {\n return gamut;\n }\n }\n return undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Collect all device signals\n */\nexport function collectDeviceSignals(): DeviceSignals {\n return {\n screenFrame: getScreenFrame(),\n hardwareConcurrency: navigator.hardwareConcurrency || undefined,\n deviceMemory: getDeviceMemory(),\n architecture: getArchitecture(),\n touchSupport: getTouchSupport(),\n vendorFlavors: getVendorFlavors(),\n cpuClass: (navigator as any).cpuClass || undefined,\n colorDepth: getColorDepth(),\n colorGamut: getColorGamut(),\n };\n}\n"],"names":["isWebKit","isAndroid","isSamsungInternet","getBrowserEngine","getBrowserCapabilities","getTouchSupport","isCanvasAvailable","measureText","isFontAvailable","getScreenFrame","getWebGLExtensions","getColorGamut","getDateTimeLocale","getMathFingerprint","deviceSignals","analyzeUserAgent","testLocalStorage","testSessionStorage","testIndexedDB","getDeviceMemory","getArchitecture"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/modules/fingerprint/hashing.ts","../../src/modules/fingerprint/audio.ts","../../src/utils/browser.ts","../../src/modules/fingerprint/browser.ts","../../src/modules/fingerprint/canvas.ts","../../src/modules/fingerprint/fonts.ts","../../src/modules/fingerprint/screen.ts","../../src/utils/webgl-cache.ts","../../src/modules/fingerprint/webgl.ts","../../src/modules/fingerprint/accessibility.ts","../../src/modules/fingerprint/datetime-locale.ts","../../src/modules/fingerprint/font-preferences.ts","../../src/modules/fingerprint/fonts-enhanced.ts","../../src/modules/fingerprint/math-enhanced.ts","../../src/modules/fingerprint.ts","../../src/modules/anti-adblock.ts","../../src/modules/heatmap.ts","../../src/modules/session-replay.ts","../../src/sdk.ts","../../src/modules/global-interface.ts","../../src/modules/bot-detection.ts","../../src/modules/incognito-detection.ts","../../src/modules/user-agent.ts","../../src/modules/fingerprint/incognito.ts","../../src/modules/fingerprint/hardware.ts","../../src/modules/fingerprint/system.ts","../../src/modules/fingerprint/storage.ts","../../src/modules/fingerprint/math.ts","../../src/modules/fingerprint/dom-blockers.ts","../../src/modules/fingerprint/browser-apis.ts","../../src/modules/fingerprint/plugins-enhanced.ts","../../src/modules/fingerprint/confidence.ts","../../src/modules/fingerprint/device-signals.ts"],"sourcesContent":["/**\n * MurmurHash3 x64 Implementation\n * Based on FingerprintJS hashing utility for consistent fingerprint generation\n *\n * Provides 128-bit hash output using the x64 variant of MurmurHash3\n */\n\n/**\n * 64-bit number representation [high, low]\n */\ntype x64Hash = [number, number];\n\n/**\n * Adds two 64-bit numbers\n */\nfunction x64Add(a: x64Hash, b: x64Hash): x64Hash {\n const low = (a[1] + b[1]) & 0xffffffff;\n const high = (a[0] + b[0] + (low < a[1] ? 1 : 0)) & 0xffffffff;\n return [high, low];\n}\n\n/**\n * Multiplies two 64-bit numbers\n */\nfunction x64Multiply(a: x64Hash, b: x64Hash): x64Hash {\n const al = a[1] & 0xffff;\n const ah = a[1] >>> 16;\n const bl = b[1] & 0xffff;\n const bh = b[1] >>> 16;\n\n const rl = al * bl;\n const rm = (al * bh + ah * bl) & 0xffffffff;\n const rh = ah * bh + (rm >>> 16);\n\n const low = (rl + ((rm & 0xffff) << 16)) & 0xffffffff;\n const high = (a[0] * b[1] + a[1] * b[0] + rh) & 0xffffffff;\n\n return [high, low];\n}\n\n/**\n * Rotates a 64-bit number left by the specified number of bits\n */\nfunction x64Rotl(value: x64Hash, shift: number): x64Hash {\n shift %= 64;\n\n if (shift === 0) return value;\n if (shift < 32) {\n const high = (value[0] << shift) | (value[1] >>> (32 - shift));\n const low = (value[1] << shift) | (value[0] >>> (32 - shift));\n return [high & 0xffffffff, low & 0xffffffff];\n } else {\n shift -= 32;\n const high = (value[1] << shift) | (value[0] >>> (32 - shift));\n const low = (value[0] << shift) | (value[1] >>> (32 - shift));\n return [high & 0xffffffff, low & 0xffffffff];\n }\n}\n\n/**\n * XORs two 64-bit numbers\n */\nfunction x64Xor(a: x64Hash, b: x64Hash): x64Hash {\n return [a[0] ^ b[0], a[1] ^ b[1]];\n}\n\n/**\n * Finalizes a 64-bit hash value\n */\nfunction x64Fmix(hash: x64Hash): x64Hash {\n let h = hash;\n\n h = x64Xor(h, [0, h[0] >>> 1]);\n h = x64Multiply(h, [0xff51afd7, 0xed558ccd]);\n h = x64Xor(h, [0, h[0] >>> 1]);\n h = x64Multiply(h, [0xc4ceb9fe, 0x1a85ec53]);\n h = x64Xor(h, [0, h[0] >>> 1]);\n\n return h;\n}\n\n/**\n * Converts a string to array of 32-bit integers (little-endian)\n */\nfunction stringToUint32Array(str: string): number[] {\n const arr: number[] = [];\n for (let i = 0; i < str.length; i += 4) {\n let value = 0;\n for (let j = Math.min(3, str.length - i - 1); j >= 0; j--) {\n value = (value << 8) | str.charCodeAt(i + j);\n }\n arr.push(value);\n }\n return arr;\n}\n\n/**\n * MurmurHash3 x64 128-bit hash function\n * Returns a 128-bit hash as a hex string\n */\nexport function x64hash128(input: string, seed: number = 0): string {\n const data = stringToUint32Array(input);\n const nblocks = Math.floor(data.length / 4);\n\n let h1: x64Hash = [0, seed];\n let h2: x64Hash = [0, seed];\n\n const c1: x64Hash = [0x87c37b91, 0x114253d5];\n const c2: x64Hash = [0x4cf5ad43, 0x2745937f];\n\n // Process 16-byte blocks\n for (let i = 0; i < nblocks; i++) {\n const k1Index = i * 4;\n const k2Index = i * 4 + 2;\n\n let k1: x64Hash = [data[k1Index + 1] || 0, data[k1Index] || 0];\n let k2: x64Hash = [data[k2Index + 1] || 0, data[k2Index] || 0];\n\n k1 = x64Multiply(k1, c1);\n k1 = x64Rotl(k1, 31);\n k1 = x64Multiply(k1, c2);\n h1 = x64Xor(h1, k1);\n\n h1 = x64Rotl(h1, 27);\n h1 = x64Add(h1, h2);\n h1 = x64Add(x64Multiply(h1, [0, 5]), [0, 0x52dce729]);\n\n k2 = x64Multiply(k2, c2);\n k2 = x64Rotl(k2, 33);\n k2 = x64Multiply(k2, c1);\n h2 = x64Xor(h2, k2);\n\n h2 = x64Rotl(h2, 31);\n h2 = x64Add(h2, h1);\n h2 = x64Add(x64Multiply(h2, [0, 5]), [0, 0x38495ab5]);\n }\n\n // Process remaining bytes\n const tailIndex = nblocks * 4;\n const remainingBytes = data.length - tailIndex;\n\n let k1: x64Hash = [0, 0];\n let k2: x64Hash = [0, 0];\n\n if (remainingBytes >= 12) {\n k2 = x64Xor(k2, [data[tailIndex + 3] || 0, 0]);\n }\n if (remainingBytes >= 8) {\n k2 = x64Xor(k2, [0, data[tailIndex + 2] || 0]);\n k2 = x64Multiply(k2, c2);\n k2 = x64Rotl(k2, 33);\n k2 = x64Multiply(k2, c1);\n h2 = x64Xor(h2, k2);\n }\n if (remainingBytes >= 4) {\n k1 = x64Xor(k1, [data[tailIndex + 1] || 0, 0]);\n }\n if (remainingBytes >= 1) {\n k1 = x64Xor(k1, [0, data[tailIndex] || 0]);\n k1 = x64Multiply(k1, c1);\n k1 = x64Rotl(k1, 31);\n k1 = x64Multiply(k1, c2);\n h1 = x64Xor(h1, k1);\n }\n\n // Finalization\n h1 = x64Xor(h1, [0, input.length]);\n h2 = x64Xor(h2, [0, input.length]);\n\n h1 = x64Add(h1, h2);\n h2 = x64Add(h2, h1);\n\n h1 = x64Fmix(h1);\n h2 = x64Fmix(h2);\n\n h1 = x64Add(h1, h2);\n h2 = x64Add(h2, h1);\n\n // Convert to hex string\n // CRITICAL: Use >>> 0 to convert to unsigned 32-bit integer before converting to hex\n // This prevents negative numbers from generating hashes with minus signs (e.g., \"-6b43973f\")\n const hex1 =\n (h1[0] >>> 0).toString(16).padStart(8, \"0\") +\n (h1[1] >>> 0).toString(16).padStart(8, \"0\");\n const hex2 =\n (h2[0] >>> 0).toString(16).padStart(8, \"0\") +\n (h2[1] >>> 0).toString(16).padStart(8, \"0\");\n\n return hex1 + hex2;\n}\n\n/**\n * Simple 32-bit hash for basic use cases\n */\nexport function hash32(input: string): string {\n let hash = 0;\n if (input.length === 0) return hash.toString(36);\n\n for (let i = 0; i < input.length; i++) {\n const char = input.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n\n return Math.abs(hash).toString(36);\n}\n\n/**\n * Hash fingerprint components into a stable identifier\n */\nexport function hashFingerprint(\n components: Record<string, any>,\n debug: boolean = false\n): string {\n // Convert components to canonical string representation using deep sorting\n // CRITICAL: Do NOT use JSON.stringify(obj, keys) as it filters out nested properties!\n // Use canonicalizeStable instead which handles deep sorting and normalization.\n const canonicalized = canonicalizeStable(components);\n const canonical = JSON.stringify(canonicalized);\n\n if (debug) {\n console.log(\"[RabbitTracker] hashFingerprint debug:\", {\n originalKeys: Object.keys(components),\n canonicalizedKeys: Object.keys(canonicalized),\n canonicalLength: canonical.length,\n sample: canonical.substring(0, 200) + \"...\",\n });\n }\n\n // Use MurmurHash3 x64 for consistent hashing\n const hash = x64hash128(canonical);\n\n if (debug) {\n console.log(\n \"[RabbitTracker] Generated fingerprintHash:\",\n hash.substring(0, 32)\n );\n }\n\n return hash;\n}\n\n/**\n * Generate a visitor ID from fingerprint hash\n */\nexport function generateVisitorId(fingerprintHash: string): string {\n // Use first 16 characters of the hash for visitor ID\n return \"vis_\" + fingerprintHash.substring(0, 16);\n}\n\n/**\n * Check if a key represents an unstable component that should be excluded from hashing\n */\nfunction isUnstableKey(key: string): boolean {\n // Unstable keys that change between requests:\n // - duration: collection time varies\n // - timestamp: changes every request\n // - error: error messages can vary\n // - errors: error arrays can vary\n // - collectionTime: varies per request\n const unstableKeys = [\n \"duration\",\n \"timestamp\",\n \"error\",\n \"errors\",\n \"collectionTime\",\n \"startTime\",\n \"endTime\",\n \"_timestamp\", // internal timestamp fields\n ];\n\n return (\n unstableKeys.includes(key) ||\n key.endsWith(\"_timestamp\") ||\n key.endsWith(\"Timestamp\")\n );\n}\n\n/**\n * Canonicalize an object deeply with sorted keys and normalized primitives\n * CRITICAL: Filters out unstable components that vary between requests\n */\nfunction canonicalizeStable(input: any): any {\n if (input === null || input === undefined) return null;\n if (Array.isArray(input)) {\n return input\n .map((v) => canonicalizeStable(v))\n .filter((v) => v !== null)\n .sort((a, b) => JSON.stringify(a).localeCompare(JSON.stringify(b)));\n }\n if (typeof input === \"object\") {\n const keys = Object.keys(input).sort();\n const out: Record<string, any> = {};\n for (const k of keys) {\n // CRITICAL: Skip unstable keys that cause hash instability\n if (isUnstableKey(k)) {\n continue;\n }\n\n const v = canonicalizeStable(input[k]);\n if (v !== null) out[k] = v;\n }\n return out;\n }\n if (typeof input === \"number\") {\n // Enhanced floating point normalization for maximum stability\n if (!Number.isFinite(input)) return 0;\n \n // Handle very small numbers (round to 0)\n if (Math.abs(input) < 0.0001) return 0;\n \n // Handle very large numbers (clamp to reasonable range)\n if (Math.abs(input) > 1000000) {\n return input > 0 ? 1000000 : -1000000;\n }\n \n // For screen ratios and similar values, use more precision\n if (input >= 0.1 && input <= 10) {\n return Number(input.toFixed(3));\n }\n \n // For other numbers, use 2 decimal places\n return Number(input.toFixed(2));\n }\n if (typeof input === \"string\") {\n return input.trim().toLowerCase();\n }\n if (typeof input === \"boolean\") return input;\n return null;\n}\n\n/**\n * Compute stable core hash from a minimal, invariant vector\n */\nexport function hashStableCore(\n coreVector: Record<string, any>,\n debug: boolean = false\n): string {\n const canonicalized = canonicalizeStable(coreVector);\n const canonical = JSON.stringify(canonicalized);\n\n if (debug) {\n console.log(\"[RabbitTracker] hashStableCore debug:\", {\n originalKeys: Object.keys(coreVector),\n canonicalizedKeys: Object.keys(canonicalized),\n canonicalLength: canonical.length,\n sample: canonical.substring(0, 200) + \"...\",\n });\n }\n\n const hash = x64hash128(canonical);\n\n if (debug) {\n console.log(\n \"[RabbitTracker] Generated stableCoreHash:\",\n hash.substring(0, 32)\n );\n }\n\n return hash;\n}\n","/**\n * Audio Fingerprinting\n * Based on FingerprintJS audio component using AudioContext\n */\n\nimport type {\n AudioFingerprint,\n FingerprintComponent,\n} from \"../../types/fingerprint\";\nimport { hash32 } from \"./hashing\";\n\n/**\n * Enhanced audio configuration for maximum differentiation\n */\nconst AUDIO_CONFIG = {\n SAMPLE_RATE: 44100,\n DURATION: 0.1, // 100ms\n FREQUENCIES: [440, 1000, 1760, 3520], // Multiple frequencies for better differentiation\n COMPRESSOR_THRESHOLD: -50,\n COMPRESSOR_KNEE: 40,\n COMPRESSOR_RATIO: 12,\n COMPRESSOR_ATTACK: 0.003,\n COMPRESSOR_RELEASE: 0.25,\n // NEW: Additional audio processing parameters\n FILTER_FREQUENCY: 2000,\n GAIN_VALUE: 0.5,\n DELAY_TIME: 0.02,\n} as const;\n\n/**\n * Create offline audio context (doesn't require user gesture)\n * OfflineAudioContext is perfect for fingerprinting - no audio output needed\n */\nfunction createOfflineAudioContext(): OfflineAudioContext | null {\n try {\n const OfflineAudioContextClass =\n window.OfflineAudioContext || (window as any).webkitOfflineAudioContext;\n if (!OfflineAudioContextClass) return null;\n\n // Use standard sample rate (most browsers support 44100)\n const sampleRate = 44100;\n const duration = AUDIO_CONFIG.DURATION;\n const frameCount = Math.floor(sampleRate * duration);\n\n return new OfflineAudioContextClass(1, frameCount, sampleRate);\n } catch {\n return null;\n }\n}\n\n/**\n * Get sample rate (for metadata only)\n * Uses OfflineAudioContext if available (no user gesture needed)\n * Falls back to 44100 if context creation fails\n */\nfunction getDefaultSampleRate(): number {\n try {\n // Try OfflineAudioContext first (no user gesture needed)\n const OfflineAudioContextClass =\n window.OfflineAudioContext || (window as any).webkitOfflineAudioContext;\n if (OfflineAudioContextClass) {\n try {\n const testContext = new OfflineAudioContextClass(1, 1, 44100);\n const sampleRate = testContext.sampleRate;\n return sampleRate;\n } catch {\n // Fall through to default\n }\n }\n\n // Fallback: try regular AudioContext (may fail due to autoplay policy)\n const AudioContextClass =\n window.AudioContext || (window as any).webkitAudioContext;\n if (AudioContextClass) {\n try {\n const testContext = new AudioContextClass();\n const sampleRate = testContext.sampleRate;\n // Close immediately to free resources\n testContext.close().catch(() => {});\n return sampleRate;\n } catch {\n // AudioContext creation failed (likely due to autoplay policy)\n // This is fine, we'll use default\n }\n }\n } catch {\n // Any error, use default\n }\n\n return 44100; // Default fallback (standard sample rate)\n}\n\n/**\n * Generate advanced multiple oscillator fingerprint for maximum DAC/hardware differentiation\n */\nasync function generateMultiOscillatorFingerprint(\n offlineContext: OfflineAudioContext\n): Promise<string> {\n try {\n // Create multiple oscillators with different waveforms and frequencies\n const oscillators = AUDIO_CONFIG.FREQUENCIES.map((freq, index) => {\n const osc = offlineContext.createOscillator();\n const waveforms: OscillatorType[] = ['sine', 'square', 'sawtooth', 'triangle'];\n const waveformIndex = index % waveforms.length;\n const selectedWaveform = waveforms[waveformIndex];\n // Type guard to ensure we have a valid waveform\n if (selectedWaveform) {\n osc.type = selectedWaveform;\n } else {\n osc.type = 'sine'; // Fallback to sine wave\n }\n osc.frequency.setValueAtTime(freq, offlineContext.currentTime);\n return osc;\n });\n\n // Create advanced audio processing chain\n const compressor = offlineContext.createDynamicsCompressor();\n const biquadFilter = offlineContext.createBiquadFilter();\n const gainNode = offlineContext.createGain();\n const delayNode = offlineContext.createDelay();\n const analyserNode = offlineContext.createAnalyser();\n\n // Configure compressor with specific settings\n compressor.threshold.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_THRESHOLD, offlineContext.currentTime);\n compressor.knee.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_KNEE, offlineContext.currentTime);\n compressor.ratio.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_RATIO, offlineContext.currentTime);\n compressor.attack.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_ATTACK, offlineContext.currentTime);\n compressor.release.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_RELEASE, offlineContext.currentTime);\n\n // Configure biquad filter for frequency response differences\n biquadFilter.type = 'bandpass';\n biquadFilter.frequency.setValueAtTime(AUDIO_CONFIG.FILTER_FREQUENCY, offlineContext.currentTime);\n biquadFilter.Q.setValueAtTime(0.7, offlineContext.currentTime);\n\n // Configure gain node\n gainNode.gain.setValueAtTime(AUDIO_CONFIG.GAIN_VALUE, offlineContext.currentTime);\n\n // Configure delay node for additional processing\n delayNode.delayTime.setValueAtTime(AUDIO_CONFIG.DELAY_TIME, offlineContext.currentTime);\n\n // Create a mixer node to combine oscillators\n const mixerGain = offlineContext.createGain();\n mixerGain.gain.setValueAtTime(0.25, offlineContext.currentTime); // Reduce volume when mixing\n\n // Connect oscillators to mixer\n oscillators.forEach(osc => {\n osc.connect(mixerGain);\n });\n\n // Create complex audio processing chain:\n // Mixed Oscillators -> Filter -> Compressor -> Gain -> Delay -> Analyser -> Destination\n mixerGain.connect(biquadFilter);\n biquadFilter.connect(compressor);\n compressor.connect(gainNode);\n gainNode.connect(delayNode);\n delayNode.connect(analyserNode);\n analyserNode.connect(offlineContext.destination);\n\n // Start all oscillators\n oscillators.forEach((osc, index) => {\n osc.start(index * 0.01); // Slightly staggered start times\n osc.stop(AUDIO_CONFIG.DURATION);\n });\n\n const buffer = await offlineContext.startRendering();\n const channelData = buffer.getChannelData(0);\n\n // Enhanced sampling for better differentiation\n const samplePoints = [];\n for (let i = 0; i < 32; i++) {\n const index = Math.floor((channelData.length / 32) * i);\n samplePoints.push(channelData[index] || 0);\n }\n\n // Calculate additional characteristics\n const rms = Math.sqrt(samplePoints.reduce((sum, val) => sum + val * val, 0) / samplePoints.length);\n const maxAmplitude = Math.max(...samplePoints.map(Math.abs));\n const averageAmplitude = samplePoints.reduce((sum, val) => sum + Math.abs(val), 0) / samplePoints.length;\n\n // Frequency domain analysis\n let spectralCentroid = 0;\n for (let i = 0; i < Math.min(samplePoints.length, 16); i++) {\n const sample = samplePoints[i];\n if (sample !== undefined) {\n spectralCentroid += i * Math.abs(sample);\n }\n }\n\n const characteristics = [\n ...samplePoints,\n rms,\n maxAmplitude,\n averageAmplitude,\n spectralCentroid\n ];\n\n return hash32(characteristics.join(\",\"));\n } catch (error) {\n return hash32(\"multi_oscillator_error\");\n }\n}\n\n/**\n * Generate frequency response fingerprint to detect DAC characteristics\n */\nasync function generateFrequencyResponseFingerprint(\n offlineContext: OfflineAudioContext\n): Promise<string> {\n try {\n // Test multiple frequencies to detect DAC/audio hardware frequency response\n const testFrequencies = [100, 440, 1000, 2000, 4000, 8000, 12000, 16000];\n const responses: number[] = [];\n\n for (const frequency of testFrequencies) {\n const osc = offlineContext.createOscillator();\n const analyser = offlineContext.createAnalyser();\n \n osc.type = 'sine';\n osc.frequency.setValueAtTime(frequency, offlineContext.currentTime);\n \n // Configure analyser for frequency analysis\n analyser.fftSize = 256;\n analyser.smoothingTimeConstant = 0;\n \n osc.connect(analyser);\n analyser.connect(offlineContext.destination);\n \n osc.start();\n osc.stop(0.05); // Short test for each frequency\n \n // Create a new offline context for each frequency test\n const testContext = createOfflineAudioContext();\n if (testContext) {\n const testOsc = testContext.createOscillator();\n testOsc.type = 'sine';\n testOsc.frequency.setValueAtTime(frequency, testContext.currentTime);\n testOsc.connect(testContext.destination);\n testOsc.start();\n testOsc.stop(0.05);\n \n try {\n const testBuffer = await testContext.startRendering();\n const testData = testBuffer.getChannelData(0);\n \n // Calculate RMS for this frequency\n const rms = Math.sqrt(testData.reduce((sum, val) => sum + val * val, 0) / testData.length);\n responses.push(rms);\n } catch {\n responses.push(0);\n }\n }\n }\n\n return hash32(responses.join(\",\"));\n } catch (error) {\n return hash32(\"frequency_response_error\");\n }\n}\n\n/**\n * Generate compressor fingerprint using OfflineAudioContext (no user gesture required)\n */\nasync function generateCompressorFingerprint(\n offlineContext: OfflineAudioContext\n): Promise<string> {\n try {\n const offlineOscillator = offlineContext.createOscillator();\n const offlineCompressor = offlineContext.createDynamicsCompressor();\n\n // Configure nodes\n offlineOscillator.type = \"triangle\";\n offlineOscillator.frequency.setValueAtTime(\n AUDIO_CONFIG.FREQUENCIES[0], // Use first frequency from the array\n offlineContext.currentTime\n );\n\n offlineCompressor.threshold.setValueAtTime(\n AUDIO_CONFIG.COMPRESSOR_THRESHOLD,\n offlineContext.currentTime\n );\n offlineCompressor.knee.setValueAtTime(\n AUDIO_CONFIG.COMPRESSOR_KNEE,\n offlineContext.currentTime\n );\n offlineCompressor.ratio.setValueAtTime(\n AUDIO_CONFIG.COMPRESSOR_RATIO,\n offlineContext.currentTime\n );\n offlineCompressor.attack.setValueAtTime(\n AUDIO_CONFIG.COMPRESSOR_ATTACK,\n offlineContext.currentTime\n );\n offlineCompressor.release.setValueAtTime(\n AUDIO_CONFIG.COMPRESSOR_RELEASE,\n offlineContext.currentTime\n );\n\n // Connect and render (no audible output, no user gesture needed)\n offlineOscillator.connect(offlineCompressor);\n offlineCompressor.connect(offlineContext.destination);\n\n offlineOscillator.start();\n offlineOscillator.stop(AUDIO_CONFIG.DURATION);\n\n const renderedBuffer = await offlineContext.startRendering();\n const channelData = renderedBuffer.getChannelData(0);\n\n // Create fingerprint from specific samples\n const fingerprintSamples = [\n channelData[0] || 0,\n channelData[Math.floor(channelData.length * 0.25)] || 0,\n channelData[Math.floor(channelData.length * 0.5)] || 0,\n channelData[Math.floor(channelData.length * 0.75)] || 0,\n channelData[channelData.length - 1] || 0,\n ];\n\n return hash32(fingerprintSamples.join(\",\"));\n } catch (error) {\n // Fallback if OfflineAudioContext fails\n return hash32(\"compressor_error\");\n }\n}\n\n/**\n * Get detailed audio context characteristics\n */\nfunction getAudioContextCharacteristics(): Record<string, any> {\n const characteristics: Record<string, any> = {};\n \n try {\n // Try to get characteristics from OfflineAudioContext\n const testContext = createOfflineAudioContext();\n if (testContext) {\n characteristics.sampleRate = testContext.sampleRate;\n characteristics.length = testContext.length;\n characteristics.state = testContext.state;\n \n // Test supported sample rates\n const supportedRates = [];\n const testRates = [8000, 22050, 44100, 48000, 96000];\n \n for (const rate of testRates) {\n try {\n const testCtx = new (window.OfflineAudioContext || (window as any).webkitOfflineAudioContext)(1, 1, rate);\n if (testCtx.sampleRate === rate) {\n supportedRates.push(rate);\n }\n // OfflineAudioContext doesn't have close method - it's automatically disposed after rendering\n if ('close' in testCtx && typeof (testCtx as any).close === 'function') {\n (testCtx as any).close();\n }\n } catch {\n // Rate not supported\n }\n }\n \n characteristics.supportedSampleRates = supportedRates;\n \n // Test base latency (if available)\n if ('baseLatency' in testContext) {\n characteristics.baseLatency = (testContext as any).baseLatency;\n }\n \n // OfflineAudioContext doesn't have close method - it's automatically disposed after rendering\n if ('close' in testContext && typeof (testContext as any).close === 'function') {\n (testContext as any).close();\n }\n }\n } catch (error) {\n characteristics.error = 'context_characteristics_error';\n }\n \n return characteristics;\n}\n\n/**\n * Generate enhanced audio fingerprint with multiple analysis methods\n */\nexport async function getAudioFingerprint(): Promise<\n FingerprintComponent<AudioFingerprint>\n> {\n const startTime = performance.now();\n\n try {\n // Get sample rate and context characteristics\n const sampleRate = getDefaultSampleRate();\n const contextCharacteristics = getAudioContextCharacteristics();\n\n // Create multiple offline contexts for different analysis methods\n const contexts = {\n multiOsc: createOfflineAudioContext(),\n compressor: createOfflineAudioContext(),\n frequencyResponse: createOfflineAudioContext(),\n };\n\n // Verify all contexts are available\n if (!contexts.multiOsc || !contexts.compressor || !contexts.frequencyResponse) {\n throw new Error(\"OfflineAudioContext not available\");\n }\n\n // Generate multiple fingerprints in parallel for enhanced differentiation\n const [\n multiOscillatorHash,\n compressorHash,\n frequencyResponseHash\n ] = await Promise.all([\n generateMultiOscillatorFingerprint(contexts.multiOsc).catch(() => \"multi_oscillator_error\"),\n generateCompressorFingerprint(contexts.compressor).catch(() => \"compressor_error\"),\n generateFrequencyResponseFingerprint(contexts.frequencyResponse).catch(() => \"frequency_response_error\"),\n ]);\n\n // Test audio node creation capabilities\n const nodeCapabilities: Record<string, boolean> = {};\n try {\n const testContext = createOfflineAudioContext();\n if (testContext) {\n const nodeTypes = [\n 'createOscillator',\n 'createAnalyser',\n 'createBiquadFilter',\n 'createConvolver',\n 'createDelay',\n 'createDynamicsCompressor',\n 'createGain',\n 'createWaveShaper',\n 'createStereoPanner',\n 'createChannelSplitter',\n 'createChannelMerger'\n ];\n\n for (const nodeType of nodeTypes) {\n try {\n if (typeof (testContext as any)[nodeType] === 'function') {\n (testContext as any)[nodeType]();\n nodeCapabilities[nodeType] = true;\n }\n } catch {\n nodeCapabilities[nodeType] = false;\n }\n }\n \n // OfflineAudioContext doesn't have close method - it's automatically disposed after rendering\n if ('close' in testContext && typeof (testContext as any).close === 'function') {\n (testContext as any).close();\n }\n }\n } catch {\n // Node capability testing failed\n }\n\n // Calculate audio stack fingerprint\n const audioStackComponents = [\n multiOscillatorHash,\n compressorHash,\n frequencyResponseHash,\n sampleRate.toString(),\n JSON.stringify(contextCharacteristics),\n JSON.stringify(nodeCapabilities)\n ];\n\n const audioStackHash = hash32(audioStackComponents.join(\"|\"));\n\n const endTime = performance.now();\n\n const result: AudioFingerprint = {\n // Legacy fields for compatibility\n oscillator: multiOscillatorHash,\n compressor: compressorHash,\n sampleRate: sampleRate,\n maxChannelCount: contextCharacteristics.supportedSampleRates?.length || 2,\n \n // NEW: Enhanced audio analysis\n multiOscillatorFingerprint: multiOscillatorHash,\n frequencyResponseFingerprint: frequencyResponseHash,\n contextCharacteristics: contextCharacteristics,\n nodeCapabilities: nodeCapabilities,\n audioStackHash: audioStackHash,\n supportedSampleRates: contextCharacteristics.supportedSampleRates || []\n };\n\n return {\n value: result,\n duration: endTime - startTime,\n };\n } catch (error) {\n return {\n value: {\n oscillator: \"error\",\n compressor: \"error\",\n sampleRate: 0,\n maxChannelCount: 0,\n multiOscillatorFingerprint: \"error\",\n frequencyResponseFingerprint: \"error\",\n contextCharacteristics: {},\n nodeCapabilities: {},\n audioStackHash: \"error\",\n supportedSampleRates: []\n },\n duration: performance.now() - startTime,\n error:\n error instanceof Error ? error.message : \"Audio fingerprinting failed\",\n };\n }\n}\n\n/**\n * Check if audio fingerprinting is available\n * Prefers OfflineAudioContext (no user gesture needed)\n */\nexport function isAudioAvailable(): boolean {\n try {\n // Check for OfflineAudioContext first (preferred for fingerprinting)\n const OfflineAudioContextClass =\n window.OfflineAudioContext || (window as any).webkitOfflineAudioContext;\n if (typeof OfflineAudioContextClass === \"function\") {\n return true;\n }\n\n // Fallback to regular AudioContext (but it requires user gesture)\n const AudioContextClass =\n window.AudioContext || (window as any).webkitAudioContext;\n return typeof AudioContextClass === \"function\";\n } catch {\n return false;\n }\n}\n","/**\n * Browser Detection Utilities\n * Based on FingerprintJS browser detection patterns\n * Uses feature detection instead of user-agent parsing for reliability\n */\n\n/**\n * Detects if the browser is WebKit-based (Safari, mobile Safari)\n */\nexport function isWebKit(): boolean {\n try {\n return (\n \"WebKitAppearance\" in document.documentElement.style ||\n \"webkitRequestFileSystem\" in window ||\n \"webkitResolveLocalFileSystemURL\" in window ||\n Boolean((window as any).safari)\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is running on Android\n */\nexport function isAndroid(): boolean {\n try {\n return (\n \"ontouchstart\" in window &&\n (\"orientation\" in window || \"onorientationchange\" in window) &&\n /android/i.test(navigator.userAgent)\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Brave\n * Brave masquerades as Chrome but has specific APIs\n */\nexport function isBrave(): boolean {\n try {\n // Brave has navigator.brave API (most reliable method)\n if (\"brave\" in navigator && (navigator as any).brave) {\n return true;\n }\n\n // Secondary check: Brave blocks certain APIs that Chrome doesn't\n // Brave has specific user agent string patterns (less reliable)\n const ua = navigator.userAgent;\n if (ua.includes(\"Brave\")) {\n return true;\n }\n\n // Brave detection through missing APIs that Chrome has\n if (\n (window as any).chrome &&\n (window as any).chrome.runtime &&\n !(window as any).chrome.webstore &&\n !(window as any).navigator.getBattery && // Brave removes some APIs for privacy\n /Chrome/.test(ua)\n ) {\n return true;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Arc\n * Arc browser is Chromium-based but has unique characteristics\n */\nexport function isArc(): boolean {\n try {\n const ua = navigator.userAgent;\n\n // Arc specific detection\n if (ua.includes(\"Arc/\")) {\n return true;\n }\n\n // Arc may have specific window properties\n if ((window as any).arc || (window as any).Arc) {\n return true;\n }\n\n // Arc modifies some Chrome APIs\n if (\n (window as any).chrome &&\n (window as any).chrome.runtime &&\n /Chrome/.test(ua) &&\n // Arc specific user agent patterns or missing features\n (ua.includes(\"ArcBrowser\") || window.location.protocol === \"arc:\")\n ) {\n return true;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Opera (modern Chromium-based)\n */\nexport function isOpera(): boolean {\n try {\n // Opera has specific properties\n if ((window as any).opr || (window as any).opera) {\n return true;\n }\n\n const ua = navigator.userAgent;\n if (ua.includes(\"OPR/\") || ua.includes(\"Opera/\")) {\n return true;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Vivaldi\n */\nexport function isVivaldi(): boolean {\n try {\n const ua = navigator.userAgent;\n if (ua.includes(\"Vivaldi/\")) {\n return true;\n }\n\n // Vivaldi has specific window properties\n if ((window as any).vivaldi) {\n return true;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Samsung Internet\n */\nexport function isSamsungInternet(): boolean {\n try {\n const ua = navigator.userAgent;\n return ua.includes(\"SamsungBrowser/\") || ua.includes(\"Samsung Internet\");\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Chrome/Chromium-based (pure Chrome, not derivatives)\n */\nexport function isChrome(): boolean {\n try {\n // First, exclude known Chromium derivatives\n if (\n isBrave() ||\n isArc() ||\n isOpera() ||\n isVivaldi() ||\n isEdge() ||\n isSamsungInternet()\n ) {\n return false;\n }\n\n return Boolean(\n (window as any).chrome &&\n ((window as any).chrome.webstore || (window as any).chrome.runtime) &&\n /Chrome/.test(navigator.userAgent) &&\n !/Edg|OPR|Opera|Vivaldi|SamsungBrowser|Arc|Brave/.test(\n navigator.userAgent\n )\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Firefox\n */\nexport function isFirefox(): boolean {\n try {\n return (\n \"InstallTrigger\" in window ||\n \"mozInnerScreenX\" in window ||\n \"mozPaintCount\" in window ||\n Boolean((navigator as any).mozApps)\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Edge (legacy or Chromium)\n */\nexport function isEdge(): boolean {\n try {\n return (\n \"msCredentials\" in navigator ||\n Boolean((window as any).StyleMedia) ||\n (isChrome() && /edg/i.test(navigator.userAgent))\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is Safari (not just WebKit)\n */\nexport function isSafari(): boolean {\n try {\n return (\n isWebKit() &&\n !isChrome() &&\n !isEdge() &&\n Boolean((window as any).safari) &&\n /safari/i.test(navigator.userAgent)\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser supports specific APIs safely\n */\nexport function supportsAPI(apiName: string): boolean {\n try {\n const parts = apiName.split(\".\");\n let obj: any = window;\n\n for (const part of parts) {\n if (!(part in obj)) {\n return false;\n }\n obj = obj[part];\n }\n\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is in a secure context\n */\nexport function isSecureContext(): boolean {\n try {\n return window.isSecureContext || location.protocol === \"https:\";\n } catch {\n return false;\n }\n}\n\n/**\n * Detects if the browser is likely in private/incognito mode\n * This is a best-effort detection and not 100% reliable\n */\nexport function isLikelyPrivateMode(): boolean {\n try {\n // Quick checks for obvious private mode indicators\n if (\"webkitTemporaryStorage\" in navigator) {\n return false; // Likely not private\n }\n\n // Check for reduced storage quotas (common in private mode)\n if (navigator.storage && navigator.storage.estimate) {\n navigator.storage.estimate().then((estimate) => {\n const quota = estimate.quota || 0;\n return quota < 1024 * 1024 * 100; // Less than 100MB likely indicates private mode\n });\n }\n\n return false; // Default to not private if we can't determine\n } catch {\n return false;\n }\n}\n\n/**\n * Gets the exact browser name with proper Chromium-based browser detection\n */\nexport function getBrowserName(): string {\n try {\n // Check specific Chromium-based browsers first (order matters!)\n if (isBrave()) return \"Brave\";\n if (isArc()) return \"Arc\";\n if (isOpera()) return \"Opera\";\n if (isVivaldi()) return \"Vivaldi\";\n if (isSamsungInternet()) return \"Samsung Internet\";\n if (isEdge()) return \"Edge\";\n\n // Check non-Chromium browsers\n if (isFirefox()) return \"Firefox\";\n if (isSafari()) return \"Safari\";\n\n // Finally check pure Chrome (after excluding derivatives)\n if (isChrome()) return \"Chrome\";\n\n // Fallback: try to parse from user agent\n const ua = navigator.userAgent;\n if (/Firefox/i.test(ua) && !isChrome()) return \"Firefox\";\n if (/Safari/i.test(ua) && !isChrome()) return \"Safari\";\n if (/Chrome/i.test(ua)) return \"Chrome\"; // Last resort fallback\n\n return \"Unknown\";\n } catch {\n return \"Unknown\";\n }\n}\n\n/**\n * Gets browser engine name for debugging\n */\nexport function getBrowserEngine(): string {\n if (\n isBrave() ||\n isArc() ||\n isOpera() ||\n isVivaldi() ||\n isSamsungInternet() ||\n isChrome()\n )\n return \"Blink\";\n if (isEdge()) return \"EdgeHTML/Blink\";\n if (isFirefox()) return \"Gecko\";\n if (isWebKit() || isSafari()) return \"WebKit\";\n return \"Unknown\";\n}\n\n/**\n * Gets detailed browser information with accurate Chromium-based detection\n */\nexport function getBrowserInfo(): {\n name: string;\n engine: string;\n isChromiumBased: boolean;\n family: string;\n} {\n const name = getBrowserName();\n const engine = getBrowserEngine();\n\n const chromiumBased = [\n \"Brave\",\n \"Arc\",\n \"Opera\",\n \"Vivaldi\",\n \"Samsung Internet\",\n \"Edge\",\n \"Chrome\",\n ].includes(name);\n\n // Browser family for fingerprinting stability\n let family = name.toLowerCase();\n if (chromiumBased && name !== \"Chrome\") {\n family = `${name.toLowerCase()}-chromium`; // e.g., \"brave-chromium\"\n }\n\n return {\n name,\n engine,\n isChromiumBased: chromiumBased,\n family,\n };\n}\n\n/**\n * Checks if the current environment supports DOM manipulation\n */\nexport function supportsDOMManipulation(): boolean {\n try {\n return (\n typeof document !== \"undefined\" &&\n typeof document.createElement === \"function\" &&\n typeof document.body !== \"undefined\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if the current environment supports media queries\n */\nexport function supportsMediaQueries(): boolean {\n try {\n return (\n typeof window !== \"undefined\" && typeof window.matchMedia === \"function\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if WebGL is likely to be available and stable\n */\nexport function supportsWebGL(): boolean {\n try {\n if (!supportsDOMManipulation()) return false;\n\n const canvas = document.createElement(\"canvas\");\n const gl =\n canvas.getContext(\"webgl\") || canvas.getContext(\"experimental-webgl\");\n\n if (!gl) return false;\n\n // Quick stability check\n const webglContext = gl as WebGLRenderingContext;\n const renderer = webglContext.getParameter(webglContext.RENDERER);\n const isSupported = Boolean(renderer && typeof renderer === \"string\");\n\n // Cleanup context to avoid \"Too many active WebGL contexts\" warning\n const ext = webglContext.getExtension(\"WEBGL_lose_context\");\n if (ext) {\n ext.loseContext();\n }\n\n return isSupported;\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if audio context is available and not suspended\n */\nexport function supportsAudioContext(): boolean {\n try {\n const AudioContext =\n window.AudioContext || (window as any).webkitAudioContext;\n if (!AudioContext) return false;\n\n // Don't create context here, just check availability\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Comprehensive browser capability check\n */\nexport interface BrowserCapabilities {\n engine: string;\n supportsDOM: boolean;\n supportsMediaQueries: boolean;\n supportsWebGL: boolean;\n supportsAudio: boolean;\n isSecure: boolean;\n isPrivateMode: boolean;\n canRunDOMBlockers: boolean;\n canRunAccessibility: boolean;\n canRunBrowserAPIs: boolean;\n}\n\nexport function getBrowserCapabilities(): BrowserCapabilities {\n const supportsDOM = supportsDOMManipulation();\n const supportsMedia = supportsMediaQueries();\n\n return {\n engine: getBrowserEngine(),\n supportsDOM,\n supportsMediaQueries: supportsMedia,\n supportsWebGL: supportsWebGL(),\n supportsAudio: supportsAudioContext(),\n isSecure: isSecureContext(),\n isPrivateMode: isLikelyPrivateMode(),\n // DOM blockers work best on WebKit and Android\n canRunDOMBlockers: (isWebKit() || isAndroid()) && supportsDOM,\n // Accessibility requires media queries\n canRunAccessibility: supportsMedia,\n // Browser APIs need secure context for many features\n canRunBrowserAPIs: supportsDOM && typeof navigator !== \"undefined\",\n };\n}\n","/**\n * Browser and System Information Fingerprinting\n * Based on FingerprintJS browser component with enhanced detection\n */\n\nimport type { FingerprintComponent, BrowserFingerprint } from '../../types/fingerprint';\nimport { getBrowserInfo } from '../../utils/browser';\n\n/**\n * Get touch support information\n */\nfunction getTouchSupport(): { maxTouchPoints: number; touchEvent: boolean; touchStart: boolean } {\n try {\n let maxTouchPoints = 0;\n let touchEvent = false;\n let touchStart = false;\n \n // Check maxTouchPoints\n if ('maxTouchPoints' in navigator) {\n maxTouchPoints = navigator.maxTouchPoints;\n } else if ('msMaxTouchPoints' in navigator) {\n maxTouchPoints = (navigator as any).msMaxTouchPoints;\n }\n \n // Check touch events\n try {\n touchEvent = 'TouchEvent' in window;\n } catch {\n touchEvent = 'ontouchstart' in window;\n }\n \n // Check touch start\n touchStart = 'ontouchstart' in window;\n \n return { maxTouchPoints, touchEvent, touchStart };\n } catch {\n return { maxTouchPoints: 0, touchEvent: false, touchStart: false };\n }\n}\n\n/**\n * Get plugin information (mostly for legacy browser detection)\n */\nfunction getPluginInfo(): { length: number; names: string[] } {\n try {\n if (!navigator.plugins) {\n return { length: 0, names: [] };\n }\n \n const plugins = Array.from(navigator.plugins);\n const names = plugins\n .map(plugin => plugin.name)\n .filter(name => name)\n .sort();\n \n return {\n length: navigator.plugins.length,\n names: names.slice(0, 10) // Limit to first 10 to avoid huge fingerprints\n };\n } catch {\n return { length: 0, names: [] };\n }\n}\n\n/**\n * Get language and locale information\n */\nfunction getLanguageInfo(): { language: string; languages: string[] } {\n try {\n const language = navigator.language || '';\n let languages: string[] = [];\n \n if (navigator.languages) {\n languages = Array.from(navigator.languages);\n } else if (navigator.language) {\n languages = [navigator.language];\n }\n \n // Add fallback language properties\n const additionalLanguages = [\n (navigator as any).userLanguage,\n (navigator as any).browserLanguage,\n (navigator as any).systemLanguage\n ].filter(Boolean);\n \n languages = [...new Set([...languages, ...additionalLanguages])];\n \n return { language, languages };\n } catch {\n return { language: '', languages: [] };\n }\n}\n\n/**\n * Get timezone information\n */\nfunction getTimezoneInfo(): { timezone: string; timezoneOffset: number } {\n try {\n let timezone = '';\n \n // Modern API\n if (Intl && Intl.DateTimeFormat) {\n try {\n timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n } catch {\n // Fallback\n }\n }\n \n // Fallback: use timezone offset (STABLE - use standard time offset to avoid DST changes)\n if (!timezone) {\n // Use January date to get standard time offset (avoiding DST variations)\n const januaryDate = new Date(2024, 0, 1); // January 1st\n const offset = januaryDate.getTimezoneOffset();\n const sign = offset > 0 ? '-' : '+';\n const hours = Math.floor(Math.abs(offset) / 60);\n const minutes = Math.abs(offset) % 60;\n timezone = `UTC${sign}${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;\n }\n \n // Use January date for stable timezone offset (avoiding DST fluctuations)\n const timezoneOffset = new Date(2024, 0, 1).getTimezoneOffset();\n \n return { timezone, timezoneOffset };\n } catch {\n return { timezone: '', timezoneOffset: 0 };\n }\n}\n\n/**\n * Get hardware information\n */\nfunction getHardwareInfo(): { hardwareConcurrency: number; deviceMemory?: number } {\n try {\n const hardwareConcurrency = navigator.hardwareConcurrency || 0;\n \n // Device memory (Chrome-specific)\n let deviceMemory: number | undefined;\n if ('deviceMemory' in navigator) {\n deviceMemory = (navigator as any).deviceMemory;\n }\n \n const result: { hardwareConcurrency: number; deviceMemory?: number } = { hardwareConcurrency };\n if (deviceMemory !== undefined) {\n result.deviceMemory = deviceMemory;\n }\n return result;\n } catch {\n return { hardwareConcurrency: 0 };\n }\n}\n\n/**\n * Get platform information with enhanced detection\n */\nfunction getPlatformInfo(): { platform: string; userAgent: string } {\n try {\n const platform = navigator.platform || '';\n const userAgent = navigator.userAgent || '';\n \n return { platform, userAgent };\n } catch {\n return { platform: '', userAgent: '' };\n }\n}\n\n/**\n * Get precise browser information with Chromium-based browser detection\n */\nfunction getEnhancedBrowserInfo(): {\n name: string;\n engine: string;\n isChromiumBased: boolean;\n family: string;\n} {\n try {\n return getBrowserInfo();\n } catch {\n // Fallback if detection fails\n return {\n name: 'Unknown',\n engine: 'Unknown',\n isChromiumBased: false,\n family: 'unknown'\n };\n }\n}\n\n/**\n * Get browser capabilities\n */\nfunction getBrowserCapabilities(): { cookieEnabled: boolean; doNotTrack: string | null } {\n try {\n const cookieEnabled = navigator.cookieEnabled !== false;\n \n // Do Not Track\n let doNotTrack: string | null = null;\n if ('doNotTrack' in navigator) {\n doNotTrack = navigator.doNotTrack;\n } else if ('msDoNotTrack' in navigator) {\n doNotTrack = (navigator as any).msDoNotTrack;\n } else if ('mozDoNotTrack' in window) {\n doNotTrack = (window as any).mozDoNotTrack;\n }\n \n return { cookieEnabled, doNotTrack };\n } catch {\n return { cookieEnabled: true, doNotTrack: null };\n }\n}\n\n/**\n * Generate browser fingerprint\n */\nexport async function getBrowserFingerprint(): Promise<FingerprintComponent<BrowserFingerprint>> {\n const startTime = performance.now();\n \n try {\n // Collect all browser information\n const languageInfo = getLanguageInfo();\n const timezoneInfo = getTimezoneInfo();\n const platformInfo = getPlatformInfo();\n const hardwareInfo = getHardwareInfo();\n const capabilities = getBrowserCapabilities();\n const pluginInfo = getPluginInfo();\n const touchSupport = getTouchSupport();\n const enhancedBrowserInfo = getEnhancedBrowserInfo();\n \n const endTime = performance.now();\n \n const result: BrowserFingerprint = {\n // Language and locale\n language: languageInfo.language,\n languages: languageInfo.languages,\n \n // Timezone\n timezone: timezoneInfo.timezone,\n timezoneOffset: timezoneInfo.timezoneOffset,\n \n // Platform information\n platform: platformInfo.platform,\n userAgent: platformInfo.userAgent,\n \n // Enhanced browser identification (solves Chromium masquerading!)\n browserInfo: enhancedBrowserInfo,\n \n // Hardware information\n hardwareConcurrency: hardwareInfo.hardwareConcurrency,\n \n // Browser capabilities\n cookieEnabled: capabilities.cookieEnabled,\n doNotTrack: capabilities.doNotTrack,\n \n // Plugin information\n plugins: pluginInfo,\n \n // Touch support\n touchSupport\n };\n \n // Add optional properties conditionally\n if (hardwareInfo.deviceMemory !== undefined) {\n result.deviceMemory = hardwareInfo.deviceMemory;\n }\n \n return {\n value: result,\n duration: endTime - startTime\n };\n \n } catch (error) {\n return {\n value: {\n language: '',\n languages: [],\n timezone: '',\n timezoneOffset: 0,\n platform: '',\n userAgent: '',\n hardwareConcurrency: 0,\n cookieEnabled: true,\n doNotTrack: null,\n plugins: { length: 0, names: [] },\n touchSupport: { maxTouchPoints: 0, touchEvent: false, touchStart: false }\n },\n duration: performance.now() - startTime,\n error: error instanceof Error ? error.message : 'Browser fingerprinting failed'\n };\n }\n}\n\n/**\n * Check if browser fingerprinting is available\n */\nexport function isBrowserFingerprintingAvailable(): boolean {\n try {\n return typeof navigator === 'object' && navigator !== null;\n } catch {\n return false;\n }\n}","/**\n * Canvas Fingerprinting\n * Based on FingerprintJS canvas component with incognito detection\n */\n\nimport type {\n CanvasFingerprint,\n FingerprintComponent,\n} from \"../../types/fingerprint\";\nimport { hash32 } from \"./hashing\";\n\n/**\n * Text to render for canvas fingerprinting with maximum differentiation\n */\nconst CANVAS_TEXTS = [\n \"Zap Canvas 🎨🔒2024\",\n \"Żółć gęślą jaźń €$¢£¥\",\n \"αβγδεζηθικλμνξο\",\n \"中文测试字体渲染\",\n \"🌟🎯🚀💎🌊🎨\",\n];\n\n/**\n * Enhanced geometric shapes for canvas fingerprinting with sub-pixel precision\n */\nfunction drawAdvancedGeometry(ctx: CanvasRenderingContext2D): void {\n // Enable high-quality rendering for sub-pixel differences\n ctx.imageSmoothingEnabled = true;\n ctx.imageSmoothingQuality = \"high\";\n\n // Complex gradient with multiple stops\n const radialGradient = ctx.createRadialGradient(75, 75, 0, 75, 75, 50);\n radialGradient.addColorStop(0, \"rgba(255, 0, 0, 0.8)\");\n radialGradient.addColorStop(0.3, \"rgba(0, 255, 0, 0.6)\");\n radialGradient.addColorStop(0.7, \"rgba(0, 0, 255, 0.4)\");\n radialGradient.addColorStop(1, \"rgba(255, 255, 0, 0.2)\");\n\n ctx.fillStyle = radialGradient;\n ctx.fillRect(10, 10, 130, 100);\n\n // Sub-pixel positioned shapes for GPU/anti-aliasing differentiation\n ctx.fillStyle = \"rgba(102, 204, 0, 0.7)\";\n ctx.fillRect(15.5, 15.3, 49.7, 49.2);\n\n ctx.fillStyle = \"#f60\";\n ctx.fillRect(70.3, 10.7, 50.1, 50.9);\n\n // Complex bezier curves that stress different rendering engines\n ctx.beginPath();\n ctx.moveTo(25.2, 120.1);\n ctx.bezierCurveTo(25.2, 120.1, 75.8, 90.3, 125.5, 120.7);\n ctx.bezierCurveTo(125.5, 120.7, 90.1, 150.2, 60.8, 140.9);\n ctx.closePath();\n ctx.fillStyle = \"rgba(200, 100, 50, 0.6)\";\n ctx.fill();\n\n // Overlapping circles with complex blending\n ctx.globalCompositeOperation = \"multiply\";\n\n ctx.beginPath();\n ctx.arc(50.7, 80.3, 20.1, 0, Math.PI * 2);\n ctx.fillStyle = \"rgba(255, 0, 100, 0.5)\";\n ctx.fill();\n\n ctx.beginPath();\n ctx.arc(70.3, 80.7, 20.9, 0, Math.PI * 2);\n ctx.fillStyle = \"rgba(0, 255, 100, 0.5)\";\n ctx.fill();\n\n ctx.globalCompositeOperation = \"source-over\";\n\n // Thin lines to test anti-aliasing\n ctx.strokeStyle = \"rgba(50, 50, 50, 0.8)\";\n ctx.lineWidth = 0.5;\n ctx.setLineDash([2.3, 1.7]);\n\n for (let i = 0; i < 10; i++) {\n ctx.beginPath();\n ctx.moveTo(10 + i * 13.7, 160);\n ctx.lineTo(50 + i * 11.3, 200);\n ctx.stroke();\n }\n\n // Reset line dash\n ctx.setLineDash([]);\n\n // Pattern with complex repeating elements\n const patternCanvas = document.createElement(\"canvas\");\n patternCanvas.width = 20;\n patternCanvas.height = 20;\n const patternCtx = patternCanvas.getContext(\"2d\");\n\n if (patternCtx) {\n patternCtx.fillStyle = \"rgba(150, 75, 200, 0.3)\";\n patternCtx.fillRect(0, 0, 10, 10);\n patternCtx.fillRect(10, 10, 10, 10);\n\n const pattern = ctx.createPattern(patternCanvas, \"repeat\");\n if (pattern) {\n ctx.fillStyle = pattern;\n ctx.fillRect(150, 120, 80, 60);\n }\n }\n\n // Shadow effects for additional GPU differentiation\n ctx.shadowColor = \"rgba(0, 0, 0, 0.5)\";\n ctx.shadowBlur = 3.2;\n ctx.shadowOffsetX = 2.1;\n ctx.shadowOffsetY = 2.7;\n\n ctx.fillStyle = \"rgba(100, 200, 150, 0.8)\";\n ctx.fillRect(160, 30, 60, 40);\n\n // Reset shadow\n ctx.shadowColor = \"transparent\";\n ctx.shadowBlur = 0;\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n}\n\n/**\n * Draw multiple text samples with different fonts and effects for maximum differentiation\n */\nfunction drawAdvancedText(ctx: CanvasRenderingContext2D): void {\n const fonts = [\n \"14px Arial, sans-serif\",\n '13px \"Times New Roman\", serif',\n \"12px Georgia, serif\",\n \"15px Helvetica, Arial, sans-serif\",\n '11px \"Courier New\", monospace',\n \"13px Verdana, sans-serif\",\n \"16px Impact, fantasy\",\n '12px \"Comic Sans MS\", cursive',\n ];\n\n const colors = [\n \"#000\",\n \"#333\",\n \"#666\",\n \"#999\",\n \"rgba(255, 0, 0, 0.8)\",\n \"rgba(0, 255, 0, 0.7)\",\n \"rgba(0, 0, 255, 0.6)\",\n \"rgba(128, 64, 192, 0.9)\",\n ];\n\n // Test different text baselines and alignments\n const baselines: CanvasTextBaseline[] = [\n \"top\",\n \"hanging\",\n \"middle\",\n \"alphabetic\",\n \"bottom\",\n ];\n const alignments: CanvasTextAlign[] = [\"left\", \"center\", \"right\"];\n\n let y = 250;\n\n CANVAS_TEXTS.forEach((text, textIndex) => {\n fonts.forEach((font, fontIndex) => {\n const colorIndex = (textIndex + fontIndex) % colors.length;\n const baselineIndex = fontIndex % baselines.length;\n const alignIndex = fontIndex % alignments.length;\n\n ctx.font = font;\n ctx.fillStyle = colors[colorIndex] || colors[0] || \"#000\";\n ctx.textBaseline = baselines[baselineIndex] || \"top\";\n ctx.textAlign = alignments[alignIndex] || \"left\";\n\n // Sub-pixel positioning for enhanced differentiation\n const x = 10 + ((fontIndex * 0.7) % 200);\n const yPos = y + ((fontIndex * 18.3) % 100);\n\n ctx.fillText(text, x, yPos);\n\n // Add stroke text for additional GPU stress testing\n if (fontIndex % 2 === 0) {\n ctx.strokeStyle = `rgba(${100 + fontIndex * 20}, ${50 + fontIndex * 15}, ${150 + fontIndex * 10}, 0.5)`;\n ctx.lineWidth = 0.3;\n ctx.strokeText(text, x + 0.5, yPos + 0.5);\n }\n });\n y += 120;\n });\n\n // Test text with transformations that stress different rendering engines\n ctx.save();\n ctx.translate(100, 400);\n ctx.rotate(Math.PI / 6);\n ctx.scale(1.2, 0.8);\n ctx.font = \"italic 14px Arial\";\n ctx.fillStyle = \"rgba(200, 100, 50, 0.8)\";\n ctx.fillText(\"Transformed & Rotated Text\", 0, 0);\n ctx.restore();\n\n // Test very small and very large text\n ctx.font = \"6px Arial\";\n ctx.fillStyle = \"#000\";\n ctx.fillText(\"Tiny text rendering test\", 10, 500);\n\n ctx.font = \"32px Arial\";\n ctx.fillStyle = \"rgba(255, 0, 0, 0.5)\";\n ctx.fillText(\"Large\", 10, 540);\n\n // Reset text properties\n ctx.textAlign = \"left\";\n ctx.textBaseline = \"top\";\n}\n\n/**\n * Analyze sub-pixel differences for enhanced GPU/anti-aliasing detection\n */\nfunction analyzeSubPixels(\n ctx: CanvasRenderingContext2D,\n canvas: HTMLCanvasElement\n): string {\n try {\n // Create test pattern for sub-pixel analysis\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // Draw shapes at sub-pixel coordinates to stress anti-aliasing\n ctx.fillStyle = \"rgb(100, 150, 200)\";\n ctx.fillRect(10.3, 10.7, 20.1, 20.9);\n\n ctx.strokeStyle = \"rgb(200, 100, 50)\";\n ctx.lineWidth = 1.3;\n ctx.beginPath();\n ctx.moveTo(15.2, 35.8);\n ctx.lineTo(25.7, 45.1);\n ctx.stroke();\n\n // Get pixel data for analysis\n const imageData = ctx.getImageData(10, 10, 30, 40);\n const pixels = imageData.data;\n\n // Calculate sub-pixel characteristics with enhanced stability\n let redSum = 0,\n greenSum = 0,\n blueSum = 0;\n let edgeVariance = 0;\n let validPixels = 0;\n\n for (let i = 0; i < pixels.length; i += 4) {\n const r = pixels[i] || 0;\n const g = pixels[i + 1] || 0;\n const b = pixels[i + 2] || 0;\n const a = pixels[i + 3] || 0;\n\n // Only process non-transparent pixels for stability\n if (a > 25) { // Higher threshold than before\n redSum += r;\n greenSum += g;\n blueSum += b;\n validPixels++;\n\n // Calculate edge variance with larger step for stability\n if (i >= 16) { // Skip more pixels for stability\n const prevR = pixels[i - 16] || 0;\n const diff = Math.abs(r - prevR);\n // Only count significant differences to reduce noise\n if (diff >= 8) { // Higher threshold\n edgeVariance += diff;\n }\n }\n }\n }\n\n if (validPixels === 0) {\n return \"no-valid-pixels\";\n }\n\n // Round to nearest 10 for maximum stability\n const avgRed = Math.round((redSum / validPixels) / 10) * 10;\n const avgGreen = Math.round((greenSum / validPixels) / 10) * 10;\n const avgBlue = Math.round((blueSum / validPixels) / 10) * 10;\n const avgVariance = Math.round((edgeVariance / validPixels) / 10) * 10;\n\n return `${avgRed}-${avgGreen}-${avgBlue}-${avgVariance}`;\n } catch (error) {\n return \"subpixel-error\";\n }\n}\n\n/**\n * Detect potential incognito mode and canvas blocking through multiple methods\n */\nfunction detectAdvancedInconsistencies(\n textHash: string,\n geometryHash: string,\n subPixelData: string,\n ctx: CanvasRenderingContext2D\n): { isInconsistent: boolean; confidence: number; reasons: string[] } {\n const reasons: string[] = [];\n let suspiciousSignals = 0;\n\n try {\n // Test 1: Check if getImageData works consistently\n const imageData = ctx.getImageData(0, 0, 1, 1);\n if (!imageData || imageData.data.length === 0) {\n reasons.push(\"getImageData-blocked\");\n suspiciousSignals += 3;\n }\n\n // Test 2: Check hash lengths (blocked canvas often returns default values)\n if (textHash.length < 8 || geometryHash.length < 8) {\n reasons.push(\"short-hash\");\n suspiciousSignals += 2;\n }\n\n // Test 3: Check for known blocked patterns\n const knownBlockedHashes = [\n \"error\",\n \"blocked\",\n \"disabled\",\n \"00000000\",\n \"ffffffff\",\n \"12345678\",\n ];\n\n if (\n knownBlockedHashes.includes(textHash) ||\n knownBlockedHashes.includes(geometryHash)\n ) {\n reasons.push(\"known-blocked-hash\");\n suspiciousSignals += 3;\n }\n\n // Test 4: Sub-pixel analysis indicates blocking\n if (subPixelData === \"subpixel-error\" || subPixelData.includes(\"0-0-0\")) {\n reasons.push(\"subpixel-anomaly\");\n suspiciousSignals += 2;\n }\n\n // Test 5: Same hash for different operations (indicates fake canvas)\n if (textHash === geometryHash && textHash !== \"error\") {\n reasons.push(\"identical-hashes\");\n suspiciousSignals += 2;\n }\n\n // Test 6: toDataURL performance (some privacy tools slow it down)\n const canvas = document.createElement(\"canvas\");\n canvas.width = 10;\n canvas.height = 10;\n const testCtx = canvas.getContext(\"2d\");\n\n if (testCtx) {\n const start = performance.now();\n testCtx.fillStyle = \"red\";\n testCtx.fillRect(0, 0, 10, 10);\n canvas.toDataURL();\n const duration = performance.now() - start;\n\n // Suspiciously slow canvas operations\n if (duration > 50) {\n reasons.push(\"slow-canvas\");\n suspiciousSignals += 1;\n }\n }\n\n const confidence = Math.min(suspiciousSignals / 5, 1); // Normalize to 0-1\n const isInconsistent = suspiciousSignals >= 2; // Threshold for inconsistency\n\n return { isInconsistent, confidence, reasons };\n } catch (error) {\n return {\n isInconsistent: true,\n confidence: 1,\n reasons: [\"detection-error\"],\n };\n }\n}\n\n/**\n * Generate enhanced canvas fingerprint with multiple primitives and sub-pixel analysis\n */\nexport async function getCanvasFingerprint(): Promise<\n FingerprintComponent<CanvasFingerprint>\n> {\n const startTime = performance.now();\n\n try {\n // Create larger canvas for more detailed fingerprinting\n const canvas = document.createElement(\"canvas\");\n canvas.width = 300;\n canvas.height = 600;\n\n const ctx = canvas.getContext(\"2d\", {\n alpha: true,\n desynchronized: false,\n colorSpace: \"srgb\",\n willReadFrequently: true,\n });\n\n if (!ctx) {\n throw new Error(\"Canvas 2D context not available\");\n }\n\n // Test canvas winding (different behavior across browsers/GPUs)\n ctx.rect(0, 0, 10, 10);\n ctx.rect(2, 2, 6, 6);\n const isClockwise = ctx.isPointInPath(5, 5, \"evenodd\");\n\n // ENHANCED: Draw advanced text with multiple fonts and effects\n drawAdvancedText(ctx);\n const textData = canvas.toDataURL(\"image/png\");\n const textHash = hash32(textData);\n\n // Clear and draw advanced geometry\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n drawAdvancedGeometry(ctx);\n const geometryData = canvas.toDataURL(\"image/png\");\n const geometryHash = hash32(geometryData);\n\n // ENHANCED: Analyze sub-pixels for GPU/anti-aliasing differentiation\n const subPixelAnalysis = analyzeSubPixels(ctx, canvas);\n\n // ENHANCED: Advanced inconsistency detection\n const inconsistencyAnalysis = detectAdvancedInconsistencies(\n textHash,\n geometryHash,\n subPixelAnalysis,\n ctx\n );\n\n // Create composite canvas with both text and geometry for additional hash\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // Draw both text and geometry together\n drawAdvancedText(ctx);\n ctx.globalCompositeOperation = \"multiply\";\n drawAdvancedGeometry(ctx);\n ctx.globalCompositeOperation = \"source-over\";\n\n const compositeData = canvas.toDataURL(\"image/png\");\n const compositeHash = hash32(compositeData);\n\n const endTime = performance.now();\n\n const result: CanvasFingerprint = {\n text: textHash,\n geometry: geometryHash,\n winding: isClockwise,\n isInconsistent: inconsistencyAnalysis.isInconsistent,\n // NEW FIELDS\n subPixelAnalysis, // Sub-pixel characteristics for GPU differentiation\n compositeHash, // Combined text+geometry hash\n inconsistencyConfidence: inconsistencyAnalysis.confidence,\n blockingReasons: inconsistencyAnalysis.reasons,\n };\n\n return {\n value: result,\n duration: endTime - startTime,\n };\n } catch (error) {\n return {\n value: {\n text: \"error\",\n geometry: \"error\",\n winding: false,\n isInconsistent: true,\n subPixelAnalysis: \"error\",\n compositeHash: \"error\",\n inconsistencyConfidence: 1,\n blockingReasons: [\"canvas-error\"],\n },\n duration: performance.now() - startTime,\n error:\n error instanceof Error ? error.message : \"Canvas fingerprinting failed\",\n };\n }\n}\n\n/**\n * Check if canvas fingerprinting is available\n */\nexport function isCanvasAvailable(): boolean {\n try {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n return ctx !== null && typeof ctx.fillText === \"function\";\n } catch {\n return false;\n }\n}\n","/**\n * Font Detection Fingerprinting\n * Based on FingerprintJS font detection techniques\n */\n\nimport type { FingerprintComponent, FontFingerprint } from '../../types/fingerprint';\n\n/**\n * Font list for detection (commonly available system fonts)\n */\nconst FONT_LIST = [\n // Windows fonts\n 'Arial', 'Arial Black', 'Calibri', 'Cambria', 'Comic Sans MS', 'Consolas',\n 'Courier New', 'Georgia', 'Impact', 'Lucida Console', 'Lucida Sans Unicode',\n 'Microsoft Sans Serif', 'Palatino Linotype', 'Segoe UI', 'Tahoma', 'Times New Roman',\n 'Trebuchet MS', 'Verdana',\n \n // macOS fonts\n 'American Typewriter', 'Avenir', 'Baskerville', 'Big Caslon', 'Brush Script MT',\n 'Copperplate', 'Didot', 'Futura', 'Gill Sans', 'Helvetica', 'Helvetica Neue',\n 'Hoefler Text', 'Lucida Grande', 'Marker Felt', 'Optima', 'Papyrus',\n 'Phosphate', 'Rockwell', 'Savoye LET', 'SignPainter', 'Skia', 'Snell Roundhand',\n 'System Font', 'Zapfino',\n \n // Linux fonts\n 'DejaVu Sans', 'DejaVu Sans Mono', 'DejaVu Serif', 'Droid Sans', 'Droid Sans Mono',\n 'Droid Serif', 'Liberation Sans', 'Liberation Sans Narrow', 'Liberation Serif',\n 'Ubuntu', 'Ubuntu Mono',\n \n // Android fonts\n 'Roboto', 'Roboto Condensed', 'Roboto Mono', 'Roboto Slab', 'Droid Sans',\n 'Droid Sans Mono', 'Droid Serif',\n \n // iOS fonts\n 'Helvetica Neue', 'Arial', 'Helvetica', 'Courier New', 'Times New Roman',\n 'San Francisco', 'Avenir Next',\n \n // Common web fonts\n 'Open Sans', 'Lato', 'Montserrat', 'Source Sans Pro', 'Raleway', 'PT Sans',\n 'Lora', 'Playfair Display', 'Oswald', 'Slabo 27px', 'Fira Sans',\n \n // East Asian fonts\n 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Meiryo', 'MS Gothic', 'MS Mincho',\n 'SimSun', 'SimHei', 'Microsoft YaHei', 'Malgun Gothic', 'Apple SD Gothic Neo'\n];\n\n/**\n * Fallback fonts for measurement\n */\nconst FALLBACK_FONTS = ['monospace', 'sans-serif', 'serif'];\n\n/**\n * Test text for font measurement\n */\nconst TEST_TEXT = 'mmMwWLliI0O&1 ※';\n\n/**\n * Font measurement using canvas\n */\nfunction measureText(text: string, fontFamily: string): { width: number; height: number } {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n \n if (!ctx) {\n return { width: 0, height: 0 };\n }\n \n ctx.font = `12px ${fontFamily}`;\n const metrics = ctx.measureText(text);\n \n return {\n width: metrics.width,\n height: metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent\n };\n}\n\n/**\n * Font measurement using DOM (fallback method)\n */\nfunction measureTextDOM(text: string, fontFamily: string): { width: number; height: number } {\n const element = document.createElement('span');\n element.style.position = 'absolute';\n element.style.left = '-9999px';\n element.style.top = '-9999px';\n element.style.fontSize = '12px';\n element.style.fontFamily = fontFamily;\n element.style.whiteSpace = 'nowrap';\n element.textContent = text;\n \n document.body.appendChild(element);\n \n const rect = element.getBoundingClientRect();\n const result = {\n width: rect.width,\n height: rect.height\n };\n \n document.body.removeChild(element);\n \n return result;\n}\n\n/**\n * Detect if a font is available by comparing measurements\n */\nfunction isFontAvailable(fontName: string, method: 'canvas' | 'dom' = 'canvas'): boolean {\n const measureFunc = method === 'canvas' ? measureText : measureTextDOM;\n \n // Measure with fallback fonts first\n const fallbackMeasurements = FALLBACK_FONTS.map(fallback => \n measureFunc(TEST_TEXT, fallback)\n );\n \n // Measure with target font + fallback\n const targetMeasurements = FALLBACK_FONTS.map(fallback => \n measureFunc(TEST_TEXT, `${fontName}, ${fallback}`)\n );\n \n // Compare measurements - if font is available, measurements should differ\n for (let i = 0; i < fallbackMeasurements.length; i++) {\n const fallback = fallbackMeasurements[i];\n const target = targetMeasurements[i];\n \n if (fallback && target) {\n // Allow small tolerance for measurement differences\n const widthDiff = Math.abs(fallback.width - target.width);\n const heightDiff = Math.abs(fallback.height - target.height);\n \n if (widthDiff > 0.1 || heightDiff > 0.1) {\n return true; // Font likely available\n }\n }\n }\n \n return false;\n}\n\n/**\n * Advanced font detection with measurements\n */\nfunction detectFontsWithMeasurements(): { available: string[]; measurements: Record<string, { width: number; height: number }> } {\n const available: string[] = [];\n const measurements: Record<string, { width: number; height: number }> = {};\n \n for (const font of FONT_LIST) {\n try {\n const measurement = measureText(TEST_TEXT, font);\n measurements[font] = measurement;\n \n if (isFontAvailable(font, 'canvas')) {\n available.push(font);\n }\n } catch (error) {\n // Skip fonts that cause errors\n continue;\n }\n }\n \n return { available, measurements };\n}\n\n/**\n * Basic font detection (faster but less detailed)\n */\nfunction detectFontsBasic(): string[] {\n const available: string[] = [];\n \n for (const font of FONT_LIST) {\n try {\n if (isFontAvailable(font, 'dom')) {\n available.push(font);\n }\n } catch (error) {\n // Skip fonts that cause errors\n continue;\n }\n }\n \n return available;\n}\n\n/**\n * Generate font fingerprint\n */\nexport async function getFontFingerprint(useAdvanced: boolean = true): Promise<FingerprintComponent<FontFingerprint>> {\n const startTime = performance.now();\n \n try {\n let result: FontFingerprint;\n \n if (useAdvanced && isCanvasAvailable()) {\n // Advanced detection with measurements\n const { available, measurements } = detectFontsWithMeasurements();\n result = {\n available: available.sort(),\n method: 'advanced',\n measurements\n };\n } else {\n // Basic detection\n const available = detectFontsBasic();\n result = {\n available: available.sort(),\n method: 'basic'\n };\n }\n \n const endTime = performance.now();\n \n return {\n value: result,\n duration: endTime - startTime\n };\n \n } catch (error) {\n return {\n value: {\n available: [],\n method: 'basic'\n },\n duration: performance.now() - startTime,\n error: error instanceof Error ? error.message : 'Font detection failed'\n };\n }\n}\n\n/**\n * Check if canvas is available for font measurement\n */\nfunction isCanvasAvailable(): boolean {\n try {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n return ctx !== null && typeof ctx.measureText === 'function';\n } catch {\n return false;\n }\n}\n\n/**\n * Check if font detection is available\n */\nexport function isFontDetectionAvailable(): boolean {\n try {\n // Check if we can create DOM elements for measurement\n const element = document.createElement('span');\n return element && typeof element.style === 'object';\n } catch {\n return false;\n }\n}","/**\n * Screen and Viewport Fingerprinting\n * Based on FingerprintJS screen components\n */\n\nimport type {\n FingerprintComponent,\n ScreenFingerprint,\n} from \"../../types/fingerprint\";\n\n/**\n * Get screen orientation information\n */\nfunction getScreenOrientation(): { angle: number; type: string } | undefined {\n try {\n // Modern API\n if (screen.orientation) {\n return {\n angle: screen.orientation.angle,\n type: screen.orientation.type,\n };\n }\n\n // Legacy API\n const orientation =\n (screen as any).mozOrientation ||\n (screen as any).msOrientation ||\n (screen as any).webkitOrientation;\n\n if (orientation !== undefined) {\n return {\n angle: orientation,\n type: \"unknown\",\n };\n }\n\n // Fallback: estimate from dimensions\n const isLandscape = screen.width > screen.height;\n return {\n angle: isLandscape ? 90 : 0,\n type: isLandscape ? \"landscape-primary\" : \"portrait-primary\",\n };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Get device pixel ratio with fallbacks\n */\nfunction getPixelRatio(): number {\n try {\n return window.devicePixelRatio || 1;\n } catch {\n return 1;\n }\n}\n\n/**\n * Round dimensions to mitigate small variations (like macOS Dock appearing/disappearing)\n * Based on FingerprintJS stabilization technique\n */\nfunction roundDimension(value: number): number {\n // Round to nearest 10 to mitigate small variations\n // This handles cases like 1900x1440 -> 1900x1439 when Dock appears\n return Math.round(value / 10) * 10;\n}\n\n/**\n * Get screen frame with stabilization (rounded dimensions)\n * This is more stable than raw screen.availWidth/availHeight\n */\nfunction getScreenFrame(): { width: number; height: number } {\n try {\n // Check Safari 17+ privacy mode (always returns 0)\n const availWidth = screen.availWidth || 0;\n const availHeight = screen.availHeight || 0;\n\n if (availWidth === 0 && availHeight === 0) {\n // Safari private mode or unavailable, use screen dimensions\n return {\n width: roundDimension(screen.width || 0),\n height: roundDimension(screen.height || 0),\n };\n }\n\n return {\n width: roundDimension(availWidth),\n height: roundDimension(availHeight),\n };\n } catch {\n return {\n width: roundDimension(screen.width || 0),\n height: roundDimension(screen.height || 0),\n };\n }\n}\n\n/**\n * Get screen resolution (stable - doesn't change)\n * Screen resolution is consistent across sessions and orientations\n */\nfunction getScreenResolution(): { width: number; height: number } {\n try {\n return {\n width: screen.width || 0,\n height: screen.height || 0,\n };\n } catch {\n return { width: 0, height: 0 };\n }\n}\n\n/**\n * Get viewport dimensions with stabilization\n * Uses rounding to mitigate small variations from console, zoom, etc.\n */\nfunction getViewportDimensions(): { width: number; height: number } {\n try {\n // Use document.documentElement for more accurate measurements\n const element = document.documentElement;\n\n const width = Math.max(element.clientWidth || 0, window.innerWidth || 0);\n\n const height = Math.max(element.clientHeight || 0, window.innerHeight || 0);\n\n // Apply rounding to stabilize viewport (mitigates console/zoom changes)\n return {\n width: roundDimension(width),\n height: roundDimension(height),\n };\n } catch {\n const width = window.innerWidth || 0;\n const height = window.innerHeight || 0;\n\n return {\n width: roundDimension(width),\n height: roundDimension(height),\n };\n }\n}\n\n/**\n * Generate screen fingerprint with stabilization techniques\n * Based on FingerprintJS approach: uses rounding and consistent ordering\n */\nexport async function getScreenFingerprint(): Promise<\n FingerprintComponent<ScreenFingerprint>\n> {\n const startTime = performance.now();\n\n try {\n // Get screen resolution with consistent ordering (stable)\n const resolution = getScreenResolution();\n\n // Get color depth\n const colorDepth = screen.colorDepth || screen.pixelDepth || 0;\n\n // Get pixel ratio\n const pixelRatio = getPixelRatio();\n\n // Get screen frame (available space) with stabilization\n const screenFrame = getScreenFrame();\n\n // Get viewport dimensions with stabilization (rounded)\n const viewport = getViewportDimensions();\n\n // Get orientation\n const orientation = getScreenOrientation();\n\n const endTime = performance.now();\n\n const result: ScreenFingerprint = {\n // Screen resolution (stable - doesn't change)\n width: resolution.width,\n height: resolution.height,\n colorDepth,\n pixelRatio,\n\n // Screen frame (available space, stabilized with rounding)\n // Mitigates small variations like macOS Dock appearing/disappearing\n availableWidth: screenFrame.width,\n availableHeight: screenFrame.height,\n\n // Viewport dimensions (stabilized with rounding)\n // Mitigates variations from console open/closed, zoom changes, etc.\n viewportWidth: viewport.width,\n viewportHeight: viewport.height,\n };\n\n // Add optional properties conditionally\n if (orientation) {\n result.orientation = orientation;\n }\n\n return {\n value: result,\n duration: endTime - startTime,\n };\n } catch (error) {\n return {\n value: {\n width: 0,\n height: 0,\n colorDepth: 0,\n pixelRatio: 1,\n viewportWidth: 0,\n viewportHeight: 0,\n availableWidth: 0,\n availableHeight: 0,\n },\n duration: performance.now() - startTime,\n error:\n error instanceof Error ? error.message : \"Screen fingerprinting failed\",\n };\n }\n}\n\n/**\n * Check if screen fingerprinting is available\n */\nexport function isScreenAvailable(): boolean {\n try {\n return (\n typeof screen === \"object\" &&\n typeof screen.width === \"number\" &&\n typeof screen.height === \"number\"\n );\n } catch {\n return false;\n }\n}\n","/**\n * WebGL Context Caching Utility\n * Based on FingerprintJS WebGL optimization patterns\n * Prevents expensive WebGL context recreation\n */\n\ninterface WebGLContextCache {\n context: WebGLRenderingContext | null;\n canvas: HTMLCanvasElement | null;\n timestamp: number;\n isValid: boolean;\n usageCount: number;\n lastUsed: number;\n}\n\n// Global cache for WebGL context\nlet webglCache: WebGLContextCache | null = null;\n\n// Monitoring counters\nlet activeContextCount = 0;\nlet totalContextsCreated = 0;\n\n// Cache timeout (30 minutes) - increased from 5 minutes\nconst CACHE_TIMEOUT = 30 * 60 * 1000;\n\n// Maximum number of contexts to prevent memory leaks\nconst MAX_CONTEXTS = 8;\n\n/**\n * Gets or creates a cached WebGL context with intelligent reuse\n */\nexport function getCachedWebGLContext(): WebGLRenderingContext | null {\n try {\n // Use performance.now() for more stable timing measurements\n const now = performance.now();\n\n // Check if cache is valid and not expired\n if (webglCache && webglCache.isValid) {\n if (now - webglCache.timestamp < CACHE_TIMEOUT) {\n // Verify context is still valid\n if (webglCache.context && !webglCache.context.isContextLost()) {\n // Update usage statistics\n webglCache.usageCount++;\n webglCache.lastUsed = now;\n return webglCache.context;\n } else {\n // Context was lost, invalidate cache\n invalidateWebGLCache();\n }\n } else {\n // Cache expired, clean up old context\n invalidateWebGLCache();\n }\n }\n\n // Check if we're approaching the maximum context limit\n if (activeContextCount >= MAX_CONTEXTS) {\n console.warn('[WebGL Cache] Maximum context limit reached, reusing existing contexts');\n return null;\n }\n\n // Create new context\n const canvas = createWebGLCanvas();\n if (!canvas) {\n return null;\n }\n\n const context = getWebGLContext(canvas);\n if (!context) {\n return null;\n }\n\n // Update counters\n activeContextCount++;\n totalContextsCreated++;\n\n // Cache the context\n webglCache = {\n context,\n canvas,\n timestamp: now,\n isValid: true,\n usageCount: 1,\n lastUsed: now,\n };\n\n return context;\n } catch (error) {\n // Invalidate cache on error\n invalidateWebGLCache();\n return null;\n }\n}\n\n/**\n * Creates a WebGL canvas element\n */\nfunction createWebGLCanvas(): HTMLCanvasElement | null {\n try {\n if (typeof document === 'undefined') {\n return null;\n }\n\n const canvas = document.createElement('canvas');\n \n // Set minimal size to reduce memory usage\n canvas.width = 1;\n canvas.height = 1;\n \n return canvas;\n } catch {\n return null;\n }\n}\n\n/**\n * Gets WebGL context from canvas with optimized settings for fingerprinting\n */\nfunction getWebGLContext(canvas: HTMLCanvasElement): WebGLRenderingContext | null {\n try {\n // Optimized context attributes for fingerprinting (minimal overhead)\n const contextAttributes: WebGLContextAttributes = {\n alpha: false,\n antialias: false,\n depth: false,\n stencil: false,\n preserveDrawingBuffer: false,\n failIfMajorPerformanceCaveat: true,\n powerPreference: 'default'\n };\n\n // Try standard WebGL first, then experimental\n const context = canvas.getContext('webgl', contextAttributes) || \n canvas.getContext('experimental-webgl', contextAttributes);\n \n return context as WebGLRenderingContext | null;\n } catch {\n return null;\n }\n}\n\n/**\n * Invalidates the WebGL cache with proper cleanup and monitoring\n */\nexport function invalidateWebGLCache(): void {\n if (webglCache) {\n try {\n // Properly dispose of WebGL context\n if (webglCache.context) {\n const ext = webglCache.context.getExtension('WEBGL_lose_context');\n if (ext) {\n ext.loseContext();\n }\n }\n \n // Clean up canvas\n if (webglCache.canvas) {\n webglCache.canvas.width = 0;\n webglCache.canvas.height = 0;\n }\n \n // Update monitoring counters\n if (activeContextCount > 0) {\n activeContextCount--;\n }\n } catch {\n // Ignore disposal errors but still decrement counter\n if (activeContextCount > 0) {\n activeContextCount--;\n }\n }\n\n webglCache.isValid = false;\n webglCache = null;\n }\n}\n\n/**\n * Checks if WebGL context is still valid\n */\nexport function isWebGLContextValid(): boolean {\n if (!webglCache || !webglCache.context) {\n return false;\n }\n\n try {\n // Check if context is lost\n return !webglCache.context.isContextLost();\n } catch {\n return false;\n }\n}\n\n/**\n * Gets WebGL extensions with caching\n */\nexport function getCachedWebGLExtensions(): string[] {\n const context = getCachedWebGLContext();\n if (!context) {\n return [];\n }\n\n try {\n const extensions = context.getSupportedExtensions();\n return extensions ? Array.from(extensions).sort() : [];\n } catch {\n return [];\n }\n}\n\n/**\n * Gets WebGL parameters with caching\n */\nexport function getCachedWebGLParameters(): Record<string, any> {\n const context = getCachedWebGLContext();\n if (!context) {\n return {};\n }\n\n try {\n const parameters: Record<string, any> = {};\n \n // Safe parameter list that won't trigger console warnings\n const safeParameters = [\n 'VERSION',\n 'VENDOR',\n 'RENDERER',\n 'SHADING_LANGUAGE_VERSION',\n 'MAX_TEXTURE_SIZE',\n 'MAX_RENDERBUFFER_SIZE',\n 'MAX_VIEWPORT_DIMS',\n 'MAX_VERTEX_ATTRIBS',\n 'MAX_VERTEX_UNIFORM_VECTORS',\n 'MAX_FRAGMENT_UNIFORM_VECTORS',\n 'MAX_VARYING_VECTORS',\n ];\n\n for (const paramName of safeParameters) {\n try {\n const paramValue = (context as any)[paramName];\n if (paramValue !== undefined) {\n parameters[paramName] = context.getParameter(paramValue);\n }\n } catch {\n // Skip problematic parameters\n }\n }\n\n return parameters;\n } catch {\n return {};\n }\n}\n\n/**\n * Get WebGL cache monitoring statistics\n */\nexport function getWebGLCacheStats(): {\n activeContexts: number;\n totalCreated: number;\n cacheHits: number;\n lastUsed: number | null;\n} {\n return {\n activeContexts: activeContextCount,\n totalCreated: totalContextsCreated,\n cacheHits: webglCache?.usageCount || 0,\n lastUsed: webglCache?.lastUsed || null,\n };\n}\n\n/**\n * Force cleanup all WebGL resources\n */\nexport function forceCleanupWebGL(): void {\n invalidateWebGLCache();\n activeContextCount = 0; // Reset counter\n}\n\n/**\n * Cleanup function to be called on page unload with better error handling\n */\nexport function cleanupWebGLCache(): void {\n try {\n invalidateWebGLCache();\n \n // Reset monitoring counters\n activeContextCount = 0;\n totalContextsCreated = 0;\n } catch (error) {\n console.warn('[WebGL Cache] Cleanup error:', error);\n }\n}\n\n// Enhanced auto-cleanup on page unload with better browser support\nif (typeof window !== 'undefined') {\n // Standard page unload events\n window.addEventListener('beforeunload', cleanupWebGLCache);\n window.addEventListener('pagehide', cleanupWebGLCache);\n window.addEventListener('unload', cleanupWebGLCache);\n \n // Visibility API for better cleanup on tab switch\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden') {\n // Optional: Clean up on tab switch (uncomment if needed)\n // cleanupWebGLCache();\n }\n });\n \n // Memory pressure cleanup (if supported)\n if ('memory' in performance && typeof (performance as any).memory.addEventListener === 'function') {\n try {\n (performance as any).memory.addEventListener('memorypressure', cleanupWebGLCache);\n } catch (e) {\n // Not all browsers support this\n }\n }\n}","/**\n * WebGL Fingerprinting\n * Based on FingerprintJS WebGL component for GPU and driver detection\n * Enhanced with context caching for performance\n */\n\nimport type { FingerprintComponent, WebGLFingerprint } from '../../types/fingerprint';\nimport { \n getCachedWebGLContext, \n getCachedWebGLExtensions, \n getCachedWebGLParameters,\n isWebGLContextValid \n} from '../../utils/webgl-cache';\n\n/**\n * WebGL parameter constants for fingerprinting\n */\nconst WEBGL_PARAMS = {\n VENDOR: 0x1f00,\n RENDERER: 0x1f01,\n VERSION: 0x1f02,\n SHADING_LANGUAGE_VERSION: 0x8b8c,\n MAX_VERTEX_ATTRIBS: 0x8869,\n MAX_TEXTURE_SIZE: 0x0d33,\n MAX_RENDERBUFFER_SIZE: 0x84e8,\n MAX_VIEWPORT_DIMS: 0x0d3a,\n ALIASED_LINE_WIDTH_RANGE: 0x846e,\n ALIASED_POINT_SIZE_RANGE: 0x846d,\n MAX_FRAGMENT_UNIFORM_VECTORS: 0x8dfd,\n MAX_VERTEX_UNIFORM_VECTORS: 0x8dfb,\n MAX_VARYING_VECTORS: 0x8dfc,\n MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8b4c,\n MAX_TEXTURE_IMAGE_UNITS: 0x8872,\n MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8b4d,\n} as const;\n\n\n/**\n * Get WebGL extensions (cached)\n */\nfunction getWebGLExtensions(): string[] {\n try {\n return getCachedWebGLExtensions();\n } catch {\n return [];\n }\n}\n\n/**\n * Get WebGL parameters (cached)\n */\nfunction getWebGLParameters(): Record<string, any> {\n try {\n return getCachedWebGLParameters();\n } catch {\n return {};\n }\n}\n\n/**\n * Get WebGL parameter value safely\n */\nfunction getWebGLParameter(gl: WebGLRenderingContext, param: number): any {\n try {\n return gl.getParameter(param);\n } catch {\n return null;\n }\n}\n\n/**\n * Get shader precision information\n */\nfunction getShaderPrecision(gl: WebGLRenderingContext): { vertex: string; fragment: string } {\n const vertex: string[] = [];\n const fragment: string[] = [];\n \n try {\n const precisionTypes = [gl.LOW_FLOAT, gl.MEDIUM_FLOAT, gl.HIGH_FLOAT, gl.LOW_INT, gl.MEDIUM_INT, gl.HIGH_INT];\n const precisionNames = ['LOW_FLOAT', 'MEDIUM_FLOAT', 'HIGH_FLOAT', 'LOW_INT', 'MEDIUM_INT', 'HIGH_INT'];\n \n for (let i = 0; i < precisionTypes.length; i++) {\n const precisionType = precisionTypes[i];\n if (precisionType === undefined) continue;\n \n const vertexPrecision = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, precisionType);\n const fragmentPrecision = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, precisionType);\n \n if (vertexPrecision) {\n vertex.push(`${precisionNames[i]}:${vertexPrecision.precision},${vertexPrecision.rangeMin},${vertexPrecision.rangeMax}`);\n }\n \n if (fragmentPrecision) {\n fragment.push(`${precisionNames[i]}:${fragmentPrecision.precision},${fragmentPrecision.rangeMin},${fragmentPrecision.rangeMax}`);\n }\n }\n } catch {\n // Precision format not available\n }\n \n return {\n vertex: vertex.join(';'),\n fragment: fragment.join(';')\n };\n}\n\n/**\n * Collect WebGL parameters for fingerprinting\n */\nfunction collectWebGLParameters(gl: WebGLRenderingContext): Record<string, any> {\n const parameters: Record<string, any> = {};\n \n // Collect standard parameters\n Object.entries(WEBGL_PARAMS).forEach(([name, param]) => {\n const value = getWebGLParameter(gl, param);\n if (value !== null) {\n // Convert arrays to strings for consistent serialization\n parameters[name] = Array.isArray(value) ? value.join(',') : value;\n }\n });\n \n // Additional parameters that might be available\n const additionalParams = [\n 'UNMASKED_VENDOR_WEBGL',\n 'UNMASKED_RENDERER_WEBGL'\n ];\n \n additionalParams.forEach(paramName => {\n try {\n const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');\n if (debugInfo) {\n const param = (debugInfo as any)[paramName];\n if (param !== undefined) {\n const value = gl.getParameter(param);\n if (value) {\n parameters[paramName] = value;\n }\n }\n }\n } catch {\n // Debug renderer info not available\n }\n });\n \n return parameters;\n}\n\n/**\n * Create and compile a shader\n */\nfunction createShader(gl: WebGLRenderingContext, type: number, source: string): WebGLShader | null {\n const shader = gl.createShader(type);\n if (!shader) return null;\n \n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n \n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n gl.deleteShader(shader);\n return null;\n }\n \n return shader;\n}\n\n/**\n * Create and link a shader program\n */\nfunction createProgram(gl: WebGLRenderingContext, vertexShader: WebGLShader, fragmentShader: WebGLShader): WebGLProgram | null {\n const program = gl.createProgram();\n if (!program) return null;\n \n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n \n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n gl.deleteProgram(program);\n return null;\n }\n \n return program;\n}\n\n/**\n * Render 3D scene to generate GPU-specific hash\n * Based on FingerprintJS methodology for maximum differentiation\n */\nfunction render3DScene(gl: WebGLRenderingContext): string {\n try {\n // Vertex shader with complex calculations for GPU differentiation\n const vertexShaderSource = `\n attribute vec2 a_position;\n attribute vec3 a_color;\n varying vec3 v_color;\n uniform float u_time;\n \n void main() {\n // Complex mathematical operations to differentiate GPUs\n float wave = sin(a_position.x * 10.0 + u_time) * 0.1;\n vec2 position = a_position + vec2(wave, cos(a_position.y * 8.0) * 0.1);\n \n // GPU-specific floating point calculations\n float precision = sin(position.x * 123.456) + cos(position.y * 789.012);\n position += vec2(precision * 0.001);\n \n gl_Position = vec4(position, 0.0, 1.0);\n v_color = a_color;\n }\n `;\n \n // Fragment shader with GPU-specific precision differences\n const fragmentShaderSource = `\n precision mediump float;\n varying vec3 v_color;\n uniform float u_time;\n \n void main() {\n // Complex color calculations that vary between GPU vendors\n vec3 color = v_color;\n color.r += sin(gl_FragCoord.x * 0.1 + u_time) * 0.1;\n color.g += cos(gl_FragCoord.y * 0.1 + u_time) * 0.1;\n color.b += sin((gl_FragCoord.x + gl_FragCoord.y) * 0.05) * 0.1;\n \n // GPU-specific precision in color calculations\n color = normalize(color) * length(v_color);\n \n gl_FragColor = vec4(color, 1.0);\n }\n `;\n \n // Create shaders\n const vertexShader = createShader(gl, gl.VERTEX_SHADER, vertexShaderSource);\n const fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fragmentShaderSource);\n \n if (!vertexShader || !fragmentShader) {\n // Fallback to basic parameters hash if shader compilation fails\n return generateFallbackWebGLHash(gl);\n }\n \n // Create program\n const program = createProgram(gl, vertexShader, fragmentShader);\n if (!program) {\n // Fallback to basic parameters hash if program creation fails\n return generateFallbackWebGLHash(gl);\n }\n \n gl.useProgram(program);\n \n // Create complex geometry that differentiates GPU rendering\n const vertices = new Float32Array([\n // Triangle 1 (with colors)\n -0.8, -0.6, 1.0, 0.2, 0.3,\n 0.0, 0.8, 0.3, 1.0, 0.2,\n 0.8, -0.6, 0.2, 0.3, 1.0,\n // Triangle 2 (overlapping for blend complexity)\n -0.5, -0.2, 0.8, 0.9, 0.1,\n 0.3, 0.6, 0.1, 0.8, 0.9,\n 0.7, -0.3, 0.9, 0.1, 0.8,\n ]);\n \n const buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);\n \n // Set up attributes\n const positionLocation = gl.getAttribLocation(program, 'a_position');\n const colorLocation = gl.getAttribLocation(program, 'a_color');\n const timeLocation = gl.getUniformLocation(program, 'u_time');\n \n gl.enableVertexAttribArray(positionLocation);\n gl.enableVertexAttribArray(colorLocation);\n \n gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 20, 0);\n gl.vertexAttribPointer(colorLocation, 3, gl.FLOAT, false, 20, 8);\n \n // Set time uniform to create animation-like effects\n gl.uniform1f(timeLocation, 1.23456789);\n \n // Enable blending for more complex GPU calculations\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n \n // Clear with specific color to affect background\n gl.clearColor(0.1, 0.2, 0.3, 1.0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n \n // Draw triangles\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n \n // Read pixels to generate hash\n const pixels = new Uint8Array(gl.canvas.width * gl.canvas.height * 4);\n gl.readPixels(0, 0, gl.canvas.width, gl.canvas.height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n \n // Generate hash from rendered pixels\n let hash = 0;\n for (let i = 0; i < pixels.length; i += 4) {\n // Combine RGBA values with different weights (with null checks)\n const r = (pixels[i] ?? 0) * 1;\n const g = (pixels[i + 1] ?? 0) * 256;\n const b = (pixels[i + 2] ?? 0) * 65536;\n const a = (pixels[i + 3] ?? 0) * 16777216;\n const pixelValue = r + g + b + a;\n hash = (hash * 33 + pixelValue) >>> 0; // Use unsigned 32-bit arithmetic\n }\n \n // Cleanup\n gl.deleteProgram(program);\n gl.deleteShader(vertexShader);\n gl.deleteShader(fragmentShader);\n gl.deleteBuffer(buffer);\n \n return hash.toString(16);\n \n } catch (error) {\n // Fallback to basic parameters hash if rendering fails\n return generateFallbackWebGLHash(gl);\n }\n}\n\n/**\n * Generate fallback WebGL hash when rendering fails\n * Uses basic WebGL parameters to ensure consistent fingerprinting\n */\nfunction generateFallbackWebGLHash(gl: WebGLRenderingContext): string {\n try {\n // Collect basic but stable WebGL parameters\n const vendor = gl.getParameter(gl.VENDOR) || 'unknown';\n const renderer = gl.getParameter(gl.RENDERER) || 'unknown';\n const version = gl.getParameter(gl.VERSION) || 'unknown';\n const maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE) || 0;\n const maxVertexAttribs = gl.getParameter(gl.MAX_VERTEX_ATTRIBS) || 0;\n const maxViewportDims = gl.getParameter(gl.MAX_VIEWPORT_DIMS) || [0, 0];\n \n // Combine parameters into string\n const combined = `${vendor}|${renderer}|${version}|${maxTextureSize}|${maxVertexAttribs}|${maxViewportDims}`;\n \n // Generate simple hash\n let hash = 0;\n for (let i = 0; i < combined.length; i++) {\n const char = combined.charCodeAt(i);\n hash = ((hash << 5) - hash + char) & 0xffffffff;\n }\n \n return `fallback_${Math.abs(hash).toString(16)}`;\n } catch {\n return 'webgl_unavailable';\n }\n}\n\n/**\n * Get advanced WebGL capabilities for differentiation\n */\nfunction getAdvancedWebGLCapabilities(gl: WebGLRenderingContext): Record<string, any> {\n const capabilities: Record<string, any> = {};\n \n try {\n // GPU Memory information (if available)\n const memoryInfo = gl.getExtension('WEBGL_debug_renderer_info');\n if (memoryInfo) {\n capabilities.unmaskedVendor = gl.getParameter(memoryInfo.UNMASKED_VENDOR_WEBGL);\n capabilities.unmaskedRenderer = gl.getParameter(memoryInfo.UNMASKED_RENDERER_WEBGL);\n }\n \n // Texture capabilities\n capabilities.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n capabilities.maxCombinedTextureImageUnits = gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS);\n \n // Viewport and rendering capabilities\n capabilities.maxViewportDims = gl.getParameter(gl.MAX_VIEWPORT_DIMS);\n capabilities.maxRenderbufferSize = gl.getParameter(gl.MAX_RENDERBUFFER_SIZE);\n \n // Vertex and fragment shader limits\n capabilities.maxVertexAttribs = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\n capabilities.maxVertexUniformVectors = gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);\n capabilities.maxFragmentUniformVectors = gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS);\n capabilities.maxVaryingVectors = gl.getParameter(gl.MAX_VARYING_VECTORS);\n \n // Antialiasing support\n capabilities.antialias = gl.getContextAttributes()?.antialias || false;\n \n // Floating point texture support\n const floatTextureExt = gl.getExtension('OES_texture_float');\n capabilities.floatTextures = !!floatTextureExt;\n \n // Half float texture support\n const halfFloatTextureExt = gl.getExtension('OES_texture_half_float');\n capabilities.halfFloatTextures = !!halfFloatTextureExt;\n \n // Compressed texture formats\n const compressedFormats = gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS);\n capabilities.compressedTextureFormats = Array.isArray(compressedFormats) ? compressedFormats.length : 0;\n \n // WebGL 2.0 specific features (if available)\n const isWebGL2 = gl instanceof WebGL2RenderingContext;\n capabilities.webgl2 = isWebGL2;\n \n if (isWebGL2) {\n const gl2 = gl as WebGL2RenderingContext;\n capabilities.maxColorAttachments = gl2.getParameter(gl2.MAX_COLOR_ATTACHMENTS);\n capabilities.maxDrawBuffers = gl2.getParameter(gl2.MAX_DRAW_BUFFERS);\n capabilities.maxTexture3DSize = gl2.getParameter(gl2.MAX_3D_TEXTURE_SIZE);\n }\n \n // Line width range\n const lineWidthRange = gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE);\n capabilities.lineWidthRange = Array.isArray(lineWidthRange) ? lineWidthRange.join(',') : '';\n \n // Point size range\n const pointSizeRange = gl.getParameter(gl.ALIASED_POINT_SIZE_RANGE);\n capabilities.pointSizeRange = Array.isArray(pointSizeRange) ? pointSizeRange.join(',') : '';\n \n } catch (error) {\n // Capabilities detection failed\n }\n \n return capabilities;\n}\n\n/**\n * Generate WebGL fingerprint (enhanced with 3D rendering and advanced capabilities)\n */\nexport async function getWebGLFingerprint(): Promise<FingerprintComponent<WebGLFingerprint>> {\n const startTime = performance.now();\n \n try {\n // Check if WebGL is available for this browser\n if (!isWebGLAvailable()) {\n throw new Error('WebGL not supported in this browser');\n }\n\n const gl = getCachedWebGLContext();\n if (!gl) {\n throw new Error('WebGL context not available');\n }\n\n // Verify context is still valid\n if (!isWebGLContextValid()) {\n throw new Error('WebGL context lost');\n }\n \n // Get basic WebGL information using cached parameters\n const cachedParams = getWebGLParameters();\n const vendor = cachedParams.VENDOR || 'unknown';\n const renderer = cachedParams.RENDERER || 'unknown';\n const version = cachedParams.VERSION || 'unknown';\n \n // ENHANCED: Get unmasked vendor/renderer with retry logic\n let unmaskedVendor = vendor;\n let unmaskedRenderer = renderer;\n \n for (let attempt = 0; attempt < 3; attempt++) {\n try {\n const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');\n if (debugInfo) {\n const vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);\n const renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);\n \n if (vendor && vendor !== 'unknown') unmaskedVendor = vendor;\n if (renderer && renderer !== 'unknown') unmaskedRenderer = renderer;\n break; // Success, exit retry loop\n }\n } catch (error) {\n if (attempt === 2) {\n // Final attempt failed, use fallback\n break;\n }\n // Wait a bit before retry\n await new Promise(resolve => setTimeout(resolve, 10));\n }\n }\n \n // Collect extensions (cached)\n const extensions = getWebGLExtensions();\n \n // Collect parameters (cached)\n const parameters = collectWebGLParameters(gl);\n \n // Get shader precision\n const shaderPrecision = getShaderPrecision(gl);\n \n // ENHANCED: Render 3D scene for GPU-specific hash\n const renderHash = render3DScene(gl);\n \n // ENHANCED: Get advanced capabilities\n const capabilities = getAdvancedWebGLCapabilities(gl);\n \n // ENHANCED: Create vendor/renderer hash for stable identification\n const vendorRendererHash = (() => {\n const vendorStr = unmaskedVendor || vendor || '';\n const rendererStr = unmaskedRenderer || renderer || '';\n const combined = `${vendorStr}|${rendererStr}`.toLowerCase();\n \n // Simple hash function for consistent results\n let hash = 0;\n for (let i = 0; i < combined.length; i++) {\n const char = combined.charCodeAt(i);\n hash = ((hash << 5) - hash + char) & 0xffffffff;\n }\n return Math.abs(hash).toString(16);\n })();\n \n const endTime = performance.now();\n \n const result: WebGLFingerprint = {\n vendor: unmaskedVendor,\n renderer: unmaskedRenderer,\n version,\n extensions,\n parameters,\n shaderPrecision,\n renderHash, // NEW: GPU-specific 3D rendering hash\n capabilities, // NEW: Advanced WebGL capabilities\n vendorRendererHash, // NEW: Stable vendor/renderer identification\n contextAttributes: gl.getContextAttributes() || {} // NEW: Context configuration\n };\n \n return {\n value: result,\n duration: endTime - startTime\n };\n \n } catch (error) {\n return {\n value: {\n vendor: 'unknown',\n renderer: 'unknown',\n version: 'unknown',\n extensions: [],\n parameters: {},\n shaderPrecision: { vertex: '', fragment: '' },\n renderHash: '',\n capabilities: {},\n vendorRendererHash: '',\n contextAttributes: {}\n },\n duration: performance.now() - startTime,\n error: error instanceof Error ? error.message : 'WebGL fingerprinting failed'\n };\n }\n}\n\n/**\n * Singleton instance for WebGL availability check\n */\nlet webglAvailabilityCache: boolean | null = null;\n\n/**\n * Check if WebGL fingerprinting is available (with proper cleanup)\n */\nexport function isWebGLAvailable(): boolean {\n // Use cached result if available\n if (webglAvailabilityCache !== null) {\n return webglAvailabilityCache;\n }\n\n try {\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n \n const gl = canvas.getContext('webgl', { \n failIfMajorPerformanceCaveat: true,\n antialias: false,\n alpha: false,\n depth: false,\n stencil: false,\n preserveDrawingBuffer: false\n }) || canvas.getContext('experimental-webgl', {\n failIfMajorPerformanceCaveat: true,\n antialias: false,\n alpha: false,\n depth: false,\n stencil: false,\n preserveDrawingBuffer: false\n });\n \n const isAvailable = gl !== null;\n \n // Proper cleanup to prevent context leak\n if (gl && 'getExtension' in gl) {\n try {\n const webglContext = gl as WebGLRenderingContext;\n const ext = webglContext.getExtension('WEBGL_lose_context');\n if (ext) {\n ext.loseContext();\n }\n } catch (e) {\n // Ignore cleanup errors\n }\n }\n \n // Clean up canvas\n canvas.width = 0;\n canvas.height = 0;\n \n // Cache the result\n webglAvailabilityCache = isAvailable;\n return isAvailable;\n } catch {\n webglAvailabilityCache = false;\n return false;\n }\n}","/**\n * Enhanced Accessibility & Media Queries Detection Module\n * Based on FingerprintJS accessibility and preference detection with additional queries\n * \n * Detects comprehensive user accessibility preferences and display capabilities:\n * - Motion preferences (reduced motion, prefers animation)\n * - Color preferences (contrast, inverted colors, forced colors)\n * - Display capabilities (color gamut, HDR, monochrome)\n * - Transparency and visual effects preferences\n * - System-level accessibility settings\n */\n\nimport { getBrowserCapabilities } from '../../utils/browser';\n\n/**\n * Error types for accessibility detection\n */\nexport const enum AccessibilityError {\n NotSupported = 'NOT_SUPPORTED',\n MediaQueriesUnavailable = 'MEDIA_QUERIES_UNAVAILABLE',\n BrowserIncompatible = 'BROWSER_INCOMPATIBLE',\n}\n\n/**\n * Color Gamut Detection\n * Detects the range of colors that the display can show\n */\nexport type ColorGamut = 'srgb' | 'p3' | 'rec2020' | 'unknown';\n\nexport function getColorGamut(): ColorGamut {\n try {\n // Check from widest to narrowest (rec2020 includes p3, p3 includes srgb)\n for (const gamut of ['rec2020', 'p3', 'srgb'] as const) {\n const mq = safeMatchMedia(`(color-gamut: ${gamut})`);\n if (mq?.matches) {\n return gamut;\n }\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Forced Colors Detection\n * Detects if the user has enabled high contrast mode\n */\nexport function getForcedColors(): boolean | null {\n try {\n const activeMq = safeMatchMedia('(forced-colors: active)');\n if (activeMq?.matches) {\n return true;\n }\n const noneMq = safeMatchMedia('(forced-colors: none)');\n if (noneMq?.matches) {\n return false;\n }\n return null; // Not supported\n } catch {\n return null;\n }\n}\n\n/**\n * Contrast Preference Detection\n * Detects user's contrast preference\n */\nexport type ContrastPreference = 'no-preference' | 'more' | 'less' | 'forced' | 'unknown';\n\nexport function getContrastPreference(): ContrastPreference {\n try {\n const preferences = ['no-preference', 'high', 'more', 'low', 'less', 'forced'] as const;\n \n for (const preference of preferences) {\n const mq = safeMatchMedia(`(prefers-contrast: ${preference})`);\n if (mq?.matches) {\n // Normalize 'high' to 'more' and 'low' to 'less'\n if (preference === 'high') return 'more';\n if (preference === 'low') return 'less';\n return preference as ContrastPreference;\n }\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Reduced Motion Detection\n * Detects if user prefers reduced motion (accessibility feature)\n */\nexport function getReducedMotion(): boolean | null {\n try {\n const reduceMq = safeMatchMedia('(prefers-reduced-motion: reduce)');\n if (reduceMq?.matches) {\n return true;\n }\n const noPrefMq = safeMatchMedia('(prefers-reduced-motion: no-preference)');\n if (noPrefMq?.matches) {\n return false;\n }\n return null; // Not supported\n } catch {\n return null;\n }\n}\n\n/**\n * Reduced Transparency Detection\n * Detects if user prefers reduced transparency\n */\nexport function getReducedTransparency(): boolean | null {\n try {\n if (matchMedia('(prefers-reduced-transparency: reduce)').matches) {\n return true;\n }\n if (matchMedia('(prefers-reduced-transparency: no-preference)').matches) {\n return false;\n }\n return null; // Not supported\n } catch {\n return null;\n }\n}\n\n/**\n * Monochrome Detection\n * Detects monochrome displays and their bit depth\n */\nexport function getMonochromeDepth(): number {\n try {\n // Test common monochrome bit depths\n for (let depth = 8; depth >= 0; depth--) {\n if (matchMedia(`(monochrome: ${depth})`).matches) {\n return depth;\n }\n }\n return 0; // Color display\n } catch {\n return 0;\n }\n}\n\n/**\n * Inverted Colors Detection\n * Detects if the user has inverted colors enabled\n */\nexport function getInvertedColors(): boolean | null {\n try {\n if (matchMedia('(inverted-colors: inverted)').matches) {\n return true;\n }\n if (matchMedia('(inverted-colors: none)').matches) {\n return false;\n }\n return null; // Not supported\n } catch {\n return null;\n }\n}\n\n/**\n * HDR Support Detection\n * Detects High Dynamic Range display support\n */\nexport function getHDRSupport(): boolean | null {\n try {\n // Check for HDR support using dynamic-range media query\n if (matchMedia('(dynamic-range: high)').matches) {\n return true;\n }\n if (matchMedia('(dynamic-range: standard)').matches) {\n return false;\n }\n return null; // Not supported\n } catch {\n return null;\n }\n}\n\n/**\n * Color Depth Detection\n * Enhanced color depth detection with more granular values\n */\nexport function getEnhancedColorDepth(): number {\n try {\n // Test various color depths\n const depths = [48, 36, 30, 24, 16, 15, 8];\n for (const depth of depths) {\n if (matchMedia(`(color: ${depth})`).matches) {\n return depth;\n }\n }\n return screen.colorDepth || 24; // Fallback to screen property\n } catch {\n return screen.colorDepth || 24;\n }\n}\n\n/**\n * Hover Capability Detection\n * Detects if the primary input mechanism can hover\n */\nexport type HoverCapability = 'none' | 'hover' | 'unknown';\n\nexport function getHoverCapability(): HoverCapability {\n try {\n if (matchMedia('(hover: hover)').matches) {\n return 'hover';\n }\n if (matchMedia('(hover: none)').matches) {\n return 'none';\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Pointer Capability Detection\n * Detects the accuracy of the primary input mechanism\n */\nexport type PointerCapability = 'none' | 'coarse' | 'fine' | 'unknown';\n\nexport function getPointerCapability(): PointerCapability {\n try {\n if (matchMedia('(pointer: fine)').matches) {\n return 'fine';\n }\n if (matchMedia('(pointer: coarse)').matches) {\n return 'coarse';\n }\n if (matchMedia('(pointer: none)').matches) {\n return 'none';\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Check if accessibility detection is available\n * Enhanced with browser compatibility checks\n */\nexport function isAccessibilityDetectionAvailable(): boolean {\n const capabilities = getBrowserCapabilities();\n return capabilities.canRunAccessibility;\n}\n\n/**\n * Safe media query matcher with error handling\n */\nfunction safeMatchMedia(query: string): MediaQueryList | null {\n try {\n if (!isAccessibilityDetectionAvailable()) {\n return null;\n }\n return matchMedia(query);\n } catch (error) {\n // Some browsers might not support specific media queries\n return null;\n }\n}\n\n/**\n * Additional accessibility media queries from FingerprintJS\n */\n\n/**\n * Reduced Data Mode Detection\n * Detects if user has enabled data saving mode\n */\nexport function getReducedData(): boolean | null {\n try {\n if (matchMedia('(prefers-reduced-data: reduce)').matches) {\n return true;\n }\n if (matchMedia('(prefers-reduced-data: no-preference)').matches) {\n return false;\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Display Mode Detection \n * Detects if the application is running in a standalone display mode\n */\nexport type DisplayMode = 'browser' | 'minimal-ui' | 'standalone' | 'fullscreen' | 'unknown';\n\nexport function getDisplayMode(): DisplayMode {\n try {\n const modes: DisplayMode[] = ['fullscreen', 'standalone', 'minimal-ui', 'browser'];\n for (const mode of modes) {\n if (matchMedia(`(display-mode: ${mode})`).matches) {\n return mode;\n }\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Environment Blending Detection\n * Detects how the display is integrated with the environment\n */\nexport type EnvironmentBlending = 'opaque' | 'additive' | 'subtractive' | 'unknown';\n\nexport function getEnvironmentBlending(): EnvironmentBlending {\n try {\n const modes: EnvironmentBlending[] = ['opaque', 'additive', 'subtractive'];\n for (const mode of modes) {\n if (matchMedia(`(environment-blending: ${mode})`).matches) {\n return mode;\n }\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Any Hover Capability Detection\n * Detects if any available input mechanism can hover\n */\nexport function getAnyHover(): boolean | null {\n try {\n if (matchMedia('(any-hover: hover)').matches) {\n return true;\n }\n if (matchMedia('(any-hover: none)').matches) {\n return false;\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Any Pointer Capability Detection\n * Detects the accuracy of any available input mechanism\n */\nexport function getAnyPointer(): PointerCapability {\n try {\n if (matchMedia('(any-pointer: fine)').matches) {\n return 'fine';\n }\n if (matchMedia('(any-pointer: coarse)').matches) {\n return 'coarse';\n }\n if (matchMedia('(any-pointer: none)').matches) {\n return 'none';\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Color Scheme Preference Detection\n * Detects user's preferred color scheme (light/dark mode)\n */\nexport type ColorScheme = 'light' | 'dark' | 'no-preference' | 'unknown';\n\nexport function getColorScheme(): ColorScheme {\n try {\n if (matchMedia('(prefers-color-scheme: dark)').matches) {\n return 'dark';\n }\n if (matchMedia('(prefers-color-scheme: light)').matches) {\n return 'light';\n }\n if (matchMedia('(prefers-color-scheme: no-preference)').matches) {\n return 'no-preference';\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Complete accessibility fingerprint\n */\nexport interface AccessibilityFingerprint {\n // Original properties\n colorGamut: ColorGamut;\n forcedColors: boolean | null;\n contrastPreference: ContrastPreference;\n reducedMotion: boolean | null;\n reducedTransparency: boolean | null;\n monochromeDepth: number;\n invertedColors: boolean | null;\n hdrSupport: boolean | null;\n enhancedColorDepth: number;\n hoverCapability: HoverCapability;\n pointerCapability: PointerCapability;\n \n // New FingerprintJS-inspired properties\n reducedData: boolean | null;\n displayMode: DisplayMode;\n environmentBlending: EnvironmentBlending;\n anyHover: boolean | null;\n anyPointer: PointerCapability;\n colorScheme: ColorScheme;\n \n // Computed properties\n hasAccessibilityFeatures: boolean;\n displayCapabilities: string;\n interactionCapabilities: string;\n}\n\nexport function getAccessibilityFingerprint(): AccessibilityFingerprint {\n // Original properties\n const colorGamut = getColorGamut();\n const forcedColors = getForcedColors();\n const contrastPreference = getContrastPreference();\n const reducedMotion = getReducedMotion();\n const reducedTransparency = getReducedTransparency();\n const monochromeDepth = getMonochromeDepth();\n const invertedColors = getInvertedColors();\n const hdrSupport = getHDRSupport();\n const enhancedColorDepth = getEnhancedColorDepth();\n const hoverCapability = getHoverCapability();\n const pointerCapability = getPointerCapability();\n \n // New FingerprintJS-inspired properties\n const reducedData = getReducedData();\n const displayMode = getDisplayMode();\n const environmentBlending = getEnvironmentBlending();\n const anyHover = getAnyHover();\n const anyPointer = getAnyPointer();\n const colorScheme = getColorScheme();\n\n // Determine if user has accessibility features enabled\n const hasAccessibilityFeatures = Boolean(\n forcedColors ||\n reducedMotion ||\n reducedTransparency ||\n invertedColors ||\n reducedData ||\n contrastPreference !== 'no-preference' ||\n colorScheme !== 'no-preference' ||\n monochromeDepth > 0\n );\n\n // Create display capabilities signature\n const displayCapabilities = [\n colorGamut,\n hdrSupport ? 'hdr' : 'sdr',\n `${enhancedColorDepth}bit`,\n monochromeDepth > 0 ? `mono${monochromeDepth}` : 'color',\n colorScheme,\n displayMode,\n environmentBlending\n ].join('-');\n\n // Create interaction capabilities signature\n const interactionCapabilities = [\n hoverCapability,\n pointerCapability,\n anyHover ? 'anyhover' : 'nohover',\n anyPointer\n ].join('-');\n\n return {\n // Original properties\n colorGamut,\n forcedColors,\n contrastPreference,\n reducedMotion,\n reducedTransparency,\n monochromeDepth,\n invertedColors,\n hdrSupport,\n enhancedColorDepth,\n hoverCapability,\n pointerCapability,\n \n // New properties\n reducedData,\n displayMode,\n environmentBlending,\n anyHover,\n anyPointer,\n colorScheme,\n \n // Computed properties\n hasAccessibilityFeatures,\n displayCapabilities,\n interactionCapabilities,\n };\n}\n\n/**\n * Analyze accessibility fingerprint for confidence and uniqueness\n */\nexport function analyzeAccessibilityFingerprint(fingerprint: AccessibilityFingerprint): {\n confidence: number;\n uniqueness: number;\n accessibilityScore: number;\n modernBrowserScore: number;\n} {\n const features = [\n fingerprint.colorGamut !== 'unknown',\n fingerprint.forcedColors !== null,\n fingerprint.contrastPreference !== 'unknown',\n fingerprint.reducedMotion !== null,\n fingerprint.reducedTransparency !== null,\n fingerprint.invertedColors !== null,\n fingerprint.hdrSupport !== null,\n fingerprint.reducedData !== null,\n fingerprint.displayMode !== 'unknown',\n fingerprint.environmentBlending !== 'unknown',\n fingerprint.anyHover !== null,\n fingerprint.colorScheme !== 'unknown',\n ];\n\n const supportedFeatures = features.filter(Boolean).length;\n const totalFeatures = features.length;\n const confidence = supportedFeatures / totalFeatures;\n\n // Modern browser score based on support for newer features\n const modernFeatures = [\n fingerprint.reducedData !== null,\n fingerprint.displayMode !== 'unknown',\n fingerprint.environmentBlending !== 'unknown',\n fingerprint.colorScheme !== 'unknown',\n fingerprint.hdrSupport !== null,\n ];\n const modernBrowserScore = modernFeatures.filter(Boolean).length / modernFeatures.length;\n\n // Accessibility score based on enabled features\n const accessibilityFeatures = [\n fingerprint.forcedColors === true,\n fingerprint.reducedMotion === true,\n fingerprint.reducedTransparency === true,\n fingerprint.invertedColors === true,\n fingerprint.reducedData === true,\n fingerprint.contrastPreference !== 'no-preference',\n fingerprint.colorScheme === 'dark',\n fingerprint.monochromeDepth > 0,\n ];\n const accessibilityScore = accessibilityFeatures.filter(Boolean).length / accessibilityFeatures.length;\n\n // Uniqueness based on variation from defaults\n const nonDefaultValues = [\n fingerprint.colorGamut !== 'srgb',\n fingerprint.forcedColors === true,\n fingerprint.reducedMotion === true,\n fingerprint.reducedTransparency === true,\n fingerprint.invertedColors === true,\n fingerprint.reducedData === true,\n fingerprint.monochromeDepth > 0,\n fingerprint.hdrSupport === true,\n fingerprint.displayMode !== 'browser',\n fingerprint.environmentBlending !== 'opaque',\n fingerprint.colorScheme === 'dark',\n ];\n const uniqueness = nonDefaultValues.filter(Boolean).length / nonDefaultValues.length;\n\n return {\n confidence: Math.round(confidence * 100) / 100,\n uniqueness: Math.round(uniqueness * 100) / 100,\n accessibilityScore: Math.round(accessibilityScore * 100) / 100,\n modernBrowserScore: Math.round(modernBrowserScore * 100) / 100,\n };\n}","/**\n * DateTime Locale Detection\n * Based on FingerprintJS datetime locale detection\n * \n * This component uses the Intl API to detect user's actual locale preferences\n * which is more accurate than navigator.language and reveals true user settings.\n * \n * Key advantages:\n * - More accurate than navigator.language\n * - Reveals actual system locale settings\n * - Detects number formatting preferences\n * - Shows date/time formatting preferences\n * - Captures currency and timezone preferences\n * \n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/resolvedOptions\n */\n\nexport interface DateTimeLocaleData {\n // Basic locale information\n locale: string;\n calendar: string;\n numberingSystem: string;\n timeZone: string;\n \n // Date/time formatting preferences\n dateStyle: string;\n timeStyle: string;\n hourCycle: string;\n hour12: boolean;\n \n // Number formatting\n numberLocale: string;\n currencyDisplay: string;\n currencySign: string;\n notation: string;\n signDisplay: string;\n \n // Advanced formatting\n listStyle: string;\n relativeTimeStyle: string;\n pluralRules: string;\n \n // Comparison with navigator locale\n navigatorLanguage: string;\n localeMatch: boolean;\n \n // Availability flags\n intlSupport: {\n DateTimeFormat: boolean;\n NumberFormat: boolean;\n RelativeTimeFormat: boolean;\n ListFormat: boolean;\n PluralRules: boolean;\n Collator: boolean;\n };\n}\n\nexport const enum LocaleStatus {\n /** The browser doesn't support Intl API */\n IntlAPINotSupported = -1,\n /** The browser doesn't support DateTimeFormat constructor */\n DateTimeFormatNotSupported = -2,\n /** DateTimeFormat locale is undefined or null */\n LocaleNotAvailable = -3,\n /** NumberFormat is not supported */\n NumberFormatNotSupported = -4,\n}\n\n/**\n * Safely get DateTimeFormat options\n */\nfunction getDateTimeFormatOptions(): Partial<DateTimeLocaleData> | LocaleStatus {\n try {\n if (!window.Intl) {\n return LocaleStatus.IntlAPINotSupported;\n }\n\n const DateTimeFormat = window.Intl.DateTimeFormat;\n if (!DateTimeFormat) {\n return LocaleStatus.DateTimeFormatNotSupported;\n }\n\n const dtf = new DateTimeFormat();\n const options = dtf.resolvedOptions();\n\n if (!options.locale && options.locale !== '') {\n return LocaleStatus.LocaleNotAvailable;\n }\n\n return {\n locale: options.locale || 'unknown',\n calendar: options.calendar || 'unknown',\n numberingSystem: options.numberingSystem || 'unknown',\n timeZone: options.timeZone || 'unknown',\n hourCycle: (options as any).hourCycle || 'unknown',\n hour12: options.hour12 !== undefined ? options.hour12 : false,\n };\n } catch (error) {\n return LocaleStatus.DateTimeFormatNotSupported;\n }\n}\n\n/**\n * Safely get NumberFormat options\n */\nfunction getNumberFormatOptions(): Partial<DateTimeLocaleData> | LocaleStatus {\n try {\n if (!window.Intl || !window.Intl.NumberFormat) {\n return LocaleStatus.NumberFormatNotSupported;\n }\n\n const nf = new Intl.NumberFormat();\n const options = nf.resolvedOptions();\n\n // Test currency formatting\n const currencyFormatter = new Intl.NumberFormat(undefined, { \n style: 'currency', \n currency: 'USD' \n });\n const currencyOptions = currencyFormatter.resolvedOptions();\n\n return {\n numberLocale: options.locale || 'unknown',\n currencyDisplay: currencyOptions.currencyDisplay || 'unknown',\n currencySign: (currencyOptions as any).currencySign || 'unknown',\n notation: (options as any).notation || 'unknown',\n signDisplay: (options as any).signDisplay || 'unknown',\n };\n } catch (error) {\n return LocaleStatus.NumberFormatNotSupported;\n }\n}\n\n/**\n * Get advanced Intl API features\n */\nfunction getAdvancedIntlFeatures(): Partial<DateTimeLocaleData> {\n const features: Partial<DateTimeLocaleData> = {\n listStyle: 'unknown',\n relativeTimeStyle: 'unknown',\n pluralRules: 'unknown',\n };\n\n // Test ListFormat\n try {\n if (window.Intl && (window.Intl as any).ListFormat) {\n const lf = new (window.Intl as any).ListFormat();\n const options = lf.resolvedOptions();\n features.listStyle = options.style || 'unknown';\n }\n } catch (error) {\n // ListFormat not supported\n }\n\n // Test RelativeTimeFormat\n try {\n if (window.Intl && (window.Intl as any).RelativeTimeFormat) {\n const rtf = new (window.Intl as any).RelativeTimeFormat();\n const options = rtf.resolvedOptions();\n features.relativeTimeStyle = options.style || 'unknown';\n }\n } catch (error) {\n // RelativeTimeFormat not supported\n }\n\n // Test PluralRules\n try {\n if (window.Intl && (window.Intl as any).PluralRules) {\n const pr = new (window.Intl as any).PluralRules();\n const rule = pr.select(1);\n features.pluralRules = rule || 'unknown';\n }\n } catch (error) {\n // PluralRules not supported\n }\n\n return features;\n}\n\n/**\n * Check availability of Intl API components\n */\nfunction checkIntlSupport(): DateTimeLocaleData['intlSupport'] {\n const support = {\n DateTimeFormat: false,\n NumberFormat: false,\n RelativeTimeFormat: false,\n ListFormat: false,\n PluralRules: false,\n Collator: false,\n };\n\n try {\n if (window.Intl) {\n support.DateTimeFormat = typeof window.Intl.DateTimeFormat === 'function';\n support.NumberFormat = typeof window.Intl.NumberFormat === 'function';\n support.RelativeTimeFormat = typeof (window.Intl as any).RelativeTimeFormat === 'function';\n support.ListFormat = typeof (window.Intl as any).ListFormat === 'function';\n support.PluralRules = typeof (window.Intl as any).PluralRules === 'function';\n support.Collator = typeof window.Intl.Collator === 'function';\n }\n } catch (error) {\n // All remain false\n }\n\n return support;\n}\n\n/**\n * Get comprehensive datetime locale information\n */\nexport function getDateTimeLocale(): DateTimeLocaleData | LocaleStatus {\n // Get basic datetime formatting\n const dtfOptions = getDateTimeFormatOptions();\n if (typeof dtfOptions === 'number') {\n return dtfOptions; // Return error status\n }\n\n // Get number formatting\n const nfOptions = getNumberFormatOptions();\n const numberOptions = typeof nfOptions === 'number' ? {} : nfOptions;\n\n // Get advanced features\n const advancedFeatures = getAdvancedIntlFeatures();\n\n // Get Intl support information\n const intlSupport = checkIntlSupport();\n\n // Compare with navigator.language\n const navigatorLanguage = navigator.language || 'unknown';\n const localeMatch = dtfOptions.locale === navigatorLanguage;\n\n // Try to get more detailed formatting options\n let dateStyle = 'unknown';\n let timeStyle = 'unknown';\n\n try {\n if (window.Intl && typeof window.Intl.DateTimeFormat === 'function') {\n // Test with specific options to reveal more about formatting preferences\n const longDateFormatter = new Intl.DateTimeFormat(undefined, { dateStyle: 'long' });\n const longTimeFormatter = new Intl.DateTimeFormat(undefined, { timeStyle: 'long' });\n \n const longDateOptions = longDateFormatter.resolvedOptions();\n const longTimeOptions = longTimeFormatter.resolvedOptions();\n \n dateStyle = (longDateOptions as any).dateStyle || 'unknown';\n timeStyle = (longTimeOptions as any).timeStyle || 'unknown';\n }\n } catch (error) {\n // Use defaults\n }\n\n return {\n // Basic information\n locale: dtfOptions.locale || 'unknown',\n calendar: dtfOptions.calendar || 'unknown',\n numberingSystem: dtfOptions.numberingSystem || 'unknown',\n timeZone: dtfOptions.timeZone || 'unknown',\n \n // Date/time formatting\n dateStyle,\n timeStyle,\n hourCycle: dtfOptions.hourCycle || 'unknown',\n hour12: dtfOptions.hour12 || false,\n \n // Number formatting\n numberLocale: numberOptions.numberLocale || dtfOptions.locale || 'unknown',\n currencyDisplay: numberOptions.currencyDisplay || 'unknown',\n currencySign: numberOptions.currencySign || 'unknown',\n notation: numberOptions.notation || 'unknown',\n signDisplay: numberOptions.signDisplay || 'unknown',\n \n // Advanced features\n listStyle: advancedFeatures.listStyle || 'unknown',\n relativeTimeStyle: advancedFeatures.relativeTimeStyle || 'unknown',\n pluralRules: advancedFeatures.pluralRules || 'unknown',\n \n // Comparison data\n navigatorLanguage,\n localeMatch,\n \n // Support information\n intlSupport,\n };\n}\n\n/**\n * Check if datetime locale detection is available\n */\nexport function isDateTimeLocaleAvailable(): boolean {\n try {\n return typeof window !== 'undefined' && \n typeof window.Intl !== 'undefined';\n } catch {\n return false;\n }\n}\n\n/**\n * Analyze datetime locale data for confidence and uniqueness\n */\nexport function analyzeDateTimeLocale(localeData: DateTimeLocaleData): {\n confidence: number;\n uniqueness: number;\n intlApiSupport: number;\n localeComplexity: number;\n} {\n if (typeof localeData === 'number') {\n // It's an error status\n return {\n confidence: 0,\n uniqueness: 0,\n intlApiSupport: 0,\n localeComplexity: 0,\n };\n }\n\n // Count supported Intl features\n const supportedFeatures = Object.values(localeData.intlSupport).filter(Boolean).length;\n const totalFeatures = Object.keys(localeData.intlSupport).length;\n const intlApiSupport = supportedFeatures / totalFeatures;\n\n // Count non-unknown values\n const values = [\n localeData.locale,\n localeData.calendar,\n localeData.numberingSystem,\n localeData.timeZone,\n localeData.dateStyle,\n localeData.timeStyle,\n localeData.hourCycle,\n localeData.numberLocale,\n localeData.currencyDisplay,\n localeData.currencySign,\n localeData.notation,\n localeData.signDisplay,\n localeData.listStyle,\n localeData.relativeTimeStyle,\n localeData.pluralRules,\n ];\n\n const knownValues = values.filter(val => val !== 'unknown' && val !== '').length;\n const confidence = knownValues / values.length;\n\n // Measure locale complexity (more specific = more unique)\n const localeComplexity = [\n localeData.locale.length > 2 ? 1 : 0,\n localeData.calendar !== 'gregory' ? 1 : 0,\n localeData.numberingSystem !== 'latn' ? 1 : 0,\n localeData.hour12 ? 1 : 0,\n !localeData.localeMatch ? 1 : 0,\n ].reduce((sum, val) => sum + val, 0) / 5;\n\n const uniqueness = (confidence + intlApiSupport + localeComplexity) / 3;\n\n return {\n confidence: Math.round(confidence * 100) / 100,\n uniqueness: Math.round(uniqueness * 100) / 100,\n intlApiSupport: Math.round(intlApiSupport * 100) / 100,\n localeComplexity: Math.round(localeComplexity * 100) / 100,\n };\n}\n\n/**\n * Get a compact hash of datetime locale for quick comparison\n */\nexport function getDateTimeLocaleHash(localeData: DateTimeLocaleData): string {\n if (typeof localeData === 'number') {\n return `status-${localeData}`;\n }\n\n const keyValues = [\n localeData.locale,\n localeData.calendar,\n localeData.numberingSystem,\n localeData.timeZone,\n localeData.hourCycle,\n localeData.hour12 ? '1' : '0',\n localeData.localeMatch ? '1' : '0',\n Object.values(localeData.intlSupport).map(b => b ? '1' : '0').join(''),\n ];\n\n return keyValues.join('|');\n}","/**\n * Enhanced Font Preferences Detection with Iframe Isolation\n * Based on FingerprintJS font preferences detection with enhanced security and accuracy\n *\n * This component measures text rendering with different font settings using isolated iframes\n * to detect user's font preferences, OS-specific fonts, and browser rendering differences.\n *\n * Key advantages:\n * - Iframe isolation prevents external interference\n * - Detects OS-specific font rendering and anti-aliasing\n * - Captures user font size preferences and system settings\n * - Reveals browser-specific text rendering differences\n * - Very stable across sessions and difficult to spoof\n * - Enhanced with sub-pixel rendering analysis\n */\n\nimport { isChrome, isWebKit } from \"../../utils/browser\";\nimport { hash32 } from \"./hashing\";\n\nexport interface FontPreferences {\n // Font family measurements\n default: number;\n serif: number;\n sans: number;\n mono: number;\n\n // OS-specific fonts\n apple: number;\n system: number;\n\n // Size tests\n min: number;\n large: number;\n\n // Browser-specific measurements\n ui: number;\n emoji: number;\n math: number;\n\n // Advanced measurements\n cjk: number; // Chinese/Japanese/Korean fonts\n arabic: number; // Arabic script fonts\n hebrew: number; // Hebrew script fonts\n\n // Rendering characteristics\n subpixel: number; // Subpixel rendering differences\n kerning: number; // Kerning differences\n ligatures: number; // Ligature support\n\n // NEW: Enhanced rendering analysis\n antiAliasing: {\n enabled: boolean;\n type: string;\n smoothingLevel: number;\n };\n systemFontHints: {\n clearType: boolean;\n hintingLevel: number;\n subpixelRendering: boolean;\n };\n fallbackBehavior: Record<string, string>;\n isolatedHash: string;\n}\n\n/**\n * Text content for measurements - chosen for maximum variation\n */\nconst defaultText = \"mmMwWLliI0fiflO&1\";\nconst cjkText = \"中文测试\";\nconst arabicText = \"اختبار\";\nconst hebrewText = \"בדיקה\";\nconst emojiText = \"🎯🔥💯\";\nconst mathText = \"∑∆∇∂\";\nconst ligatureText = \"ffi ffl fi fl\";\n\n/**\n * Font measurement presets\n */\ninterface FontPreset {\n style?: Partial<CSSStyleDeclaration>;\n text?: string;\n}\n\nconst presets: Partial<Record<keyof FontPreferences, FontPreset>> = {\n // Basic font families\n default: { text: defaultText },\n serif: {\n style: { fontFamily: \"serif\" },\n text: defaultText,\n },\n sans: {\n style: { fontFamily: \"sans-serif\" },\n text: defaultText,\n },\n mono: {\n style: { fontFamily: \"monospace\" },\n text: defaultText,\n },\n\n // OS-specific fonts\n apple: {\n style: { font: \"-apple-system-body\" },\n text: defaultText,\n },\n system: {\n style: { fontFamily: \"system-ui\" },\n text: defaultText,\n },\n\n // Size variations\n min: {\n style: { fontSize: \"1px\" },\n text: defaultText,\n },\n large: {\n style: { fontSize: \"72px\" },\n text: defaultText,\n },\n\n // Browser UI fonts\n ui: {\n style: { fontFamily: \"ui-serif\" },\n text: defaultText,\n },\n emoji: {\n style: {\n fontFamily: \"Apple Color Emoji, Segoe UI Emoji, Noto Color Emoji\",\n },\n text: emojiText,\n },\n math: {\n style: { fontFamily: \"STIX Two Math, Cambria Math\" },\n text: mathText,\n },\n\n // Script-specific fonts\n cjk: {\n style: { fontFamily: \"Hiragino Sans, Microsoft YaHei, SimSun\" },\n text: cjkText,\n },\n arabic: {\n style: { fontFamily: \"Tahoma, Arial Unicode MS\" },\n text: arabicText,\n },\n hebrew: {\n style: { fontFamily: \"Tahoma, Arial Unicode MS\" },\n text: hebrewText,\n },\n\n // Advanced rendering features\n subpixel: {\n style: {\n fontFamily: \"Arial\",\n fontSize: \"11px\",\n textRendering: \"optimizeLegibility\",\n },\n text: defaultText,\n },\n kerning: {\n style: {\n fontFamily: \"Times\",\n fontSize: \"24px\",\n fontKerning: \"normal\",\n },\n text: \"AV To\",\n },\n ligatures: {\n style: {\n fontFamily: \"Times\",\n fontSize: \"24px\",\n fontVariantLigatures: \"common-ligatures\",\n },\n text: ligatureText,\n },\n};\n\n/**\n * Analyze rendering quality to detect anti-aliasing and font smoothing\n */\nfunction analyzeRenderingQuality(\n iframeDoc: Document,\n container: HTMLElement,\n fontFamily: string = \"Arial\"\n): { quality: number; antiAliasing: boolean; smoothing: number } {\n try {\n // Create canvas for pixel analysis\n const canvas = iframeDoc.createElement(\"canvas\");\n canvas.width = 100;\n canvas.height = 50;\n const ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n\n if (!ctx) return { quality: 0, antiAliasing: false, smoothing: 0 };\n\n // Draw text at sub-pixel position to trigger anti-aliasing\n ctx.font = `24px \"${fontFamily}\"`;\n ctx.fillStyle = \"#000000\";\n ctx.fillText(\"Wg\", 10.5, 30.7);\n\n // Analyze pixel data for anti-aliasing detection\n const imageData = ctx.getImageData(10, 20, 30, 20);\n const pixels = imageData.data;\n\n let edgePixels = 0;\n let grayscalePixels = 0;\n let totalNonWhitePixels = 0;\n\n for (let i = 0; i < pixels.length; i += 4) {\n const r = pixels[i] || 0;\n const g = pixels[i + 1] || 0;\n const b = pixels[i + 2] || 0;\n const alpha = pixels[i + 3] || 0;\n\n // Skip transparent pixels\n if (alpha < 10) continue;\n\n totalNonWhitePixels++;\n\n // Detect grayscale pixels (anti-aliasing indicator)\n if (r === g && g === b && r > 0 && r < 255) {\n grayscalePixels++;\n }\n\n // Detect edge transitions\n if (i > 4 && Math.abs(r - (pixels[i - 4] || 0)) > 50) {\n edgePixels++;\n }\n }\n\n const antiAliasingRatio =\n totalNonWhitePixels > 0 ? grayscalePixels / totalNonWhitePixels : 0;\n const smoothingLevel =\n totalNonWhitePixels > 0\n ? (grayscalePixels * 100) / totalNonWhitePixels\n : 0;\n\n return {\n quality: Math.round(smoothingLevel),\n antiAliasing: antiAliasingRatio > 0.1,\n smoothing: Math.round(smoothingLevel * 100) / 100,\n };\n } catch (error) {\n return { quality: 0, antiAliasing: false, smoothing: 0 };\n }\n}\n\n/**\n * Detect system font hinting and ClearType\n */\nfunction detectSystemFontHints(\n iframeDoc: Document,\n container: HTMLElement\n): {\n clearType: boolean;\n hintingLevel: number;\n subpixelRendering: boolean;\n} {\n try {\n const canvas = iframeDoc.createElement(\"canvas\");\n canvas.width = 100;\n canvas.height = 50;\n const ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n\n if (!ctx) {\n return { clearType: false, hintingLevel: 0, subpixelRendering: false };\n }\n\n // Test with known problematic character combinations\n const testTexts = [\"rn\", \"il\", \"WW\", \"mm\"];\n let clearTypeIndicators = 0;\n let subpixelIndicators = 0;\n let hintingScore = 0;\n\n for (const text of testTexts) {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.font = \"16px Arial\";\n ctx.fillStyle = \"#000\";\n ctx.fillText(text, 10, 25);\n\n const imageData = ctx.getImageData(10, 15, 40, 20);\n const pixels = imageData.data;\n\n // Analyze RGB sub-pixel rendering patterns\n for (let i = 0; i < pixels.length; i += 12) {\n // Check every 3rd pixel\n const r1 = pixels[i] || 0;\n const g1 = pixels[i + 1] || 0;\n const b1 = pixels[i + 2] || 0;\n const r2 = pixels[i + 4] || 0;\n const g2 = pixels[i + 5] || 0;\n const b2 = pixels[i + 6] || 0;\n\n // ClearType creates RGB fringing\n if (Math.abs(r1 - g1) > 20 || Math.abs(g1 - b1) > 20) {\n clearTypeIndicators++;\n }\n\n // Sub-pixel rendering shows color channel differences\n if (Math.abs(r1 - r2) + Math.abs(g1 - g2) + Math.abs(b1 - b2) > 50) {\n subpixelIndicators++;\n }\n\n // Font hinting creates consistent patterns\n if (\n (r1 > 0 && r1 < 255) ||\n (g1 > 0 && g1 < 255) ||\n (b1 > 0 && b1 < 255)\n ) {\n hintingScore++;\n }\n }\n }\n\n return {\n clearType: clearTypeIndicators > 10,\n hintingLevel: Math.min(Math.round(hintingScore / 10), 5),\n subpixelRendering: subpixelIndicators > 5,\n };\n } catch (error) {\n return {\n clearType: false,\n hintingLevel: 0,\n subpixelRendering: false,\n };\n }\n}\n\n/**\n * Test font fallback behavior\n */\nfunction testFontFallback(\n iframeDoc: Document,\n container: HTMLElement,\n fontFamily: string\n): string {\n try {\n const testString = \"mmmmmmmmmmlli\"; // Characters that vary significantly between fonts\n\n // Measure with specified font\n const withFont = measureText(iframeDoc, container, {\n style: { fontFamily },\n text: testString,\n });\n\n // Measure with known fallback\n const withFallback = measureText(iframeDoc, container, {\n style: { fontFamily: \"monospace\" },\n text: testString,\n });\n\n // Compare dimensions to detect fallback\n const widthDiff = Math.abs(withFont - withFallback);\n\n if (widthDiff < 1) {\n return \"monospace-fallback\";\n }\n\n const withSansSerif = measureText(iframeDoc, container, {\n style: { fontFamily: \"sans-serif\" },\n text: testString,\n });\n\n const sansWidthDiff = Math.abs(withFont - withSansSerif);\n\n if (sansWidthDiff < 1) {\n return \"sans-serif-fallback\";\n }\n\n return \"native-font\";\n } catch (error) {\n return \"fallback-error\";\n }\n}\n\n/**\n * Create measurement iframe for isolated font rendering\n */\nfunction createMeasurementIframe(): Promise<{\n document: Document;\n container: HTMLElement;\n cleanup: () => void;\n}> {\n return new Promise((resolve, reject) => {\n const iframe = document.createElement(\"iframe\");\n\n // Iframe HTML with proper viewport for Android font size detection\n const iframeHtml = `<!doctype html>\n <html>\n <head>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <style>\n body { \n margin: 0; \n padding: 20px; \n width: 4000px;\n text-size-adjust: none;\n -webkit-text-size-adjust: none;\n }\n </style>\n </head>\n <body></body>\n </html>`;\n\n // Hide iframe\n iframe.style.cssText =\n \"position: absolute; left: -9999px; top: -9999px; width: 1px; height: 1px; opacity: 0;\";\n iframe.srcdoc = iframeHtml;\n\n iframe.onload = () => {\n try {\n const iframeDocument = iframe.contentDocument;\n const iframeWindow = iframe.contentWindow;\n\n if (!iframeDocument || !iframeWindow) {\n reject(new Error(\"Cannot access iframe content\"));\n return;\n }\n\n const body = iframeDocument.body;\n\n // Apply zoom correction for better precision\n if (isChrome()) {\n body.style.zoom = `${1 / iframeWindow.devicePixelRatio}`;\n } else if (isWebKit()) {\n body.style.zoom = \"reset\";\n }\n\n // Add dummy content for Android font size detection\n const dummyText = iframeDocument.createElement(\"div\");\n dummyText.textContent = Array(200).fill(\"word\").join(\" \");\n body.appendChild(dummyText);\n\n const cleanup = () => {\n if (iframe.parentNode) {\n iframe.parentNode.removeChild(iframe);\n }\n };\n\n resolve({\n document: iframeDocument,\n container: body,\n cleanup,\n });\n } catch (error) {\n reject(error);\n }\n };\n\n iframe.onerror = () => {\n reject(new Error(\"Failed to load iframe\"));\n };\n\n document.body.appendChild(iframe);\n });\n}\n\n/**\n * Measure text width with specific font settings\n */\nfunction measureText(\n document: Document,\n container: HTMLElement,\n preset: FontPreset\n): number {\n const element = document.createElement(\"span\");\n const { style = {}, text = defaultText } = preset;\n\n // Set text content\n element.textContent = text;\n\n // Apply base styles\n element.style.cssText =\n \"position: absolute; left: 0; top: 0; white-space: nowrap; visibility: hidden;\";\n\n // Apply preset styles\n Object.entries(style).forEach(([key, value]) => {\n if (value !== undefined) {\n (element.style as any)[key] = value;\n }\n });\n\n // Add to DOM and measure\n container.appendChild(element);\n const width = element.getBoundingClientRect().width;\n container.removeChild(element);\n\n return Math.round(width * 100) / 100; // Round to 2 decimal places\n}\n\n/**\n * Get enhanced font preferences fingerprint with iframe isolation\n */\nexport async function getFontPreferences(): Promise<FontPreferences> {\n try {\n const {\n document: iframeDoc,\n container,\n cleanup,\n } = await createMeasurementIframe();\n\n const measurements: Partial<FontPreferences> = {};\n\n // Measure all presets\n for (const [key, preset] of Object.entries(presets)) {\n try {\n (measurements as any)[key] = measureText(iframeDoc, container, preset);\n } catch (error) {\n // Fallback to 0 if measurement fails\n (measurements as any)[key] = 0;\n }\n }\n\n // NEW: Enhanced rendering analysis\n const renderingAnalysis = analyzeRenderingQuality(\n iframeDoc,\n container,\n \"Arial\"\n );\n const systemHints = detectSystemFontHints(iframeDoc, container);\n\n // NEW: Test fallback behavior for common fonts\n const fallbackBehavior: Record<string, string> = {};\n const commonFonts = [\n \"Arial\",\n \"Helvetica\",\n \"Times New Roman\",\n \"Georgia\",\n \"Courier New\",\n ];\n\n for (const font of commonFonts) {\n try {\n fallbackBehavior[font] = testFontFallback(iframeDoc, container, font);\n } catch (error) {\n fallbackBehavior[font] = \"fallback-error\";\n }\n }\n\n // NEW: Create comprehensive hash for isolation verification\n const hashComponents = [\n JSON.stringify(measurements),\n JSON.stringify(renderingAnalysis),\n JSON.stringify(systemHints),\n JSON.stringify(fallbackBehavior),\n ];\n\n const isolatedHash = hash32(hashComponents.join(\"|\"));\n\n cleanup();\n\n return {\n ...(measurements as Omit<\n FontPreferences,\n \"antiAliasing\" | \"systemFontHints\" | \"fallbackBehavior\" | \"isolatedHash\"\n >),\n antiAliasing: {\n enabled: renderingAnalysis.antiAliasing,\n type: systemHints.clearType\n ? \"cleartype\"\n : renderingAnalysis.antiAliasing\n ? \"standard\"\n : \"none\",\n smoothingLevel: renderingAnalysis.smoothing,\n },\n systemFontHints: systemHints,\n fallbackBehavior,\n isolatedHash,\n };\n } catch (error) {\n // Return fallback measurements if iframe creation fails\n const fallbackMeasurements = Object.keys(presets).reduce((acc, key) => {\n acc[key as keyof FontPreferences] = 0;\n return acc;\n }, {} as any);\n\n return {\n ...fallbackMeasurements,\n antiAliasing: { enabled: false, type: \"unknown\", smoothingLevel: 0 },\n systemFontHints: {\n clearType: false,\n hintingLevel: 0,\n subpixelRendering: false,\n },\n fallbackBehavior: {},\n isolatedHash: \"error\",\n };\n }\n}\n\n/**\n * Check if font preferences detection is available\n */\nexport function isFontPreferencesAvailable(): boolean {\n try {\n return (\n typeof document !== \"undefined\" &&\n typeof document.createElement === \"function\" &&\n typeof document.body !== \"undefined\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Analyze enhanced font preferences for confidence and uniqueness\n */\nexport function analyzeFontPreferences(preferences: FontPreferences): {\n confidence: number;\n uniqueness: number;\n hasSystemFonts: boolean;\n hasAdvancedFeatures: boolean;\n renderingQuality: \"high\" | \"medium\" | \"low\";\n isolationIntegrity: boolean;\n} {\n // Get numeric measurements (excluding enhanced objects)\n const numericValues = [\n preferences.default,\n preferences.serif,\n preferences.sans,\n preferences.mono,\n preferences.apple,\n preferences.system,\n preferences.min,\n preferences.large,\n preferences.ui,\n preferences.emoji,\n preferences.math,\n preferences.cjk,\n preferences.arabic,\n preferences.hebrew,\n preferences.subpixel,\n preferences.kerning,\n preferences.ligatures,\n ];\n\n // Check if we have real measurements (not all zeros)\n const hasRealValues = numericValues.some((val) => val > 0);\n const nonZeroCount = numericValues.filter((val) => val > 0).length;\n const totalCount = numericValues.length;\n\n let confidence = hasRealValues ? nonZeroCount / totalCount : 0;\n\n // Boost confidence if enhanced features are working\n if (\n preferences.antiAliasing.enabled ||\n preferences.systemFontHints.clearType\n ) {\n confidence += 0.2;\n }\n\n if (Object.keys(preferences.fallbackBehavior).length > 0) {\n confidence += 0.1;\n }\n\n confidence = Math.min(confidence, 1);\n\n // Check for system font support\n const hasSystemFonts = preferences.apple > 0 || preferences.system > 0;\n\n // Check for advanced rendering features\n const hasAdvancedFeatures =\n [\n preferences.subpixel,\n preferences.kerning,\n preferences.ligatures,\n preferences.emoji,\n preferences.math,\n ].some((val) => val > 0) ||\n preferences.antiAliasing.enabled ||\n preferences.systemFontHints.clearType;\n\n // Calculate uniqueness based on measurement variance\n const average =\n numericValues.reduce((sum, val) => sum + val, 0) / numericValues.length;\n const variance =\n numericValues.reduce((sum, val) => sum + Math.pow(val - average, 2), 0) /\n numericValues.length;\n let uniqueness = Math.min(variance / 100, 1); // Normalize to 0-1\n\n // Boost uniqueness with enhanced features\n if (preferences.antiAliasing.smoothingLevel > 0) {\n uniqueness += 0.1;\n }\n\n if (preferences.systemFontHints.hintingLevel > 0) {\n uniqueness += 0.1;\n }\n\n uniqueness = Math.min(uniqueness, 1);\n\n // Determine rendering quality\n let renderingQuality: \"high\" | \"medium\" | \"low\" = \"low\";\n const smoothingLevel = preferences.antiAliasing.smoothingLevel;\n\n if (smoothingLevel > 50 || preferences.systemFontHints.clearType) {\n renderingQuality = \"high\";\n } else if (\n smoothingLevel > 20 ||\n preferences.systemFontHints.hintingLevel > 2\n ) {\n renderingQuality = \"medium\";\n }\n\n // Check isolation integrity\n const isolationIntegrity =\n preferences.isolatedHash !== \"error\" && preferences.isolatedHash.length > 0;\n\n return {\n confidence: Math.round(confidence * 100) / 100,\n uniqueness: Math.round(uniqueness * 100) / 100,\n hasSystemFonts,\n hasAdvancedFeatures,\n renderingQuality,\n isolationIntegrity,\n };\n}\n\n/**\n * Get a compact hash of enhanced font preferences for quick comparison\n */\nexport function getFontPreferencesHash(preferences: FontPreferences): string {\n // Use the isolated hash if available (most comprehensive)\n if (preferences.isolatedHash && preferences.isolatedHash !== \"error\") {\n return preferences.isolatedHash;\n }\n\n // Fallback to creating hash from numeric values\n const numericValues = [\n preferences.default,\n preferences.serif,\n preferences.sans,\n preferences.mono,\n preferences.apple,\n preferences.system,\n preferences.min,\n preferences.large,\n preferences.ui,\n preferences.emoji,\n preferences.math,\n preferences.cjk,\n preferences.arabic,\n preferences.hebrew,\n preferences.subpixel,\n preferences.kerning,\n preferences.ligatures,\n ].map((val) => Math.round(val));\n\n // Include rendering characteristics in fallback hash\n const renderingIndicators = [\n preferences.antiAliasing.enabled ? 1 : 0,\n preferences.systemFontHints.clearType ? 1 : 0,\n preferences.systemFontHints.hintingLevel,\n Math.round(preferences.antiAliasing.smoothingLevel),\n ];\n\n return [...numericValues, ...renderingIndicators].join(\",\");\n}\n","/**\n * Enhanced Font Detection with Iframe Isolation\n * Based on FingerprintJS advanced font detection techniques\n * \n * Key improvements over basic font detection:\n * - Uses iframe isolation to prevent CSS interference\n * - More comprehensive font list from FingerprintJS\n * - Better measurement precision\n * - Fallback compatibility for various browsers\n */\n\nexport interface EnhancedFontFingerprint {\n available: string[];\n method: 'iframe' | 'dom' | 'fallback';\n measurements: Record<string, { width: number; height: number }>;\n precision: number;\n totalTested: number;\n detectionTime: number;\n}\n\n/**\n * Comprehensive font list from FingerprintJS\n * These fonts are carefully chosen to maximize OS and browser differentiation\n */\nconst FINGERPRINT_FONTS = [\n // Android-specific font\n 'sans-serif-thin',\n \n // Professional fonts\n 'ARNO PRO',\n 'Agency FB', \n 'Arabic Typesetting',\n 'Arial Unicode MS',\n 'AvantGarde Bk BT',\n 'BankGothic Md BT',\n 'Batang',\n 'Bitstream Vera Sans Mono',\n 'Calibri',\n 'Century',\n 'Century Gothic',\n 'Clarendon',\n 'EUROSTILE',\n 'Franklin Gothic',\n 'Futura Bk BT',\n 'Futura Md BT',\n 'GOTHAM',\n 'Gill Sans',\n 'HELV',\n 'Haettenschweiler',\n 'Helvetica Neue',\n 'Humanst521 BT',\n 'Leelawadee',\n 'Letter Gothic',\n 'Levenim MT',\n 'Lucida Bright',\n 'Lucida Sans',\n 'Menlo',\n 'MS Mincho',\n 'MS Outlook',\n 'MS Reference Specialty',\n 'MS UI Gothic',\n 'MT Extra',\n 'MYRIAD PRO',\n 'Marlett',\n 'Meiryo UI',\n 'Microsoft Uighur',\n 'Minion Pro',\n 'Monotype Corsiva',\n 'PMingLiU',\n 'Pristina',\n 'SCRIPTINA',\n 'Segoe UI Light',\n 'Serifa',\n 'SimHei',\n 'Small Fonts',\n 'Staccato222 BT',\n 'TRAJAN PRO',\n 'Univers CE 55 Medium',\n 'Vrinda',\n 'ZWAdobeF',\n \n // Additional commonly available system fonts\n 'Arial',\n 'Arial Black',\n 'Comic Sans MS',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Palatino Linotype',\n 'Tahoma',\n 'Times New Roman',\n 'Trebuchet MS',\n 'Verdana',\n \n // macOS specific\n 'American Typewriter',\n 'Avenir',\n 'Baskerville',\n 'Big Caslon',\n 'Brush Script MT',\n 'Copperplate',\n 'Didot',\n 'Futura',\n 'Helvetica',\n 'Hoefler Text',\n 'Lucida Grande',\n 'Marker Felt',\n 'Optima',\n 'Papyrus',\n 'Phosphate',\n 'Rockwell',\n 'Savoye LET',\n 'SignPainter',\n 'Skia',\n 'Snell Roundhand',\n 'Zapfino',\n \n // Linux specific\n 'DejaVu Sans',\n 'DejaVu Sans Mono',\n 'DejaVu Serif',\n 'Liberation Sans',\n 'Liberation Serif',\n 'Ubuntu',\n 'Ubuntu Mono',\n] as const;\n\n// Text chosen for maximum width variation between fonts\nconst TEST_STRING = 'mmMwWLliI0O&1';\nconst TEXT_SIZE = '48px';\nconst BASE_FONTS = ['monospace', 'sans-serif', 'serif'] as const;\n\n/**\n * Create isolated iframe for font measurement\n * This prevents page CSS from affecting measurements\n */\nfunction createFontMeasurementIframe(): Promise<{\n document: Document;\n body: HTMLElement;\n cleanup: () => void;\n}> {\n return new Promise((resolve, reject) => {\n const iframe = document.createElement('iframe');\n \n // Hide iframe completely\n iframe.style.cssText = 'position: absolute; left: -9999px; top: -9999px; width: 1px; height: 1px; opacity: 0; pointer-events: none;';\n \n iframe.onload = () => {\n try {\n const iframeDocument = iframe.contentDocument;\n if (!iframeDocument) {\n throw new Error('Cannot access iframe document');\n }\n \n const body = iframeDocument.body;\n if (!body) {\n throw new Error('Iframe body not available');\n }\n \n // Set up measurement environment\n body.style.fontSize = TEXT_SIZE;\n body.style.margin = '0';\n body.style.padding = '0';\n \n const cleanup = () => {\n if (iframe.parentNode) {\n iframe.parentNode.removeChild(iframe);\n }\n };\n \n resolve({\n document: iframeDocument,\n body,\n cleanup\n });\n } catch (error) {\n reject(error);\n }\n };\n \n iframe.onerror = () => {\n reject(new Error('Failed to load font measurement iframe'));\n };\n \n // Add to DOM to trigger load\n document.body.appendChild(iframe);\n });\n}\n\n/**\n * Create measurement span in iframe\n */\nfunction createMeasurementSpan(\n document: Document,\n fontFamily: string\n): HTMLSpanElement {\n const span = document.createElement('span');\n span.style.position = 'absolute';\n span.style.top = '0';\n span.style.left = '0';\n span.style.fontFamily = fontFamily;\n span.style.fontSize = TEXT_SIZE;\n span.style.whiteSpace = 'nowrap';\n span.textContent = TEST_STRING;\n \n return span;\n}\n\n/**\n * Create span with font to detect and base font fallback\n */\nfunction createSpanWithFonts(\n document: Document,\n fontToDetect: string,\n baseFont: string\n): HTMLSpanElement {\n return createMeasurementSpan(document, `'${fontToDetect}',${baseFont}`);\n}\n\n/**\n * Check if font is available by comparing measurements\n */\nfunction isFontAvailable(\n fontSpans: HTMLSpanElement[],\n defaultMeasurements: Record<string, { width: number; height: number }>\n): boolean {\n return BASE_FONTS.some((baseFont, index) => {\n const span = fontSpans[index];\n const defaultSize = defaultMeasurements[baseFont];\n \n // Check if span exists before accessing properties\n if (!span || !defaultSize) {\n return false;\n }\n \n return (\n span.offsetWidth !== defaultSize.width ||\n span.offsetHeight !== defaultSize.height\n );\n });\n}\n\n/**\n * Enhanced font detection using iframe isolation\n */\nexport async function getEnhancedFontFingerprint(): Promise<EnhancedFontFingerprint> {\n const startTime = performance.now();\n \n try {\n const { document: iframeDoc, body, cleanup } = await createFontMeasurementIframe();\n \n try {\n // Create container for spans\n const spansContainer = iframeDoc.createElement('div');\n spansContainer.style.setProperty('visibility', 'hidden', 'important');\n \n // Measure base fonts first\n const baseFontSpans = BASE_FONTS.map(font => createMeasurementSpan(iframeDoc, font));\n baseFontSpans.forEach(span => spansContainer.appendChild(span));\n \n // Create spans for fonts to detect\n const fontSpans: Record<string, HTMLSpanElement[]> = {};\n for (const font of FINGERPRINT_FONTS) {\n fontSpans[font] = BASE_FONTS.map(baseFont => \n createSpanWithFonts(iframeDoc, font, baseFont)\n );\n fontSpans[font].forEach(span => spansContainer.appendChild(span));\n }\n \n // Add all spans to DOM\n body.appendChild(spansContainer);\n \n // Get default measurements for base fonts\n const defaultMeasurements: Record<string, { width: number; height: number }> = {};\n BASE_FONTS.forEach((font, index) => {\n const span = baseFontSpans[index];\n if (span) {\n defaultMeasurements[font] = {\n width: span.offsetWidth,\n height: span.offsetHeight\n };\n }\n });\n \n // Check which fonts are available and collect measurements\n const availableFonts: string[] = [];\n const measurements: Record<string, { width: number; height: number }> = {};\n \n for (const font of FINGERPRINT_FONTS) {\n const spans = fontSpans[font];\n if (!spans) continue; // Skip if spans are undefined\n \n const isAvailable = isFontAvailable(spans, defaultMeasurements);\n \n if (isAvailable) {\n availableFonts.push(font);\n }\n \n // Store measurement from first span for analysis\n if (spans.length > 0 && spans[0]) {\n measurements[font] = {\n width: spans[0].offsetWidth,\n height: spans[0].offsetHeight\n };\n }\n }\n \n const detectionTime = performance.now() - startTime;\n \n // Calculate precision based on measurement variance\n const widths = Object.values(measurements).map(m => m.width);\n const uniqueWidths = new Set(widths).size;\n const precision = uniqueWidths / widths.length;\n \n return {\n available: availableFonts,\n method: 'iframe',\n measurements,\n precision,\n totalTested: FINGERPRINT_FONTS.length,\n detectionTime\n };\n \n } finally {\n cleanup();\n }\n \n } catch (error) {\n // Fallback to DOM-based detection if iframe fails\n return getFallbackFontDetection(startTime);\n }\n}\n\n/**\n * Fallback font detection using direct DOM manipulation\n */\nfunction getFallbackFontDetection(startTime: number): EnhancedFontFingerprint {\n const availableFonts: string[] = [];\n const measurements: Record<string, { width: number; height: number }> = {};\n \n try {\n // Create measurement container\n const container = document.createElement('div');\n container.style.cssText = 'position: absolute; left: -9999px; top: -9999px; visibility: hidden;';\n \n // Create base font spans\n const baseMeasurements: Record<string, { width: number; height: number }> = {};\n BASE_FONTS.forEach(font => {\n const span = document.createElement('span');\n span.style.fontFamily = font;\n span.style.fontSize = TEXT_SIZE;\n span.style.whiteSpace = 'nowrap';\n span.textContent = TEST_STRING;\n \n container.appendChild(span);\n document.body.appendChild(container);\n \n baseMeasurements[font] = {\n width: span.offsetWidth,\n height: span.offsetHeight\n };\n \n document.body.removeChild(container);\n container.removeChild(span);\n });\n \n // Test each font\n for (const font of FINGERPRINT_FONTS) {\n let isAvailable = false;\n \n for (const baseFont of BASE_FONTS) {\n const span = document.createElement('span');\n span.style.fontFamily = `'${font}',${baseFont}`;\n span.style.fontSize = TEXT_SIZE;\n span.style.whiteSpace = 'nowrap';\n span.textContent = TEST_STRING;\n \n container.appendChild(span);\n document.body.appendChild(container);\n \n const measurement = {\n width: span.offsetWidth,\n height: span.offsetHeight\n };\n \n measurements[font] = measurement;\n \n // Check if different from base font\n const baseSize = baseMeasurements[baseFont];\n if (baseSize && (measurement.width !== baseSize.width || measurement.height !== baseSize.height)) {\n isAvailable = true;\n }\n \n document.body.removeChild(container);\n container.removeChild(span);\n \n if (isAvailable) break; // Found difference, font is available\n }\n \n if (isAvailable) {\n availableFonts.push(font);\n }\n }\n \n } catch (error) {\n // If everything fails, return minimal data\n }\n \n const detectionTime = performance.now() - startTime;\n const widths = Object.values(measurements).map(m => m.width);\n const uniqueWidths = new Set(widths).size;\n const precision = widths.length > 0 ? uniqueWidths / widths.length : 0;\n \n return {\n available: availableFonts,\n method: 'dom',\n measurements,\n precision,\n totalTested: FINGERPRINT_FONTS.length,\n detectionTime\n };\n}\n\n/**\n * Check if enhanced font detection is available\n */\nexport function isEnhancedFontDetectionAvailable(): boolean {\n try {\n return typeof document !== 'undefined' &&\n typeof document.createElement === 'function' &&\n typeof document.body !== 'undefined';\n } catch {\n return false;\n }\n}\n\n/**\n * Analyze enhanced font fingerprint for confidence and uniqueness\n */\nexport function analyzeEnhancedFontFingerprint(fingerprint: EnhancedFontFingerprint): {\n confidence: number;\n uniqueness: number;\n osSignature: string;\n browserCapabilities: number;\n} {\n const { available, method, precision, totalTested, detectionTime } = fingerprint;\n \n // Confidence based on method used and precision\n let confidence = 0.5;\n if (method === 'iframe') confidence = 0.9;\n else if (method === 'dom') confidence = 0.7;\n \n confidence *= precision; // Adjust by measurement precision\n \n // OS signature based on font patterns\n const windowsFonts = available.filter(f => \n ['Calibri', 'Segoe UI Light', 'MS UI Gothic', 'Arial Unicode MS'].includes(f)\n ).length;\n \n const macOSFonts = available.filter(f =>\n ['Helvetica Neue', 'Avenir', 'Menlo', 'Zapfino', 'Baskerville'].includes(f)\n ).length;\n \n const linuxFonts = available.filter(f =>\n ['DejaVu Sans', 'Liberation Sans', 'Ubuntu'].includes(f)\n ).length;\n \n const androidFonts = available.filter(f =>\n ['sans-serif-thin', 'Roboto'].includes(f)\n ).length;\n \n let osSignature = 'unknown';\n if (windowsFonts >= 2) osSignature = 'windows';\n else if (macOSFonts >= 2) osSignature = 'macos';\n else if (linuxFonts >= 1) osSignature = 'linux';\n else if (androidFonts >= 1) osSignature = 'android';\n \n // Browser capabilities score\n const browserCapabilities = Math.min(detectionTime < 100 ? 1 : 0.8, 1);\n \n // Uniqueness based on font combination rarity\n const commonFonts = ['Arial', 'Times New Roman', 'Helvetica'];\n const rareFonts = available.filter(f => !commonFonts.includes(f));\n const uniqueness = Math.min(rareFonts.length / 10, 1);\n \n return {\n confidence: Math.round(confidence * 100) / 100,\n uniqueness: Math.round(uniqueness * 100) / 100,\n osSignature,\n browserCapabilities: Math.round(browserCapabilities * 100) / 100\n };\n}\n\n/**\n * Get a compact hash of the font fingerprint\n */\nexport function getEnhancedFontFingerprintHash(fingerprint: EnhancedFontFingerprint): string {\n const sortedFonts = fingerprint.available.sort();\n return `${sortedFonts.join(',')}|${fingerprint.method}|${fingerprint.precision.toFixed(2)}`;\n}","/**\n * Enhanced Math Fingerprinting\n * Based on FingerprintJS math fingerprinting with additional precision tests\n * \n * This component tests JavaScript math operations precision which varies between:\n * - Different JavaScript engines (V8, SpiderMonkey, JavaScriptCore)\n * - Different hardware architectures (x86, ARM, etc.)\n * - Different operating systems\n * - Different browser versions\n * \n * @see https://gitlab.torproject.org/legacy/trac/-/issues/13018\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=531915\n */\n\nexport interface MathFingerprint {\n // Basic trigonometric functions\n acos: number;\n asin: number;\n atan: number;\n cos: number;\n sin: number;\n tan: number;\n \n // Hyperbolic functions\n acosh: number;\n asinh: number;\n atanh: number;\n cosh: number;\n sinh: number;\n tanh: number;\n \n // Exponential and logarithmic functions\n exp: number;\n expm1: number;\n log1p: number;\n \n // Advanced mathematical operations\n powPI: number;\n cbrt: number;\n hypot: number;\n log10: number;\n log2: number;\n \n // Polyfill implementations for comparison\n acoshPf: number;\n asinhPf: number;\n atanhPf: number;\n sinhPf: number;\n coshPf: number;\n expm1Pf: number;\n tanhPf: number;\n log1pPf: number;\n \n // Engine-specific precision tests\n precision: {\n float32: number;\n float64: number;\n bigNumbers: number;\n smallNumbers: number;\n };\n}\n\nconst M = Math; // Minification optimization\nconst fallbackFn = () => 0;\n\n/**\n * Enhanced math fingerprinting with additional precision tests\n */\nexport function getMathFingerprint(): MathFingerprint {\n // Native operations with fallbacks\n const acos = M.acos || fallbackFn;\n const acosh = M.acosh || fallbackFn;\n const asin = M.asin || fallbackFn;\n const asinh = M.asinh || fallbackFn;\n const atanh = M.atanh || fallbackFn;\n const atan = M.atan || fallbackFn;\n const sin = M.sin || fallbackFn;\n const sinh = M.sinh || fallbackFn;\n const cos = M.cos || fallbackFn;\n const cosh = M.cosh || fallbackFn;\n const tan = M.tan || fallbackFn;\n const tanh = M.tanh || fallbackFn;\n const exp = M.exp || fallbackFn;\n const expm1 = M.expm1 || fallbackFn;\n const log1p = M.log1p || fallbackFn;\n const cbrt = M.cbrt || fallbackFn;\n const hypot = M.hypot || fallbackFn;\n const log10 = M.log10 || fallbackFn;\n const log2 = M.log2 || fallbackFn;\n\n // Polyfill implementations for comparison\n const powPI = (value: number) => M.pow(M.PI, value);\n const acoshPf = (value: number) => M.log(value + M.sqrt(value * value - 1));\n const asinhPf = (value: number) => M.log(value + M.sqrt(value * value + 1));\n const atanhPf = (value: number) => M.log((1 + value) / (1 - value)) / 2;\n const sinhPf = (value: number) => (M.exp(value) - M.exp(-value)) / 2;\n const coshPf = (value: number) => (M.exp(value) + M.exp(-value)) / 2;\n const expm1Pf = (value: number) => M.exp(value) - 1;\n const tanhPf = (value: number) => (M.exp(2 * value) - 1) / (M.exp(2 * value) + 1);\n const log1pPf = (value: number) => M.log(1 + value);\n\n // Precision tests for different number ranges\n const testFloat32 = () => {\n // Test 32-bit float precision\n const a = 1.0000001;\n const b = 1.0000002;\n return M.abs(a + b - 2.0000003);\n };\n\n const testFloat64 = () => {\n // Test 64-bit float precision\n const a = 1.0000000000000001;\n const b = 1.0000000000000002;\n return M.abs(a + b - 2.0000000000000003);\n };\n\n const testBigNumbers = () => {\n // Test precision with large numbers\n const big1 = 1e15;\n const big2 = 1e15 + 1;\n return M.abs(big2 - big1);\n };\n\n const testSmallNumbers = () => {\n // Test precision with very small numbers\n const small1 = 1e-15;\n const small2 = 2e-15;\n return M.abs(small1 + small2 - 3e-15);\n };\n\n // Empirically chosen constants for maximum fingerprint stability\n return {\n // Basic trigonometric functions\n acos: acos(0.123124234234234242),\n asin: asin(0.123124234234234242),\n atan: atan(0.5),\n cos: cos(10.000000000123),\n sin: sin(-1e300),\n tan: tan(-1e300),\n \n // Hyperbolic functions\n acosh: acosh(1e308),\n asinh: asinh(1),\n atanh: atanh(0.5),\n cosh: cosh(1),\n sinh: sinh(1),\n tanh: tanh(1),\n \n // Exponential and logarithmic functions\n exp: exp(1),\n expm1: expm1(1),\n log1p: log1p(10),\n \n // Advanced mathematical operations\n powPI: powPI(-100),\n cbrt: cbrt(27),\n hypot: hypot(3, 4),\n log10: log10(100),\n log2: log2(8),\n \n // Polyfill implementations\n acoshPf: acoshPf(1e154), // 1e308 will not work for polyfill\n asinhPf: asinhPf(1),\n atanhPf: atanhPf(0.5),\n sinhPf: sinhPf(1),\n coshPf: coshPf(1),\n expm1Pf: expm1Pf(1),\n tanhPf: tanhPf(1),\n log1pPf: log1pPf(10),\n \n // Precision tests\n precision: {\n float32: testFloat32(),\n float64: testFloat64(),\n bigNumbers: testBigNumbers(),\n smallNumbers: testSmallNumbers(),\n }\n };\n}\n\n/**\n * Check if math fingerprinting is available\n */\nexport function isMathFingerprintingAvailable(): boolean {\n try {\n return typeof Math !== 'undefined' && \n typeof Math.sin === 'function';\n } catch {\n return false;\n }\n}\n\n/**\n * Get a hash of the math fingerprint for quick comparison\n */\nexport function getMathFingerprintHash(): string {\n try {\n const mathData = getMathFingerprint();\n \n // Create a stable string representation\n const values = [\n mathData.acos, mathData.asin, mathData.atan,\n mathData.cos, mathData.sin, mathData.tan,\n mathData.acosh, mathData.asinh, mathData.atanh,\n mathData.cosh, mathData.sinh, mathData.tanh,\n mathData.exp, mathData.expm1, mathData.log1p,\n mathData.powPI, mathData.cbrt, mathData.hypot,\n mathData.log10, mathData.log2,\n mathData.precision.float32, mathData.precision.float64,\n mathData.precision.bigNumbers, mathData.precision.smallNumbers\n ];\n \n return values.join(',');\n } catch {\n return 'math-unavailable';\n }\n}\n\n/**\n * Analyze math fingerprint stability and provide confidence score\n */\nexport function analyzeMathFingerprint(mathData: MathFingerprint): {\n confidence: number;\n stability: 'high' | 'medium' | 'low';\n uniqueness: number;\n} {\n let confidence = 0.9; // Start with high confidence\n let uniqueness = 0.8;\n \n // Check for obvious fallback values (all zeros)\n const hasRealValues = Object.values(mathData).some(val => \n typeof val === 'number' && val !== 0\n );\n \n if (!hasRealValues) {\n confidence = 0.1;\n uniqueness = 0.1;\n }\n \n // Check precision test results\n const precisionScore = Object.values(mathData.precision).reduce((sum, val) => {\n return sum + (typeof val === 'number' && !isNaN(val) ? 1 : 0);\n }, 0) / 4;\n \n confidence *= precisionScore;\n \n // Determine stability based on confidence\n let stability: 'high' | 'medium' | 'low' = 'high';\n if (confidence < 0.3) stability = 'low';\n else if (confidence < 0.7) stability = 'medium';\n \n return {\n confidence: Math.round(confidence * 100) / 100,\n stability,\n uniqueness: Math.round(uniqueness * 100) / 100\n };\n}","/**\n * Fingerprint Orchestrator\n * Main fingerprinting engine that coordinates all components\n * Based on FingerprintJS architecture with privacy-first approach\n */\n\nimport type {\n FingerprintComponent,\n FingerprintComponentType,\n FingerprintData,\n FingerprintOptions,\n FingerprintResult,\n} from \"../types/fingerprint\";\n\n// Import individual fingerprinting components\nimport { getAudioFingerprint, isAudioAvailable } from \"./fingerprint/audio\";\nimport {\n getBrowserFingerprint,\n isBrowserFingerprintingAvailable,\n} from \"./fingerprint/browser\";\nimport { getCanvasFingerprint, isCanvasAvailable } from \"./fingerprint/canvas\";\nimport {\n getFontFingerprint,\n isFontDetectionAvailable,\n} from \"./fingerprint/fonts\";\nimport {\n generateVisitorId,\n hashFingerprint,\n hashStableCore,\n} from \"./fingerprint/hashing\";\nimport { getScreenFingerprint, isScreenAvailable } from \"./fingerprint/screen\";\nimport { getWebGLFingerprint, isWebGLAvailable } from \"./fingerprint/webgl\";\n\n// Import new enhanced components from FingerprintJS\nimport {\n analyzeAccessibilityFingerprint,\n getAccessibilityFingerprint,\n isAccessibilityDetectionAvailable,\n} from \"./fingerprint/accessibility\";\nimport {\n analyzeDateTimeLocale,\n getDateTimeLocale,\n getDateTimeLocaleHash,\n isDateTimeLocaleAvailable,\n} from \"./fingerprint/datetime-locale\";\nimport {\n analyzeFontPreferences,\n getFontPreferences,\n getFontPreferencesHash,\n isFontPreferencesAvailable,\n} from \"./fingerprint/font-preferences\";\nimport {\n analyzeEnhancedFontFingerprint,\n getEnhancedFontFingerprint,\n getEnhancedFontFingerprintHash,\n isEnhancedFontDetectionAvailable,\n} from \"./fingerprint/fonts-enhanced\";\nimport {\n analyzeMathFingerprint,\n getMathFingerprint,\n getMathFingerprintHash,\n isMathFingerprintingAvailable,\n} from \"./fingerprint/math-enhanced\";\n\n// Import enhanced browser detection utilities\nimport { getBrowserInfo } from \"../utils/browser\";\n\n/**\n * Default fingerprint options (cookieless - memory cache only)\n */\nconst DEFAULT_OPTIONS: Required<FingerprintOptions> = {\n gdprMode: false,\n includeInvasive: true,\n timeout: 5000,\n debug: false,\n excludeComponents: [],\n};\n\n/**\n * Session-only cache for fingerprint components (memory only, no persistence)\n */\nconst sessionCache = new Map<string, any>();\n\n/**\n * Check if component should be included based on options\n */\nfunction shouldIncludeComponent(\n component: FingerprintComponentType,\n options: Required<FingerprintOptions>\n): boolean {\n // Check if component is excluded\n if (options.excludeComponents.includes(component)) {\n return false;\n }\n\n // In GDPR mode, exclude invasive components unless explicitly allowed\n if (options.gdprMode && !options.includeInvasive) {\n const invasiveComponents: FingerprintComponentType[] = [\n \"canvas\",\n \"webgl\",\n \"audio\",\n \"fontPreferences\", // Uses iframe, could be considered invasive\n \"enhancedFonts\", // Uses iframe, could be considered invasive\n ];\n if (invasiveComponents.includes(component)) {\n return false;\n }\n }\n\n // New FingerprintJS components are enabled by default in non-GDPR mode\n const fingerprintJSComponents: FingerprintComponentType[] = [\n \"mathFingerprint\",\n \"dateTimeLocale\",\n \"accessibilityEnhanced\",\n \"fontPreferences\",\n \"enhancedFonts\",\n ];\n\n // Always allow FingerprintJS components unless specifically excluded\n if (fingerprintJSComponents.includes(component)) {\n return true;\n }\n\n return true;\n}\n\n/**\n * Get cached component data from session cache (memory only)\n */\nfunction getSessionCachedComponent(key: string): any | null {\n return sessionCache.get(key) || null;\n}\n\n/**\n * Cache component data in session memory only\n */\nfunction setSessionCachedComponent(key: string, data: any): void {\n sessionCache.set(key, data);\n}\n\n/**\n * Collect fingerprint component with timeout, intelligent retry logic, and session caching\n * Enhanced to prevent WebGL context leaks during retries\n */\nasync function collectComponent<T>(\n componentType: FingerprintComponentType,\n collector: () => Promise<T>,\n options: Required<FingerprintOptions>\n): Promise<T | null> {\n const cacheKey = `${componentType}_${options.gdprMode}`;\n\n // Check session cache first (memory only)\n const cached = getSessionCachedComponent(cacheKey);\n if (cached) {\n return cached;\n }\n\n // Enhanced retry logic - limit retries for WebGL to prevent context leaks\n const isWebGLComponent = componentType === \"webgl\";\n const isCriticalComponent = [\n \"canvas\",\n \"webgl\",\n \"audio\",\n \"hardware\",\n \"system\",\n ].includes(componentType);\n\n // Reduce retries for WebGL to prevent context leaks\n const maxRetries = isWebGLComponent ? 2 : isCriticalComponent ? 3 : 1;\n const retryDelays = isWebGLComponent ? [200, 500] : [100, 250, 500]; // Longer delays for WebGL\n\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n // Create timeout promise with progressive timeout increase\n const timeoutDuration =\n options.timeout + attempt * (isWebGLComponent ? 2000 : 1000);\n const timeoutPromise = new Promise<T>((_, reject) => {\n setTimeout(\n () =>\n reject(\n new Error(\n `${componentType} timeout after ${timeoutDuration}ms (attempt ${attempt + 1})`\n )\n ),\n timeoutDuration\n );\n });\n\n // Race collection vs timeout\n const result = await Promise.race([collector(), timeoutPromise]);\n\n // Validate result before caching\n if (result !== null && result !== undefined) {\n // Cache successful result in session memory only\n setSessionCachedComponent(cacheKey, result);\n return result;\n } else {\n throw new Error(`${componentType} returned null/undefined result`);\n }\n } catch (error) {\n const isLastAttempt = attempt === maxRetries - 1;\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n\n // Special handling for WebGL context issues\n if (isWebGLComponent && errorMessage.includes(\"context\")) {\n console.warn(\n `[RabbitTracker] WebGL context issue detected: ${errorMessage}`\n );\n // Force cleanup WebGL cache to prevent context accumulation\n try {\n const { forceCleanupWebGL } = await import(\"../utils/webgl-cache\");\n forceCleanupWebGL();\n } catch (cleanupError) {\n // Ignore cleanup errors\n }\n // Don't retry on context issues - they're unlikely to resolve quickly\n return null;\n }\n\n if (isLastAttempt) {\n // Log final failure for debugging\n console.warn(\n `[RabbitTracker] Component ${componentType} failed after ${maxRetries} attempts: ${errorMessage}`\n );\n return null;\n } else {\n // Wait before retry (with longer delays for WebGL)\n if (!errorMessage.includes(\"timeout\") && attempt < retryDelays.length) {\n await new Promise((resolve) =>\n setTimeout(resolve, retryDelays[attempt])\n );\n }\n\n // For WebGL, add small additional delay to let contexts settle\n if (isWebGLComponent) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n }\n }\n }\n\n return null;\n}\n\n/**\n * Main fingerprint collection function\n */\nexport async function collectFingerprint(\n options: Partial<FingerprintOptions> = {}\n): Promise<FingerprintResult> {\n const startTime = performance.now();\n const opts = { ...DEFAULT_OPTIONS, ...options };\n\n const collectedComponents: FingerprintComponentType[] = [];\n const failedComponents: {\n component: FingerprintComponentType;\n error: string;\n }[] = [];\n\n const fingerprintData: Partial<FingerprintData> = {\n collectionTime: startTime,\n gdprMode: opts.gdprMode,\n components: [],\n };\n\n // OPTIMIZATION: Collect independent fingerprint components in parallel\n // This reduces total collection time from 3-5s to 500ms-1s\n const parallelTasks: Promise<{ component: string; result: any }>[] = [];\n\n // Group 1: Independent rendering components (can run in parallel)\n if (shouldIncludeComponent(\"canvas\", opts) && isCanvasAvailable()) {\n parallelTasks.push(\n collectComponent(\"canvas\", getCanvasFingerprint, opts).then((result) => ({\n component: \"canvas\",\n result,\n }))\n );\n }\n\n if (shouldIncludeComponent(\"webgl\", opts) && isWebGLAvailable()) {\n parallelTasks.push(\n collectComponent(\"webgl\", getWebGLFingerprint, opts).then((result) => ({\n component: \"webgl\",\n result,\n }))\n );\n }\n\n if (shouldIncludeComponent(\"audio\", opts) && isAudioAvailable()) {\n parallelTasks.push(\n collectComponent(\"audio\", getAudioFingerprint, opts).then((result) => ({\n component: \"audio\",\n result,\n }))\n );\n }\n\n // Group 2: Fast synchronous components (can run in parallel)\n if (shouldIncludeComponent(\"fonts\", opts) && isFontDetectionAvailable()) {\n parallelTasks.push(\n collectComponent(\n \"fonts\",\n () => getFontFingerprint(!opts.gdprMode),\n opts\n ).then((result) => ({\n component: \"fonts\",\n result,\n }))\n );\n }\n\n if (shouldIncludeComponent(\"screen\", opts) && isScreenAvailable()) {\n parallelTasks.push(\n collectComponent(\"screen\", getScreenFingerprint, opts).then((result) => ({\n component: \"screen\",\n result,\n }))\n );\n }\n\n if (\n shouldIncludeComponent(\"browser\", opts) &&\n isBrowserFingerprintingAvailable()\n ) {\n parallelTasks.push(\n collectComponent(\"browser\", getBrowserFingerprint, opts).then(\n (result) => ({\n component: \"browser\",\n result,\n })\n )\n );\n }\n\n // Execute all parallel tasks and handle results\n const parallelResults = await Promise.allSettled(parallelTasks);\n\n parallelResults.forEach((promiseResult, index) => {\n if (promiseResult.status === \"fulfilled\" && promiseResult.value.result) {\n const { component, result } = promiseResult.value;\n (fingerprintData as any)[component] = result;\n collectedComponents.push(component as any);\n } else {\n // Extract component name from the corresponding task\n const taskComponent = parallelTasks[index];\n const componentName =\n taskComponent?.toString().match(/component: \"(\\w+)\"/)?.[1] || \"unknown\";\n failedComponents.push({\n component: componentName as any,\n error:\n promiseResult.status === \"rejected\"\n ? promiseResult.reason?.message || \"Promise rejected\"\n : \"Collection failed or timeout\",\n });\n }\n });\n\n // ADDED: Collect Incognito Detection (IMPROVED - 2024)\n // Only in enhanced mode for better accuracy\n if (!opts.gdprMode) {\n try {\n // Import incognito detection module\n const { detectIncognitoHeuristics } = await import(\n \"./fingerprint/incognito\"\n );\n const incognitoResult = await detectIncognitoHeuristics();\n\n if (incognitoResult) {\n (fingerprintData as any).incognitoDetection = {\n likelihood: incognitoResult.likelihood,\n methods: incognitoResult.methods,\n };\n\n // Add incognito to collected components for tracking\n collectedComponents.push(\"incognito\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"incognito\",\n error:\n error instanceof Error ? error.message : \"Incognito detection failed\",\n });\n }\n }\n\n // Collect Hardware fingerprint (NEW - inspired by FingerprintJS)\n if (shouldIncludeComponent(\"hardware\", opts)) {\n try {\n const hardwareModule = await import(\"./fingerprint/hardware\").catch(\n () => null\n );\n if (hardwareModule?.isHardwareDetectionAvailable?.()) {\n const result = hardwareModule.getHardwareFingerprint?.();\n if (result) {\n (fingerprintData as any).hardware = {\n value: result,\n duration: 0, // Synchronous operation\n };\n collectedComponents.push(\"hardware\");\n }\n } else if (!hardwareModule) {\n // Fallback for when module fails to load\n const fallbackHardware = {\n hardwareConcurrency: navigator.hardwareConcurrency || 0,\n deviceMemory: (navigator as any).deviceMemory || 0,\n platform: navigator.platform || \"unknown\",\n };\n (fingerprintData as any).hardware = {\n value: fallbackHardware,\n duration: 0,\n };\n collectedComponents.push(\"hardware\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"hardware\",\n error:\n error instanceof Error ? error.message : \"Hardware detection failed\",\n });\n }\n }\n\n // Collect System fingerprint (NEW - inspired by FingerprintJS)\n if (shouldIncludeComponent(\"system\", opts)) {\n try {\n const { getSystemFingerprint, isSystemDetectionAvailable } = await import(\n \"./fingerprint/system\"\n );\n if (isSystemDetectionAvailable()) {\n const result = getSystemFingerprint();\n if (result) {\n (fingerprintData as any).system = {\n value: result,\n duration: 0, // Synchronous operation\n };\n collectedComponents.push(\"system\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"system\",\n error:\n error instanceof Error ? error.message : \"System detection failed\",\n });\n }\n }\n\n // Collect Storage fingerprint (NEW - inspired by FingerprintJS)\n if (shouldIncludeComponent(\"storage\", opts)) {\n try {\n const { getStorageFingerprint, isStorageDetectionAvailable } =\n await import(\"./fingerprint/storage\");\n if (isStorageDetectionAvailable()) {\n const startTime = performance.now();\n const result = await getStorageFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).storage = {\n value: result,\n duration,\n };\n collectedComponents.push(\"storage\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"storage\",\n error:\n error instanceof Error ? error.message : \"Storage detection failed\",\n });\n }\n }\n\n // Collect Math fingerprint (NEW - inspired by FingerprintJS)\n if (shouldIncludeComponent(\"math\", opts)) {\n try {\n const { getCompleteMathFingerprint, isMathDetectionAvailable } =\n await import(\"./fingerprint/math\");\n if (isMathDetectionAvailable()) {\n const startTime = performance.now();\n const result = getCompleteMathFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).math = {\n value: result,\n duration,\n };\n collectedComponents.push(\"math\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"math\",\n error:\n error instanceof Error ? error.message : \"Math fingerprinting failed\",\n });\n }\n }\n\n // Collect DOM Blockers fingerprint (NEW - advanced FingerprintJS technique)\n if (shouldIncludeComponent(\"domBlockers\", opts)) {\n try {\n const { getDomBlockersFingerprint, isDomBlockersDetectionAvailable } =\n await import(\"./fingerprint/dom-blockers\");\n if (isDomBlockersDetectionAvailable()) {\n const startTime = performance.now();\n const result = await getDomBlockersFingerprint({ debug: opts.debug });\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).domBlockers = {\n value: result,\n duration,\n };\n collectedComponents.push(\"domBlockers\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"domBlockers\",\n error:\n error instanceof Error\n ? error.message\n : \"DOM blockers detection failed\",\n });\n }\n }\n\n // Collect Accessibility fingerprint (NEW - media queries and preferences)\n if (shouldIncludeComponent(\"accessibility\", opts)) {\n try {\n const { getAccessibilityFingerprint, isAccessibilityDetectionAvailable } =\n await import(\"./fingerprint/accessibility\");\n if (isAccessibilityDetectionAvailable()) {\n const startTime = performance.now();\n const result = getAccessibilityFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).accessibility = {\n value: result,\n duration,\n };\n collectedComponents.push(\"accessibility\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"accessibility\",\n error:\n error instanceof Error\n ? error.message\n : \"Accessibility detection failed\",\n });\n }\n }\n\n // Collect Browser APIs fingerprint (NEW - browser-specific APIs)\n if (shouldIncludeComponent(\"browserApis\", opts)) {\n try {\n const { getBrowserApisFingerprint, isBrowserApisDetectionAvailable } =\n await import(\"./fingerprint/browser-apis\");\n if (isBrowserApisDetectionAvailable()) {\n const startTime = performance.now();\n const result = getBrowserApisFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).browserApis = {\n value: result,\n duration,\n };\n collectedComponents.push(\"browserApis\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"browserApis\",\n error:\n error instanceof Error\n ? error.message\n : \"Browser APIs detection failed\",\n });\n }\n }\n\n // Collect Enhanced Plugins fingerprint (NEW - enhanced plugin detection)\n if (shouldIncludeComponent(\"pluginsEnhanced\", opts)) {\n try {\n const {\n getEnhancedPluginFingerprint,\n isEnhancedPluginDetectionAvailable,\n } = await import(\"./fingerprint/plugins-enhanced\");\n if (isEnhancedPluginDetectionAvailable()) {\n const startTime = performance.now();\n const result = getEnhancedPluginFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).pluginsEnhanced = {\n value: result,\n duration,\n };\n collectedComponents.push(\"pluginsEnhanced\");\n }\n }\n } catch (error) {\n failedComponents.push({\n component: \"pluginsEnhanced\",\n error:\n error instanceof Error\n ? error.message\n : \"Enhanced plugin detection failed\",\n });\n }\n }\n\n // ===== NEW FINGERPRINTJS-INSPIRED COMPONENTS =====\n\n // Collect Math fingerprinting (PRIORITY 1 - Maximum stability)\n if (\n shouldIncludeComponent(\"mathFingerprint\", opts) &&\n isMathFingerprintingAvailable()\n ) {\n try {\n const startTime = performance.now();\n const result = getMathFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).mathFingerprint = {\n value: result,\n duration,\n analysis: analyzeMathFingerprint(result),\n hash: getMathFingerprintHash(),\n };\n collectedComponents.push(\"mathFingerprint\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"mathFingerprint\",\n error:\n error instanceof Error ? error.message : \"Math fingerprinting failed\",\n });\n }\n }\n\n // Collect Font Preferences (PRIORITY 2 - High differentiation)\n if (\n shouldIncludeComponent(\"fontPreferences\", opts) &&\n isFontPreferencesAvailable()\n ) {\n try {\n const startTime = performance.now();\n const result = await getFontPreferences();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).fontPreferences = {\n value: result,\n duration,\n analysis: analyzeFontPreferences(result),\n hash: getFontPreferencesHash(result),\n };\n collectedComponents.push(\"fontPreferences\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"fontPreferences\",\n error:\n error instanceof Error\n ? error.message\n : \"Font preferences detection failed\",\n });\n }\n }\n\n // Collect DateTime Locale (PRIORITY 3 - Improved precision)\n if (\n shouldIncludeComponent(\"dateTimeLocale\", opts) &&\n isDateTimeLocaleAvailable()\n ) {\n try {\n const startTime = performance.now();\n const result = getDateTimeLocale();\n const duration = performance.now() - startTime;\n\n if (result && typeof result === \"object\") {\n (fingerprintData as any).dateTimeLocale = {\n value: result,\n duration,\n analysis: analyzeDateTimeLocale(result),\n hash: getDateTimeLocaleHash(result),\n };\n collectedComponents.push(\"dateTimeLocale\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"dateTimeLocale\",\n error:\n error instanceof Error\n ? error.message\n : \"DateTime locale detection failed\",\n });\n }\n }\n\n // Collect Enhanced Accessibility (PRIORITY 4 - Additional entropy)\n if (\n shouldIncludeComponent(\"accessibilityEnhanced\", opts) &&\n isAccessibilityDetectionAvailable()\n ) {\n try {\n const startTime = performance.now();\n const result = getAccessibilityFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).accessibilityEnhanced = {\n value: result,\n duration,\n analysis: analyzeAccessibilityFingerprint(result),\n };\n collectedComponents.push(\"accessibilityEnhanced\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"accessibilityEnhanced\",\n error:\n error instanceof Error\n ? error.message\n : \"Enhanced accessibility detection failed\",\n });\n }\n }\n\n // Collect Enhanced Font Detection with iframe isolation (PRIORITY 5)\n if (\n shouldIncludeComponent(\"enhancedFonts\", opts) &&\n isEnhancedFontDetectionAvailable()\n ) {\n try {\n const startTime = performance.now();\n const result = await getEnhancedFontFingerprint();\n const duration = performance.now() - startTime;\n\n if (result) {\n (fingerprintData as any).enhancedFonts = {\n value: result,\n duration,\n analysis: analyzeEnhancedFontFingerprint(result),\n hash: getEnhancedFontFingerprintHash(result),\n };\n collectedComponents.push(\"enhancedFonts\");\n }\n } catch (error) {\n failedComponents.push({\n component: \"enhancedFonts\",\n error:\n error instanceof Error\n ? error.message\n : \"Enhanced font detection failed\",\n });\n }\n }\n\n // Generate hash from collected components\n const componentValues: Record<string, any> = {};\n\n collectedComponents.forEach((component) => {\n const componentData = fingerprintData[\n component as keyof FingerprintData\n ] as FingerprintComponent<any>;\n if (componentData && componentData.value) {\n componentValues[component] = componentData.value;\n }\n });\n\n // PLACEHOLDER: Final fingerprint hash will be generated after stable core vector\n const hash = \"\";\n\n // Calculate confidence score using the new confidence system\n let confidenceResult;\n try {\n const { calculateConfidence } = await import(\"./fingerprint/confidence\");\n const componentResults = [\n ...collectedComponents.map((comp) => ({\n component: comp,\n success: true,\n duration: (fingerprintData as any)[comp]?.duration || 0,\n value: (fingerprintData as any)[comp]?.value,\n })),\n ...failedComponents.map((fail) => ({\n component: fail.component,\n success: false,\n duration: 0,\n error: fail.error,\n })),\n ];\n\n confidenceResult = calculateConfidence(componentResults, {\n requireMinimumComponents: 6,\n penalizeMissingCore: true,\n adjustForIncognito: true,\n });\n\n // Add confidence data to fingerprint\n (fingerprintData as any).confidence = {\n score: confidenceResult.score,\n level: confidenceResult.level,\n factors: confidenceResult.factors,\n recommendations: confidenceResult.recommendations,\n };\n } catch (error) {\n // Fallback confidence calculation\n const successRate =\n collectedComponents.length /\n (collectedComponents.length + failedComponents.length || 1);\n (fingerprintData as any).confidence = {\n score: successRate >= 0.8 ? 0.95 : successRate >= 0.6 ? 0.8 : 0.5,\n level:\n successRate >= 0.8 ? \"High\" : successRate >= 0.6 ? \"Medium\" : \"Low\",\n factors: {\n componentCount: collectedComponents.length,\n weightedScore: successRate,\n stabilityScore: successRate,\n entropyScore: successRate,\n spoofResistanceScore: successRate,\n },\n recommendations:\n successRate < 0.8 ? [\"Enable more fingerprinting components\"] : [],\n };\n }\n\n // Finalize fingerprint data\n const finalData: FingerprintData = {\n ...(fingerprintData as FingerprintData),\n hash,\n components: collectedComponents,\n collectionTime: performance.now() - startTime,\n };\n\n const result: FingerprintResult = {\n success: collectedComponents.length > 0,\n collectedComponents,\n failedComponents,\n confidence: confidenceResult || (fingerprintData as any).confidence,\n };\n\n if (collectedComponents.length > 0) {\n // Build stable core vector (invariants only)\n const browser = finalData.browser?.value;\n const screen = finalData.screen?.value;\n const uaStr = browser?.userAgent || \"\";\n const isSafari =\n /safari/i.test(uaStr) && !/chrome|chromium|opr|edg|edge/i.test(uaStr);\n const deviceType = (() => {\n const isMobileCH = (navigator as any).userAgentData?.mobile === true;\n const touch = (navigator as any).maxTouchPoints || 0;\n const w = screen?.width || 0;\n const h = screen?.height || 0;\n const minDim = Math.min(w, h);\n const maxDim = Math.max(w, h);\n\n // More precise detection: differentiate mobile, tablet, and desktop\n if (isMobileCH) {\n // Client Hints says mobile = definitely mobile\n return \"mobile\";\n }\n\n if (touch > 0) {\n // Has touch capability\n if (minDim <= 480) {\n return \"mobile\"; // Small screen = phone\n } else if (minDim <= 1024 && maxDim <= 1366) {\n return \"tablet\"; // Medium screen = tablet\n } else {\n return \"tablet\"; // Large touch device = tablet\n }\n }\n\n // No touch, large screen = desktop\n if (minDim > 1024) {\n return \"desktop\";\n }\n\n // Small screen without touch = could be mobile in desktop mode\n // Default to mobile for safety\n return minDim <= 480 ? \"mobile\" : \"desktop\";\n })();\n\n // Collect device-specific signals (FingerprintJS-inspired)\n let deviceSignals: any = {};\n try {\n const { collectDeviceSignals } = await import(\n \"./fingerprint/device-signals\"\n );\n deviceSignals = collectDeviceSignals();\n } catch (error) {\n // Silently fail - device signals are optional\n }\n\n const coreVector: Record<string, any> = {\n // PRIORITY 1: Enhanced browser detection with precise Chromium-based browser identification\n ua: (() => {\n try {\n const browserInfo = getBrowserInfo();\n\n // Use the precise browser family for maximum differentiation\n // This properly distinguishes Brave, Arc, Opera, etc. from Chrome\n return browserInfo.family; // e.g., \"brave-chromium\", \"arc-chromium\", \"chrome\", \"firefox\"\n } catch {\n // Fallback to legacy detection if imports fail\n const ua = uaStr;\n const m = ua.match(\n /(chrome|safari|firefox|edge|edg|brave|opera|opr|chromium)/i\n );\n const family = (\n m?.[1] ||\n ua.split(\" \")[0] ||\n \"unknown\"\n ).toLowerCase();\n return family;\n }\n })(),\n // PRIORITY 2: Timezone (very stable, changes rarely)\n timezone: browser?.timezone || \"unknown\",\n\n // PRIORITY 3: Primary language only (most stable language preference)\n // Remove secondary languages as they can change more frequently\n primaryLanguage:\n Array.isArray(browser?.languages) &&\n browser.languages.length > 0 &&\n browser.languages[0]\n ? browser.languages[0].toLowerCase().split(\"-\")[0] // Only language code (en, pt, fr), not region\n : \"unknown\",\n // PRIORITY 4: Platform (ultra-stable - OS doesn't change)\n platform: (browser?.platform || \"unknown\").toLowerCase(),\n\n // PRIORITY 5: Device type (critical for differentiation, ultra-stable)\n deviceType,\n // PRIORITY 6: Enhanced screen resolution - ONLY for mobile/tablet\n // CRITICAL: Desktop screen detection is UNSTABLE with DevTools (viewport changes)\n // For desktop, we rely on hardware + display + platform for differentiation\n // For mobile/tablet, screen is STABLE (no DevTools viewport issues)\n screen:\n screen && (deviceType === \"mobile\" || deviceType === \"tablet\")\n ? (() => {\n // Use enhanced screen buckets for modern display landscape\n const dims = [screen.width, screen.height].sort((a, b) => b - a);\n const w = dims[0];\n const h = dims[1];\n\n // Enhanced screen bucketing based on 2024 display standards\n const getScreenBucket = (width: number, height: number) => {\n // Ultra-high resolution displays (2024: 8K, 5K, etc.)\n if (width >= 7680) return \"8k\"; // 8K displays\n if (width >= 5120) return \"5k\"; // 5K displays (iMac, etc.)\n if (width >= 4096) return \"4k_cinema\"; // Cinema 4K\n if (width >= 3840) return \"4k_uhd\"; // 4K UHD standard\n if (width >= 3440) return \"ultrawide\"; // Ultrawide QHD\n if (width >= 2880) return \"retina_4k\"; // Retina 4K/5K scaled\n if (width >= 2560) return \"qhd\"; // QHD/WQHD\n\n // Standard high-resolution displays\n if (width >= 2048) return \"qxga\"; // QXGA\n if (width >= 1920) return \"fhd\"; // Full HD 1080p\n if (width >= 1680) return \"wsxga+\"; // WSXGA+\n if (width >= 1600) return \"uxga\"; // UXGA\n if (width >= 1440) return \"wxga++\"; // WXGA++\n if (width >= 1366) return \"hd\"; // HD 720p\n if (width >= 1280) return \"sxga\"; // SXGA\n\n // Tablet and mobile displays\n if (width >= 1024) return \"xga\"; // XGA (tablets)\n if (width >= 768) return \"svga\"; // SVGA (small tablets)\n if (width >= 640) return \"vga\"; // VGA (phones)\n if (width >= 480) return \"hvga\"; // HVGA (older phones)\n if (width >= 320) return \"qvga\"; // QVGA (legacy phones)\n return \"minimal\"; // Sub-QVGA\n };\n\n // Enhanced aspect ratio classification for device type hints\n const getAspectRatioClass = (width: number, height: number) => {\n if (height === 0) return \"unknown\";\n const ratio = width / height;\n\n // Ultra-wide displays (gaming, productivity)\n if (ratio >= 3.0) return \"super_ultrawide\"; // 32:9+\n if (ratio >= 2.3) return \"ultrawide\"; // 21:9\n if (ratio >= 2.0) return \"wide\"; // 18:9\n\n // Standard desktop ratios\n if (ratio >= 1.7 && ratio <= 1.8) return \"standard\"; // 16:9\n if (ratio >= 1.6 && ratio <= 1.67) return \"classic\"; // 16:10, 5:3\n if (ratio >= 1.3 && ratio <= 1.35) return \"traditional\"; // 4:3\n\n // Mobile/portrait ratios\n if (ratio >= 0.5 && ratio <= 0.8) return \"mobile_portrait\"; // Phones in portrait\n if (ratio >= 0.4 && ratio <= 0.5) return \"tall_mobile\"; // Modern tall phones\n\n return \"custom\"; // Non-standard ratio\n };\n\n // Ensure w and h are valid numbers\n const width = w || 0;\n const height = h || 0;\n\n // Screen density class based on common DPR patterns\n const getDensityClass = (pixelRatio?: number) => {\n if (!pixelRatio) return \"standard\";\n if (pixelRatio >= 3.0) return \"ultra_high\"; // iPhone Plus, high-end Android\n if (pixelRatio >= 2.0) return \"high\"; // Retina, standard high-DPI\n if (pixelRatio >= 1.5) return \"medium\"; // Mid-range displays\n if (pixelRatio >= 1.25) return \"enhanced\"; // Slightly enhanced DPI\n return \"standard\"; // Standard 1x displays\n };\n\n // CRITICAL: Do NOT include exact dimensions in stableCoreVector for mobile!\n // Reason: Screen dimensions change when:\n // - Chrome address bar appears/disappears (scroll behavior)\n // - Virtual keyboard opens/closes\n // - Screen rotates (portrait ↔ landscape)\n // - Browser zoom changes\n // These changes would cause stableCoreHash to change, breaking visitor identification\n //\n // INSTEAD: Use ONLY stable screen characteristics (bucket, aspect, density)\n // For device differentiation (S22 vs A54), use:\n // - screenFrame (bezel measurements)\n // - Combination of bucket + hardware + display\n // - Vector similarity in IdentityResolver\n\n return {\n bucket: getScreenBucket(width, height),\n aspectClass: getAspectRatioClass(width, height),\n densityClass: getDensityClass(\n screen.pixelRatio || window.devicePixelRatio\n ),\n // Simplified ratio for matching (rounded to prevent micro-variations)\n ratio:\n height > 0 ? Math.round((width / height) * 100) / 100 : 0,\n // Size category for general device classification\n sizeCategory:\n width >= 2560\n ? \"large\"\n : width >= 1920\n ? \"desktop\"\n : width >= 1024\n ? \"laptop\"\n : width >= 768\n ? \"tablet\"\n : \"mobile\",\n // ❌ REMOVED: exact dimensions (causes instability on mobile)\n // Device differentiation is now handled by:\n // 1. screenFrame (bezel measurements - stable)\n // 2. hardware + display combination\n // 3. Vector similarity in IdentityResolver\n };\n })()\n : {\n bucket: \"unknown\",\n aspectClass: \"unknown\",\n densityClass: \"unknown\",\n ratio: 0,\n sizeCategory: \"unknown\",\n },\n // CRITICAL: Do NOT include availability flags (canvas/webgl/audio) in stableCoreVector\n // These flags can change between requests due to timeouts, permissions, or hardware issues\n // and would cause the stableCoreHash to change, breaking visitor identification\n // CRITICAL: Plugins removed from stableCoreVector - they are unstable:\n // - Can vary between normal/incognito mode\n // - Can be blocked/hidden in private mode\n // - Can be installed/uninstalled by users\n // - Extensions can change plugin list\n // - Order may vary despite sorting\n // Keep plugins only in full fingerprint for analysis, not in stableCoreHash\n // plugins: removed for stability\n\n // PRIORITY 7: Enhanced hardware characteristics with precise 2024 buckets\n // Use advanced hardware buckets based on current hardware landscape for maximum stability\n hardware: (() => {\n const cores = deviceSignals.hardwareConcurrency;\n const memory = deviceSignals.deviceMemory;\n\n if (!cores && !memory) return undefined;\n\n // Enhanced CPU core buckets based on 2024 hardware trends\n const getCoreBucket = (cores: number) => {\n // High-end workstations and servers (2024: up to 128 cores available)\n if (cores >= 32) return \"workstation\"; // 32+ cores: Threadripper, Xeon\n if (cores >= 20) return \"ultra\"; // 20-31 cores: High-end desktop\n if (cores >= 16) return \"high\"; // 16-19 cores: Gaming/content creation\n if (cores >= 12) return \"premium\"; // 12-15 cores: Modern mid-high desktop\n if (cores >= 8) return \"mid\"; // 8-11 cores: Standard desktop/laptop\n if (cores >= 6) return \"normal\"; // 6-7 cores: Entry-level modern\n if (cores >= 4) return \"basic\"; // 4-5 cores: Older desktop/budget laptop\n if (cores >= 2) return \"low\"; // 2-3 cores: Older mobile/budget\n return \"minimal\"; // 1 core: Legacy/embedded\n };\n\n // Enhanced memory buckets based on 2024 standards\n const getMemoryBucket = (memory: number) => {\n // Professional/Gaming systems (2024: up to 256GB+ available)\n if (memory >= 64) return \"workstation\"; // 64GB+: Professional/content creation\n if (memory >= 32) return \"ultra\"; // 32-63GB: High-end gaming/work\n if (memory >= 24) return \"high\"; // 24-31GB: Premium gaming\n if (memory >= 16) return \"premium\"; // 16-23GB: Standard gaming/work\n if (memory >= 12) return \"mid\"; // 12-15GB: Good performance\n if (memory >= 8) return \"normal\"; // 8-11GB: Acceptable performance\n if (memory >= 4) return \"basic\"; // 4-7GB: Budget desktop/laptop\n if (memory >= 2) return \"low\"; // 2-3GB: Older mobile devices\n return \"minimal\"; // <2GB: Legacy/embedded devices\n };\n\n // CPU architecture detection for additional differentiation\n const getArchitectureBucket = (arch?: number) => {\n if (arch === undefined) return \"unknown\";\n // Based on floating point NaN behavior patterns\n if (arch === 255) return \"arm64\"; // ARM processors\n if (arch === 0) return \"x86_64\"; // Intel/AMD x86-64\n return \"other\"; // Other architectures\n };\n\n // Combined hardware profile for enhanced bucketing\n const coresBucket = cores ? getCoreBucket(cores) : \"unknown\";\n const memoryBucket = memory ? getMemoryBucket(memory) : \"unknown\";\n const archBucket = getArchitectureBucket(deviceSignals.architecture);\n\n // Create hardware class based on combined characteristics\n const getHardwareClass = (\n cores: string,\n memory: string,\n arch: string\n ) => {\n // Professional workstation patterns\n if (\n (cores === \"workstation\" || cores === \"ultra\") &&\n (memory === \"workstation\" || memory === \"ultra\")\n ) {\n return \"professional\";\n }\n\n // High-end gaming/content creation\n if (\n (cores === \"high\" || cores === \"premium\") &&\n (memory === \"high\" || memory === \"premium\" || memory === \"ultra\")\n ) {\n return \"enthusiast\";\n }\n\n // Standard desktop/laptop\n if (\n (cores === \"mid\" || cores === \"normal\") &&\n (memory === \"mid\" || memory === \"normal\" || memory === \"premium\")\n ) {\n return \"mainstream\";\n }\n\n // Budget/older systems\n if (\n (cores === \"basic\" || cores === \"low\") &&\n (memory === \"basic\" || memory === \"low\" || memory === \"normal\")\n ) {\n return \"budget\";\n }\n\n // Mobile/embedded devices\n if (cores === \"minimal\" || memory === \"minimal\") {\n return \"mobile\";\n }\n\n // Mixed/uncertain configuration\n return \"mixed\";\n };\n\n return {\n cores: coresBucket,\n memory: memoryBucket,\n arch: archBucket,\n class: getHardwareClass(coresBucket, memoryBucket, archBucket),\n // Touch capability for mobile/desktop differentiation\n touch: deviceSignals.touchSupport?.maxTouchPoints\n ? deviceSignals.touchSupport.maxTouchPoints >= 10\n ? \"multi\"\n : deviceSignals.touchSupport.maxTouchPoints >= 5\n ? \"standard\"\n : \"basic\"\n : \"none\",\n };\n })(),\n\n // PRIORITY 8: Screen frame (bezel measurements) for mobile device differentiation\n // CRITICAL: This is STABLE across page loads and provides device-specific fingerprint\n // Samsung S22 vs A54 have different screen frames despite similar resolutions\n screenFrame: deviceSignals?.screenFrame\n ? {\n top: deviceSignals.screenFrame.top || 0,\n right: deviceSignals.screenFrame.right || 0,\n bottom: deviceSignals.screenFrame.bottom || 0,\n left: deviceSignals.screenFrame.left || 0,\n }\n : undefined,\n\n // PRIORITY 9: Enhanced color and display capabilities bucketing\n display: (() => {\n const depth = deviceSignals.colorDepth;\n const gamut = deviceSignals.colorGamut;\n\n // Enhanced color depth classification\n const getDepthClass = (depth?: number) => {\n if (!depth) return \"unknown\";\n if (depth >= 48) return \"ultra_high\"; // 48-bit+ (professional displays)\n if (depth >= 32) return \"high\"; // 32-bit (high-end displays)\n if (depth >= 24) return \"normal\"; // 24-bit (standard displays)\n if (depth >= 16) return \"basic\"; // 16-bit (older displays)\n return \"low\"; // <16-bit (legacy displays)\n };\n\n // Color gamut classification for display capabilities\n const getGamutClass = (gamut?: string) => {\n if (!gamut) return \"unknown\";\n switch (gamut) {\n case \"rec2020\":\n return \"professional\"; // Professional/HDR displays\n case \"p3\":\n return \"enhanced\"; // Modern displays (Apple, etc.)\n case \"srgb\":\n return \"standard\"; // Standard displays\n default:\n return \"unknown\";\n }\n };\n\n // Combined display quality classification\n const getDisplayClass = (depthClass: string, gamutClass: string) => {\n if (depthClass === \"ultra_high\" || gamutClass === \"professional\") {\n return \"professional\"; // Pro displays\n }\n if (depthClass === \"high\" || gamutClass === \"enhanced\") {\n return \"premium\"; // High-end displays\n }\n if (depthClass === \"normal\" && gamutClass === \"standard\") {\n return \"standard\"; // Standard displays\n }\n if (depthClass === \"basic\") {\n return \"basic\"; // Older displays\n }\n return \"legacy\"; // Legacy displays\n };\n\n const depthClass = getDepthClass(depth);\n const gamutClass = getGamutClass(gamut);\n\n return {\n depth: depthClass,\n gamut: gamutClass,\n class: getDisplayClass(depthClass, gamutClass),\n };\n })(),\n };\n\n // ADDITIONAL ENTROPY: Add a deterministic but unique component based on ultra-stable signals\n // This helps prevent collisions while maintaining deterministic behavior\n const entropyComponents = [\n coreVector.ua || \"\",\n coreVector.platform || \"\",\n coreVector.deviceType || \"\",\n coreVector.screen?.bucket || \"\",\n coreVector.timezone || \"\",\n ].filter(Boolean);\n\n if (entropyComponents.length >= 3) {\n // Create a stable entropy string from the most stable components\n const entropyString = entropyComponents.join(\"|\");\n // Add a simple checksum for additional uniqueness (deterministic)\n let checksum = 0;\n for (let i = 0; i < entropyString.length; i++) {\n checksum =\n ((checksum << 5) - checksum + entropyString.charCodeAt(i)) &\n 0xffffffff;\n }\n coreVector._entropy = Math.abs(checksum).toString(36).substring(0, 8);\n }\n\n // EXCLUSIONS from stableCoreVector for maximum stability:\n // - Exact screen dimensions (use buckets instead)\n // - Browser versions (use family only)\n // - Secondary languages (use primary only)\n // - Pixel ratio (varies with zoom)\n // - Plugin lists (change frequently)\n // - Canvas/WebGL availability (can timeout)\n // - Color gamut (varies with settings)\n // - Screen frame (can vary slightly)\n // - Vendor flavors (can change)\n // - Exact hardware values (use buckets)\n\n // DEBUG: Log coreVector components to identify DevTools instability\n if (\n opts.debug ||\n (typeof window !== \"undefined\" && (window as any)._rabbitTrackerDebug)\n ) {\n console.log(\"[RabbitTracker DEBUG] coreVector components:\", {\n ua: coreVector.ua,\n platform: coreVector.platform,\n deviceType: coreVector.deviceType,\n screenBucket: coreVector.screen?.bucket,\n timezone: coreVector.timezone,\n _entropy: coreVector._entropy,\n });\n }\n\n // Generate ultra-stable hash with additional collision resistance\n const stableCoreHash = hashStableCore(coreVector, opts.debug);\n\n // CRITICAL: Generate enhanced fingerprint hash combining STABLE components only\n // Filter out unstable components that change between requests (canvas, webgl, audio)\n // These components can vary due to GPU state, rendering context, permissions, etc.\n const unstableComponentKeys = [\n \"canvas\",\n \"webgl\",\n \"audio\", // Visual/audio fingerprints (vary with context)\n \"mathFingerprint\",\n \"fontPreferences\",\n \"enhancedFonts\", // Measurement-based (can timeout/vary)\n \"dateTimeLocale\",\n \"accessibilityEnhanced\", // Locale/accessibility (can change)\n \"domBlockers\",\n \"pluginsEnhanced\", // Privacy tools detection (can change)\n ];\n\n const stableComponentValues: Record<string, any> = {};\n for (const [key, value] of Object.entries(componentValues)) {\n if (!unstableComponentKeys.includes(key)) {\n stableComponentValues[key] = value;\n }\n }\n\n const enhancedComponentValues = {\n ...stableComponentValues, // STABLE components only (screen, browser, system, etc.)\n _stableCore: coreVector, // + Ultra-stable components (ua, platform, deviceType, etc.)\n // REMOVED: _hourlyEntropy - was causing visitor ID instability (same user = different IDs)\n };\n\n // Generate collision-resistant fingerprint hash\n const enhancedHash = hashFingerprint(enhancedComponentValues, opts.debug);\n\n // Update finalData with the enhanced hash\n finalData.hash = enhancedHash;\n\n // Log stable core components for debugging collision issues\n if (opts.debug) {\n console.log(\"[RabbitTracker] Ultra-stable core vector:\", {\n components: Object.keys(coreVector),\n entropy: coreVector._entropy,\n stableCoreHash: stableCoreHash.substring(0, 16),\n enhancedFingerprintHash: enhancedHash.substring(0, 16),\n ua: coreVector.ua,\n deviceType: coreVector.deviceType,\n platform: coreVector.platform,\n screenBucket: coreVector.screen?.bucket,\n totalComponentsInHash: Object.keys(enhancedComponentValues).length,\n });\n }\n\n result.data = {\n ...finalData,\n stableCoreHash,\n stableCoreVector: coreVector,\n } as any;\n\n // Log collection summary if debug mode\n if (opts.debug) {\n console.log(\"[RabbitTracker] Fingerprint collection completed:\", {\n collected: collectedComponents.length,\n failed: failedComponents.length,\n duration: finalData.collectionTime,\n enhancedFingerprintHash: finalData.hash,\n stableCoreHash,\n confidence: confidenceResult?.level || \"Unknown\",\n score: confidenceResult?.score || 0,\n collisionResistance:\n \"Enhanced with stable + unstable components (no temporal entropy)\",\n });\n\n if (confidenceResult?.recommendations.length) {\n console.log(\n \"[RabbitTracker] Confidence recommendations:\",\n confidenceResult.recommendations\n );\n }\n }\n } else {\n result.error = \"No components could be collected\";\n }\n\n return result;\n}\n\n/**\n * Generate visitor ID from fingerprint\n */\nexport function generateVisitorIdFromFingerprint(\n fingerprintData: FingerprintData\n): string {\n return generateVisitorId(fingerprintData.hash);\n}\n\n/**\n * Get a lightweight fingerprint (GDPR-compliant)\n */\nexport async function getLightweightFingerprint(): Promise<FingerprintResult> {\n return collectFingerprint({\n gdprMode: true,\n includeInvasive: false,\n excludeComponents: [\"canvas\", \"webgl\", \"audio\"],\n timeout: 2000,\n });\n}\n\n/**\n * Get a complete fingerprint (enhanced mode)\n */\nexport async function getCompleteFingerprint(): Promise<FingerprintResult> {\n return collectFingerprint({\n gdprMode: false,\n includeInvasive: true,\n timeout: 5000,\n });\n}\n\n/**\n * Clear session fingerprint cache (memory only)\n */\nexport function clearFingerprintCache(): void {\n sessionCache.clear();\n}\n\n/**\n * Check if fingerprinting is available\n */\nexport function isFingerprintingAvailable(): boolean {\n // At minimum, we need screen and browser fingerprinting\n return isScreenAvailable() && isBrowserFingerprintingAvailable();\n}\n\n/**\n * Get available fingerprinting components\n */\nexport function getAvailableComponents(): FingerprintComponentType[] {\n const available: FingerprintComponentType[] = [];\n\n if (isCanvasAvailable()) available.push(\"canvas\");\n if (isWebGLAvailable()) available.push(\"webgl\");\n if (isAudioAvailable()) available.push(\"audio\");\n if (isFontDetectionAvailable()) available.push(\"fonts\");\n if (isScreenAvailable()) available.push(\"screen\");\n if (isBrowserFingerprintingAvailable()) available.push(\"browser\");\n\n return available;\n}\n","/**\n * Anti-Adblock Manager\n * Implements multiple transport methods to bypass adblockers\n * Includes WebSocket, Resource Spoofing, and WebRTC fallbacks\n */\n\nexport interface TransportResponse {\n success: boolean;\n method: string;\n latency?: number;\n error?: string;\n}\n\nexport interface AntiAdblockConfig {\n enabled: boolean;\n methods: ('fetch' | 'websocket' | 'resource' | 'webrtc')[];\n fallbackDelay: number;\n maxRetries: number;\n debug: boolean;\n}\n\n/**\n * Base Transport Interface\n */\nexport interface Transport {\n name: string;\n available: boolean;\n send(data: any, endpoint: string): Promise<TransportResponse>;\n destroy?(): void;\n}\n\n/**\n * Standard Fetch Transport\n */\nexport class FetchTransport implements Transport {\n name = 'fetch';\n available = typeof fetch !== 'undefined';\n\n async send(data: any, endpoint: string): Promise<TransportResponse> {\n const start = Date.now();\n \n try {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(data)\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`);\n }\n\n return {\n success: true,\n method: this.name,\n latency: Date.now() - start\n };\n } catch (error) {\n return {\n success: false,\n method: this.name,\n latency: Date.now() - start,\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n}\n\n/**\n * WebSocket Transport\n */\nexport class WebSocketTransport implements Transport {\n name = 'websocket';\n available = typeof WebSocket !== 'undefined';\n private ws?: WebSocket;\n private connected = false;\n private messageQueue: Array<{ data: any; resolve: (value: TransportResponse) => void }> = [];\n private baseUrl: string;\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl.replace(/^http/, 'ws');\n }\n\n private async connect(): Promise<void> {\n if (this.connected || !this.available) return;\n\n return new Promise((resolve, reject) => {\n try {\n this.ws = new WebSocket(`${this.baseUrl}/ws/track`);\n \n this.ws.onopen = () => {\n this.connected = true;\n this.processQueue();\n resolve();\n };\n\n this.ws.onerror = () => {\n reject(new Error('WebSocket connection failed'));\n };\n\n this.ws.onclose = () => {\n this.connected = false;\n // Try to reconnect after 5 seconds\n setTimeout(() => this.connect().catch(() => {}), 5000);\n };\n } catch (error) {\n reject(error);\n }\n });\n }\n\n private processQueue(): void {\n while (this.messageQueue.length > 0 && this.connected) {\n const item = this.messageQueue.shift();\n if (item && this.ws) {\n try {\n this.ws.send(JSON.stringify(item.data));\n item.resolve({ success: true, method: this.name });\n } catch (error) {\n item.resolve({ \n success: false, \n method: this.name, \n error: error instanceof Error ? error.message : String(error)\n });\n }\n }\n }\n }\n\n async send(data: any, endpoint: string): Promise<TransportResponse> {\n const start = Date.now();\n\n if (!this.available) {\n return { success: false, method: this.name, error: 'WebSocket not available' };\n }\n\n // Try to connect if not connected\n if (!this.connected) {\n try {\n await this.connect();\n } catch (error) {\n return { \n success: false, \n method: this.name, \n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n return new Promise((resolve) => {\n if (this.connected && this.ws) {\n try {\n this.ws.send(JSON.stringify(data));\n resolve({ \n success: true, \n method: this.name, \n latency: Date.now() - start \n });\n } catch (error) {\n resolve({ \n success: false, \n method: this.name, \n error: error instanceof Error ? error.message : String(error)\n });\n }\n } else {\n // Queue message for later\n this.messageQueue.push({ data, resolve: (response) => resolve({\n ...response,\n latency: Date.now() - start\n }) });\n }\n });\n }\n\n destroy(): void {\n if (this.ws) {\n this.ws.close();\n this.connected = false;\n }\n }\n}\n\n/**\n * Resource Spoofing Transport (GET requests disguised as assets)\n */\nexport class ResourceSpoofTransport implements Transport {\n name = 'resource';\n available = typeof fetch !== 'undefined';\n private baseUrl: string;\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl;\n }\n\n async send(data: any, endpoint: string): Promise<TransportResponse> {\n const start = Date.now();\n \n try {\n // Compress and encode data\n const encoded = this.encodeData(data);\n \n // Try different resource types\n const resourceTypes = [\n { path: '/assets/styles.css', type: 'text/css' },\n { path: '/images/pixel.gif', type: 'image/gif' },\n { path: '/fonts/roboto.woff2', type: 'font/woff2' },\n { path: '/js/analytics.js', type: 'application/javascript' }\n ];\n\n const randomType = resourceTypes[Math.floor(Math.random() * resourceTypes.length)]!;\n const url = `${this.baseUrl}${randomType.path}?d=${encoded}&t=${Date.now()}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Accept': randomType.type,\n 'Cache-Control': 'no-cache',\n 'User-Agent': navigator.userAgent\n }\n });\n\n // Even if status is not OK, adblockers might have blocked it\n // But the data might still reach the server\n return {\n success: true, // Optimistic success\n method: this.name,\n latency: Date.now() - start\n };\n } catch (error) {\n return {\n success: false,\n method: this.name,\n latency: Date.now() - start,\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n private encodeData(data: any): string {\n try {\n const json = JSON.stringify(data);\n return btoa(encodeURIComponent(json)).replace(/[+/=]/g, (match) => ({\n '+': '-',\n '/': '_',\n '=': ''\n }[match] || match));\n } catch (error) {\n return '';\n }\n }\n}\n\n/**\n * WebRTC DataChannel Transport (experimental)\n */\nexport class WebRTCTransport implements Transport {\n name = 'webrtc';\n available = typeof (globalThis as any).RTCPeerConnection !== 'undefined';\n private pc?: any;\n private dataChannel?: any;\n private connected = false;\n\n async send(data: any, endpoint: string): Promise<TransportResponse> {\n const start = Date.now();\n\n if (!this.available) {\n return { success: false, method: this.name, error: 'WebRTC not available' };\n }\n\n try {\n await this.setupConnection();\n \n if (this.dataChannel && this.connected) {\n this.dataChannel.send(JSON.stringify(data));\n return {\n success: true,\n method: this.name,\n latency: Date.now() - start\n };\n } else {\n return {\n success: false,\n method: this.name,\n error: 'DataChannel not ready'\n };\n }\n } catch (error) {\n return {\n success: false,\n method: this.name,\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n private async setupConnection(): Promise<void> {\n if (this.connected) return;\n\n return new Promise((resolve, reject) => {\n try {\n this.pc = new (globalThis as any).RTCPeerConnection({\n iceServers: [{ urls: 'stun:stun.l.google.com:19302' }]\n });\n\n this.dataChannel = this.pc.createDataChannel('tracking', {\n ordered: false,\n maxRetransmits: 0\n });\n\n this.dataChannel.onopen = () => {\n this.connected = true;\n resolve();\n };\n\n this.dataChannel.onerror = (error: any) => {\n reject(error);\n };\n\n // Note: This is a simplified WebRTC setup\n // In practice, you'd need a signaling server for full P2P\n } catch (error) {\n reject(error);\n }\n });\n }\n\n destroy(): void {\n if (this.dataChannel) {\n this.dataChannel.close();\n }\n if (this.pc) {\n this.pc.close();\n }\n this.connected = false;\n }\n}\n\n/**\n * Main Anti-Adblock Manager\n */\nexport class AntiAdblockManager {\n private config: AntiAdblockConfig;\n private transports: Transport[] = [];\n private baseUrl: string;\n private stats = {\n totalRequests: 0,\n successfulRequests: 0,\n methodSuccess: new Map<string, number>(),\n methodFailures: new Map<string, number>()\n };\n\n constructor(baseUrl: string, config: Partial<AntiAdblockConfig> = {}) {\n this.baseUrl = baseUrl;\n this.config = {\n enabled: true,\n methods: ['fetch', 'websocket', 'resource'],\n fallbackDelay: 100,\n maxRetries: 2,\n debug: false,\n ...config\n };\n\n this.initializeTransports();\n }\n\n private initializeTransports(): void {\n const transportMap = {\n fetch: () => new FetchTransport(),\n websocket: () => new WebSocketTransport(this.baseUrl),\n resource: () => new ResourceSpoofTransport(this.baseUrl),\n webrtc: () => new WebRTCTransport()\n };\n\n this.transports = this.config.methods\n .map(method => transportMap[method]?.())\n .filter((transport): transport is Transport => \n transport !== undefined && transport.available\n );\n\n if (this.config.debug) {\n console.log('[Zaplier] Anti-adblock initialized with transports:', \n this.transports.map(t => t.name));\n }\n }\n\n /**\n * Send data using the best available transport\n */\n async send(data: any, endpoint: string = '/tracking/event'): Promise<TransportResponse> {\n this.stats.totalRequests++;\n\n if (!this.config.enabled || this.transports.length === 0) {\n return { success: false, method: 'none', error: 'No transports available' };\n }\n\n let lastError = '';\n\n // Try each transport in order\n for (const transport of this.transports) {\n try {\n const result = await transport.send(data, `${this.baseUrl}${endpoint}`);\n \n // Update stats\n if (result.success) {\n this.stats.successfulRequests++;\n this.updateMethodStats(transport.name, true);\n \n if (this.config.debug) {\n console.log(`[Zaplier] Data sent successfully via ${transport.name}`, result);\n }\n \n return result;\n } else {\n this.updateMethodStats(transport.name, false);\n lastError = result.error || 'Unknown error';\n \n if (this.config.debug) {\n console.warn(`[Zaplier] Transport ${transport.name} failed:`, result.error);\n }\n }\n } catch (error) {\n lastError = error instanceof Error ? error.message : String(error);\n this.updateMethodStats(transport.name, false);\n \n if (this.config.debug) {\n console.warn(`[Zaplier] Transport ${transport.name} threw error:`, error);\n }\n }\n\n // Wait before trying next transport\n if (this.config.fallbackDelay > 0) {\n await new Promise(resolve => setTimeout(resolve, this.config.fallbackDelay));\n }\n }\n\n return {\n success: false,\n method: 'all_failed',\n error: `All transports failed. Last error: ${lastError}`\n };\n }\n\n private updateMethodStats(method: string, success: boolean): void {\n if (success) {\n this.stats.methodSuccess.set(method, (this.stats.methodSuccess.get(method) || 0) + 1);\n } else {\n this.stats.methodFailures.set(method, (this.stats.methodFailures.get(method) || 0) + 1);\n }\n }\n\n /**\n * Get transport statistics\n */\n getStats(): typeof this.stats {\n return { ...this.stats };\n }\n\n /**\n * Get success rate by method\n */\n getSuccessRates(): Record<string, number> {\n const rates: Record<string, number> = {};\n \n for (const transport of this.transports) {\n const successes = this.stats.methodSuccess.get(transport.name) || 0;\n const failures = this.stats.methodFailures.get(transport.name) || 0;\n const total = successes + failures;\n \n rates[transport.name] = total > 0 ? (successes / total) * 100 : 0;\n }\n \n return rates;\n }\n\n /**\n * Destroy all transports\n */\n destroy(): void {\n this.transports.forEach(transport => {\n if (transport.destroy) {\n transport.destroy();\n }\n });\n this.transports = [];\n }\n\n /**\n * Test transport effectiveness\n */\n async testTransports(): Promise<Record<string, TransportResponse>> {\n const results: Record<string, TransportResponse> = {};\n const testData = { test: true, timestamp: Date.now() };\n\n for (const transport of this.transports) {\n try {\n results[transport.name] = await transport.send(testData, `${this.baseUrl}/test`);\n } catch (error) {\n results[transport.name] = {\n success: false,\n method: transport.name,\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n return results;\n }\n}","/**\n * Heatmap Engine\n * Captures click coordinates, scroll depth, mouse movements and rage clicks\n * for visual analytics and user behavior insights\n */\n\nexport interface HeatmapClick {\n x: number;\n y: number;\n absoluteX: number;\n absoluteY: number;\n element: string;\n timestamp: number;\n button: number;\n rageClick?: boolean;\n}\n\nexport interface HeatmapScroll {\n depth: number;\n maxDepth: number;\n timestamp: number;\n viewport: { width: number; height: number };\n}\n\nexport interface HeatmapMouseMove {\n path: Array<{ x: number; y: number; timestamp: number }>;\n timestamp: number;\n}\n\nexport interface HeatmapConfig {\n enabled: boolean;\n trackClicks: boolean;\n trackScrollDepth: boolean;\n trackMouseMoves: boolean;\n trackRageClicks: boolean;\n mouseMoveThrottle: number;\n batchInterval: number;\n maxClickBuffer: number;\n rageClickThreshold: number;\n rageClickTimeWindow: number;\n}\n\nexport class HeatmapEngine {\n private config: HeatmapConfig;\n private clicks: HeatmapClick[] = [];\n private scrollData: HeatmapScroll[] = [];\n private mouseMoves: Array<{ x: number; y: number; timestamp: number }> = [];\n private lastMouseMove = 0;\n private maxScrollDepth = 0;\n private batchTimer?: number;\n private isActive = false;\n private sessionId: string;\n \n // Rage click detection\n private recentClicks: Array<{ x: number; y: number; timestamp: number }> = [];\n \n constructor(sessionId: string, config: Partial<HeatmapConfig> = {}) {\n this.sessionId = sessionId;\n this.config = {\n enabled: true,\n trackClicks: true,\n trackScrollDepth: true,\n trackMouseMoves: false, // Disabled by default for performance\n trackRageClicks: true,\n mouseMoveThrottle: 200,\n batchInterval: 10000, // 10 seconds\n maxClickBuffer: 500,\n rageClickThreshold: 3, // 3 clicks in time window = rage\n rageClickTimeWindow: 1000, // 1 second\n ...config\n };\n }\n\n /**\n * Start heatmap tracking\n */\n start(): boolean {\n if (!this.config.enabled || this.isActive) {\n return false;\n }\n\n this.isActive = true;\n this.setupEventListeners();\n this.startBatchTimer();\n this.trackInitialViewport();\n\n return true;\n }\n\n /**\n * Stop heatmap tracking\n */\n stop(): void {\n if (!this.isActive) return;\n\n this.isActive = false;\n this.removeEventListeners();\n \n if (this.batchTimer) {\n clearInterval(this.batchTimer);\n this.batchTimer = undefined;\n }\n\n // Send final batch\n this.sendBatch();\n }\n\n /**\n * Setup event listeners\n */\n private setupEventListeners(): void {\n if (this.config.trackClicks) {\n document.addEventListener('click', this.handleClick, true);\n }\n\n if (this.config.trackScrollDepth) {\n window.addEventListener('scroll', this.handleScroll, { passive: true });\n document.addEventListener('scroll', this.handleScroll, { passive: true });\n }\n\n if (this.config.trackMouseMoves) {\n document.addEventListener('mousemove', this.handleMouseMove, { passive: true });\n }\n\n // Track viewport changes\n window.addEventListener('resize', this.handleResize);\n window.addEventListener('orientationchange', this.handleResize);\n }\n\n /**\n * Remove event listeners\n */\n private removeEventListeners(): void {\n document.removeEventListener('click', this.handleClick, true);\n window.removeEventListener('scroll', this.handleScroll);\n document.removeEventListener('scroll', this.handleScroll);\n document.removeEventListener('mousemove', this.handleMouseMove);\n window.removeEventListener('resize', this.handleResize);\n window.removeEventListener('orientationchange', this.handleResize);\n }\n\n /**\n * Track initial viewport for context\n */\n private trackInitialViewport(): void {\n const scrollDepth = this.calculateScrollDepth();\n this.scrollData.push({\n depth: scrollDepth,\n maxDepth: scrollDepth,\n timestamp: Date.now(),\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight\n }\n });\n }\n\n /**\n * Handle click events\n */\n private handleClick = (event: MouseEvent): void => {\n if (!this.config.trackClicks) return;\n\n const target = event.target as Element;\n const rect = target.getBoundingClientRect();\n const scrollX = window.pageXOffset || document.documentElement.scrollLeft;\n const scrollY = window.pageYOffset || document.documentElement.scrollTop;\n \n const click: HeatmapClick = {\n x: event.clientX,\n y: event.clientY,\n absoluteX: event.clientX + scrollX,\n absoluteY: event.clientY + scrollY,\n element: this.getElementSelector(target),\n timestamp: Date.now(),\n button: event.button\n };\n\n // Check for rage clicks\n if (this.config.trackRageClicks) {\n const isRage = this.detectRageClick(click.x, click.y, click.timestamp);\n if (isRage) {\n click.rageClick = true;\n }\n }\n\n this.clicks.push(click);\n\n // Prevent buffer overflow\n if (this.clicks.length > this.config.maxClickBuffer) {\n this.clicks = this.clicks.slice(-this.config.maxClickBuffer);\n }\n };\n\n /**\n * Handle scroll events\n */\n private handleScroll = (): void => {\n if (!this.config.trackScrollDepth) return;\n\n const scrollDepth = this.calculateScrollDepth();\n this.maxScrollDepth = Math.max(this.maxScrollDepth, scrollDepth);\n\n this.scrollData.push({\n depth: scrollDepth,\n maxDepth: this.maxScrollDepth,\n timestamp: Date.now(),\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight\n }\n });\n\n // Limit scroll data points\n if (this.scrollData.length > 100) {\n this.scrollData = this.scrollData.slice(-50);\n }\n };\n\n /**\n * Handle mouse move events (throttled)\n */\n private handleMouseMove = (event: MouseEvent): void => {\n if (!this.config.trackMouseMoves) return;\n\n const now = Date.now();\n if (now - this.lastMouseMove < this.config.mouseMoveThrottle) {\n return;\n }\n this.lastMouseMove = now;\n\n this.mouseMoves.push({\n x: event.clientX,\n y: event.clientY,\n timestamp: now\n });\n\n // Limit mouse move data\n if (this.mouseMoves.length > 200) {\n this.mouseMoves = this.mouseMoves.slice(-100);\n }\n };\n\n /**\n * Handle viewport resize\n */\n private handleResize = (): void => {\n // Update scroll depth calculation on resize\n const scrollDepth = this.calculateScrollDepth();\n this.scrollData.push({\n depth: scrollDepth,\n maxDepth: this.maxScrollDepth,\n timestamp: Date.now(),\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight\n }\n });\n };\n\n /**\n * Calculate current scroll depth as percentage\n */\n private calculateScrollDepth(): number {\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n const documentHeight = Math.max(\n document.body.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n );\n const viewportHeight = window.innerHeight;\n \n if (documentHeight <= viewportHeight) {\n return 100; // Page fits entirely in viewport\n }\n\n return Math.min(100, Math.round(((scrollTop + viewportHeight) / documentHeight) * 100));\n }\n\n /**\n * Detect rage clicks (multiple clicks in same area within time window)\n */\n private detectRageClick(x: number, y: number, timestamp: number): boolean {\n const clickRadius = 50; // pixels\n const timeWindow = this.config.rageClickTimeWindow;\n\n // Clean old clicks outside time window\n this.recentClicks = this.recentClicks.filter(\n click => timestamp - click.timestamp <= timeWindow\n );\n\n // Count clicks in the same area\n const nearbyClicks = this.recentClicks.filter(click => {\n const distance = Math.sqrt(\n Math.pow(click.x - x, 2) + Math.pow(click.y - y, 2)\n );\n return distance <= clickRadius;\n });\n\n // Add current click\n this.recentClicks.push({ x, y, timestamp });\n\n return nearbyClicks.length >= this.config.rageClickThreshold - 1;\n }\n\n /**\n * Get element selector for targeting\n */\n private getElementSelector(element: Element): string {\n // Try ID first\n if (element.id) {\n return `#${element.id}`;\n }\n\n // Try classes\n if (element.className && typeof element.className === 'string') {\n const classes = element.className.split(' ').filter(c => c.length > 0);\n if (classes.length > 0) {\n return `.${classes.slice(0, 2).join('.')}`;\n }\n }\n\n // Fallback to tag + nth-child\n const tag = element.tagName.toLowerCase();\n if (element.parentElement) {\n const siblings = Array.from(element.parentElement.children);\n const index = siblings.indexOf(element);\n return `${tag}:nth-child(${index + 1})`;\n }\n\n return tag;\n }\n\n /**\n * Start batch timer\n */\n private startBatchTimer(): void {\n this.batchTimer = window.setInterval(() => {\n this.sendBatch();\n }, this.config.batchInterval);\n }\n\n /**\n * Send batch of heatmap data\n */\n private sendBatch(): void {\n if (this.clicks.length === 0 && this.scrollData.length === 0 && this.mouseMoves.length === 0) {\n return;\n }\n\n const payload = {\n sessionId: this.sessionId,\n pageMetadata: {\n url: window.location.href,\n title: document.title,\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight\n },\n documentSize: {\n width: Math.max(\n document.body.scrollWidth,\n document.body.offsetWidth,\n document.documentElement.clientWidth,\n document.documentElement.scrollWidth,\n document.documentElement.offsetWidth\n ),\n height: Math.max(\n document.body.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n )\n }\n },\n clicks: [...this.clicks],\n scrollData: [...this.scrollData],\n mouseMoves: this.config.trackMouseMoves ? [...this.mouseMoves] : [],\n maxScrollDepth: this.maxScrollDepth,\n timestamp: Date.now()\n };\n\n // Clear data after copying\n this.clicks = [];\n this.scrollData = [];\n this.mouseMoves = [];\n\n // Send to backend\n this.sendToBackend(payload);\n }\n\n /**\n * Send data to backend (will be enhanced with anti-adblock)\n */\n private async sendToBackend(payload: any): Promise<void> {\n try {\n // For now, use standard fetch - will be replaced with anti-adblock manager\n const response = await fetch('/api/heatmap/track', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload)\n });\n\n if (!response.ok) {\n console.warn('[Zaplier] Heatmap batch failed to send');\n }\n } catch (error) {\n console.warn('[Zaplier] Heatmap error:', error);\n }\n }\n\n /**\n * Get current statistics\n */\n getStats(): {\n clickCount: number;\n maxScrollDepth: number;\n isRecording: boolean;\n mouseMovements: number;\n rageClicks: number;\n } {\n const rageClicks = this.clicks.filter(click => click.rageClick).length;\n \n return {\n clickCount: this.clicks.length,\n maxScrollDepth: this.maxScrollDepth,\n isRecording: this.isActive,\n mouseMovements: this.mouseMoves.length,\n rageClicks\n };\n }\n\n /**\n * Enable mouse movement tracking\n */\n enableMouseTracking(): void {\n if (this.config.trackMouseMoves) return;\n \n this.config.trackMouseMoves = true;\n if (this.isActive) {\n document.addEventListener('mousemove', this.handleMouseMove, { passive: true });\n }\n }\n\n /**\n * Disable mouse movement tracking\n */\n disableMouseTracking(): void {\n if (!this.config.trackMouseMoves) return;\n \n this.config.trackMouseMoves = false;\n document.removeEventListener('mousemove', this.handleMouseMove);\n this.mouseMoves = [];\n }\n\n /**\n * Check if heatmap is recording\n */\n isRecording(): boolean {\n return this.isActive;\n }\n}","/**\n * Session Replay Engine\n * Captures DOM mutations, user interactions, and viewport changes\n * for comprehensive session recording\n */\n\nexport interface ReplayEvent {\n type: 'mutation' | 'click' | 'scroll' | 'input' | 'mouse' | 'viewport' | 'navigation';\n timestamp: number;\n data: any;\n sequence: number;\n}\n\nexport interface ReplayConfig {\n enabled: boolean;\n sampleRate: number;\n maskSensitiveFields: boolean;\n maxEventBuffer: number;\n batchInterval: number;\n captureClicks: boolean;\n captureScrolls: boolean;\n captureInputs: boolean;\n captureMouseMoves: boolean;\n compressionEnabled: boolean;\n}\n\nexport class SessionReplayEngine {\n private config: ReplayConfig;\n private events: ReplayEvent[] = [];\n private observer?: MutationObserver;\n private sequence = 0;\n private batchTimer?: number;\n private isActive = false;\n private sessionId: string;\n private lastMouseMove = 0;\n private mouseMoveThrottle = 100; // ms\n\n constructor(sessionId: string, config: Partial<ReplayConfig> = {}) {\n this.sessionId = sessionId;\n this.config = {\n enabled: true,\n sampleRate: 0.1,\n maskSensitiveFields: true,\n maxEventBuffer: 1000,\n batchInterval: 5000,\n captureClicks: true,\n captureScrolls: true,\n captureInputs: true,\n captureMouseMoves: false, // Disabled by default for performance\n compressionEnabled: true,\n ...config\n };\n }\n\n /**\n * Start session replay recording\n */\n start(): boolean {\n if (!this.config.enabled || this.isActive) {\n return false;\n }\n\n // Check sampling\n if (Math.random() > this.config.sampleRate) {\n return false;\n }\n\n this.isActive = true;\n this.setupDOMObserver();\n this.setupEventListeners();\n this.startBatchTimer();\n\n // Record initial state\n this.recordInitialState();\n\n return true;\n }\n\n /**\n * Stop session replay recording\n */\n stop(): void {\n if (!this.isActive) return;\n\n this.isActive = false;\n \n if (this.observer) {\n this.observer.disconnect();\n this.observer = undefined;\n }\n\n this.removeEventListeners();\n \n if (this.batchTimer) {\n clearInterval(this.batchTimer);\n this.batchTimer = undefined;\n }\n\n // Send final batch\n this.sendBatch();\n }\n\n /**\n * Setup DOM mutation observer\n */\n private setupDOMObserver(): void {\n if (typeof MutationObserver === 'undefined') return;\n\n this.observer = new MutationObserver((mutations) => {\n const serializedMutations = mutations\n .map(mutation => this.serializeMutation(mutation))\n .filter(Boolean);\n\n if (serializedMutations.length > 0) {\n this.addEvent({\n type: 'mutation',\n timestamp: Date.now(),\n data: { mutations: serializedMutations },\n sequence: this.sequence++\n });\n }\n });\n\n this.observer.observe(document, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeOldValue: true,\n characterData: true,\n characterDataOldValue: true\n });\n }\n\n /**\n * Setup event listeners\n */\n private setupEventListeners(): void {\n if (this.config.captureClicks) {\n document.addEventListener('click', this.handleClick, true);\n }\n\n if (this.config.captureScrolls) {\n window.addEventListener('scroll', this.handleScroll, { passive: true });\n document.addEventListener('scroll', this.handleScroll, { passive: true });\n }\n\n if (this.config.captureInputs) {\n document.addEventListener('input', this.handleInput, true);\n document.addEventListener('change', this.handleChange, true);\n }\n\n if (this.config.captureMouseMoves) {\n document.addEventListener('mousemove', this.handleMouseMove, { passive: true });\n }\n\n // Viewport changes\n window.addEventListener('resize', this.handleViewportChange);\n window.addEventListener('orientationchange', this.handleViewportChange);\n\n // Navigation\n window.addEventListener('beforeunload', this.handleNavigation);\n window.addEventListener('pagehide', this.handleNavigation);\n }\n\n /**\n * Remove event listeners\n */\n private removeEventListeners(): void {\n document.removeEventListener('click', this.handleClick, true);\n window.removeEventListener('scroll', this.handleScroll);\n document.removeEventListener('scroll', this.handleScroll);\n document.removeEventListener('input', this.handleInput, true);\n document.removeEventListener('change', this.handleChange, true);\n document.removeEventListener('mousemove', this.handleMouseMove);\n window.removeEventListener('resize', this.handleViewportChange);\n window.removeEventListener('orientationchange', this.handleViewportChange);\n window.removeEventListener('beforeunload', this.handleNavigation);\n window.removeEventListener('pagehide', this.handleNavigation);\n }\n\n /**\n * Record initial DOM state\n */\n private recordInitialState(): void {\n this.addEvent({\n type: 'navigation',\n timestamp: Date.now(),\n data: {\n url: window.location.href,\n referrer: document.referrer,\n title: document.title,\n viewport: {\n width: window.innerWidth,\n height: window.innerHeight\n },\n screen: {\n width: window.screen?.width || 0,\n height: window.screen?.height || 0\n }\n },\n sequence: this.sequence++\n });\n }\n\n /**\n * Handle click events\n */\n private handleClick = (event: MouseEvent): void => {\n const target = event.target as Element;\n const path = this.getElementPath(target);\n \n this.addEvent({\n type: 'click',\n timestamp: Date.now(),\n data: {\n x: event.clientX,\n y: event.clientY,\n element: path,\n button: event.button,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey\n },\n sequence: this.sequence++\n });\n };\n\n /**\n * Handle scroll events\n */\n private handleScroll = (): void => {\n this.addEvent({\n type: 'scroll',\n timestamp: Date.now(),\n data: {\n x: window.pageXOffset || document.documentElement.scrollLeft,\n y: window.pageYOffset || document.documentElement.scrollTop\n },\n sequence: this.sequence++\n });\n };\n\n /**\n * Handle input events\n */\n private handleInput = (event: Event): void => {\n const target = event.target as HTMLInputElement;\n const path = this.getElementPath(target);\n \n let value = target.value;\n \n // Mask sensitive fields\n if (this.config.maskSensitiveFields && this.isSensitiveField(target)) {\n value = '*'.repeat(value.length);\n }\n\n this.addEvent({\n type: 'input',\n timestamp: Date.now(),\n data: {\n element: path,\n value: value,\n inputType: (event as InputEvent).inputType\n },\n sequence: this.sequence++\n });\n };\n\n /**\n * Handle change events\n */\n private handleChange = (event: Event): void => {\n const target = event.target as HTMLInputElement | HTMLSelectElement;\n const path = this.getElementPath(target);\n \n let value = (target as HTMLInputElement).value;\n \n if (this.config.maskSensitiveFields && this.isSensitiveField(target)) {\n value = '*'.repeat(value.length);\n }\n\n this.addEvent({\n type: 'input',\n timestamp: Date.now(),\n data: {\n element: path,\n value: value,\n type: 'change'\n },\n sequence: this.sequence++\n });\n };\n\n /**\n * Handle mouse move events (throttled)\n */\n private handleMouseMove = (event: MouseEvent): void => {\n const now = Date.now();\n if (now - this.lastMouseMove < this.mouseMoveThrottle) {\n return;\n }\n this.lastMouseMove = now;\n\n this.addEvent({\n type: 'mouse',\n timestamp: now,\n data: {\n x: event.clientX,\n y: event.clientY\n },\n sequence: this.sequence++\n });\n };\n\n /**\n * Handle viewport changes\n */\n private handleViewportChange = (): void => {\n this.addEvent({\n type: 'viewport',\n timestamp: Date.now(),\n data: {\n width: window.innerWidth,\n height: window.innerHeight\n },\n sequence: this.sequence++\n });\n };\n\n /**\n * Handle navigation events\n */\n private handleNavigation = (): void => {\n // Send final batch before navigation\n this.sendBatch();\n };\n\n /**\n * Serialize DOM mutation\n */\n private serializeMutation(mutation: MutationRecord): any {\n const result: any = {\n type: mutation.type,\n target: this.getElementPath(mutation.target as Element)\n };\n\n switch (mutation.type) {\n case 'childList':\n result.addedNodes = Array.from(mutation.addedNodes)\n .filter(node => node.nodeType === Node.ELEMENT_NODE)\n .map(node => this.serializeElement(node as Element))\n .slice(0, 10); // Limit to prevent huge payloads\n \n result.removedNodes = Array.from(mutation.removedNodes)\n .filter(node => node.nodeType === Node.ELEMENT_NODE)\n .map(node => this.getElementPath(node as Element))\n .slice(0, 10);\n break;\n\n case 'attributes':\n result.attributeName = mutation.attributeName;\n result.oldValue = mutation.oldValue;\n result.newValue = (mutation.target as Element).getAttribute(mutation.attributeName!);\n break;\n\n case 'characterData':\n result.oldValue = mutation.oldValue;\n result.newValue = mutation.target.textContent;\n break;\n }\n\n return result;\n }\n\n /**\n * Serialize DOM element\n */\n private serializeElement(element: Element): any {\n const attributes: Record<string, string> = {};\n \n for (const attr of Array.from(element.attributes)) {\n // Skip sensitive attributes\n if (!this.isSensitiveAttribute(attr.name)) {\n attributes[attr.name] = attr.value;\n }\n }\n\n return {\n tagName: element.tagName.toLowerCase(),\n attributes,\n textContent: element.textContent?.substring(0, 1000) || '' // Limit text content\n };\n }\n\n /**\n * Get element path for targeting\n */\n private getElementPath(element: Element): string {\n const path: string[] = [];\n let current = element;\n\n while (current && current !== document.body) {\n let selector = current.tagName.toLowerCase();\n \n if (current.id) {\n selector += `#${current.id}`;\n path.unshift(selector);\n break;\n }\n \n if (current.className) {\n const classes = current.className.toString().split(/\\s+/).slice(0, 2);\n selector += `.${classes.join('.')}`;\n }\n \n // Add nth-child if no unique identifier\n if (!current.id && !current.className) {\n const siblings = Array.from(current.parentElement?.children || []);\n const index = siblings.indexOf(current);\n selector += `:nth-child(${index + 1})`;\n }\n \n path.unshift(selector);\n current = current.parentElement!;\n }\n\n return path.join(' > ');\n }\n\n /**\n * Check if field should be masked\n */\n private isSensitiveField(element: Element): boolean {\n const sensitiveTypes = ['password', 'email', 'tel', 'ssn', 'cc'];\n const sensitiveNames = ['password', 'email', 'phone', 'credit', 'card', 'ssn', 'social'];\n \n const type = element.getAttribute('type')?.toLowerCase();\n const name = element.getAttribute('name')?.toLowerCase();\n const className = element.className.toLowerCase();\n \n return sensitiveTypes.includes(type || '') ||\n sensitiveNames.some(term => \n (name && name.includes(term)) ||\n className.includes(term)\n );\n }\n\n /**\n * Check if attribute should be masked\n */\n private isSensitiveAttribute(attrName: string): boolean {\n const sensitiveAttrs = ['data-token', 'data-key', 'data-secret', 'authorization'];\n return sensitiveAttrs.includes(attrName.toLowerCase());\n }\n\n /**\n * Add event to buffer\n */\n private addEvent(event: ReplayEvent): void {\n this.events.push(event);\n \n // Prevent memory overflow\n if (this.events.length > this.config.maxEventBuffer) {\n this.events = this.events.slice(-this.config.maxEventBuffer);\n }\n }\n\n /**\n * Start batch timer\n */\n private startBatchTimer(): void {\n this.batchTimer = window.setInterval(() => {\n this.sendBatch();\n }, this.config.batchInterval);\n }\n\n /**\n * Send batch of events\n */\n private sendBatch(): void {\n if (this.events.length === 0) return;\n\n const batch = [...this.events];\n this.events = [];\n\n const payload = {\n sessionId: this.sessionId,\n events: batch,\n metadata: {\n userAgent: navigator.userAgent,\n timestamp: Date.now(),\n compression: this.config.compressionEnabled\n }\n };\n\n // This will be handled by the anti-adblock manager\n this.sendToBackend(payload);\n }\n\n /**\n * Send data to backend (will be enhanced with anti-adblock)\n */\n private async sendToBackend(payload: any): Promise<void> {\n try {\n // For now, use standard fetch - will be replaced with anti-adblock manager\n const response = await fetch('/api/replay/record', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload)\n });\n\n if (!response.ok) {\n console.warn('[Zaplier] Session replay batch failed to send');\n }\n } catch (error) {\n console.warn('[Zaplier] Session replay error:', error);\n }\n }\n\n /**\n * Get current event count\n */\n getEventCount(): number {\n return this.events.length;\n }\n\n /**\n * Check if recording is active\n */\n isRecording(): boolean {\n return this.isActive;\n }\n}","/**\n * Zaplier SDK v1.0.0\n * 100% Cookieless Analytics Tracking\n *\n * Main SDK class for client-side tracking integration\n */\n\nimport type {\n InternalConfig,\n ZaplierSDK as IZaplierSDK,\n PageViewEvent,\n SDKConfig,\n UserData,\n VisitorHistory,\n VisitorInfo,\n} from \"./types\";\n\nimport {\n getCompleteFingerprint,\n getLightweightFingerprint,\n} from \"./modules/fingerprint\";\n\nimport { AntiAdblockManager } from \"./modules/anti-adblock\";\nimport { HeatmapEngine } from \"./modules/heatmap\";\nimport { SessionReplayEngine } from \"./modules/session-replay\";\n\n/**\n * Default internal configuration\n */\nconst DEFAULT_CONFIG: Omit<InternalConfig, keyof SDKConfig> = {\n apiEndpoint: \"https://api.zaplier.com\",\n retryEnabled: true,\n maxRetries: 3,\n retryDelays: [1000, 2000, 4000],\n autoTrack: true,\n dedupeEnabled: true,\n fingerprintEnabled: true,\n presenceTracking: false,\n heartbeatInterval: 30000,\n scrollTracking: true,\n scrollDepthTracking: true,\n gdprCompliant: true,\n enhancedTracking: \"ask\",\n replaySampling: 0.1,\n replayMaskInputs: true,\n};\n\n/**\n * Main Zaplier SDK Class\n */\nexport class ZaplierSDK implements IZaplierSDK {\n public config: InternalConfig;\n public version = \"3.0.0\";\n\n private visitorId?: string; // Client-side (deprecated). Do not use.\n private backendVisitorId?: string; // Real visitor ID from backend (UUID)\n private sessionId?: string;\n private fingerprint?: any;\n private isInitialized = false;\n private eventQueue: any[] = [];\n\n // Enhanced tracking engines\n private replayEngine?: SessionReplayEngine;\n private heatmapEngine?: HeatmapEngine;\n private antiAdblockManager?: AntiAdblockManager;\n\n constructor(userConfig: SDKConfig) {\n // Validate required config\n if (!userConfig.token) {\n throw new Error(\"Zaplier: token is required\");\n }\n\n // Merge user config with defaults\n this.config = {\n ...DEFAULT_CONFIG,\n ...userConfig,\n gdprMode: userConfig.gdprMode ?? false,\n };\n\n // Auto-initialize if in browser\n if (typeof window !== \"undefined\") {\n this.initialize();\n }\n }\n\n /**\n * Initialize SDK\n */\n private async initialize(): Promise<void> {\n try {\n if (this.config.debug) {\n console.log(\"[Zaplier] Initializing SDK v\" + this.version);\n }\n\n // Check localhost restriction\n if (!this.config.allow_localhost && this.isLocalhost()) {\n if (this.config.debug) {\n console.log(\"[Zaplier] Skipping tracking on localhost\");\n }\n return;\n }\n\n // Collect fingerprint\n await this.collectFingerprint();\n\n // Auto-track page view if enabled\n if (this.config.autoTrack) {\n this.trackPageView();\n }\n\n this.isInitialized = true;\n\n // Initialize tracking engines and anti-adblock system\n this.initializeTrackingEngines();\n this.initializeAntiAdblock();\n\n // Process queued events\n this.processEventQueue();\n\n if (this.config.debug) {\n console.log(\"[Zaplier] SDK initialized successfully\", {\n visitorId: this.visitorId,\n gdprMode: this.config.gdprMode,\n });\n }\n } catch (error) {\n console.error(\"[Zaplier] Initialization failed:\", error);\n }\n }\n\n /**\n * Initialize tracking engines (Session Replay & Heatmap)\n */\n private initializeTrackingEngines(): void {\n try {\n // Generate session ID once and only once during initialization\n if (!this.sessionId) {\n this.sessionId = this.generateSessionId();\n if (this.config.debug) {\n console.log(\"[Zaplier] Generated session ID:\", this.sessionId);\n }\n }\n\n // Initialize Session Replay Engine\n if (this.config.replay) {\n this.replayEngine = new SessionReplayEngine(this.sessionId, {\n sampleRate: this.config.replaySampling,\n maskSensitiveFields: this.config.replayMaskInputs,\n compressionEnabled: true,\n });\n this.replayEngine.start();\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Session Replay started\");\n }\n }\n\n // Initialize Heatmap Engine\n if (this.config.heatmap) {\n this.heatmapEngine = new HeatmapEngine(this.sessionId, {\n trackClicks: true,\n trackScrollDepth: true,\n trackRageClicks: true,\n trackMouseMoves: false, // Can be enabled via API\n });\n this.heatmapEngine.start();\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Heatmap tracking started\");\n }\n }\n } catch (error) {\n console.error(\"[Zaplier] Failed to initialize tracking engines:\", error);\n }\n }\n\n /**\n * Generate session ID\n */\n private generateSessionId(): string {\n // Create deterministic session ID based on page load time and stable browser characteristics\n const pageLoadTime = performance.timeOrigin || Date.now();\n const browserFingerprint = this.getBrowserFingerprint();\n \n // Use page load time + browser fingerprint for session uniqueness within same page load\n return pageLoadTime.toString(36) + browserFingerprint.substring(0, 8);\n }\n\n /**\n * Get stable browser characteristics for session ID generation\n * Uses only stable, privacy-safe values that don't change during session\n */\n private getBrowserFingerprint(): string {\n const components = [\n navigator.userAgent || '',\n navigator.platform || '',\n screen.width || 0,\n screen.height || 0,\n new Date(2024, 0, 1).getTimezoneOffset(),\n navigator.language || '',\n navigator.hardwareConcurrency || 0\n ];\n \n const combined = components.join('|');\n let hash = 0;\n for (let i = 0; i < combined.length; i++) {\n const char = combined.charCodeAt(i);\n hash = ((hash << 5) - hash + char) & 0xffffffff;\n }\n return Math.abs(hash).toString(36);\n }\n\n /**\n * Initialize Anti-Adblock Manager\n */\n private initializeAntiAdblock(): void {\n try {\n this.antiAdblockManager = new AntiAdblockManager(\n this.config.apiEndpoint,\n {\n enabled: true,\n methods: [\"fetch\", \"websocket\", \"resource\"],\n fallbackDelay: 100,\n maxRetries: 2,\n debug: this.config.debug,\n }\n );\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Anti-Adblock Manager initialized\");\n }\n } catch (error) {\n console.error(\n \"[Zaplier] Failed to initialize Anti-Adblock Manager:\",\n error\n );\n }\n }\n\n /**\n * Collect fingerprint and generate visitor ID (IMPROVED - 2024)\n * Enhanced with better incognito detection\n */\n private async collectFingerprint(): Promise<void> {\n try {\n // Use appropriate fingerprinting based on GDPR mode\n const result = this.config.gdprMode\n ? await getLightweightFingerprint()\n : await getCompleteFingerprint();\n\n if (result.success && result.data) {\n this.fingerprint = result.data;\n\n // ENHANCED: Include improved incognito detection in fingerprint data\n if (result.data.incognitoDetection) {\n // Store incognito detection results for better server-side analysis\n this.fingerprint.incognitoDetection = {\n ...result.data.incognitoDetection,\n // Add timestamp for analysis\n detectionTimestamp: Date.now(),\n // Add SDK version for debugging\n sdkVersion: this.version,\n };\n }\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Fingerprint collected:\", {\n components: result.collectedComponents,\n hashes: {\n full: result.data.hash,\n stableCore: (result.data as any).stableCoreHash,\n },\n gdprMode: this.config.gdprMode,\n incognitoDetected: result.data.incognitoDetection?.isIncognito,\n incognitoConfidence: result.data.incognitoDetection?.confidence,\n });\n }\n } else {\n throw new Error(\"Fingerprint collection failed\");\n }\n } catch (error) {\n if (this.config.debug) {\n console.error(\"[Zaplier] Fingerprint collection failed:\", error);\n }\n // Fallback: collect entropy for diagnostics only; do NOT set local visitorId\n try {\n // Collect stable entropy sources (no random values for consistency)\n const entropyComponents = [\n navigator.userAgent || \"\",\n navigator.language || \"\",\n navigator.platform || \"\",\n screen.width || 0,\n screen.height || 0,\n screen.colorDepth || 0,\n new Date(2024, 0, 1).getTimezoneOffset(),\n // Hardware-specific (stable values)\n navigator.hardwareConcurrency || 0,\n (navigator as any).deviceMemory || 0,\n navigator.maxTouchPoints || 0,\n // Use page load time (stable during session) instead of current time\n performance.timeOrigin || 0,\n // Deterministic entropy from browser characteristics\n (navigator.plugins ? navigator.plugins.length : 0),\n (navigator.mimeTypes ? navigator.mimeTypes.length : 0),\n // Memory usage pattern (if available, use rounded values for stability)\n Math.floor(((performance as any).memory?.usedJSHeapSize || 0) / 1000000),\n Math.floor(((performance as any).memory?.totalJSHeapSize || 0) / 1000000),\n // Connection info (if available)\n (navigator as any).connection?.effectiveType || \"\",\n Math.floor((navigator as any).connection?.downlink || 0),\n // Additional browser-specific entropy\n window.outerHeight || 0,\n window.outerWidth || 0,\n Math.floor((window.devicePixelRatio || 1) * 100) / 100, // Round to 2 decimals\n // Canvas support (deterministic)\n typeof document.createElement('canvas').getContext === 'function' ? 1 : 0,\n ];\n\n // Create deterministic entropy string\n const entropyString = entropyComponents.join(\"|\");\n\n // Add deterministic checksum instead of random values\n let checksum = 0;\n for (let i = 0; i < entropyString.length; i++) {\n checksum = ((checksum << 5) - checksum + entropyString.charCodeAt(i)) & 0xffffffff;\n }\n const deterministic = Math.abs(checksum).toString(36);\n\n // Advanced hash function with better distribution\n let hash = 0;\n const finalString = entropyString + deterministic;\n for (let i = 0; i < finalString.length; i++) {\n const char = finalString.charCodeAt(i);\n hash = ((hash << 5) - hash + char) & 0xffffffff;\n hash = hash ^ (hash >>> 16); // XOR with shifted bits for better distribution\n }\n\n if (!this.fingerprint) this.fingerprint = {} as any;\n (this.fingerprint as any).fallbackEntropy = Math.abs(hash).toString(36);\n } catch {\n // Last resort: noop\n }\n }\n }\n\n /**\n * Check if running on localhost\n */\n private isLocalhost(): boolean {\n if (typeof window === \"undefined\" || !window.location) return false;\n return (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\" ||\n window.location.hostname.startsWith(\"192.168.\") ||\n window.location.hostname.startsWith(\"10.\") ||\n window.location.hostname.includes(\"local\")\n );\n }\n\n /**\n * Send event to backend\n */\n private async sendEvent(eventData: any): Promise<any> {\n if (!this.isInitialized) {\n this.eventQueue.push(eventData);\n return;\n }\n\n try {\n const payload = {\n // workspaceId moved to query parameter\n fingerprintHash: this.fingerprint?.hash,\n stableCoreHash: (this.fingerprint as any)?.stableCoreHash,\n stableCoreVector: (this.fingerprint as any)?.stableCoreVector,\n // Send complete fingerprint data for embedding generation (includes all components: canvas, webgl, audio, fonts, etc.)\n fingerprintVector: this.fingerprint || undefined,\n incognitoDetection:\n (this.fingerprint as any)?.incognitoDetection &&\n ((this.fingerprint as any).incognitoDetection.likelihood !==\n undefined ||\n ((this.fingerprint as any).incognitoDetection.methods &&\n (this.fingerprint as any).incognitoDetection.methods.length > 0))\n ? (this.fingerprint as any).incognitoDetection\n : undefined,\n isSafari:\n typeof navigator !== \"undefined\" &&\n /safari/i.test(navigator.userAgent) &&\n !/chrome|chromium|opr|edg|edge/i.test(navigator.userAgent),\n // Client Hints (quando disponíveis)\n ch: (navigator as any).userAgentData\n ? {\n brands: (navigator as any).userAgentData.brands || [],\n platform: (navigator as any).userAgentData.platform || undefined,\n mobile: (navigator as any).userAgentData.mobile || undefined,\n model: (navigator as any).userAgentData.model || undefined,\n }\n : undefined,\n fingerprintComponents: this.fingerprint?.components || {},\n ...eventData,\n timestamp: new Date().toISOString(),\n url:\n typeof window !== \"undefined\" && window.location\n ? window.location.href\n : \"\",\n referrer: typeof document !== \"undefined\" ? document.referrer : \"\",\n pageTitle: typeof document !== \"undefined\" ? document.title : \"\",\n userAgent: typeof navigator !== \"undefined\" ? navigator.userAgent : \"\",\n // Use stabilized screen/viewport dimensions from fingerprint if available\n screenWidth:\n this.fingerprint?.screen?.value?.width ||\n (typeof window !== \"undefined\" && window.screen\n ? window.screen.width\n : 0),\n screenHeight:\n this.fingerprint?.screen?.value?.height ||\n (typeof window !== \"undefined\" && window.screen\n ? window.screen.height\n : 0),\n viewportWidth:\n this.fingerprint?.screen?.value?.viewportWidth ||\n (typeof window !== \"undefined\" ? window.innerWidth : 0),\n viewportHeight:\n this.fingerprint?.screen?.value?.viewportHeight ||\n (typeof window !== \"undefined\" ? window.innerHeight : 0),\n gdprMode: this.config.gdprMode,\n };\n\n const response = await this.makeRequest(\n `/tracking/event?token=${encodeURIComponent(this.config.token)}`,\n payload\n );\n\n // Store backend visitor ID and session ID from response\n if (response.visitorId) {\n this.backendVisitorId = response.visitorId;\n if (this.config.debug) {\n console.log(\n \"[Zaplier] Backend visitor ID received:\",\n response.visitorId\n );\n }\n }\n\n if (response.sessionId) {\n this.sessionId = response.sessionId;\n }\n\n return response;\n } catch (error) {\n if (this.config.debug) {\n console.error(\"[Zaplier] Event sending failed:\", error);\n }\n\n // Retry logic\n if (this.config.retryEnabled) {\n // Queue for retry (simplified)\n setTimeout(() => this.sendEvent(eventData), 5000);\n }\n }\n }\n\n /**\n * Make HTTP request to backend using anti-adblock system\n */\n private async makeRequest(\n endpoint: string,\n data: any,\n method: \"GET\" | \"POST\" = \"POST\"\n ): Promise<any> {\n const url = `${this.config.apiEndpoint}${endpoint}`;\n\n // Always try standard fetch first to get the response JSON (which contains visitorId)\n // Use anti-adblock as fallback if standard fetch is blocked or fails\n const options: RequestInit = {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n };\n\n if (method === \"POST\" && data) {\n options.body = JSON.stringify(data);\n }\n\n try {\n // Add timeout to detect if fetch is blocked/hanging\n const fetchWithTimeout = Promise.race([\n fetch(url, options),\n new Promise<Response>((_, reject) =>\n setTimeout(\n () => reject(new Error(\"Fetch timeout - possibly blocked\")),\n 5000\n )\n ),\n ]);\n\n const response = await fetchWithTimeout;\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const jsonResponse = await response.json();\n\n // If anti-adblock is enabled, also send via anti-adblock as a backup\n // (but don't wait for it or use its response)\n if (this.antiAdblockManager && method === \"POST\") {\n // Send in parallel without blocking\n this.antiAdblockManager.send(data, endpoint).catch(() => {\n // Silently fail - we already got the response from standard fetch\n });\n }\n\n return jsonResponse;\n } catch (error) {\n // If standard fetch fails (blocked, timeout, or network error), try anti-adblock as fallback\n if (this.antiAdblockManager && method === \"POST\") {\n if (this.config.debug) {\n console.warn(\n `[Zaplier] Standard fetch failed (${error instanceof Error ? error.message : String(error)}), trying anti-adblock fallback`\n );\n }\n\n try {\n const result = await this.antiAdblockManager.send(data, endpoint);\n\n if (result.success) {\n if (this.config.debug) {\n console.log(\n `[Zaplier] Request sent via ${result.method} (${result.latency}ms) as fallback`\n );\n }\n\n // Event was successfully sent via anti-adblock fallback\n // Note: visitorId will be obtained on the next successful request\n // (either standard fetch or anti-adblock) when the backend responds with it\n // This is acceptable because:\n // 1. The event was successfully tracked\n // 2. The visitorId will be available after the next event is sent\n // 3. Making an additional GET request here could also be blocked\n return { success: true, method: result.method };\n }\n } catch (antiAdblockError) {\n if (this.config.debug) {\n console.warn(\n \"[Zaplier] Both standard fetch and anti-adblock failed:\",\n antiAdblockError\n );\n }\n }\n }\n\n // Re-throw original error if all methods failed\n throw error;\n }\n }\n\n /**\n * Process queued events\n */\n private processEventQueue(): void {\n while (this.eventQueue.length > 0) {\n const event = this.eventQueue.shift();\n this.sendEvent(event);\n }\n }\n\n // Public API Methods\n\n /**\n * Track generic event\n */\n track(eventType: string, eventData?: Record<string, any>): void {\n this.sendEvent({\n eventType,\n eventName: eventType,\n customData: eventData,\n });\n }\n\n /**\n * Track custom event\n */\n trackCustomEvent(eventName: string, metadata?: Record<string, any>): boolean {\n this.sendEvent({\n eventType: \"custom\",\n eventName,\n customData: metadata,\n });\n return true;\n }\n\n /**\n * Track conversion event\n */\n trackConversion(\n eventName: string,\n value?: number,\n currency?: string,\n metadata?: Record<string, any>\n ): boolean {\n this.sendEvent({\n eventType: \"conversion\",\n eventName,\n revenue: value,\n currency: currency || \"USD\",\n customData: metadata,\n });\n return true;\n }\n\n /**\n * Track page view\n */\n trackPageView(data?: Partial<PageViewEvent>): void {\n this.sendEvent({\n eventType: \"page_view\",\n eventName: \"page_view\",\n ...data,\n });\n }\n\n /**\n * Track purchase\n */\n trackPurchase(data: {\n value?: number;\n revenue?: number;\n currency?: string;\n quantity?: number;\n productId?: string;\n productName?: string;\n orderId?: string;\n customData?: Record<string, any>;\n }): void {\n this.sendEvent({\n eventType: \"purchase\",\n eventName: \"purchase\",\n revenue: data.value || data.revenue,\n currency: data.currency || \"USD\",\n quantity: data.quantity || 1,\n productId: data.productId,\n customData: {\n productName: data.productName,\n orderId: data.orderId,\n ...data.customData,\n },\n });\n }\n\n /**\n * Track add to cart\n */\n trackAddToCart(data?: {\n productId?: string;\n productName?: string;\n price?: number;\n quantity?: number;\n customData?: Record<string, any>;\n }): void {\n this.sendEvent({\n eventType: \"add_to_cart\",\n eventName: \"add_to_cart\",\n revenue: data?.price,\n quantity: data?.quantity || 1,\n productId: data?.productId,\n customData: {\n productName: data?.productName,\n ...data?.customData,\n },\n });\n }\n\n /**\n * Track view content\n */\n trackViewContent(data?: {\n productId?: string;\n productName?: string;\n category?: string;\n customData?: Record<string, any>;\n }): void {\n this.sendEvent({\n eventType: \"view_content\",\n eventName: \"view_content\",\n productId: data?.productId,\n customData: {\n productName: data?.productName,\n category: data?.category,\n ...data?.customData,\n },\n });\n }\n\n /**\n * Track initiate checkout\n */\n trackInitiateCheckout(data?: {\n value?: number;\n currency?: string;\n numItems?: number;\n customData?: Record<string, any>;\n }): void {\n this.sendEvent({\n eventType: \"initiate_checkout\",\n eventName: \"initiate_checkout\",\n revenue: data?.value,\n currency: data?.currency || \"USD\",\n quantity: data?.numItems,\n customData: data?.customData,\n });\n }\n\n /**\n * Track lead\n */\n trackLead(data?: Record<string, any>): void {\n this.sendEvent({\n eventType: \"lead\",\n eventName: \"lead\",\n customData: data,\n });\n }\n\n /**\n * Identify user\n */\n identify(userData: {\n email?: string;\n phone?: string;\n [key: string]: any;\n }): void {\n this.sendEvent({\n eventType: \"identify\",\n eventName: \"identify\",\n email: userData.email,\n phone: userData.phone,\n customData: userData,\n });\n }\n\n /**\n * Track SPA navigation\n */\n trackSPANavigation(url?: string, title?: string): void {\n this.trackPageView({\n url:\n url ||\n (typeof window !== \"undefined\" && window.location\n ? window.location.href\n : \"\"),\n pageTitle:\n title || (typeof document !== \"undefined\" ? document.title : \"\"),\n });\n }\n\n /**\n * Reset scroll tracking\n */\n resetScrollTracking(): void {\n // Implementation for scroll tracking reset\n if (this.config.debug) {\n console.log(\"[Zaplier] Scroll tracking reset\");\n }\n }\n\n /**\n * Start presence tracking\n */\n startPresenceTracking(): void {\n this.config.presenceTracking = true;\n if (this.config.debug) {\n console.log(\"[Zaplier] Presence tracking started\");\n }\n }\n\n /**\n * Stop presence tracking\n */\n stopPresenceTracking(): void {\n this.config.presenceTracking = false;\n if (this.config.debug) {\n console.log(\"[Zaplier] Presence tracking stopped\");\n }\n }\n\n /**\n * Heatmap API\n */\n heatmap = {\n enable: (): void => {\n this.config.heatmap = true;\n\n if (!this.heatmapEngine && this.isInitialized) {\n // Ensure sessionId is available (should be set during initialization)\n if (!this.sessionId) {\n this.sessionId = this.generateSessionId();\n }\n const sessionId = this.sessionId;\n this.heatmapEngine = new HeatmapEngine(sessionId, {\n trackClicks: true,\n trackScrollDepth: true,\n trackRageClicks: true,\n trackMouseMoves: false,\n });\n this.heatmapEngine.start();\n }\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Heatmap enabled\");\n }\n },\n disable: (): void => {\n this.config.heatmap = false;\n\n if (this.heatmapEngine) {\n this.heatmapEngine.stop();\n this.heatmapEngine = undefined;\n }\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Heatmap disabled\");\n }\n },\n enableMouseTracking: (): void => {\n if (this.heatmapEngine) {\n this.heatmapEngine.enableMouseTracking();\n }\n },\n disableMouseTracking: (): void => {\n if (this.heatmapEngine) {\n this.heatmapEngine.disableMouseTracking();\n }\n },\n getStats: () => {\n return this.heatmapEngine ? this.heatmapEngine.getStats() : null;\n },\n isRecording: (): boolean => {\n return this.heatmapEngine ? this.heatmapEngine.isRecording() : false;\n },\n };\n\n /**\n * Replay API\n */\n replay = {\n enable: (): void => {\n this.config.replay = true;\n\n if (!this.replayEngine && this.isInitialized) {\n // Ensure sessionId is available (should be set during initialization)\n if (!this.sessionId) {\n this.sessionId = this.generateSessionId();\n }\n const sessionId = this.sessionId;\n this.replayEngine = new SessionReplayEngine(sessionId, {\n sampleRate: this.config.replaySampling,\n maskSensitiveFields: this.config.replayMaskInputs,\n compressionEnabled: true,\n });\n this.replayEngine.start();\n }\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Replay enabled\");\n }\n },\n disable: (): void => {\n this.config.replay = false;\n\n if (this.replayEngine) {\n this.replayEngine.stop();\n this.replayEngine = undefined;\n }\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Replay disabled\");\n }\n },\n start: (): boolean => {\n if (!this.replayEngine && this.isInitialized) {\n // Ensure sessionId is available (should be set during initialization)\n if (!this.sessionId) {\n this.sessionId = this.generateSessionId();\n }\n const sessionId = this.sessionId;\n this.replayEngine = new SessionReplayEngine(sessionId, {\n sampleRate: 1.0, // Force recording when manually started\n maskSensitiveFields: this.config.replayMaskInputs,\n compressionEnabled: true,\n });\n return this.replayEngine.start();\n }\n return this.replayEngine ? this.replayEngine.start() : false;\n },\n stop: (): void => {\n if (this.replayEngine) {\n this.replayEngine.stop();\n }\n },\n isRecording: (): boolean => {\n return this.replayEngine ? this.replayEngine.isRecording() : false;\n },\n getEventCount: (): number => {\n return this.replayEngine ? this.replayEngine.getEventCount() : 0;\n },\n addFunnelStep: (stepData: Record<string, any>): void => {\n this.sendEvent({\n eventType: \"funnel_step\",\n eventName: \"funnel_step\",\n customData: stepData,\n });\n },\n markConversion: (data: Record<string, any>): void => {\n this.trackConversion(\n \"funnel_conversion\",\n data.value,\n data.currency,\n data\n );\n },\n };\n\n /**\n * Enable enhanced tracking\n */\n enableEnhancedTracking(): boolean {\n this.config.enhancedTracking = \"true\";\n this.config.gdprMode = false;\n\n // Re-collect fingerprint with enhanced mode\n this.collectFingerprint();\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Enhanced tracking enabled\");\n }\n return true;\n }\n\n /**\n * Disable enhanced tracking\n */\n disableEnhancedTracking(): void {\n this.config.enhancedTracking = \"false\";\n this.config.gdprMode = true;\n\n if (this.config.debug) {\n console.log(\"[Zaplier] Enhanced tracking disabled\");\n }\n }\n\n /**\n * Check if enhanced mode is active\n */\n isEnhancedMode(): boolean {\n return this.config.enhancedTracking === \"true\" && !this.config.gdprMode;\n }\n\n /**\n * Get visitor ID (real UUID from backend, or fallback)\n */\n getVisitorId(): string | null {\n return this.backendVisitorId || this.visitorId || null;\n }\n\n /**\n * Get visitor information from backend\n * Returns detailed visitor data including location, device info, and stats\n *\n * IMPORTANT: Only uses backendVisitorId (UUID), not the local visitorId with 'vis_' prefix\n */\n async getVisitorInfo(): Promise<VisitorInfo | null> {\n // Only use backendVisitorId (UUID), not the local visitorId\n // The backend endpoint expects UUID format, not 'vis_xxx' format\n const visitorId = this.backendVisitorId;\n\n if (!visitorId) {\n if (this.config.debug) {\n console.warn(\n \"[Zaplier] No backend visitor ID available. Track an event first and wait for the response.\"\n );\n }\n return null;\n }\n\n // Validate that it's a UUID format (not the local 'vis_xxx' format)\n const uuidRegex =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n if (!uuidRegex.test(visitorId)) {\n if (this.config.debug) {\n console.warn(\n \"[Zaplier] Invalid visitor ID format. Expected UUID, got:\",\n visitorId\n );\n }\n return null;\n }\n\n try {\n const response = await this.makeRequest(\n `/tracking/visitor/${visitorId}?token=${encodeURIComponent(\n this.config.token\n )}`,\n null,\n \"GET\"\n );\n\n return response;\n } catch (error) {\n if (this.config.debug) {\n console.error(\"[Zaplier] Failed to get visitor info:\", error);\n }\n return null;\n }\n }\n\n /**\n * Get visitor history (visits/events)\n * Returns visit history with location, IP, incognito, VPN detection\n */\n async getVisitorHistory(): Promise<VisitorHistory | null> {\n // Only use backendVisitorId (UUID), not the local visitorId\n const visitorId = this.backendVisitorId;\n\n if (!visitorId) {\n if (this.config.debug) {\n console.warn(\n \"[Zaplier] No backend visitor ID available. Track an event first and wait for the response.\"\n );\n }\n return null;\n }\n\n // Validate that it's a UUID format\n const uuidRegex =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n if (!uuidRegex.test(visitorId)) {\n if (this.config.debug) {\n console.warn(\n \"[Zaplier] Invalid visitor ID format. Expected UUID, got:\",\n visitorId\n );\n }\n return null;\n }\n\n try {\n const response = await this.makeRequest(\n `/tracking/visitor/${visitorId}/history?token=${encodeURIComponent(\n this.config.token\n )}`,\n null,\n \"GET\"\n );\n\n return response;\n } catch (error) {\n if (this.config.debug) {\n console.error(\"[Zaplier] Failed to get visitor history:\", error);\n }\n return null;\n }\n }\n\n /**\n * Get user data\n */\n getUserData(): UserData {\n // Default values for SSR compatibility\n const defaultDevice = {\n userAgent: \"\",\n language: \"\",\n screen: { width: 0, height: 0 },\n };\n\n // Only access browser APIs if available\n const device =\n typeof window !== \"undefined\" && typeof navigator !== \"undefined\"\n ? {\n userAgent: navigator.userAgent || \"\",\n language: navigator.language || \"\",\n screen: {\n width: window.screen?.width || 0,\n height: window.screen?.height || 0,\n },\n }\n : defaultDevice;\n\n return {\n sessionId: this.sessionId || \"\",\n visitorId: this.getVisitorId() || undefined,\n location: {}, // Will be populated by backend\n device,\n journey: [], // Will be populated by backend\n fingerprint: this.fingerprint?.hash,\n };\n }\n\n /**\n * Get conversion likelihood (mock implementation)\n */\n getConversionLikelihood(): {\n score: number;\n factors: string[];\n } {\n return {\n score: 0.5,\n factors: [\"Requires backend analysis\"],\n };\n }\n\n /**\n * Get user segment (mock implementation)\n */\n getUserSegment(): {\n type: \"high_intent\" | \"medium_intent\" | \"exploring\";\n confidence: number;\n } {\n return {\n type: \"medium_intent\",\n confidence: 0.5,\n };\n }\n}\n\n/**\n * Default export for ES modules\n */\nexport default ZaplierSDK;\n","/**\n * Global Interface for Zaplier SDK\n * Provides unified API for both Script tag and NPM usage\n */\n\nimport { ZaplierSDK } from \"../sdk\";\nimport type { SDKConfig } from \"../types\";\n\n// Global instance holder\nlet globalInstance: ZaplierSDK | null = null;\n\n/**\n * Unified Zaplier interface\n */\nexport const Zaplier = {\n /**\n * Initialize SDK\n */\n init: (config: SDKConfig): ZaplierSDK => {\n if (globalInstance) {\n console.warn('[Zaplier] SDK already initialized');\n return globalInstance;\n }\n\n globalInstance = new ZaplierSDK(config);\n return globalInstance;\n },\n\n /**\n * Get current instance\n */\n getInstance: (): ZaplierSDK | null => {\n return globalInstance;\n },\n\n /**\n * Track custom event\n */\n track: (eventType: string, eventData?: Record<string, any>): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.track(eventType, eventData);\n },\n\n /**\n * Track page view\n */\n trackPageView: (data?: any): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.trackPageView(data);\n },\n\n /**\n * Track custom event (alias for track)\n */\n trackEvent: (eventName: string, metadata?: Record<string, any>): boolean => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return false;\n }\n return globalInstance.trackCustomEvent(eventName, metadata);\n },\n\n /**\n * Track conversion\n */\n trackConversion: (\n conversionType: string,\n value?: number,\n currency?: string,\n metadata?: Record<string, any>\n ): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.trackConversion(conversionType, value, currency, metadata);\n },\n\n /**\n * Track purchase\n */\n trackPurchase: (data: {\n value: number;\n currency?: string;\n items?: Array<{\n id: string;\n name: string;\n category?: string;\n quantity?: number;\n price?: number;\n }>;\n orderId?: string;\n coupon?: string;\n }): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.trackPurchase(data);\n },\n\n /**\n * Track add to cart\n */\n trackAddToCart: (data?: {\n productId?: string;\n productName?: string;\n price?: number;\n quantity?: number;\n customData?: Record<string, any>;\n }): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.trackAddToCart(data);\n },\n\n /**\n * Identify user\n */\n identify: (userData: {\n email?: string;\n name?: string;\n id?: string;\n properties?: Record<string, any>;\n }): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.identify(userData);\n },\n\n /**\n * Get visitor ID\n */\n getVisitorId: (): string | null => {\n if (!globalInstance) {\n return null;\n }\n return globalInstance.getVisitorId();\n },\n\n /**\n * Get visitor info\n */\n getVisitorInfo: (): Promise<any> => {\n if (!globalInstance) {\n return Promise.resolve(null);\n }\n return globalInstance.getVisitorInfo();\n },\n\n /**\n * Get user data\n */\n getUserData: (): any => {\n if (!globalInstance) {\n return null;\n }\n return globalInstance.getUserData();\n },\n\n /**\n * Enable enhanced tracking\n */\n enableEnhancedTracking: (): boolean => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return false;\n }\n return globalInstance.enableEnhancedTracking();\n },\n\n /**\n * Disable enhanced tracking\n */\n disableEnhancedTracking: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.disableEnhancedTracking();\n },\n\n /**\n * Check if enhanced mode is active\n */\n isEnhancedMode: (): boolean => {\n if (!globalInstance) {\n return false;\n }\n return globalInstance.isEnhancedMode();\n },\n\n /**\n * Heatmap controls\n */\n heatmap: {\n enable: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.heatmap.enable();\n },\n disable: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.heatmap.disable();\n },\n enableMouseTracking: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.heatmap.enableMouseTracking();\n },\n disableMouseTracking: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.heatmap.disableMouseTracking();\n },\n getStats: () => {\n if (!globalInstance) {\n return null;\n }\n return globalInstance.heatmap.getStats();\n },\n isRecording: (): boolean => {\n if (!globalInstance) {\n return false;\n }\n return globalInstance.heatmap.isRecording();\n }\n },\n\n /**\n * Session replay controls\n */\n replay: {\n enable: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.replay.enable();\n },\n disable: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.replay.disable();\n },\n start: (): boolean => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return false;\n }\n return globalInstance.replay.start();\n },\n stop: (): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.replay.stop();\n },\n isRecording: (): boolean => {\n if (!globalInstance) {\n return false;\n }\n return globalInstance.replay.isRecording();\n },\n getEventCount: (): number => {\n if (!globalInstance) {\n return 0;\n }\n return globalInstance.replay.getEventCount();\n },\n addFunnelStep: (stepData: Record<string, any>): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.replay.addFunnelStep(stepData);\n },\n markConversion: (data: Record<string, any>): void => {\n if (!globalInstance) {\n console.warn('[Zaplier] SDK not initialized. Call Zaplier.init() first');\n return;\n }\n globalInstance.replay.markConversion(data);\n }\n },\n\n /**\n * Debug and utility functions\n */\n debug: {\n getStats: () => {\n if (!globalInstance || !globalInstance['antiAdblockManager']) {\n return null;\n }\n return (globalInstance as any).antiAdblockManager.getStats();\n },\n getSuccessRates: () => {\n if (!globalInstance || !globalInstance['antiAdblockManager']) {\n return null;\n }\n return (globalInstance as any).antiAdblockManager.getSuccessRates();\n },\n testTransports: () => {\n if (!globalInstance || !globalInstance['antiAdblockManager']) {\n return Promise.resolve(null);\n }\n return (globalInstance as any).antiAdblockManager.testTransports();\n }\n },\n\n /**\n * Version info\n */\n version: '3.0.0'\n};\n\n/**\n * Auto-initialization from script tag data attributes\n */\nexport function autoInitializeFromScript(): void {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n\n // Look for script tag with data attributes\n const scripts = document.getElementsByTagName('script');\n let configScript: HTMLScriptElement | null = null;\n\n for (const script of Array.from(scripts)) {\n if (script.src && (\n script.src.includes('zaplier') ||\n script.src.includes('sdk.js') ||\n script.src.includes('sdk.min.js')\n ) && script.dataset.token) {\n configScript = script;\n break;\n }\n }\n\n if (!configScript || !configScript.dataset.token) {\n return;\n }\n\n // Build config from data attributes\n const config: SDKConfig = {\n token: configScript.dataset.token,\n debug: configScript.dataset.debug === 'true',\n gdprMode: configScript.dataset.gdprMode === 'true',\n heatmap: configScript.dataset.heatmap === 'true',\n replay: configScript.dataset.replay === 'true',\n allow_localhost: configScript.dataset.allowLocalhost === 'true'\n };\n\n // Initialize SDK\n try {\n Zaplier.init(config);\n \n if (config.debug) {\n console.log('[Zaplier] Auto-initialized from script tag', config);\n }\n } catch (error) {\n console.error('[Zaplier] Auto-initialization failed:', error);\n }\n}\n\n// Expose to global scope for script tag usage\nif (typeof window !== 'undefined') {\n (window as any).Zaplier = Zaplier;\n \n // Auto-initialize if DOM is ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', autoInitializeFromScript);\n } else {\n autoInitializeFromScript();\n }\n}","/**\n * Bot Detection Module\n * Comprehensive client-side bot detection based on multiple techniques\n * Detects headless browsers, automation tools, and suspicious behavior\n */\n\nimport type { BotDetectionResult, BotDetectionMethods, DetectionResult, UserAgentAnalysis } from '../types/detection';\n\n/**\n * Known bot user agent patterns\n */\nconst BOT_PATTERNS = [\n // Headless browsers\n /HeadlessChrome/i,\n /PhantomJS/i,\n /SlimerJS/i,\n \n // Automation tools\n /Selenium/i,\n /WebDriver/i,\n /ChromeDriver/i,\n /GeckoDriver/i,\n \n // Crawlers and bots\n /bot/i,\n /crawler/i,\n /spider/i,\n /scraper/i,\n \n // Specific bots\n /Googlebot/i,\n /Bingbot/i,\n /Slurp/i,\n /DuckDuckBot/i,\n /Baiduspider/i,\n /YandexBot/i,\n /facebookexternalhit/i,\n /Twitterbot/i,\n /LinkedInBot/i,\n /WhatsApp/i,\n /SkypeUriPreview/i\n];\n\n/**\n * Suspicious user agent patterns\n */\nconst SUSPICIOUS_PATTERNS = [\n /^Mozilla\\/5\\.0$/,\n /Headless/i,\n /automated/i,\n /testing/i,\n /^$/\n];\n\n/**\n * Detect WebDriver presence\n */\nfunction detectWebDriver(): DetectionResult {\n try {\n // Check for webdriver property\n if (navigator.webdriver === true) {\n return {\n detected: true,\n confidence: 95,\n method: 'navigator.webdriver_true'\n };\n }\n \n // Check for webdriver in window\n if ((window as any).webdriver === true) {\n return {\n detected: true,\n confidence: 90,\n method: 'window.webdriver_true'\n };\n }\n \n // Check for selenium-specific properties\n const seleniumKeys = [\n '_selenium',\n 'callSelenium',\n '_Selenium_IDE_Recorder',\n 'callPhantom',\n '_phantom',\n '__phantomas',\n '__fxdriver_evaluate',\n '__fxdriver_unwrapped',\n '_fxdriver_evaluate',\n '_fxdriver_unwrapped'\n ];\n \n for (const key of seleniumKeys) {\n if (key in window || key in document) {\n return {\n detected: true,\n confidence: 85,\n method: `selenium_property_${key}`\n };\n }\n }\n \n // Check for webdriver in document\n if (document.documentElement.getAttribute('webdriver')) {\n return {\n detected: true,\n confidence: 80,\n method: 'document_webdriver_attribute'\n };\n }\n \n return {\n detected: false,\n confidence: 0,\n method: 'webdriver_not_detected'\n };\n \n } catch (error) {\n return {\n detected: false,\n confidence: 0,\n method: 'webdriver_error',\n details: { error: error instanceof Error ? error.message : 'Unknown' }\n };\n }\n}\n\n/**\n * Detect headless browser characteristics\n */\nfunction detectHeadlessBrowser(): DetectionResult {\n try {\n let suspiciousCount = 0;\n const issues: string[] = [];\n \n // Check for missing window properties\n if (!window.outerHeight || !window.outerWidth) {\n suspiciousCount++;\n issues.push('missing_outer_dimensions');\n }\n \n // Check for plugins\n if (navigator.plugins.length === 0) {\n suspiciousCount++;\n issues.push('no_plugins');\n }\n \n // Check for languages\n if (!navigator.languages || navigator.languages.length === 0) {\n suspiciousCount++;\n issues.push('no_languages');\n }\n \n // Check for inconsistent user agent\n const userAgent = navigator.userAgent;\n if (!userAgent || userAgent.length < 50) {\n suspiciousCount++;\n issues.push('short_user_agent');\n }\n \n // Check for notification permission (often undefined in headless)\n if (typeof (Notification as any)?.permission === 'undefined') {\n suspiciousCount++;\n issues.push('no_notification_permission');\n }\n \n // Check for missing performance API\n if (!window.performance || !window.performance.timing) {\n suspiciousCount++;\n issues.push('missing_performance_api');\n }\n \n // Check Chrome-specific headless indicators\n if (userAgent.includes('Chrome')) {\n // Check for missing chrome object\n if (!(window as any).chrome) {\n suspiciousCount++;\n issues.push('missing_chrome_object');\n }\n \n // Check for headless in user agent\n if (userAgent.includes('HeadlessChrome')) {\n return {\n detected: true,\n confidence: 95,\n method: 'chrome_headless_user_agent'\n };\n }\n }\n \n const confidence = Math.min(suspiciousCount * 15, 90);\n \n return {\n detected: suspiciousCount >= 3,\n confidence,\n method: 'headless_characteristics',\n details: { issues, suspiciousCount }\n };\n \n } catch (error) {\n return {\n detected: false,\n confidence: 0,\n method: 'headless_detection_error',\n details: { error: error instanceof Error ? error.message : 'Unknown' }\n };\n }\n}\n\n/**\n * Detect automation tools\n */\nfunction detectAutomationTools(): DetectionResult {\n try {\n const automationIndicators = [\n 'webdriver',\n 'selenium',\n 'phantomjs',\n 'slimerjs',\n 'chromedriver',\n 'geckodriver',\n 'automation',\n 'puppeteer'\n ];\n \n const detectedTools: string[] = [];\n \n // Check window properties\n for (const tool of automationIndicators) {\n if ((window as any)[tool] || (window as any)[`_${tool}`] || (window as any)[`__${tool}`]) {\n detectedTools.push(tool);\n }\n }\n \n // Check document properties\n for (const tool of automationIndicators) {\n if ((document as any)[tool] || (document as any)[`_${tool}`] || (document as any)[`__${tool}`]) {\n detectedTools.push(tool);\n }\n }\n \n // Check for automation-specific errors\n try {\n // Use safer method to test navigation object access\n const nav = (window as any).navigator;\n if (!nav) {\n detectedTools.push('navigation_missing');\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : '';\n if (errorMessage.includes('automation') || errorMessage.includes('webdriver')) {\n detectedTools.push('navigation_automation_error');\n }\n }\n \n if (detectedTools.length > 0) {\n return {\n detected: true,\n confidence: Math.min(detectedTools.length * 30, 95),\n method: 'automation_tools_detected',\n details: { tools: detectedTools }\n };\n }\n \n return {\n detected: false,\n confidence: 0,\n method: 'no_automation_tools'\n };\n \n } catch (error) {\n return {\n detected: false,\n confidence: 0,\n method: 'automation_detection_error',\n details: { error: error instanceof Error ? error.message : 'Unknown' }\n };\n }\n}\n\n/**\n * Detect DOM blockers (ad blockers and privacy tools)\n */\nfunction detectDOMBlockers(): DetectionResult {\n try {\n const blockerSelectors = [\n // Ad blocker elements\n '#ad-banner',\n '.advertisement',\n '.google-ads',\n '.adsense',\n \n // Analytics blockers\n '#google-analytics',\n '.analytics',\n '[src*=\"google-analytics\"]',\n '[src*=\"googletagmanager\"]',\n \n // Social media blockers\n '.facebook-widget',\n '.twitter-widget',\n '.social-share'\n ];\n \n let blockedCount = 0;\n \n for (const selector of blockerSelectors) {\n const element = document.querySelector(selector);\n if (!element) {\n blockedCount++;\n }\n }\n \n // Test if we can create tracking pixels\n try {\n const pixel = document.createElement('img');\n pixel.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n pixel.style.display = 'none';\n document.body.appendChild(pixel);\n \n setTimeout(() => {\n if (pixel.parentNode) {\n pixel.parentNode.removeChild(pixel);\n }\n }, 100);\n } catch {\n blockedCount++;\n }\n \n const confidence = Math.min(blockedCount * 20, 80);\n \n return {\n detected: blockedCount >= 2,\n confidence,\n method: 'dom_blockers',\n details: { blockedCount, totalTests: blockerSelectors.length + 1 }\n };\n \n } catch (error) {\n return {\n detected: false,\n confidence: 0,\n method: 'dom_blocker_error',\n details: { error: error instanceof Error ? error.message : 'Unknown' }\n };\n }\n}\n\n/**\n * Check for missing languages (common in bots)\n */\nfunction detectMissingLanguages(): DetectionResult {\n try {\n if (!navigator.languages || navigator.languages.length === 0) {\n return {\n detected: true,\n confidence: 70,\n method: 'no_languages'\n };\n }\n \n if (navigator.languages.length === 1 && navigator.languages[0] === 'en-US') {\n return {\n detected: true,\n confidence: 40,\n method: 'single_default_language'\n };\n }\n \n // Check for inconsistent language settings\n if (navigator.language !== navigator.languages[0]) {\n return {\n detected: true,\n confidence: 30,\n method: 'inconsistent_languages',\n details: {\n language: navigator.language,\n firstLanguage: navigator.languages[0]\n }\n };\n }\n \n return {\n detected: false,\n confidence: 0,\n method: 'languages_normal',\n details: { languageCount: navigator.languages.length }\n };\n \n } catch (error) {\n return {\n detected: true,\n confidence: 50,\n method: 'language_detection_error',\n details: { error: error instanceof Error ? error.message : 'Unknown' }\n };\n }\n}\n\n/**\n * Test for inconsistent eval behavior\n */\nfunction detectInconsistentEval(): DetectionResult {\n try {\n // Test if basic math computation works normally\n const testFunction = new Function('return 2 + 2');\n const result = testFunction();\n \n if (result !== 4) {\n return {\n detected: true,\n confidence: 90,\n method: 'function_constructor_incorrect_result',\n details: { expected: 4, actual: result }\n };\n }\n \n // Test if Function constructor toString() is modified\n const functionString = Function.toString();\n if (!functionString.includes('[native code]') && !functionString.includes('function Function()')) {\n return {\n detected: true,\n confidence: 70,\n method: 'function_constructor_modified_toString',\n details: { functionString: functionString.substring(0, 100) }\n };\n }\n \n return {\n detected: false,\n confidence: 0,\n method: 'eval_normal'\n };\n \n } catch (error) {\n return {\n detected: true,\n confidence: 60,\n method: 'eval_error',\n details: { error: error instanceof Error ? error.message : 'Unknown' }\n };\n }\n}\n\n/**\n * Analyze user agent for bot patterns\n */\nfunction analyzeUserAgent(): UserAgentAnalysis {\n const userAgent = navigator.userAgent;\n \n // Check for bot patterns\n const botPatterns = BOT_PATTERNS.filter(pattern => pattern.test(userAgent));\n const suspiciousPatterns = SUSPICIOUS_PATTERNS.filter(pattern => pattern.test(userAgent));\n \n let category: 'crawler' | 'automation' | 'headless' | 'legitimate' = 'legitimate';\n \n if (botPatterns.some(p => p.source.includes('bot|crawler|spider'))) {\n category = 'crawler';\n } else if (botPatterns.some(p => p.source.includes('Selenium|WebDriver'))) {\n category = 'automation';\n } else if (botPatterns.some(p => p.source.includes('Headless|Phantom'))) {\n category = 'headless';\n }\n \n const allPatterns = [...botPatterns.map(p => p.source), ...suspiciousPatterns.map(p => p.source)];\n \n return {\n browser: {\n name: 'Unknown',\n version: 'Unknown',\n major: 'Unknown',\n engine: 'unknown'\n },\n os: {\n name: 'Unknown',\n version: 'Unknown',\n family: 'unknown'\n },\n device: {\n type: 'desktop'\n },\n suspicious: {\n isBot: botPatterns.length > 0 || suspiciousPatterns.length > 0,\n patterns: allPatterns,\n category: botPatterns.length > 0 ? category : 'legitimate'\n },\n isMobile: false,\n isTablet: false,\n isDesktop: true,\n isBot: botPatterns.length > 0 || suspiciousPatterns.length > 0,\n raw: userAgent\n };\n}\n\n/**\n * Main bot detection function\n */\nexport async function detectBot(): Promise<BotDetectionResult> {\n // Run all detection methods\n const detectors: BotDetectionMethods = {\n webDriver: detectWebDriver(),\n headlessBrowser: detectHeadlessBrowser(),\n automationTools: detectAutomationTools(),\n domBlockers: detectDOMBlockers(),\n missingLanguages: detectMissingLanguages(),\n inconsistentEval: detectInconsistentEval(),\n \n // Behavioral detection (placeholder - would need more time to implement)\n humanBehavior: { detected: false, confidence: 0, method: 'not_implemented' },\n mouseMovement: { detected: false, confidence: 0, method: 'not_implemented' },\n clickPatterns: { detected: false, confidence: 0, method: 'not_implemented' },\n \n // Canvas/WebGL consistency (placeholder - would integrate with fingerprinting)\n canvasInconsistency: { detected: false, confidence: 0, method: 'not_implemented' },\n webglAnomaly: { detected: false, confidence: 0, method: 'not_implemented' },\n \n // Plugin detection\n missingPlugins: { detected: navigator.plugins.length === 0, confidence: 30, method: 'plugin_count' },\n inconsistentProperties: { detected: false, confidence: 0, method: 'not_implemented' },\n \n // Modified built-ins detection\n modifiedBuiltins: { detected: false, confidence: 0, method: 'not_implemented' }\n };\n \n // Analyze user agent\n const userAgent = analyzeUserAgent();\n \n // Calculate overall bot detection\n const positiveDetections = Object.values(detectors).filter(d => d.detected);\n const totalConfidence = positiveDetections.reduce((sum, d) => sum + d.confidence, 0);\n const averageConfidence = positiveDetections.length > 0 ? totalConfidence / positiveDetections.length : 0;\n \n // Determine if bot is detected\n const isBot = positiveDetections.length >= 2 || // Multiple detections\n positiveDetections.some(d => d.confidence >= 90) || // High confidence detection\n (userAgent.suspicious?.isBot ?? false); // User agent indicates bot\n \n // Determine risk level\n let riskLevel: 'low' | 'medium' | 'high' = 'low';\n if (averageConfidence >= 70) {\n riskLevel = 'high';\n } else if (averageConfidence >= 40 || positiveDetections.length >= 2) {\n riskLevel = 'medium';\n }\n \n return {\n isBot,\n confidence: Math.round(Math.min(averageConfidence, 95)),\n riskLevel,\n detectionMethods: Object.keys(detectors).filter(key => detectors[key]?.detected),\n detectors,\n userAgent\n };\n}\n\n/**\n * Quick bot detection (faster, less comprehensive)\n */\nexport async function quickBotDetection(): Promise<boolean> {\n // Check only the most reliable indicators\n const webDriver = detectWebDriver();\n const userAgent = analyzeUserAgent();\n \n return webDriver.detected || (userAgent.suspicious?.isBot ?? false);\n}","/**\n * Incognito Mode Detection (Analytics Only)\n *\n * Detects private/incognito browsing mode for analytics purposes only.\n * Does NOT use localStorage/sessionStorage for tracking or data persistence.\n * Used only to enrich analytics data with browser context information.\n */\n\nimport type {\n DetectionResult,\n IncognitoDetectionMethods,\n IncognitoDetectionResult,\n} from \"../types/detection\";\n\n/**\n * Test localStorage availability and behavior (ANALYTICS ONLY)\n *\n * NOTE: This function uses localStorage purely for DETECTION purposes.\n * It does NOT store any tracking data or persistent information.\n * Used only to analyze browser capabilities for analytics context.\n */\nasync function testLocalStorage(): Promise<DetectionResult> {\n try {\n const testKey = \"__incognito_test_\" + Date.now();\n const testValue = \"test\";\n\n // Try to set and get localStorage item (for detection only, immediately cleaned up)\n localStorage.setItem(testKey, testValue);\n const retrieved = localStorage.getItem(testKey);\n localStorage.removeItem(testKey); // Immediately cleanup test data\n\n // In some incognito modes, localStorage works but has limited capacity\n if (retrieved !== testValue) {\n return {\n detected: true,\n confidence: 80,\n method: \"localStorage_inconsistency\",\n details: { retrieved, expected: testValue },\n };\n }\n\n // Test storage capacity (incognito often has reduced limits) - DETECTION ONLY\n try {\n const largData = \"x\".repeat(1024 * 1024); // 1MB\n localStorage.setItem(\"__capacity_test\", largData); // Test only, immediately removed\n localStorage.removeItem(\"__capacity_test\"); // Immediate cleanup\n\n return {\n detected: false,\n confidence: 30,\n method: \"localStorage_capacity\",\n };\n } catch (capacityError) {\n // Limited capacity might indicate incognito\n return {\n detected: true,\n confidence: 60,\n method: \"localStorage_capacity_limited\",\n details: {\n error:\n capacityError instanceof Error ? capacityError.message : \"Unknown\",\n },\n };\n }\n } catch (error) {\n // localStorage completely unavailable\n return {\n detected: true,\n confidence: 90,\n method: \"localStorage_unavailable\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test sessionStorage availability (ANALYTICS ONLY)\n *\n * NOTE: Uses sessionStorage purely for browser capability detection.\n * No tracking data is stored - all test data is immediately removed.\n */\nasync function testSessionStorage(): Promise<DetectionResult> {\n try {\n const testKey = \"__session_test_\" + Date.now();\n const testValue = \"test\";\n\n sessionStorage.setItem(testKey, testValue); // Test only, immediately cleaned\n const retrieved = sessionStorage.getItem(testKey);\n sessionStorage.removeItem(testKey); // Immediate cleanup\n\n if (retrieved !== testValue) {\n return {\n detected: true,\n confidence: 75,\n method: \"sessionStorage_inconsistency\",\n details: { retrieved, expected: testValue },\n };\n }\n\n return {\n detected: false,\n confidence: 20,\n method: \"sessionStorage_working\",\n };\n } catch (error) {\n return {\n detected: true,\n confidence: 85,\n method: \"sessionStorage_unavailable\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test IndexedDB availability and behavior\n */\nasync function testIndexedDB(): Promise<DetectionResult> {\n try {\n if (!window.indexedDB) {\n return {\n detected: true,\n confidence: 70,\n method: \"indexedDB_unavailable\",\n };\n }\n\n return new Promise<DetectionResult>((resolve) => {\n const dbName = \"__incognito_test_\" + Date.now();\n const request = indexedDB.open(dbName, 1);\n\n const timeout = setTimeout(() => {\n resolve({\n detected: true,\n confidence: 60,\n method: \"indexedDB_timeout\",\n });\n }, 1000);\n\n request.onerror = () => {\n clearTimeout(timeout);\n resolve({\n detected: true,\n confidence: 80,\n method: \"indexedDB_error\",\n details: { error: request.error?.message },\n });\n };\n\n request.onsuccess = () => {\n clearTimeout(timeout);\n const db = request.result;\n\n // Clean up\n db.close();\n indexedDB.deleteDatabase(dbName);\n\n resolve({\n detected: false,\n confidence: 25,\n method: \"indexedDB_working\",\n });\n };\n\n request.onblocked = () => {\n clearTimeout(timeout);\n resolve({\n detected: true,\n confidence: 70,\n method: \"indexedDB_blocked\",\n });\n };\n });\n } catch (error) {\n return {\n detected: true,\n confidence: 85,\n method: \"indexedDB_exception\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test WebSQL availability (legacy browsers)\n */\nasync function testOpenDatabase(): Promise<DetectionResult> {\n try {\n const openDatabase = (window as any).openDatabase;\n\n if (!openDatabase) {\n return {\n detected: false,\n confidence: 10,\n method: \"openDatabase_unsupported\",\n };\n }\n\n const db = openDatabase(\"__test\", \"1.0\", \"Test\", 1024);\n\n if (!db) {\n return {\n detected: true,\n confidence: 60,\n method: \"openDatabase_failed\",\n };\n }\n\n return {\n detected: false,\n confidence: 20,\n method: \"openDatabase_working\",\n };\n } catch (error) {\n return {\n detected: true,\n confidence: 70,\n method: \"openDatabase_error\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test permissions API behavior\n */\nasync function testPermissions(): Promise<DetectionResult> {\n try {\n if (!navigator.permissions) {\n return {\n detected: false,\n confidence: 10,\n method: \"permissions_unsupported\",\n };\n }\n\n // Test notification permission (often different in incognito)\n const result = await navigator.permissions.query({ name: \"notifications\" });\n\n // In some browsers, incognito mode always returns \"denied\" for notifications\n if (result.state === \"denied\") {\n return {\n detected: true,\n confidence: 40,\n method: \"permissions_notifications_denied\",\n details: { state: result.state },\n };\n }\n\n return {\n detected: false,\n confidence: 30,\n method: \"permissions_working\",\n details: { state: result.state },\n };\n } catch (error) {\n return {\n detected: true,\n confidence: 50,\n method: \"permissions_error\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test quota management API (IMPROVED - 2024)\n *\n * Enhanced with better thresholds and browser-specific detection\n */\nasync function testQuotaManagement(): Promise<DetectionResult> {\n try {\n if (!navigator.storage || !navigator.storage.estimate) {\n return {\n detected: false,\n confidence: 10,\n method: \"quota_unsupported\",\n };\n }\n\n const estimate = await navigator.storage.estimate();\n const userAgent = navigator.userAgent;\n const isChrome = /Chrome/.test(userAgent) && !/Edg|OPR/.test(userAgent);\n const isSafari = /Safari/.test(userAgent) && !/Chrome/.test(userAgent);\n\n // Browser-specific quota thresholds for incognito detection\n let suspiciousQuota: number;\n let highConfidenceQuota: number;\n\n if (isChrome) {\n // Chrome incognito typically has 120MB or less\n suspiciousQuota = 150 * 1024 * 1024; // 150MB\n highConfidenceQuota = 120 * 1024 * 1024; // 120MB\n } else if (isSafari) {\n // Safari private mode has different limits\n suspiciousQuota = 50 * 1024 * 1024; // 50MB\n highConfidenceQuota = 25 * 1024 * 1024; // 25MB\n } else {\n // Generic thresholds for other browsers\n suspiciousQuota = 100 * 1024 * 1024; // 100MB\n highConfidenceQuota = 50 * 1024 * 1024; // 50MB\n }\n\n if (estimate.quota) {\n if (estimate.quota <= highConfidenceQuota) {\n return {\n detected: true,\n confidence: 85,\n method: \"quota_very_limited\",\n details: {\n quota: estimate.quota,\n usage: estimate.usage,\n quotaMB: Math.round(estimate.quota / (1024 * 1024)),\n threshold: Math.round(highConfidenceQuota / (1024 * 1024)),\n },\n };\n } else if (estimate.quota <= suspiciousQuota) {\n return {\n detected: true,\n confidence: 65,\n method: \"quota_limited\",\n details: {\n quota: estimate.quota,\n usage: estimate.usage,\n quotaMB: Math.round(estimate.quota / (1024 * 1024)),\n threshold: Math.round(suspiciousQuota / (1024 * 1024)),\n },\n };\n }\n }\n\n return {\n detected: false,\n confidence: 30,\n method: \"quota_normal\",\n details: {\n quota: estimate.quota,\n usage: estimate.usage,\n quotaMB: estimate.quota\n ? Math.round(estimate.quota / (1024 * 1024))\n : null,\n },\n };\n } catch (error) {\n return {\n detected: true,\n confidence: 50, // Lower confidence for errors\n method: \"quota_error\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test modern Chrome-specific incognito detection (ADDED - 2024)\n *\n * Based on detectIncognito library methodology\n * Uses Chrome's specific storage allocation in incognito mode\n */\nasync function testChromeIncognitoDetection(): Promise<DetectionResult> {\n try {\n const userAgent = navigator.userAgent;\n const isChrome = /Chrome/.test(userAgent) && !/Edg|OPR/.test(userAgent);\n\n if (!isChrome) {\n return {\n detected: false,\n confidence: 0,\n method: \"chrome_detection_not_applicable\",\n };\n }\n\n // Chrome-specific: Test FileSystem API quota behavior\n if ((window as any).webkitRequestFileSystem) {\n return new Promise<DetectionResult>((resolve) => {\n const success = () => {\n resolve({\n detected: false,\n confidence: 40,\n method: \"chrome_filesystem_available\",\n });\n };\n\n const error = () => {\n resolve({\n detected: true,\n confidence: 80,\n method: \"chrome_filesystem_blocked\",\n });\n };\n\n try {\n (window as any).webkitRequestFileSystem(0, 1, success, error);\n } catch (e) {\n resolve({\n detected: true,\n confidence: 70,\n method: \"chrome_filesystem_exception\",\n });\n }\n\n // Timeout fallback\n setTimeout(() => {\n resolve({\n detected: false,\n confidence: 20,\n method: \"chrome_filesystem_timeout\",\n });\n }, 1000);\n });\n }\n\n return {\n detected: false,\n confidence: 10,\n method: \"chrome_filesystem_unsupported\",\n };\n } catch (error) {\n return {\n detected: false,\n confidence: 10,\n method: \"chrome_detection_error\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test Safari-specific incognito detection (ADDED - 2024)\n *\n * Safari has unique behaviors in private mode\n */\nasync function testSafariIncognitoDetection(): Promise<DetectionResult> {\n try {\n const userAgent = navigator.userAgent;\n const isSafari = /Safari/.test(userAgent) && !/Chrome/.test(userAgent);\n\n if (!isSafari) {\n return {\n detected: false,\n confidence: 0,\n method: \"safari_detection_not_applicable\",\n };\n }\n\n // Safari-specific: Test localStorage.length behavior\n try {\n localStorage.setItem(\"__safari_test\", \"test\");\n const lengthBefore = localStorage.length;\n localStorage.removeItem(\"__safari_test\");\n\n if (lengthBefore === 0) {\n return {\n detected: true,\n confidence: 75,\n method: \"safari_localStorage_blocked\",\n };\n }\n } catch (e) {\n return {\n detected: true,\n confidence: 80,\n method: \"safari_localStorage_exception\",\n };\n }\n\n // Safari: Test window.indexedDB behavior\n if (!window.indexedDB) {\n return {\n detected: true,\n confidence: 70,\n method: \"safari_indexedDB_missing\",\n };\n }\n\n return {\n detected: false,\n confidence: 30,\n method: \"safari_detection_normal\",\n };\n } catch (error) {\n return {\n detected: false,\n confidence: 10,\n method: \"safari_detection_error\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test filesystem API availability\n */\nasync function testFilesystem(): Promise<DetectionResult> {\n try {\n const requestFileSystem =\n (window as any).requestFileSystem ||\n (window as any).webkitRequestFileSystem;\n\n if (!requestFileSystem) {\n return {\n detected: false,\n confidence: 10,\n method: \"filesystem_unsupported\",\n };\n }\n\n return new Promise<DetectionResult>((resolve) => {\n requestFileSystem(\n (window as any).TEMPORARY || 0,\n 1024,\n () => {\n resolve({\n detected: false,\n confidence: 30,\n method: \"filesystem_working\",\n });\n },\n (error: any) => {\n resolve({\n detected: true,\n confidence: 60,\n method: \"filesystem_error\",\n details: { error: error.name || \"Unknown\" },\n });\n }\n );\n\n // Timeout\n setTimeout(() => {\n resolve({\n detected: true,\n confidence: 50,\n method: \"filesystem_timeout\",\n });\n }, 1000);\n });\n } catch (error) {\n return {\n detected: true,\n confidence: 70,\n method: \"filesystem_exception\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test cookies enabled state\n */\nasync function testCookiesEnabled(): Promise<DetectionResult> {\n try {\n const cookiesEnabled = navigator.cookieEnabled;\n\n // Test by setting a cookie\n document.cookie = \"__incognito_test=test; path=/\";\n const cookieSet = document.cookie.includes(\"__incognito_test=test\");\n\n // Clean up\n document.cookie =\n \"__incognito_test=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/\";\n\n if (!cookiesEnabled || !cookieSet) {\n return {\n detected: true,\n confidence: 50,\n method: \"cookies_disabled\",\n details: { cookiesEnabled, cookieSet },\n };\n }\n\n return {\n detected: false,\n confidence: 20,\n method: \"cookies_working\",\n details: { cookiesEnabled, cookieSet },\n };\n } catch (error) {\n return {\n detected: true,\n confidence: 60,\n method: \"cookies_error\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Test cache detection through timing\n */\nasync function testCacheDetection(): Promise<DetectionResult> {\n try {\n const image = new Image();\n const startTime = performance.now();\n\n return new Promise<DetectionResult>((resolve) => {\n const timeout = setTimeout(() => {\n resolve({\n detected: false,\n confidence: 10,\n method: \"cache_timeout\",\n });\n }, 3000);\n\n image.onload = () => {\n clearTimeout(timeout);\n const loadTime = performance.now() - startTime;\n\n // Very fast load might indicate cache is disabled (incognito)\n if (loadTime < 5) {\n resolve({\n detected: true,\n confidence: 30,\n method: \"cache_too_fast\",\n details: { loadTime },\n });\n } else {\n resolve({\n detected: false,\n confidence: 20,\n method: \"cache_normal\",\n details: { loadTime },\n });\n }\n };\n\n image.onerror = () => {\n clearTimeout(timeout);\n resolve({\n detected: false,\n confidence: 10,\n method: \"cache_error\",\n });\n };\n\n // Use a small, commonly cached image\n image.src =\n \"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\";\n });\n } catch (error) {\n return {\n detected: false,\n confidence: 10,\n method: \"cache_exception\",\n details: { error: error instanceof Error ? error.message : \"Unknown\" },\n };\n }\n}\n\n/**\n * Detect browser-specific incognito patterns\n */\nfunction detectBrowserSpecificPatterns(): {\n browser: string;\n supportsDetection: boolean;\n} {\n const userAgent = navigator.userAgent.toLowerCase();\n\n if (userAgent.includes(\"chrome\")) {\n return { browser: \"Chrome\", supportsDetection: true };\n } else if (userAgent.includes(\"firefox\")) {\n return { browser: \"Firefox\", supportsDetection: true };\n } else if (userAgent.includes(\"safari\")) {\n return { browser: \"Safari\", supportsDetection: true };\n } else if (userAgent.includes(\"edge\")) {\n return { browser: \"Edge\", supportsDetection: true };\n }\n\n return { browser: \"Unknown\", supportsDetection: false };\n}\n\n/**\n * Main incognito detection function (IMPROVED - 2024)\n *\n * Enhanced with:\n * - Weighted scoring system to reduce false positives\n * - Browser-specific detection weights\n * - Multi-signal validation requirements\n * - Improved confidence thresholds\n */\nexport async function detectIncognitoMode(): Promise<IncognitoDetectionResult> {\n const browserInfo = detectBrowserSpecificPatterns();\n\n // Browser detection for specific weights\n const userAgent = navigator.userAgent;\n const isChrome = /Chrome/.test(userAgent) && !/Edg|OPR/.test(userAgent);\n const isSafari = /Safari/.test(userAgent) && !/Chrome/.test(userAgent);\n const isFirefox = /Firefox/.test(userAgent);\n const isEdge = /Edg/.test(userAgent);\n\n // Run critical detection methods with timeout protection\n const testTimeout = 2000; // 2 second timeout for each test\n\n const [\n localStorage,\n sessionStorage,\n indexedDB,\n permissions,\n quotaManagement,\n filesystem,\n cacheDetection,\n chromeSpecific,\n safariSpecific,\n ] = await Promise.allSettled([\n Promise.race([\n testLocalStorage(),\n timeoutPromise(testTimeout, \"localStorage\"),\n ]),\n Promise.race([\n testSessionStorage(),\n timeoutPromise(testTimeout, \"sessionStorage\"),\n ]),\n Promise.race([testIndexedDB(), timeoutPromise(testTimeout, \"indexedDB\")]),\n Promise.race([\n testPermissions(),\n timeoutPromise(testTimeout, \"permissions\"),\n ]),\n Promise.race([\n testQuotaManagement(),\n timeoutPromise(testTimeout, \"quotaManagement\"),\n ]),\n Promise.race([testFilesystem(), timeoutPromise(testTimeout, \"filesystem\")]),\n Promise.race([\n testCacheDetection(),\n timeoutPromise(testTimeout, \"cacheDetection\"),\n ]),\n Promise.race([\n testChromeIncognitoDetection(),\n timeoutPromise(testTimeout, \"chromeSpecific\"),\n ]),\n Promise.race([\n testSafariIncognitoDetection(),\n timeoutPromise(testTimeout, \"safariSpecific\"),\n ]),\n ]);\n\n // Process results with weighted scoring\n const detectedSignals: {\n method: string;\n confidence: number;\n weight: number;\n }[] = [];\n\n // Process each test result with browser-specific weights\n const testResults = [\n { name: \"localStorage\", result: localStorage },\n { name: \"sessionStorage\", result: sessionStorage },\n { name: \"indexedDB\", result: indexedDB },\n { name: \"permissions\", result: permissions },\n { name: \"quotaManagement\", result: quotaManagement },\n { name: \"filesystem\", result: filesystem },\n { name: \"cacheDetection\", result: cacheDetection },\n { name: \"chromeSpecific\", result: chromeSpecific },\n { name: \"safariSpecific\", result: safariSpecific },\n ];\n\n testResults.forEach(({ name, result }) => {\n if (result.status === \"fulfilled\" && result.value.detected) {\n const weight = getBrowserSpecificWeight(\n name,\n {\n isChrome,\n isSafari,\n isFirefox,\n isEdge,\n },\n result.value.confidence\n );\n\n detectedSignals.push({\n method: result.value.method,\n confidence: result.value.confidence,\n weight: weight,\n });\n }\n });\n\n // IMPROVED CONFIDENCE CALCULATION with weighted scoring\n const totalWeight = detectedSignals.reduce(\n (sum, signal) => sum + signal.weight,\n 0\n );\n const weightedConfidence = detectedSignals.reduce(\n (sum, signal) => sum + (signal.confidence * signal.weight) / 100,\n 0\n );\n\n // Browser-specific minimum weight thresholds to reduce false positives\n let minWeightThreshold: number;\n if (isSafari) {\n minWeightThreshold = 35; // Safari has some reliable signals\n } else if (isChrome || isEdge) {\n minWeightThreshold = 45; // Chrome/Edge need stronger evidence\n } else if (isFirefox) {\n minWeightThreshold = 40; // Firefox somewhere in between\n } else {\n minWeightThreshold = 50; // Unknown browsers need strongest evidence\n }\n\n // Require significant combined evidence\n const isDetected = totalWeight >= minWeightThreshold;\n const finalConfidence =\n totalWeight > 0\n ? Math.min(95, (weightedConfidence / totalWeight) * 100)\n : 0;\n\n // Legacy structure for compatibility\n const detectionMethods: IncognitoDetectionMethods = {\n localStorage:\n localStorage.status === \"fulfilled\"\n ? localStorage.value\n : { detected: false, confidence: 0, method: \"failed\" },\n sessionStorage:\n sessionStorage.status === \"fulfilled\"\n ? sessionStorage.value\n : { detected: false, confidence: 0, method: \"failed\" },\n indexedDB:\n indexedDB.status === \"fulfilled\"\n ? indexedDB.value\n : { detected: false, confidence: 0, method: \"failed\" },\n openDatabase: { detected: false, confidence: 0, method: \"deprecated\" }, // Deprecated\n permissions:\n permissions.status === \"fulfilled\"\n ? permissions.value\n : { detected: false, confidence: 0, method: \"failed\" },\n quotaManagement:\n quotaManagement.status === \"fulfilled\"\n ? quotaManagement.value\n : { detected: false, confidence: 0, method: \"failed\" },\n filesystem:\n filesystem.status === \"fulfilled\"\n ? filesystem.value\n : { detected: false, confidence: 0, method: \"failed\" },\n cookiesEnabled: { detected: false, confidence: 0, method: \"deprecated\" }, // Handled in server-side now\n cacheDetection:\n cacheDetection.status === \"fulfilled\"\n ? cacheDetection.value\n : { detected: false, confidence: 0, method: \"failed\" },\n };\n\n // Debug logging for development\n if (\n typeof window !== \"undefined\" &&\n (window as any).RabbitTracker?.config?.debug\n ) {\n console.debug(\"Incognito Detection Analysis:\", {\n browserInfo: { isChrome, isSafari, isFirefox, isEdge },\n detectedSignals,\n totalWeight,\n minWeightThreshold,\n finalConfidence,\n isDetected,\n });\n }\n\n return {\n isIncognito: isDetected,\n confidence: Math.round(finalConfidence),\n detectionMethods: detectedSignals.map((s) => s.method),\n details: {\n localStorage: detectionMethods.localStorage?.detected ?? false,\n sessionStorage: detectionMethods.sessionStorage?.detected ?? false,\n indexedDB: detectionMethods.indexedDB?.detected ?? false,\n cookiesEnabled: false, // Deprecated - handled server-side\n quota: detectionMethods.quotaManagement?.detected ? 0 : null,\n permissions: detectionMethods.permissions?.details || {},\n },\n };\n}\n\n/**\n * Helper function for timeout promises\n */\nfunction timeoutPromise(timeout: number, methodName: string): Promise<any> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve({\n detected: false,\n confidence: 0,\n method: `${methodName}_timeout`,\n });\n }, timeout);\n });\n}\n\n/**\n * Get browser-specific weights for detection methods\n */\nfunction getBrowserSpecificWeight(\n method: string,\n browserInfo: {\n isChrome: boolean;\n isSafari: boolean;\n isFirefox: boolean;\n isEdge: boolean;\n },\n baseConfidence: number\n): number {\n const baseWeight = Math.floor(baseConfidence * 0.5); // More conservative base weight\n\n switch (method) {\n case \"quotaManagement\":\n // Chrome's quotaManagement is very reliable for incognito detection\n if (browserInfo.isChrome || browserInfo.isEdge)\n return Math.min(50, baseWeight + 25);\n if (browserInfo.isSafari) return Math.min(40, baseWeight + 15);\n return Math.min(30, baseWeight + 10);\n\n case \"filesystem\":\n // Chrome filesystem API is reliable\n if (browserInfo.isChrome || browserInfo.isEdge)\n return Math.min(40, baseWeight + 20);\n return Math.max(5, baseWeight - 5); // Less reliable in other browsers\n\n case \"indexedDB\":\n // Firefox often blocks IndexedDB in private mode\n if (browserInfo.isFirefox) return Math.min(45, baseWeight + 20);\n if (browserInfo.isSafari) return Math.min(35, baseWeight + 10);\n return baseWeight;\n\n case \"localStorage\":\n // localStorage tests are generally less reliable now\n return Math.max(5, baseWeight - 15);\n\n case \"sessionStorage\":\n // sessionStorage tests are also less reliable\n return Math.max(5, baseWeight - 10);\n\n case \"permissions\":\n // Permission API behavior can be useful\n if (browserInfo.isChrome) return Math.min(30, baseWeight + 10);\n return Math.max(5, baseWeight - 5);\n\n case \"cacheDetection\":\n // Cache detection is generally unreliable\n return Math.max(5, baseWeight - 20);\n\n case \"chromeSpecific\":\n // Chrome-specific detection methods are highly reliable\n if (browserInfo.isChrome) return Math.min(50, baseWeight + 30);\n return 0; // Not applicable to other browsers\n\n case \"safariSpecific\":\n // Safari-specific detection methods are highly reliable\n if (browserInfo.isSafari) return Math.min(45, baseWeight + 25);\n return 0; // Not applicable to other browsers\n\n default:\n return Math.max(5, baseWeight);\n }\n}\n\n/**\n * Quick incognito detection (less comprehensive but faster)\n */\nexport async function quickIncognitoDetection(): Promise<boolean> {\n try {\n // Test the most reliable indicators quickly\n const [localStorage, indexedDB] = await Promise.all([\n testLocalStorage(),\n testIndexedDB(),\n ]);\n\n return localStorage.detected || indexedDB.detected;\n } catch {\n return false;\n }\n}\n","/**\n * Enhanced User Agent Parser\n * Based on FingerprintJS browser detection with advanced engine and version parsing\n */\n\nimport type { UserAgentAnalysis } from '../types/detection';\n\n/**\n * Browser engine detection (based on FingerprintJS)\n */\nexport function isChromium(): boolean {\n try {\n return typeof (window as any).chrome === 'object' && \n (window as any).chrome !== null && \n typeof (window as any).chrome.runtime === 'object';\n } catch {\n return false;\n }\n}\n\nexport function isWebKit(): boolean {\n return navigator.userAgent.includes('WebKit') && \n !navigator.userAgent.includes('Chrome');\n}\n\nexport function isGecko(): boolean {\n return navigator.userAgent.includes('Gecko') && \n !navigator.userAgent.includes('Chrome');\n}\n\nexport function isSamsungInternet(): boolean {\n return navigator.userAgent.includes('SamsungBrowser') || \n navigator.userAgent.includes('Samsung Internet');\n}\n\nexport function isIPad(): boolean {\n // iPad detection (iOS 13+ shows as desktop Safari)\n return navigator.userAgent.includes('iPad') ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);\n}\n\nexport function isAndroid(): boolean {\n return navigator.userAgent.includes('Android');\n}\n\n/**\n * Extract browser version from user agent\n */\nfunction extractVersion(userAgent: string, pattern: RegExp): string {\n const match = userAgent.match(pattern);\n return match ? (match[1] || 'Unknown') : 'Unknown';\n}\n\n/**\n * Detect browser name and version\n */\nfunction detectBrowser(userAgent: string): { name: string; version: string; major: string; engine: string } {\n const ua = userAgent.toLowerCase();\n \n // Edge (Chromium-based)\n if (ua.includes('edg/')) {\n const version = extractVersion(userAgent, /edg\\/([0-9.]+)/i);\n return {\n name: 'Edge',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Edge Legacy\n if (ua.includes('edge/')) {\n const version = extractVersion(userAgent, /edge\\/([0-9.]+)/i);\n return {\n name: 'Edge Legacy',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'edgehtml'\n };\n }\n \n // Brave Browser (check before Chrome)\n if (ua.includes('brave/') || (navigator as any).brave) {\n const version = extractVersion(userAgent, /chrome\\/([0-9.]+)/i);\n return {\n name: 'Brave',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Samsung Internet\n if (isSamsungInternet()) {\n const version = extractVersion(userAgent, /samsungbrowser\\/([0-9.]+)/i) ||\n extractVersion(userAgent, /samsung internet ([0-9.]+)/i);\n return {\n name: 'Samsung Internet',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Chrome (check after other Chromium browsers)\n if (ua.includes('chrome/') && !ua.includes('edg')) {\n const version = extractVersion(userAgent, /chrome\\/([0-9.]+)/i);\n return {\n name: 'Chrome',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Firefox\n if (ua.includes('firefox/')) {\n const version = extractVersion(userAgent, /firefox\\/([0-9.]+)/i);\n return {\n name: 'Firefox',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'gecko'\n };\n }\n \n // Safari (check after Chrome to avoid false positives)\n if (ua.includes('safari/') && !ua.includes('chrome')) {\n const version = extractVersion(userAgent, /version\\/([0-9.]+)/i);\n return {\n name: 'Safari',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'webkit'\n };\n }\n \n // Opera (modern versions)\n if (ua.includes('opr/') || ua.includes('opera/')) {\n const version = extractVersion(userAgent, /(?:opr|opera)\\/([0-9.]+)/i);\n return {\n name: 'Opera',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: isChromium() ? 'chromium' : 'unknown'\n };\n }\n \n // Vivaldi\n if (ua.includes('vivaldi/')) {\n const version = extractVersion(userAgent, /vivaldi\\/([0-9.]+)/i);\n return {\n name: 'Vivaldi',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Yandex Browser\n if (ua.includes('yabrowser/')) {\n const version = extractVersion(userAgent, /yabrowser\\/([0-9.]+)/i);\n return {\n name: 'Yandex Browser',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Internet Explorer\n if (ua.includes('msie') || ua.includes('trident/')) {\n const version = extractVersion(userAgent, /(?:msie |rv:)([0-9.]+)/i);\n return {\n name: 'Internet Explorer',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'trident'\n };\n }\n \n // UC Browser\n if (ua.includes('ucbrowser/')) {\n const version = extractVersion(userAgent, /ucbrowser\\/([0-9.]+)/i);\n return {\n name: 'UC Browser',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // QQ Browser\n if (ua.includes('qqbrowser/')) {\n const version = extractVersion(userAgent, /qqbrowser\\/([0-9.]+)/i);\n return {\n name: 'QQ Browser',\n version,\n major: version.split('.')[0] || 'Unknown',\n engine: 'chromium'\n };\n }\n \n // Unknown browser\n return {\n name: 'Unknown',\n version: 'Unknown',\n major: 'Unknown',\n engine: 'unknown'\n };\n}\n\n/**\n * Detect operating system\n */\nfunction detectOS(userAgent: string): { name: string; version: string; family: string } {\n const ua = userAgent.toLowerCase();\n \n // Windows\n if (ua.includes('windows nt')) {\n const version = extractVersion(userAgent, /windows nt ([0-9.]+)/i);\n let osName = 'Windows';\n \n // Map NT versions to friendly names\n switch (version) {\n case '10.0': osName = 'Windows 10/11'; break;\n case '6.3': osName = 'Windows 8.1'; break;\n case '6.2': osName = 'Windows 8'; break;\n case '6.1': osName = 'Windows 7'; break;\n case '6.0': osName = 'Windows Vista'; break;\n case '5.1': osName = 'Windows XP'; break;\n default: osName = 'Windows';\n }\n \n return {\n name: osName,\n version,\n family: 'windows'\n };\n }\n \n // macOS / Mac OS X\n if (ua.includes('mac os x') || ua.includes('macos')) {\n const version = extractVersion(userAgent, /mac os x ([0-9._]+)/i) ||\n extractVersion(userAgent, /macos ([0-9._]+)/i);\n return {\n name: 'macOS',\n version: version.replace(/_/g, '.'),\n family: 'macos'\n };\n }\n \n // iOS\n if (ua.includes('iphone') || ua.includes('ipad') || ua.includes('ipod') || isIPad()) {\n const version = extractVersion(userAgent, /os ([0-9._]+)/i);\n return {\n name: 'iOS',\n version: version.replace(/_/g, '.'),\n family: 'ios'\n };\n }\n \n // Android\n if (isAndroid()) {\n const version = extractVersion(userAgent, /android ([0-9.]+)/i);\n return {\n name: 'Android',\n version,\n family: 'android'\n };\n }\n \n // Linux\n if (ua.includes('linux')) {\n return {\n name: 'Linux',\n version: 'Unknown',\n family: 'linux'\n };\n }\n \n // Chrome OS\n if (ua.includes('cros')) {\n const version = extractVersion(userAgent, /cros [a-z0-9_]+ ([0-9.]+)/i);\n return {\n name: 'Chrome OS',\n version,\n family: 'linux'\n };\n }\n \n // FreeBSD\n if (ua.includes('freebsd')) {\n return {\n name: 'FreeBSD',\n version: 'Unknown',\n family: 'unix'\n };\n }\n \n // Unknown OS\n return {\n name: 'Unknown',\n version: 'Unknown',\n family: 'unknown'\n };\n}\n\n/**\n * Detect device type\n */\nfunction detectDevice(userAgent: string): { type: 'desktop' | 'mobile' | 'tablet'; vendor?: string; model?: string } {\n const ua = userAgent.toLowerCase();\n \n // Tablet detection\n if (ua.includes('tablet') || isIPad()) {\n if (isIPad()) {\n return { type: 'tablet', vendor: 'Apple', model: 'iPad' };\n }\n if (ua.includes('kindle')) {\n return { type: 'tablet', vendor: 'Amazon', model: 'Kindle' };\n }\n return { type: 'tablet' };\n }\n \n // Mobile detection\n if (ua.includes('mobile') || \n ua.includes('iphone') || \n ua.includes('ipod') || \n isAndroid()) {\n \n if (ua.includes('iphone')) {\n return { type: 'mobile', vendor: 'Apple', model: 'iPhone' };\n }\n if (ua.includes('ipod')) {\n return { type: 'mobile', vendor: 'Apple', model: 'iPod' };\n }\n if (isAndroid() && ua.includes('mobile')) {\n return { type: 'mobile', vendor: 'Android' };\n }\n \n return { type: 'mobile' };\n }\n \n // Desktop (default)\n return { type: 'desktop' };\n}\n\n/**\n * Check for suspicious patterns in user agent\n */\nfunction analyzeSuspiciousPatterns(userAgent: string): { isBot: boolean; patterns: string[]; category: string } {\n const patterns: string[] = [];\n let category = 'legitimate';\n \n // Bot patterns\n const botKeywords = [\n 'bot', 'crawler', 'spider', 'scraper', 'automation',\n 'headless', 'phantom', 'selenium', 'webdriver',\n 'google', 'bing', 'yahoo', 'baidu', 'yandex',\n 'facebook', 'twitter', 'linkedin', 'whatsapp'\n ];\n \n for (const keyword of botKeywords) {\n if (userAgent.toLowerCase().includes(keyword)) {\n patterns.push(keyword);\n \n if (['bot', 'crawler', 'spider', 'scraper'].some(k => keyword.includes(k))) {\n category = 'crawler';\n } else if (['selenium', 'webdriver', 'automation'].some(k => keyword.includes(k))) {\n category = 'automation';\n } else if (['headless', 'phantom'].some(k => keyword.includes(k))) {\n category = 'headless';\n }\n }\n }\n \n // Suspicious patterns\n if (userAgent.length < 10) {\n patterns.push('too_short');\n }\n \n if (!userAgent || userAgent === 'Mozilla/5.0') {\n patterns.push('generic_mozilla');\n }\n \n const isBot = patterns.length > 0;\n \n return { isBot, patterns, category };\n}\n\n/**\n * Enhanced user agent analysis\n */\nexport function analyzeUserAgent(userAgent?: string): UserAgentAnalysis {\n const ua = userAgent || navigator.userAgent || '';\n \n const browser = detectBrowser(ua);\n const os = detectOS(ua);\n const device = detectDevice(ua);\n const suspicious = analyzeSuspiciousPatterns(ua);\n \n return {\n browser: {\n name: browser.name,\n version: browser.version,\n major: browser.major,\n engine: browser.engine as any\n },\n os: {\n name: os.name,\n version: os.version,\n family: os.family as any\n },\n device: {\n type: device.type,\n vendor: device.vendor,\n model: device.model\n },\n suspicious: {\n isBot: suspicious.isBot,\n patterns: suspicious.patterns,\n category: suspicious.category as any\n },\n isMobile: device.type === 'mobile',\n isTablet: device.type === 'tablet',\n isDesktop: device.type === 'desktop',\n isBot: suspicious.isBot,\n raw: ua\n };\n}\n\n/**\n * Get browser engine type\n */\nexport function getBrowserEngine(): 'chromium' | 'webkit' | 'gecko' | 'trident' | 'unknown' {\n if (isChromium()) return 'chromium';\n if (isWebKit()) return 'webkit';\n if (isGecko()) return 'gecko';\n \n const ua = navigator.userAgent.toLowerCase();\n if (ua.includes('trident')) return 'trident';\n \n return 'unknown';\n}\n\n/**\n * Check if running on mobile device\n */\nexport function isMobile(): boolean {\n return detectDevice(navigator.userAgent).type === 'mobile';\n}\n\n/**\n * Check if running on tablet\n */\nexport function isTablet(): boolean {\n return detectDevice(navigator.userAgent).type === 'tablet';\n}\n\n/**\n * Check if running on desktop\n */\nexport function isDesktop(): boolean {\n return detectDevice(navigator.userAgent).type === 'desktop';\n}","export interface IncognitoDetection {\n likelihood: number; // 0..1\n methods: string[];\n}\n\nfunction safeHas(fn: () => any): boolean {\n try {\n return !!fn();\n } catch {\n return false;\n }\n}\n\n/**\n * Test if localStorage actually works (not just exists)\n */\nasync function testLocalStorage(): Promise<boolean> {\n try {\n const testKey = \"__incognito_test__\";\n const testValue = Date.now().toString();\n localStorage.setItem(testKey, testValue);\n const retrieved = localStorage.getItem(testKey);\n localStorage.removeItem(testKey);\n return retrieved === testValue;\n } catch {\n return false;\n }\n}\n\n/**\n * Test if sessionStorage actually works (not just exists)\n */\nasync function testSessionStorage(): Promise<boolean> {\n try {\n const testKey = \"__incognito_test__\";\n const testValue = Date.now().toString();\n sessionStorage.setItem(testKey, testValue);\n const retrieved = sessionStorage.getItem(testKey);\n sessionStorage.removeItem(testKey);\n return retrieved === testValue;\n } catch {\n return false;\n }\n}\n\n/**\n * Test if IndexedDB actually works (not just exists)\n */\nasync function testIndexedDB(): Promise<boolean> {\n try {\n if (!window.indexedDB) return false;\n // Try to open a test database\n return new Promise((resolve) => {\n const request = indexedDB.open(\"__incognito_test__\", 1);\n request.onsuccess = () => {\n request.result.close();\n indexedDB.deleteDatabase(\"__incognito_test__\");\n resolve(true);\n };\n request.onerror = () => resolve(false);\n request.onblocked = () => resolve(false);\n });\n } catch {\n return false;\n }\n}\n\n/**\n * Test if cookies actually work (write and read)\n */\nfunction testCookies(): boolean {\n try {\n const testKey = \"__incognito_test__\";\n const testValue = Date.now().toString();\n document.cookie = `${testKey}=${testValue}; SameSite=Strict; path=/`;\n const hasCookie = document.cookie.indexOf(`${testKey}=${testValue}`) !== -1;\n // Clean up\n document.cookie = `${testKey}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`;\n return hasCookie;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if navigator.languages is suspicious (Chrome 86+ incognito has only 1 value)\n */\nfunction checkLanguagesAnomaly(): boolean {\n try {\n if (Array.isArray(navigator.languages)) {\n // In Chrome 86+ incognito, navigator.languages only has 1 element (same as navigator.language)\n // In normal mode, it usually has multiple\n if (navigator.languages.length === 1 && navigator.language) {\n return navigator.languages[0] === navigator.language;\n }\n }\n return false;\n } catch {\n return false;\n }\n}\n\nexport async function detectIncognitoHeuristics(): Promise<IncognitoDetection> {\n const methods: string[] = [];\n let score = 0;\n\n // CRITICAL: Test if localStorage actually works (not just exists)\n // In incognito, localStorage may exist but fail on write/read\n const localStorageWorks = await testLocalStorage();\n if (!localStorageWorks) {\n score += 0.25;\n methods.push(\"localStorage_blocked\");\n }\n\n // CRITICAL: Test if sessionStorage actually works\n const sessionStorageWorks = await testSessionStorage();\n if (!sessionStorageWorks) {\n score += 0.2;\n methods.push(\"sessionStorage_blocked\");\n }\n\n // CRITICAL: Test if IndexedDB actually works\n // In Firefox incognito, IndexedDB exists but throws errors\n const indexedDBWorks = await testIndexedDB();\n if (!indexedDBWorks) {\n score += 0.15;\n methods.push(\"indexedDB_blocked\");\n }\n\n // CRITICAL: Test if cookies actually work\n const cookiesWork = testCookies();\n if (!cookiesWork) {\n score += 0.2;\n methods.push(\"cookies_blocked\");\n }\n\n // Chrome 86+ incognito: navigator.languages has only 1 value\n // This is a strong indicator in Chrome/Brave\n if (checkLanguagesAnomaly()) {\n score += 0.25; // Increased weight - very reliable in Chrome/Brave\n methods.push(\"languages_single_value\");\n }\n\n // Additional Chrome/Brave-specific checks\n // In Chrome/Brave incognito, some APIs may exist but behave differently\n try {\n // Check if we can actually write to localStorage (even if it exists)\n if (localStorageWorks) {\n // Try to detect if localStorage is in a \"temporary\" state\n // In incognito, localStorage may work but be cleared between sessions\n const testKey = \"__incognito_persistence_test__\";\n const testValue = \"persist_test\";\n localStorage.setItem(testKey, testValue);\n // Immediately check if it persisted (some browsers clear it instantly in incognito)\n const persisted = localStorage.getItem(testKey) === testValue;\n localStorage.removeItem(testKey);\n if (!persisted) {\n score += 0.2;\n methods.push(\"localStorage_not_persistent\");\n }\n }\n } catch {\n // Ignore\n }\n\n // storage.estimate quota anomalies (more precise thresholds)\n try {\n if ((navigator as any).storage?.estimate) {\n const est = await (navigator as any).storage.estimate();\n const quota = est?.quota || 0;\n const usage = est?.usage || 0;\n\n // In incognito, quota is usually very low (< 120MB) or 0\n if (quota === 0) {\n score += 0.3;\n methods.push(\"storage_quota_zero\");\n } else if (quota > 0 && quota < 120 * 1024 * 1024) {\n score += 0.25;\n methods.push(\"storage_quota_low\");\n }\n\n // Usage is usually 0 in incognito\n if (usage === 0 && quota > 0) {\n score += 0.1;\n methods.push(\"storage_usage_zero\");\n }\n } else {\n methods.push(\"storage_estimate_unavailable\");\n }\n } catch {\n methods.push(\"storage_estimate_error\");\n }\n\n // ServiceWorker/Cache restritos\n if (!(\"serviceWorker\" in navigator)) {\n score += 0.1;\n methods.push(\"service_worker_absent\");\n }\n if (!(\"caches\" in window)) {\n score += 0.05;\n methods.push(\"cache_api_absent\");\n }\n\n // Permissions API (push/notifications) - more reliable test\n try {\n if ((navigator as any).permissions?.query) {\n const res = await (navigator as any).permissions.query({\n name: \"notifications\" as any,\n });\n if (res?.state === \"denied\") {\n score += 0.05;\n methods.push(\"notifications_denied\");\n }\n }\n } catch {\n methods.push(\"permissions_query_error\");\n }\n\n // File System Access API (Chrome only, blocked in incognito)\n if (!safeHas(() => (window as any).showOpenFilePicker)) {\n methods.push(\"fs_access_absent\");\n }\n\n // Network Information API (blocked in some browsers incognito)\n if (!(\"connection\" in navigator)) {\n methods.push(\"network_info_absent\");\n }\n\n // Bound score and determine likelihood\n score = Math.max(0, Math.min(1, score));\n\n // High confidence thresholds\n // If multiple storage APIs are blocked, very likely incognito\n const blockedStorageCount = [\n localStorageWorks,\n sessionStorageWorks,\n indexedDBWorks,\n cookiesWork,\n ].filter((x) => !x).length;\n if (blockedStorageCount >= 3) {\n score = Math.max(score, 0.85); // High confidence\n } else if (blockedStorageCount >= 2) {\n score = Math.max(score, 0.7); // Medium-high confidence\n }\n\n // CRITICAL: Chrome/Brave incognito often shows languages_single_value\n // If this is detected along with other signals, boost confidence\n const hasLanguagesAnomaly = methods.includes(\"languages_single_value\");\n if (hasLanguagesAnomaly && (blockedStorageCount >= 1 || score >= 0.2)) {\n score = Math.max(score, 0.5); // Medium confidence - likely incognito\n }\n\n return { likelihood: score, methods };\n}\n","/**\n * Hardware Fingerprinting Module\n * Based on FingerprintJS hardware detection techniques\n */\n\n/**\n * Device Memory Detection\n * Detects available device memory in GB\n */\nexport function getDeviceMemory(): number | null {\n try {\n // navigator.deviceMemory returns memory in GB (e.g., 8 for 8GB)\n if ('deviceMemory' in navigator) {\n const memory = (navigator as any).deviceMemory;\n return typeof memory === 'number' ? memory : null;\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Hardware Concurrency Detection\n * Detects number of logical processors\n */\nexport function getHardwareConcurrency(): number | null {\n try {\n if ('hardwareConcurrency' in navigator) {\n const concurrency = navigator.hardwareConcurrency;\n return typeof concurrency === 'number' ? concurrency : null;\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * CPU Architecture Detection\n * Attempts to detect CPU architecture from various sources\n */\nexport function getArchitecture(): string {\n try {\n // Try multiple methods to detect architecture\n const sources = [\n navigator.platform,\n navigator.userAgent,\n // Check for ARM indicators\n navigator.userAgent.includes('ARM') ? 'ARM' : null,\n navigator.userAgent.includes('arm64') ? 'ARM64' : null,\n navigator.userAgent.includes('aarch64') ? 'ARM64' : null,\n // Check for x86 indicators\n navigator.userAgent.includes('x86_64') ? 'x86_64' : null,\n navigator.userAgent.includes('WOW64') ? 'x86_64' : null,\n navigator.userAgent.includes('Win64') ? 'x86_64' : null,\n // Check for Intel indicators\n navigator.userAgent.includes('Intel') ? 'Intel' : null,\n ].filter(Boolean);\n\n return sources.join('|') || 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Max Touch Points Detection\n * Detects maximum number of simultaneous touch contact points\n */\nexport function getMaxTouchPoints(): number {\n try {\n return navigator.maxTouchPoints || 0;\n } catch {\n return 0;\n }\n}\n\n/**\n * Check if hardware fingerprinting is available\n */\nexport function isHardwareDetectionAvailable(): boolean {\n return typeof navigator !== 'undefined';\n}\n\n/**\n * Get complete hardware fingerprint\n */\nexport interface HardwareFingerprint {\n deviceMemory: number | null;\n hardwareConcurrency: number | null;\n architecture: string;\n maxTouchPoints: number;\n platform: string;\n}\n\nexport function getHardwareFingerprint(): HardwareFingerprint {\n return {\n deviceMemory: getDeviceMemory(),\n hardwareConcurrency: getHardwareConcurrency(),\n architecture: getArchitecture(),\n maxTouchPoints: getMaxTouchPoints(),\n platform: navigator.platform || 'unknown',\n };\n}","/**\n * System Fingerprinting Module\n * Based on FingerprintJS system detection techniques\n */\n\n/**\n * Timezone Detection\n * Gets the user's timezone with multiple fallbacks\n */\nexport function getTimezone(): string {\n try {\n // Primary method: Intl.DateTimeFormat\n if (typeof Intl !== 'undefined' && Intl.DateTimeFormat) {\n const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if (timezone) {\n return timezone;\n }\n }\n\n // Fallback: timezone offset (STABLE - use standard time to avoid DST changes)\n const offset = new Date(2024, 0, 1).getTimezoneOffset();\n return `UTC${offset > 0 ? '-' : '+'}${Math.abs(offset / 60)}`;\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Languages Detection\n * Gets complete language preferences list\n */\nexport function getLanguages(): string[] {\n try {\n const languages: string[] = [];\n \n // Get navigator.languages (preferred)\n if (navigator.languages && Array.isArray(navigator.languages)) {\n languages.push(...navigator.languages);\n }\n \n // Fallback to navigator.language\n if (navigator.language) {\n languages.push(navigator.language);\n }\n \n // Additional fallbacks\n const legacyLanguage = (navigator as any).userLanguage || (navigator as any).browserLanguage;\n if (legacyLanguage) {\n languages.push(legacyLanguage);\n }\n\n // Remove duplicates and return\n return [...new Set(languages)];\n } catch {\n return ['unknown'];\n }\n}\n\n/**\n * Date/Time Locale Detection\n * Detects locale formatting preferences\n */\nexport function getDateTimeLocale(): Record<string, string> {\n try {\n if (typeof Intl !== 'undefined' && Intl.DateTimeFormat) {\n const formatter = new Intl.DateTimeFormat();\n const options = formatter.resolvedOptions();\n \n return {\n locale: options.locale || 'unknown',\n calendar: options.calendar || 'unknown',\n numberingSystem: options.numberingSystem || 'unknown',\n timeZone: options.timeZone || 'unknown',\n };\n }\n \n return { locale: 'unknown' };\n } catch {\n return { locale: 'unknown' };\n }\n}\n\n/**\n * Platform Extended Detection\n * Enhanced platform detection with additional info\n */\nexport function getPlatformExtended(): Record<string, any> {\n try {\n const platform: Record<string, any> = {\n platform: navigator.platform || 'unknown',\n oscpu: (navigator as any).oscpu || null,\n vendor: navigator.vendor || null,\n };\n\n // Try to detect OS from user agent\n const userAgent = navigator.userAgent;\n if (userAgent.includes('Windows')) {\n platform.os = 'Windows';\n if (userAgent.includes('Windows NT 10.0')) platform.osVersion = '10';\n else if (userAgent.includes('Windows NT 6.3')) platform.osVersion = '8.1';\n else if (userAgent.includes('Windows NT 6.2')) platform.osVersion = '8';\n else if (userAgent.includes('Windows NT 6.1')) platform.osVersion = '7';\n } else if (userAgent.includes('Macintosh') || userAgent.includes('Mac OS')) {\n platform.os = 'macOS';\n const match = userAgent.match(/Mac OS X ([0-9_]+)/);\n if (match && match[1]) platform.osVersion = match[1].replace(/_/g, '.');\n } else if (userAgent.includes('Linux')) {\n platform.os = 'Linux';\n } else if (userAgent.includes('Android')) {\n platform.os = 'Android';\n const match = userAgent.match(/Android ([0-9.]+)/);\n if (match && match[1]) platform.osVersion = match[1];\n } else if (userAgent.includes('iOS') || userAgent.includes('iPhone') || userAgent.includes('iPad')) {\n platform.os = 'iOS';\n const match = userAgent.match(/OS ([0-9_]+)/);\n if (match && match[1]) platform.osVersion = match[1].replace(/_/g, '.');\n }\n\n return platform;\n } catch {\n return { platform: 'unknown' };\n }\n}\n\n/**\n * Check if system fingerprinting is available\n */\nexport function isSystemDetectionAvailable(): boolean {\n return typeof navigator !== 'undefined';\n}\n\n/**\n * Get complete system fingerprint\n */\nexport interface SystemFingerprint {\n timezone: string;\n languages: string[];\n dateTimeLocale: Record<string, string>;\n platform: Record<string, any>;\n cookiesEnabled: boolean;\n}\n\nexport function getSystemFingerprint(): SystemFingerprint {\n return {\n timezone: getTimezone(),\n languages: getLanguages(),\n dateTimeLocale: getDateTimeLocale(),\n platform: getPlatformExtended(),\n cookiesEnabled: navigator.cookieEnabled || false,\n };\n}","/**\n * Storage Fingerprinting Module\n * Based on FingerprintJS storage detection techniques\n */\n\n/**\n * Local Storage Detection\n * Tests availability and behavior of localStorage\n */\nexport function getLocalStorageSupport(): boolean | \"blocked\" {\n try {\n if (typeof localStorage === \"undefined\") {\n return false;\n }\n\n const testKey = \"__rb_test__\";\n const testValue = \"test\";\n\n localStorage.setItem(testKey, testValue);\n const retrieved = localStorage.getItem(testKey);\n localStorage.removeItem(testKey);\n\n return retrieved === testValue;\n } catch (error) {\n // Storage might be blocked or disabled\n return \"blocked\";\n }\n}\n\n/**\n * Session Storage Detection\n * Tests availability and behavior of sessionStorage\n */\nexport function getSessionStorageSupport(): boolean | \"blocked\" {\n try {\n if (typeof sessionStorage === \"undefined\") {\n return false;\n }\n\n const testKey = \"__rb_test__\";\n const testValue = \"test\";\n\n sessionStorage.setItem(testKey, testValue);\n const retrieved = sessionStorage.getItem(testKey);\n sessionStorage.removeItem(testKey);\n\n return retrieved === testValue;\n } catch (error) {\n return \"blocked\";\n }\n}\n\n/**\n * IndexedDB Detection\n * Tests availability of IndexedDB\n */\nexport function getIndexedDBSupport(): Promise<boolean | \"blocked\"> {\n return new Promise((resolve) => {\n try {\n if (!(\"indexedDB\" in window)) {\n resolve(false);\n return;\n }\n\n const testName = \"__rb_test_db__\";\n const request = indexedDB.open(testName, 1);\n\n let hasResolved = false;\n\n const resolveOnce = (value: boolean | \"blocked\") => {\n if (!hasResolved) {\n hasResolved = true;\n resolve(value);\n }\n };\n\n // Set a timeout to avoid hanging\n setTimeout(() => resolveOnce(\"blocked\"), 1000);\n\n request.onerror = () => resolveOnce(\"blocked\");\n request.onsuccess = () => {\n try {\n const db = request.result;\n db.close();\n // Try to delete the test database\n const deleteRequest = indexedDB.deleteDatabase(testName);\n deleteRequest.onsuccess = () => resolveOnce(true);\n deleteRequest.onerror = () => resolveOnce(true); // Still consider it working\n } catch {\n resolveOnce(\"blocked\");\n }\n };\n\n request.onupgradeneeded = () => {\n try {\n const db = request.result;\n if (!db.objectStoreNames.contains(\"test\")) {\n db.createObjectStore(\"test\");\n }\n } catch {\n resolveOnce(\"blocked\");\n }\n };\n } catch {\n resolve(\"blocked\");\n }\n });\n}\n\n/**\n * WebSQL Detection (Legacy)\n * Tests availability of WebSQL (deprecated but still useful for fingerprinting)\n */\nexport function getWebSQLSupport(): boolean {\n try {\n return (\n \"openDatabase\" in window &&\n typeof (window as any).openDatabase === \"function\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Storage Quota Detection\n * Attempts to detect storage quota information\n */\nexport async function getStorageQuota(): Promise<Record<string, any>> {\n try {\n if (\"storage\" in navigator && \"estimate\" in navigator.storage) {\n const estimate = await navigator.storage.estimate();\n return {\n quota: estimate.quota || null,\n usage: estimate.usage || null,\n available:\n estimate.quota && estimate.usage\n ? estimate.quota - estimate.usage\n : null,\n };\n }\n return {};\n } catch {\n return {};\n }\n}\n\n/**\n * Check if storage fingerprinting is available\n */\nexport function isStorageDetectionAvailable(): boolean {\n return typeof window !== \"undefined\";\n}\n\n/**\n * Get complete storage fingerprint\n */\nexport interface StorageFingerprint {\n localStorage: boolean | \"blocked\";\n sessionStorage: boolean | \"blocked\";\n indexedDB: boolean | \"blocked\";\n webSQL: boolean;\n quota: Record<string, any>;\n}\n\nexport async function getStorageFingerprint(): Promise<StorageFingerprint> {\n const [indexedDBSupport, quota] = await Promise.all([\n getIndexedDBSupport(),\n getStorageQuota(),\n ]);\n\n return {\n localStorage: getLocalStorageSupport(),\n sessionStorage: getSessionStorageSupport(),\n indexedDB: indexedDBSupport,\n webSQL: getWebSQLSupport(),\n quota,\n };\n}\n","/**\n * Math Fingerprinting Module\n * Based on FingerprintJS mathematical operations fingerprinting\n * Different JavaScript engines and browsers handle floating-point operations differently\n */\n\n/**\n * Math operations that produce different results across browsers/engines\n * These are based on engine-specific implementations and optimizations\n */\nexport function getMathFingerprint(): Record<string, number> {\n const M = Math;\n const fallback = () => 0;\n\n // Native operations (some might not be available in older browsers)\n const acos = M.acos || fallback;\n const acosh = M.acosh || fallback;\n const asin = M.asin || fallback;\n const asinh = M.asinh || fallback;\n const atanh = M.atanh || fallback;\n const atan = M.atan || fallback;\n const sin = M.sin || fallback;\n const sinh = M.sinh || fallback;\n const cos = M.cos || fallback;\n const cosh = M.cosh || fallback;\n const tan = M.tan || fallback;\n const tanh = M.tanh || fallback;\n const exp = M.exp || fallback;\n const expm1 = M.expm1 || fallback;\n const log1p = M.log1p || fallback;\n\n // Polyfill operations for comparison\n const powPI = (value: number) => M.pow(M.PI, value);\n const acoshPf = (value: number) => M.log(value + M.sqrt(value * value - 1));\n const asinhPf = (value: number) => M.log(value + M.sqrt(value * value + 1));\n const atanhPf = (value: number) => M.log((1 + value) / (1 - value)) / 2;\n const sinhPf = (value: number) => (M.exp(value) - 1 / M.exp(value)) / 2;\n const coshPf = (value: number) => (M.exp(value) + 1 / M.exp(value)) / 2;\n const expm1Pf = (value: number) => M.exp(value) - 1;\n const tanhPf = (value: number) => (M.exp(2 * value) - 1) / (M.exp(2 * value) + 1);\n const log1pPf = (value: number) => M.log(1 + value);\n\n try {\n // These values are empirically chosen to produce different results across engines\n return {\n // Basic trigonometric functions\n acos: acos(0.123124234234234242),\n asin: asin(0.123124234234234242),\n atan: atan(0.5),\n cos: cos(10.000000000123),\n sin: sin(-1e300),\n tan: tan(-1e300),\n\n // Hyperbolic functions\n acosh: acosh(1e308),\n acoshPf: acoshPf(1e154), // 1e308 will not work for polyfill\n asinh: asinh(1),\n asinhPf: asinhPf(1),\n atanh: atanh(0.5),\n atanhPf: atanhPf(0.5),\n cosh: cosh(1),\n coshPf: coshPf(1),\n sinh: sinh(1),\n sinhPf: sinhPf(1),\n tanh: tanh(1),\n tanhPf: tanhPf(1),\n\n // Exponential and logarithmic functions\n exp: exp(1),\n expm1: expm1(1),\n expm1Pf: expm1Pf(1),\n log1p: log1p(10),\n log1pPf: log1pPf(10),\n\n // Power functions\n powPI: powPI(-100),\n \n // Additional operations that may vary\n sqrt: M.sqrt(2),\n cbrt: M.cbrt ? M.cbrt(8) : fallback(),\n log: M.log(M.E),\n log10: M.log10 ? M.log10(10) : fallback(),\n log2: M.log2 ? M.log2(2) : fallback(),\n \n // Edge cases that might produce different results\n special_0: M.sin(M.PI),\n special_1: M.cos(M.PI / 2),\n special_2: M.tan(M.PI / 4),\n special_3: M.sqrt(-1), // Should be NaN\n special_4: M.log(-1), // Should be NaN\n special_5: 1 / 0, // Should be Infinity\n special_6: 0 / 0, // Should be NaN\n };\n } catch (error) {\n // If any operation fails, return a basic fingerprint\n return {\n error: 1,\n basicMath: M.PI + M.E,\n };\n }\n}\n\n/**\n * Additional mathematical constants that might vary\n */\nexport function getMathConstants(): Record<string, number> {\n try {\n return {\n PI: Math.PI,\n E: Math.E,\n LN2: Math.LN2,\n LN10: Math.LN10,\n LOG2E: Math.LOG2E,\n LOG10E: Math.LOG10E,\n SQRT1_2: Math.SQRT1_2,\n SQRT2: Math.SQRT2,\n };\n } catch {\n return {};\n }\n}\n\n/**\n * Test floating-point precision differences\n */\nexport function getFloatingPointBehavior(): Record<string, number> {\n try {\n return {\n // These operations can reveal precision differences\n precision1: 0.1 + 0.2,\n precision2: 0.3 - 0.1,\n precision3: 0.1 * 3,\n precision4: 1.1 - 0.9,\n \n // Large number operations\n largeAdd: 1e16 + 1,\n largeSub: 1e16 - 1,\n \n // Very small numbers\n tiny: Number.MIN_VALUE,\n epsilon: Number.EPSILON || 2.220446049250313e-16,\n \n // Special number properties\n maxValue: Number.MAX_VALUE,\n maxSafeInteger: Number.MAX_SAFE_INTEGER || 9007199254740991,\n minSafeInteger: Number.MIN_SAFE_INTEGER || -9007199254740991,\n };\n } catch {\n return {};\n }\n}\n\n/**\n * Check if math fingerprinting is available\n */\nexport function isMathDetectionAvailable(): boolean {\n return typeof Math !== 'undefined';\n}\n\n/**\n * Get complete math fingerprint\n */\nexport interface MathFingerprint {\n operations: Record<string, number>;\n constants: Record<string, number>;\n floatingPoint: Record<string, number>;\n}\n\nexport function getCompleteMathFingerprint(): MathFingerprint {\n return {\n operations: getMathFingerprint(),\n constants: getMathConstants(),\n floatingPoint: getFloatingPointBehavior(),\n };\n}","/**\n * DOM Blockers Detection Module\n * Based on FingerprintJS advanced content blocker detection\n * Detects ad blockers, privacy extensions, and content filters\n */\n\nimport { getBrowserCapabilities } from '../../utils/browser';\n\ntype BlockerFilters = Record<string, string[]>;\n\n/**\n * Error types for DOM blockers detection\n */\nexport const enum DOMBlockerError {\n NotSupported = 'NOT_SUPPORTED',\n BrowserIncompatible = 'BROWSER_INCOMPATIBLE',\n DOMNotAvailable = 'DOM_NOT_AVAILABLE',\n Timeout = 'TIMEOUT',\n SecurityError = 'SECURITY_ERROR',\n}\n\n/**\n * Ad blocker and content blocker selectors\n * Obfuscated using base64 to avoid detection by the blockers themselves\n */\nexport function getBlockerFilters(): BlockerFilters {\n const fromB64 = atob; // Base64 decoder for obfuscated selectors\n \n return {\n // Popular ad blockers\n adBlock: [\n '#ad-banner',\n '.advertisement',\n fromB64('I2FkLWNvbnRhaW5lcg=='), // #ad-container\n fromB64('LmFkdmVydGlzZW1lbnQ='), // .advertisement\n fromB64('W2NsYXNzKj0iYWQtIl0='), // [class*=\"ad-\"]\n ],\n \n uBlockOrigin: [\n '#ublock-stats',\n '.adsbygoogle',\n fromB64('I2dvb2dsZV9hZHM='), // #google_ads\n fromB64('LmFkc2J5Z29vZ2xl'), // .adsbygoogle\n fromB64('LnVibG9jay1ibG9ja2Vk'), // .ublock-blocked\n ],\n \n adGuardBase: [\n '.BetterJsPopOverlay',\n fromB64('I2FkXzMwMFgyNTA='), // #ad_300X250\n fromB64('I2Jhbm5lcmZsb2F0'), // #bannerfloat\n fromB64('I2NhbXBhaWduLWJhbm5lcg=='), // #campaign-banner\n fromB64('I0FkLUNvbnRlbnQ='), // #Ad-Content\n ],\n \n adGuardAnnoyances: [\n '.hs-sosyal',\n '#cookieconsentdiv',\n 'div[class^=\"app_gdpr\"]',\n '.as-oil',\n '[data-cypress=\"soft-push-notification-modal\"]',\n ],\n \n easyList: [\n '.yb-floorad',\n fromB64('LndpZGdldF9wb19hZHNfd2lkZ2V0'), // .widget_po_ads_widget\n fromB64('LnRyYWZmaWNqdW5reS1hZA=='), // .trafficjunky-ad\n '.textad_headline',\n fromB64('LnNwb25zb3JlZC10ZXh0LWxpbmtz'), // .sponsored-text-links\n ],\n \n // Privacy focused blockers\n privacyBadger: [\n '#privacy-badger-popup',\n '.privacy-badger-blocked',\n fromB64('LnByaXZhY3ktYmFkZ2Vy'), // .privacy-badger\n ],\n \n ghostery: [\n '#ghostery-popup',\n '.ghostery-blocking',\n fromB64('Lmdob3N0ZXJ5LWJsb2NrZWQ='), // .ghostery-blocked\n ],\n \n // Browser built-in blockers\n brave: [\n '#brave-ads-blocked',\n '.brave-blocked',\n fromB64('LmJyYXZlLWFkLWJsb2Nr'), // .brave-ad-block\n ],\n \n // Social media blockers\n facebookContainer: [\n '.facebook-container-blocked',\n fromB64('LmZiLWJsb2NrZWQ='), // .fb-blocked\n ],\n \n // Cookie and GDPR blockers\n cookieBlockers: [\n '.cookie-notice-blocked',\n '#cookie-banner-hidden',\n fromB64('LmNvb2tpZS1ibG9ja2Vy'), // .cookie-blocker\n ],\n \n // Tracker blockers\n trackingProtection: [\n '.tracking-blocked',\n '#tracking-protection-enabled',\n fromB64('LnRyYWNrZXItYmxvY2tlZA=='), // .tracker-blocked\n ],\n };\n}\n\n/**\n * Creates a DOM element based on a CSS selector\n */\nfunction selectorToElement(selector: string): HTMLElement {\n const element = document.createElement('div');\n \n // Parse basic selectors\n if (selector.startsWith('#')) {\n element.id = selector.substring(1);\n } else if (selector.startsWith('.')) {\n element.className = selector.substring(1);\n } else if (selector.includes('[')) {\n // Handle attribute selectors like [class*=\"ad-\"]\n try {\n const match = selector.match(/\\[([^=]+)([*^$|~]?=)\"([^\"]+)\"\\]/);\n if (match && match[1] && match[3]) {\n const [, attr, operator, value] = match;\n if (operator === '*=') {\n element.setAttribute(attr, `test-${value}-test`);\n } else {\n element.setAttribute(attr, value);\n }\n }\n } catch {\n // Fallback to class\n element.className = 'test-element';\n }\n } else {\n // Default fallback\n element.className = selector.replace(/[^a-zA-Z0-9-_]/g, '');\n }\n \n return element;\n}\n\n/**\n * Forces an element to be visible for testing (optimized)\n * Based on FingerprintJS implementation\n */\nfunction forceShow(element: HTMLElement): void {\n const style = element.style;\n style.setProperty('visibility', 'hidden', 'important');\n style.setProperty('display', 'block', 'important');\n style.setProperty('position', 'absolute', 'important');\n style.setProperty('left', '-9999px', 'important');\n style.setProperty('width', '1px', 'important');\n style.setProperty('height', '1px', 'important');\n // Prevent interference from other styles\n style.setProperty('pointer-events', 'none', 'important');\n style.setProperty('z-index', '-1', 'important');\n}\n\n/**\n * Waits for a specified amount of time\n */\nfunction wait(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n/**\n * Tests which CSS selectors are blocked by content blockers\n * Optimized for performance and stability\n */\nexport async function getBlockedSelectors<T extends string>(\n selectors: readonly T[]\n): Promise<{ [K in T]?: true }> {\n const doc = document;\n const root = doc.createElement('div');\n const elements = new Array<HTMLElement | undefined>(selectors.length);\n const blockedSelectors: { [K in T]?: true } = {};\n\n forceShow(root);\n \n // Create document fragment for better performance\n const fragment = doc.createDocumentFragment();\n\n // Create all test elements first (batched DOM operations)\n for (let i = 0; i < selectors.length; i++) {\n const selector = selectors[i];\n if (selector) {\n try {\n const element = selectorToElement(selector);\n const holder = doc.createElement('div');\n \n // Special handling for dialog elements\n if (element.tagName === 'DIALOG') {\n (element as HTMLDialogElement).show?.();\n }\n \n forceShow(holder);\n holder.appendChild(element);\n fragment.appendChild(holder);\n elements[i] = element;\n } catch (error) {\n // Skip problematic selectors\n elements[i] = undefined;\n }\n }\n }\n\n root.appendChild(fragment);\n\n // Wait for document.body to be available with timeout\n let attempts = 0;\n while (!doc.body && attempts < 100) {\n await wait(50);\n attempts++;\n }\n \n if (!doc.body) {\n throw new Error('Document body not available for DOM blockers detection');\n }\n \n doc.body.appendChild(root);\n\n try {\n // Small delay to let blockers process (reduced from 100ms to 50ms)\n await wait(50);\n \n // Check which elements are blocked using requestAnimationFrame for better performance\n await new Promise<void>((resolve) => {\n requestAnimationFrame(() => {\n for (let i = 0; i < selectors.length; i++) {\n const element = elements[i];\n const selector = selectors[i];\n if (element && selector && !element.offsetParent) {\n blockedSelectors[selector] = true;\n }\n }\n resolve();\n });\n });\n } finally {\n // Ensure cleanup even if errors occur\n try {\n if (root.parentNode) {\n root.parentNode.removeChild(root);\n }\n } catch (error) {\n // Fallback cleanup\n setTimeout(() => {\n try {\n if (root.parentNode) {\n root.parentNode.removeChild(root);\n }\n } catch {\n // Last resort - ignore cleanup errors\n }\n }, 0);\n }\n }\n\n return blockedSelectors;\n}\n\n/**\n * Counts truthy values in an array\n */\nfunction countTruthy<T>(array: T[]): number {\n return array.filter(Boolean).length;\n}\n\n/**\n * Main DOM blockers detection function\n * Enhanced with browser compatibility and error handling\n */\nexport async function getDomBlockers(options: { debug?: boolean; timeout?: number } = {}): Promise<string[] | DOMBlockerError> {\n const { debug = false, timeout = 5000 } = options;\n \n try {\n // Check if detection is applicable for this browser\n if (!isDomBlockersDetectionAvailable()) {\n if (debug) {\n console.log('[RabbitTracker] DOM Blockers detection not applicable for this browser');\n }\n return DOMBlockerError.BrowserIncompatible;\n }\n\n // Check DOM availability\n if (!document || !document.body) {\n if (debug) {\n console.log('[RabbitTracker] DOM not ready for blockers detection');\n }\n return DOMBlockerError.DOMNotAvailable;\n }\n\n const filters = getBlockerFilters();\n const filterNames = Object.keys(filters) as Array<keyof typeof filters>;\n const allSelectors = ([] as string[]).concat(\n ...filterNames.map((filterName) => filters[filterName] || [])\n );\n \n // Add timeout protection\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error('DOM blockers detection timeout')), timeout);\n });\n\n const blockedSelectors = await Promise.race([\n getBlockedSelectors(allSelectors),\n timeoutPromise\n ]);\n\n if (debug) {\n console.log('[RabbitTracker] DOM Blockers Debug:', {\n totalSelectors: allSelectors.length,\n blockedCount: Object.keys(blockedSelectors).length,\n blockedSelectors,\n });\n }\n\n // Detect active blockers (if >60% of selectors are blocked)\n const activeBlockers = filterNames.filter((filterName) => {\n const selectors = filters[filterName];\n if (!selectors || selectors.length === 0) {\n return false;\n }\n const blockedCount = countTruthy(\n selectors.map((selector) => blockedSelectors[selector])\n );\n return blockedCount > selectors.length * 0.6;\n });\n\n return activeBlockers.sort();\n } catch (error) {\n if (debug) {\n console.error('[RabbitTracker] DOM Blockers detection failed:', error);\n }\n \n // Classify error types\n if (error instanceof Error) {\n if (error.message.includes('timeout')) {\n return DOMBlockerError.Timeout;\n }\n if (error.name === 'SecurityError' || error.message.includes('SecurityError')) {\n return DOMBlockerError.SecurityError;\n }\n }\n \n return DOMBlockerError.NotSupported;\n }\n}\n\n/**\n * Check if DOM blockers detection is applicable\n * Based on FingerprintJS best practices\n */\nexport function isDomBlockersDetectionAvailable(): boolean {\n const capabilities = getBrowserCapabilities();\n return capabilities.canRunDOMBlockers;\n}\n\n/**\n * Complete DOM blockers fingerprint\n */\nexport interface DomBlockersFingerprint {\n activeBlockers: string[];\n blockerCount: number;\n hasAdBlocker: boolean;\n hasPrivacyExtension: boolean;\n hasTrackingProtection: boolean;\n}\n\nexport async function getDomBlockersFingerprint(options: { debug?: boolean } = {}): Promise<DomBlockersFingerprint> {\n const activeBlockersResult = await getDomBlockers(options);\n \n // Handle error cases\n const activeBlockers = Array.isArray(activeBlockersResult) ? activeBlockersResult : [];\n \n return {\n activeBlockers,\n blockerCount: activeBlockers.length,\n hasAdBlocker: activeBlockers.some(blocker => \n ['adBlock', 'uBlockOrigin', 'adGuardBase', 'easyList'].includes(blocker)\n ),\n hasPrivacyExtension: activeBlockers.some(blocker =>\n ['privacyBadger', 'ghostery', 'brave'].includes(blocker)\n ),\n hasTrackingProtection: activeBlockers.includes('trackingProtection'),\n };\n}","/**\n * Browser-Specific APIs Detection Module\n * Based on FingerprintJS browser-specific API detection\n * Detects availability and state of browser-specific features and APIs\n */\n\nimport { getBrowserCapabilities, isSecureContext, isSafari, isChrome } from '../../utils/browser';\n\n/**\n * Error types for browser APIs detection\n */\nexport const enum BrowserAPIError {\n NotSupported = 'NOT_SUPPORTED',\n SecurityError = 'SECURITY_ERROR',\n FeatureUnavailable = 'FEATURE_UNAVAILABLE',\n BrowserIncompatible = 'BROWSER_INCOMPATIBLE',\n}\n\n/**\n * PDF Viewer Detection\n * Detects if native PDF viewer is enabled (Chrome/Edge feature)\n */\nexport function getPdfViewerEnabled(): boolean | null {\n try {\n // PDF viewer is primarily a Chrome/Edge feature\n if (!isChrome()) {\n return null;\n }\n return (navigator as any).pdfViewerEnabled ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Apple Pay State Detection\n * Detects Apple Pay availability and state (Safari/iOS feature)\n */\nexport const enum ApplePayState {\n Disabled = 0,\n Enabled = 1,\n NoAPI = -1,\n NotAvailableInInsecureContext = -2,\n NotAvailableInFrame = -3,\n}\n\nexport function getApplePayState(): ApplePayState {\n try {\n // Apple Pay is only available on Safari/iOS\n if (!isSafari()) {\n return ApplePayState.NoAPI;\n }\n\n const { ApplePaySession } = window as any;\n\n if (typeof ApplePaySession?.canMakePayments !== 'function') {\n return ApplePayState.NoAPI;\n }\n\n // Check if we're in an insecure context or frame that might cause issues\n if (!isSecureContext()) {\n return ApplePayState.NotAvailableInInsecureContext;\n }\n\n // Check for cross-origin frame issues\n if (window.self !== window.top) {\n return ApplePayState.NotAvailableInFrame;\n }\n\n try {\n return ApplePaySession.canMakePayments() \n ? ApplePayState.Enabled \n : ApplePayState.Disabled;\n } catch (error) {\n // Handle security errors\n if (error instanceof Error && error.name === 'InvalidAccessError') {\n return ApplePayState.NotAvailableInInsecureContext;\n }\n throw error;\n }\n } catch {\n return ApplePayState.NoAPI;\n }\n}\n\n/**\n * Private Click Measurement Detection\n * Detects Safari's Private Click Measurement API\n */\nexport function getPrivateClickMeasurement(): boolean | null {\n try {\n // Check for Private Click Measurement API (Safari 14.1+)\n return 'attributionReporting' in window || \n 'privateClickMeasurement' in window ||\n null;\n } catch {\n return null;\n }\n}\n\n/**\n * Enhanced Cookies Detection\n * More detailed cookie support detection\n */\nexport interface CookieCapabilities {\n enabled: boolean;\n sameSiteSupport: boolean;\n secureSupport: boolean;\n partitionedSupport: boolean;\n}\n\nexport function getCookieCapabilities(): CookieCapabilities {\n const capabilities: CookieCapabilities = {\n enabled: false,\n sameSiteSupport: false,\n secureSupport: false,\n partitionedSupport: false,\n };\n\n try {\n // Basic cookie support\n capabilities.enabled = navigator.cookieEnabled;\n\n if (!capabilities.enabled) {\n return capabilities;\n }\n\n // Test SameSite support with proper cleanup\n capabilities.sameSiteSupport = testCookieAttribute('__rb_test_samesite', 'SameSite=Strict');\n\n // Test Secure support (only meaningful in HTTPS context)\n if (isSecureContext()) {\n capabilities.secureSupport = testCookieAttribute('__rb_test_secure', 'Secure');\n }\n\n // Test Partitioned support (Chrome 118+) only in secure context\n if (isSecureContext() && isChrome()) {\n capabilities.partitionedSupport = testCookieAttribute(\n '__rb_test_partitioned', \n 'Partitioned; Secure; SameSite=None'\n );\n }\n } catch {\n // Default values already set\n }\n\n return capabilities;\n}\n\n/**\n * Safely test cookie attribute support with guaranteed cleanup\n */\nfunction testCookieAttribute(cookieName: string, attributes: string): boolean {\n try {\n const testValue = '1';\n const cookieString = `${cookieName}=${testValue}; ${attributes}; path=/`;\n \n document.cookie = cookieString;\n const hasSupport = document.cookie.includes(`${cookieName}=${testValue}`);\n \n // Always clean up, even if the test failed\n cleanupTestCookie(cookieName);\n \n return hasSupport;\n } catch {\n // Ensure cleanup even on error\n cleanupTestCookie(cookieName);\n return false;\n }\n}\n\n/**\n * Guaranteed cookie cleanup with multiple fallback strategies\n */\nfunction cleanupTestCookie(cookieName: string): void {\n try {\n // Multiple cleanup strategies to ensure removal\n const cleanupStrategies = [\n `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`,\n `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=${location.hostname}`,\n `${cookieName}=; max-age=0; path=/`,\n `${cookieName}=; max-age=0; path=/; domain=${location.hostname}`\n ];\n \n for (const strategy of cleanupStrategies) {\n try {\n document.cookie = strategy;\n } catch {\n // Continue with next strategy\n }\n }\n \n // Async cleanup as fallback\n setTimeout(() => {\n try {\n document.cookie = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`;\n } catch {\n // Final fallback - ignore errors\n }\n }, 100);\n } catch {\n // Ignore cleanup errors\n }\n}\n\n/**\n * WebGL Extensions Detection\n * Enhanced WebGL extension detection\n */\nexport function getWebGLExtensions(): string[] {\n try {\n const canvas = document.createElement('canvas');\n const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n \n if (!gl) {\n return [];\n }\n\n const extensions = (gl as WebGLRenderingContext).getSupportedExtensions() || [];\n return extensions.sort();\n } catch {\n return [];\n }\n}\n\n/**\n * Performance Memory Detection\n * Chrome-specific memory information\n */\nexport interface PerformanceMemory {\n usedJSHeapSize?: number;\n totalJSHeapSize?: number;\n jsHeapSizeLimit?: number;\n}\n\nexport function getPerformanceMemory(): PerformanceMemory | null {\n try {\n const memory = (performance as any).memory;\n if (!memory) {\n return null;\n }\n\n return {\n usedJSHeapSize: memory.usedJSHeapSize,\n totalJSHeapSize: memory.totalJSHeapSize,\n jsHeapSizeLimit: memory.jsHeapSizeLimit,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Connection Information Detection\n * Network connection information (Chrome/Edge)\n */\nexport interface ConnectionInfo {\n effectiveType?: string;\n downlink?: number;\n rtt?: number;\n saveData?: boolean;\n}\n\nexport function getConnectionInfo(): ConnectionInfo | null {\n try {\n const connection = (navigator as any).connection || \n (navigator as any).mozConnection || \n (navigator as any).webkitConnection;\n \n if (!connection) {\n return null;\n }\n\n return {\n effectiveType: connection.effectiveType,\n downlink: connection.downlink,\n rtt: connection.rtt,\n saveData: connection.saveData,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Vendor-specific Properties Detection\n * Detects browser vendor-specific properties\n */\nexport interface VendorProperties {\n webkitTemporaryStorage?: boolean;\n webkitPersistentStorage?: boolean;\n safariObjectTypes?: string[];\n chromeRuntime?: boolean;\n mozInnerScreenX?: boolean;\n msCredentials?: boolean;\n}\n\nexport function getVendorProperties(): VendorProperties {\n const properties: VendorProperties = {};\n\n try {\n // Webkit-specific\n properties.webkitTemporaryStorage = 'webkitTemporaryStorage' in navigator;\n properties.webkitPersistentStorage = 'webkitPersistentStorage' in navigator;\n\n // Safari-specific\n if ((window as any).safari) {\n properties.safariObjectTypes = Object.getOwnPropertyNames((window as any).safari);\n }\n\n // Chrome-specific\n properties.chromeRuntime = !!(window as any).chrome?.runtime;\n\n // Firefox-specific\n properties.mozInnerScreenX = 'mozInnerScreenX' in window;\n\n // Edge/IE-specific\n properties.msCredentials = 'msCredentials' in navigator;\n } catch {\n // Properties will remain undefined\n }\n\n return properties;\n}\n\n/**\n * Check if browser APIs detection is available\n */\nexport function isBrowserApisDetectionAvailable(): boolean {\n return typeof window !== 'undefined' && typeof navigator !== 'undefined';\n}\n\n/**\n * Complete browser APIs fingerprint\n */\nexport interface BrowserApisFingerprint {\n pdfViewerEnabled: boolean | null;\n applePayState: ApplePayState;\n privateClickMeasurement: boolean | null;\n cookieCapabilities: CookieCapabilities;\n webglExtensions: string[];\n performanceMemory: PerformanceMemory | null;\n connectionInfo: ConnectionInfo | null;\n vendorProperties: VendorProperties;\n // Computed properties\n browserVendor: string;\n hasNativeFeatures: boolean;\n apiScore: number; // 0-100 based on available APIs\n}\n\nexport function getBrowserApisFingerprint(): BrowserApisFingerprint {\n const pdfViewerEnabled = getPdfViewerEnabled();\n const applePayState = getApplePayState();\n const privateClickMeasurement = getPrivateClickMeasurement();\n const cookieCapabilities = getCookieCapabilities();\n const webglExtensions = getWebGLExtensions();\n const performanceMemory = getPerformanceMemory();\n const connectionInfo = getConnectionInfo();\n const vendorProperties = getVendorProperties();\n\n // Determine browser vendor based on available APIs\n let browserVendor = 'unknown';\n if (vendorProperties.chromeRuntime) {\n browserVendor = 'chrome';\n } else if (applePayState !== ApplePayState.NoAPI) {\n browserVendor = 'safari';\n } else if (vendorProperties.mozInnerScreenX) {\n browserVendor = 'firefox';\n } else if (vendorProperties.msCredentials) {\n browserVendor = 'edge';\n }\n\n // Check for native features\n const hasNativeFeatures = Boolean(\n pdfViewerEnabled ||\n applePayState > ApplePayState.NoAPI ||\n privateClickMeasurement ||\n performanceMemory ||\n connectionInfo\n );\n\n // Calculate API score (0-100)\n const availableApis = [\n pdfViewerEnabled !== null,\n applePayState !== ApplePayState.NoAPI,\n privateClickMeasurement !== null,\n cookieCapabilities.enabled,\n webglExtensions.length > 0,\n performanceMemory !== null,\n connectionInfo !== null,\n Object.keys(vendorProperties).length > 0,\n ];\n \n const apiScore = Math.round((availableApis.filter(Boolean).length / availableApis.length) * 100);\n\n return {\n pdfViewerEnabled,\n applePayState,\n privateClickMeasurement,\n cookieCapabilities,\n webglExtensions,\n performanceMemory,\n connectionInfo,\n vendorProperties,\n browserVendor,\n hasNativeFeatures,\n apiScore,\n };\n}","/**\n * Enhanced Plugin Detection Module\n * Based on FingerprintJS advanced plugin enumeration and detection\n * Provides comprehensive browser plugin, extension, and capability detection\n * Enhanced with browser compatibility and edge case handling\n */\n\nimport { getBrowserCapabilities, isChrome, isFirefox, isEdge } from '../../utils/browser';\n\n/**\n * Error types for plugin detection\n */\nexport const enum PluginDetectionError {\n NotSupported = 'NOT_SUPPORTED',\n SecurityRestricted = 'SECURITY_RESTRICTED',\n NavigatorUnavailable = 'NAVIGATOR_UNAVAILABLE',\n PluginsBlocked = 'PLUGINS_BLOCKED',\n}\n\n/**\n * Plugin information interface\n */\nexport interface PluginInfo {\n name: string;\n filename: string;\n description: string;\n version?: string;\n mimeTypes: string[];\n}\n\n/**\n * Enhanced plugin detection result\n */\nexport interface EnhancedPluginFingerprint {\n plugins: PluginInfo[];\n pluginCount: number;\n mimeTypes: string[];\n mimeTypeCount: number;\n // Capability detection\n flashEnabled: boolean;\n javaEnabled: boolean;\n silverLightEnabled: boolean;\n // Browser-specific detection\n chromeExtensionsBlocked: boolean;\n firefoxExtensionsBlocked: boolean;\n // Security indicators\n securityPlugins: string[];\n adBlockerPlugins: string[];\n // Computed properties\n pluginSignature: string;\n securityScore: number;\n}\n\n/**\n * Get traditional navigator.plugins information (enhanced)\n */\nexport function getNavigatorPlugins(): PluginInfo[] | PluginDetectionError {\n try {\n if (!isEnhancedPluginDetectionAvailable()) {\n return PluginDetectionError.NotSupported;\n }\n\n const navigatorPlugins = safeGetPlugins();\n if (!navigatorPlugins) {\n return PluginDetectionError.NavigatorUnavailable;\n }\n\n const plugins: PluginInfo[] = [];\n\n if (navigatorPlugins.length === 0) {\n return plugins; // Empty but valid\n }\n\n for (let i = 0; i < navigatorPlugins.length; i++) {\n const plugin = navigatorPlugins[i];\n if (!plugin) continue;\n\n const mimeTypes: string[] = [];\n if (plugin.length > 0) {\n for (let j = 0; j < plugin.length; j++) {\n const mimeType = plugin[j];\n if (mimeType && mimeType.type) {\n mimeTypes.push(mimeType.type);\n }\n }\n }\n\n plugins.push({\n name: plugin.name || '',\n filename: plugin.filename || '',\n description: plugin.description || '',\n version: (plugin as any).version || undefined,\n mimeTypes,\n });\n }\n\n return plugins.sort((a, b) => a.name.localeCompare(b.name));\n } catch (error) {\n if ((error as any).name === 'SecurityError') {\n return PluginDetectionError.SecurityRestricted;\n }\n return [];\n }\n}\n\n/**\n * Get MIME types from navigator.mimeTypes\n */\nexport function getMimeTypes(): string[] {\n try {\n if (!navigator.mimeTypes || navigator.mimeTypes.length === 0) {\n return [];\n }\n\n const mimeTypes: string[] = [];\n for (let i = 0; i < navigator.mimeTypes.length; i++) {\n const mimeType = navigator.mimeTypes[i];\n if (mimeType && mimeType.type) {\n mimeTypes.push(mimeType.type);\n }\n }\n\n return mimeTypes.sort();\n } catch {\n return [];\n }\n}\n\n/**\n * Test if Flash is enabled and available\n */\nexport function testFlashEnabled(): boolean {\n try {\n // Check for Flash plugin\n const hasFlashPlugin = navigator.plugins && \n Array.from(navigator.plugins).some(plugin => \n plugin.name.toLowerCase().includes('flash') ||\n plugin.description.toLowerCase().includes('flash')\n );\n\n if (hasFlashPlugin) {\n return true;\n }\n\n // Check for Flash MIME type\n const hasFlashMimeType = navigator.mimeTypes && \n Array.from(navigator.mimeTypes).some(mimeType =>\n mimeType.type === 'application/x-shockwave-flash'\n );\n\n if (hasFlashMimeType) {\n return true;\n }\n\n // Check ActiveX for IE/Edge\n if (typeof (window as any).ActiveXObject !== 'undefined') {\n try {\n return !!(new (window as any).ActiveXObject('ShockwaveFlash.ShockwaveFlash'));\n } catch {\n return false;\n }\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Test if Java is enabled and available\n */\nexport function testJavaEnabled(): boolean {\n try {\n // Check for Java plugin\n const hasJavaPlugin = navigator.plugins &&\n Array.from(navigator.plugins).some(plugin =>\n plugin.name.toLowerCase().includes('java') &&\n !plugin.name.toLowerCase().includes('javascript')\n );\n\n if (hasJavaPlugin) {\n return true;\n }\n\n // Check for Java MIME types\n const javaMimeTypes = [\n 'application/x-java-applet',\n 'application/x-java-bean',\n 'application/x-java-vm'\n ];\n\n const hasJavaMimeType = navigator.mimeTypes &&\n javaMimeTypes.some(type =>\n Array.from(navigator.mimeTypes).some(mimeType => mimeType.type === type)\n );\n\n if (hasJavaMimeType) {\n return true;\n }\n\n // Legacy navigator.javaEnabled() method\n if (typeof navigator.javaEnabled === 'function') {\n return navigator.javaEnabled();\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Test if Silverlight is enabled and available\n */\nexport function testSilverlightEnabled(): boolean {\n try {\n // Check for Silverlight plugin\n const hasSilverlightPlugin = navigator.plugins &&\n Array.from(navigator.plugins).some(plugin =>\n plugin.name.toLowerCase().includes('silverlight')\n );\n\n if (hasSilverlightPlugin) {\n return true;\n }\n\n // Check for Silverlight MIME type\n const hasSilverlightMimeType = navigator.mimeTypes &&\n Array.from(navigator.mimeTypes).some(mimeType =>\n mimeType.type === 'application/x-silverlight'\n );\n\n if (hasSilverlightMimeType) {\n return true;\n }\n\n // Check ActiveX for IE/Edge\n if (typeof (window as any).ActiveXObject !== 'undefined') {\n try {\n return !!(new (window as any).ActiveXObject('AgControl.AgControl'));\n } catch {\n return false;\n }\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Detect Chrome extension blocking (enhanced)\n */\nexport function detectChromeExtensionsBlocked(): boolean | PluginDetectionError {\n try {\n if (!isChrome()) {\n return PluginDetectionError.NotSupported;\n }\n\n if (!navigator.plugins) {\n return PluginDetectionError.NavigatorUnavailable;\n }\n\n const pluginCount = navigator.plugins.length;\n \n // Modern Chrome usually has some plugins, even in restricted mode\n // Complete absence is suspicious\n if (pluginCount === 0) {\n return true;\n }\n \n // Check for Chrome runtime (indicates extension environment)\n const hasChromeRuntime = !!(window as any).chrome?.runtime;\n \n // Chrome without runtime access might indicate restrictions\n if (!hasChromeRuntime) {\n // However, this could be normal in some contexts (web workers, etc.)\n // Additional checks needed\n const hasWebstore = !!(window as any).chrome?.webstore;\n if (!hasWebstore && typeof (window as any).chrome !== 'undefined') {\n return true; // Likely restricted\n }\n }\n\n // Check for abnormally limited plugin access\n // Most Chrome installations have at least PDF viewer\n const hasCommonPlugins = Array.from(navigator.plugins).some(plugin =>\n plugin.name.toLowerCase().includes('pdf') ||\n plugin.name.toLowerCase().includes('chrome')\n );\n\n // If no common plugins found in Chrome, might be blocked\n if (!hasCommonPlugins && pluginCount < 3) {\n return true;\n }\n\n return false;\n } catch (error) {\n if ((error as any).name === 'SecurityError') {\n return PluginDetectionError.SecurityRestricted;\n }\n return false;\n }\n}\n\n/**\n * Detect Firefox extension blocking (enhanced)\n */\nexport function detectFirefoxExtensionsBlocked(): boolean | PluginDetectionError {\n try {\n if (!isFirefox()) {\n return PluginDetectionError.NotSupported;\n }\n\n // Firefox-specific checks\n const firefoxChecks = {\n mozInnerScreenX: 'mozInnerScreenX' in window,\n mozPaintCount: 'mozPaintCount' in window,\n mozApps: !!(navigator as any).mozApps,\n buildID: !!(navigator as any).buildID,\n oscpu: !!(navigator as any).oscpu,\n };\n\n const passedChecks = Object.values(firefoxChecks).filter(Boolean).length;\n \n // Firefox usually has at least some of these properties\n // Complete absence suggests restrictions\n if (passedChecks === 0) {\n return true;\n }\n\n // Check plugin access patterns\n if (!navigator.plugins) {\n return PluginDetectionError.NavigatorUnavailable;\n }\n\n const pluginCount = navigator.plugins.length;\n \n // Firefox in normal mode usually has some plugins\n // Check for abnormally restricted plugin access\n if (pluginCount === 0 && passedChecks < 2) {\n return true;\n }\n\n return false;\n } catch (error) {\n if ((error as any).name === 'SecurityError') {\n return PluginDetectionError.SecurityRestricted;\n }\n return false;\n }\n}\n\n/**\n * Identify security-related plugins\n */\nexport function identifySecurityPlugins(plugins: PluginInfo[]): string[] {\n const securityKeywords = [\n 'antivirus', 'security', 'firewall', 'malware', 'protection',\n 'kaspersky', 'norton', 'mcafee', 'avast', 'avira', 'bitdefender',\n 'eset', 'sophos', 'symantec', 'trend micro', 'f-secure'\n ];\n\n return plugins\n .filter(plugin => \n securityKeywords.some(keyword =>\n plugin.name.toLowerCase().includes(keyword) ||\n plugin.description.toLowerCase().includes(keyword)\n )\n )\n .map(plugin => plugin.name);\n}\n\n/**\n * Identify ad blocker plugins\n */\nexport function identifyAdBlockerPlugins(plugins: PluginInfo[]): string[] {\n const adBlockerKeywords = [\n 'adblock', 'adblocker', 'ad block', 'ublock', 'ghostery',\n 'privacy badger', 'disconnect', 'noscript', 'tracking protection'\n ];\n\n return plugins\n .filter(plugin =>\n adBlockerKeywords.some(keyword =>\n plugin.name.toLowerCase().includes(keyword) ||\n plugin.description.toLowerCase().includes(keyword)\n )\n )\n .map(plugin => plugin.name);\n}\n\n/**\n * Calculate plugin-based security score\n */\nexport function calculateSecurityScore(\n securityPlugins: string[],\n adBlockerPlugins: string[],\n flashEnabled: boolean,\n javaEnabled: boolean\n): number {\n let score = 50; // Base score\n\n // Security plugins increase score\n score += securityPlugins.length * 10;\n\n // Ad blockers increase score\n score += adBlockerPlugins.length * 5;\n\n // Flash enabled decreases score (security risk)\n if (flashEnabled) {\n score -= 15;\n }\n\n // Java enabled decreases score (security risk)\n if (javaEnabled) {\n score -= 10;\n }\n\n // Ensure score is between 0 and 100\n return Math.max(0, Math.min(100, score));\n}\n\n/**\n * Generate plugin signature for fingerprinting\n */\nexport function generatePluginSignature(\n plugins: PluginInfo[],\n mimeTypes: string[]\n): string {\n const pluginNames = plugins.map(p => p.name).sort();\n const topMimeTypes = mimeTypes.slice(0, 10).sort(); // Limit to prevent huge signatures\n \n const signature = [\n `plugins:${pluginNames.length}`,\n `mimes:${mimeTypes.length}`,\n ...pluginNames.slice(0, 5), // Top 5 plugins\n ...topMimeTypes.slice(0, 5) // Top 5 MIME types\n ].join('|');\n\n return signature;\n}\n\n/**\n * Check if enhanced plugin detection is available\n * Enhanced with browser capability checks\n */\nexport function isEnhancedPluginDetectionAvailable(): boolean {\n const capabilities = getBrowserCapabilities();\n return capabilities.canRunBrowserAPIs && typeof navigator !== 'undefined';\n}\n\n/**\n * Safely get navigator plugins with error handling\n */\nfunction safeGetPlugins(): PluginArray | null {\n try {\n return navigator.plugins || null;\n } catch (error) {\n if ((error as any).name === 'SecurityError') {\n return null;\n }\n throw error;\n }\n}\n\n/**\n * Safely get navigator mime types with error handling\n */\nfunction safeGetMimeTypes(): MimeTypeArray | null {\n try {\n return navigator.mimeTypes || null;\n } catch (error) {\n if ((error as any).name === 'SecurityError') {\n return null;\n }\n throw error;\n }\n}\n\n/**\n * Get complete enhanced plugin fingerprint\n */\nexport function getEnhancedPluginFingerprint(): EnhancedPluginFingerprint {\n const pluginsResult = getNavigatorPlugins();\n const plugins = Array.isArray(pluginsResult) ? pluginsResult : [];\n \n const mimeTypesResult = getMimeTypes();\n const mimeTypes = Array.isArray(mimeTypesResult) ? mimeTypesResult : [];\n \n const flashEnabled = testFlashEnabled();\n const javaEnabled = testJavaEnabled();\n const silverLightEnabled = testSilverlightEnabled();\n \n const chromeExtensionsBlockedResult = detectChromeExtensionsBlocked();\n const chromeExtensionsBlocked = typeof chromeExtensionsBlockedResult === 'boolean' ? chromeExtensionsBlockedResult : false;\n \n const firefoxExtensionsBlockedResult = detectFirefoxExtensionsBlocked();\n const firefoxExtensionsBlocked = typeof firefoxExtensionsBlockedResult === 'boolean' ? firefoxExtensionsBlockedResult : false;\n \n const securityPlugins = identifySecurityPlugins(plugins);\n const adBlockerPlugins = identifyAdBlockerPlugins(plugins);\n const pluginSignature = generatePluginSignature(plugins, mimeTypes);\n const securityScore = calculateSecurityScore(\n securityPlugins,\n adBlockerPlugins,\n flashEnabled,\n javaEnabled\n );\n\n return {\n plugins,\n pluginCount: plugins.length,\n mimeTypes,\n mimeTypeCount: mimeTypes.length,\n flashEnabled,\n javaEnabled,\n silverLightEnabled,\n chromeExtensionsBlocked,\n firefoxExtensionsBlocked,\n securityPlugins,\n adBlockerPlugins,\n pluginSignature,\n securityScore,\n };\n}","/**\n * Confidence Scoring System\n * Based on FingerprintJS confidence calculation methodology\n * Provides intelligent weighting and stability scoring for fingerprint components\n */\n\nimport type { FingerprintComponentType } from '../../types/fingerprint';\n\n/**\n * Confidence levels enum\n */\nexport const enum Confidence {\n /** At least 99.5% chance of correct identification */\n VeryHigh = 0.995,\n /** At least 99% chance of correct identification */\n High = 0.99,\n /** At least 95% chance of correct identification */\n Medium = 0.95,\n /** At least 80% chance of correct identification */\n Low = 0.8,\n /** Less than 80% chance - not reliable for identification */\n VeryLow = 0.5,\n}\n\n/**\n * Component stability levels\n */\nexport interface ComponentStability {\n /** How stable the component is across sessions (0-1) */\n stability: number;\n /** How much entropy the component provides (0-1) */\n entropy: number;\n /** How unique the component is across users (0-1) */\n uniqueness: number;\n /** How resistant the component is to spoofing (0-1) */\n spoofResistance: number;\n}\n\n/**\n * Component weights and characteristics\n * Based on extensive research and real-world data analysis\n */\nexport const COMPONENT_CHARACTERISTICS: Record<FingerprintComponentType, ComponentStability> = {\n // Core components (most stable and unique)\n canvas: {\n stability: 0.95,\n entropy: 0.9,\n uniqueness: 0.85,\n spoofResistance: 0.8,\n },\n webgl: {\n stability: 0.92,\n entropy: 0.88,\n uniqueness: 0.82,\n spoofResistance: 0.85,\n },\n audio: {\n stability: 0.9,\n entropy: 0.85,\n uniqueness: 0.8,\n spoofResistance: 0.9,\n },\n\n // Hardware components (very stable)\n hardware: {\n stability: 0.98,\n entropy: 0.7,\n uniqueness: 0.75,\n spoofResistance: 0.95,\n },\n screen: {\n stability: 0.85,\n entropy: 0.6,\n uniqueness: 0.65,\n spoofResistance: 0.7,\n },\n\n // System components (moderately stable)\n system: {\n stability: 0.8,\n entropy: 0.65,\n uniqueness: 0.7,\n spoofResistance: 0.6,\n },\n browser: {\n stability: 0.75,\n entropy: 0.6,\n uniqueness: 0.65,\n spoofResistance: 0.5,\n },\n fonts: {\n stability: 0.7,\n entropy: 0.75,\n uniqueness: 0.7,\n spoofResistance: 0.4,\n },\n\n // Advanced components (variable stability)\n math: {\n stability: 0.95,\n entropy: 0.8,\n uniqueness: 0.9,\n spoofResistance: 0.95,\n },\n storage: {\n stability: 0.6,\n entropy: 0.5,\n uniqueness: 0.6,\n spoofResistance: 0.3,\n },\n \n // Detection components (moderate reliability)\n incognito: {\n stability: 0.5,\n entropy: 0.4,\n uniqueness: 0.3,\n spoofResistance: 0.2,\n },\n\n // New advanced components (from FingerprintJS inspiration)\n domBlockers: {\n stability: 0.8,\n entropy: 0.7,\n uniqueness: 0.6,\n spoofResistance: 0.9,\n },\n accessibility: {\n stability: 0.9,\n entropy: 0.6,\n uniqueness: 0.7,\n spoofResistance: 0.85,\n },\n browserApis: {\n stability: 0.85,\n entropy: 0.75,\n uniqueness: 0.8,\n spoofResistance: 0.7,\n },\n pluginsEnhanced: {\n stability: 0.7,\n entropy: 0.65,\n uniqueness: 0.75,\n spoofResistance: 0.5,\n },\n\n // NEW: FingerprintJS-inspired components with enhanced characteristics\n mathFingerprint: {\n stability: 0.99, // Extremely stable across sessions\n entropy: 0.95, // High entropy from precision differences\n uniqueness: 0.9, // Very unique across different engines\n spoofResistance: 0.98, // Nearly impossible to spoof consistently\n },\n fontPreferences: {\n stability: 0.92, // Stable but can change with OS updates\n entropy: 0.88, // High entropy from font rendering differences\n uniqueness: 0.85, // Good uniqueness across systems\n spoofResistance: 0.75, // Moderate spoof resistance\n },\n dateTimeLocale: {\n stability: 0.95, // Very stable user setting\n entropy: 0.7, // Good entropy from locale combinations\n uniqueness: 0.75, // Decent uniqueness\n spoofResistance: 0.8, // Good spoof resistance\n },\n accessibilityEnhanced: {\n stability: 0.93, // Very stable accessibility settings\n entropy: 0.65, // Moderate entropy from rare settings\n uniqueness: 0.8, // High uniqueness when features enabled\n spoofResistance: 0.9, // Hard to spoof media queries\n },\n enhancedFonts: {\n stability: 0.88, // Stable but OS-dependent\n entropy: 0.85, // High entropy from font combinations\n uniqueness: 0.82, // Good uniqueness across systems\n spoofResistance: 0.7, // Moderate spoof resistance\n },\n};\n\n/**\n * New advanced components characteristics\n */\nexport const ADVANCED_COMPONENT_CHARACTERISTICS: Record<string, ComponentStability> = {\n domBlockers: {\n stability: 0.8,\n entropy: 0.7,\n uniqueness: 0.6,\n spoofResistance: 0.9,\n },\n accessibility: {\n stability: 0.9,\n entropy: 0.6,\n uniqueness: 0.7,\n spoofResistance: 0.85,\n },\n browserApis: {\n stability: 0.85,\n entropy: 0.75,\n uniqueness: 0.8,\n spoofResistance: 0.7,\n },\n};\n\n/**\n * Calculate component weight based on its characteristics\n */\nexport function calculateComponentWeight(componentType: string): number {\n const characteristics = COMPONENT_CHARACTERISTICS[componentType as FingerprintComponentType] ||\n ADVANCED_COMPONENT_CHARACTERISTICS[componentType];\n \n if (!characteristics) {\n return 0.5; // Default weight for unknown components\n }\n\n // Weight calculation formula emphasizing stability and uniqueness\n const weight = (\n characteristics.stability * 0.3 +\n characteristics.entropy * 0.25 +\n characteristics.uniqueness * 0.25 +\n characteristics.spoofResistance * 0.2\n );\n\n return Math.max(0.1, Math.min(1.0, weight));\n}\n\n/**\n * Component result for confidence calculation\n */\nexport interface ComponentResult {\n component: string;\n success: boolean;\n duration: number;\n value?: any;\n error?: string;\n}\n\n/**\n * Confidence calculation result\n */\nexport interface ConfidenceResult {\n score: Confidence;\n level: string;\n factors: {\n componentCount: number;\n weightedScore: number;\n stabilityScore: number;\n entropyScore: number;\n spoofResistanceScore: number;\n };\n recommendations: string[];\n}\n\n/**\n * Calculate overall confidence score for a fingerprint\n */\nexport function calculateConfidence(\n componentResults: ComponentResult[],\n options: {\n requireMinimumComponents?: number;\n penalizeMissingCore?: boolean;\n adjustForIncognito?: boolean;\n } = {}\n): ConfidenceResult {\n const {\n requireMinimumComponents = 4,\n penalizeMissingCore = true,\n adjustForIncognito = true,\n } = options;\n\n const successfulComponents = componentResults.filter(c => c.success);\n const recommendations: string[] = [];\n\n // Check minimum component requirement\n if (successfulComponents.length < requireMinimumComponents) {\n recommendations.push(`Collect at least ${requireMinimumComponents} components for reliable identification`);\n }\n\n // Calculate weighted scores\n let totalWeight = 0;\n let weightedStability = 0;\n let weightedEntropy = 0;\n let weightedUniqueness = 0;\n let weightedSpoofResistance = 0;\n\n const coreComponents = ['canvas', 'webgl', 'audio', 'hardware'];\n const missingCoreComponents = coreComponents.filter(\n core => !successfulComponents.some(c => c.component === core)\n );\n\n for (const result of successfulComponents) {\n const weight = calculateComponentWeight(result.component);\n const characteristics = COMPONENT_CHARACTERISTICS[result.component as FingerprintComponentType] ||\n ADVANCED_COMPONENT_CHARACTERISTICS[result.component];\n\n if (characteristics) {\n totalWeight += weight;\n weightedStability += characteristics.stability * weight;\n weightedEntropy += characteristics.entropy * weight;\n weightedUniqueness += characteristics.uniqueness * weight;\n weightedSpoofResistance += characteristics.spoofResistance * weight;\n }\n }\n\n // Normalize scores\n const stabilityScore = totalWeight > 0 ? weightedStability / totalWeight : 0;\n const entropyScore = totalWeight > 0 ? weightedEntropy / totalWeight : 0;\n const uniquenessScore = totalWeight > 0 ? weightedUniqueness / totalWeight : 0;\n const spoofResistanceScore = totalWeight > 0 ? weightedSpoofResistance / totalWeight : 0;\n\n // Calculate base weighted score\n let weightedScore = (\n stabilityScore * 0.35 +\n entropyScore * 0.25 +\n uniquenessScore * 0.25 +\n spoofResistanceScore * 0.15\n );\n\n // Apply penalties and adjustments\n let finalScore = weightedScore;\n\n // Penalty for missing core components\n if (penalizeMissingCore && missingCoreComponents.length > 0) {\n const penalty = missingCoreComponents.length * 0.1;\n finalScore -= penalty;\n recommendations.push(`Missing core components: ${missingCoreComponents.join(', ')}`);\n }\n\n // Penalty for too few components\n if (successfulComponents.length < 6) {\n const penalty = (6 - successfulComponents.length) * 0.05;\n finalScore -= penalty;\n }\n\n // Adjustment for incognito detection\n if (adjustForIncognito) {\n const hasIncognitoDetection = successfulComponents.some(c => c.component === 'incognito');\n if (hasIncognitoDetection) {\n // Slight boost for incognito detection capability\n finalScore += 0.02;\n }\n }\n\n // Bonus for having advanced components\n const advancedComponents = successfulComponents.filter(c => \n ['domBlockers', 'accessibility', 'browserApis', 'math'].includes(c.component)\n );\n if (advancedComponents.length >= 2) {\n finalScore += 0.05;\n }\n\n // Ensure score stays within bounds\n finalScore = Math.max(0, Math.min(1, finalScore));\n\n // Determine confidence level\n let confidenceLevel: Confidence;\n let levelName: string;\n\n if (finalScore >= Confidence.VeryHigh) {\n confidenceLevel = Confidence.VeryHigh;\n levelName = 'Very High';\n } else if (finalScore >= Confidence.High) {\n confidenceLevel = Confidence.High;\n levelName = 'High';\n } else if (finalScore >= Confidence.Medium) {\n confidenceLevel = Confidence.Medium;\n levelName = 'Medium';\n } else if (finalScore >= Confidence.Low) {\n confidenceLevel = Confidence.Low;\n levelName = 'Low';\n } else {\n confidenceLevel = Confidence.VeryLow;\n levelName = 'Very Low';\n recommendations.push('Consider implementing additional fingerprinting techniques');\n }\n\n // Add specific recommendations\n if (finalScore < Confidence.Medium) {\n recommendations.push('Enable all available fingerprinting components for better accuracy');\n }\n if (spoofResistanceScore < 0.6) {\n recommendations.push('Include more spoof-resistant components like audio and WebGL');\n }\n if (entropyScore < 0.6) {\n recommendations.push('Add high-entropy components like canvas and math fingerprinting');\n }\n\n return {\n score: confidenceLevel,\n level: levelName,\n factors: {\n componentCount: successfulComponents.length,\n weightedScore: Math.round(weightedScore * 1000) / 1000,\n stabilityScore: Math.round(stabilityScore * 1000) / 1000,\n entropyScore: Math.round(entropyScore * 1000) / 1000,\n spoofResistanceScore: Math.round(spoofResistanceScore * 1000) / 1000,\n },\n recommendations: recommendations.slice(0, 3), // Limit to top 3 recommendations\n };\n}\n\n/**\n * Get confidence level name from score\n */\nexport function getConfidenceLevelName(score: number): string {\n if (score >= Confidence.VeryHigh) return 'Very High';\n if (score >= Confidence.High) return 'High';\n if (score >= Confidence.Medium) return 'Medium';\n if (score >= Confidence.Low) return 'Low';\n return 'Very Low';\n}\n\n/**\n * Check if a confidence score is acceptable for identification\n */\nexport function isConfidenceAcceptable(\n score: number, \n minLevel: Confidence = Confidence.Medium\n): boolean {\n return score >= minLevel;\n}","/**\n * Device-specific signals inspired by FingerprintJS\n * Helps differentiate devices by hardware characteristics\n */\n\nexport interface DeviceSignals {\n // Screen frame (availTop, availRight, availBottom, availLeft)\n // Very useful for mobile devices - differentiates devices with same resolution\n screenFrame?: {\n top: number | null;\n right: number | null;\n bottom: number | null;\n left: number | null;\n } | null;\n\n // Hardware characteristics\n hardwareConcurrency?: number; // CPU cores\n deviceMemory?: number; // RAM in GB (rounded)\n architecture?: number; // CPU architecture signature (ARM vs x86)\n\n // Enhanced touch support\n touchSupport?: {\n maxTouchPoints: number;\n touchEvent: boolean;\n touchStart: boolean;\n };\n\n // Browser vendor flavors (Brave, Edge, etc)\n vendorFlavors?: string[];\n\n // CPU class (if available)\n cpuClass?: string;\n\n // Display capabilities\n colorDepth?: number;\n colorGamut?: \"srgb\" | \"p3\" | \"rec2020\";\n}\n\n/**\n * Get screen frame (available area) - critical for mobile device differentiation\n */\nfunction getScreenFrame(): DeviceSignals[\"screenFrame\"] {\n try {\n const s = screen;\n\n // Calculate frame: top, right, bottom, left\n // Note: availTop/availLeft may not exist in all browsers\n const availTop = (s as any).availTop ?? 0;\n const availLeft = (s as any).availLeft ?? 0;\n const availWidth = s.availWidth ?? s.width;\n const availHeight = s.availHeight ?? s.height;\n\n const top = availTop || null;\n const right = s.width - availWidth - availLeft || null;\n const bottom = s.height - availHeight - availTop || null;\n const left = availLeft || null;\n\n // Return null if all are zero/null (some browsers hide this in private mode)\n if (top === null && right === null && bottom === null && left === null) {\n return null;\n }\n\n // Round to reduce micro-variance (macOS Dock can change slightly)\n const round = (v: number | null) =>\n v === null ? null : Math.round(v / 10) * 10;\n\n return {\n top: round(top),\n right: round(right),\n bottom: round(bottom),\n left: round(left),\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Get CPU architecture signature (ARM vs x86)\n * Uses multiple detection methods for maximum reliability\n */\nfunction getArchitecture(): number | undefined {\n try {\n // Method 1: Enhanced platform string detection (most reliable)\n const platform = navigator.platform?.toLowerCase() || '';\n const userAgent = navigator.userAgent?.toLowerCase() || '';\n \n // CRITICAL FIX: Prioritize desktop x86_64 detection first\n \n // Windows x64/x86 detection (highest priority for x86_64)\n if (platform.includes('win') && (userAgent.includes('wow64') || userAgent.includes('x64') || userAgent.includes('x86_64'))) {\n return 0; // x86_64 - Windows\n }\n \n // Linux x86_64 detection\n if (platform.includes('linux') && (platform.includes('x86_64') || userAgent.includes('x86_64'))) {\n return 0; // x86_64 - Linux\n }\n \n // MacOS Intel detection (before ARM check)\n if (platform.includes('mac') && (platform.includes('intel') || userAgent.includes('intel mac'))) {\n return 0; // x86_64 - Intel Mac\n }\n \n // Generic x86/x64 detection\n if (platform.includes('x86') || platform.includes('x64') || \n platform.includes('intel') || platform.includes('amd64') ||\n userAgent.includes('x86') || userAgent.includes('amd64')) {\n return 0; // x86_64\n }\n \n // ARM detection (after x86_64 checks)\n if (platform.includes('arm') || userAgent.includes('arm') || \n userAgent.includes('aarch64') || platform.includes('aarch64')) {\n return 255; // ARM\n }\n \n // Method 2: WebGL vendor detection (secondary check)\n try {\n const canvas = document.createElement('canvas');\n const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n if (gl && 'getExtension' in gl && 'getParameter' in gl) {\n const debugInfo = (gl as WebGLRenderingContext).getExtension('WEBGL_debug_renderer_info');\n if (debugInfo) {\n const vendor = (gl as WebGLRenderingContext).getParameter(debugInfo.UNMASKED_VENDOR_WEBGL)?.toLowerCase() || '';\n const renderer = (gl as WebGLRenderingContext).getParameter(debugInfo.UNMASKED_RENDERER_WEBGL)?.toLowerCase() || '';\n \n // Enhanced x86_64 GPU detection (desktop GPUs)\n if (vendor.includes('intel') || vendor.includes('nvidia') || vendor.includes('amd') ||\n renderer.includes('intel') || renderer.includes('nvidia') || renderer.includes('amd') || \n renderer.includes('radeon') || renderer.includes('geforce') || renderer.includes('quadro') ||\n renderer.includes('iris') || renderer.includes('uhd') || renderer.includes('hd graphics')) {\n return 0; // x86_64 - Desktop GPU\n }\n \n // ARM GPU detection (mobile and ARM devices)\n if (renderer.includes('mali') || renderer.includes('adreno') || \n renderer.includes('powervr') || renderer.includes('tegra') ||\n renderer.includes('apple gpu') || vendor.includes('arm') ||\n renderer.includes('videocore')) {\n return 255; // ARM - Mobile/ARM GPU\n }\n }\n }\n } catch {\n // WebGL detection failed, continue\n }\n \n // Method 3: Fallback floating point NaN behavior (least reliable)\n try {\n const f = new Float32Array(1);\n const u8 = new Uint8Array(f.buffer);\n f[0] = Infinity;\n f[0] = f[0] - f[0]; // Should produce NaN\n const nanBehavior = u8[3];\n \n // Only trust this if platform detection was inconclusive\n // AND we have strong indicators from other methods\n if (platform.includes('linux') && nanBehavior === 255) {\n // Linux on ARM is less common, but validate with other signals\n return nanBehavior;\n }\n \n return nanBehavior;\n } catch {\n return undefined;\n }\n \n } catch {\n return undefined;\n }\n}\n\n/**\n * Get enhanced touch support\n */\nfunction getTouchSupport(): DeviceSignals[\"touchSupport\"] {\n try {\n const n = navigator;\n\n let maxTouchPoints = 0;\n if (n.maxTouchPoints !== undefined) {\n maxTouchPoints = n.maxTouchPoints;\n } else if ((n as any).msMaxTouchPoints !== undefined) {\n maxTouchPoints = (n as any).msMaxTouchPoints;\n }\n\n let touchEvent = false;\n try {\n document.createEvent(\"TouchEvent\");\n touchEvent = true;\n } catch {\n touchEvent = false;\n }\n\n const touchStart = \"ontouchstart\" in window;\n\n return {\n maxTouchPoints,\n touchEvent,\n touchStart,\n };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Get vendor flavors (Brave, Edge, etc)\n */\nfunction getVendorFlavors(): string[] {\n const flavors: string[] = [];\n\n const checks = [\n \"chrome\", // Chrome/Chromium\n \"safari\", // Safari\n \"__crWeb\", // Chrome iOS\n \"__gCrWeb\", // Chrome iOS\n \"yandex\", // Yandex Browser\n \"__yb\", // Yandex iOS\n \"__ybro\", // Yandex iOS\n \"__firefox__\", // Firefox iOS\n \"__edgeTrackingPreventionStatistics\", // Edge\n \"webkit\", // WebKit\n \"oprt\", // Opera Touch\n \"samsungAr\", // Samsung Internet\n \"ucweb\", // UC Browser\n \"UCShellJava\", // UC Browser\n \"puffinDevice\", // Puffin\n ];\n\n for (const key of checks) {\n const value = (window as any)[key];\n if (value && typeof value === \"object\") {\n flavors.push(key);\n }\n }\n\n return flavors.sort();\n}\n\n/**\n * Get device memory (rounded to reduce variance)\n */\nfunction getDeviceMemory(): number | undefined {\n try {\n const mem = (navigator as any).deviceMemory;\n if (typeof mem === \"number\") {\n // Round to nearest GB to reduce variance\n return Math.round(mem);\n }\n if (typeof mem === \"string\") {\n const parsed = parseFloat(mem);\n return isNaN(parsed) ? undefined : Math.round(parsed);\n }\n return undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Get color depth (bits per pixel)\n */\nfunction getColorDepth(): number | undefined {\n try {\n return screen.colorDepth || undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Get color gamut (display color space capabilities)\n */\nfunction getColorGamut(): DeviceSignals[\"colorGamut\"] {\n try {\n // rec2020 includes p3 and p3 includes srgb\n for (const gamut of [\"rec2020\", \"p3\", \"srgb\"] as const) {\n if (window.matchMedia(`(color-gamut: ${gamut})`).matches) {\n return gamut;\n }\n }\n return undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Collect all device signals\n */\nexport function collectDeviceSignals(): DeviceSignals {\n return {\n screenFrame: getScreenFrame(),\n hardwareConcurrency: navigator.hardwareConcurrency || undefined,\n deviceMemory: getDeviceMemory(),\n architecture: getArchitecture(),\n touchSupport: getTouchSupport(),\n vendorFlavors: getVendorFlavors(),\n cpuClass: (navigator as any).cpuClass || undefined,\n colorDepth: getColorDepth(),\n colorGamut: getColorGamut(),\n };\n}\n"],"names":["isWebKit","isAndroid","isSamsungInternet","getBrowserEngine","getBrowserCapabilities","getTouchSupport","isCanvasAvailable","measureText","isFontAvailable","getScreenFrame","getWebGLExtensions","getColorGamut","getDateTimeLocale","getMathFingerprint","deviceSignals","analyzeUserAgent","testLocalStorage","testSessionStorage","testIndexedDB","getDeviceMemory","getArchitecture"],"mappings":"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"}
|