@gangdai/fingerprint 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.
- package/LICENSE +21 -0
- package/README.md +223 -0
- package/dist/index.d.mts +86 -0
- package/dist/index.d.ts +86 -0
- package/dist/index.js +703 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +695 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts","../src/core/hash.ts","../src/collectors/canvas.ts","../src/collectors/webgl.ts","../src/collectors/audio.ts","../src/collectors/screen.ts","../src/collectors/system.ts","../src/collectors/index.ts","../src/storage/local-storage.ts","../src/storage/indexed-db.ts","../src/core/fingerprint-manager.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * 设备指纹模块 - 常量配置\n */\n\n/** 默认缓存过期时间:30天(毫秒) */\nexport const DEFAULT_CACHE_EXPIRY = 30 * 24 * 60 * 60 * 1000;\n\n/** 存储键名 */\nexport const STORAGE_KEY = 'DEVICE_FINGERPRINT';\n\n/** IndexedDB 数据库名 */\nexport const IDB_DATABASE_NAME = 'DeviceFingerprintDB';\n\n/** IndexedDB 存储表名 */\nexport const IDB_STORE_NAME = 'fingerprints';\n\n/** 当前版本号 */\nexport const CURRENT_VERSION = 1;\n\n/** HTTP Header 名称 */\nexport const HTTP_HEADER_NAME = 'X-Device-Fingerprint';\n\n/** 采集器名称枚举 */\nexport enum CollectorName {\n Canvas = 'canvas',\n WebGL = 'webgl',\n Audio = 'audio',\n Screen = 'screen',\n System = 'system',\n}\n","/**\n * 哈希计算工具\n * @description 使用MD5算法生成32位十六进制字符串\n */\n\n// MD5 辅助函数 - 定义在使用之前以避免 ESLint no-use-before-define 错误\nfunction add32(a: number, b: number): number {\n return (a + b) & 0xffffffff;\n}\n\nfunction cmn(q: number, a: number, b: number, x: number, s: number, t: number): number {\n const sum = add32(add32(a, q), add32(x, t));\n return add32((sum << s) | (sum >>> (32 - s)), b);\n}\n\nfunction ff(a: number, b: number, c: number, d: number, x: number, s: number, t: number): number {\n return cmn((b & c) | (~b & d), a, b, x, s, t);\n}\n\nfunction gg(a: number, b: number, c: number, d: number, x: number, s: number, t: number): number {\n return cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\n\nfunction hh(a: number, b: number, c: number, d: number, x: number, s: number, t: number): number {\n return cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction ii(a: number, b: number, c: number, d: number, x: number, s: number, t: number): number {\n return cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nfunction md5cycle(x: number[], k: number[]): void {\n let a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n\n a = ff(a, b, c, d, k[0], 7, -680876936);\n d = ff(d, a, b, c, k[1], 12, -389564586);\n c = ff(c, d, a, b, k[2], 17, 606105819);\n b = ff(b, c, d, a, k[3], 22, -1044525330);\n a = ff(a, b, c, d, k[4], 7, -176418897);\n d = ff(d, a, b, c, k[5], 12, 1200080426);\n c = ff(c, d, a, b, k[6], 17, -1473231341);\n b = ff(b, c, d, a, k[7], 22, -45705983);\n a = ff(a, b, c, d, k[8], 7, 1770035416);\n d = ff(d, a, b, c, k[9], 12, -1958414417);\n c = ff(c, d, a, b, k[10], 17, -42063);\n b = ff(b, c, d, a, k[11], 22, -1990404162);\n a = ff(a, b, c, d, k[12], 7, 1804603682);\n d = ff(d, a, b, c, k[13], 12, -40341101);\n c = ff(c, d, a, b, k[14], 17, -1502002290);\n b = ff(b, c, d, a, k[15], 22, 1236535329);\n\n a = gg(a, b, c, d, k[1], 5, -165796510);\n d = gg(d, a, b, c, k[6], 9, -1069501632);\n c = gg(c, d, a, b, k[11], 14, 643717713);\n b = gg(b, c, d, a, k[0], 20, -373897302);\n a = gg(a, b, c, d, k[5], 5, -701558691);\n d = gg(d, a, b, c, k[10], 9, 38016083);\n c = gg(c, d, a, b, k[15], 14, -660478335);\n b = gg(b, c, d, a, k[4], 20, -405537848);\n a = gg(a, b, c, d, k[9], 5, 568446438);\n d = gg(d, a, b, c, k[14], 9, -1019803690);\n c = gg(c, d, a, b, k[3], 14, -187363961);\n b = gg(b, c, d, a, k[8], 20, 1163531501);\n a = gg(a, b, c, d, k[13], 5, -1444681467);\n d = gg(d, a, b, c, k[2], 9, -51403784);\n c = gg(c, d, a, b, k[7], 14, 1735328473);\n b = gg(b, c, d, a, k[12], 20, -1926607734);\n\n a = hh(a, b, c, d, k[5], 4, -378558);\n d = hh(d, a, b, c, k[8], 11, -2022574463);\n c = hh(c, d, a, b, k[11], 16, 1839030562);\n b = hh(b, c, d, a, k[14], 23, -35309556);\n a = hh(a, b, c, d, k[1], 4, -1530992060);\n d = hh(d, a, b, c, k[4], 11, 1272893353);\n c = hh(c, d, a, b, k[7], 16, -155497632);\n b = hh(b, c, d, a, k[10], 23, -1094730640);\n a = hh(a, b, c, d, k[13], 4, 681279174);\n d = hh(d, a, b, c, k[0], 11, -358537222);\n c = hh(c, d, a, b, k[3], 16, -722521979);\n b = hh(b, c, d, a, k[6], 23, 76029189);\n a = hh(a, b, c, d, k[9], 4, -640364487);\n d = hh(d, a, b, c, k[12], 11, -421815835);\n c = hh(c, d, a, b, k[15], 16, 530742520);\n b = hh(b, c, d, a, k[2], 23, -995338651);\n\n a = ii(a, b, c, d, k[0], 6, -198630844);\n d = ii(d, a, b, c, k[7], 10, 1126891415);\n c = ii(c, d, a, b, k[14], 15, -1416354905);\n b = ii(b, c, d, a, k[5], 21, -57434055);\n a = ii(a, b, c, d, k[12], 6, 1700485571);\n d = ii(d, a, b, c, k[3], 10, -1894986606);\n c = ii(c, d, a, b, k[10], 15, -1051523);\n b = ii(b, c, d, a, k[1], 21, -2054922799);\n a = ii(a, b, c, d, k[8], 6, 1873313359);\n d = ii(d, a, b, c, k[15], 10, -30611744);\n c = ii(c, d, a, b, k[6], 15, -1560198380);\n b = ii(b, c, d, a, k[13], 21, 1309151649);\n a = ii(a, b, c, d, k[4], 6, -145523070);\n d = ii(d, a, b, c, k[11], 10, -1120210379);\n c = ii(c, d, a, b, k[2], 15, 718787259);\n b = ii(b, c, d, a, k[9], 21, -343485551);\n\n x[0] = add32(a, x[0]);\n x[1] = add32(b, x[1]);\n x[2] = add32(c, x[2]);\n x[3] = add32(d, x[3]);\n}\n\nfunction md5blk(s: string): number[] {\n const md5blks: number[] = [];\n for (let i = 0; i < 64; i += 4) {\n md5blks[i >> 2] =\n s.charCodeAt(i) +\n (s.charCodeAt(i + 1) << 8) +\n (s.charCodeAt(i + 2) << 16) +\n (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n}\n\nfunction rhex(n: number): string {\n const hexChr = '0123456789abcdef';\n let s = '';\n for (let j = 0; j < 4; j++) {\n s += hexChr.charAt((n >> (j * 8 + 4)) & 0x0f) + hexChr.charAt((n >> (j * 8)) & 0x0f);\n }\n return s;\n}\n\nfunction hex(x: number[]): string {\n return x.map(rhex).join('');\n}\n\nfunction toUTF8(str: string): string {\n return unescape(encodeURIComponent(str));\n}\n\n/**\n * 简化版MD5实现\n * 注意:这是一个轻量级实现,适用于指纹哈希场景\n * 如果项目中已有crypto库,可以直接使用\n */\nexport function md5(input: string): string {\n const s = toUTF8(input);\n const n = s.length;\n const state = [1732584193, -271733879, -1732584194, 271733878];\n let i: number;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n\n const tail = s.substring(i - 64);\n const arr = Array(16).fill(0);\n\n for (i = 0; i < tail.length; i++) {\n arr[i >> 2] |= tail.charCodeAt(i) << ((i % 4) << 3);\n }\n arr[i >> 2] |= 0x80 << ((i % 4) << 3);\n\n if (i > 55) {\n md5cycle(state, arr);\n arr.fill(0);\n }\n\n arr[14] = n * 8;\n md5cycle(state, arr);\n\n return hex(state);\n}\n\n/**\n * 生成随机UUID作为兜底方案\n */\nexport function generateUUID(): string {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID().replace(/-/g, '');\n }\n\n // 兼容性实现\n return 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'.replace(/x/g, () => {\n return Math.floor(Math.random() * 16).toString(16);\n });\n}\n","/**\n * Canvas 指纹采集器\n * @description 通过Canvas绘制特定图形,利用不同设备的渲染差异生成指纹\n */\n\nimport { CollectorResult, ICollector } from '../types';\nimport { CollectorName } from '../constants';\n\nexport class CanvasCollector implements ICollector {\n readonly name = CollectorName.Canvas;\n\n async collect(): Promise<CollectorResult> {\n try {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n return {\n name: this.name,\n value: '',\n success: false,\n error: 'Canvas context not available',\n };\n }\n\n canvas.width = 200;\n canvas.height = 50;\n\n // 绘制背景\n ctx.fillStyle = '#f60';\n ctx.fillRect(0, 0, 200, 50);\n\n // 绘制文本(不同设备字体渲染有差异)\n ctx.fillStyle = '#069';\n ctx.font = '14px Arial';\n ctx.fillText('Device Fingerprint Canvas', 2, 15);\n\n // 绘制更多文本和特殊字符\n ctx.fillStyle = 'rgba(102, 204, 0, 0.7)';\n ctx.font = '18px Times New Roman';\n ctx.fillText('!@#$%^&*()_+-=[]{}|;:', 4, 35);\n\n // 添加圆弧和渐变(增加差异化)\n ctx.beginPath();\n ctx.arc(150, 25, 20, 0, Math.PI * 2, true);\n ctx.closePath();\n ctx.fillStyle = '#ff0';\n ctx.fill();\n\n // 添加阴影效果\n ctx.shadowBlur = 10;\n ctx.shadowColor = 'blue';\n ctx.fillRect(160, 10, 30, 30);\n\n const dataUrl = canvas.toDataURL('image/png');\n\n return {\n name: this.name,\n value: dataUrl,\n success: true,\n };\n } catch (error) {\n return {\n name: this.name,\n value: '',\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n };\n }\n }\n}\n","/**\n * WebGL 指纹采集器\n * @description 通过WebGL获取GPU渲染器信息,不同显卡有不同的标识\n */\n\nimport { CollectorResult, ICollector } from '../types';\nimport { CollectorName } from '../constants';\n\nexport class WebGLCollector implements ICollector {\n readonly name = CollectorName.WebGL;\n\n async collect(): Promise<CollectorResult> {\n try {\n const canvas = document.createElement('canvas');\n const gl =\n canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n\n if (!gl) {\n return {\n name: this.name,\n value: '',\n success: false,\n error: 'WebGL not available',\n };\n }\n\n const webglContext = gl as WebGLRenderingContext;\n const debugInfo = webglContext.getExtension('WEBGL_debug_renderer_info');\n\n const components: string[] = [];\n\n // 获取GPU渲染器信息\n if (debugInfo) {\n const vendor = webglContext.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);\n const renderer = webglContext.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);\n components.push(`vendor:${vendor}`);\n components.push(`renderer:${renderer}`);\n }\n\n // 获取WebGL基础参数\n components.push(`version:${webglContext.getParameter(webglContext.VERSION)}`);\n components.push(`shadingLanguageVersion:${webglContext.getParameter(webglContext.SHADING_LANGUAGE_VERSION)}`);\n\n // 获取最大纹理尺寸(不同GPU有差异)\n components.push(`maxTextureSize:${webglContext.getParameter(webglContext.MAX_TEXTURE_SIZE)}`);\n components.push(`maxRenderbufferSize:${webglContext.getParameter(webglContext.MAX_RENDERBUFFER_SIZE)}`);\n components.push(`maxViewportDims:${webglContext.getParameter(webglContext.MAX_VIEWPORT_DIMS)}`);\n components.push(`maxVertexAttribs:${webglContext.getParameter(webglContext.MAX_VERTEX_ATTRIBS)}`);\n components.push(`maxVertexUniformVectors:${webglContext.getParameter(webglContext.MAX_VERTEX_UNIFORM_VECTORS)}`);\n components.push(`maxFragmentUniformVectors:${webglContext.getParameter(webglContext.MAX_FRAGMENT_UNIFORM_VECTORS)}`);\n\n // 获取支持的扩展列表\n const extensions = webglContext.getSupportedExtensions() || [];\n components.push(`extensions:${extensions.sort().join(',')}`);\n\n return {\n name: this.name,\n value: components.join('|'),\n success: true,\n };\n } catch (error) {\n return {\n name: this.name,\n value: '',\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n };\n }\n }\n}\n","/**\n * Audio 指纹采集器\n * @description 通过 OfflineAudioContext 生成音频信号,不同设备的音频处理有细微差异\n * @note 使用 OfflineAudioContext 替代已废弃的 ScriptProcessorNode,更加现代化且性能更好\n */\n\nimport { CollectorResult, ICollector } from '../types';\nimport { CollectorName } from '../constants';\n\nexport class AudioCollector implements ICollector {\n readonly name = CollectorName.Audio;\n\n async collect(): Promise<CollectorResult> {\n try {\n // 检查 OfflineAudioContext 支持\n const OfflineAudioContextClass =\n window.OfflineAudioContext || (window as any).webkitOfflineAudioContext;\n\n if (!OfflineAudioContextClass) {\n return {\n name: this.name,\n value: '',\n success: false,\n error: 'OfflineAudioContext not available',\n };\n }\n\n // 创建离线音频上下文\n // 参数: 声道数, 采样帧数, 采样率\n const sampleRate = 44100;\n const duration = 0.5; // 500ms\n const length = sampleRate * duration;\n const context = new OfflineAudioContextClass(1, length, sampleRate);\n\n // 创建振荡器\n const oscillator = context.createOscillator();\n oscillator.type = 'triangle';\n oscillator.frequency.setValueAtTime(10000, context.currentTime);\n\n // 创建压缩器(增加设备差异性)\n const compressor = context.createDynamicsCompressor();\n compressor.threshold.setValueAtTime(-50, context.currentTime);\n compressor.knee.setValueAtTime(40, context.currentTime);\n compressor.ratio.setValueAtTime(12, context.currentTime);\n compressor.attack.setValueAtTime(0, context.currentTime);\n compressor.release.setValueAtTime(0.25, context.currentTime);\n\n // 连接节点: 振荡器 -> 压缩器 -> 目标\n oscillator.connect(compressor);\n compressor.connect(context.destination);\n\n // 启动振荡器\n oscillator.start(0);\n\n // 渲染音频并获取结果\n const renderedBuffer = await context.startRendering();\n const channelData = renderedBuffer.getChannelData(0);\n\n // 从音频数据中提取指纹特征\n // 采样策略:从多个位置采样以增加稳定性\n const fingerprints: number[] = [];\n const samplePoints = [\n 4500, 5000, 5500, 6000, 6500, 7000, 7500, 8000, 8500, 9000,\n 9500, 10000, 10500, 11000, 11500, 12000, 12500, 13000, 13500, 14000,\n ];\n\n for (const point of samplePoints) {\n if (point < channelData.length) {\n fingerprints.push(channelData[point]);\n }\n }\n\n // 计算音频特征的统计值(增加稳定性)\n const sum = fingerprints.reduce((a, b) => a + b, 0);\n const avg = sum / fingerprints.length;\n const variance = fingerprints.reduce((acc, val) => acc + Math.pow(val - avg, 2), 0) / fingerprints.length;\n\n // 组合指纹值:采样点 + 统计特征\n const value = [\n ...fingerprints.map((v) => v.toFixed(8)),\n `avg:${avg.toFixed(8)}`,\n `var:${variance.toFixed(8)}`,\n ].join(',');\n\n return {\n name: this.name,\n value,\n success: true,\n };\n } catch (error) {\n return {\n name: this.name,\n value: '',\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n };\n }\n }\n}\n","/**\n * 屏幕信息采集器\n * @description 采集屏幕分辨率、色深、像素比等信息\n */\n\nimport { CollectorResult, ICollector } from '../types';\nimport { CollectorName } from '../constants';\n\nexport class ScreenCollector implements ICollector {\n readonly name = CollectorName.Screen;\n\n async collect(): Promise<CollectorResult> {\n try {\n const components: string[] = [];\n\n // 屏幕分辨率\n components.push(`width:${screen.width}`);\n components.push(`height:${screen.height}`);\n\n // 可用区域\n components.push(`availWidth:${screen.availWidth}`);\n components.push(`availHeight:${screen.availHeight}`);\n\n // 色深\n components.push(`colorDepth:${screen.colorDepth}`);\n components.push(`pixelDepth:${screen.pixelDepth}`);\n\n // 设备像素比\n components.push(`devicePixelRatio:${window.devicePixelRatio || 1}`);\n\n // 屏幕方向\n if (screen.orientation) {\n components.push(`orientation:${screen.orientation.type}`);\n }\n\n // 触摸支持\n const maxTouchPoints = navigator.maxTouchPoints || 0;\n components.push(`maxTouchPoints:${maxTouchPoints}`);\n components.push(`touchSupport:${maxTouchPoints > 0}`);\n\n return {\n name: this.name,\n value: components.join('|'),\n success: true,\n };\n } catch (error) {\n return {\n name: this.name,\n value: '',\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n };\n }\n }\n}\n","/**\n * 系统信息采集器\n * @description 采集时区、语言、硬件并发数、内存等系统级信息\n */\n\nimport { CollectorResult, ICollector } from '../types';\nimport { CollectorName } from '../constants';\n\nexport class SystemCollector implements ICollector {\n readonly name = CollectorName.System;\n\n async collect(): Promise<CollectorResult> {\n try {\n const components: string[] = [];\n\n // 时区\n components.push(`timezone:${Intl.DateTimeFormat().resolvedOptions().timeZone}`);\n components.push(`timezoneOffset:${new Date().getTimezoneOffset()}`);\n\n // 语言设置\n components.push(`language:${navigator.language}`);\n components.push(`languages:${(navigator.languages || []).join(',')}`);\n\n // 硬件并发数(CPU核心数)\n components.push(`hardwareConcurrency:${navigator.hardwareConcurrency || 'unknown'}`);\n\n // 设备内存(仅Chrome支持)\n const deviceMemory = (navigator as any).deviceMemory;\n if (deviceMemory) {\n components.push(`deviceMemory:${deviceMemory}`);\n }\n\n // 平台信息\n components.push(`platform:${navigator.platform}`);\n\n // 是否启用Cookie\n components.push(`cookieEnabled:${navigator.cookieEnabled}`);\n\n // 是否启用Java\n components.push(`javaEnabled:${typeof navigator.javaEnabled === 'function' ? navigator.javaEnabled() : false}`);\n\n // Do Not Track 设置\n const doNotTrack = navigator.doNotTrack || (window as any).doNotTrack;\n components.push(`doNotTrack:${doNotTrack || 'unknown'}`);\n\n // PDF查看器支持\n components.push(`pdfViewerEnabled:${(navigator as any).pdfViewerEnabled ?? 'unknown'}`);\n\n // WebDriver检测(防止自动化工具)\n components.push(`webdriver:${navigator.webdriver || false}`);\n\n return {\n name: this.name,\n value: components.join('|'),\n success: true,\n };\n } catch (error) {\n return {\n name: this.name,\n value: '',\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n };\n }\n }\n}\n","/**\n * 采集器统一导出\n */\n\nexport { CanvasCollector } from './canvas';\nexport { WebGLCollector } from './webgl';\nexport { AudioCollector } from './audio';\nexport { ScreenCollector } from './screen';\nexport { SystemCollector } from './system';\n\nimport { ICollector } from '../types';\nimport { CanvasCollector } from './canvas';\nimport { WebGLCollector } from './webgl';\nimport { AudioCollector } from './audio';\nimport { ScreenCollector } from './screen';\nimport { SystemCollector } from './system';\n\n/**\n * 创建所有采集器实例\n */\nexport function createCollectors(): ICollector[] {\n return [\n new CanvasCollector(),\n new WebGLCollector(),\n new AudioCollector(),\n new ScreenCollector(),\n new SystemCollector(),\n ];\n}\n","/**\n * localStorage 存储实现\n */\n\nimport { CachedFingerprint, IStorage } from '../types';\nimport { STORAGE_KEY } from '../constants';\n\nexport class LocalStorageAdapter implements IStorage {\n private readonly key: string;\n\n constructor(prefix?: string) {\n this.key = prefix ? `${prefix}_${STORAGE_KEY}` : STORAGE_KEY;\n }\n\n async get(): Promise<CachedFingerprint | null> {\n try {\n const data = localStorage.getItem(this.key);\n if (!data) {\n return null;\n }\n return JSON.parse(data) as CachedFingerprint;\n } catch {\n return null;\n }\n }\n\n async set(data: CachedFingerprint): Promise<void> {\n try {\n localStorage.setItem(this.key, JSON.stringify(data));\n } catch (error) {\n console.warn('[Fingerprint] Failed to save to localStorage:', error);\n }\n }\n\n async clear(): Promise<void> {\n try {\n localStorage.removeItem(this.key);\n } catch {\n // 忽略清除错误\n }\n }\n}\n","/**\n * IndexedDB 存储实现\n * @description 相比localStorage更难被用户清除,提供更好的持久性\n */\n\nimport { CachedFingerprint, IStorage } from '../types';\nimport { IDB_DATABASE_NAME, IDB_STORE_NAME, STORAGE_KEY } from '../constants';\n\nexport class IndexedDBAdapter implements IStorage {\n private readonly dbName: string;\n private readonly storeName: string;\n private readonly key: string;\n private db: IDBDatabase | null = null;\n\n constructor(prefix?: string) {\n this.dbName = prefix ? `${prefix}_${IDB_DATABASE_NAME}` : IDB_DATABASE_NAME;\n this.storeName = IDB_STORE_NAME;\n this.key = STORAGE_KEY;\n }\n\n private async openDB(): Promise<IDBDatabase> {\n if (this.db) {\n return this.db;\n }\n\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(this.dbName, 1);\n\n request.onerror = () => {\n reject(new Error('Failed to open IndexedDB'));\n };\n\n request.onsuccess = () => {\n this.db = request.result;\n resolve(request.result);\n };\n\n request.onupgradeneeded = (event) => {\n const db = (event.target as IDBOpenDBRequest).result;\n if (!db.objectStoreNames.contains(this.storeName)) {\n db.createObjectStore(this.storeName, { keyPath: 'id' });\n }\n };\n });\n }\n\n async get(): Promise<CachedFingerprint | null> {\n try {\n const db = await this.openDB();\n return new Promise((resolve) => {\n const transaction = db.transaction(this.storeName, 'readonly');\n const store = transaction.objectStore(this.storeName);\n const request = store.get(this.key);\n\n request.onerror = () => {\n resolve(null);\n };\n\n request.onsuccess = () => {\n const result = request.result;\n if (result && result.data) {\n resolve(result.data as CachedFingerprint);\n } else {\n resolve(null);\n }\n };\n });\n } catch {\n return null;\n }\n }\n\n async set(data: CachedFingerprint): Promise<void> {\n try {\n const db = await this.openDB();\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(this.storeName, 'readwrite');\n const store = transaction.objectStore(this.storeName);\n const request = store.put({ id: this.key, data });\n\n request.onerror = () => {\n reject(new Error('Failed to save to IndexedDB'));\n };\n\n request.onsuccess = () => {\n resolve();\n };\n });\n } catch (error) {\n console.warn('[Fingerprint] Failed to save to IndexedDB:', error);\n }\n }\n\n async clear(): Promise<void> {\n try {\n const db = await this.openDB();\n return new Promise((resolve) => {\n const transaction = db.transaction(this.storeName, 'readwrite');\n const store = transaction.objectStore(this.storeName);\n store.delete(this.key);\n resolve();\n });\n } catch {\n // 忽略清除错误\n }\n }\n}\n","/**\n * 指纹管理器 - 核心调度\n * @description 协调采集器、存储、缓存的核心类\n */\n\nimport {\n FingerprintResult,\n CachedFingerprint,\n FingerprintConfig,\n ICollector,\n IStorage\n} from '../types';\nimport { DEFAULT_CACHE_EXPIRY, CURRENT_VERSION } from '../constants';\nimport { md5, generateUUID } from './hash';\nimport { createCollectors } from '../collectors';\nimport { LocalStorageAdapter } from '../storage/local-storage';\nimport { IndexedDBAdapter } from '../storage/indexed-db';\n\nexport class FingerprintManager {\n private config: Required<FingerprintConfig>;\n private collectors: ICollector[];\n private localStorage: IStorage;\n private indexedDB: IStorage | null;\n private cachedResult: FingerprintResult | null = null;\n\n constructor(config: FingerprintConfig = {}) {\n this.config = {\n cacheExpiry: config.cacheExpiry ?? DEFAULT_CACHE_EXPIRY,\n enableIndexedDB: config.enableIndexedDB ?? true,\n storageKeyPrefix: config.storageKeyPrefix ?? 'df',\n version: config.version ?? CURRENT_VERSION,\n };\n\n this.collectors = createCollectors();\n this.localStorage = new LocalStorageAdapter(this.config.storageKeyPrefix);\n this.indexedDB = this.config.enableIndexedDB\n ? new IndexedDBAdapter(this.config.storageKeyPrefix)\n : null;\n }\n\n /**\n * 获取设备指纹\n * @returns 指纹结果\n */\n async getFingerprint(): Promise<FingerprintResult> {\n // 1. 检查内存缓存\n if (this.cachedResult && !this.isExpired(this.cachedResult.expiresAt)) {\n return this.cachedResult;\n }\n\n // 2. 检查localStorage缓存\n const localCache = await this.localStorage.get();\n if (localCache && !this.isExpired(localCache.expiresAt)) {\n this.cachedResult = this.toResult(localCache);\n return this.cachedResult;\n }\n\n // 3. 检查IndexedDB缓存\n if (this.indexedDB) {\n const idbCache = await this.indexedDB.get();\n if (idbCache && !this.isExpired(idbCache.expiresAt)) {\n // 同步到localStorage\n await this.localStorage.set(idbCache);\n this.cachedResult = this.toResult(idbCache);\n return this.cachedResult;\n }\n }\n\n // 4. 重新采集指纹\n return this.collectAndCache();\n }\n\n /**\n * 强制重新采集指纹\n */\n async refresh(): Promise<FingerprintResult> {\n return this.collectAndCache();\n }\n\n /**\n * 清除缓存\n */\n async clear(): Promise<void> {\n this.cachedResult = null;\n await this.localStorage.clear();\n if (this.indexedDB) {\n await this.indexedDB.clear();\n }\n }\n\n /**\n * 采集并缓存指纹\n */\n private async collectAndCache(): Promise<FingerprintResult> {\n const { fingerprint, isFallback } = await this.collect();\n const now = Date.now();\n const cached: CachedFingerprint = {\n fingerprint,\n isFallback,\n createdAt: now,\n expiresAt: now + this.config.cacheExpiry,\n version: this.config.version,\n };\n\n // 双重存储\n await this.localStorage.set(cached);\n if (this.indexedDB) {\n await this.indexedDB.set(cached);\n }\n\n this.cachedResult = this.toResult(cached);\n return this.cachedResult;\n }\n\n /**\n * 执行采集\n */\n private async collect(): Promise<{ fingerprint: string; isFallback: boolean }> {\n try {\n // 并行执行所有采集器\n const results = await Promise.all(\n this.collectors.map((collector) => collector.collect())\n );\n\n // 过滤成功的结果\n const successResults = results.filter((r) => r.success && r.value);\n\n if (successResults.length === 0) {\n // 全部失败,使用兜底UUID\n return {\n fingerprint: generateUUID(),\n isFallback: true,\n };\n }\n\n // 拼接所有采集值并计算哈希\n const rawData = successResults\n .map((r) => `${r.name}:${r.value}`)\n .sort()\n .join('|');\n\n return {\n fingerprint: md5(rawData),\n isFallback: false,\n };\n } catch (error) {\n console.warn('[Fingerprint] Collection failed, using fallback UUID:', error);\n return {\n fingerprint: generateUUID(),\n isFallback: true,\n };\n }\n }\n\n /**\n * 检查是否过期\n */\n private isExpired(expiresAt: number): boolean {\n return Date.now() > expiresAt;\n }\n\n /**\n * 转换为结果对象\n */\n private toResult(cached: CachedFingerprint): FingerprintResult {\n return {\n fingerprint: cached.fingerprint,\n isFallback: cached.isFallback,\n timestamp: cached.createdAt,\n expiresAt: cached.expiresAt,\n };\n }\n}\n","/**\n * 设备指纹模块 - 主入口\n *\n * @description\n * 独立、高内聚的设备指纹模块,便于复用到其他系统。\n *\n * @example\n * ```typescript\n * import { getDeviceFingerprint, initFingerprint } from 'src/utils/fingerprint';\n *\n * // 方式1: 使用默认配置\n * const fp = await getDeviceFingerprint();\n * console.log(fp.fingerprint); // 32位MD5哈希\n *\n * // 方式2: 自定义配置\n * initFingerprint({\n * cacheExpiry: 7 * 24 * 60 * 60 * 1000, // 7天\n * storageKeyPrefix: 'myapp',\n * });\n * const fp2 = await getDeviceFingerprint();\n * ```\n *\n * @author IDaaS Team\n * @version 1.0.0\n */\n\nimport { FingerprintManager } from './core/fingerprint-manager';\nimport { FingerprintResult, FingerprintConfig } from './types';\nimport { HTTP_HEADER_NAME } from './constants';\n\n// 单例实例\nlet manager: FingerprintManager | null = null;\n\n/**\n * 初始化指纹模块(可选)\n * @param config 配置选项\n */\nexport function initFingerprint(config?: FingerprintConfig): void {\n manager = new FingerprintManager(config);\n}\n\n/**\n * 获取指纹管理器实例\n */\nfunction getManager(): FingerprintManager {\n if (!manager) {\n manager = new FingerprintManager();\n }\n return manager;\n}\n\n/**\n * 获取设备指纹\n * @returns 指纹结果\n */\nexport async function getDeviceFingerprint(): Promise<FingerprintResult> {\n return getManager().getFingerprint();\n}\n\n/**\n * 获取指纹值(简化版,仅返回哈希字符串)\n * @returns 32位MD5哈希字符串\n */\nexport async function getFingerprint(): Promise<string> {\n const result = await getManager().getFingerprint();\n return result.fingerprint;\n}\n\n/**\n * 强制刷新指纹\n * @returns 新的指纹结果\n */\nexport async function refreshFingerprint(): Promise<FingerprintResult> {\n return getManager().refresh();\n}\n\n/**\n * 清除指纹缓存\n */\nexport async function clearFingerprint(): Promise<void> {\n return getManager().clear();\n}\n\n/**\n * 获取HTTP Header名称\n */\nexport function getHeaderName(): string {\n return HTTP_HEADER_NAME;\n}\n\n// 导出类型和常量(便于外部使用)\nexport type { FingerprintResult, FingerprintConfig } from './types';\nexport { HTTP_HEADER_NAME } from './constants';\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@gangdai/fingerprint",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A lightweight, zero-dependency browser fingerprint collection library with TypeScript support",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"fingerprint",
|
|
7
|
+
"device-fingerprint",
|
|
8
|
+
"browser-fingerprint",
|
|
9
|
+
"device-identification",
|
|
10
|
+
"canvas-fingerprint",
|
|
11
|
+
"webgl-fingerprint",
|
|
12
|
+
"audio-fingerprint",
|
|
13
|
+
"browser-detection",
|
|
14
|
+
"typescript"
|
|
15
|
+
],
|
|
16
|
+
"author": "Gang Dai <gang.dai@qq.com>",
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"main": "./dist/index.js",
|
|
19
|
+
"module": "./dist/index.mjs",
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
21
|
+
"exports": {
|
|
22
|
+
".": {
|
|
23
|
+
"types": "./dist/index.d.ts",
|
|
24
|
+
"import": "./dist/index.mjs",
|
|
25
|
+
"require": "./dist/index.js"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"dist",
|
|
30
|
+
"README.md",
|
|
31
|
+
"LICENSE"
|
|
32
|
+
],
|
|
33
|
+
"scripts": {
|
|
34
|
+
"build": "tsup",
|
|
35
|
+
"dev": "tsup --watch",
|
|
36
|
+
"type-check": "tsc --noEmit",
|
|
37
|
+
"lint": "eslint src --ext .ts",
|
|
38
|
+
"prepublishOnly": "pnpm run build"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@types/node": "^20.11.0",
|
|
42
|
+
"@typescript-eslint/eslint-plugin": "^6.19.0",
|
|
43
|
+
"@typescript-eslint/parser": "^6.19.0",
|
|
44
|
+
"eslint": "^8.56.0",
|
|
45
|
+
"tsup": "^8.0.1",
|
|
46
|
+
"typescript": "^5.3.3"
|
|
47
|
+
},
|
|
48
|
+
"engines": {
|
|
49
|
+
"node": ">=16.0.0"
|
|
50
|
+
},
|
|
51
|
+
"repository": {
|
|
52
|
+
"type": "git",
|
|
53
|
+
"url": "https://github.com/daigang666/fingerprint.git"
|
|
54
|
+
},
|
|
55
|
+
"homepage": "https://github.com/daigang666/fingerprint#readme",
|
|
56
|
+
"bugs": {
|
|
57
|
+
"url": "https://github.com/daigang666/fingerprint/issues"
|
|
58
|
+
},
|
|
59
|
+
"publishConfig": {
|
|
60
|
+
"access": "public"
|
|
61
|
+
}
|
|
62
|
+
}
|