Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 3 additions & 6 deletions .github/workflows/functional.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,14 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
java: [ '11', '17', '21' ]
java: [ '11', '17', '21', '25' ]

steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
- uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '${{ matrix.java }}'
- run: ./gradlew runFunctionalTests
# Gradle will detect the JVM installation from the ubuntu-latest image and use it
- run: ./gradlew runFunctionalTests -PjavaVersion=${{ matrix.java }} --stacktrace
env:
FPJS_API_SECRET: "${{ secrets.FPJS_API_SECRET }}"
FPJS_API_REGION: "${{ secrets.FPJS_API_REGION }}"
Expand Down
15 changes: 4 additions & 11 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,17 @@ jobs:
name: Check source code formatting
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: 17
- run: ./gradlew :sdk:checkFormat :examples:checkFormat --continue

test:
runs-on: ubuntu-latest
name: Java ${{ matrix.Java }}
name: Java ${{ matrix.java }}
strategy:
matrix:
java: [ '11', '17', '21' ]
java: [ '11', '17', '21', '25' ]

steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '${{ matrix.java }}'
# Gradle will detect the JVM installation from the ubuntu-latest image and use it
# includes execution of unit tests
- run: ./gradlew build
- run: ./gradlew build -PjavaVersion=${{ matrix.java }} --stacktrace
41 changes: 41 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -92,4 +92,45 @@ fun Project.registerFormatTasks() {

subprojects {
registerFormatTasks()

plugins.withType<org.gradle.api.plugins.JavaPlugin> {
tasks.withType<JavaCompile> {
// Target java 11
options.release = 11

// Enable all warnings and fail the build for any warnings
options.compilerArgs.addAll(listOf("-Xlint:all", "-Werror"))
}

// Print Java toolchain for compilation
tasks.withType<JavaCompile>().configureEach {
doFirst {
println("Compiling with Java: ${javaCompiler.get().metadata.installationPath} (version: ${javaCompiler.get().metadata.languageVersion})")
}
}

// Print Java toolchain used for running tests
tasks.withType<Test>().configureEach {
doFirst {
val launcher = javaLauncher.orNull
if (launcher != null) {
println("Testing with Java: ${launcher.metadata.installationPath} (version: ${launcher.metadata.languageVersion})")
} else {
println("Testing with Java: launcher not set")
}
}
}

// Print Java toolchain used for running
tasks.withType<JavaExec>().configureEach {
doFirst {
val launcher = javaLauncher.orNull
if (launcher != null) {
println("Running JavaExec with Java: ${launcher.metadata.installationPath} (version: ${launcher.metadata.languageVersion})")
} else {
println("Running JavaExec with Java: launcher not set")
}
}
}
}
}
2 changes: 2 additions & 0 deletions docs/BotInfo.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ Extended bot information.
| SIGNED | "signed" |
| SPOOFED | "spoofed" |
| UNKNOWN | "unknown" |
| UNSUPPORTED_VALUE_SDK_UPGRADE_REQUIRED | "unsupported_value_sdk_upgrade_required" |



Expand All @@ -35,6 +36,7 @@ Extended bot information.
| LOW | "low" |
| MEDIUM | "medium" |
| HIGH | "high" |
| UNSUPPORTED_VALUE_SDK_UPGRADE_REQUIRED | "unsupported_value_sdk_upgrade_required" |



2 changes: 2 additions & 0 deletions docs/BotResult.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,7 @@ Bot detection result:

* `NOT_DETECTED` (value: `"not_detected"`)

* `UNSUPPORTED_VALUE_SDK_UPGRADE_REQUIRED` (value: `"unsupported_value_sdk_upgrade_required"`)



2 changes: 2 additions & 0 deletions docs/ErrorCode.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,5 +66,7 @@ Error code:

* `RULESET_NOT_FOUND` (value: `"ruleset_not_found"`)

* `UNSUPPORTED_VALUE_SDK_UPGRADE_REQUIRED` (value: `"unsupported_value_sdk_upgrade_required"`)



10 changes: 5 additions & 5 deletions docs/Event.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ Contains results from Fingerprint Identification and all active Smart Signals.
|**timestamp** | **Long** | Timestamp of the event with millisecond precision in Unix time. | |
|**linkedId** | **String** | A customer-provided id that was sent with the request. | [optional] |
|**environmentId** | **String** | Environment Id of the event. For example: `ae_47abaca3db2c7c43` | [optional] |
|**suspect** | **Boolean** | Field is `true` if you have previously set the `suspect` flag for this event using the [Server API Update event endpoint](https://dev.fingerprint.com/reference/updateevent). | [optional] |
|**suspect** | **Boolean** | Field is `true` if you have previously set the `suspect` flag for this event using the [Server API Update event endpoint](https://docs.fingerprint.com/reference/server-api-v4-update-event). | [optional] |
|**sdk** | [**SDK**](SDK.md) | | [optional] |
|**replayed** | **Boolean** | `true` if we determined that this payload was replayed, `false` otherwise. | [optional] |
|**identification** | [**Identification**](Identification.md) | | [optional] |
|**supplementaryIdHighRecall** | [**SupplementaryIDHighRecall**](SupplementaryIDHighRecall.md) | | [optional] |
|**tags** | **Object** | A customer-provided value or an object that was sent with the identification request or updated later. | [optional] |
|**tags** | **Map&lt;String, Object&gt;** | A customer-provided value or an object that was sent with the identification request or updated later. | [optional] |
|**url** | **String** | Page URL from which the request was sent. For example `https://example.com/` | [optional] |
|**bundleId** | **String** | Bundle Id of the iOS application integrated with the Fingerprint SDK for the event. For example: `com.foo.app` | [optional] |
|**packageName** | **String** | Package name of the Android application integrated with the Fingerprint SDK for the event. For example: `com.foo.app` | [optional] |
Expand All @@ -32,7 +32,7 @@ Contains results from Fingerprint Identification and all active Smart Signals.
|**clonedApp** | **Boolean** | Android specific cloned application detection. There are 2 values: * `true` - Presence of app cloners work detected (e.g. fully cloned application found or launch of it inside of a not main working profile detected). * `false` - No signs of cloned application detected or the client is not Android. | [optional] |
|**developerTools** | **Boolean** | `true` if the browser is Chrome with DevTools open or Firefox with Developer Tools open, `false` otherwise. | [optional] |
|**emulator** | **Boolean** | Android specific emulator detection. There are 2 values: * `true` - Emulated environment detected (e.g. launch inside of AVD). * `false` - No signs of emulated environment detected or the client is not Android. | [optional] |
|**factoryResetTimestamp** | **Long** | The time of the most recent factory reset that happened on the **mobile device** is expressed as Unix epoch time. When a factory reset cannot be detected on the mobile device or when the request is initiated from a browser, this field will correspond to the *epoch* time (i.e 1 Jan 1970 UTC) as a value of 0. See [Factory Reset Detection](https://dev.fingerprint.com/docs/smart-signals-overview#factory-reset-detection) to learn more about this Smart Signal. | [optional] |
|**factoryResetTimestamp** | **Long** | The time of the most recent factory reset that happened on the **mobile device** is expressed as Unix epoch time. When a factory reset cannot be detected on the mobile device or when the request is initiated from a browser, this field will correspond to the *epoch* time (i.e 1 Jan 1970 UTC) as a value of 0. See [Factory Reset Detection](https://docs.fingerprint.com/docs/smart-signals-reference#factory-reset-detection) to learn more about this Smart Signal. | [optional] |
|**frida** | **Boolean** | [Frida](https://frida.re/docs/) detection for Android and iOS devices. There are 2 values: * `true` - Frida detected * `false` - No signs of Frida or the client is not a mobile device. | [optional] |
|**ipBlocklist** | [**IPBlockList**](IPBlockList.md) | | [optional] |
|**ipInfo** | [**IPInfo**](IPInfo.md) | | [optional] |
Expand All @@ -42,11 +42,11 @@ Contains results from Fingerprint Identification and all active Smart Signals.
|**incognito** | **Boolean** | `true` if we detected incognito mode used in the browser, `false` otherwise. | [optional] |
|**jailbroken** | **Boolean** | iOS specific jailbreak detection. There are 2 values: * `true` - Jailbreak detected. * `false` - No signs of jailbreak or the client is not iOS. | [optional] |
|**locationSpoofing** | **Boolean** | Flag indicating whether the request came from a mobile device with location spoofing enabled. | [optional] |
|**mitmAttack** | **Boolean** | * `true` - When requests made from your users' mobile devices to Fingerprint servers have been intercepted and potentially modified. * `false` - Otherwise or when the request originated from a browser. See [MitM Attack Detection](https://dev.fingerprint.com/docs/smart-signals-reference#mitm-attack-detection) to learn more about this Smart Signal. | [optional] |
|**mitmAttack** | **Boolean** | * `true` - When requests made from your users' mobile devices to Fingerprint servers have been intercepted and potentially modified. * `false` - Otherwise or when the request originated from a browser. See [MitM Attack Detection](https://docs.fingerprint.com/docs/smart-signals-reference#mitm-attack-detection) to learn more about this Smart Signal. | [optional] |
|**privacySettings** | **Boolean** | `true` if the request is from a privacy aware browser (e.g. Tor) or from a browser in which fingerprinting is blocked. Otherwise `false`. | [optional] |
|**rootApps** | **Boolean** | Android specific root management apps detection. There are 2 values: * `true` - Root Management Apps detected (e.g. Magisk). * `false` - No Root Management Apps detected or the client isn't Android. | [optional] |
|**ruleAction** | [**EventRuleAction**](EventRuleAction.md) | | [optional] |
|**suspectScore** | **Integer** | Suspect Score is an easy way to integrate Smart Signals into your fraud protection work flow. It is a weighted representation of all Smart Signals present in the payload that helps identify suspicious activity. The value range is [0; S] where S is sum of all Smart Signals weights. See more details here: https://dev.fingerprint.com/docs/suspect-score | [optional] |
|**suspectScore** | **Integer** | Suspect Score is an easy way to integrate Smart Signals into your fraud protection work flow. It is a weighted representation of all Smart Signals present in the payload that helps identify suspicious activity. The value range is [0; S] where S is sum of all Smart Signals weights. See more details here: https://docs.fingerprint.com/docs/suspect-score | [optional] |
|**tampering** | **Boolean** | Flag indicating browser tampering was detected. This happens when either: * There are inconsistencies in the browser configuration that cross internal tampering thresholds (see `tampering_details.anomaly_score`). * The browser signature resembles an \"anti-detect\" browser specifically designed to evade fingerprinting (see `tampering_details.anti_detect_browser`). | [optional] |
|**tamperingDetails** | [**TamperingDetails**](TamperingDetails.md) | | [optional] |
|**velocity** | [**Velocity**](Velocity.md) | | [optional] |
Expand Down
2 changes: 1 addition & 1 deletion docs/EventUpdate.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
| Name | Type | Description | Notes |
|------------ | ------------- | ------------- | -------------|
|**linkedId** | **String** | Linked Id value to assign to the existing event | [optional] |
|**tags** | **Object** | A customer-provided value or an object that was sent with the identification request or updated later. | [optional] |
|**tags** | **Map&lt;String, Object&gt;** | A customer-provided value or an object that was sent with the identification request or updated later. | [optional] |

@ilfa ilfa Feb 27, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another place with html symbols instead of utf

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think < and > still need to use HTML escapes because some HTML tags are allowed in Markdown. I don't think this particular case has issues if it is not escaped (i.e. Map<String, Object>), but if it were instead List<String>, the <String> isn't rendered because the parser thinks that an HTML tag.

So, rather than try to identify the cases where there is a single generic type parameter in a data type, I opted to leave the data types escaped

|**suspect** | **Boolean** | Suspect flag indicating observed suspicious or fraudulent event | [optional] |


Expand Down
Loading
Loading