User story
As a deployer, I want device classification to be a selectable module whose default makes no host-specific call, so that the default path privileges no host and I can opt into a stronger signal where my host provides one.
Description
Introduce a DeviceModule interface that produces the coarse browser and bot classification the Edge Cookie gate uses. The default module is User-Agent only and makes no host-specific call. Add an opt-in module, fastly, that strengthens the classification with the JA4 (TLS) and HTTP/2 probabilistic identifiers the host exposes, gathered only when that module is selected. These signals serve identifier gating and bot detection, not bid enrichment, and a richer device model for the ad request is a separate concern.
Done when
- A
DeviceModule interface is selected by [device] module.
- The default is User-Agent only and makes no host-specific call.
- An opt-in module reads the host's JA4 and HTTP/2 probabilistic identifiers, gathered only when selected.
- The bot gate works on the User-Agent-only default.
References
User story
As a deployer, I want device classification to be a selectable module whose default makes no host-specific call, so that the default path privileges no host and I can opt into a stronger signal where my host provides one.
Description
Introduce a
DeviceModuleinterface that produces the coarse browser and bot classification the Edge Cookie gate uses. The default module is User-Agent only and makes no host-specific call. Add an opt-in module,fastly, that strengthens the classification with the JA4 (TLS) and HTTP/2 probabilistic identifiers the host exposes, gathered only when that module is selected. These signals serve identifier gating and bot detection, not bid enrichment, and a richer device model for the ad request is a separate concern.Done when
DeviceModuleinterface is selected by[device] module.References
crates/device/fastly.