Fingerprint
Hashes configurable request fields (IP address, user agent, date, etc.) into a deterministic identifier and stores it on the event. No cookies, no PII stored. The same combination of inputs always produces the same hash, enabling server-side session continuity, cookie-free analytics, and cross-domain stitching without client-side IDs.
Installation
- Integrated
- Bundled
Configuration
This transformer uses the standard transformer config wrapper (consent, data, env, id, ...). For the shared fields see transformer configuration. Package-specific fields live under config.settings and are listed below.
Settings
| Property | Type | Description | More |
|---|---|---|---|
fields | Array<any> | Fields to include in hash (order matters). Each resolved via getMappingValue with source { event, ingest }. | |
output | string | Dot-notation path where hash is stored on the event. Default: "user.hash" | |
length | integer | Truncate hash to this length. Default: full 64-char SHA-256 hash |
Mapping
This package does not define custom rule-level settings. For the standard rule fields (consent, condition, data, batch, name, policy) see mapping.
Examples
ip anonymization
missing fields
server fingerprint
Fields are resolved from { event, ingest } using walkerOS mapping. String values use dot notation ("ingest.ip"). Function values compute dynamically ({ fn: () => new Date().getDate() }).
Daily rotation
Without rotation, the same IP + user agent always produce the same hash, indefinitely. To limit persistence, add a daily rotation field:
The hash resets each day, limiting cross-day tracking while maintaining session continuity within a day.
IP anonymization
To avoid including the raw IP in the hash input, transform it before hashing:
Result
The hash is stored at the configured output path on the event:
If any field is missing (e.g., ingest.ip is undefined), it is treated as an empty string. The transformer never throws.