{"_id":"device-uuid","_rev":"14-2a60936ec262388b295b37e47ff6169b","name":"device-uuid","dist-tags":{"oidc-test":"3.0.2-oidc-test.0","latest":"3.0.5"},"versions":{"1.0.1":{"name":"device-uuid","version":"1.0.1","keywords":["useragent","browser","device","uuid"],"author":{"url":"https://github.com/biggora","name":"Alexey Gordeyev","email":"aleksej@gordejev.lv"},"_id":"device-uuid@1.0.1","maintainers":[{"name":"biggora","email":"aleksej@gordejev.lv"}],"contributors":[],"homepage":"https://github.com/biggora/device-uuid/","bugs":{"url":"https://github.com/biggora/device-uuid/issues"},"dist":{"shasum":"350c6bf1474fe35243857d5f9fc1341162b9b072","tarball":"https://registry.npmjs.org/device-uuid/-/device-uuid-1.0.1.tgz","integrity":"sha512-rfLwrQQJJI6fe5K9dXymLGI03LXjpEnvvGiWKIes7aFLbxQ/P0gxRoW6fT9iBFmm+JyTAi8w+95YTgtOP8Gdww==","signatures":[{"sig":"MEUCIQC+LW5l6GkyWP2+HSrjhd1WYG6SWsr4p18CuUE916VQTwIgXNg4bsFT0UqFFSUB/TWOdCDLfubYzsUiV5HmXr1PvW4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/device-uuid.js","_from":".","_shasum":"350c6bf1474fe35243857d5f9fc1341162b9b072","engines":{"node":">=0.8"},"gitHead":"7dc37ce54b51594f0081c092b043ed517990ea36","scripts":{"http":"node test/http.js","lint":"make lint","test":"nodeunit  test/browsers.js test/bots_test.js","build":"grunt build","express":"node test/express.js"},"_npmUser":{"name":"biggora","email":"aleksej@gordejev.lv"},"licenses":[{"url":"https://github.com/biggora/device-uuid/blob/master/LICENSE","type":"MIT"}],"repository":{"url":"git://github.com/biggora/device-uuid.git","type":"git"},"_npmVersion":"3.8.2","description":"Fast browser device uuid generation library.","directories":{"lib":"lib","test":"test"},"_nodeVersion":"4.5.0","dependencies":{},"devDependencies":{"gulp":"^3.9.1","jshint":"^2.9.3","express":">= 3.0.0","nodeunit":"*","gulp-concat":"^2.6.0","gulp-filter":"^4.0.0","gulp-jshint":"^2.0.1","gulp-rename":"^1.2.2","gulp-rimraf":"^0.2.0","gulp-uglify":"^2.0.0","gulp-filesize":"0.0.6","gulp-sourcemaps":"^2.1.1"},"_npmOperationalInternal":{"tmp":"tmp/device-uuid-1.0.1.tgz_1483824153912_0.1047227333765477","host":"packages-12-west.internal.npmjs.com"}},"1.0.2":{"name":"device-uuid","version":"1.0.2","keywords":["useragent","browser","device","uuid"],"author":{"url":"https://github.com/biggora","name":"Alexey Gordeyev","email":"aleksej@gordejev.lv"},"_id":"device-uuid@1.0.2","maintainers":[{"name":"biggora","email":"aleksej@gordejev.lv"}],"contributors":[{"url":"https://github.com/uzer-ua","name":"Vitalii Onyshchenko"}],"homepage":"https://github.com/biggora/device-uuid/","bugs":{"url":"https://github.com/biggora/device-uuid/issues"},"dist":{"shasum":"1903edfbc3dd2400506d39914465e7c9f0a37ca0","tarball":"https://registry.npmjs.org/device-uuid/-/device-uuid-1.0.2.tgz","integrity":"sha512-fO4ohMaIUO5OWf9dYB7Bd4BMNIe0MdbTe0QcjLh9GwgjnJlvXfPt/Xex7S9USFeRdoWcNnxuV5qlCOFz1YO7kQ==","signatures":[{"sig":"MEUCIQDdLXHqOTjaRD3qprM4MxcLplLgQpZLMASoUeNDoX1LqwIgb6iH9qJTU9CbbsqtMZk8puaBL9VpKSCytWvFsWwx7Z4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./index.js","_from":".","_shasum":"1903edfbc3dd2400506d39914465e7c9f0a37ca0","engines":{"node":">=0.8"},"gitHead":"e74b5007343b5625ef452ae6256180fc4f881e0e","scripts":{"http":"node test/http.js","lint":"make lint","test":"nodeunit  test/browsers.js test/bots_test.js","build":"grunt build","express":"node test/express.js"},"_npmUser":{"name":"biggora","email":"aleksej@gordejev.lv"},"licenses":[{"url":"https://github.com/biggora/device-uuid/blob/master/LICENSE","type":"MIT"}],"repository":{"url":"git://github.com/biggora/device-uuid.git","type":"git"},"_npmVersion":"3.8.2","description":"Fast browser device uuid generation library.","directories":{"lib":"lib","test":"test"},"_nodeVersion":"4.5.0","dependencies":{},"devDependencies":{"gulp":"^3.9.1","jshint":"^2.9.3","express":">= 3.0.0","nodeunit":"*","gulp-concat":"^2.6.0","gulp-filter":"^4.0.0","gulp-jshint":"^2.0.1","gulp-rename":"^1.2.2","gulp-rimraf":"^0.2.0","gulp-uglify":"^2.0.0","gulp-filesize":"0.0.6","gulp-sourcemaps":"^2.1.1"},"_npmOperationalInternal":{"tmp":"tmp/device-uuid-1.0.2.tgz_1483824615329_0.2057775694411248","host":"packages-12-west.internal.npmjs.com"}},"1.0.4":{"name":"device-uuid","version":"1.0.4","keywords":["useragent","browser","device","uuid"],"author":{"url":"https://github.com/biggora","name":"Alexey Gordeyev","email":"aleksej@gordejev.lv"},"_id":"device-uuid@1.0.4","maintainers":[{"name":"biggora","email":"aleksej@gordejev.lv"}],"contributors":[{"url":"https://github.com/uzer-ua","name":"Vitalii Onyshchenko"}],"homepage":"https://github.com/biggora/device-uuid/","bugs":{"url":"https://github.com/biggora/device-uuid/issues"},"dist":{"shasum":"f6973e58f19b92a237aeca7b16a395ae7195a883","tarball":"https://registry.npmjs.org/device-uuid/-/device-uuid-1.0.4.tgz","integrity":"sha512-nNbUKlCuXZ1BV4zKFr9z8VxypL1PCNExRoNtRx/mNKFcOEDWUdT3E1B4vw7LBWftBmixkrjQIjpdLov3EmEJjA==","signatures":[{"sig":"MEQCICLHPJRVjib8Buw1DpnfIfwHutqCXwRbcpGBd8fi+ldYAiBRXXIuRDiOvOQ8rAJ/c7H/+OnWTuxh0U5ox4f14pXW/w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./index.js","_from":".","_shasum":"f6973e58f19b92a237aeca7b16a395ae7195a883","engines":{"node":">=0.8"},"gitHead":"bdff10d94b31d7bdd95a8793dc47f147ea5edaed","scripts":{"http":"node test/http.js","lint":"make lint","test":"nodeunit  test/browsers.js test/bots_test.js","build":"grunt build","express":"node test/express.js"},"_npmUser":{"name":"biggora","email":"aleksej@gordejev.lv"},"licenses":[{"url":"https://github.com/biggora/device-uuid/blob/master/LICENSE","type":"MIT"}],"repository":{"url":"git://github.com/biggora/device-uuid.git","type":"git"},"_npmVersion":"2.15.11","description":"Fast browser device uuid generation library.","directories":{"lib":"lib","test":"test"},"_nodeVersion":"4.8.3","dependencies":{},"devDependencies":{"gulp":"^3.9.1","jshint":"^2.9.3","express":">= 3.0.0","nodeunit":"*","gulp-concat":"^2.6.0","gulp-filter":"^4.0.0","gulp-jshint":"^2.0.1","gulp-rename":"^1.2.2","gulp-rimraf":"^0.2.0","gulp-uglify":"^2.0.0","gulp-filesize":"0.0.6","gulp-sourcemaps":"^2.1.1"},"_npmOperationalInternal":{"tmp":"tmp/device-uuid-1.0.4.tgz_1502265262649_0.6662662646267563","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"device-uuid","version":"2.0.0","keywords":["useragent","browser","device","uuid","fingerprint","typescript"],"author":{"url":"https://github.com/biggora","name":"Alexey Gordeyev","email":"aleksej@gordejev.lv"},"license":"MIT","_id":"device-uuid@2.0.0","maintainers":[{"name":"biggora","email":"aleksej@gordejev.lv"}],"contributors":[{"url":"https://github.com/uzer-ua","name":"Vitalii Onyshchenko"}],"homepage":"https://github.com/biggora/device-uuid/","bugs":{"url":"https://github.com/biggora/device-uuid/issues"},"dist":{"shasum":"ad0f813a7bccbbe0e09acb9e91972f2a03b11a77","tarball":"https://registry.npmjs.org/device-uuid/-/device-uuid-2.0.0.tgz","fileCount":13,"integrity":"sha512-K2hdafFsor2jUwaXsVpg+SehJDTYrzaeP2AfAiOxzQ3TAeHKDmyYdJftHSEsKp2bF+ESUpiUcarhQqyRswxbZg==","signatures":[{"sig":"MEYCIQDVb7BYkydCe6YiO01Rlt5gGgN1vXQPeosq+hvnyV8h/QIhAKd1Dai4Ez4PyPrq86UHjhFqYLCtPNNsZ0ApWh3/F0PU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":454085},"main":"./dist/index.cjs","type":"module","types":"./dist/types/index.d.ts","module":"./dist/index.js","browser":"./dist/index.browser.min.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","browser":"./dist/index.browser.min.js","require":"./dist/index.cjs"}},"gitHead":"f0748d7299c26a894246ef5ad1f149c146581279","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","clean":"rimraf dist","format":"prettier --write \"**/*.(ts|tsx|json|md)\"","lint:fix":"eslint src --ext .ts --fix","typecheck":"tsc --noEmit","test:watch":"vitest","build:watch":"tsup --watch","test:vitest":"vitest run","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"biggora","email":"aleksej@gordejev.lv"},"repository":{"url":"git://github.com/biggora/device-uuid.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast browser device uuid generation library.","directories":{},"_nodeVersion":"20.19.4","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","eslint":"^9.38.0","rimraf":"^6.0.1","vitest":"^4.0.5","prettier":"^3.6.2","happy-dom":"^20.0.10","typescript":"^5.9.3","@types/node":"^24.9.2","typescript-eslint":"^8.46.2","@vitest/coverage-v8":"^4.0.5","@typescript-eslint/parser":"^8.46.2","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/device-uuid_2.0.0_1761894030270_0.5600599579014951","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"device-uuid","version":"3.0.0","keywords":["useragent","browser","device","uuid","fingerprint","typescript"],"author":{"url":"https://github.com/biggora","name":"Alexey Gordeyev","email":"aleksej@gordejev.lv"},"license":"MIT","_id":"device-uuid@3.0.0","maintainers":[{"name":"biggora","email":"aleksej@gordejev.lv"}],"contributors":[{"url":"https://github.com/uzer-ua","name":"Vitalii Onyshchenko"}],"homepage":"https://github.com/biggora/device-uuid/","bugs":{"url":"https://github.com/biggora/device-uuid/issues"},"dist":{"shasum":"84570c3b20dbbb88fc7f673354eb5db7a9afafb7","tarball":"https://registry.npmjs.org/device-uuid/-/device-uuid-3.0.0.tgz","fileCount":13,"integrity":"sha512-qW2WxAvEe1DA1FFCYFgevAQ9IYO+OfUGXslL6/imCtj0Epf82jHtT+ZyZoNEmoMN7CXA5FTHIehW+RRaAF8RtA==","signatures":[{"sig":"MEUCIQDrTMHv0ZEvEmcOYccjvHVjwW+kX3BvIBta8rj508VFXQIgXjOH4NNbNwNOG9TFKp958/yOdrr4rXVc4QD+dpAY9H8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":992998},"main":"./dist/index.cjs","type":"module","types":"./dist/types/index.d.ts","module":"./dist/index.js","browser":"./dist/index.browser.min.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","browser":"./dist/index.browser.min.js","require":"./dist/index.cjs"}},"gitHead":"d2c49b0ed4684bc221322edb08c882b3d4d8189e","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","clean":"rimraf dist","format":"prettier --write \"**/*.{ts,tsx,js,jsx,mjs,json,md,yml}\"","lint:fix":"eslint src --ext .ts --fix","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"playwright test --reporter null","test:unit":"vitest run","typecheck":"tsc --noEmit","test:watch":"vitest","build:watch":"tsup --watch","test:e2e:ui":"playwright test --ui","test:vitest":"vitest run","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run clean && npm run build","test:e2e:debug":"playwright test --debug"},"_npmUser":{"name":"biggora","email":"aleksej@gordejev.lv"},"repository":{"url":"git://github.com/biggora/device-uuid.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast browser device uuid generation library.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"install":"^0.13.0","playwright":"^1.58.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","eslint":"^9.38.0","rimraf":"^6.0.1","vitest":"^4.0.5","prettier":"^3.6.2","happy-dom":"^20.0.10","typescript":"^5.9.3","@types/node":"^24.9.2","http-server":"^14.1.1","@playwright/test":"^1.58.0","typescript-eslint":"^8.46.2","@vitest/coverage-v8":"^4.0.5","@typescript-eslint/parser":"^8.46.2","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/device-uuid_3.0.0_1769363711843_0.44415106426437334","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"device-uuid","version":"3.0.1","keywords":["useragent","browser","device","uuid","fingerprint","typescript"],"author":{"url":"https://github.com/biggora","name":"Alexey Gordeyev","email":"aleksej@gordejev.lv"},"license":"MIT","_id":"device-uuid@3.0.1","maintainers":[{"name":"biggora","email":"aleksej@gordejev.lv"}],"contributors":[{"url":"https://github.com/uzer-ua","name":"Vitalii Onyshchenko"}],"homepage":"https://github.com/biggora/device-uuid/","bugs":{"url":"https://github.com/biggora/device-uuid/issues"},"dist":{"shasum":"c750c357773dc3b88b45590d99015a5afc44aaa3","tarball":"https://registry.npmjs.org/device-uuid/-/device-uuid-3.0.1.tgz","fileCount":13,"integrity":"sha512-b3w2yudR+gZUbG9Q0JN7cnzkb4eDbee3aygu5pv1NPTUijLkjk1qEJ8orKJnfNgvn7JesHePgjdztt4OtKFYhQ==","signatures":[{"sig":"MEQCIBq4MUIBMWLZjkwqhE+icLJM5o9jl3dxNoq3YZtAcW8SAiAfadQK7N0d4HoDSNFrsSpq5ReGtqpG8ESNfy5m4HRgJQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":971256},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","browser":"./dist/index.browser.min.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./browser":{"types":"./dist/index.d.ts","default":"./dist/index.browser.min.js"}},"gitHead":"70dfed87679599e1732dacd2b08088c90d5c8237","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","clean":"rimraf dist","format":"prettier --write \"**/*.{ts,tsx,js,jsx,mjs,json,md,yml}\"","lint:fix":"eslint src --ext .ts --fix","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"playwright test --reporter null","test:unit":"vitest run","typecheck":"tsc --noEmit","test:watch":"vitest","build:watch":"tsup --watch","test:e2e:ui":"playwright test --ui","test:vitest":"vitest run","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run clean && npm run build","test:e2e:debug":"playwright test --debug"},"_npmUser":{"name":"biggora","email":"aleksej@gordejev.lv"},"repository":{"url":"git://github.com/biggora/device-uuid.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast browser device uuid generation library.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","react":"^19.2.4","eslint":"^9.38.0","rimraf":"^6.0.1","vitest":"^4.0.5","prettier":"^3.6.2","happy-dom":"^20.0.10","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^24.9.2","http-server":"^14.1.1","@types/react":"^19.2.10","@playwright/test":"^1.58.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.46.2","@vitest/coverage-v8":"^4.0.5","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.46.2","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/device-uuid_3.0.1_1769934840539_0.6323822849175573","host":"s3://npm-registry-packages-npm-production"}},"3.0.2-oidc-test.0":{"name":"device-uuid","version":"3.0.2-oidc-test.0","keywords":["useragent","browser","device","uuid","fingerprint","typescript"],"author":{"url":"https://github.com/biggora","name":"Alexey Gordeyev","email":"aleksej@gordejev.lv"},"license":"MIT","_id":"device-uuid@3.0.2-oidc-test.0","maintainers":[{"name":"biggora","email":"aleksej@gordejev.lv"}],"contributors":[{"url":"https://github.com/uzer-ua","name":"Vitalii Onyshchenko"}],"homepage":"https://github.com/biggora/device-uuid/","bugs":{"url":"https://github.com/biggora/device-uuid/issues"},"dist":{"shasum":"b0bcd2f0d44b0f1e505d36c366de0b82a877eb1c","tarball":"https://registry.npmjs.org/device-uuid/-/device-uuid-3.0.2-oidc-test.0.tgz","fileCount":13,"integrity":"sha512-IO1E9Qm3mO2j4wiWtnw404vNxe+cstqwAah3SSu+XI6KhCGhtPzmwoEt9TxlzcJ+tKaExG1ty4ULkbDqMOP0MQ==","signatures":[{"sig":"MEQCIF2JuhEdnaclo3Xco97MD7kYlNgE7O0nWTUFelsqcSDIAiAEIE+XeaFx61UkONwcjRVK3KZhtizHnwgqz4t+idX2QA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/device-uuid@3.0.2-oidc-test.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":971597},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","browser":"./dist/index.browser.min.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./browser":{"types":"./dist/index.d.ts","default":"./dist/index.browser.min.js"}},"gitHead":"126d2041944c88fe80719d05b372b9bcc4498cbd","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup && node scripts/cjs-interop.mjs","clean":"rimraf dist","format":"prettier --write \"**/*.{ts,tsx,js,jsx,mjs,json,md,yml}\"","lint:fix":"eslint src --ext .ts --fix","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"playwright test --reporter null","test:unit":"vitest run","typecheck":"tsc --noEmit","test:watch":"vitest","build:watch":"tsup --watch","test:e2e:ui":"playwright test --ui","test:vitest":"vitest run","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run clean && npm run build","test:e2e:debug":"playwright test --debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:54386368-837a-4682-ba08-913b0ec588ae"}},"repository":{"url":"git://github.com/biggora/device-uuid.git","type":"git"},"_npmVersion":"11.11.0","description":"Fast browser device uuid generation library.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsup":"^8.5.0","react":"^19.2.4","eslint":"^9.38.0","rimraf":"^6.0.1","vitest":"^4.0.5","prettier":"^3.6.2","happy-dom":"^20.0.10","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^24.9.2","http-server":"^14.1.1","@types/react":"^19.2.10","@playwright/test":"^1.58.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.46.2","@vitest/coverage-v8":"^4.0.5","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.46.2","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/device-uuid_3.0.2-oidc-test.0_1778350626995_0.3879191917335607","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"device-uuid","version":"3.0.2","keywords":["useragent","browser","device","uuid","fingerprint","typescript"],"author":{"url":"https://github.com/biggora","name":"Alexey Gordeyev","email":"aleksej@gordejev.lv"},"license":"MIT","_id":"device-uuid@3.0.2","maintainers":[{"name":"biggora","email":"aleksej@gordejev.lv"}],"contributors":[{"url":"https://github.com/uzer-ua","name":"Vitalii Onyshchenko"}],"homepage":"https://github.com/biggora/device-uuid/","bugs":{"url":"https://github.com/biggora/device-uuid/issues"},"dist":{"shasum":"6807832065b1882b148f9db264d693ac1a3aefd7","tarball":"https://registry.npmjs.org/device-uuid/-/device-uuid-3.0.2.tgz","fileCount":13,"integrity":"sha512-bZKrBHSG/OSa9aMfuj3ALhy0r8DguxPSBLcK+SUQi/q/QDgmkqO7uAaJvIIEigM9Mol4Dq1bPBme/zr/20luHw==","signatures":[{"sig":"MEUCIALrQzyzwGyZelMv/qaiUw9joP65MiNFCgRViM79QeADAiEAkI1KT+UD7hhq+kRpXR6oCWk8zTb6TOULfKJC53o6uEQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/device-uuid@3.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":971585},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","browser":"./dist/index.browser.min.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./browser":{"types":"./dist/index.d.ts","default":"./dist/index.browser.min.js"}},"gitHead":"3ffd8e9aa7ac36827dce218833d60ce47c9f04b7","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup && node scripts/cjs-interop.mjs","clean":"rimraf dist","format":"prettier --write \"**/*.{ts,tsx,js,jsx,mjs,json,md,yml}\"","lint:fix":"eslint src --ext .ts --fix","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"playwright test --reporter null","test:unit":"vitest run","typecheck":"tsc --noEmit","test:watch":"vitest","build:watch":"tsup --watch","test:e2e:ui":"playwright test --ui","test:vitest":"vitest run","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run clean && npm run build","test:e2e:debug":"playwright test --debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:54386368-837a-4682-ba08-913b0ec588ae"}},"repository":{"url":"git://github.com/biggora/device-uuid.git","type":"git"},"_npmVersion":"11.11.0","description":"Fast browser device uuid generation library.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","react":"^19.2.4","eslint":"^9.38.0","rimraf":"^6.0.1","vitest":"^4.0.5","prettier":"^3.6.2","happy-dom":"^20.0.10","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^24.9.2","http-server":"^14.1.1","@types/react":"^19.2.10","@playwright/test":"^1.58.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.46.2","@vitest/coverage-v8":"^4.0.5","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.46.2","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/device-uuid_3.0.2_1778388919381_0.024811446370935908","host":"s3://npm-registry-packages-npm-production"}},"3.0.3":{"name":"device-uuid","version":"3.0.3","keywords":["useragent","browser","device","uuid","fingerprint","typescript"],"author":{"url":"https://github.com/biggora","name":"Alexey Gordeyev","email":"aleksej@gordejev.lv"},"license":"MIT","_id":"device-uuid@3.0.3","maintainers":[{"name":"biggora","email":"aleksej@gordejev.lv"}],"contributors":[{"url":"https://github.com/uzer-ua","name":"Vitalii Onyshchenko"}],"homepage":"https://github.com/biggora/device-uuid/","bugs":{"url":"https://github.com/biggora/device-uuid/issues"},"dist":{"shasum":"66124ad4152509946b901974c0cb098fdeb35dbf","tarball":"https://registry.npmjs.org/device-uuid/-/device-uuid-3.0.3.tgz","fileCount":13,"integrity":"sha512-2WEomy7x+CN5xbncnGl8FB8LQozo08mIgoWazmDyRPHakeBklgQu3odiF7X1kXzQX0EaX4G+3JW2JZusYkAw6Q==","signatures":[{"sig":"MEQCIAzekEAT0XCcMH8+oFDLSllbUk6cTmSdtXdN/8ZeFUlDAiBIyDbLaImSrXzkZFq7hBP8r6e/8j/lzbK7JwVl1Z9yVw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/device-uuid@3.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":986437},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","browser":"./dist/index.browser.min.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./browser":{"types":"./dist/index.d.ts","default":"./dist/index.browser.min.js"}},"gitHead":"c3dca1419f3ff266ce0f63414f64dda38c4c7fa3","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup && node scripts/cjs-interop.mjs","clean":"rimraf dist","format":"prettier --write \"**/*.{ts,tsx,js,jsx,mjs,json,md,yml}\"","lint:fix":"eslint src --ext .ts --fix","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"playwright test --reporter null","test:unit":"vitest run","typecheck":"tsc --noEmit","test:watch":"vitest","build:watch":"tsup --watch","test:e2e:ui":"playwright test --ui","test:vitest":"vitest run","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run clean && npm run build","test:e2e:debug":"playwright test --debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:54386368-837a-4682-ba08-913b0ec588ae"}},"repository":{"url":"git://github.com/biggora/device-uuid.git","type":"git"},"_npmVersion":"11.12.1","description":"Fast browser device uuid generation library.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","react":"^19.2.4","eslint":"^9.38.0","rimraf":"^6.0.1","vitest":"^4.0.5","prettier":"^3.6.2","happy-dom":"^20.0.10","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^24.9.2","http-server":"^14.1.1","@types/react":"^19.2.10","@playwright/test":"^1.58.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.46.2","@vitest/coverage-v8":"^4.0.5","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.46.2","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/device-uuid_3.0.3_1778923301881_0.9619604489217073","host":"s3://npm-registry-packages-npm-production"}},"3.0.4":{"name":"device-uuid","version":"3.0.4","keywords":["useragent","browser","device","uuid","fingerprint","typescript"],"author":{"url":"https://github.com/biggora","name":"Alexey Gordeyev","email":"aleksej@gordejev.lv"},"license":"MIT","_id":"device-uuid@3.0.4","maintainers":[{"name":"biggora","email":"aleksej@gordejev.lv"}],"contributors":[{"url":"https://github.com/uzer-ua","name":"Vitalii Onyshchenko"}],"homepage":"https://github.com/biggora/device-uuid/","bugs":{"url":"https://github.com/biggora/device-uuid/issues"},"dist":{"shasum":"efac56f9a75815109dd8b161b1874a3f4493869c","tarball":"https://registry.npmjs.org/device-uuid/-/device-uuid-3.0.4.tgz","fileCount":13,"integrity":"sha512-nuSDFDxZsNLToX+sFyXKgHDFrOTtMjCWSYvy+ok37lvGThdjZdU39wCbETeS0ohX6tyDgk6OV9DObuOwNlq8Zw==","signatures":[{"sig":"MEQCIA/WtQz7ONJsZ+7xq8Lf5EZ0hrrC7gR9ns2GG8TBgg7iAiABJZ0dGoXIaOiLmpKaOi4pc+x9zs4TxqORQgm9wHFkMA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/device-uuid@3.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":986570},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","browser":"./dist/index.browser.min.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./browser":{"types":"./dist/index.d.ts","default":"./dist/index.browser.min.js"}},"gitHead":"689d8fbf510493739554b9e0c282b8bc2af27b8c","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup && node scripts/cjs-interop.mjs","clean":"rimraf dist","format":"prettier --write \"**/*.{ts,tsx,js,jsx,mjs,json,md,yml}\"","lint:fix":"eslint src --ext .ts --fix","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"playwright test --reporter null","test:unit":"vitest run","typecheck":"tsc --noEmit","test:watch":"vitest","build:pages":"npm run build && node scripts/build-pages.mjs","build:watch":"tsup --watch","test:e2e:ui":"playwright test --ui","test:vitest":"vitest run","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run clean && npm run build","test:e2e:debug":"playwright test --debug"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:54386368-837a-4682-ba08-913b0ec588ae"}},"overrides":{"vite":"7.3.5","esbuild":"0.28.1"},"repository":{"url":"git://github.com/biggora/device-uuid.git","type":"git"},"_npmVersion":"11.13.0","description":"Fast browser device uuid generation library.","directories":{},"_nodeVersion":"24.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","react":"^19.2.4","eslint":"^9.38.0","rimraf":"^6.0.1","vitest":"^4.1.8","prettier":"^3.6.2","happy-dom":"^20.0.10","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^24.9.2","http-server":"^14.1.1","@types/react":"^19.2.10","@playwright/test":"^1.58.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.46.2","@vitest/coverage-v8":"^4.1.8","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1","@typescript-eslint/parser":"^8.46.2","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/device-uuid_3.0.4_1782817517946_0.7960850742823744","host":"s3://npm-registry-packages-npm-production"}},"3.0.5":{"name":"device-uuid","description":"Fast browser device uuid generation library.","version":"3.0.5","homepage":"https://github.com/biggora/device-uuid/","repository":{"type":"git","url":"git://github.com/biggora/device-uuid.git"},"license":"MIT","publishConfig":{"access":"public"},"author":{"name":"Alexey Gordeyev","email":"aleksej@gordejev.lv","url":"https://github.com/biggora"},"contributors":[{"name":"Vitalii Onyshchenko","url":"https://github.com/uzer-ua"}],"keywords":["useragent","browser","device","uuid","fingerprint","typescript"],"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","browser":"./dist/index.browser.min.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs","default":"./dist/index.js"},"./browser":{"types":"./dist/index.d.ts","default":"./dist/index.browser.min.js"}},"scripts":{"build":"tsup && node scripts/cjs-interop.mjs","build:pages":"npm run build && node scripts/build-pages.mjs","build:watch":"tsup --watch","dev":"tsup --watch","typecheck":"tsc --noEmit","lint":"eslint src --ext .ts","lint:fix":"eslint src --ext .ts --fix","format":"prettier --write \"**/*.{ts,tsx,js,jsx,mjs,json,md,yml}\"","format:check":"prettier --check \"src/**/*.ts\"","test:watch":"vitest","test":"vitest run","test:vitest":"vitest run","test:unit":"vitest run","test:e2e":"playwright test --reporter null","test:e2e:ui":"playwright test --ui","test:e2e:debug":"playwright test --debug","test:all":"npm run test:unit && npm run test:e2e","clean":"rimraf dist","prepublishOnly":"npm run clean && npm run build"},"engines":{"node":">=18.0.0"},"overrides":{"esbuild":"0.28.1","vite":"7.3.5"},"devDependencies":{"@eslint/js":"^10.0.1","@playwright/test":"^1.58.0","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@types/node":"^24.9.2","@types/react":"^19.2.10","@types/react-dom":"^19.2.3","@typescript-eslint/eslint-plugin":"^8.46.2","@typescript-eslint/parser":"^8.46.2","@vitejs/plugin-react":"^5.1.2","@vitest/coverage-v8":"^4.1.8","eslint":"^10.8.0","happy-dom":"^20.0.10","http-server":"^14.1.1","prettier":"^3.6.2","react":"^19.2.4","react-dom":"^19.2.4","rimraf":"^6.0.1","tsup":"^8.5.0","typescript":"^5.9.3","typescript-eslint":"^8.46.2","vitest":"^4.1.8"},"gitHead":"5d037c873b42dee451e16dcf724af71d76ac53f3","_id":"device-uuid@3.0.5","bugs":{"url":"https://github.com/biggora/device-uuid/issues"},"_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-6bZokfMxUi57LyCICGlNVAt/HK+Xehkyp6T4szTla4A9IBPb+w/uhzN1PHs3/trposDHlkCBG97YbUrZV2uXmQ==","shasum":"680145789926cf920504e9e63b84b7433f5d6e35","tarball":"https://registry.npmjs.org/device-uuid/-/device-uuid-3.0.5.tgz","fileCount":13,"unpackedSize":986323,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/device-uuid@3.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCzDtOsrTanNsvrGRUQPBZ/s0EULDJlFC5UKIjgWRstWAIhAOfxfw45lDxw7YHydaUUdnrmZO/JP9vCmAGlUh7PX+q3"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:54386368-837a-4682-ba08-913b0ec588ae"}},"directories":{},"maintainers":[{"name":"biggora","email":"aleksej@gordejev.lv"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/device-uuid_3.0.5_1786719778958_0.11625545668148707"},"_hasShrinkwrap":false}},"time":{"created":"2017-01-07T21:22:35.964Z","modified":"2026-08-14T15:02:59.688Z","1.0.1":"2017-01-07T21:22:35.964Z","1.0.2":"2017-01-07T21:30:17.366Z","1.0.4":"2017-08-09T07:54:23.715Z","2.0.0":"2025-10-31T07:00:30.536Z","3.0.0":"2026-01-25T17:55:11.995Z","3.0.1":"2026-02-01T08:34:00.720Z","3.0.2-oidc-test.0":"2026-05-09T18:17:07.163Z","3.0.2":"2026-05-10T04:55:19.600Z","3.0.3":"2026-05-16T09:21:42.059Z","3.0.4":"2026-06-30T11:05:18.128Z","3.0.5":"2026-08-14T15:02:59.193Z"},"bugs":{"url":"https://github.com/biggora/device-uuid/issues"},"author":{"name":"Alexey Gordeyev","email":"aleksej@gordejev.lv","url":"https://github.com/biggora"},"license":"MIT","homepage":"https://github.com/biggora/device-uuid/","keywords":["useragent","browser","device","uuid","fingerprint","typescript"],"repository":{"type":"git","url":"git://github.com/biggora/device-uuid.git"},"description":"Fast browser device uuid generation library.","contributors":[{"name":"Vitalii Onyshchenko","url":"https://github.com/uzer-ua"}],"maintainers":[{"name":"biggora","email":"aleksej@gordejev.lv"}],"readme":"[![npm version](https://img.shields.io/npm/v/device-uuid.svg)](https://www.npmjs.com/package/device-uuid)\n[![CI](https://img.shields.io/github/actions/workflow/status/biggora/device-uuid/ci.yml?branch=master)](https://github.com/biggora/device-uuid/actions)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n# device-uuid\n\nFast browser device UUID generation library with comprehensive device detection and advanced fingerprinting capabilities. Written in TypeScript with zero runtime dependencies, supporting both Node.js and browser environments.\n\n[DeviceUUID Demo](https://biggora.github.io/device-uuid/)\n\n## Features\n\n- 🚀 Zero runtime dependencies\n- 📦 Multiple module formats (ESM, CJS, IIFE)\n- 🔍 Comprehensive device detection (OS, browser, platform)\n- 📱 Mobile, tablet, and desktop detection\n- 🤖 Bot detection (18 known bot patterns)\n- 📺 Smart TV and gaming console detection\n- 🎨 Advanced fingerprinting (Canvas, WebGL, Audio, Fonts)\n- ⚡ Dual API: Synchronous and Asynchronous\n- 🔒 Privacy-by-design (fingerprinting is opt-in)\n- 🎨 TypeScript support with full type definitions\n- 🌐 Browser and Node.js compatible\n\n## Installation\n\n```bash\nnpm install device-uuid\n```\n\n## Quick Start\n\n### Node.js / Module Bundlers\n\n```typescript\nimport { DeviceUUID } from 'device-uuid';\n\n// Basic synchronous UUID (user agent + screen properties)\nconst device = new DeviceUUID();\nconst uuid = device.get();\nconsole.log(uuid); // e9dc90ac-d03d-4f01-a7bb-873e14556d8e\n\n// Get device information\nconst info = device.parse();\nconsole.log(info.browser); // Chrome\nconsole.log(info.os); // Windows 11\nconsole.log(info.isMobile); // false\n```\n\n### Browser (via `<script>` tag)\n\n```html\n<script src=\"node_modules/device-uuid/dist/index.browser.min.js\"></script>\n<script>\n  const device = new DeviceUUID();\n  const uuid = device.get();\n  console.log('Device UUID:', uuid);\n</script>\n```\n\n### React\n\n```tsx\n'use client';\n\nimport { useEffect, useState } from 'react';\nimport { DeviceUUID } from 'device-uuid';\n\nexport function DeviceInfo() {\n  const [uuid, setUuid] = useState<string | null>(null);\n\n  useEffect(() => {\n    const device = new DeviceUUID();\n    setUuid(device.get());\n  }, []);\n\n  if (!uuid) return <p>Loading...</p>;\n\n  return <p>Device UUID: {uuid}</p>;\n}\n```\n\n## API Reference\n\n### Synchronous API\n\nBasic device identification using user agent and screen properties.\n\n#### `get(customData?: string): string`\n\nGenerate a UUID based on device characteristics.\n\n```typescript\nconst device = new DeviceUUID();\nconst uuid = device.get();\n```\n\n#### `parse(source?: string): AgentInfo`\n\nParse user agent string and return device information.\n\n```typescript\nconst info = device.parse();\nconsole.log(info.browser); // 'Chrome'\nconsole.log(info.os); // 'Windows 11'\nconsole.log(info.isMobile); // false\n```\n\n#### `getComponents(): Record<string, string | null>`\n\nGet individual fingerprint components.\n\n```typescript\nconst components = device.getComponents();\nconsole.log(components);\n// { userAgent: '...', screen: '1920x1080', language: 'en-US', ... }\n```\n\n### Asynchronous API\n\nAdvanced fingerprinting with browser characteristics. **All methods are opt-in for privacy.**\n\n#### `getAsync(options?: FingerprintOptions): Promise<string>`\n\nGenerate a UUID with advanced fingerprinting methods.\n\n```typescript\n// Enable specific fingerprinting methods\nconst uuid = await device.getAsync({\n  canvas: true,\n  webgl: true,\n  audio: true,\n  fonts: true,\n  timeout: 5000,\n});\n\n// Or use a preset\nconst uuid = await device.getAsync({ preset: 'standard' });\n```\n\n#### `getDetailedAsync(options?: FingerprintOptions): Promise<FingerprintDetails>`\n\nGenerate UUID and return detailed fingerprint information.\n\n```typescript\nconst details = await device.getDetailedAsync({ preset: 'standard' });\n\nconsole.log(details.uuid);       // Generated UUID\nconsole.log(details.components); // Individual components\nconsole.log(details.options);    // Options used\nconsole.log(details.duration);   // Time taken (ms)\n```\n\n### Static Methods\n\n#### `DeviceUUID.isFeatureSupported(feature: FingerprintFeature): boolean`\n\nCheck if a fingerprinting feature is supported in the current environment.\n\n```typescript\nimport { DeviceUUID } from 'device-uuid';\n\nDeviceUUID.isFeatureSupported('canvas'); // true/false\nDeviceUUID.isFeatureSupported('webgl'); // true/false\nDeviceUUID.isFeatureSupported('audio'); // true/false\n```\n\n## Configuration Options\n\n### Fingerprint Presets\n\nPresets provide pre-configured options for common use cases:\n\n```typescript\n// Minimal - basic device info only (no advanced fingerprinting)\nawait device.getAsync({ preset: 'minimal' });\n\n// Standard - canvas and WebGL (good uniqueness)\nawait device.getAsync({ preset: 'standard' });\n\n// Comprehensive - all fingerprinting methods\nawait device.getAsync({ preset: 'comprehensive' });\n```\n\n### Custom Options\n\nFine-grained control over fingerprinting methods:\n\n```typescript\ninterface FingerprintOptions {\n  // Fingerprinting methods (all opt-in, default: false)\n  canvas?: boolean;\n  webgl?: boolean;\n  audio?: boolean;\n  fonts?: boolean | string[]; // true for default list, or custom font list\n  mediaDevices?: boolean;\n  networkInfo?: boolean;\n  timezone?: boolean;\n  incognitoDetection?: boolean;\n\n  // Timeouts\n  timeout?: number; // Global timeout (default: 5000ms)\n  methodTimeout?: number; // Per-method timeout (default: 1000ms)\n\n  // Preset (overrides individual options)\n  preset?: 'minimal' | 'standard' | 'comprehensive';\n}\n```\n\n#### Font Detection\n\n```typescript\n// Use default font list\nawait device.getAsync({ fonts: true });\n\n// Use custom font list\nawait device.getAsync({\n  fonts: ['Arial', 'Times New Roman', 'Helvetica', 'Courier New'],\n});\n```\n\n## Usage Examples\n\n### Basic Device Detection\n\n```typescript\nimport { DeviceUUID } from 'device-uuid';\n\nconst device = new DeviceUUID();\nconst info = device.parse();\n\nif (info.isMobile) {\n  console.log('Mobile device detected');\n} else if (info.isTablet) {\n  console.log('Tablet device detected');\n} else {\n  console.log('Desktop device detected');\n}\n\nconsole.log(`Browser: ${info.browser} ${info.version}`);\nconsole.log(`OS: ${info.os}`);\nconsole.log(`Platform: ${info.platform}`);\n```\n\n### Advanced Fingerprinting\n\n```typescript\nimport { DeviceUUID } from 'device-uuid';\n\nconst device = new DeviceUUID();\n\n// Check feature support before using\nif (DeviceUUID.isFeatureSupported('canvas')) {\n  const uuid = await device.getAsync({\n    canvas: true,\n    webgl: true,\n    timeout: 5000,\n  });\n  console.log('Advanced UUID:', uuid);\n}\n```\n\n### Detailed Fingerprint Analysis\n\n```typescript\nimport { DeviceUUID } from 'device-uuid';\n\nconst device = new DeviceUUID();\n\nconst details = await device.getDetailedAsync({\n  preset: 'standard',\n});\n\nconsole.log('UUID:', details.uuid);\nconsole.log('Components:', details.components);\nconsole.log('Duration:', details.duration, 'ms');\n\n// Check which components were used\nfor (const [key, value] of Object.entries(details.components)) {\n  if (value !== null) {\n    console.log(`${key}: ${value}`);\n  }\n}\n```\n\n### Custom User Agent Parsing\n\n```typescript\nimport { DeviceUUID } from 'device-uuid';\n\nconst device = new DeviceUUID();\n\n// Parse a custom user agent string\nconst customUA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15';\nconst info = device.parse(customUA);\n\nconsole.log(info.isiPhone); // true\nconsole.log(info.os); // iOS\nconsole.log(info.browser); // Safari\n```\n\n### Error Handling\n\n```typescript\nimport { DeviceUUID } from 'device-uuid';\n\nconst device = new DeviceUUID();\n\ntry {\n  const uuid = await device.getAsync({\n    preset: 'comprehensive',\n    timeout: 10000,\n  });\n  console.log('UUID:', uuid);\n} catch (error) {\n  console.error('Fingerprinting failed:', error);\n  // Fall back to basic UUID\n  const basicUuid = device.get();\n  console.log('Basic UUID:', basicUuid);\n}\n```\n\n## AgentInfo Interface\n\nThe `parse()` method returns an `AgentInfo` object with the following properties:\n\n### Device Type Flags\n\n| Property        | Type              | Description           |\n| --------------- | ----------------- | --------------------- |\n| `isDesktop`     | boolean           | Desktop computer      |\n| `isMobile`      | boolean           | Mobile phone          |\n| `isTablet`      | boolean           | Tablet device         |\n| `isBot`         | boolean \\| string | Bot/crawler detection |\n| `isSmartTV`     | boolean           | Smart TV device       |\n| `isTouchScreen` | boolean           | Touch screen support  |\n\n### Browser Information\n\n| Property    | Type    | Description                                        |\n| ----------- | ------- | -------------------------------------------------- |\n| `browser`   | string  | Browser name (Chrome, Firefox, Safari, Edge, etc.) |\n| `version`   | string  | Browser version                                    |\n| `isChrome`  | boolean | Chrome browser                                     |\n| `isFirefox` | boolean | Firefox browser                                    |\n| `isSafari`  | boolean | Safari browser                                     |\n| `isEdge`    | boolean | Edge browser                                       |\n| `isOpera`   | boolean | Opera browser                                      |\n| `isIE`      | boolean | Internet Explorer                                  |\n\n### Operating System\n\n| Property     | Type    | Description                       |\n| ------------ | ------- | --------------------------------- |\n| `os`         | string  | Operating system name and version |\n| `isWindows`  | boolean | Windows OS                        |\n| `isMac`      | boolean | macOS                             |\n| `isLinux`    | boolean | Linux OS                          |\n| `isLinux64`  | boolean | 64-bit Linux                      |\n| `isChromeOS` | boolean | Chrome OS                         |\n\n### Mobile Platforms\n\n| Property          | Type    | Description       |\n| ----------------- | ------- | ----------------- |\n| `isAndroid`       | boolean | Android platform  |\n| `isAndroidTablet` | boolean | Android tablet    |\n| `isiPhone`        | boolean | iPhone            |\n| `isiPad`          | boolean | iPad              |\n| `isiPod`          | boolean | iPod touch        |\n| `isSamsung`       | boolean | Samsung device    |\n| `isBlackberry`    | boolean | Blackberry device |\n\n### Device Properties\n\n| Property     | Type             | Description                       |\n| ------------ | ---------------- | --------------------------------- |\n| `platform`   | string           | Platform name                     |\n| `language`   | string           | Browser language                  |\n| `colorDepth` | number           | Screen color depth                |\n| `pixelDepth` | number           | Screen pixel depth                |\n| `resolution` | [number, number] | Screen resolution [width, height] |\n| `cpuCores`   | number           | Number of CPU cores               |\n| `source`     | string           | Original user agent string        |\n\n### Utility Functions\n\n| Method                           | Description           |\n| -------------------------------- | --------------------- |\n| `hashMD5(value: string): string` | Generate MD5 hash     |\n| `hashInt(value: string): number` | Generate integer hash |\n\n## Type Exports\n\nThe library exports the following TypeScript types:\n\n```typescript\nimport type {\n  DeviceUUIDOptions,\n  AgentInfo,\n  FingerprintOptions,\n  FingerprintDetails,\n  FingerprintComponent,\n  FingerprintPreset,\n  FingerprintFeature,\n} from 'device-uuid';\n```\n\n## Bundle Sizes\n\n| Format                   | Size                |\n| ------------------------ | ------------------- |\n| ESM                      | ~31 KB (unminified) |\n| CJS                      | ~31 KB (unminified) |\n| Browser (IIFE)           | ~34 KB (unminified) |\n| Browser (IIFE, minified) | ~19 KB              |\n\n## Browser Support\n\n- Chrome / Chromium (all versions)\n- Firefox (all versions)\n- Safari (all versions)\n- Edge (Chromium and Legacy)\n- Opera (all versions)\n- Internet Explorer 11+\n\n## Privacy Considerations\n\nThis library follows a **privacy-by-design** approach:\n\n1. **Opt-in Default**: All advanced fingerprinting methods are **disabled by default**\n2. **User Control**: Explicit configuration required for each fingerprinting method\n3. **Timeout Protection**: All async operations have configurable timeouts\n4. **Error Handling**: Graceful fallbacks when methods fail or are blocked\n5. **No Data Exfiltration**: All processing happens locally; nothing is sent to external servers\n\nWhen using advanced fingerprinting:\n\n- Always inform users about data collection\n- Obtain appropriate consent when required\n- Provide a way to opt-out\n- Consider using the `minimal` preset for basic identification only\n\n## License\n\n[MIT](LICENSE) © Aleksejs Gordejevs and contributors.\n","readmeFilename":"README.md"}