@zaplier/sdk 1.0.0

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.
Files changed (97) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +144 -0
  3. package/dist/index.cjs +11092 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.ts +1204 -0
  6. package/dist/index.esm.js +11059 -0
  7. package/dist/index.esm.js.map +1 -0
  8. package/dist/index.js +3517 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/sdk.js +11098 -0
  11. package/dist/sdk.js.map +1 -0
  12. package/dist/sdk.min.js +7 -0
  13. package/dist/src/index.d.ts +15 -0
  14. package/dist/src/index.d.ts.map +1 -0
  15. package/dist/src/modules/anti-adblock.d.ts +108 -0
  16. package/dist/src/modules/anti-adblock.d.ts.map +1 -0
  17. package/dist/src/modules/bot-detection.d.ts +15 -0
  18. package/dist/src/modules/bot-detection.d.ts.map +1 -0
  19. package/dist/src/modules/fingerprint/accessibility.d.ts +155 -0
  20. package/dist/src/modules/fingerprint/accessibility.d.ts.map +1 -0
  21. package/dist/src/modules/fingerprint/audio.d.ts +16 -0
  22. package/dist/src/modules/fingerprint/audio.d.ts.map +1 -0
  23. package/dist/src/modules/fingerprint/browser-apis.d.ts +108 -0
  24. package/dist/src/modules/fingerprint/browser-apis.d.ts.map +1 -0
  25. package/dist/src/modules/fingerprint/browser.d.ts +14 -0
  26. package/dist/src/modules/fingerprint/browser.d.ts.map +1 -0
  27. package/dist/src/modules/fingerprint/canvas.d.ts +14 -0
  28. package/dist/src/modules/fingerprint/canvas.d.ts.map +1 -0
  29. package/dist/src/modules/fingerprint/confidence.d.ts +89 -0
  30. package/dist/src/modules/fingerprint/confidence.d.ts.map +1 -0
  31. package/dist/src/modules/fingerprint/datetime-locale.d.ts +76 -0
  32. package/dist/src/modules/fingerprint/datetime-locale.d.ts.map +1 -0
  33. package/dist/src/modules/fingerprint/device-signals.d.ts +29 -0
  34. package/dist/src/modules/fingerprint/device-signals.d.ts.map +1 -0
  35. package/dist/src/modules/fingerprint/dom-blockers.d.ts +56 -0
  36. package/dist/src/modules/fingerprint/dom-blockers.d.ts.map +1 -0
  37. package/dist/src/modules/fingerprint/font-preferences.d.ts +55 -0
  38. package/dist/src/modules/fingerprint/font-preferences.d.ts.map +1 -0
  39. package/dist/src/modules/fingerprint/fonts-enhanced.d.ts +43 -0
  40. package/dist/src/modules/fingerprint/fonts-enhanced.d.ts.map +1 -0
  41. package/dist/src/modules/fingerprint/fonts.d.ts +14 -0
  42. package/dist/src/modules/fingerprint/fonts.d.ts.map +1 -0
  43. package/dist/src/modules/fingerprint/hardware.d.ts +40 -0
  44. package/dist/src/modules/fingerprint/hardware.d.ts.map +1 -0
  45. package/dist/src/modules/fingerprint/hashing.d.ts +28 -0
  46. package/dist/src/modules/fingerprint/hashing.d.ts.map +1 -0
  47. package/dist/src/modules/fingerprint/incognito.d.ts +6 -0
  48. package/dist/src/modules/fingerprint/incognito.d.ts.map +1 -0
  49. package/dist/src/modules/fingerprint/math-enhanced.d.ts +70 -0
  50. package/dist/src/modules/fingerprint/math-enhanced.d.ts.map +1 -0
  51. package/dist/src/modules/fingerprint/math.d.ts +32 -0
  52. package/dist/src/modules/fingerprint/math.d.ts.map +1 -0
  53. package/dist/src/modules/fingerprint/plugins-enhanced.d.ts +97 -0
  54. package/dist/src/modules/fingerprint/plugins-enhanced.d.ts.map +1 -0
  55. package/dist/src/modules/fingerprint/screen.d.ts +15 -0
  56. package/dist/src/modules/fingerprint/screen.d.ts.map +1 -0
  57. package/dist/src/modules/fingerprint/storage.d.ts +45 -0
  58. package/dist/src/modules/fingerprint/storage.d.ts.map +1 -0
  59. package/dist/src/modules/fingerprint/system.d.ts +40 -0
  60. package/dist/src/modules/fingerprint/system.d.ts.map +1 -0
  61. package/dist/src/modules/fingerprint/webgl.d.ts +15 -0
  62. package/dist/src/modules/fingerprint/webgl.d.ts.map +1 -0
  63. package/dist/src/modules/fingerprint.d.ts +35 -0
  64. package/dist/src/modules/fingerprint.d.ts.map +1 -0
  65. package/dist/src/modules/global-interface.d.ts +141 -0
  66. package/dist/src/modules/global-interface.d.ts.map +1 -0
  67. package/dist/src/modules/heatmap.d.ts +140 -0
  68. package/dist/src/modules/heatmap.d.ts.map +1 -0
  69. package/dist/src/modules/incognito-detection.d.ts +23 -0
  70. package/dist/src/modules/incognito-detection.d.ts.map +1 -0
  71. package/dist/src/modules/session-replay.d.ts +132 -0
  72. package/dist/src/modules/session-replay.d.ts.map +1 -0
  73. package/dist/src/modules/user-agent.d.ts +35 -0
  74. package/dist/src/modules/user-agent.d.ts.map +1 -0
  75. package/dist/src/sdk.d.ts +227 -0
  76. package/dist/src/sdk.d.ts.map +1 -0
  77. package/dist/src/types/config.d.ts +44 -0
  78. package/dist/src/types/config.d.ts.map +1 -0
  79. package/dist/src/types/detection.d.ts +114 -0
  80. package/dist/src/types/detection.d.ts.map +1 -0
  81. package/dist/src/types/events.d.ts +174 -0
  82. package/dist/src/types/events.d.ts.map +1 -0
  83. package/dist/src/types/fingerprint.d.ts +157 -0
  84. package/dist/src/types/fingerprint.d.ts.map +1 -0
  85. package/dist/src/types/index.d.ts +83 -0
  86. package/dist/src/types/index.d.ts.map +1 -0
  87. package/dist/src/types/methods.d.ts +83 -0
  88. package/dist/src/types/methods.d.ts.map +1 -0
  89. package/dist/src/types/visitor.d.ts +90 -0
  90. package/dist/src/types/visitor.d.ts.map +1 -0
  91. package/dist/src/utils/browser.d.ts +79 -0
  92. package/dist/src/utils/browser.d.ts.map +1 -0
  93. package/dist/src/utils/lazy-loader.d.ts +60 -0
  94. package/dist/src/utils/lazy-loader.d.ts.map +1 -0
  95. package/dist/src/utils/webgl-cache.d.ts +43 -0
  96. package/dist/src/utils/webgl-cache.d.ts.map +1 -0
  97. package/package.json +82 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/modules/fingerprint/hashing.ts","../../src/modules/fingerprint/canvas.ts","../../src/modules/fingerprint/webgl.ts","../../src/modules/fingerprint/audio.ts","../../src/modules/fingerprint/fonts.ts","../../src/modules/fingerprint/screen.ts","../../src/modules/fingerprint/browser.ts","../../src/modules/fingerprint.ts","../../src/sdk.ts","../../src/modules/bot-detection.ts","../../src/modules/incognito-detection.ts","../../src/modules/user-agent.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 const hex1 = h1[0].toString(16).padStart(8, '0') + h1[1].toString(16).padStart(8, '0');\n const hex2 = h2[0].toString(16).padStart(8, '0') + h2[1].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(components: Record<string, any>): string {\n // Convert components to canonical string representation\n const canonical = JSON.stringify(components, Object.keys(components).sort());\n \n // Use MurmurHash3 x64 for consistent hashing\n return x64hash128(canonical);\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 * Canvas Fingerprinting\n * Based on FingerprintJS canvas component with incognito detection\n */\n\nimport type { FingerprintComponent, CanvasFingerprint } from '../../types/fingerprint';\nimport { hash32 } from './hashing';\n\n/**\n * Text to render for canvas fingerprinting\n */\nconst CANVAS_TEXT = 'RabbitTracker Canvas 🎨 🔒 2024';\n\n/**\n * Geometric shapes for canvas fingerprinting\n */\nfunction drawGeometry(ctx: CanvasRenderingContext2D): void {\n // Set up styles\n ctx.fillStyle = 'rgb(102, 204, 0)';\n ctx.fillRect(10, 10, 50, 50);\n \n ctx.fillStyle = '#f60';\n ctx.fillRect(70, 10, 50, 50);\n \n // Draw circle\n ctx.beginPath();\n ctx.arc(50, 80, 20, 0, Math.PI * 2, true);\n ctx.closePath();\n ctx.fill();\n \n // Draw triangle\n ctx.beginPath();\n ctx.moveTo(100, 80);\n ctx.lineTo(120, 120);\n ctx.lineTo(80, 120);\n ctx.closePath();\n ctx.stroke();\n \n // Add gradient\n const gradient = ctx.createLinearGradient(0, 0, 150, 150);\n gradient.addColorStop(0, 'red');\n gradient.addColorStop(1, 'blue');\n ctx.fillStyle = gradient;\n ctx.fillRect(130, 10, 50, 50);\n}\n\n/**\n * Draw text with various styles\n */\nfunction drawText(ctx: CanvasRenderingContext2D): void {\n // Text with emoji and special characters\n ctx.textBaseline = 'top';\n ctx.font = '14px Arial, sans-serif';\n ctx.fillStyle = '#000';\n ctx.fillText(CANVAS_TEXT, 4, 140);\n \n // Different font\n ctx.font = '12px Georgia, serif';\n ctx.fillStyle = '#666';\n ctx.fillText('Georgia Font Test', 4, 160);\n \n // Bold text\n ctx.font = 'bold 16px Helvetica';\n ctx.fillStyle = '#333';\n ctx.fillText('Bold Helvetica', 4, 180);\n \n // Apply transformations\n ctx.save();\n ctx.scale(1.2, 0.8);\n ctx.font = '10px Courier New';\n ctx.fillStyle = '#999';\n ctx.fillText('Transformed Text', 4, 220);\n ctx.restore();\n}\n\n/**\n * Detect potential incognito mode through canvas inconsistencies\n */\nfunction detectInconsistencies(\n textData: string, \n geometryData: string,\n ctx: CanvasRenderingContext2D\n): boolean {\n try {\n // Test if getImageData works consistently\n const imageData = ctx.getImageData(0, 0, 1, 1);\n \n // In some browsers in incognito mode, canvas operations might be slightly different\n // This is a heuristic check\n if (textData.length < 100 || geometryData.length < 100) {\n return true; // Suspiciously short data\n }\n \n // Check for specific patterns that might indicate canvas blocking\n const hasExpectedPatterns = textData.includes('data:image/png') && \n geometryData.includes('data:image/png');\n \n return !hasExpectedPatterns;\n } catch (error) {\n // If getImageData fails, it might indicate blocking\n return true;\n }\n}\n\n/**\n * Generate canvas fingerprint\n */\nexport async function getCanvasFingerprint(): Promise<FingerprintComponent<CanvasFingerprint>> {\n const startTime = performance.now();\n \n try {\n // Create canvas element\n const canvas = document.createElement('canvas');\n canvas.width = 200;\n canvas.height = 250;\n \n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('Canvas 2D context not available');\n }\n \n // Test canvas winding (different behavior across browsers)\n ctx.rect(0, 0, 10, 10);\n ctx.rect(2, 2, 6, 6);\n const isClockwise = ctx.isPointInPath(5, 5, 'evenodd');\n \n // Draw text\n drawText(ctx);\n const textData = canvas.toDataURL();\n \n // Clear and draw geometry\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n drawGeometry(ctx);\n const geometryData = canvas.toDataURL();\n \n // Check for inconsistencies that might indicate incognito mode\n const isInconsistent = detectInconsistencies(textData, geometryData, ctx);\n \n const endTime = performance.now();\n \n const result: CanvasFingerprint = {\n text: hash32(textData),\n geometry: hash32(geometryData),\n winding: isClockwise,\n isInconsistent\n };\n \n return {\n value: result,\n duration: endTime - startTime\n };\n \n } catch (error) {\n return {\n value: {\n text: 'error',\n geometry: 'error', \n winding: false,\n isInconsistent: true\n },\n duration: performance.now() - startTime,\n error: 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 * WebGL Fingerprinting\n * Based on FingerprintJS WebGL component for GPU and driver detection\n */\n\nimport type { FingerprintComponent, WebGLFingerprint } from '../../types/fingerprint';\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 * Get WebGL context with fallback\n */\nfunction getWebGLContext(): WebGLRenderingContext | null {\n const canvas = document.createElement('canvas');\n \n // Try different context types\n const contextTypes = ['webgl', 'experimental-webgl', 'webkit-3d', 'moz-webgl'];\n \n for (const contextType of contextTypes) {\n try {\n const gl = canvas.getContext(contextType) as WebGLRenderingContext | null;\n if (gl) return gl;\n } catch {\n // Continue trying other context types\n }\n }\n \n return null;\n}\n\n/**\n * Get WebGL extensions\n */\nfunction getWebGLExtensions(gl: WebGLRenderingContext): string[] {\n const extensions: string[] = [];\n \n try {\n const supportedExtensions = gl.getSupportedExtensions();\n if (supportedExtensions) {\n extensions.push(...supportedExtensions.sort());\n }\n } catch {\n // Extensions not available\n }\n \n return extensions;\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 * Generate WebGL fingerprint\n */\nexport async function getWebGLFingerprint(): Promise<FingerprintComponent<WebGLFingerprint>> {\n const startTime = performance.now();\n \n try {\n const gl = getWebGLContext();\n if (!gl) {\n throw new Error('WebGL not available');\n }\n \n // Get basic WebGL information\n const vendor = getWebGLParameter(gl, gl.VENDOR) || 'unknown';\n const renderer = getWebGLParameter(gl, gl.RENDERER) || 'unknown';\n const version = getWebGLParameter(gl, gl.VERSION) || 'unknown';\n \n // Get unmasked vendor/renderer if available (more specific GPU info)\n let unmaskedVendor = vendor;\n let unmaskedRenderer = renderer;\n \n try {\n const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');\n if (debugInfo) {\n unmaskedVendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL) || vendor;\n unmaskedRenderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL) || renderer;\n }\n } catch {\n // Debug renderer info blocked or not available\n }\n \n // Collect extensions\n const extensions = getWebGLExtensions(gl);\n \n // Collect parameters\n const parameters = collectWebGLParameters(gl);\n \n // Get shader precision\n const shaderPrecision = getShaderPrecision(gl);\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 };\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 },\n duration: performance.now() - startTime,\n error: error instanceof Error ? error.message : 'WebGL fingerprinting failed'\n };\n }\n}\n\n/**\n * Check if WebGL fingerprinting is available\n */\nexport function isWebGLAvailable(): boolean {\n try {\n const canvas = document.createElement('canvas');\n const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n return gl !== null;\n } catch {\n return false;\n }\n}","/**\n * Audio Fingerprinting\n * Based on FingerprintJS audio component using AudioContext\n */\n\nimport type { FingerprintComponent, AudioFingerprint } from '../../types/fingerprint';\nimport { hash32 } from './hashing';\n\n/**\n * Audio configuration for fingerprinting\n */\nconst AUDIO_CONFIG = {\n SAMPLE_RATE: 44100,\n DURATION: 0.1, // 100ms\n FREQUENCY: 1000, // 1kHz tone\n COMPRESSOR_THRESHOLD: -50,\n COMPRESSOR_KNEE: 40,\n COMPRESSOR_RATIO: 12,\n COMPRESSOR_ATTACK: 0.003,\n COMPRESSOR_RELEASE: 0.25,\n} as const;\n\n/**\n * Create audio context with fallbacks\n */\nfunction createAudioContext(): AudioContext | null {\n try {\n const AudioContextClass = window.AudioContext || (window as any).webkitAudioContext;\n if (!AudioContextClass) return null;\n \n return new AudioContextClass();\n } catch {\n return null;\n }\n}\n\n/**\n * Generate oscillator fingerprint\n */\nasync function generateOscillatorFingerprint(audioContext: AudioContext): Promise<string> {\n const oscillator = audioContext.createOscillator();\n const compressor = audioContext.createDynamicsCompressor();\n const buffer = audioContext.createBuffer(1, audioContext.sampleRate * AUDIO_CONFIG.DURATION, audioContext.sampleRate);\n \n // Configure oscillator\n oscillator.type = 'triangle';\n oscillator.frequency.setValueAtTime(AUDIO_CONFIG.FREQUENCY, audioContext.currentTime);\n \n // Configure compressor\n compressor.threshold.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_THRESHOLD, audioContext.currentTime);\n compressor.knee.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_KNEE, audioContext.currentTime);\n compressor.ratio.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_RATIO, audioContext.currentTime);\n compressor.attack.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_ATTACK, audioContext.currentTime);\n compressor.release.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_RELEASE, audioContext.currentTime);\n \n // Connect nodes\n oscillator.connect(compressor);\n compressor.connect(audioContext.destination);\n \n // Start and stop oscillator\n oscillator.start(audioContext.currentTime);\n oscillator.stop(audioContext.currentTime + AUDIO_CONFIG.DURATION);\n \n // Wait for processing and get buffer data\n await new Promise(resolve => setTimeout(resolve, AUDIO_CONFIG.DURATION * 1000 + 50));\n \n // Generate fingerprint from audio characteristics\n const channelData = buffer.getChannelData(0);\n const samples = Array.from(channelData.slice(0, 100)); // First 100 samples\n \n return hash32(samples.join(','));\n}\n\n/**\n * Generate compressor fingerprint\n */\nasync function generateCompressorFingerprint(audioContext: AudioContext): Promise<string> {\n try {\n const oscillator = audioContext.createOscillator();\n const compressor = audioContext.createDynamicsCompressor();\n const gain = audioContext.createGain();\n \n // Create offline context for deterministic results\n const offlineContext = new OfflineAudioContext(1, audioContext.sampleRate * AUDIO_CONFIG.DURATION, audioContext.sampleRate);\n \n const offlineOscillator = offlineContext.createOscillator();\n const offlineCompressor = offlineContext.createDynamicsCompressor();\n \n // Configure nodes\n offlineOscillator.type = 'triangle';\n offlineOscillator.frequency.setValueAtTime(AUDIO_CONFIG.FREQUENCY, offlineContext.currentTime);\n \n offlineCompressor.threshold.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_THRESHOLD, offlineContext.currentTime);\n offlineCompressor.knee.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_KNEE, offlineContext.currentTime);\n offlineCompressor.ratio.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_RATIO, offlineContext.currentTime);\n offlineCompressor.attack.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_ATTACK, offlineContext.currentTime);\n offlineCompressor.release.setValueAtTime(AUDIO_CONFIG.COMPRESSOR_RELEASE, offlineContext.currentTime);\n \n // Connect and render\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 for browsers without OfflineAudioContext\n return hash32('compressor_fallback');\n }\n}\n\n/**\n * Generate audio fingerprint\n */\nexport async function getAudioFingerprint(): Promise<FingerprintComponent<AudioFingerprint>> {\n const startTime = performance.now();\n \n try {\n const audioContext = createAudioContext();\n if (!audioContext) {\n throw new Error('AudioContext not available');\n }\n \n // Resume context if needed (Chrome autoplay policy)\n if (audioContext.state === 'suspended') {\n try {\n await audioContext.resume();\n } catch {\n // Cannot resume context\n }\n }\n \n // Generate fingerprints\n const [oscillatorHash, compressorHash] = await Promise.all([\n generateOscillatorFingerprint(audioContext).catch(() => 'oscillator_error'),\n generateCompressorFingerprint(audioContext).catch(() => 'compressor_error')\n ]);\n \n // Close audio context to free resources\n try {\n await audioContext.close();\n } catch {\n // Context close failed\n }\n \n const endTime = performance.now();\n \n const result: AudioFingerprint = {\n oscillator: oscillatorHash,\n compressor: compressorHash,\n sampleRate: audioContext.sampleRate,\n maxChannelCount: audioContext.destination.maxChannelCount\n };\n \n return {\n value: result,\n duration: endTime - startTime\n };\n \n } catch (error) {\n return {\n value: {\n oscillator: 'error',\n compressor: 'error',\n sampleRate: 0,\n maxChannelCount: 0\n },\n duration: performance.now() - startTime,\n error: error instanceof Error ? error.message : 'Audio fingerprinting failed'\n };\n }\n}\n\n/**\n * Check if audio fingerprinting is available\n */\nexport function isAudioAvailable(): boolean {\n try {\n const AudioContextClass = window.AudioContext || (window as any).webkitAudioContext;\n return typeof AudioContextClass === 'function';\n } catch {\n return false;\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 { FingerprintComponent, ScreenFingerprint } 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 = (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 * Get available screen dimensions (excluding taskbars, docks, etc.)\n */\nfunction getAvailableScreenDimensions(): { width: number; height: number } {\n try {\n return {\n width: screen.availWidth || screen.width,\n height: screen.availHeight || screen.height\n };\n } catch {\n return {\n width: screen.width || 0,\n height: screen.height || 0\n };\n }\n}\n\n/**\n * Get viewport dimensions\n */\nfunction getViewportDimensions(): { width: number; height: number } {\n try {\n // Use document.documentElement for more accurate measurements\n const element = document.documentElement;\n \n return {\n width: Math.max(\n element.clientWidth || 0,\n window.innerWidth || 0\n ),\n height: Math.max(\n element.clientHeight || 0,\n window.innerHeight || 0\n )\n };\n } catch {\n return {\n width: window.innerWidth || 0,\n height: window.innerHeight || 0\n };\n }\n}\n\n/**\n * Generate screen fingerprint\n */\nexport async function getScreenFingerprint(): Promise<FingerprintComponent<ScreenFingerprint>> {\n const startTime = performance.now();\n \n try {\n // Get screen dimensions\n const screenWidth = screen.width || 0;\n const screenHeight = screen.height || 0;\n const colorDepth = screen.colorDepth || screen.pixelDepth || 0;\n \n // Get available screen space\n const available = getAvailableScreenDimensions();\n \n // Get viewport dimensions\n const viewport = getViewportDimensions();\n \n // Get pixel ratio\n const pixelRatio = getPixelRatio();\n \n // Get orientation\n const orientation = getScreenOrientation();\n \n const endTime = performance.now();\n \n const result: ScreenFingerprint = {\n // Screen properties\n width: screenWidth,\n height: screenHeight,\n colorDepth,\n pixelRatio,\n \n // Viewport properties\n viewportWidth: viewport.width,\n viewportHeight: viewport.height,\n \n // Available screen space\n availableWidth: available.width,\n availableHeight: available.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 \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: 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 typeof screen === 'object' && \n typeof screen.width === 'number' && \n typeof screen.height === 'number';\n } catch {\n return false;\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';\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\n if (!timezone) {\n const offset = new Date().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 const timezoneOffset = new Date().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 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 \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 // 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 * Fingerprint Orchestrator\n * Main fingerprinting engine that coordinates all components\n * Based on FingerprintJS architecture with privacy-first approach\n */\n\nimport type { \n FingerprintData, \n FingerprintOptions, \n FingerprintResult, \n FingerprintComponentType \n} from '../types/fingerprint';\n\n// Import individual fingerprinting components\nimport { getCanvasFingerprint, isCanvasAvailable } from './fingerprint/canvas';\nimport { getWebGLFingerprint, isWebGLAvailable } from './fingerprint/webgl';\nimport { getAudioFingerprint, isAudioAvailable } from './fingerprint/audio';\nimport { getFontFingerprint, isFontDetectionAvailable } from './fingerprint/fonts';\nimport { getScreenFingerprint, isScreenAvailable } from './fingerprint/screen';\nimport { getBrowserFingerprint, isBrowserFingerprintingAvailable } from './fingerprint/browser';\nimport { hashFingerprint, generateVisitorId } from './fingerprint/hashing';\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 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[] = ['canvas', 'webgl', 'audio'];\n if (invasiveComponents.includes(component)) {\n return false;\n }\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 and session caching\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 try {\n // Create timeout promise\n const timeoutPromise = new Promise<T>((_, reject) => {\n setTimeout(() => reject(new Error(`${componentType} timeout`)), options.timeout);\n });\n \n // Race collection vs timeout\n const result = await Promise.race([collector(), timeoutPromise]);\n \n // Cache successful result in session memory only\n setSessionCachedComponent(cacheKey, result);\n \n return result;\n } catch (error) {\n // Return null on error (component will be marked as failed)\n return null;\n }\n}\n\n/**\n * Main fingerprint collection function\n */\nexport async function collectFingerprint(options: Partial<FingerprintOptions> = {}): Promise<FingerprintResult> {\n const startTime = performance.now();\n const opts = { ...DEFAULT_OPTIONS, ...options };\n \n const collectedComponents: FingerprintComponentType[] = [];\n const failedComponents: { component: FingerprintComponentType; error: string }[] = [];\n \n const fingerprintData: Partial<FingerprintData> = {\n collectionTime: startTime,\n gdprMode: opts.gdprMode,\n components: []\n };\n \n // Collect Canvas fingerprint\n if (shouldIncludeComponent('canvas', opts) && isCanvasAvailable()) {\n const result = await collectComponent('canvas', getCanvasFingerprint, opts);\n if (result) {\n fingerprintData.canvas = result;\n collectedComponents.push('canvas');\n } else {\n failedComponents.push({ component: 'canvas', error: 'Collection failed or timeout' });\n }\n }\n \n // Collect WebGL fingerprint\n if (shouldIncludeComponent('webgl', opts) && isWebGLAvailable()) {\n const result = await collectComponent('webgl', getWebGLFingerprint, opts);\n if (result) {\n fingerprintData.webgl = result;\n collectedComponents.push('webgl');\n } else {\n failedComponents.push({ component: 'webgl', error: 'Collection failed or timeout' });\n }\n }\n \n // Collect Audio fingerprint\n if (shouldIncludeComponent('audio', opts) && isAudioAvailable()) {\n const result = await collectComponent('audio', getAudioFingerprint, opts);\n if (result) {\n fingerprintData.audio = result;\n collectedComponents.push('audio');\n } else {\n failedComponents.push({ component: 'audio', error: 'Collection failed or timeout' });\n }\n }\n \n // Collect Font fingerprint\n if (shouldIncludeComponent('fonts', opts) && isFontDetectionAvailable()) {\n const result = await collectComponent('fonts', () => getFontFingerprint(!opts.gdprMode), opts);\n if (result) {\n fingerprintData.fonts = result;\n collectedComponents.push('fonts');\n } else {\n failedComponents.push({ component: 'fonts', error: 'Collection failed or timeout' });\n }\n }\n \n // Collect Screen fingerprint (always available)\n if (shouldIncludeComponent('screen', opts) && isScreenAvailable()) {\n const result = await collectComponent('screen', getScreenFingerprint, opts);\n if (result) {\n fingerprintData.screen = result;\n collectedComponents.push('screen');\n } else {\n failedComponents.push({ component: 'screen', error: 'Collection failed or timeout' });\n }\n }\n \n // Collect Browser fingerprint (always available)\n if (shouldIncludeComponent('browser', opts) && isBrowserFingerprintingAvailable()) {\n const result = await collectComponent('browser', getBrowserFingerprint, opts);\n if (result) {\n fingerprintData.browser = result;\n collectedComponents.push('browser');\n } else {\n failedComponents.push({ component: 'browser', error: 'Collection failed or timeout' });\n }\n }\n \n // Generate hash from collected components\n const componentValues: Record<string, any> = {};\n \n collectedComponents.forEach(component => {\n const componentData = fingerprintData[component];\n if (componentData && componentData.value) {\n componentValues[component] = componentData.value;\n }\n });\n \n // Create final fingerprint hash\n const hash = hashFingerprint(componentValues);\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 };\n\n if (collectedComponents.length > 0) {\n result.data = finalData;\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(fingerprintData: FingerprintData): 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 * RabbitTracker SDK v3.0.0\n * 100% Cookieless Analytics Tracking\n * \n * Main SDK class for client-side tracking integration\n */\n\nimport type { \n SDKConfig, \n InternalConfig,\n RabbitTrackerSDK as IRabbitTrackerSDK,\n PageViewEvent,\n EcommerceEvent,\n ConversionEvent,\n CustomEvent,\n IdentifyEvent\n} from './types';\n\nimport { \n collectFingerprint, \n getLightweightFingerprint, \n getCompleteFingerprint,\n generateVisitorIdFromFingerprint \n} from './modules/fingerprint';\n\nimport { detectBot, quickBotDetection } from './modules/bot-detection';\nimport { detectIncognitoMode, quickIncognitoDetection } from './modules/incognito-detection';\nimport { analyzeUserAgent } from './modules/user-agent';\n\n/**\n * Default internal configuration\n */\nconst DEFAULT_CONFIG: Omit<InternalConfig, keyof SDKConfig> = {\n apiEndpoint: 'https://api.rabbitracker.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 RabbitTracker SDK Class\n */\nexport class RabbitTrackerSDK implements IRabbitTrackerSDK {\n public config: InternalConfig;\n public version = '3.0.0';\n \n private visitorId?: string;\n private sessionId?: string;\n private fingerprint?: any;\n private isInitialized = false;\n private eventQueue: any[] = [];\n \n constructor(userConfig: SDKConfig) {\n // Validate required config\n if (!userConfig.token) {\n throw new Error('RabbitTracker: 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('[RabbitTracker] 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('[RabbitTracker] 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 // Process queued events\n this.processEventQueue();\n \n if (this.config.debug) {\n console.log('[RabbitTracker] SDK initialized successfully', {\n visitorId: this.visitorId,\n gdprMode: this.config.gdprMode\n });\n }\n \n } catch (error) {\n console.error('[RabbitTracker] Initialization failed:', error);\n }\n }\n \n /**\n * Collect fingerprint and generate visitor ID\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 this.visitorId = generateVisitorIdFromFingerprint(result.data);\n \n if (this.config.debug) {\n console.log('[RabbitTracker] Fingerprint collected:', {\n components: result.collectedComponents,\n visitorId: this.visitorId,\n gdprMode: this.config.gdprMode\n });\n }\n } else {\n throw new Error('Fingerprint collection failed');\n }\n } catch (error) {\n if (this.config.debug) {\n console.error('[RabbitTracker] Fingerprint collection failed:', error);\n }\n // Fallback to basic fingerprint\n this.visitorId = 'fallback_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);\n }\n }\n \n /**\n * Check if running on localhost\n */\n private isLocalhost(): boolean {\n if (typeof window === 'undefined') return false;\n return 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 * 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: this.config.token,\n fingerprint: this.fingerprint?.hash || this.visitorId,\n fingerprintComponents: this.fingerprint?.components || {},\n ...eventData,\n timestamp: new Date().toISOString(),\n url: window.location.href,\n referrer: document.referrer,\n pageTitle: document.title,\n userAgent: navigator.userAgent,\n screenWidth: window.screen.width,\n screenHeight: window.screen.height,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n gdprMode: this.config.gdprMode\n };\n \n const response = await this.makeRequest('/tracking/event', payload);\n \n if (response.sessionId) {\n this.sessionId = response.sessionId;\n }\n \n return response;\n \n } catch (error) {\n if (this.config.debug) {\n console.error('[RabbitTracker] 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\n */\n private async makeRequest(endpoint: string, data: any): Promise<any> {\n const url = `${this.config.apiEndpoint}${endpoint}`;\n \n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(data)\n });\n \n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n \n return response.json();\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: url || window.location.href,\n pageTitle: title || 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('[RabbitTracker] 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('[RabbitTracker] 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('[RabbitTracker] Presence tracking stopped');\n }\n }\n \n /**\n * Heatmap API\n */\n heatmap = {\n enable: (): void => {\n this.config.heatmap = true;\n if (this.config.debug) {\n console.log('[RabbitTracker] Heatmap enabled');\n }\n },\n disable: (): void => {\n this.config.heatmap = false;\n if (this.config.debug) {\n console.log('[RabbitTracker] Heatmap disabled');\n }\n }\n };\n \n /**\n * Replay API\n */\n replay = {\n enable: (): void => {\n this.config.replay = true;\n if (this.config.debug) {\n console.log('[RabbitTracker] Replay enabled');\n }\n },\n disable: (): void => {\n this.config.replay = false;\n if (this.config.debug) {\n console.log('[RabbitTracker] Replay disabled');\n }\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('funnel_conversion', data.value, data.currency, data);\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('[RabbitTracker] 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('[RabbitTracker] 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 user data\n */\n getUserData(): {\n sessionId: string;\n userId?: string;\n location: {\n city?: string;\n country?: string;\n coordinates?: { lat: number; lng: number };\n };\n device: {\n userAgent: string;\n language: string;\n screen: { width: number; height: number };\n };\n journey: any[];\n fingerprint?: string;\n } {\n return {\n sessionId: this.sessionId || '',\n location: {}, // Will be populated by backend\n device: {\n userAgent: navigator.userAgent,\n language: navigator.language,\n screen: {\n width: window.screen.width,\n height: window.screen.height\n }\n },\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 RabbitTrackerSDK;","/**\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 { IncognitoDetectionResult, IncognitoDetectionMethods, DetectionResult } 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: { error: 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 \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 \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 \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 \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\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 \n // Incognito mode often has very limited quota\n if (estimate.quota && estimate.quota < 10 * 1024 * 1024) { // Less than 10MB\n return {\n detected: true,\n confidence: 70,\n method: 'quota_limited',\n details: { quota: estimate.quota, usage: estimate.usage }\n };\n }\n \n return {\n detected: false,\n confidence: 40,\n method: 'quota_normal',\n details: { quota: estimate.quota, usage: estimate.usage }\n };\n \n } catch (error) {\n return {\n detected: true,\n confidence: 60,\n method: 'quota_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 = (window as any).requestFileSystem || (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 \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 = '__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 \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 = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n });\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(): { browser: string; supportsDetection: boolean } {\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\n */\nexport async function detectIncognitoMode(): Promise<IncognitoDetectionResult> {\n const browserInfo = detectBrowserSpecificPatterns();\n \n // Run all detection methods in parallel\n const [\n localStorage,\n sessionStorage,\n indexedDB,\n openDatabase,\n permissions,\n quotaManagement,\n filesystem,\n cookiesEnabled,\n cacheDetection\n ] = await Promise.all([\n testLocalStorage(),\n testSessionStorage(),\n testIndexedDB(),\n testOpenDatabase(),\n testPermissions(),\n testQuotaManagement(),\n testFilesystem(),\n testCookiesEnabled(),\n testCacheDetection()\n ]);\n \n const detectionMethods: IncognitoDetectionMethods = {\n localStorage,\n sessionStorage,\n indexedDB,\n openDatabase,\n permissions,\n quotaManagement,\n filesystem,\n cookiesEnabled,\n cacheDetection,\n canvasConsistency: { detected: false, confidence: 0, method: 'not_implemented' },\n webglConsistency: { detected: false, confidence: 0, method: 'not_implemented' },\n timingDifferences: { detected: false, confidence: 0, method: 'not_implemented' }\n };\n \n // Calculate overall confidence\n const detections = Object.values(detectionMethods).filter(d => d.detected);\n const totalConfidence = detections.reduce((sum, d) => sum + d.confidence, 0);\n const averageConfidence = detections.length > 0 ? totalConfidence / detections.length : 0;\n \n // Determine if incognito mode is detected\n const isIncognito = detections.length >= 2 || // Multiple methods detected\n detections.some(d => d.confidence >= 80); // High confidence detection\n \n const confidence = Math.min(averageConfidence, 95); // Cap at 95%\n \n return {\n isIncognito,\n confidence: Math.round(confidence),\n detectionMethods: Object.keys(detectionMethods).filter(key => detectionMethods[key]?.detected),\n details: {\n localStorage: localStorage?.detected ?? false,\n sessionStorage: sessionStorage?.detected ?? false,\n indexedDB: indexedDB?.detected ?? false,\n cookiesEnabled: cookiesEnabled?.detected ?? false,\n quota: quotaManagement?.detected ? 0 : null,\n permissions: permissions?.details || {}\n }\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 * 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}"],"names":["isCanvasAvailable","analyzeUserAgent"],"mappings":"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"}