Rule expressions are written using a simple expression language. It provides a rich set of operators and builtin functions, and allows you to create flexible conditions and criteria. You can use available data fields with available operators and functions.Documentation Index
Fetch the complete documentation index at: https://docs.fingerprint.com/llms.txt
Use this file to discover all available pages before exploring further.
Data fields
| Key | Type | Notes |
|---|---|---|
http.user_agent.is_ai_bot | bool | Whether the UserAgent string matches the criteria for AI Bots. |
http.user_agent.is_crawler_bot | bool | Whether the UserAgent string matches the criteria for Crawler Bots. |
http.user_agent.string | string | The full UserAgent string. |
http.request.headers | http_headers | The map of HTTP request headers. |
http.request.ip | ip | IP address of the client making the request. |
sdk.platform.name | string | Name of the SDK platform (i.e. one of js, android, ios, unknown). |
sdk.version | string | Version of the SDK platform. Example value: 1.2.3. |
sdk.platform.app_package_name | string | Name of the mobile app bundle, if the request came from a mobile SDK (android or ios). |
sdk.platform.is_android | bool | Flag indicating if request came from Android device. |
sdk.platform.is_browser | bool | Flag indicating if request came from a web browser. |
sdk.platform.is_ios | bool | Flag indicating if request came from iOS device. |
sdk.platform.is_unknown | bool | Flag indicating if request came from an unknown platform. |
Operators
LHS stands for left-hand side of the operation, RHS stands for right-hand side of the operation.
Equality
LHS == RHS- returnstrueif both sides are equalLHS != RHS- returnstrueif both sides are different
Numerical
WhenLHS and RHSare numerical values.
LHS < RHS- returnstrueifLHSis less thanRHSLHS > RHS- returnstrueifLHSis more thanRHSLHS <= RHS- returnstrueifLHSis less than or equal toRHSLHS >= RHS- returnstrueifLHSis more than or equal toRHS
Logical
WhenLHS and RHSare boolean values.
!LHS- returns the opposite boolean value ofLHSLHS && RHS- returnstrueif bothLHSandRHSaretrueLHS || RHS- returnstrueif eitherLHSorRHSaretrue
Strings
WhenLHS and RHSare strings.
LHS contains RHS- returnstrueifRHSis a contained inLHSLHS not contains RHS- returnstrueifRHSis not contained inLHS
RegEx matching
WhenLHS is a string, and RHS is a string literal with a RegEx pattern. Pattern needs to be enclosed with backticks (`).
LHS matches RHS- returnstrueifLHSmatches the regular expression in theRHSLHS not matches RHS- returnstrueifLHSdoes not match the regular expression in theRHS
Arrays
WhenLHSis an array.
LHS in RHS- returnstruewhetherLHSis in (or belongs to)RHSLHS not in RHS- returns the opposite ofLHS in RHSLHS[RHS]- returns the value at numeric indexRHSin the arrayLHS, returnsnilfor missing values
Objects
WhenLHSis an object.
LHS in RHS- returnstruewhetherLHSis in (or belongs to)RHS:LHS not in RHS- returns the opposite ofLHS in RHS.LHS[RHS]- returns the value at string fieldRHSin the objectLHS. Returnsnilfor missing valuesLHS.RHSis equivalent toLHS[RHS]whereLHSis anobject, andRHSis an unquotedstringliteral that can be used as an identifier.
http.requestis equivalent tohttp["request"].http.request.headers.origin.0produces an error because the unquotedstringliteral0cannot be used as an identifier.
Functions and custom data types
Describes additional functions and special data types available during rule evaluation.Strings
upper(string) -> string- transforms the string to all uppercase characterslower(string) -> string- - transforms the string to all lowercase charactersstarts_with(source string, substring string) -> boolends_with(source string, substring string) -> bool
HTTP headers
The Custom Typehttp_headers behaves similar to an object, but it’s keys are normalized to be in MIME Header format in all operations (so usage is case-insensitive), and its values are of type array and contain the values for the given header name, preserving the original order. Examples:
- Check if a header was set:
"cOnTeNt-TyPe" in http.request.headers - Get the first cookie that was set:
http.request.headers["accept"][0]
IP address and CIDR
The Custom Typeip represents an IPv4 or IPv6 address.
The Custom Type cidr represents an IPv4 or IPv6 CIDR range.
cidr(string) -> cidrparses an IPv4 or IPv6 CIDR.- The
inoperator can be used to check if anipis in a givencidr.
- The
- Check if IP address belongs to a CIDR range:
http.request.ip in cidr("1.1.1.1/10")
Semantic versioning
semver_is_valid(string) -> bool- checks if given string is a valid semver stringsemver_compare(s1, s2) -> int- compares two semver strings- returns
-1ifs2 < s1,1ifs2 > s1, or0if they are equal
- returns