Skip to main content

Fingerprint

Server Source code Package

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

Loading...
Loading...

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

PropertyTypeDescriptionMore
fields*Array<any>Fields to include in hash (order matters). Each resolved via getMappingValue with source { event, ingest }.
outputstringDot-notation path where hash is stored on the event. Default: "user.hash"
lengthintegerTruncate hash to this length. Default: full 64-char SHA-256 hash
* Required fields

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

Privacy-preserving fingerprint using key+fn pattern: fn truncates IP to /24 subnet before hashing, so 10.0.42.* users share a hash. Config: fields: [{ key: "ingest.ip", fn: ip => ip.replace(/\.\d+$/, ".0") }, "ingest.userAgent"]

Event
Out

Server fingerprint

Standard server fingerprint using ingest.ip and ingest.userAgent. Requires source config.ingest.

Event
Out

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:

Loading...

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:

Loading...

Result

The hash is stored at the configured output path on the event:

Loading...

If any field is missing (e.g., ingest.ip is undefined), it is treated as an empty string. The transformer never throws.

💡 Need implementation support?
elbwalker offers hands-on support: setup review, measurement planning, destination mapping, and live troubleshooting. Book a 2-hour session (€399)