From c803416848a4fe789b773a756d0b22c7d9f564f1 Mon Sep 17 00:00:00 2001 From: Gregory Oschwald Date: Mon, 23 Feb 2026 15:20:10 -0800 Subject: [PATCH] Add trackingToken to Device request object This adds the optional trackingToken field to the Device request object for explicit device linking via the Device Tracking Add-on. Co-Authored-By: Claude Opus 4.6 --- CHANGELOG.md | 8 +++++++ README.md | 1 + .../com/maxmind/minfraud/request/Device.java | 21 +++++++++++++++++++ .../maxmind/minfraud/request/DeviceTest.java | 7 +++++++ .../minfraud/request/RequestTestHelper.java | 1 + .../test-data/full-request-email-md5.json | 3 ++- .../resources/test-data/full-request.json | 3 ++- 7 files changed, 42 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e340f9e..b6ebab6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ CHANGELOG ========= +4.2.0 +------------------ + +* Added `trackingToken` to the `Device` request object. This is the token + generated by the + [Device Tracking Add-on](https://dev.maxmind.com/minfraud/track-devices) + for explicit device linking. + 4.1.0 (2026-01-20) ------------------ diff --git a/README.md b/README.md index 2d4519f3..f25811f2 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,7 @@ Transaction request = new Transaction.Builder( .acceptLanguage("en-US") .sessionAge(3600.6) .sessionId("foobar") + .trackingToken("abc123") .userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36") .build() ).account( diff --git a/src/main/java/com/maxmind/minfraud/request/Device.java b/src/main/java/com/maxmind/minfraud/request/Device.java index 48a03e8f..27644656 100644 --- a/src/main/java/com/maxmind/minfraud/request/Device.java +++ b/src/main/java/com/maxmind/minfraud/request/Device.java @@ -13,6 +13,7 @@ public final class Device extends AbstractModel { private final String acceptLanguage; private final Double sessionAge; private final String sessionId; + private final String trackingToken; private Device(Device.Builder builder) { ipAddress = builder.ipAddress; @@ -20,6 +21,7 @@ private Device(Device.Builder builder) { acceptLanguage = builder.acceptLanguage; sessionAge = builder.sessionAge; sessionId = builder.sessionId; + trackingToken = builder.trackingToken; } /** @@ -32,6 +34,7 @@ public static final class Builder { String acceptLanguage; Double sessionAge; String sessionId; + String trackingToken; /** * Constructor for the {@code Device.Builder} class @@ -100,6 +103,16 @@ public Device.Builder sessionId(String sessionId) { return this; } + /** + * @param trackingToken The tracking token generated by the Device Tracking Add-on + * for explicit device linking. + * @return The builder object. + */ + public Device.Builder trackingToken(String trackingToken) { + this.trackingToken = trackingToken; + return this; + } + /** * @return An instance of {@code Device} created from the fields set on this builder. */ @@ -140,6 +153,14 @@ public String sessionId() { return sessionId; } + /** + * @return The tracking token. + */ + @JsonProperty("tracking_token") + public String trackingToken() { + return trackingToken; + } + /** * @return The IP address used in the transaction. */ diff --git a/src/test/java/com/maxmind/minfraud/request/DeviceTest.java b/src/test/java/com/maxmind/minfraud/request/DeviceTest.java index b3b49952..391aa972 100644 --- a/src/test/java/com/maxmind/minfraud/request/DeviceTest.java +++ b/src/test/java/com/maxmind/minfraud/request/DeviceTest.java @@ -61,4 +61,11 @@ public void testSessionId() { var device = new Builder(ip).sessionId(id).build(); assertEquals(id, device.sessionId()); } + + @Test + public void testTrackingToken() { + var token = "abc123"; + var device = new Builder(ip).trackingToken(token).build(); + assertEquals(token, device.trackingToken()); + } } diff --git a/src/test/java/com/maxmind/minfraud/request/RequestTestHelper.java b/src/test/java/com/maxmind/minfraud/request/RequestTestHelper.java index 1ba4315a..606ca5bd 100644 --- a/src/test/java/com/maxmind/minfraud/request/RequestTestHelper.java +++ b/src/test/java/com/maxmind/minfraud/request/RequestTestHelper.java @@ -53,6 +53,7 @@ private static Transaction makeTransaction(Email e) throws Exception { .sessionAge(3600.5) .sessionId("foobar") .acceptLanguage("en-US,en;q=0.8") + .trackingToken("tst_abc123") .build() ) .event( diff --git a/src/test/resources/test-data/full-request-email-md5.json b/src/test/resources/test-data/full-request-email-md5.json index eaa7b5d8..97150805 100644 --- a/src/test/resources/test-data/full-request-email-md5.json +++ b/src/test/resources/test-data/full-request-email-md5.json @@ -93,6 +93,7 @@ "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36", "session_age": 3600.5, "session_id": "foobar", - "accept_language": "en-US,en;q=0.8" + "accept_language": "en-US,en;q=0.8", + "tracking_token": "tst_abc123" } } diff --git a/src/test/resources/test-data/full-request.json b/src/test/resources/test-data/full-request.json index a2a70cce..09658526 100644 --- a/src/test/resources/test-data/full-request.json +++ b/src/test/resources/test-data/full-request.json @@ -93,6 +93,7 @@ "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36", "session_age": 3600.5, "session_id": "foobar", - "accept_language": "en-US,en;q=0.8" + "accept_language": "en-US,en;q=0.8", + "tracking_token": "tst_abc123" } }