{"_id":"@dossier-wiki/fingerprint-shared","_rev":"4-cc7f1698cbd1b9ea642a92e0c259884b","name":"@dossier-wiki/fingerprint-shared","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@dossier-wiki/fingerprint-shared","version":"0.1.0","_id":"@dossier-wiki/fingerprint-shared@0.1.0","maintainers":[{"name":"nimeshaperi","email":"nimesha@dossiers.wiki"},{"name":"nisalp","email":"nisal@dossiers.wiki"},{"name":"kevinaugustin","email":"kevin@dossiers.wiki"}],"dist":{"shasum":"8a5db14f49ffbbd94652a61fc1784c49589b3cb2","tarball":"https://registry.npmjs.org/@dossier-wiki/fingerprint-shared/-/fingerprint-shared-0.1.0.tgz","fileCount":4,"integrity":"sha512-utSoxj3iPZUchp7VPvJPraKrTpyrJ8gAXnqFCk3BhUk3rOgbKwziJ5RTQ+0tRHo4vHi3jFAgR8oW7dH1Hj93ew==","signatures":[{"sig":"MEYCIQDVz86+js/LvVYqRIWVvFTkkS2htB2WsE+CxrN8/GjelwIhAL/rJwHBkxxXLj8xlWjhIS4XjqKhJSe5dKTnfBiASR8B","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46078},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kevinaugustin","email":"kevin@dossiers.wiki"},"directories":{},"sideEffects":false,"_nodeVersion":"26.0.0","dependencies":{"zod":"^3.23.8"},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","vitest":"^2.1.8","typescript":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/fingerprint-shared_0.1.0_1784287303950_0.8776410447317802","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@dossier-wiki/fingerprint-shared","version":"0.1.1","_id":"@dossier-wiki/fingerprint-shared@0.1.1","maintainers":[{"name":"nimeshaperi","email":"nimesha@dossiers.wiki"},{"name":"nisalp","email":"nisal@dossiers.wiki"},{"name":"kevinaugustin","email":"kevin@dossiers.wiki"}],"dist":{"shasum":"ad87f7b9803be59b1f34d10c3dcf742a69ad8c7c","tarball":"https://registry.npmjs.org/@dossier-wiki/fingerprint-shared/-/fingerprint-shared-0.1.1.tgz","fileCount":5,"integrity":"sha512-EJk8zBiy9L/m5cSu5sb81cCUUrAX1BJv7lxWAUDICaQhXCkmU7wFtWoNlrbGMfsaEq1+wIrIN5nSEAgu47TJDA==","signatures":[{"sig":"MEYCIQDM44XNx5R6UN7OJnTGvRMm2SYN4uB1GW7dV4NbnjcdPwIhANYgq0PSmkMNqTxcpuarAAVhgWsJwHUzqjI7NsTS5ffz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48161},"main":"./src/index.ts","type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./sha256":"./src/sha256.ts","./testing":"./src/testFixtures.ts"},"gitHead":"25429de97cdbafaf5b7945124d2f9c0a7b7f5004","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kevinaugustin","email":"kevin@dossiers.wiki"},"_npmVersion":"11.12.1","description":"> Part of **[dossiers-fingerprint](https://github.com/justanotherkev/dossiers-fingerprint#readme)** — a > cookieless browser & device fingerprinting service that resolves a stable `visitorId`. > See the [repository root](https://github.com/justanotherkev/","directories":{},"sideEffects":false,"_nodeVersion":"26.0.0","dependencies":{"zod":"^3.23.8"},"publishConfig":{"main":"./dist/index.js","types":"./dist/index.d.ts","access":"public","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","vitest":"^2.1.8","typescript":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/fingerprint-shared_0.1.1_1785154587490_0.8307260101466285","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@dossier-wiki/fingerprint-shared","version":"0.1.2","_id":"@dossier-wiki/fingerprint-shared@0.1.2","maintainers":[{"name":"nimeshaperi","email":"nimesha@dossiers.wiki"},{"name":"nisalp","email":"nisal@dossiers.wiki"},{"name":"kevinaugustin","email":"kevin@dossiers.wiki"}],"dist":{"shasum":"e5249ab8ab294e3ef4afe46749ea39e0a3cc82f2","tarball":"https://registry.npmjs.org/@dossier-wiki/fingerprint-shared/-/fingerprint-shared-0.1.2.tgz","fileCount":8,"integrity":"sha512-L6wcIKv4DsGFcwJkz+TaEKsgpdFwPm2Ep1w20xaY9ZH0r9mE3RVia3yBnhEX4219wmbvIdiBq9poRS0PLu4RRw==","signatures":[{"sig":"MEUCIQDaO4Z1YQdTQmGkaFd0YBgKmMpdT+c0viR24SUA1j/MeQIgOQOCZ6zIVASGe0QZyxkkivKSegx4ytM0OYmsT/ThhtE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95725},"main":"./dist/index.cjs","type":"module","_from":"file:/var/folders/s1/kbx74s4s03d2d4tl4v4knglh0000gn/T/tmp.iA3jMoY0Yn/dossier-wiki-fingerprint-shared-0.1.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kevinaugustin","email":"kevin@dossiers.wiki"},"_resolved":"/var/folders/s1/kbx74s4s03d2d4tl4v4knglh0000gn/T/tmp.iA3jMoY0Yn/dossier-wiki-fingerprint-shared-0.1.2.tgz","_integrity":"sha512-L6wcIKv4DsGFcwJkz+TaEKsgpdFwPm2Ep1w20xaY9ZH0r9mE3RVia3yBnhEX4219wmbvIdiBq9poRS0PLu4RRw==","_npmVersion":"11.12.1","description":"> Part of **[dossiers-fingerprint](https://github.com/justanotherkev/dossiers-fingerprint#readme)** — a > cookieless browser & device fingerprinting service that resolves a stable `visitorId`. > See the [repository root](https://github.com/justanotherkev/","directories":{},"sideEffects":false,"_nodeVersion":"26.0.0","dependencies":{"zod":"^3.23.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","vitest":"^2.1.8","typescript":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/fingerprint-shared_0.1.2_1785413713321_0.54561367547094","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@dossier-wiki/fingerprint-shared","version":"0.2.0","type":"module","sideEffects":false,"main":"./dist/index.cjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"publishConfig":{"access":"public"},"dependencies":{"zod":"^3.23.8"},"devDependencies":{"tsup":"^8.3.5","typescript":"^5.6.3","vitest":"^2.1.8"},"scripts":{"build":"tsup","typecheck":"tsc --noEmit","test":"vitest run"},"module":"./dist/index.js","_id":"@dossier-wiki/fingerprint-shared@0.2.0","description":"> Part of **[dossiers-fingerprint](https://github.com/justanotherkev/dossiers-fingerprint#readme)** — a > cookieless browser & device fingerprinting service that resolves a stable `visitorId`. > See the [repository root](https://github.com/justanotherkev/","_integrity":"sha512-K2tGmhzgJavHWtRxzwtYTkHujat/cUrufOUtlY/LMj9MThbUYEbDZGL9X0LbiTFGkmQOlVZ0DnMMlIkC74vqzA==","_resolved":"/Users/kevinaugustin/Desktop/Dossiers/dossiers-fingerprint/packages/shared/dossier-wiki-fingerprint-shared-0.2.0.tgz","_from":"file:dossier-wiki-fingerprint-shared-0.2.0.tgz","_nodeVersion":"26.0.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-K2tGmhzgJavHWtRxzwtYTkHujat/cUrufOUtlY/LMj9MThbUYEbDZGL9X0LbiTFGkmQOlVZ0DnMMlIkC74vqzA==","shasum":"388dbec9b63e517372cd863f05c59df019ef2ca2","tarball":"https://registry.npmjs.org/@dossier-wiki/fingerprint-shared/-/fingerprint-shared-0.2.0.tgz","fileCount":8,"unpackedSize":125888,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHJvhYzGNX/GyBTxTnDxtaAbPeosS+HUSNuzsrD+/tc6AiBueIT3FucXXalDG/05NSYvWKbV85LAsfR3Oa53ASgbVQ=="}]},"_npmUser":{"name":"kevinaugustin","email":"kevin@dossiers.wiki"},"directories":{},"maintainers":[{"name":"nimeshaperi","email":"nimesha@dossiers.wiki"},{"name":"nisalp","email":"nisal@dossiers.wiki"},{"name":"kevinaugustin","email":"kevin@dossiers.wiki"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/fingerprint-shared_0.2.0_1786097758592_0.5388898140550746"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-17T11:21:43.779Z","modified":"2026-08-07T10:15:58.926Z","0.1.0":"2026-07-17T11:21:44.089Z","0.1.1":"2026-07-27T12:16:27.639Z","0.1.2":"2026-07-30T12:15:13.466Z","0.2.0":"2026-08-07T10:15:58.735Z"},"description":"> Part of **[dossiers-fingerprint](https://github.com/justanotherkev/dossiers-fingerprint#readme)** — a > cookieless browser & device fingerprinting service that resolves a stable `visitorId`. > See the [repository root](https://github.com/justanotherkev/","maintainers":[{"name":"nimeshaperi","email":"nimesha@dossiers.wiki"},{"name":"nisalp","email":"nisal@dossiers.wiki"},{"name":"kevinaugustin","email":"kevin@dossiers.wiki"}],"readme":"# @dossier-wiki/fingerprint-shared\n\n> Part of **[dossiers-fingerprint](https://github.com/justanotherkev/dossiers-fingerprint#readme)** — a\n> cookieless browser & device fingerprinting service that resolves a stable `visitorId`.\n> See the [repository root](https://github.com/justanotherkev/dossiers-fingerprint#readme) for the full\n> architecture and the identify pipeline.\n\nThe signal **contract** shared by the browser agent and the server: the zod schema, the\ndeterministic normalizers, the hashing helpers, and the weighted similarity scorer.\nEverything here is pure and dependency-light (just `zod`), so both sides can import it\nand stay in lockstep.\n\n## Install\n\n```bash\nnpm install @dossier-wiki/fingerprint-shared\n```\n\n## What's exported\n\n| Export | Purpose |\n| --- | --- |\n| `signalsSchema`, `identifyRequestSchema`, `identifyResponseSchema` | zod schemas, plus the inferred `Signals`, `IdentifyRequest`, `IdentifyResponse` types. |\n| `normalizeSignals`, `canonicalize`, `canonicalJson` | Canonicalize signals into a deterministic form before hashing. |\n| `strictHash`, `bucketKey` | Exact-match hash and the coarse fuzzy-match bucket key. |\n| `similarity`, `jaccard`, `trigramSimilarity`, `MATCH_THRESHOLD` | Weighted similarity scoring between two signal sets. |\n| `SIGNAL_WEIGHTS`, `STRICT_SIGNALS`, `BUCKET_SIGNALS`, `SET_SIGNALS`, `FUZZY_STRING_SIGNALS` | The tunable weighting/config the scorer and hashers use. |\n| `sha256Hex` | Hashing primitive (also available at the `/sha256` subpath). |\n\nReusable test fixtures are published at the `@dossier-wiki/fingerprint-shared/testing`\nsubpath.\n\n## Example\n\n```ts\nimport { normalizeSignals, strictHash, similarity } from '@dossier-wiki/fingerprint-shared';\n\nconst norm = normalizeSignals(rawSignals);\nconst hash = strictHash(norm);\nconst { score } = similarity(norm, otherSignals); // 0..1, compare against MATCH_THRESHOLD\n```\n","readmeFilename":"README.md"}