From 85f9d3a415efa5de06fff7a094d3823baecaa440 Mon Sep 17 00:00:00 2001 From: Ilya Taratukhin Date: Fri, 15 Mar 2024 17:02:11 +0100 Subject: [PATCH 01/13] test: update mocks names --- res/fingerprint-server-api.yaml | 841 ++++++++++++------ sync.sh | 22 +- .../{get_event.json => get_event_200.json} | 98 +- ...ors.json => get_event_200_all_errors.json} | 18 + ...n => get_event_200_botd_failed_error.json} | 1 + ...ent_200_botd_too_many_requests_error.json} | 1 + ...s.json => get_event_200_extra_fields.json} | 3 + ...event_200_identification_failed_error.json | 23 + ...dentification_too_many_requests_error.json | 23 + ...get_event_identification_failed_error.json | 20 - ...dentification_too_many_requests_error.json | 20 - ...mit_1.json => get_visits_200_limit_1.json} | 2 +- ...500.json => get_visits_200_limit_500.json} | 0 ...3_error.json => get_visits_403_error.json} | 0 ...t_visits_429_too_many_requests_error.json} | 0 ...too_many_requests_error_empty_header.json} | 0 test/mocks/webhook.json | 4 + test/test_fingerprint_api.py | 16 +- 18 files changed, 732 insertions(+), 360 deletions(-) rename test/mocks/{get_event.json => get_event_200.json} (73%) rename test/mocks/{get_event_all_errors.json => get_event_200_all_errors.json} (86%) rename test/mocks/{get_event_botd_failed_error.json => get_event_200_botd_failed_error.json} (98%) rename test/mocks/{get_event_botd_too_many_requests_error.json => get_event_200_botd_too_many_requests_error.json} (98%) rename test/mocks/{get_event_extra_fields.json => get_event_200_extra_fields.json} (90%) create mode 100644 test/mocks/get_event_200_identification_failed_error.json create mode 100644 test/mocks/get_event_200_identification_too_many_requests_error.json delete mode 100644 test/mocks/get_event_identification_failed_error.json delete mode 100644 test/mocks/get_event_identification_too_many_requests_error.json rename test/mocks/{visits_limit_1.json => get_visits_200_limit_1.json} (99%) rename test/mocks/{visits_limit_500.json => get_visits_200_limit_500.json} (100%) rename test/mocks/{visits_403_error.json => get_visits_403_error.json} (100%) rename test/mocks/{visits_too_many_requests_error.json => get_visits_429_too_many_requests_error.json} (100%) rename test/mocks/{visits_too_many_requests_error_empty_header.json => get_visits_429_too_many_requests_error_empty_header.json} (100%) diff --git a/res/fingerprint-server-api.yaml b/res/fingerprint-server-api.yaml index da9215cd..470c3e7b 100644 --- a/res/fingerprint-server-api.yaml +++ b/res/fingerprint-server-api.yaml @@ -51,7 +51,7 @@ paths: request. **Only for Enterprise customers:** Please note that the response - includes mobile signals (e.g. `rootApps`) even if the request orignated + includes mobile signals (e.g. `rootApps`) even if the request originated from a non-mobile platform. It is highly recommended that you **ignore** the mobile signals for such @@ -85,12 +85,13 @@ paths: identification: data: visitorId: Ibk1527CUFmcnjLwIs4A9 - requestId: 0KSh65EnVoB85JBmloQK + requestId: 1708102555327.NLOjmg incognito: true linkedId: somelinkedId + tag: {} time: '2019-05-21T16:40:13Z' timestamp: 1582299576512 - url: https://www.example.com/login + url: https://www.example.com/login?hope{this{works[! ip: 61.127.217.15 ipLocation: accuracyRadius: 10 @@ -100,12 +101,12 @@ paths: timezone: Europe/Dusseldorf city: name: Dusseldorf - continent: - code: EU - name: Europe country: code: DE name: Germany + continent: + code: EU + name: Europe subdivisions: - isoCode: '63' name: North Rhine-Westphalia @@ -119,20 +120,31 @@ paths: userAgent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) .... confidence: score: 0.97 - visitorFound: true + visitorFound: false firstSeenAt: global: '2022-03-16T11:26:45.362Z' subscription: '2022-03-16T11:31:01.101Z' lastSeenAt: - global: '2022-03-16T11:28:34.023Z' + global: null subscription: null botd: data: bot: result: notDetected - url: https://www.example.com/login + url: https://www.example.com/login?hope{this{works}[! ip: 61.127.217.15 time: '2019-05-21T16:40:13Z' + userAgent: >- + Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) + AppleWebKit/537.36 (KHTML, like Gecko) + Chrome/120.0.0.0 YaBrowser/24.1.0.0 Safari/537.36 + requestId: 1708102555327.NLOjmg + rootApps: + data: + result: false + emulator: + data: + result: false ipInfo: data: v4: @@ -161,15 +173,32 @@ paths: datacenter: result: true name: DediPath - incognito: - data: - result: false - rootApps: - data: - result: false - emulator: - data: - result: false + v6: + address: 2001:db8:3333:4444:5555:6666:7777:8888 + geolocation: + accuracyRadius: 5 + latitude: 49.982 + longitude: 36.2566 + postalCode: '10112' + timezone: Europe/Berlin + city: + name: Berlin + country: + code: DE + name: Germany + continent: + code: EU + name: Europe + subdivisions: + - isoCode: BE + name: Land Berlin + asn: + asn: '6805' + name: Telefonica Germany + network: 2a02:3100::/24 + datacenter: + result: false + name: '' ipBlocklist: data: result: false @@ -183,6 +212,7 @@ paths: data: result: false originTimezone: Europe/Berlin + originCountry: unknown methods: timezoneMismatch: false publicVPN: false @@ -190,10 +220,13 @@ paths: proxy: data: result: false + incognito: + data: + result: false tampering: data: result: false - anomalyScore: 0 + anomalyScore: 0.1955 clonedApp: data: result: false @@ -227,11 +260,18 @@ paths: colorDepth: value: 30 colorGamut: - value: srgb + value: p3 contrast: value: 0 cookiesEnabled: value: true + cpuClass: {} + fonts: + value: + - Arial Unicode MS + - Gill Sans + - Helvetica Neue + - Menlo highActivity: data: result: false @@ -320,6 +360,18 @@ paths: error: name: Error message: internal server error + locationSpoofing: + error: + code: Failed + message: internal server error + highActivity: + error: + code: Failed + message: internal server error + suspectScore: + error: + code: Failed + message: internal server error withBotdError: summary: BotD error value: @@ -331,6 +383,7 @@ paths: incognito: true linkedId: somelinkedId time: '2019-05-21T16:40:13Z' + tag: {} timestamp: 1582299576512 url: https://www.example.com/login ip: 61.127.217.15 @@ -382,6 +435,7 @@ paths: requestId: 0KSh65EnVoB85JBmloQK incognito: true linkedId: somelinkedId + tag: {} time: '2019-05-21T16:40:13Z' timestamp: 1582299576512 url: https://www.example.com/login @@ -434,11 +488,17 @@ paths: message: failed botd: data: - url: https://example.com/login bot: - result: notDetected - ip: 61.127.217.15 - time: '2019-05-21T16:40:13Z' + result: bad + type: headlessChrome + url: https://example.com/login + ip: 94.60.143.223 + time: '2024-02-23T10:20:25.287Z' + userAgent: >- + Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) + AppleWebKit/537.36 (KHTML, like Gecko) + HeadlessChrome/121.0.6167.57 Safari/537.36 + requestId: 1708683625245.tuJ4nD withIdentificationTooManyRequestsError: summary: Identification too many requests error value: @@ -449,11 +509,17 @@ paths: message: too many requests botd: data: - url: https://example.com/login bot: - result: notDetected - ip: 61.127.217.15 - time: '2019-05-21T16:40:13Z' + result: bad + type: headlessChrome + url: https://example.com/login + ip: 94.60.143.223 + time: '2024-02-23T10:20:25.287Z' + userAgent: >- + Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) + AppleWebKit/537.36 (KHTML, like Gecko) + HeadlessChrome/121.0.6167.57 Safari/537.36 + requestId: 1708683625245.tuJ4nD '403': description: Forbidden content: @@ -3718,6 +3784,7 @@ paths: vpn: result: false originTimezone: Europe/Berlin + originCountry: unknown methods: timezoneMismatch: false publicVPN: false @@ -3762,6 +3829,8 @@ paths: result: false locationSpoofing: result: true + suspectScore: + result: 0 responses: default: description: The server doesn't validate the answer. @@ -3802,7 +3871,53 @@ components: format: ipv4 example: 8.8.8.8 ipLocation: - $ref: '#/components/schemas/IPLocation' + type: object + additionalProperties: false + deprecated: true + description: >- + This field is **deprecated** and will not return a result for + **applications created after January 23rd, 2024**. Please use + the [IP Geolocation Smart + signal](https://dev.fingerprint.com/docs/smart-signals-overview#ip-geolocation) + for geolocation information. + properties: + accuracyRadius: + description: >- + The IP address is likely to be within this radius (in km) + of the specified location. + type: integer + minimum: 0 + latitude: + type: number + format: double + minimum: -90 + maximum: 90 + longitude: + type: number + format: double + minimum: -180 + maximum: 180 + postalCode: + type: string + timezone: + type: string + format: timezone + city: + type: object + additionalProperties: false + title: DeprecatedIPLocationCity + properties: + name: + type: string + country: + $ref: '#/components/schemas/Location' + continent: + $ref: '#/components/schemas/Location' + subdivisions: + type: array + items: + $ref: '#/components/schemas/Subdivision' + title: DeprecatedIPLocation timestamp: description: >- Timestamp of the event with millisecond precision in Unix @@ -3817,9 +3932,8 @@ components: format: date-time example: '2022-06-09T22:58:36Z' url: - description: Page URL from which identification request was sent. + description: Page URL from which the identification request was sent. type: string - format: uri example: https://some.website/path?query=params tag: description: >- @@ -3845,7 +3959,6 @@ components: additionalProperties: false required: - browserDetails - - confidence - firstSeenAt - incognito - ip @@ -3854,8 +3967,8 @@ components: - time - timestamp - url - - visitorFound - tag + - visitorFound lastTimestamp: description: > ⚠️ Deprecated paging attribute, please use `paginationKey` instead. @@ -3971,129 +4084,29 @@ components: description: Flag if user used incognito session. type: boolean rootApps: - title: WebhookSignalResponseRootApps - type: object - properties: - result: - type: boolean - description: > - 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. - example: false + $ref: '#/components/schemas/RootAppsResult' emulator: - title: WebhookSignalResponseEmulator - type: object - properties: - result: - type: boolean - description: > - 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 isn't Android. - example: false + $ref: '#/components/schemas/EmulatorResult' clonedApp: - title: WebhookSignalResponseClonedApp - type: object - properties: - result: - type: boolean - description: > - 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. - example: false + $ref: '#/components/schemas/ClonedAppResult' factoryReset: - title: WebhookSignalResponseFactoryReset - type: object - properties: - time: - title: Time - description: > - Time in UTC for the Android client when recent factory reset was - done. If there is no sign of factory reset or the client isn't - Android, the field will be epoch time. - type: string - format: date-time - example: '2022-06-09T22:58:36Z' - timestamp: - description: >- - Same value as it's in the `time` field but represented in - timestamp format. - type: integer - format: int64 - example: 1654815517198 + $ref: '#/components/schemas/FactoryResetResult' jailbroken: - title: WebhookSignalResponseJailbroken - type: object - properties: - result: - type: boolean - description: > - iOS specific jailbreak detection. There are 2 values: • `true` - - Jailbreak detected • `false` - No signs of jailbreak or the - client is not iOS. - example: false + $ref: '#/components/schemas/JailbrokenResult' frida: - title: WebhookSignalResponseFrida - type: object - properties: - result: - type: boolean - description: > - iOS specific [Frida](https://frida.re/docs/ios/) detection. - There are 2 values: • `true` - Frida detected • `false` - No - signs of Frida or the client is not iOS. - example: false + $ref: '#/components/schemas/FridaResult' ipBlocklist: $ref: '#/components/schemas/IpBlockListResult' tor: - title: WebhookSignalResponseTor - type: object - properties: - result: - type: boolean - description: > - `true` if the request IP address is a known tor exit node, - `false` otherwise. - example: false + $ref: '#/components/schemas/TorResult' privacySettings: - title: WebhookSignalResponsePrivacySettings - type: object - properties: - result: - type: boolean - description: > - `true` if the request is from a privacy aware browser (e.g. Tor) - or from a browser in which fingerprinting is blocked. Otherwise - `false`. - example: false + $ref: '#/components/schemas/PrivacySettingsResult' virtualMachine: - title: WebhookSignalResponseVirtualMachine - type: object - properties: - result: - type: boolean - description: > - `true` if the request came from a browser running inside a - virtual machine (e.g. VMWare), `false` otherwise. - example: false + $ref: '#/components/schemas/VirtualMachineResult' vpn: $ref: '#/components/schemas/VpnResult' proxy: - title: WebhookSignalResponseProxy - type: object - properties: - result: - type: boolean - description: > - `true` if the request IP address is used by a public proxy - provider, `false` otherwise. - example: false + $ref: '#/components/schemas/ProxyResult' tampering: $ref: '#/components/schemas/TamperingResult' rawDeviceAttributes: @@ -4102,6 +4115,8 @@ components: $ref: '#/components/schemas/HighActivityResult' locationSpoofing: $ref: '#/components/schemas/LocationSpoofingResult' + suspectScore: + $ref: '#/components/schemas/SuspectScoreResult' requestId: description: Unique identifier of the user's identification request. type: string @@ -4113,7 +4128,53 @@ components: format: ipv4 example: 8.8.8.8 ipLocation: - $ref: '#/components/schemas/IPLocation' + type: object + additionalProperties: false + deprecated: true + description: >- + This field is **deprecated** and will not return a result for + **applications created after January 23rd, 2024**. Please use the + [IP Geolocation Smart + signal](https://dev.fingerprint.com/docs/smart-signals-overview#ip-geolocation) + for geolocation information. + properties: + accuracyRadius: + description: >- + The IP address is likely to be within this radius (in km) of the + specified location. + type: integer + minimum: 0 + latitude: + type: number + format: double + minimum: -90 + maximum: 90 + longitude: + type: number + format: double + minimum: -180 + maximum: 180 + postalCode: + type: string + timezone: + type: string + format: timezone + city: + type: object + additionalProperties: false + title: DeprecatedIPLocationCity + properties: + name: + type: string + country: + $ref: '#/components/schemas/Location' + continent: + $ref: '#/components/schemas/Location' + subdivisions: + type: array + items: + $ref: '#/components/schemas/Subdivision' + title: DeprecatedIPLocation timestamp: description: Timestamp of the event with millisecond precision in Unix time. type: integer @@ -4126,9 +4187,8 @@ components: format: date-time example: '2022-06-09T22:58:36Z' url: - description: Page URL from which identification request was sent. + description: Page URL from which the identification request was sent. type: string - format: uri example: https://some.website/path?query=params tag: description: >- @@ -4153,7 +4213,6 @@ components: required: - visitorId - browserDetails - - confidence - firstSeenAt - incognito - ip @@ -4162,9 +4221,11 @@ components: - time - timestamp - url + - tag - visitorFound Visit: type: object + additionalProperties: false properties: requestId: description: Unique identifier of the user's identification request. @@ -4180,7 +4241,53 @@ components: format: ipv4 example: 8.8.8.8 ipLocation: - $ref: '#/components/schemas/IPLocation' + type: object + additionalProperties: false + deprecated: true + description: >- + This field is **deprecated** and will not return a result for + **applications created after January 23rd, 2024**. Please use the + [IP Geolocation Smart + signal](https://dev.fingerprint.com/docs/smart-signals-overview#ip-geolocation) + for geolocation information. + properties: + accuracyRadius: + description: >- + The IP address is likely to be within this radius (in km) of the + specified location. + type: integer + minimum: 0 + latitude: + type: number + format: double + minimum: -90 + maximum: 90 + longitude: + type: number + format: double + minimum: -180 + maximum: 180 + postalCode: + type: string + timezone: + type: string + format: timezone + city: + type: object + additionalProperties: false + title: DeprecatedIPLocationCity + properties: + name: + type: string + country: + $ref: '#/components/schemas/Location' + continent: + $ref: '#/components/schemas/Location' + subdivisions: + type: array + items: + $ref: '#/components/schemas/Subdivision' + title: DeprecatedIPLocation timestamp: description: Timestamp of the event with millisecond precision in Unix time. type: integer @@ -4193,9 +4300,8 @@ components: format: date-time example: '2022-06-09T22:58:36Z' url: - description: Page URL from which identification request was sent. + description: Page URL from which the identification request was sent. type: string - format: uri example: https://some.website/path?query=params tag: description: >- @@ -4218,7 +4324,6 @@ components: $ref: '#/components/schemas/SeenAt' required: - browserDetails - - confidence - firstSeenAt - incognito - ip @@ -4227,6 +4332,7 @@ components: - time - timestamp - url + - tag - visitorFound title: Visit BrowserDetails: @@ -4335,12 +4441,6 @@ components: IPLocation: type: object additionalProperties: false - deprecated: true - description: >- - This field is **deprecated** and will not return a result for **accounts - created after December 18th, 2023**. Please use the [`ipInfo` Smart - signal](https://dev.fingerprint.com/docs/smart-signals-overview#ip-geolocation) - for geolocation information. properties: accuracyRadius: description: >- @@ -4441,7 +4541,53 @@ components: format: ipv4 example: 8.8.8.8 ipLocation: - $ref: '#/components/schemas/IPLocation' + type: object + additionalProperties: false + deprecated: true + description: >- + This field is **deprecated** and will not return a result + for **applications created after January 23rd, 2024**. + Please use the [IP Geolocation Smart + signal](https://dev.fingerprint.com/docs/smart-signals-overview#ip-geolocation) + for geolocation information. + properties: + accuracyRadius: + description: >- + The IP address is likely to be within this radius (in + km) of the specified location. + type: integer + minimum: 0 + latitude: + type: number + format: double + minimum: -90 + maximum: 90 + longitude: + type: number + format: double + minimum: -180 + maximum: 180 + postalCode: + type: string + timezone: + type: string + format: timezone + city: + type: object + additionalProperties: false + title: DeprecatedIPLocationCity + properties: + name: + type: string + country: + $ref: '#/components/schemas/Location' + continent: + $ref: '#/components/schemas/Location' + subdivisions: + type: array + items: + $ref: '#/components/schemas/Subdivision' + title: DeprecatedIPLocation timestamp: description: >- Timestamp of the event with millisecond precision in Unix @@ -4456,9 +4602,8 @@ components: format: date-time example: '2022-06-09T22:58:36Z' url: - description: Page URL from which identification request was sent. + description: Page URL from which the identification request was sent. type: string - format: uri example: https://some.website/path?query=params tag: description: >- @@ -4493,7 +4638,6 @@ components: additionalProperties: false required: - browserDetails - - confidence - firstSeenAt - incognito - ip @@ -4502,6 +4646,7 @@ components: - time - timestamp - url + - tag - visitorFound - visitorId error: @@ -4518,6 +4663,7 @@ components: ipInfo: title: SignalResponseIpInfo type: object + additionalProperties: false properties: data: $ref: '#/components/schemas/IpInfoResult' @@ -4526,131 +4672,70 @@ components: incognito: title: SignalResponseIncognito type: object + additionalProperties: false properties: data: - type: object - properties: - result: - type: boolean - description: > - `true` if we detected incognito mode used in the browser, - `false` otherwise. - example: false + $ref: '#/components/schemas/IncognitoResult' error: $ref: '#/components/schemas/ProductError' rootApps: title: SignalResponseRootApps type: object + additionalProperties: false properties: data: - type: object - properties: - result: - type: boolean - description: > - 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 is not Android. - example: false + $ref: '#/components/schemas/RootAppsResult' error: $ref: '#/components/schemas/ProductError' emulator: title: SignalResponseEmulator type: object + additionalProperties: false properties: data: - type: object - properties: - result: - type: boolean - description: > - 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. - example: false + $ref: '#/components/schemas/EmulatorResult' error: $ref: '#/components/schemas/ProductError' clonedApp: title: SignalResponseClonedApp type: object + additionalProperties: false properties: data: - type: object - properties: - result: - type: boolean - description: > - 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. - example: false + $ref: '#/components/schemas/ClonedAppResult' error: $ref: '#/components/schemas/ProductError' factoryReset: title: SignalResponseFactoryReset type: object + additionalProperties: false properties: data: - type: object - properties: - time: - title: Time - description: > - Time in UTC for the Android client when recent factory reset - was done. If there is no sign of factory reset or the - client isn't Android, the field will be epoch time. - type: string - format: date-time - example: '2022-06-09T22:58:36Z' - timestamp: - description: >- - Same value as it's in the `time` field but represented in - timestamp format. - type: integer - format: int64 - example: 1654815517198 + $ref: '#/components/schemas/FactoryResetResult' error: $ref: '#/components/schemas/ProductError' jailbroken: title: SignalResponseJailbroken type: object + additionalProperties: false properties: data: - type: object - properties: - result: - type: boolean - description: > - iOS specific jailbreak detection. There are 2 values: • - `true` - Jailbreak detected • `false` - No signs of - jailbreak or the client is not iOS. - example: false + $ref: '#/components/schemas/JailbrokenResult' error: $ref: '#/components/schemas/ProductError' frida: title: SignalResponseFrida type: object + additionalProperties: false properties: data: - type: object - properties: - result: - type: boolean - description: > - iOS specific [Frida](https://frida.re/docs/ios/) detection. - There are 2 values: • `true` - Frida detected • `false` - No - signs of Frida or the client is not iOS. - example: false + $ref: '#/components/schemas/FridaResult' error: $ref: '#/components/schemas/ProductError' ipBlocklist: title: SignalResponseIpBlocklist type: object + additionalProperties: false properties: data: $ref: '#/components/schemas/IpBlockListResult' @@ -4659,52 +4744,34 @@ components: tor: title: SignalResponseTor type: object + additionalProperties: false properties: data: - type: object - properties: - result: - type: boolean - description: > - `true` if the request IP address is a known tor exit node, - `false` otherwise. - example: false + $ref: '#/components/schemas/TorResult' error: $ref: '#/components/schemas/ProductError' privacySettings: title: SignalResponsePrivacySettings type: object + additionalProperties: false properties: data: - type: object - properties: - result: - type: boolean - description: > - `true` if the request is from a privacy aware browser (e.g. - Tor) or from a browser in which fingerprinting is blocked. - Otherwise `false`. - example: false + $ref: '#/components/schemas/PrivacySettingsResult' error: $ref: '#/components/schemas/ProductError' virtualMachine: title: SignalResponseVirtualMachine type: object + additionalProperties: false properties: data: - type: object - properties: - result: - type: boolean - description: > - `true` if the request came from a browser running inside a - virtual machine (e.g. VMWare), `false` otherwise. - example: false + $ref: '#/components/schemas/VirtualMachineResult' error: $ref: '#/components/schemas/ProductError' vpn: title: SignalResponseVpn type: object + additionalProperties: false properties: data: $ref: '#/components/schemas/VpnResult' @@ -4713,21 +4780,16 @@ components: proxy: title: SignalResponseProxy type: object + additionalProperties: false properties: data: - type: object - properties: - result: - type: boolean - description: > - `true` if the request IP address is used by a public proxy - provider, `false` otherwise. - example: false + $ref: '#/components/schemas/ProxyResult' error: $ref: '#/components/schemas/ProductError' tampering: title: SignalResponseTampering type: object + additionalProperties: false properties: data: $ref: '#/components/schemas/TamperingResult' @@ -4736,6 +4798,7 @@ components: highActivity: title: SignalResponseHighActivity type: object + additionalProperties: false properties: data: $ref: '#/components/schemas/HighActivityResult' @@ -4744,17 +4807,30 @@ components: locationSpoofing: title: SignalResponseLocationSpoofing type: object + additionalProperties: false properties: data: $ref: '#/components/schemas/LocationSpoofingResult' error: $ref: '#/components/schemas/ProductError' + suspectScore: + title: SignalResponseSuspectScore + type: object + additionalProperties: false + properties: + data: + $ref: '#/components/schemas/SuspectScoreResult' + error: + $ref: '#/components/schemas/ProductError' rawDeviceAttributes: title: SignalResponseRawDeviceAttributes type: object + additionalProperties: false properties: data: $ref: '#/components/schemas/RawDeviceAttributesResult' + error: + $ref: '#/components/schemas/ProductError' EventResponse: description: >- Contains results from all activated products - Fingerprint Pro, Bot @@ -4764,6 +4840,10 @@ components: properties: products: $ref: '#/components/schemas/ProductsResponse' + error: + $ref: '#/components/schemas/ProductError' + required: + - products IdentificationError: type: object additionalProperties: false @@ -4786,6 +4866,7 @@ components: - message BotdResult: type: object + additionalProperties: false description: Contains all the information from Bot Detection product properties: ip: @@ -4805,7 +4886,6 @@ components: url: description: Page URL from which identification request was sent. type: string - format: uri-reference example: https://example.com/login userAgent: type: string @@ -4815,6 +4895,9 @@ components: requestId: type: string example: 1681392853693.lRiBBD + linkedId: + type: string + example: Automatic tests bot bot: $ref: '#/components/schemas/BotdDetectionResult' required: @@ -4822,6 +4905,8 @@ components: - url - ip - time + - userAgent + - requestId BotdDetectionResult: type: object additionalProperties: false @@ -4865,6 +4950,9 @@ components: $ref: '#/components/schemas/ASN' datacenter: $ref: '#/components/schemas/DataCenter' + required: + - address + - geolocation v6: type: object additionalProperties: false @@ -4879,8 +4967,12 @@ components: $ref: '#/components/schemas/ASN' datacenter: $ref: '#/components/schemas/DataCenter' + required: + - address + - geolocation IpBlockListResult: type: object + additionalProperties: false properties: result: type: boolean @@ -4890,6 +4982,7 @@ components: example: false details: type: object + additionalProperties: false properties: emailSpam: type: boolean @@ -4899,8 +4992,15 @@ components: type: boolean description: IP address was part of a known network attack (SSH/HTTPS). example: false + required: + - emailSpam + - attackSource + required: + - result + - details VpnResult: type: object + additionalProperties: false properties: result: type: boolean @@ -4912,8 +5012,15 @@ components: type: string description: Local timezone which is used in timezoneMismatch method. example: Europe/Berlin + originCountry: + type: string + description: >- + Country of the request (only for Android SDK version >= 2.4.0, ISO + 3166 format or unknown). + example: unknown methods: type: object + additionalProperties: false properties: timezoneMismatch: type: boolean @@ -4933,8 +5040,17 @@ components: This method applies to mobile devices only. Indicates the result of additional methods used to detect a VPN in mobile devices. example: false + required: + - timezoneMismatch + - publicVPN + - auxiliaryMobile + required: + - result + - originTimezone + - methods TamperingResult: type: object + additionalProperties: false properties: result: type: boolean @@ -4951,8 +5067,12 @@ components: example: 0 minimum: 0 maximum: 1 + required: + - result + - anomalyScore HighActivityResult: type: object + additionalProperties: false properties: result: type: boolean @@ -4965,15 +5085,36 @@ components: description: Number of requests from the same visitor in the previous day. example: 10 minimum: 1 + required: + - result LocationSpoofingResult: type: object + additionalProperties: false properties: result: type: boolean description: >- - Flag indicating whether the request came from a device with location - spoofing enabled. + Flag indicating whether the request came from a mobile device with + location spoofing enabled. example: false + required: + - result + SuspectScoreResult: + type: object + additionalProperties: false + properties: + result: + type: integer + description: > + 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 + example: 0 + required: + - result RawDeviceAttributesResult: type: object description: > @@ -5006,8 +5147,162 @@ components: type: object value: title: value + FactoryResetResult: + type: object + additionalProperties: false + properties: + time: + title: Time + description: > + Time in UTC when the most recent factory reset of the Android or iOS + device was done. If there is no sign of factory reset or the client + is not a mobile device, the field will contain the epoch time (1 + January 1970) in UTC. + type: string + format: date-time + example: '2022-06-09T22:58:36Z' + timestamp: + description: >- + Same value as it's in the `time` field but represented in timestamp + format. + type: integer + format: int64 + example: 1654815517198 + required: + - time + - timestamp + ClonedAppResult: + type: object + additionalProperties: false + properties: + result: + type: boolean + description: > + 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. + example: false + required: + - result + EmulatorResult: + type: object + additionalProperties: false + properties: + result: + type: boolean + description: > + 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. + example: false + required: + - result + RootAppsResult: + type: object + additionalProperties: false + properties: + result: + type: boolean + description: > + 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. + example: false + required: + - result + IncognitoResult: + type: object + additionalProperties: false + properties: + result: + type: boolean + description: > + `true` if we detected incognito mode used in the browser, `false` + otherwise. + example: false + required: + - result + JailbrokenResult: + type: object + additionalProperties: false + properties: + result: + type: boolean + description: > + iOS specific jailbreak detection. There are 2 values: • `true` - + Jailbreak detected • `false` - No signs of jailbreak or the client + is not iOS. + example: false + required: + - result + FridaResult: + type: object + additionalProperties: false + properties: + result: + type: boolean + description: > + [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. + example: false + required: + - result + TorResult: + type: object + additionalProperties: false + properties: + result: + type: boolean + description: > + `true` if the request IP address is a known tor exit node, `false` + otherwise. + example: false + required: + - result + PrivacySettingsResult: + type: object + additionalProperties: false + properties: + result: + type: boolean + description: > + `true` if the request is from a privacy aware browser (e.g. Tor) or + from a browser in which fingerprinting is blocked. Otherwise + `false`. + example: false + required: + - result + VirtualMachineResult: + type: object + additionalProperties: false + properties: + result: + type: boolean + description: > + `true` if the request came from a browser running inside a virtual + machine (e.g. VMWare), `false` otherwise. + example: false + required: + - result + ProxyResult: + type: object + additionalProperties: false + properties: + result: + type: boolean + description: > + `true` if the request IP address is used by a public proxy provider, + `false` otherwise. + example: false + required: + - result ProductError: type: object + additionalProperties: false properties: code: type: string diff --git a/sync.sh b/sync.sh index c0726612..ea60464b 100755 --- a/sync.sh +++ b/sync.sh @@ -3,20 +3,20 @@ curl -o ./res/fingerprint-server-api.yaml https://fingerprintjs.github.io/fingerprint-pro-server-api-openapi/schemas/fingerprint-server-api.yaml examplesList=( - 'visits_limit_1.json' - 'visits_limit_500.json' - 'visits_403_error.json' - 'visits_too_many_requests_error.json' + 'get_visits_200_limit_1.json' + 'get_visits_200_limit_500.json' + 'get_visits_403_error.json' + 'get_visits_429_too_many_requests_error.json' 'webhook.json' - 'get_event.json' - 'get_event_all_errors.json' - 'get_event_extra_fields.json' + 'get_event_200.json' + 'get_event_200_all_errors.json' + 'get_event_200_extra_fields.json' 'get_event_403_error.json' 'get_event_404_error.json' - 'get_event_botd_failed_error.json' - 'get_event_botd_too_many_requests_error.json' - 'get_event_identification_failed_error.json' - 'get_event_identification_too_many_requests_error.json' + 'get_event_200_botd_failed_error.json' + 'get_event_200_botd_too_many_requests_error.json' + 'get_event_200_identification_failed_error.json' + 'get_event_200_identification_too_many_requests_error.json' ) for example in ${examplesList[*]}; do diff --git a/test/mocks/get_event.json b/test/mocks/get_event_200.json similarity index 73% rename from test/mocks/get_event.json rename to test/mocks/get_event_200.json index 808f12f4..7de02fd2 100644 --- a/test/mocks/get_event.json +++ b/test/mocks/get_event_200.json @@ -3,12 +3,13 @@ "identification": { "data": { "visitorId": "Ibk1527CUFmcnjLwIs4A9", - "requestId": "0KSh65EnVoB85JBmloQK", + "requestId": "1708102555327.NLOjmg", "incognito": true, "linkedId": "somelinkedId", + "tag": {}, "time": "2019-05-21T16:40:13Z", "timestamp": 1582299576512, - "url": "https://www.example.com/login", + "url": "https://www.example.com/login?hope{this{works[!", "ip": "61.127.217.15", "ipLocation": { "accuracyRadius": 10, @@ -19,14 +20,14 @@ "city": { "name": "Dusseldorf" }, - "continent": { - "code": "EU", - "name": "Europe" - }, "country": { "code": "DE", "name": "Germany" }, + "continent": { + "code": "EU", + "name": "Europe" + }, "subdivisions": [ { "isoCode": "63", @@ -46,13 +47,13 @@ "confidence": { "score": 0.97 }, - "visitorFound": true, + "visitorFound": false, "firstSeenAt": { "global": "2022-03-16T11:26:45.362Z", "subscription": "2022-03-16T11:31:01.101Z" }, "lastSeenAt": { - "global": "2022-03-16T11:28:34.023Z", + "global": null, "subscription": null } } @@ -62,9 +63,21 @@ "bot": { "result": "notDetected" }, - "url": "https://www.example.com/login", + "url": "https://www.example.com/login?hope{this{works}[!", "ip": "61.127.217.15", - "time": "2019-05-21T16:40:13Z" + "time": "2019-05-21T16:40:13Z", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 YaBrowser/24.1.0.0 Safari/537.36", + "requestId": "1708102555327.NLOjmg" + } + }, + "rootApps": { + "data": { + "result": false + } + }, + "emulator": { + "data": { + "result": false } }, "ipInfo": { @@ -104,24 +117,45 @@ "result": true, "name": "DediPath" } + }, + "v6": { + "address": "2001:db8:3333:4444:5555:6666:7777:8888", + "geolocation": { + "accuracyRadius": 5, + "latitude": 49.982, + "longitude": 36.2566, + "postalCode": "10112", + "timezone": "Europe/Berlin", + "city": { + "name": "Berlin" + }, + "country": { + "code": "DE", + "name": "Germany" + }, + "continent": { + "code": "EU", + "name": "Europe" + }, + "subdivisions": [ + { + "isoCode": "BE", + "name": "Land Berlin" + } + ] + }, + "asn": { + "asn": "6805", + "name": "Telefonica Germany", + "network": "2a02:3100::/24" + }, + "datacenter": { + "result": false, + "name": "" + } } } }, - "incognito": { - "data": { - "result": false - } - }, - "rootApps": { - "data": { - "result": false - } - }, - "emulator": { - "data": { - "result": false - } - }, "ipBlocklist": { "data": { "result": false, @@ -140,6 +174,7 @@ "data": { "result": false, "originTimezone": "Europe/Berlin", + "originCountry": "unknown", "methods": { "timezoneMismatch": false, "publicVPN": false, @@ -152,10 +187,15 @@ "result": false } }, + "incognito": { + "data": { + "result": false + } + }, "tampering": { "data": { "result": false, - "anomalyScore": 0 + "anomalyScore": 0.1955 } }, "clonedApp": { @@ -208,13 +248,17 @@ "value": 30 }, "colorGamut": { - "value": "srgb" + "value": "p3" }, "contrast": { "value": 0 }, "cookiesEnabled": { "value": true + }, + "cpuClass": {}, + "fonts": { + "value": ["Arial Unicode MS", "Gill Sans", "Helvetica Neue", "Menlo"] } } }, diff --git a/test/mocks/get_event_all_errors.json b/test/mocks/get_event_200_all_errors.json similarity index 86% rename from test/mocks/get_event_all_errors.json rename to test/mocks/get_event_200_all_errors.json index 00b16976..8245e5d2 100644 --- a/test/mocks/get_event_all_errors.json +++ b/test/mocks/get_event_200_all_errors.json @@ -117,6 +117,24 @@ } } } + }, + "locationSpoofing": { + "error": { + "code": "Failed", + "message": "internal server error" + } + }, + "highActivity": { + "error": { + "code": "Failed", + "message": "internal server error" + } + }, + "suspectScore": { + "error": { + "code": "Failed", + "message": "internal server error" + } } } } diff --git a/test/mocks/get_event_botd_failed_error.json b/test/mocks/get_event_200_botd_failed_error.json similarity index 98% rename from test/mocks/get_event_botd_failed_error.json rename to test/mocks/get_event_200_botd_failed_error.json index 362f969a..f142f7b3 100644 --- a/test/mocks/get_event_botd_failed_error.json +++ b/test/mocks/get_event_200_botd_failed_error.json @@ -7,6 +7,7 @@ "incognito": true, "linkedId": "somelinkedId", "time": "2019-05-21T16:40:13Z", + "tag": {}, "timestamp": 1582299576512, "url": "https://www.example.com/login", "ip": "61.127.217.15", diff --git a/test/mocks/get_event_botd_too_many_requests_error.json b/test/mocks/get_event_200_botd_too_many_requests_error.json similarity index 98% rename from test/mocks/get_event_botd_too_many_requests_error.json rename to test/mocks/get_event_200_botd_too_many_requests_error.json index 55c561b3..79288281 100644 --- a/test/mocks/get_event_botd_too_many_requests_error.json +++ b/test/mocks/get_event_200_botd_too_many_requests_error.json @@ -6,6 +6,7 @@ "requestId": "0KSh65EnVoB85JBmloQK", "incognito": true, "linkedId": "somelinkedId", + "tag": {}, "time": "2019-05-21T16:40:13Z", "timestamp": 1582299576512, "url": "https://www.example.com/login", diff --git a/test/mocks/get_event_extra_fields.json b/test/mocks/get_event_200_extra_fields.json similarity index 90% rename from test/mocks/get_event_extra_fields.json rename to test/mocks/get_event_200_extra_fields.json index 03e50c01..cef43a2c 100644 --- a/test/mocks/get_event_extra_fields.json +++ b/test/mocks/get_event_200_extra_fields.json @@ -6,6 +6,7 @@ "requestId": "0KSh65EnVoB85JBmloQK", "incognito": true, "linkedId": "somelinkedId", + "tag": {}, "time": "2019-05-21T16:40:13Z", "timestamp": 1582299576512, "url": "https://www.example.com/login", @@ -59,6 +60,8 @@ }, "botd": { "data": { + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 YaBrowser/24.1.0.0 Safari/537.36", + "requestId": "1708102555327.NLOjmg", "bot": { "result": "notDetected" }, diff --git a/test/mocks/get_event_200_identification_failed_error.json b/test/mocks/get_event_200_identification_failed_error.json new file mode 100644 index 00000000..5b42c579 --- /dev/null +++ b/test/mocks/get_event_200_identification_failed_error.json @@ -0,0 +1,23 @@ +{ + "products": { + "identification": { + "error": { + "code": "Failed", + "message": "failed" + } + }, + "botd": { + "data": { + "bot": { + "result": "bad", + "type": "headlessChrome" + }, + "url": "https://example.com/login", + "ip": "94.60.143.223", + "time": "2024-02-23T10:20:25.287Z", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/121.0.6167.57 Safari/537.36", + "requestId": "1708683625245.tuJ4nD" + } + } + } +} diff --git a/test/mocks/get_event_200_identification_too_many_requests_error.json b/test/mocks/get_event_200_identification_too_many_requests_error.json new file mode 100644 index 00000000..deacdcad --- /dev/null +++ b/test/mocks/get_event_200_identification_too_many_requests_error.json @@ -0,0 +1,23 @@ +{ + "products": { + "identification": { + "error": { + "code": "429 Too Many Requests", + "message": "too many requests" + } + }, + "botd": { + "data": { + "bot": { + "result": "bad", + "type": "headlessChrome" + }, + "url": "https://example.com/login", + "ip": "94.60.143.223", + "time": "2024-02-23T10:20:25.287Z", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/121.0.6167.57 Safari/537.36", + "requestId": "1708683625245.tuJ4nD" + } + } + } +} diff --git a/test/mocks/get_event_identification_failed_error.json b/test/mocks/get_event_identification_failed_error.json deleted file mode 100644 index 22d79def..00000000 --- a/test/mocks/get_event_identification_failed_error.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "products": { - "identification": { - "error": { - "code": "Failed", - "message": "failed" - } - }, - "botd": { - "data": { - "url": "https://example.com/login", - "bot": { - "result": "notDetected" - }, - "ip": "61.127.217.15", - "time": "2019-05-21T16:40:13Z" - } - } - } -} \ No newline at end of file diff --git a/test/mocks/get_event_identification_too_many_requests_error.json b/test/mocks/get_event_identification_too_many_requests_error.json deleted file mode 100644 index 26d31728..00000000 --- a/test/mocks/get_event_identification_too_many_requests_error.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "products": { - "identification": { - "error": { - "code": "429 Too Many Requests", - "message": "too many requests" - } - }, - "botd": { - "data": { - "url": "https://example.com/login", - "bot": { - "result": "notDetected" - }, - "ip": "61.127.217.15", - "time": "2019-05-21T16:40:13Z" - } - } - } -} \ No newline at end of file diff --git a/test/mocks/visits_limit_1.json b/test/mocks/get_visits_200_limit_1.json similarity index 99% rename from test/mocks/visits_limit_1.json rename to test/mocks/get_visits_200_limit_1.json index 2b184ed2..c5bbeedf 100644 --- a/test/mocks/visits_limit_1.json +++ b/test/mocks/get_visits_200_limit_1.json @@ -59,4 +59,4 @@ ], "lastTimestamp": 1655373953086, "paginationKey": "1655373953086.DDlfmP" -} \ No newline at end of file +} diff --git a/test/mocks/visits_limit_500.json b/test/mocks/get_visits_200_limit_500.json similarity index 100% rename from test/mocks/visits_limit_500.json rename to test/mocks/get_visits_200_limit_500.json diff --git a/test/mocks/visits_403_error.json b/test/mocks/get_visits_403_error.json similarity index 100% rename from test/mocks/visits_403_error.json rename to test/mocks/get_visits_403_error.json diff --git a/test/mocks/visits_too_many_requests_error.json b/test/mocks/get_visits_429_too_many_requests_error.json similarity index 100% rename from test/mocks/visits_too_many_requests_error.json rename to test/mocks/get_visits_429_too_many_requests_error.json diff --git a/test/mocks/visits_too_many_requests_error_empty_header.json b/test/mocks/get_visits_429_too_many_requests_error_empty_header.json similarity index 100% rename from test/mocks/visits_too_many_requests_error_empty_header.json rename to test/mocks/get_visits_429_too_many_requests_error_empty_header.json diff --git a/test/mocks/webhook.json b/test/mocks/webhook.json index 9ba70238..f480e3e8 100644 --- a/test/mocks/webhook.json +++ b/test/mocks/webhook.json @@ -119,6 +119,7 @@ "vpn": { "result": false, "originTimezone": "Europe/Berlin", + "originCountry": "unknown", "methods": { "timezoneMismatch": false, "publicVPN": false, @@ -183,5 +184,8 @@ }, "locationSpoofing": { "result": true + }, + "suspectScore": { + "result": 0 } } diff --git a/test/test_fingerprint_api.py b/test/test_fingerprint_api.py index fb9923f1..038f2d4a 100644 --- a/test/test_fingerprint_api.py +++ b/test/test_fingerprint_api.py @@ -62,7 +62,7 @@ def request(self, *args, **kwargs): answer_mock = mock_file.read() mock_file.close() headers = {} - if mock_file_by_visitor_id == 'visits_too_many_requests_error.json': + if mock_file_by_visitor_id == 'get_visits_429_too_many_requests_error.json': headers.update({'Retry-After': '4'}) return urllib3.HTTPResponse(status=status, body=answer_mock, headers=headers) @@ -148,7 +148,7 @@ def test_get_visits_error_429(self): """Test checks correct code run result in case of 429 error""" mock_pool = MockPoolManager(self) self.api.api_client.rest_client.pool_manager = mock_pool - mock_file = 'visits_too_many_requests_error.json' + mock_file = 'get_visits_429_too_many_requests_error.json' mock_pool.expect_request('GET', TestFingerprintApi.get_get_visits_method_path(visitor_id=mock_file), fields=[self.integration_info], headers=self.request_headers, preload_content=True, timeout=None, status=429) @@ -162,7 +162,7 @@ def test_get_visits_error_429_empty_retry_after(self): """Test checks correct code run result in case of 429 error""" mock_pool = MockPoolManager(self) self.api.api_client.rest_client.pool_manager = mock_pool - mock_file = 'visits_too_many_requests_error_empty_header.json' + mock_file = 'get_visits_429_too_many_requests_error_empty_header.json' mock_pool.expect_request('GET', TestFingerprintApi.get_get_visits_method_path(visitor_id=mock_file), fields=[self.integration_info], headers=self.request_headers, preload_content=True, timeout=None, status=429) @@ -187,11 +187,11 @@ def test_get_event_errors_200(self): """Test checks correct code run result in scenario of arrors in BotD or identification API""" mock_pool = MockPoolManager(self) self.api.api_client.rest_client.pool_manager = mock_pool - mock_file_botd_fail = 'get_event_botd_failed_error.json' - mock_file_botd_429 = 'get_event_botd_too_many_requests_error.json' - mock_file_identification_fail = 'get_event_identification_failed_error.json' - mock_file_identification_429 = 'get_event_identification_too_many_requests_error.json' - mock_file_all_errors = 'get_event_all_errors.json' + mock_file_botd_fail = 'get_event_200_botd_failed_error.json' + mock_file_botd_429 = 'get_event_200_botd_too_many_requests_error.json' + mock_file_identification_fail = 'get_event_200_identification_failed_error.json' + mock_file_identification_429 = 'get_event_200_identification_too_many_requests_error.json' + mock_file_all_errors = 'get_event_200_all_errors.json' mock_pool.expect_request('GET', TestFingerprintApi.get_get_event_method_path(request_id=mock_file_botd_fail), fields=[self.integration_info], headers=self.request_headers, preload_content=True, timeout=None) From 36445f534a1c31242d6cb18b20d87f5d853f6784 Mon Sep 17 00:00:00 2001 From: Ilya Taratukhin Date: Fri, 15 Mar 2024 17:11:16 +0100 Subject: [PATCH 02/13] chore: use compact schema --- sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sync.sh b/sync.sh index ea60464b..93794e02 100755 --- a/sync.sh +++ b/sync.sh @@ -1,6 +1,6 @@ #!/bin/bash -curl -o ./res/fingerprint-server-api.yaml https://fingerprintjs.github.io/fingerprint-pro-server-api-openapi/schemas/fingerprint-server-api.yaml +curl -o ./res/fingerprint-server-api.yaml https://fingerprintjs.github.io/fingerprint-pro-server-api-openapi/schemas/fingerprint-server-api-compact.yaml examplesList=( 'get_visits_200_limit_1.json' From 62dcfc51c7dbacde34f4a0887f6b7837085d876d Mon Sep 17 00:00:00 2001 From: Ilya Taratukhin Date: Fri, 15 Mar 2024 17:12:11 +0100 Subject: [PATCH 03/13] chore: update schema --- res/fingerprint-server-api.yaml | 3443 ------------------------------- 1 file changed, 3443 deletions(-) diff --git a/res/fingerprint-server-api.yaml b/res/fingerprint-server-api.yaml index 470c3e7b..792ce049 100644 --- a/res/fingerprint-server-api.yaml +++ b/res/fingerprint-server-api.yaml @@ -30,15 +30,6 @@ servers: security: - ApiKeyHeader: [] - ApiKeyQuery: [] -x-readme: - samples-languages: - - curl - - node - - php - - python - - csharp - - java - - go paths: /events/{request_id}: get: @@ -77,637 +68,18 @@ paths: application/json: schema: $ref: '#/components/schemas/EventResponse' - examples: - fullResponse: - summary: Example response - value: - products: - identification: - data: - visitorId: Ibk1527CUFmcnjLwIs4A9 - requestId: 1708102555327.NLOjmg - incognito: true - linkedId: somelinkedId - tag: {} - time: '2019-05-21T16:40:13Z' - timestamp: 1582299576512 - url: https://www.example.com/login?hope{this{works[! - ip: 61.127.217.15 - ipLocation: - accuracyRadius: 10 - latitude: 49.982 - longitude: 36.2566 - postalCode: '61202' - timezone: Europe/Dusseldorf - city: - name: Dusseldorf - country: - code: DE - name: Germany - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '63' - name: North Rhine-Westphalia - browserDetails: - browserName: Chrome - browserMajorVersion: '74' - browserFullVersion: 74.0.3729 - os: Windows - osVersion: '7' - device: Other - userAgent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) .... - confidence: - score: 0.97 - visitorFound: false - firstSeenAt: - global: '2022-03-16T11:26:45.362Z' - subscription: '2022-03-16T11:31:01.101Z' - lastSeenAt: - global: null - subscription: null - botd: - data: - bot: - result: notDetected - url: https://www.example.com/login?hope{this{works}[! - ip: 61.127.217.15 - time: '2019-05-21T16:40:13Z' - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/120.0.0.0 YaBrowser/24.1.0.0 Safari/537.36 - requestId: 1708102555327.NLOjmg - rootApps: - data: - result: false - emulator: - data: - result: false - ipInfo: - data: - v4: - address: 94.142.239.124 - geolocation: - accuracyRadius: 20 - latitude: 50.05 - longitude: 14.4 - postalCode: 150 00 - timezone: Europe/Prague - city: - name: Prague - country: - code: CZ - name: Czechia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '10' - name: Hlavni mesto Praha - asn: - asn: '7922' - name: COMCAST-7922 - network: 73.136.0.0/13 - datacenter: - result: true - name: DediPath - v6: - address: 2001:db8:3333:4444:5555:6666:7777:8888 - geolocation: - accuracyRadius: 5 - latitude: 49.982 - longitude: 36.2566 - postalCode: '10112' - timezone: Europe/Berlin - city: - name: Berlin - country: - code: DE - name: Germany - continent: - code: EU - name: Europe - subdivisions: - - isoCode: BE - name: Land Berlin - asn: - asn: '6805' - name: Telefonica Germany - network: 2a02:3100::/24 - datacenter: - result: false - name: '' - ipBlocklist: - data: - result: false - details: - emailSpam: false - attackSource: false - tor: - data: - result: false - vpn: - data: - result: false - originTimezone: Europe/Berlin - originCountry: unknown - methods: - timezoneMismatch: false - publicVPN: false - auxiliaryMobile: false - proxy: - data: - result: false - incognito: - data: - result: false - tampering: - data: - result: false - anomalyScore: 0.1955 - clonedApp: - data: - result: false - factoryReset: - data: - time: '1970-01-01T00:00:00Z' - timestamp: 0 - jailbroken: - data: - result: false - frida: - data: - result: false - privacySettings: - data: - result: false - virtualMachine: - data: - result: false - rawDeviceAttributes: - data: - architecture: - value: 127 - audio: - value: 35.73832903057337 - canvas: - value: - Winding: true - Geometry: 4dce9d6017c3e0c052a77252f29f2b1c - Text: dd2474a56ff78c1de3e7a07070ba3b7d - colorDepth: - value: 30 - colorGamut: - value: p3 - contrast: - value: 0 - cookiesEnabled: - value: true - cpuClass: {} - fonts: - value: - - Arial Unicode MS - - Gill Sans - - Helvetica Neue - - Menlo - highActivity: - data: - result: false - locationSpoofing: - data: - result: false - allErrorsResponse: - summary: All failed signals - value: - products: - identification: - error: - code: Failed - message: failed - botd: - error: - code: Failed - message: internal server error - ipInfo: - error: - code: Failed - message: internal server error - incognito: - error: - code: Failed - message: internal server error - rootApps: - error: - code: Failed - message: internal server error - clonedApp: - error: - code: Failed - message: internal server error - factoryReset: - error: - code: Failed - message: internal server error - jailbroken: - error: - code: Failed - message: internal server error - frida: - error: - code: Failed - message: internal server error - emulator: - error: - code: Failed - message: internal server error - ipBlocklist: - error: - code: Failed - message: internal server error - tor: - error: - code: Failed - message: internal server error - vpn: - error: - code: Failed - message: internal server error - proxy: - error: - code: Failed - message: internal server error - privacySettings: - error: - code: Failed - message: internal server error - virtualMachine: - error: - code: Failed - message: internal server error - tampering: - error: - code: Failed - message: internal server error - rawDeviceAttributes: - data: - audio: - error: - name: Error - message: internal server error - canvas: - error: - name: Error - message: internal server error - locationSpoofing: - error: - code: Failed - message: internal server error - highActivity: - error: - code: Failed - message: internal server error - suspectScore: - error: - code: Failed - message: internal server error - withBotdError: - summary: BotD error - value: - products: - identification: - data: - visitorId: Ibk1527CUFmcnjLwIs4A9 - requestId: 0KSh65EnVoB85JBmloQK - incognito: true - linkedId: somelinkedId - time: '2019-05-21T16:40:13Z' - tag: {} - timestamp: 1582299576512 - url: https://www.example.com/login - ip: 61.127.217.15 - ipLocation: - accuracyRadius: 10 - latitude: 49.982 - longitude: 36.2566 - postalCode: '61202' - timezone: Europe/Dusseldorf - city: - name: Dusseldorf - continent: - code: EU - name: Europe - country: - code: DE - name: Germany - subdivisions: - - isoCode: '63' - name: North Rhine-Westphalia - browserDetails: - browserName: Chrome - browserMajorVersion: '74' - browserFullVersion: 74.0.3729 - os: Windows - osVersion: '7' - device: Other - userAgent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) .... - confidence: - score: 0.97 - visitorFound: true - firstSeenAt: - global: '2022-03-16T11:26:45.362Z' - subscription: '2022-03-16T11:31:01.101Z' - lastSeenAt: - global: '2022-03-16T11:28:34.023Z' - subscription: null - botd: - error: - code: Failed - message: internal server error - withBotdTooManyRequestsError: - summary: BotD too many requests error - value: - products: - identification: - data: - visitorId: Ibk1527CUFmcnjLwIs4A9 - requestId: 0KSh65EnVoB85JBmloQK - incognito: true - linkedId: somelinkedId - tag: {} - time: '2019-05-21T16:40:13Z' - timestamp: 1582299576512 - url: https://www.example.com/login - ip: 61.127.217.15 - ipLocation: - accuracyRadius: 10 - latitude: 49.982 - longitude: 36.2566 - postalCode: '61202' - timezone: Europe/Dusseldorf - city: - name: Dusseldorf - continent: - code: EU - name: Europe - country: - code: DE - name: Germany - subdivisions: - - isoCode: '63' - name: North Rhine-Westphalia - browserDetails: - browserName: Chrome - browserMajorVersion: '74' - browserFullVersion: 74.0.3729 - os: Windows - osVersion: '7' - device: Other - userAgent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) .... - confidence: - score: 0.97 - visitorFound: true - firstSeenAt: - global: '2022-03-16T11:26:45.362Z' - subscription: '2022-03-16T11:31:01.101Z' - lastSeenAt: - global: '2022-03-16T11:28:34.023Z' - subscription: null - botd: - error: - code: TooManyRequests - message: too many requests - withIdentificationError: - summary: Identification error - value: - products: - identification: - error: - code: Failed - message: failed - botd: - data: - bot: - result: bad - type: headlessChrome - url: https://example.com/login - ip: 94.60.143.223 - time: '2024-02-23T10:20:25.287Z' - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - HeadlessChrome/121.0.6167.57 Safari/537.36 - requestId: 1708683625245.tuJ4nD - withIdentificationTooManyRequestsError: - summary: Identification too many requests error - value: - products: - identification: - error: - code: 429 Too Many Requests - message: too many requests - botd: - data: - bot: - result: bad - type: headlessChrome - url: https://example.com/login - ip: 94.60.143.223 - time: '2024-02-23T10:20:25.287Z' - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - HeadlessChrome/121.0.6167.57 Safari/537.36 - requestId: 1708683625245.tuJ4nD '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEvent403Response' - examples: - example: - summary: Example response - value: - error: - code: TokenRequired - message: secret key is required '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/ErrorEvent404Response' - examples: - example: - summary: Example response - value: - error: - code: RequestNotFound - message: request id is not found - x-readme: - code-samples: - - language: node - name: Node SDK - install: npm install @fingerprintjs/fingerprintjs-pro-server-api - code: | - import { - FingerprintJsServerApiClient, - Region, - } from '@fingerprintjs/fingerprintjs-pro-server-api' - - const client = new FingerprintJsServerApiClient({ - apiKey: 'SERVER_API_KEY', // Replace with your key - region: Region.Global, // Replace with your region - }) - - // Get a specific fingerprinting event - client.getEvent('REQUEST_ID').then((event) => { - console.log(event) - }) - - language: php - name: PHP SDK - install: composer require fingerprint/fingerprint-pro-server-api-sdk - code: | - getEvent("REQUEST_ID"); - echo "
" . $response->__toString() . "
"; - } catch (Exception $e) { - echo $e->getMessage(), PHP_EOL; - } - - language: python - name: Python SDK - install: pip install fingerprint_pro_server_api_sdk - code: > - import fingerprint_pro_server_api_sdk - - from fingerprint_pro_server_api_sdk import EventResponse - - from fingerprint_pro_server_api_sdk import Response - - from fingerprint_pro_server_api_sdk.rest import ApiException - - - configuration = fingerprint_pro_server_api_sdk.Configuration( - api_key="SERVER_API_KEY", // Replace with your key - region="us" // Replace with your region - ) - - api_instance = - fingerprint_pro_server_api_sdk.FingerprintApi(configuration) - - - # Get a specific fingerprinting event - - try: - event: EventResponse = api_instance.get_event("REQUEST_ID") - print(event) - except ApiException as e: - print("Exception when getting an event: %s\n" % e) - - language: golang - name: Go SDK - install: go get github.com/fingerprintjs/fingerprint-pro-server-api-go-sdk - code: | - package main - - import ( - "context" - "fmt" - "github.com/antihax/optional" - "github.com/fingerprintjs/fingerprint-pro-server-api-go-sdk/v3/sdk" - "log" - ) - - func main() { - cfg := sdk.NewConfiguration() - client := sdk.NewAPIClient(cfg) - - auth := context.WithValue( - context.Background(), - sdk.ContextAPIKey, - sdk.APIKey{Key: "SERVER_API_KEY"}, // Replace with your key - ) - cfg.ChangeRegion(sdk.RegionUS) // Replace with your region - - // Get a specific fingerprinting event - event, eventHttpRes, eventErr := - client.FingerprintApi.GetEvent(auth, "REQUEST_ID") - if eventErr != nil { - log.Fatal(eventErr) - } - fmt.Printf("Event: %s", event) - } - - language: java - name: Java SDK - code: | - import com.fingerprint.api.FingerprintApi; - import com.fingerprint.models.EventResponse; - import com.fingerprint.models.Response; - import com.fingerprint.sdk.ApiClient; - import com.fingerprint.sdk.ApiException; - import com.fingerprint.sdk.Configuration; - import com.fingerprint.sdk.Region; - - public class FingerprintApiExample { - public static void main(String... args) { - ApiClient client = Configuration.getDefaultApiClient( - "SERVER_API_KEY", // Replace with your key - Region.GLOBAL // Replace with your region - ); - FingerprintApi api = new FingerprintApi(client); - - // Get a specific fingerprinting event - try { - EventResponse response = api.getEvent("REQUEST_ID"); - System.out.println(response.getProducts().toString()); - } catch (ApiException e) { - System.err.println(e.getMessage()); - } - } - } - - language: csharp - name: C# SDK - install: dotnet add package FingerprintPro.ServerSdk - code: > - using FingerprintPro.ServerSdk.Api; - - using FingerprintPro.ServerSdk.Client; - - - var configuration = new Configuration("SERVER_API_KEY"); // - Replace with your key - - configuration.Region = Region.Us; // Replace with your region - - - var api = new FingerprintApi( - configuration - ); - - - // Get a specific fingerprinting event - - var events = api.GetEvent("REQUEST_ID"); - - Console.WriteLine(events); /visitors/{visitor_id}: get: tags: @@ -827,2657 +199,12 @@ paths: application/json: schema: $ref: '#/components/schemas/Response' - examples: - limit1: - summary: Request with limit=1 - value: - visitorId: AcxioeQKffpXF8iGQK3P - visits: - - requestId: 1655373953086.DDlfmP - browserDetails: - browserName: Chrome - browserMajorVersion: '102' - browserFullVersion: 102.0.5005 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/102.0.5005.61 Safari/537.36 - botProbability: 0 - incognito: false - ip: 82.118.30.68 - ipLocation: - accuracyRadius: 1000 - latitude: 50.0805 - longitude: 14.467 - postalCode: 130 00 - timezone: Europe/Prague - city: - name: Prague - country: - code: CZ - name: Czechia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '10' - name: Hlavni mesto Praha - timestamp: 1655373953094 - time: '2022-06-16T10:05:53Z' - url: https://dashboard.fingerprint.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-06-16T10:03:00.912Z' - subscription: '2022-06-16T10:03:00.912Z' - lastTimestamp: 1655373953086 - paginationKey: 1655373953086.DDlfmP - limit500: - summary: Request with limit=500 - value: - visitorId: AcxioeQKffpXF8iGQK3P - visits: - - requestId: 1655373780901.HhjRFX - browserDetails: - browserName: Chrome - browserMajorVersion: '102' - browserFullVersion: 102.0.5005 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/102.0.5005.61 Safari/537.36 - botProbability: 0 - incognito: false - ip: 188.242.36.107 - ipLocation: - accuracyRadius: 5 - latitude: 59.8983 - longitude: 30.2618 - postalCode: '190924' - timezone: Europe/Moscow - city: - name: St Petersburg - country: - code: RU - name: Russia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: SPE - name: St.-Petersburg - timestamp: 1655373780912 - time: '2022-06-16T10:03:00Z' - url: https://fingerprint.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-06-16T05:27:30.578Z' - subscription: '2022-06-16T05:27:30.578Z' - - requestId: 1655357250568.vqejDF - browserDetails: - browserName: Chrome - browserMajorVersion: '102' - browserFullVersion: 102.0.5005 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/102.0.5005.61 Safari/537.36 - botProbability: 0 - incognito: false - ip: 82.118.30.62 - ipLocation: - accuracyRadius: 1000 - latitude: 50.0805 - longitude: 14.467 - postalCode: 130 00 - timezone: Europe/Prague - city: - name: Prague - country: - code: CZ - name: Czechia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '10' - name: Hlavni mesto Praha - timestamp: 1655357250578 - time: '2022-06-16T05:27:30Z' - url: https://fingerprint.com/ - tag: {} - confidence: - score: 0.99 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-06-15T15:28:33.479Z' - subscription: '2022-06-15T15:28:33.479Z' - - requestId: 1655306913474.kFQsQx - browserDetails: - browserName: Chrome - browserMajorVersion: '102' - browserFullVersion: 102.0.5005 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/102.0.5005.61 Safari/537.36 - botProbability: 0 - incognito: false - ip: 82.118.30.68 - ipLocation: - accuracyRadius: 1000 - latitude: 50.0805 - longitude: 14.467 - postalCode: 130 00 - timezone: Europe/Prague - city: - name: Prague - country: - code: CZ - name: Czechia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '10' - name: Hlavni mesto Praha - timestamp: 1655306913479 - time: '2022-06-15T15:28:33Z' - url: https://fingerprint.com/ - tag: {} - confidence: - score: 0.99 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-06-15T08:47:34.677Z' - subscription: '2022-06-15T08:47:34.677Z' - - requestId: 1655282854672.vz4ZlN - browserDetails: - browserName: Chrome - browserMajorVersion: '102' - browserFullVersion: 102.0.5005 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/102.0.5005.61 Safari/537.36 - botProbability: 0 - incognito: false - ip: 82.118.30.91 - ipLocation: - accuracyRadius: 1000 - latitude: 50.0805 - longitude: 14.467 - postalCode: 130 00 - timezone: Europe/Prague - city: - name: Prague - country: - code: CZ - name: Czechia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '10' - name: Hlavni mesto Praha - timestamp: 1655282854677 - time: '2022-06-15T08:47:34Z' - url: https://fingerprint.com/ - tag: {} - confidence: - score: 0.99 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-06-14T14:19:42.753Z' - subscription: '2022-06-14T14:19:42.753Z' - - requestId: 1655216382743.RDRa4h - browserDetails: - browserName: Chrome - browserMajorVersion: '102' - browserFullVersion: 102.0.5005 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/102.0.5005.61 Safari/537.36 - botProbability: 0 - incognito: false - ip: 188.242.36.107 - ipLocation: - accuracyRadius: 5 - latitude: 59.8983 - longitude: 30.2618 - postalCode: '190924' - timezone: Europe/Moscow - city: - name: St Petersburg - country: - code: RU - name: Russia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: SPE - name: St.-Petersburg - timestamp: 1655216382753 - time: '2022-06-14T14:19:42Z' - url: https://fingerprint.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-06-13T07:53:19.878Z' - subscription: '2022-06-13T07:53:19.878Z' - - requestId: 1655106799870.C8m8hR - browserDetails: - browserName: Chrome - browserMajorVersion: '102' - browserFullVersion: 102.0.5005 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/102.0.5005.61 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.137 - timestamp: 1655106799878 - time: '2022-06-13T07:53:19Z' - url: https://fingerprint.com/ - tag: {} - confidence: - score: 0.99 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-06-07T12:54:35.413Z' - subscription: '2022-06-07T12:54:35.413Z' - - requestId: 1654606475406.2uXCJx - browserDetails: - browserName: Chrome - browserMajorVersion: '102' - browserFullVersion: 102.0.5005 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/102.0.5005.61 Safari/537.36 - botProbability: 0 - incognito: false - ip: 89.38.224.157 - ipLocation: - accuracyRadius: 20 - latitude: 44.804 - longitude: 20.4651 - timestamp: 1654606475413 - time: '2022-06-07T12:54:35Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 0.99 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-06-07T09:37:57.43Z' - subscription: '2022-06-07T09:37:57.43Z' - - requestId: 1654594677423.pCHmKJ - browserDetails: - browserName: Chrome - browserMajorVersion: '102' - browserFullVersion: 102.0.5005 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/102.0.5005.61 Safari/537.36 - botProbability: 0 - incognito: false - ip: 188.242.36.107 - ipLocation: - timezone: Europe/Moscow - timestamp: 1654594677430 - time: '2022-06-07T09:37:57Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 0.99 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-06-07T09:37:50.109Z' - subscription: '2022-06-07T09:37:50.109Z' - - requestId: 1654594670097.Lmodmj - browserDetails: - browserName: Chrome - browserMajorVersion: '102' - browserFullVersion: 102.0.5005 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/102.0.5005.61 Safari/537.36 - botProbability: 0 - incognito: false - ip: 188.242.36.107 - ipLocation: - accuracyRadius: 5 - latitude: 59.8983 - longitude: 30.2618 - postalCode: '190924' - timezone: Europe/Moscow - city: - name: St Petersburg - country: - code: RU - name: Russia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: SPE - name: St.-Petersburg - timestamp: 1654594670109 - time: '2022-06-07T09:37:50Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 0.99 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-06-07T08:31:31.9Z' - subscription: '2022-06-07T08:31:31.9Z' - - requestId: 1654590691894.aCYqYE - browserDetails: - browserName: Chrome - browserMajorVersion: '102' - browserFullVersion: 102.0.5005 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/102.0.5005.61 Safari/537.36 - botProbability: 0 - incognito: false - ip: 188.242.36.107 - ipLocation: - accuracyRadius: 5 - latitude: 59.8983 - longitude: 30.2618 - postalCode: '190924' - timezone: Europe/Moscow - city: - name: St Petersburg - country: - code: RU - name: Russia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: SPE - name: St.-Petersburg - timestamp: 1654590691900 - time: '2022-06-07T08:31:31Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 0.99 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-06-06T09:05:25.954Z' - subscription: '2022-06-06T09:05:25.954Z' - - requestId: 1654506325946.ijIwzu - browserDetails: - browserName: Chrome - browserMajorVersion: '102' - browserFullVersion: 102.0.5005 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/102.0.5005.61 Safari/537.36 - botProbability: 0 - incognito: false - ip: 89.38.224.165 - ipLocation: - accuracyRadius: 20 - latitude: 44.804 - longitude: 20.4651 - timezone: Europe/Belgrade - city: - name: Belgrade - country: - code: RS - name: Serbia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '00' - name: Belgrade - timestamp: 1654506325954 - time: '2022-06-06T09:05:25Z' - url: https://fingerprintcom.netlify.app/blog/name-change/ - tag: {} - confidence: - score: 0.99 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-06-02T16:58:53.635Z' - subscription: '2022-06-02T16:58:53.635Z' - - requestId: 1654189133629.0V1gtF - browserDetails: - browserName: Chrome - browserMajorVersion: '102' - browserFullVersion: 102.0.5005 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/102.0.5005.61 Safari/537.36 - botProbability: 0 - incognito: false - ip: 89.38.224.165 - ipLocation: - accuracyRadius: 20 - latitude: 44.804 - longitude: 20.4651 - timezone: Europe/Belgrade - city: - name: Belgrade - country: - code: RS - name: Serbia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '00' - name: Belgrade - timestamp: 1654189133635 - time: '2022-06-02T16:58:53Z' - url: https://fingerprintcom.netlify.app/blog/name-change/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-06-02T16:58:51.483Z' - subscription: '2022-06-02T16:58:51.483Z' - - requestId: 1654189131472.r49Bbh - browserDetails: - browserName: Chrome - browserMajorVersion: '102' - browserFullVersion: 102.0.5005 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/102.0.5005.61 Safari/537.36 - botProbability: 0 - incognito: false - ip: 89.38.224.165 - ipLocation: - accuracyRadius: 20 - latitude: 44.804 - longitude: 20.4651 - timezone: Europe/Belgrade - city: - name: Belgrade - country: - code: RS - name: Serbia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '00' - name: Belgrade - timestamp: 1654189131483 - time: '2022-06-02T16:58:51Z' - url: https://fingerprintcom.netlify.app/ - tag: {} - confidence: - score: 0.95 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-05-27T14:52:26.624Z' - subscription: '2022-05-27T14:52:26.624Z' - - requestId: 1653663146617.o8KpJO - browserDetails: - browserName: Chrome - browserMajorVersion: '101' - browserFullVersion: 101.0.4951 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/101.0.4951.64 Safari/537.36 - botProbability: 0 - incognito: false - ip: 89.38.224.165 - ipLocation: - accuracyRadius: 20 - latitude: 44.804 - longitude: 20.4651 - timezone: Europe/Belgrade - city: - name: Belgrade - country: - code: RS - name: Serbia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '00' - name: Belgrade - timestamp: 1653663146624 - time: '2022-05-27T14:52:26Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-05-20T09:50:06.7Z' - subscription: '2022-05-20T09:50:06.7Z' - - requestId: 1653040206694.Q5Csig - browserDetails: - browserName: Chrome - browserMajorVersion: '101' - browserFullVersion: 101.0.4951 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/101.0.4951.54 Safari/537.36 - botProbability: 0 - incognito: false - ip: 89.38.224.165 - ipLocation: - accuracyRadius: 20 - latitude: 44.804 - longitude: 20.4651 - timezone: Europe/Belgrade - city: - name: Belgrade - country: - code: RS - name: Serbia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '00' - name: Belgrade - timestamp: 1653040206700 - time: '2022-05-20T09:50:06Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-05-19T16:27:38.029Z' - subscription: '2022-05-19T16:27:38.029Z' - - requestId: 1652977658020.xbfYhA - browserDetails: - browserName: Chrome - browserMajorVersion: '101' - browserFullVersion: 101.0.4951 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/101.0.4951.54 Safari/537.36 - botProbability: 0 - incognito: false - ip: 89.38.224.165 - ipLocation: - accuracyRadius: 20 - latitude: 44.804 - longitude: 20.4651 - timezone: Europe/Belgrade - city: - name: Belgrade - country: - code: RS - name: Serbia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '00' - name: Belgrade - timestamp: 1652977658029 - time: '2022-05-19T16:27:38Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-05-17T15:09:32.666Z' - subscription: '2022-05-17T15:09:32.666Z' - - requestId: 1652800172657.xA22Pd - browserDetails: - browserName: Chrome - browserMajorVersion: '101' - browserFullVersion: 101.0.4951 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/101.0.4951.54 Safari/537.36 - botProbability: 0 - incognito: false - ip: 89.38.224.165 - ipLocation: - accuracyRadius: 20 - latitude: 44.804 - longitude: 20.4651 - timezone: Europe/Belgrade - city: - name: Belgrade - country: - code: RS - name: Serbia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '00' - name: Belgrade - timestamp: 1652800172666 - time: '2022-05-17T15:09:32Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-05-17T14:18:17.631Z' - subscription: '2022-05-17T14:18:17.631Z' - - requestId: 1652797097626.faAMJO - browserDetails: - browserName: Chrome - browserMajorVersion: '101' - browserFullVersion: 101.0.4951 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/101.0.4951.54 Safari/537.36 - botProbability: 0 - incognito: false - ip: 89.38.224.165 - ipLocation: - accuracyRadius: 20 - latitude: 44.804 - longitude: 20.4651 - timezone: Europe/Belgrade - city: - name: Belgrade - country: - code: RS - name: Serbia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '00' - name: Belgrade - timestamp: 1652797097631 - time: '2022-05-17T14:18:17Z' - url: https://fingerprintjs.com/careers/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-05-17T10:16:04.809Z' - subscription: '2022-05-17T10:16:04.809Z' - - requestId: 1652782564800.MWH0GO - browserDetails: - browserName: Chrome - browserMajorVersion: '101' - browserFullVersion: 101.0.4951 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/101.0.4951.54 Safari/537.36 - botProbability: 0 - incognito: false - ip: 89.38.224.165 - ipLocation: - accuracyRadius: 20 - latitude: 44.804 - longitude: 20.4651 - timezone: Europe/Belgrade - city: - name: Belgrade - country: - code: RS - name: Serbia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '00' - name: Belgrade - timestamp: 1652782564809 - time: '2022-05-17T10:16:04Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-05-16T06:47:01.511Z' - subscription: '2022-05-16T06:47:01.511Z' - - requestId: 1652683621505.1tOjuc - browserDetails: - browserName: Chrome - browserMajorVersion: '101' - browserFullVersion: 101.0.4951 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/101.0.4951.54 Safari/537.36 - botProbability: 0 - incognito: false - ip: 217.150.54.233 - ipLocation: - accuracyRadius: 1000 - latitude: 59.8983 - longitude: 30.2618 - postalCode: '190924' - timezone: Europe/Moscow - city: - name: St Petersburg - country: - code: RU - name: Russia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: SPE - name: St.-Petersburg - timestamp: 1652683621511 - time: '2022-05-16T06:47:01Z' - url: https://fingerprintjs.com/products/bot-detection/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-05-16T06:45:49.586Z' - subscription: '2022-05-16T06:45:49.586Z' - - requestId: 1652683586557.67Faeg - browserDetails: - browserName: Chrome - browserMajorVersion: '101' - browserFullVersion: 101.0.4951 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/101.0.4951.54 Safari/537.36 - botProbability: 0 - incognito: true - ip: 217.150.54.233 - ipLocation: - accuracyRadius: 1000 - latitude: 59.8983 - longitude: 30.2618 - postalCode: '190924' - timezone: Europe/Moscow - city: - name: St Petersburg - country: - code: RU - name: Russia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: SPE - name: St.-Petersburg - timestamp: 1652683586562 - time: '2022-05-16T06:46:26Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 0.94 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-05-16T06:45:49.586Z' - subscription: '2022-05-16T06:45:49.586Z' - - requestId: 1652683549513.aVRqEP - browserDetails: - browserName: Chrome - browserMajorVersion: '101' - browserFullVersion: 101.0.4951 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/101.0.4951.54 Safari/537.36 - botProbability: 0 - incognito: false - ip: 217.150.54.233 - ipLocation: - accuracyRadius: 1000 - latitude: 59.8983 - longitude: 30.2618 - postalCode: '190924' - timezone: Europe/Moscow - city: - name: St Petersburg - country: - code: RU - name: Russia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: SPE - name: St.-Petersburg - timestamp: 1652683549586 - time: '2022-05-16T06:45:49Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-05-05T10:11:25.96Z' - subscription: '2022-05-05T10:11:25.96Z' - - requestId: 1651745485951.Oj68me - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 89.38.224.165 - ipLocation: - accuracyRadius: 20 - latitude: 44.804 - longitude: 20.4651 - timezone: Europe/Belgrade - city: - name: Belgrade - country: - code: RS - name: Serbia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '00' - name: Belgrade - timestamp: 1651745485960 - time: '2022-05-05T10:11:25Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-05-05T09:33:40.155Z' - subscription: '2022-05-05T09:33:40.155Z' - - requestId: 1651743220004.W02rhx - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 89.38.224.165 - ipLocation: - accuracyRadius: 20 - latitude: 44.804 - longitude: 20.4651 - timezone: Europe/Belgrade - city: - name: Belgrade - country: - code: RS - name: Serbia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '00' - name: Belgrade - timestamp: 1651743220155 - time: '2022-05-05T09:33:40Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-05-03T15:26:32.826Z' - subscription: '2022-05-03T15:26:32.826Z' - - requestId: 1651591592822.Is9u93 - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 89.38.224.157 - ipLocation: - accuracyRadius: 20 - latitude: 44.804 - longitude: 20.4651 - timezone: Europe/Belgrade - city: - name: Belgrade - country: - code: RS - name: Serbia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '00' - name: Belgrade - timestamp: 1651591592826 - time: '2022-05-03T15:26:32Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-29T13:23:37.049Z' - subscription: '2022-04-29T13:23:37.049Z' - - requestId: 1651238617044.rMVPGS - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 89.38.224.165 - ipLocation: - accuracyRadius: 20 - latitude: 44.804 - longitude: 20.4651 - timezone: Europe/Belgrade - city: - name: Belgrade - country: - code: RS - name: Serbia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '00' - name: Belgrade - timestamp: 1651238617049 - time: '2022-04-29T13:23:37Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-29T10:37:53.333Z' - subscription: '2022-04-29T10:37:53.333Z' - - requestId: 1651228673329.QZI2Cu - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 188.242.36.107 - ipLocation: - accuracyRadius: 5 - latitude: 59.8983 - longitude: 30.2618 - postalCode: '190924' - timezone: Europe/Moscow - city: - name: St Petersburg - country: - code: RU - name: Russia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: SPE - name: St.-Petersburg - timestamp: 1651228673333 - time: '2022-04-29T10:37:53Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-28T13:58:06.323Z' - subscription: '2022-04-28T13:58:06.323Z' - - requestId: 1651154286221.YvuOCP - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 84.247.59.113 - ipLocation: - accuracyRadius: 20 - latitude: 50.0971 - longitude: 8.5952 - postalCode: '65933' - timezone: Europe/Berlin - city: - name: Frankfurt am Main - country: - code: DE - name: Germany - continent: - code: EU - name: Europe - subdivisions: - - isoCode: HE - name: Hesse - timestamp: 1651154286323 - time: '2022-04-28T13:58:06Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-28T12:16:02.564Z' - subscription: '2022-04-28T12:16:02.564Z' - - requestId: 1651148162556.dySgif - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 84.247.59.113 - ipLocation: - accuracyRadius: 20 - latitude: 50.0971 - longitude: 8.5952 - postalCode: '65933' - timezone: Europe/Berlin - city: - name: Frankfurt am Main - country: - code: DE - name: Germany - continent: - code: EU - name: Europe - subdivisions: - - isoCode: HE - name: Hesse - timestamp: 1651148162564 - time: '2022-04-28T12:16:02Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-28T11:57:13.267Z' - subscription: '2022-04-28T11:57:13.267Z' - - requestId: 1651147033260.SxmFvL - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 84.247.59.146 - ipLocation: - accuracyRadius: 20 - latitude: 50.0971 - longitude: 8.5952 - postalCode: '65933' - timezone: Europe/Berlin - city: - name: Frankfurt am Main - country: - code: DE - name: Germany - continent: - code: EU - name: Europe - subdivisions: - - isoCode: HE - name: Hesse - timestamp: 1651147033267 - time: '2022-04-28T11:57:13Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-28T11:57:06.24Z' - subscription: '2022-04-28T11:57:06.24Z' - - requestId: 1651147026139.aAZ8TO - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 84.247.59.146 - ipLocation: - accuracyRadius: 20 - latitude: 50.0971 - longitude: 8.5952 - postalCode: '65933' - timezone: Europe/Berlin - city: - name: Frankfurt am Main - country: - code: DE - name: Germany - continent: - code: EU - name: Europe - subdivisions: - - isoCode: HE - name: Hesse - timestamp: 1651147026240 - time: '2022-04-28T11:57:06Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-26T14:10:31.908Z' - subscription: '2022-04-26T14:10:31.908Z' - - requestId: 1650982231903.eG0b6v - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.105 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650982231908 - time: '2022-04-26T14:10:31Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-26T11:43:37.373Z' - subscription: '2022-04-26T11:43:37.373Z' - - requestId: 1650973417360.xupFFD - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.99 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650973417373 - time: '2022-04-26T11:43:37Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-26T11:43:30.111Z' - subscription: '2022-04-26T11:43:30.111Z' - - requestId: 1650973410104.AQD4qu - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.99 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650973410111 - time: '2022-04-26T11:43:30Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-26T11:22:34.148Z' - subscription: '2022-04-26T11:22:34.148Z' - - requestId: 1650972154133.lSWE8a - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.96 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650972154148 - time: '2022-04-26T11:22:34Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-26T11:22:03.83Z' - subscription: '2022-04-26T11:22:03.83Z' - - requestId: 1650972123824.xk8MUR - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.96 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650972123830 - time: '2022-04-26T11:22:03Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-25T09:46:15.458Z' - subscription: '2022-04-25T09:46:15.458Z' - - requestId: 1650879975452.kfuowM - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 188.242.36.107 - ipLocation: - accuracyRadius: 5 - latitude: 59.8983 - longitude: 30.2618 - postalCode: '190924' - timezone: Europe/Moscow - city: - name: St Petersburg - country: - code: RU - name: Russia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: SPE - name: St.-Petersburg - timestamp: 1650879975458 - time: '2022-04-25T09:46:15Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-22T16:51:44.816Z' - subscription: '2022-04-22T16:51:44.816Z' - - requestId: 1650646304808.xQbAju - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.227 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650646304816 - time: '2022-04-22T16:51:44Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-21T11:43:33.116Z' - subscription: '2022-04-21T11:43:33.116Z' - - requestId: 1650541413105.leAPLz - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.89 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650541413116 - time: '2022-04-21T11:43:33Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-20T17:11:54.717Z' - subscription: '2022-04-20T17:11:54.717Z' - - requestId: 1650474714710.M1IGsl - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.111 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650474714717 - time: '2022-04-20T17:11:54Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-20T17:11:47.217Z' - subscription: '2022-04-20T17:11:47.217Z' - - requestId: 1650474707211.CEUuZk - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.111 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650474707217 - time: '2022-04-20T17:11:47Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-20T17:11:12.076Z' - subscription: '2022-04-20T17:11:12.076Z' - - requestId: 1650474672071.Pz4WsK - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.111 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650474672076 - time: '2022-04-20T17:11:12Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-19T12:29:06.692Z' - subscription: '2022-04-19T12:29:06.692Z' - - requestId: 1650371346684.1d7sgv - browserDetails: - browserName: Chrome Mobile - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Android - osVersion: '6.0' - device: Nexus 5 - userAgent: >- - Mozilla/5.0 (Linux; Android 6.0; Nexus 5 - Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Mobile Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.198 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650371346692 - time: '2022-04-19T12:29:06Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-19T12:29:02.15Z' - subscription: '2022-04-19T12:29:02.15Z' - - requestId: 1650371342145.oWyfRx - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.198 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650371342150 - time: '2022-04-19T12:29:02Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-19T11:35:14.729Z' - subscription: '2022-04-19T11:35:14.729Z' - - requestId: 1650368114723.YEXcHI - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.206 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650368114729 - time: '2022-04-19T11:35:14Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-19T11:13:33.107Z' - subscription: '2022-04-19T11:13:33.107Z' - - requestId: 1650366813101.SvUZC1 - browserDetails: - browserName: Chrome Mobile - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Android - osVersion: '6.0' - device: Nexus 5 - userAgent: >- - Mozilla/5.0 (Linux; Android 6.0; Nexus 5 - Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Mobile Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.204 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650366813107 - time: '2022-04-19T11:13:33Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-19T11:13:28.453Z' - subscription: '2022-04-19T11:13:28.453Z' - - requestId: 1650366808426.Hy6j7v - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.204 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650366808453 - time: '2022-04-19T11:13:28Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-19T11:07:05.19Z' - subscription: '2022-04-19T11:07:05.19Z' - - requestId: 1650366425184.xvYkdr - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.204 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650366425190 - time: '2022-04-19T11:07:05Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-19T11:07:00.483Z' - subscription: '2022-04-19T11:07:00.483Z' - - requestId: 1650366420377.VR5pDX - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.204 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650366420483 - time: '2022-04-19T11:07:00Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-19T10:37:45.279Z' - subscription: '2022-04-19T10:37:45.279Z' - - requestId: 1650364665274.qq31O4 - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.172 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650364665279 - time: '2022-04-19T10:37:45Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-19T10:22:58.87Z' - subscription: '2022-04-19T10:22:58.87Z' - - requestId: 1650363778864.tsVBjO - browserDetails: - browserName: Chrome Mobile - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Android - osVersion: '6.0' - device: Nexus 5 - userAgent: >- - Mozilla/5.0 (Linux; Android 6.0; Nexus 5 - Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Mobile Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.210 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650363778870 - time: '2022-04-19T10:22:58Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-19T10:22:46.894Z' - subscription: '2022-04-19T10:22:46.894Z' - - requestId: 1650363766889.KuVDpm - browserDetails: - browserName: Chrome Mobile - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Android - osVersion: '6.0' - device: Nexus 5 - userAgent: >- - Mozilla/5.0 (Linux; Android 6.0; Nexus 5 - Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Mobile Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.210 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650363766894 - time: '2022-04-19T10:22:46Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-19T10:07:01.528Z' - subscription: '2022-04-19T10:07:01.528Z' - - requestId: 1650362821521.dXH2Ce - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.180 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650362821528 - time: '2022-04-19T10:07:01Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-19T10:02:42.46Z' - subscription: '2022-04-19T10:02:42.46Z' - - requestId: 1650362562448.a5cPLU - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.127 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.180 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650362562460 - time: '2022-04-19T10:02:42Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-18T17:06:30.834Z' - subscription: '2022-04-18T17:06:30.834Z' - - requestId: 1650301590829.YXGX7h - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.75 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.195 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650301590834 - time: '2022-04-18T17:06:30Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-18T12:23:30.446Z' - subscription: '2022-04-18T12:23:30.446Z' - - requestId: 1650284610441.lJrX4M - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.75 Safari/537.36 - botProbability: 0 - incognito: false - ip: 45.86.200.179 - ipLocation: - accuracyRadius: 1000 - latitude: 52.3824 - longitude: 4.8995 - timezone: Europe/Amsterdam - country: - code: NL - name: Netherlands - continent: - code: EU - name: Europe - timestamp: 1650284610446 - time: '2022-04-18T12:23:30Z' - url: https://fingerprintjs.com/blog/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-04-06T14:53:00.526Z' - subscription: '2022-04-06T14:53:00.526Z' - - requestId: 1649256780522.WAXWf2 - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.60 Safari/537.36 - botProbability: 0 - incognito: false - ip: 109.245.35.200 - ipLocation: - accuracyRadius: 50 - latitude: 44.8166 - longitude: 20.4721 - timezone: Europe/Belgrade - city: - name: Belgrade - country: - code: RS - name: Serbia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '00' - name: Belgrade - timestamp: 1649256780526 - time: '2022-04-06T14:53:00Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-03-18T11:08:35.698Z' - subscription: '2022-03-18T11:08:35.698Z' - - requestId: 1649256780520.RRC4PR - browserDetails: - browserName: Chrome - browserMajorVersion: '100' - browserFullVersion: 100.0.4896 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/100.0.4896.60 Safari/537.36 - botProbability: 0 - incognito: false - ip: 109.245.35.200 - ipLocation: - accuracyRadius: 50 - latitude: 44.8166 - longitude: 20.4721 - timezone: Europe/Belgrade - city: - name: Belgrade - country: - code: RS - name: Serbia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '00' - name: Belgrade - timestamp: 1649256780525 - time: '2022-04-06T14:53:00Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-03-18T11:08:35.698Z' - subscription: '2022-03-18T11:08:35.698Z' - - requestId: 1647601715689.iocXfW - browserDetails: - browserName: Chrome - browserMajorVersion: '98' - browserFullVersion: 98.0.4758 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/98.0.4758.109 Safari/537.36 - botProbability: 0 - incognito: false - ip: 178.223.21.183 - ipLocation: - accuracyRadius: 50 - latitude: 44.8166 - longitude: 20.4721 - timezone: Europe/Belgrade - city: - name: Belgrade - country: - code: RS - name: Serbia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '00' - name: Belgrade - timestamp: 1647601715698 - time: '2022-03-18T11:08:35Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-03-16T08:21:23.62Z' - subscription: '2022-03-16T08:21:23.62Z' - - requestId: 1647418883615.Vck2NA - browserDetails: - browserName: Chrome - browserMajorVersion: '98' - browserFullVersion: 98.0.4758 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/98.0.4758.109 Safari/537.36 - botProbability: 0 - incognito: false - ip: 87.116.165.97 - ipLocation: - accuracyRadius: 50 - latitude: 44.8166 - longitude: 20.4721 - timezone: Europe/Belgrade - city: - name: Belgrade - country: - code: RS - name: Serbia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '00' - name: Belgrade - timestamp: 1647418883620 - time: '2022-03-16T08:21:23Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-03-16T08:21:18.398Z' - subscription: '2022-03-16T08:21:18.398Z' - - requestId: 1647418878391.NZDmht - browserDetails: - browserName: Chrome - browserMajorVersion: '98' - browserFullVersion: 98.0.4758 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/98.0.4758.109 Safari/537.36 - botProbability: 0 - incognito: false - ip: 87.116.165.97 - ipLocation: - accuracyRadius: 50 - latitude: 44.8166 - longitude: 20.4721 - timezone: Europe/Belgrade - city: - name: Belgrade - country: - code: RS - name: Serbia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '00' - name: Belgrade - timestamp: 1647418878398 - time: '2022-03-16T08:21:18Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-03-15T11:46:51.858Z' - subscription: '2022-03-15T11:46:51.858Z' - - requestId: 1647344811836.RvNkL5 - browserDetails: - browserName: Chrome - browserMajorVersion: '98' - browserFullVersion: 98.0.4758 - os: Mac OS X - osVersion: 10.15.7 - device: Other - userAgent: >- - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) - AppleWebKit/537.36 (KHTML, like Gecko) - Chrome/98.0.4758.109 Safari/537.36 - botProbability: 0 - incognito: false - ip: 87.116.165.97 - ipLocation: - accuracyRadius: 50 - latitude: 44.8166 - longitude: 20.4721 - timezone: Europe/Belgrade - city: - name: Belgrade - country: - code: RS - name: Serbia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '00' - name: Belgrade - timestamp: 1647344811858 - time: '2022-03-15T11:46:51Z' - url: https://fingerprintjs.com/ - tag: {} - confidence: - score: 1 - visitorFound: true - firstSeenAt: - global: '2022-02-04T11:31:20Z' - subscription: '2022-02-04T11:31:20Z' - lastSeenAt: - global: '2022-03-08T12:33:05.677Z' - subscription: '2022-03-08T12:33:05.677Z' '403': description: Forbidden. The API Key is probably missing or incorrect. content: application/json: schema: $ref: '#/components/schemas/ErrorVisits403' - examples: - example: - summary: Forbidden - value: - error: Forbidden (HTTP 403) '429': description: Too Many Requests headers: @@ -3493,176 +220,6 @@ paths: application/json: schema: $ref: '#/components/schemas/ManyRequestsResponse' - examples: - example: - summary: Example too many requests error response - value: - error: too many requests - x-readme: - code-samples: - - language: node - name: Node SDK - install: npm install @fingerprintjs/fingerprintjs-pro-server-api - code: | - import { - FingerprintJsServerApiClient, - Region, - } from '@fingerprintjs/fingerprintjs-pro-server-api' - - const client = new FingerprintJsServerApiClient({ - apiKey: 'SERVER_API_KEY', // Replace with your key - region: Region.Global, // Replace with your region - }) - - // Get visit history of a specific visitor - client.getVisitorHistory('VISITOR_ID').then((visitorHistory) => { - console.log(visitorHistory) - }) - - language: php - name: PHP SDK - install: composer require fingerprint/fingerprint-pro-server-api-sdk - code: | - getVisits("VISITOR_ID"); - echo "
" . $response->__toString() . "
"; - } catch (Exception $e) { - echo $e->getMessage(), PHP_EOL; - } - - language: python - name: Python SDK - install: pip install fingerprint_pro_server_api_sdk - code: > - import fingerprint_pro_server_api_sdk - - from fingerprint_pro_server_api_sdk import EventResponse - - from fingerprint_pro_server_api_sdk import Response - - from fingerprint_pro_server_api_sdk.rest import ApiException - - - configuration = fingerprint_pro_server_api_sdk.Configuration( - api_key="SERVER_API_KEY", // Replace with your key - region="us" // Replace with your region - ) - - api_instance = - fingerprint_pro_server_api_sdk.FingerprintApi(configuration) - - - # Get visit history of a specific visitor - - try: - visits: Response = api_instance.get_visits("VISITOR_ID", limit=10) - print(visits) - except ApiException as e: - print("Exception when getting visits: %s\n" % e) - - language: golang - name: Go SDK - install: go get github.com/fingerprintjs/fingerprint-pro-server-api-go-sdk - code: | - package main - - import ( - "context" - "fmt" - "github.com/antihax/optional" - "github.com/fingerprintjs/fingerprint-pro-server-api-go-sdk/v3/sdk" - "log" - ) - - func main() { - cfg := sdk.NewConfiguration() - client := sdk.NewAPIClient(cfg) - - auth := context.WithValue( - context.Background(), - sdk.ContextAPIKey, - sdk.APIKey{Key: "SERVER_API_KEY"}, // Replace with your key - ) - cfg.ChangeRegion(sdk.RegionUS) // Replace with your region - - // Get visit history of a specific visitor - getVisitsOpts := sdk.FingerprintApiGetVisitsOpts{ - Limit: optional.NewInt32(10), - } - history, historyHttpRes, historyErr := - client.FingerprintApi.GetVisits(auth, "VISITOR_ID", &getVisitsOpts) - if err != nil { - log.Fatal(err) - } - fmt.Printf("Visitor history: %s", history) - } - - language: java - name: Java SDK - code: | - import com.fingerprint.api.FingerprintApi; - import com.fingerprint.models.EventResponse; - import com.fingerprint.models.Response; - import com.fingerprint.sdk.ApiClient; - import com.fingerprint.sdk.ApiException; - import com.fingerprint.sdk.Configuration; - import com.fingerprint.sdk.Region; - - public class FingerprintApiExample { - public static void main(String... args) { - ApiClient client = Configuration.getDefaultApiClient( - "SERVER_API_KEY", // Replace with your key - Region.GLOBAL // Replace with your region - ); - FingerprintApi api = new FingerprintApi(client); - - // Get visit history of a specific visitor - try { - Response response = api.getVisits("VISITOR_ID"); - System.out.println(response.getVisits().toString()); - } catch (ApiException e) { - System.err.println(e.getMessage()); - } - } - } - - language: csharp - name: C# SDK - install: dotnet add package FingerprintPro.ServerSdk - code: > - using FingerprintPro.ServerSdk.Api; - - using FingerprintPro.ServerSdk.Client; - - - var configuration = new Configuration("SERVER_API_KEY"); // - Replace with your key - - configuration.Region = Region.Us; // Replace with your region - - - var api = new FingerprintApi( - configuration - ); - - - // Get visit history of a specific visitor - - var visits = api.GetVisits("VISITOR_ID"); - - Console.WriteLine(visits); /webhook: trace: tags: From c15ae2107256d29fff02af3cc70b065d93092af3 Mon Sep 17 00:00:00 2001 From: Ilya Taratukhin Date: Fri, 15 Mar 2024 17:51:01 +0100 Subject: [PATCH 04/13] feat: use shared structures for webhooks and event BREAKING CHANGE: change models for the most smart signals --- README.md | 30 ++-- ...nseClonedAppData.md => ClonedAppResult.md} | 4 +- ...ponseEmulatorData.md => EmulatorResult.md} | 4 +- ...eFactoryReset.md => FactoryResetResult.md} | 6 +- ...nalResponseFridaData.md => FridaResult.md} | 4 +- ...nseIncognitoData.md => IncognitoResult.md} | 4 +- ...eJailbrokenData.md => JailbrokenResult.md} | 4 +- ...ttingsData.md => PrivacySettingsResult.md} | 4 +- ...nalResponseProxyData.md => ProxyResult.md} | 4 +- ...ponseRootAppsData.md => RootAppsResult.md} | 4 +- docs/SignalResponseClonedApp.md | 2 +- docs/SignalResponseEmulator.md | 2 +- docs/SignalResponseFactoryReset.md | 2 +- docs/SignalResponseFactoryResetData.md | 10 -- docs/SignalResponseFrida.md | 2 +- docs/SignalResponseIncognito.md | 2 +- docs/SignalResponseJailbroken.md | 2 +- docs/SignalResponsePrivacySettings.md | 2 +- docs/SignalResponseProxy.md | 2 +- docs/SignalResponseRootApps.md | 2 +- docs/SignalResponseTor.md | 2 +- docs/SignalResponseVirtualMachine.md | 2 +- ...{SignalResponseTorData.md => TorResult.md} | 4 +- ...MachineData.md => VirtualMachineResult.md} | 4 +- docs/WebhookSignalResponseClonedApp.md | 9 -- docs/WebhookSignalResponseEmulator.md | 9 -- docs/WebhookSignalResponseFrida.md | 9 -- docs/WebhookSignalResponseJailbroken.md | 9 -- docs/WebhookSignalResponsePrivacySettings.md | 9 -- docs/WebhookSignalResponseProxy.md | 9 -- docs/WebhookSignalResponseRootApps.md | 9 -- docs/WebhookSignalResponseTor.md | 9 -- docs/WebhookSignalResponseVirtualMachine.md | 9 -- docs/WebhookVisit.md | 20 +-- fingerprint_pro_server_api_sdk/__init__.py | 29 ++-- .../models/__init__.py | 34 ++--- ...loned_app_data.py => cloned_app_result.py} | 23 +-- ...se_emulator_data.py => emulator_result.py} | 23 +-- ...ctory_reset.py => factory_reset_result.py} | 40 ++--- ...response_frida_data.py => frida_result.py} | 27 ++-- ..._incognito_data.py => incognito_result.py} | 23 +-- ...ailbroken_data.py => jailbroken_result.py} | 23 +-- ...ngs_data.py => privacy_settings_result.py} | 23 +-- ...response_proxy_data.py => proxy_result.py} | 23 +-- ...ponse_root_apps.py => root_apps_result.py} | 23 +-- .../models/signal_response_cloned_app.py | 6 +- .../models/signal_response_emulator.py | 6 +- .../models/signal_response_factory_reset.py | 6 +- .../signal_response_factory_reset_data.py | 143 ------------------ .../models/signal_response_frida.py | 6 +- .../models/signal_response_incognito.py | 6 +- .../models/signal_response_jailbroken.py | 6 +- .../signal_response_privacy_settings.py | 6 +- .../models/signal_response_proxy.py | 6 +- .../models/signal_response_root_apps.py | 6 +- .../models/signal_response_root_apps_data.py | 115 -------------- .../models/signal_response_tor.py | 6 +- .../models/signal_response_virtual_machine.py | 6 +- ...nal_response_tor_data.py => tor_result.py} | 23 +-- ...hine_data.py => virtual_machine_result.py} | 23 +-- .../webhook_signal_response_cloned_app.py | 115 -------------- .../webhook_signal_response_emulator.py | 115 -------------- .../models/webhook_signal_response_frida.py | 115 -------------- .../webhook_signal_response_jailbroken.py | 115 -------------- ...ebhook_signal_response_privacy_settings.py | 115 -------------- .../models/webhook_signal_response_proxy.py | 115 -------------- .../models/webhook_signal_response_tor.py | 115 -------------- ...webhook_signal_response_virtual_machine.py | 115 -------------- .../models/webhook_visit.py | 64 ++++---- 69 files changed, 285 insertions(+), 1569 deletions(-) rename docs/{SignalResponseClonedAppData.md => ClonedAppResult.md} (91%) rename docs/{SignalResponseEmulatorData.md => EmulatorResult.md} (83%) rename docs/{WebhookSignalResponseFactoryReset.md => FactoryResetResult.md} (51%) rename docs/{SignalResponseFridaData.md => FridaResult.md} (54%) rename docs/{SignalResponseIncognitoData.md => IncognitoResult.md} (80%) rename docs/{SignalResponseJailbrokenData.md => JailbrokenResult.md} (81%) rename docs/{SignalResponsePrivacySettingsData.md => PrivacySettingsResult.md} (82%) rename docs/{SignalResponseProxyData.md => ProxyResult.md} (79%) rename docs/{SignalResponseRootAppsData.md => RootAppsResult.md} (85%) delete mode 100644 docs/SignalResponseFactoryResetData.md rename docs/{SignalResponseTorData.md => TorResult.md} (81%) rename docs/{SignalResponseVirtualMachineData.md => VirtualMachineResult.md} (87%) delete mode 100644 docs/WebhookSignalResponseClonedApp.md delete mode 100644 docs/WebhookSignalResponseEmulator.md delete mode 100644 docs/WebhookSignalResponseFrida.md delete mode 100644 docs/WebhookSignalResponseJailbroken.md delete mode 100644 docs/WebhookSignalResponsePrivacySettings.md delete mode 100644 docs/WebhookSignalResponseProxy.md delete mode 100644 docs/WebhookSignalResponseRootApps.md delete mode 100644 docs/WebhookSignalResponseTor.md delete mode 100644 docs/WebhookSignalResponseVirtualMachine.md rename fingerprint_pro_server_api_sdk/models/{signal_response_cloned_app_data.py => cloned_app_result.py} (83%) rename fingerprint_pro_server_api_sdk/models/{signal_response_emulator_data.py => emulator_result.py} (83%) rename fingerprint_pro_server_api_sdk/models/{webhook_signal_response_factory_reset.py => factory_reset_result.py} (67%) rename fingerprint_pro_server_api_sdk/models/{signal_response_frida_data.py => frida_result.py} (73%) rename fingerprint_pro_server_api_sdk/models/{signal_response_incognito_data.py => incognito_result.py} (81%) rename fingerprint_pro_server_api_sdk/models/{signal_response_jailbroken_data.py => jailbroken_result.py} (82%) rename fingerprint_pro_server_api_sdk/models/{signal_response_privacy_settings_data.py => privacy_settings_result.py} (81%) rename fingerprint_pro_server_api_sdk/models/{signal_response_proxy_data.py => proxy_result.py} (82%) rename fingerprint_pro_server_api_sdk/models/{webhook_signal_response_root_apps.py => root_apps_result.py} (82%) delete mode 100644 fingerprint_pro_server_api_sdk/models/signal_response_factory_reset_data.py delete mode 100644 fingerprint_pro_server_api_sdk/models/signal_response_root_apps_data.py rename fingerprint_pro_server_api_sdk/models/{signal_response_tor_data.py => tor_result.py} (83%) rename fingerprint_pro_server_api_sdk/models/{signal_response_virtual_machine_data.py => virtual_machine_result.py} (81%) delete mode 100644 fingerprint_pro_server_api_sdk/models/webhook_signal_response_cloned_app.py delete mode 100644 fingerprint_pro_server_api_sdk/models/webhook_signal_response_emulator.py delete mode 100644 fingerprint_pro_server_api_sdk/models/webhook_signal_response_frida.py delete mode 100644 fingerprint_pro_server_api_sdk/models/webhook_signal_response_jailbroken.py delete mode 100644 fingerprint_pro_server_api_sdk/models/webhook_signal_response_privacy_settings.py delete mode 100644 fingerprint_pro_server_api_sdk/models/webhook_signal_response_proxy.py delete mode 100644 fingerprint_pro_server_api_sdk/models/webhook_signal_response_tor.py delete mode 100644 fingerprint_pro_server_api_sdk/models/webhook_signal_response_virtual_machine.py diff --git a/README.md b/README.md index edcd2315..0acacf2a 100644 --- a/README.md +++ b/README.md @@ -191,6 +191,7 @@ Class | Method | HTTP request | Description - [BotdDetectionResult](docs/BotdDetectionResult.md) - [BotdResult](docs/BotdResult.md) - [BrowserDetails](docs/BrowserDetails.md) + - [ClonedAppResult](docs/ClonedAppResult.md) - [Confidence](docs/Confidence.md) - [DataCenter](docs/DataCenter.md) - [ErrorEvent403Response](docs/ErrorEvent403Response.md) @@ -199,71 +200,60 @@ Class | Method | HTTP request | Description - [ErrorEvent404ResponseError](docs/ErrorEvent404ResponseError.md) - [ErrorVisits403](docs/ErrorVisits403.md) - [EventResponse](docs/EventResponse.md) + - [FactoryResetResult](docs/FactoryResetResult.md) + - [FridaResult](docs/FridaResult.md) - [HighActivityResult](docs/HighActivityResult.md) - [IPLocation](docs/IPLocation.md) - [IPLocationCity](docs/IPLocationCity.md) - [IdentificationError](docs/IdentificationError.md) + - [IncognitoResult](docs/IncognitoResult.md) - [IpBlockListResult](docs/IpBlockListResult.md) - [IpBlockListResultDetails](docs/IpBlockListResultDetails.md) - [IpInfoResult](docs/IpInfoResult.md) - [IpInfoResultV4](docs/IpInfoResultV4.md) - [IpInfoResultV6](docs/IpInfoResultV6.md) + - [JailbrokenResult](docs/JailbrokenResult.md) - [Location](docs/Location.md) - [LocationSpoofingResult](docs/LocationSpoofingResult.md) - [ManyRequestsResponse](docs/ManyRequestsResponse.md) + - [PrivacySettingsResult](docs/PrivacySettingsResult.md) - [ProductError](docs/ProductError.md) - [ProductsResponse](docs/ProductsResponse.md) - [ProductsResponseBotd](docs/ProductsResponseBotd.md) - [ProductsResponseIdentification](docs/ProductsResponseIdentification.md) - [ProductsResponseIdentificationData](docs/ProductsResponseIdentificationData.md) + - [ProxyResult](docs/ProxyResult.md) - [RawDeviceAttributesResult](docs/RawDeviceAttributesResult.md) - [Response](docs/Response.md) - [ResponseVisits](docs/ResponseVisits.md) + - [RootAppsResult](docs/RootAppsResult.md) - [SeenAt](docs/SeenAt.md) - [SignalResponseClonedApp](docs/SignalResponseClonedApp.md) - - [SignalResponseClonedAppData](docs/SignalResponseClonedAppData.md) - [SignalResponseEmulator](docs/SignalResponseEmulator.md) - - [SignalResponseEmulatorData](docs/SignalResponseEmulatorData.md) - [SignalResponseFactoryReset](docs/SignalResponseFactoryReset.md) - - [SignalResponseFactoryResetData](docs/SignalResponseFactoryResetData.md) - [SignalResponseFrida](docs/SignalResponseFrida.md) - - [SignalResponseFridaData](docs/SignalResponseFridaData.md) - [SignalResponseHighActivity](docs/SignalResponseHighActivity.md) - [SignalResponseIncognito](docs/SignalResponseIncognito.md) - - [SignalResponseIncognitoData](docs/SignalResponseIncognitoData.md) - [SignalResponseIpBlocklist](docs/SignalResponseIpBlocklist.md) - [SignalResponseIpInfo](docs/SignalResponseIpInfo.md) - [SignalResponseJailbroken](docs/SignalResponseJailbroken.md) - - [SignalResponseJailbrokenData](docs/SignalResponseJailbrokenData.md) - [SignalResponseLocationSpoofing](docs/SignalResponseLocationSpoofing.md) - [SignalResponsePrivacySettings](docs/SignalResponsePrivacySettings.md) - - [SignalResponsePrivacySettingsData](docs/SignalResponsePrivacySettingsData.md) - [SignalResponseProxy](docs/SignalResponseProxy.md) - - [SignalResponseProxyData](docs/SignalResponseProxyData.md) - [SignalResponseRawDeviceAttributes](docs/SignalResponseRawDeviceAttributes.md) - [SignalResponseRootApps](docs/SignalResponseRootApps.md) - [SignalResponseRootAppsData](docs/SignalResponseRootAppsData.md) - [SignalResponseTampering](docs/SignalResponseTampering.md) - [SignalResponseTor](docs/SignalResponseTor.md) - - [SignalResponseTorData](docs/SignalResponseTorData.md) - [SignalResponseVirtualMachine](docs/SignalResponseVirtualMachine.md) - - [SignalResponseVirtualMachineData](docs/SignalResponseVirtualMachineData.md) - [SignalResponseVpn](docs/SignalResponseVpn.md) - [Subdivision](docs/Subdivision.md) - [TamperingResult](docs/TamperingResult.md) + - [TorResult](docs/TorResult.md) + - [VirtualMachineResult](docs/VirtualMachineResult.md) - [Visit](docs/Visit.md) - [VpnResult](docs/VpnResult.md) - [VpnResultMethods](docs/VpnResultMethods.md) - - [WebhookSignalResponseClonedApp](docs/WebhookSignalResponseClonedApp.md) - - [WebhookSignalResponseEmulator](docs/WebhookSignalResponseEmulator.md) - - [WebhookSignalResponseFactoryReset](docs/WebhookSignalResponseFactoryReset.md) - - [WebhookSignalResponseFrida](docs/WebhookSignalResponseFrida.md) - - [WebhookSignalResponseJailbroken](docs/WebhookSignalResponseJailbroken.md) - - [WebhookSignalResponsePrivacySettings](docs/WebhookSignalResponsePrivacySettings.md) - - [WebhookSignalResponseProxy](docs/WebhookSignalResponseProxy.md) - - [WebhookSignalResponseRootApps](docs/WebhookSignalResponseRootApps.md) - - [WebhookSignalResponseTor](docs/WebhookSignalResponseTor.md) - - [WebhookSignalResponseVirtualMachine](docs/WebhookSignalResponseVirtualMachine.md) - [WebhookVisit](docs/WebhookVisit.md) ## Documentation For Authorization diff --git a/docs/SignalResponseClonedAppData.md b/docs/ClonedAppResult.md similarity index 91% rename from docs/SignalResponseClonedAppData.md rename to docs/ClonedAppResult.md index 6da75926..63f2294e 100644 --- a/docs/SignalResponseClonedAppData.md +++ b/docs/ClonedAppResult.md @@ -1,9 +1,9 @@ -# SignalResponseClonedAppData +# ClonedAppResult ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**result** | **bool** | 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] +**result** | **bool** | 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. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseEmulatorData.md b/docs/EmulatorResult.md similarity index 83% rename from docs/SignalResponseEmulatorData.md rename to docs/EmulatorResult.md index 78bf0e9d..96ee6c75 100644 --- a/docs/SignalResponseEmulatorData.md +++ b/docs/EmulatorResult.md @@ -1,9 +1,9 @@ -# SignalResponseEmulatorData +# EmulatorResult ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**result** | **bool** | 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] +**result** | **bool** | 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. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/WebhookSignalResponseFactoryReset.md b/docs/FactoryResetResult.md similarity index 51% rename from docs/WebhookSignalResponseFactoryReset.md rename to docs/FactoryResetResult.md index 078745cd..d266d61d 100644 --- a/docs/WebhookSignalResponseFactoryReset.md +++ b/docs/FactoryResetResult.md @@ -1,10 +1,10 @@ -# WebhookSignalResponseFactoryReset +# FactoryResetResult ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**time** | **datetime** | Time in UTC for the Android client when recent factory reset was done. If there is no sign of factory reset or the client isn't Android, the field will be epoch time. | [optional] -**timestamp** | **int** | Same value as it's in the `time` field but represented in timestamp format. | [optional] +**time** | **datetime** | Time in UTC when the most recent factory reset of the Android or iOS device was done. If there is no sign of factory reset or the client is not a mobile device, the field will contain the epoch time (1 January 1970) in UTC. | +**timestamp** | **int** | Same value as it's in the `time` field but represented in timestamp format. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseFridaData.md b/docs/FridaResult.md similarity index 54% rename from docs/SignalResponseFridaData.md rename to docs/FridaResult.md index 5c887092..3fad5a4a 100644 --- a/docs/SignalResponseFridaData.md +++ b/docs/FridaResult.md @@ -1,9 +1,9 @@ -# SignalResponseFridaData +# FridaResult ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**result** | **bool** | iOS specific [Frida](https://frida.re/docs/ios/) detection. There are 2 values: • `true` - Frida detected • `false` - No signs of Frida or the client is not iOS. | [optional] +**result** | **bool** | [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. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseIncognitoData.md b/docs/IncognitoResult.md similarity index 80% rename from docs/SignalResponseIncognitoData.md rename to docs/IncognitoResult.md index 0aa9885c..bf04424f 100644 --- a/docs/SignalResponseIncognitoData.md +++ b/docs/IncognitoResult.md @@ -1,9 +1,9 @@ -# SignalResponseIncognitoData +# IncognitoResult ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**result** | **bool** | `true` if we detected incognito mode used in the browser, `false` otherwise. | [optional] +**result** | **bool** | `true` if we detected incognito mode used in the browser, `false` otherwise. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseJailbrokenData.md b/docs/JailbrokenResult.md similarity index 81% rename from docs/SignalResponseJailbrokenData.md rename to docs/JailbrokenResult.md index a364ac29..6e4f42ca 100644 --- a/docs/SignalResponseJailbrokenData.md +++ b/docs/JailbrokenResult.md @@ -1,9 +1,9 @@ -# SignalResponseJailbrokenData +# JailbrokenResult ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**result** | **bool** | iOS specific jailbreak detection. There are 2 values: • `true` - Jailbreak detected • `false` - No signs of jailbreak or the client is not iOS. | [optional] +**result** | **bool** | iOS specific jailbreak detection. There are 2 values: • `true` - Jailbreak detected • `false` - No signs of jailbreak or the client is not iOS. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponsePrivacySettingsData.md b/docs/PrivacySettingsResult.md similarity index 82% rename from docs/SignalResponsePrivacySettingsData.md rename to docs/PrivacySettingsResult.md index 261fdb6f..ac86e3f4 100644 --- a/docs/SignalResponsePrivacySettingsData.md +++ b/docs/PrivacySettingsResult.md @@ -1,9 +1,9 @@ -# SignalResponsePrivacySettingsData +# PrivacySettingsResult ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**result** | **bool** | `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] +**result** | **bool** | `true` if the request is from a privacy aware browser (e.g. Tor) or from a browser in which fingerprinting is blocked. Otherwise `false`. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseProxyData.md b/docs/ProxyResult.md similarity index 79% rename from docs/SignalResponseProxyData.md rename to docs/ProxyResult.md index 2e1c2edf..a6fd6a87 100644 --- a/docs/SignalResponseProxyData.md +++ b/docs/ProxyResult.md @@ -1,9 +1,9 @@ -# SignalResponseProxyData +# ProxyResult ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**result** | **bool** | `true` if the request IP address is used by a public proxy provider, `false` otherwise. | [optional] +**result** | **bool** | `true` if the request IP address is used by a public proxy provider, `false` otherwise. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseRootAppsData.md b/docs/RootAppsResult.md similarity index 85% rename from docs/SignalResponseRootAppsData.md rename to docs/RootAppsResult.md index 33fa679f..9697918e 100644 --- a/docs/SignalResponseRootAppsData.md +++ b/docs/RootAppsResult.md @@ -1,9 +1,9 @@ -# SignalResponseRootAppsData +# RootAppsResult ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**result** | **bool** | 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 is not Android. | [optional] +**result** | **bool** | 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. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseClonedApp.md b/docs/SignalResponseClonedApp.md index 74f42aeb..b0dae865 100644 --- a/docs/SignalResponseClonedApp.md +++ b/docs/SignalResponseClonedApp.md @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**data** | [**SignalResponseClonedAppData**](SignalResponseClonedAppData.md) | | [optional] +**data** | [**ClonedAppResult**](ClonedAppResult.md) | | [optional] **error** | [**ProductError**](ProductError.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseEmulator.md b/docs/SignalResponseEmulator.md index 2a58815e..2d16d907 100644 --- a/docs/SignalResponseEmulator.md +++ b/docs/SignalResponseEmulator.md @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**data** | [**SignalResponseEmulatorData**](SignalResponseEmulatorData.md) | | [optional] +**data** | [**EmulatorResult**](EmulatorResult.md) | | [optional] **error** | [**ProductError**](ProductError.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseFactoryReset.md b/docs/SignalResponseFactoryReset.md index 2fa1d044..8d346494 100644 --- a/docs/SignalResponseFactoryReset.md +++ b/docs/SignalResponseFactoryReset.md @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**data** | [**SignalResponseFactoryResetData**](SignalResponseFactoryResetData.md) | | [optional] +**data** | [**FactoryResetResult**](FactoryResetResult.md) | | [optional] **error** | [**ProductError**](ProductError.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseFactoryResetData.md b/docs/SignalResponseFactoryResetData.md deleted file mode 100644 index bf14cab5..00000000 --- a/docs/SignalResponseFactoryResetData.md +++ /dev/null @@ -1,10 +0,0 @@ -# SignalResponseFactoryResetData - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**time** | **datetime** | Time in UTC for the Android client when recent factory reset was done. If there is no sign of factory reset or the client isn't Android, the field will be epoch time. | [optional] -**timestamp** | **int** | Same value as it's in the `time` field but represented in timestamp format. | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/SignalResponseFrida.md b/docs/SignalResponseFrida.md index cc48ed58..8198799d 100644 --- a/docs/SignalResponseFrida.md +++ b/docs/SignalResponseFrida.md @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**data** | [**SignalResponseFridaData**](SignalResponseFridaData.md) | | [optional] +**data** | [**FridaResult**](FridaResult.md) | | [optional] **error** | [**ProductError**](ProductError.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseIncognito.md b/docs/SignalResponseIncognito.md index 64f4d903..db037e8a 100644 --- a/docs/SignalResponseIncognito.md +++ b/docs/SignalResponseIncognito.md @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**data** | [**SignalResponseIncognitoData**](SignalResponseIncognitoData.md) | | [optional] +**data** | [**IncognitoResult**](IncognitoResult.md) | | [optional] **error** | [**ProductError**](ProductError.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseJailbroken.md b/docs/SignalResponseJailbroken.md index 5b8f2a80..a9eb1ad4 100644 --- a/docs/SignalResponseJailbroken.md +++ b/docs/SignalResponseJailbroken.md @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**data** | [**SignalResponseJailbrokenData**](SignalResponseJailbrokenData.md) | | [optional] +**data** | [**JailbrokenResult**](JailbrokenResult.md) | | [optional] **error** | [**ProductError**](ProductError.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponsePrivacySettings.md b/docs/SignalResponsePrivacySettings.md index 37444687..44edd21f 100644 --- a/docs/SignalResponsePrivacySettings.md +++ b/docs/SignalResponsePrivacySettings.md @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**data** | [**SignalResponsePrivacySettingsData**](SignalResponsePrivacySettingsData.md) | | [optional] +**data** | [**PrivacySettingsResult**](PrivacySettingsResult.md) | | [optional] **error** | [**ProductError**](ProductError.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseProxy.md b/docs/SignalResponseProxy.md index 991b1758..6a46dbd0 100644 --- a/docs/SignalResponseProxy.md +++ b/docs/SignalResponseProxy.md @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**data** | [**SignalResponseProxyData**](SignalResponseProxyData.md) | | [optional] +**data** | [**ProxyResult**](ProxyResult.md) | | [optional] **error** | [**ProductError**](ProductError.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseRootApps.md b/docs/SignalResponseRootApps.md index 7abc2d85..6cf77032 100644 --- a/docs/SignalResponseRootApps.md +++ b/docs/SignalResponseRootApps.md @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**data** | [**SignalResponseRootAppsData**](SignalResponseRootAppsData.md) | | [optional] +**data** | [**RootAppsResult**](RootAppsResult.md) | | [optional] **error** | [**ProductError**](ProductError.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseTor.md b/docs/SignalResponseTor.md index c5e40958..bbb84549 100644 --- a/docs/SignalResponseTor.md +++ b/docs/SignalResponseTor.md @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**data** | [**SignalResponseTorData**](SignalResponseTorData.md) | | [optional] +**data** | [**TorResult**](TorResult.md) | | [optional] **error** | [**ProductError**](ProductError.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseVirtualMachine.md b/docs/SignalResponseVirtualMachine.md index 7effe133..2fac2930 100644 --- a/docs/SignalResponseVirtualMachine.md +++ b/docs/SignalResponseVirtualMachine.md @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**data** | [**SignalResponseVirtualMachineData**](SignalResponseVirtualMachineData.md) | | [optional] +**data** | [**VirtualMachineResult**](VirtualMachineResult.md) | | [optional] **error** | [**ProductError**](ProductError.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseTorData.md b/docs/TorResult.md similarity index 81% rename from docs/SignalResponseTorData.md rename to docs/TorResult.md index e307fa89..bfff9a4f 100644 --- a/docs/SignalResponseTorData.md +++ b/docs/TorResult.md @@ -1,9 +1,9 @@ -# SignalResponseTorData +# TorResult ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**result** | **bool** | `true` if the request IP address is a known tor exit node, `false` otherwise. | [optional] +**result** | **bool** | `true` if the request IP address is a known tor exit node, `false` otherwise. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseVirtualMachineData.md b/docs/VirtualMachineResult.md similarity index 87% rename from docs/SignalResponseVirtualMachineData.md rename to docs/VirtualMachineResult.md index 2efaf039..12558bc9 100644 --- a/docs/SignalResponseVirtualMachineData.md +++ b/docs/VirtualMachineResult.md @@ -1,9 +1,9 @@ -# SignalResponseVirtualMachineData +# VirtualMachineResult ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**result** | **bool** | `true` if the request came from a browser running inside a virtual machine (e.g. VMWare), `false` otherwise. | [optional] +**result** | **bool** | `true` if the request came from a browser running inside a virtual machine (e.g. VMWare), `false` otherwise. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/WebhookSignalResponseClonedApp.md b/docs/WebhookSignalResponseClonedApp.md deleted file mode 100644 index be2264f2..00000000 --- a/docs/WebhookSignalResponseClonedApp.md +++ /dev/null @@ -1,9 +0,0 @@ -# WebhookSignalResponseClonedApp - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**result** | **bool** | 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] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/WebhookSignalResponseEmulator.md b/docs/WebhookSignalResponseEmulator.md deleted file mode 100644 index d4c98881..00000000 --- a/docs/WebhookSignalResponseEmulator.md +++ /dev/null @@ -1,9 +0,0 @@ -# WebhookSignalResponseEmulator - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**result** | **bool** | 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 isn't Android. | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/WebhookSignalResponseFrida.md b/docs/WebhookSignalResponseFrida.md deleted file mode 100644 index fbf8d5ca..00000000 --- a/docs/WebhookSignalResponseFrida.md +++ /dev/null @@ -1,9 +0,0 @@ -# WebhookSignalResponseFrida - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**result** | **bool** | iOS specific [Frida](https://frida.re/docs/ios/) detection. There are 2 values: • `true` - Frida detected • `false` - No signs of Frida or the client is not iOS. | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/WebhookSignalResponseJailbroken.md b/docs/WebhookSignalResponseJailbroken.md deleted file mode 100644 index 13383456..00000000 --- a/docs/WebhookSignalResponseJailbroken.md +++ /dev/null @@ -1,9 +0,0 @@ -# WebhookSignalResponseJailbroken - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**result** | **bool** | iOS specific jailbreak detection. There are 2 values: • `true` - Jailbreak detected • `false` - No signs of jailbreak or the client is not iOS. | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/WebhookSignalResponsePrivacySettings.md b/docs/WebhookSignalResponsePrivacySettings.md deleted file mode 100644 index 8254733c..00000000 --- a/docs/WebhookSignalResponsePrivacySettings.md +++ /dev/null @@ -1,9 +0,0 @@ -# WebhookSignalResponsePrivacySettings - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**result** | **bool** | `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] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/WebhookSignalResponseProxy.md b/docs/WebhookSignalResponseProxy.md deleted file mode 100644 index 4b9f6477..00000000 --- a/docs/WebhookSignalResponseProxy.md +++ /dev/null @@ -1,9 +0,0 @@ -# WebhookSignalResponseProxy - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**result** | **bool** | `true` if the request IP address is used by a public proxy provider, `false` otherwise. | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/WebhookSignalResponseRootApps.md b/docs/WebhookSignalResponseRootApps.md deleted file mode 100644 index dcae4a62..00000000 --- a/docs/WebhookSignalResponseRootApps.md +++ /dev/null @@ -1,9 +0,0 @@ -# WebhookSignalResponseRootApps - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**result** | **bool** | 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] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/WebhookSignalResponseTor.md b/docs/WebhookSignalResponseTor.md deleted file mode 100644 index 605ec629..00000000 --- a/docs/WebhookSignalResponseTor.md +++ /dev/null @@ -1,9 +0,0 @@ -# WebhookSignalResponseTor - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**result** | **bool** | `true` if the request IP address is a known tor exit node, `false` otherwise. | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/WebhookSignalResponseVirtualMachine.md b/docs/WebhookSignalResponseVirtualMachine.md deleted file mode 100644 index dd70877a..00000000 --- a/docs/WebhookSignalResponseVirtualMachine.md +++ /dev/null @@ -1,9 +0,0 @@ -# WebhookSignalResponseVirtualMachine - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**result** | **bool** | `true` if the request came from a browser running inside a virtual machine (e.g. VMWare), `false` otherwise. | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/WebhookVisit.md b/docs/WebhookVisit.md index b2e524cd..5b5f821a 100644 --- a/docs/WebhookVisit.md +++ b/docs/WebhookVisit.md @@ -9,18 +9,18 @@ Name | Type | Description | Notes **bot** | [**BotdDetectionResult**](BotdDetectionResult.md) | | [optional] **ip_info** | [**IpInfoResult**](IpInfoResult.md) | | [optional] **incognito** | **bool** | Flag if user used incognito session. | -**root_apps** | [**WebhookSignalResponseRootApps**](WebhookSignalResponseRootApps.md) | | [optional] -**emulator** | [**WebhookSignalResponseEmulator**](WebhookSignalResponseEmulator.md) | | [optional] -**cloned_app** | [**WebhookSignalResponseClonedApp**](WebhookSignalResponseClonedApp.md) | | [optional] -**factory_reset** | [**WebhookSignalResponseFactoryReset**](WebhookSignalResponseFactoryReset.md) | | [optional] -**jailbroken** | [**WebhookSignalResponseJailbroken**](WebhookSignalResponseJailbroken.md) | | [optional] -**frida** | [**WebhookSignalResponseFrida**](WebhookSignalResponseFrida.md) | | [optional] +**root_apps** | [**RootAppsResult**](RootAppsResult.md) | | [optional] +**emulator** | [**EmulatorResult**](EmulatorResult.md) | | [optional] +**cloned_app** | [**ClonedAppResult**](ClonedAppResult.md) | | [optional] +**factory_reset** | [**FactoryResetResult**](FactoryResetResult.md) | | [optional] +**jailbroken** | [**JailbrokenResult**](JailbrokenResult.md) | | [optional] +**frida** | [**FridaResult**](FridaResult.md) | | [optional] **ip_blocklist** | [**IpBlockListResult**](IpBlockListResult.md) | | [optional] -**tor** | [**WebhookSignalResponseTor**](WebhookSignalResponseTor.md) | | [optional] -**privacy_settings** | [**WebhookSignalResponsePrivacySettings**](WebhookSignalResponsePrivacySettings.md) | | [optional] -**virtual_machine** | [**WebhookSignalResponseVirtualMachine**](WebhookSignalResponseVirtualMachine.md) | | [optional] +**tor** | [**TorResult**](TorResult.md) | | [optional] +**privacy_settings** | [**PrivacySettingsResult**](PrivacySettingsResult.md) | | [optional] +**virtual_machine** | [**VirtualMachineResult**](VirtualMachineResult.md) | | [optional] **vpn** | [**VpnResult**](VpnResult.md) | | [optional] -**proxy** | [**WebhookSignalResponseProxy**](WebhookSignalResponseProxy.md) | | [optional] +**proxy** | [**ProxyResult**](ProxyResult.md) | | [optional] **tampering** | [**TamperingResult**](TamperingResult.md) | | [optional] **raw_device_attributes** | [**RawDeviceAttributesResult**](RawDeviceAttributesResult.md) | | [optional] **high_activity** | [**HighActivityResult**](HighActivityResult.md) | | [optional] diff --git a/fingerprint_pro_server_api_sdk/__init__.py b/fingerprint_pro_server_api_sdk/__init__.py index 56345ddd..cc421c58 100644 --- a/fingerprint_pro_server_api_sdk/__init__.py +++ b/fingerprint_pro_server_api_sdk/__init__.py @@ -24,6 +24,7 @@ from fingerprint_pro_server_api_sdk.models.botd_detection_result import BotdDetectionResult from fingerprint_pro_server_api_sdk.models.botd_result import BotdResult from fingerprint_pro_server_api_sdk.models.browser_details import BrowserDetails +from fingerprint_pro_server_api_sdk.models.cloned_app_result import ClonedAppResult from fingerprint_pro_server_api_sdk.models.confidence import Confidence from fingerprint_pro_server_api_sdk.models.data_center import DataCenter from fingerprint_pro_server_api_sdk.models.error_event403_response import ErrorEvent403Response @@ -32,6 +33,8 @@ from fingerprint_pro_server_api_sdk.models.error_event404_response_error import ErrorEvent404ResponseError from fingerprint_pro_server_api_sdk.models.error_visits403 import ErrorVisits403 from fingerprint_pro_server_api_sdk.models.event_response import EventResponse +from fingerprint_pro_server_api_sdk.models.factory_reset_result import FactoryResetResult +from fingerprint_pro_server_api_sdk.models.frida_result import FridaResult from fingerprint_pro_server_api_sdk.models.high_activity_result import HighActivityResult from fingerprint_pro_server_api_sdk.models.ip_location import IPLocation from fingerprint_pro_server_api_sdk.models.ip_location_city import IPLocationCity @@ -41,60 +44,46 @@ from fingerprint_pro_server_api_sdk.models.ip_info_result import IpInfoResult from fingerprint_pro_server_api_sdk.models.ip_info_result_v4 import IpInfoResultV4 from fingerprint_pro_server_api_sdk.models.ip_info_result_v6 import IpInfoResultV6 +from fingerprint_pro_server_api_sdk.models.jailbroken_result import JailbrokenResult from fingerprint_pro_server_api_sdk.models.location import Location from fingerprint_pro_server_api_sdk.models.location_spoofing_result import LocationSpoofingResult from fingerprint_pro_server_api_sdk.models.many_requests_response import ManyRequestsResponse +from fingerprint_pro_server_api_sdk.models.privacy_settings_result import PrivacySettingsResult from fingerprint_pro_server_api_sdk.models.product_error import ProductError from fingerprint_pro_server_api_sdk.models.products_response import ProductsResponse from fingerprint_pro_server_api_sdk.models.products_response_botd import ProductsResponseBotd from fingerprint_pro_server_api_sdk.models.products_response_identification import ProductsResponseIdentification from fingerprint_pro_server_api_sdk.models.products_response_identification_data import ProductsResponseIdentificationData +from fingerprint_pro_server_api_sdk.models.proxy_result import ProxyResult from fingerprint_pro_server_api_sdk.models.raw_device_attributes_result import RawDeviceAttributesResult from fingerprint_pro_server_api_sdk.models.response import Response from fingerprint_pro_server_api_sdk.models.response_visits import ResponseVisits +from fingerprint_pro_server_api_sdk.models.root_apps_result import RootAppsResult from fingerprint_pro_server_api_sdk.models.seen_at import SeenAt from fingerprint_pro_server_api_sdk.models.signal_response_cloned_app import SignalResponseClonedApp -from fingerprint_pro_server_api_sdk.models.signal_response_cloned_app_data import SignalResponseClonedAppData from fingerprint_pro_server_api_sdk.models.signal_response_emulator import SignalResponseEmulator -from fingerprint_pro_server_api_sdk.models.signal_response_emulator_data import SignalResponseEmulatorData from fingerprint_pro_server_api_sdk.models.signal_response_factory_reset import SignalResponseFactoryReset -from fingerprint_pro_server_api_sdk.models.signal_response_factory_reset_data import SignalResponseFactoryResetData from fingerprint_pro_server_api_sdk.models.signal_response_frida import SignalResponseFrida -from fingerprint_pro_server_api_sdk.models.signal_response_frida_data import SignalResponseFridaData from fingerprint_pro_server_api_sdk.models.signal_response_high_activity import SignalResponseHighActivity from fingerprint_pro_server_api_sdk.models.signal_response_incognito import SignalResponseIncognito -from fingerprint_pro_server_api_sdk.models.signal_response_incognito_data import SignalResponseIncognitoData from fingerprint_pro_server_api_sdk.models.signal_response_ip_blocklist import SignalResponseIpBlocklist from fingerprint_pro_server_api_sdk.models.signal_response_ip_info import SignalResponseIpInfo from fingerprint_pro_server_api_sdk.models.signal_response_jailbroken import SignalResponseJailbroken -from fingerprint_pro_server_api_sdk.models.signal_response_jailbroken_data import SignalResponseJailbrokenData from fingerprint_pro_server_api_sdk.models.signal_response_location_spoofing import SignalResponseLocationSpoofing from fingerprint_pro_server_api_sdk.models.signal_response_privacy_settings import SignalResponsePrivacySettings -from fingerprint_pro_server_api_sdk.models.signal_response_privacy_settings_data import SignalResponsePrivacySettingsData from fingerprint_pro_server_api_sdk.models.signal_response_proxy import SignalResponseProxy -from fingerprint_pro_server_api_sdk.models.signal_response_proxy_data import SignalResponseProxyData from fingerprint_pro_server_api_sdk.models.signal_response_raw_device_attributes import SignalResponseRawDeviceAttributes from fingerprint_pro_server_api_sdk.models.signal_response_root_apps import SignalResponseRootApps from fingerprint_pro_server_api_sdk.models.signal_response_root_apps_data import SignalResponseRootAppsData from fingerprint_pro_server_api_sdk.models.signal_response_tampering import SignalResponseTampering from fingerprint_pro_server_api_sdk.models.signal_response_tor import SignalResponseTor -from fingerprint_pro_server_api_sdk.models.signal_response_tor_data import SignalResponseTorData from fingerprint_pro_server_api_sdk.models.signal_response_virtual_machine import SignalResponseVirtualMachine -from fingerprint_pro_server_api_sdk.models.signal_response_virtual_machine_data import SignalResponseVirtualMachineData from fingerprint_pro_server_api_sdk.models.signal_response_vpn import SignalResponseVpn from fingerprint_pro_server_api_sdk.models.subdivision import Subdivision from fingerprint_pro_server_api_sdk.models.tampering_result import TamperingResult +from fingerprint_pro_server_api_sdk.models.tor_result import TorResult +from fingerprint_pro_server_api_sdk.models.virtual_machine_result import VirtualMachineResult from fingerprint_pro_server_api_sdk.models.visit import Visit from fingerprint_pro_server_api_sdk.models.vpn_result import VpnResult from fingerprint_pro_server_api_sdk.models.vpn_result_methods import VpnResultMethods -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_cloned_app import WebhookSignalResponseClonedApp -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_emulator import WebhookSignalResponseEmulator -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_factory_reset import WebhookSignalResponseFactoryReset -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_frida import WebhookSignalResponseFrida -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_jailbroken import WebhookSignalResponseJailbroken -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_privacy_settings import WebhookSignalResponsePrivacySettings -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_proxy import WebhookSignalResponseProxy -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_root_apps import WebhookSignalResponseRootApps -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_tor import WebhookSignalResponseTor -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_virtual_machine import WebhookSignalResponseVirtualMachine from fingerprint_pro_server_api_sdk.models.webhook_visit import WebhookVisit diff --git a/fingerprint_pro_server_api_sdk/models/__init__.py b/fingerprint_pro_server_api_sdk/models/__init__.py index 091c0c72..6598d718 100644 --- a/fingerprint_pro_server_api_sdk/models/__init__.py +++ b/fingerprint_pro_server_api_sdk/models/__init__.py @@ -18,77 +18,71 @@ from fingerprint_pro_server_api_sdk.models.botd_detection_result import BotdDetectionResult from fingerprint_pro_server_api_sdk.models.botd_result import BotdResult from fingerprint_pro_server_api_sdk.models.browser_details import BrowserDetails +from fingerprint_pro_server_api_sdk.models.cloned_app_result import ClonedAppResult from fingerprint_pro_server_api_sdk.models.confidence import Confidence from fingerprint_pro_server_api_sdk.models.data_center import DataCenter +from fingerprint_pro_server_api_sdk.models.deprecated_ip_location import DeprecatedIPLocation +from fingerprint_pro_server_api_sdk.models.deprecated_ip_location_city import DeprecatedIPLocationCity +from fingerprint_pro_server_api_sdk.models.emulator_result import EmulatorResult from fingerprint_pro_server_api_sdk.models.error_event403_response import ErrorEvent403Response from fingerprint_pro_server_api_sdk.models.error_event403_response_error import ErrorEvent403ResponseError from fingerprint_pro_server_api_sdk.models.error_event404_response import ErrorEvent404Response from fingerprint_pro_server_api_sdk.models.error_event404_response_error import ErrorEvent404ResponseError from fingerprint_pro_server_api_sdk.models.error_visits403 import ErrorVisits403 from fingerprint_pro_server_api_sdk.models.event_response import EventResponse +from fingerprint_pro_server_api_sdk.models.factory_reset_result import FactoryResetResult +from fingerprint_pro_server_api_sdk.models.frida_result import FridaResult from fingerprint_pro_server_api_sdk.models.high_activity_result import HighActivityResult from fingerprint_pro_server_api_sdk.models.ip_location import IPLocation from fingerprint_pro_server_api_sdk.models.ip_location_city import IPLocationCity from fingerprint_pro_server_api_sdk.models.identification_error import IdentificationError +from fingerprint_pro_server_api_sdk.models.incognito_result import IncognitoResult from fingerprint_pro_server_api_sdk.models.ip_block_list_result import IpBlockListResult from fingerprint_pro_server_api_sdk.models.ip_block_list_result_details import IpBlockListResultDetails from fingerprint_pro_server_api_sdk.models.ip_info_result import IpInfoResult from fingerprint_pro_server_api_sdk.models.ip_info_result_v4 import IpInfoResultV4 from fingerprint_pro_server_api_sdk.models.ip_info_result_v6 import IpInfoResultV6 +from fingerprint_pro_server_api_sdk.models.jailbroken_result import JailbrokenResult from fingerprint_pro_server_api_sdk.models.location import Location from fingerprint_pro_server_api_sdk.models.location_spoofing_result import LocationSpoofingResult from fingerprint_pro_server_api_sdk.models.many_requests_response import ManyRequestsResponse +from fingerprint_pro_server_api_sdk.models.privacy_settings_result import PrivacySettingsResult from fingerprint_pro_server_api_sdk.models.product_error import ProductError from fingerprint_pro_server_api_sdk.models.products_response import ProductsResponse from fingerprint_pro_server_api_sdk.models.products_response_botd import ProductsResponseBotd from fingerprint_pro_server_api_sdk.models.products_response_identification import ProductsResponseIdentification from fingerprint_pro_server_api_sdk.models.products_response_identification_data import ProductsResponseIdentificationData +from fingerprint_pro_server_api_sdk.models.proxy_result import ProxyResult from fingerprint_pro_server_api_sdk.models.raw_device_attributes_result import RawDeviceAttributesResult from fingerprint_pro_server_api_sdk.models.response import Response from fingerprint_pro_server_api_sdk.models.response_visits import ResponseVisits +from fingerprint_pro_server_api_sdk.models.root_apps_result import RootAppsResult from fingerprint_pro_server_api_sdk.models.seen_at import SeenAt from fingerprint_pro_server_api_sdk.models.signal_response_cloned_app import SignalResponseClonedApp -from fingerprint_pro_server_api_sdk.models.signal_response_cloned_app_data import SignalResponseClonedAppData from fingerprint_pro_server_api_sdk.models.signal_response_emulator import SignalResponseEmulator -from fingerprint_pro_server_api_sdk.models.signal_response_emulator_data import SignalResponseEmulatorData from fingerprint_pro_server_api_sdk.models.signal_response_factory_reset import SignalResponseFactoryReset -from fingerprint_pro_server_api_sdk.models.signal_response_factory_reset_data import SignalResponseFactoryResetData from fingerprint_pro_server_api_sdk.models.signal_response_frida import SignalResponseFrida -from fingerprint_pro_server_api_sdk.models.signal_response_frida_data import SignalResponseFridaData from fingerprint_pro_server_api_sdk.models.signal_response_high_activity import SignalResponseHighActivity from fingerprint_pro_server_api_sdk.models.signal_response_incognito import SignalResponseIncognito -from fingerprint_pro_server_api_sdk.models.signal_response_incognito_data import SignalResponseIncognitoData from fingerprint_pro_server_api_sdk.models.signal_response_ip_blocklist import SignalResponseIpBlocklist from fingerprint_pro_server_api_sdk.models.signal_response_ip_info import SignalResponseIpInfo from fingerprint_pro_server_api_sdk.models.signal_response_jailbroken import SignalResponseJailbroken -from fingerprint_pro_server_api_sdk.models.signal_response_jailbroken_data import SignalResponseJailbrokenData from fingerprint_pro_server_api_sdk.models.signal_response_location_spoofing import SignalResponseLocationSpoofing from fingerprint_pro_server_api_sdk.models.signal_response_privacy_settings import SignalResponsePrivacySettings -from fingerprint_pro_server_api_sdk.models.signal_response_privacy_settings_data import SignalResponsePrivacySettingsData from fingerprint_pro_server_api_sdk.models.signal_response_proxy import SignalResponseProxy -from fingerprint_pro_server_api_sdk.models.signal_response_proxy_data import SignalResponseProxyData from fingerprint_pro_server_api_sdk.models.signal_response_raw_device_attributes import SignalResponseRawDeviceAttributes from fingerprint_pro_server_api_sdk.models.signal_response_root_apps import SignalResponseRootApps from fingerprint_pro_server_api_sdk.models.signal_response_root_apps_data import SignalResponseRootAppsData from fingerprint_pro_server_api_sdk.models.signal_response_tampering import SignalResponseTampering from fingerprint_pro_server_api_sdk.models.signal_response_tor import SignalResponseTor -from fingerprint_pro_server_api_sdk.models.signal_response_tor_data import SignalResponseTorData from fingerprint_pro_server_api_sdk.models.signal_response_virtual_machine import SignalResponseVirtualMachine -from fingerprint_pro_server_api_sdk.models.signal_response_virtual_machine_data import SignalResponseVirtualMachineData from fingerprint_pro_server_api_sdk.models.signal_response_vpn import SignalResponseVpn from fingerprint_pro_server_api_sdk.models.subdivision import Subdivision +from fingerprint_pro_server_api_sdk.models.suspect_score_result import SuspectScoreResult from fingerprint_pro_server_api_sdk.models.tampering_result import TamperingResult +from fingerprint_pro_server_api_sdk.models.tor_result import TorResult +from fingerprint_pro_server_api_sdk.models.virtual_machine_result import VirtualMachineResult from fingerprint_pro_server_api_sdk.models.visit import Visit from fingerprint_pro_server_api_sdk.models.vpn_result import VpnResult from fingerprint_pro_server_api_sdk.models.vpn_result_methods import VpnResultMethods -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_cloned_app import WebhookSignalResponseClonedApp -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_emulator import WebhookSignalResponseEmulator -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_factory_reset import WebhookSignalResponseFactoryReset -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_frida import WebhookSignalResponseFrida -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_jailbroken import WebhookSignalResponseJailbroken -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_privacy_settings import WebhookSignalResponsePrivacySettings -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_proxy import WebhookSignalResponseProxy -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_root_apps import WebhookSignalResponseRootApps -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_tor import WebhookSignalResponseTor -from fingerprint_pro_server_api_sdk.models.webhook_signal_response_virtual_machine import WebhookSignalResponseVirtualMachine from fingerprint_pro_server_api_sdk.models.webhook_visit import WebhookVisit diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_cloned_app_data.py b/fingerprint_pro_server_api_sdk/models/cloned_app_result.py similarity index 83% rename from fingerprint_pro_server_api_sdk/models/signal_response_cloned_app_data.py rename to fingerprint_pro_server_api_sdk/models/cloned_app_result.py index c4b33c78..9e785557 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_cloned_app_data.py +++ b/fingerprint_pro_server_api_sdk/models/cloned_app_result.py @@ -15,7 +15,7 @@ import six -class SignalResponseClonedAppData(object): +class ClonedAppResult(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -36,32 +36,33 @@ class SignalResponseClonedAppData(object): } def __init__(self, result=None): # noqa: E501 - """SignalResponseClonedAppData - a model defined in Swagger""" # noqa: E501 + """ClonedAppResult - a model defined in Swagger""" # noqa: E501 self._result = None self.discriminator = None - if result is not None: - self.result = result + self.result = result @property def result(self): - """Gets the result of this SignalResponseClonedAppData. # noqa: E501 + """Gets the result of this ClonedAppResult. # noqa: E501 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. # noqa: E501 - :return: The result of this SignalResponseClonedAppData. # noqa: E501 + :return: The result of this ClonedAppResult. # noqa: E501 :rtype: bool """ return self._result @result.setter def result(self, result): - """Sets the result of this SignalResponseClonedAppData. + """Sets the result of this ClonedAppResult. 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. # noqa: E501 - :param result: The result of this SignalResponseClonedAppData. # noqa: E501 + :param result: The result of this ClonedAppResult. # noqa: E501 :type: bool """ + if result is None: + raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 self._result = result @@ -86,7 +87,7 @@ def to_dict(self): )) else: result[attr] = value - if issubclass(SignalResponseClonedAppData, dict): + if issubclass(ClonedAppResult, dict): for key, value in self.items(): result[key] = value @@ -102,14 +103,14 @@ def __repr__(self): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, SignalResponseClonedAppData): + if not isinstance(other, ClonedAppResult): return False return self.to_dict() == other.to_dict() def __ne__(self, other): """Returns true if both objects are not equal""" - if not isinstance(other, SignalResponseClonedAppData): + if not isinstance(other, ClonedAppResult): return True return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_emulator_data.py b/fingerprint_pro_server_api_sdk/models/emulator_result.py similarity index 83% rename from fingerprint_pro_server_api_sdk/models/signal_response_emulator_data.py rename to fingerprint_pro_server_api_sdk/models/emulator_result.py index 9d73d4eb..687afb67 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_emulator_data.py +++ b/fingerprint_pro_server_api_sdk/models/emulator_result.py @@ -15,7 +15,7 @@ import six -class SignalResponseEmulatorData(object): +class EmulatorResult(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -36,32 +36,33 @@ class SignalResponseEmulatorData(object): } def __init__(self, result=None): # noqa: E501 - """SignalResponseEmulatorData - a model defined in Swagger""" # noqa: E501 + """EmulatorResult - a model defined in Swagger""" # noqa: E501 self._result = None self.discriminator = None - if result is not None: - self.result = result + self.result = result @property def result(self): - """Gets the result of this SignalResponseEmulatorData. # noqa: E501 + """Gets the result of this EmulatorResult. # noqa: E501 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. # noqa: E501 - :return: The result of this SignalResponseEmulatorData. # noqa: E501 + :return: The result of this EmulatorResult. # noqa: E501 :rtype: bool """ return self._result @result.setter def result(self, result): - """Sets the result of this SignalResponseEmulatorData. + """Sets the result of this EmulatorResult. 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. # noqa: E501 - :param result: The result of this SignalResponseEmulatorData. # noqa: E501 + :param result: The result of this EmulatorResult. # noqa: E501 :type: bool """ + if result is None: + raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 self._result = result @@ -86,7 +87,7 @@ def to_dict(self): )) else: result[attr] = value - if issubclass(SignalResponseEmulatorData, dict): + if issubclass(EmulatorResult, dict): for key, value in self.items(): result[key] = value @@ -102,14 +103,14 @@ def __repr__(self): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, SignalResponseEmulatorData): + if not isinstance(other, EmulatorResult): return False return self.to_dict() == other.to_dict() def __ne__(self, other): """Returns true if both objects are not equal""" - if not isinstance(other, SignalResponseEmulatorData): + if not isinstance(other, EmulatorResult): return True return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_factory_reset.py b/fingerprint_pro_server_api_sdk/models/factory_reset_result.py similarity index 67% rename from fingerprint_pro_server_api_sdk/models/webhook_signal_response_factory_reset.py rename to fingerprint_pro_server_api_sdk/models/factory_reset_result.py index 74b93a83..75635530 100644 --- a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_factory_reset.py +++ b/fingerprint_pro_server_api_sdk/models/factory_reset_result.py @@ -15,7 +15,7 @@ import six -class WebhookSignalResponseFactoryReset(object): +class FactoryResetResult(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -38,58 +38,60 @@ class WebhookSignalResponseFactoryReset(object): } def __init__(self, time=None, timestamp=None): # noqa: E501 - """WebhookSignalResponseFactoryReset - a model defined in Swagger""" # noqa: E501 + """FactoryResetResult - a model defined in Swagger""" # noqa: E501 self._time = None self._timestamp = None self.discriminator = None - if time is not None: - self.time = time - if timestamp is not None: - self.timestamp = timestamp + self.time = time + self.timestamp = timestamp @property def time(self): - """Gets the time of this WebhookSignalResponseFactoryReset. # noqa: E501 + """Gets the time of this FactoryResetResult. # noqa: E501 - Time in UTC for the Android client when recent factory reset was done. If there is no sign of factory reset or the client isn't Android, the field will be epoch time. # noqa: E501 + Time in UTC when the most recent factory reset of the Android or iOS device was done. If there is no sign of factory reset or the client is not a mobile device, the field will contain the epoch time (1 January 1970) in UTC. # noqa: E501 - :return: The time of this WebhookSignalResponseFactoryReset. # noqa: E501 + :return: The time of this FactoryResetResult. # noqa: E501 :rtype: datetime """ return self._time @time.setter def time(self, time): - """Sets the time of this WebhookSignalResponseFactoryReset. + """Sets the time of this FactoryResetResult. - Time in UTC for the Android client when recent factory reset was done. If there is no sign of factory reset or the client isn't Android, the field will be epoch time. # noqa: E501 + Time in UTC when the most recent factory reset of the Android or iOS device was done. If there is no sign of factory reset or the client is not a mobile device, the field will contain the epoch time (1 January 1970) in UTC. # noqa: E501 - :param time: The time of this WebhookSignalResponseFactoryReset. # noqa: E501 + :param time: The time of this FactoryResetResult. # noqa: E501 :type: datetime """ + if time is None: + raise ValueError("Invalid value for `time`, must not be `None`") # noqa: E501 self._time = time @property def timestamp(self): - """Gets the timestamp of this WebhookSignalResponseFactoryReset. # noqa: E501 + """Gets the timestamp of this FactoryResetResult. # noqa: E501 Same value as it's in the `time` field but represented in timestamp format. # noqa: E501 - :return: The timestamp of this WebhookSignalResponseFactoryReset. # noqa: E501 + :return: The timestamp of this FactoryResetResult. # noqa: E501 :rtype: int """ return self._timestamp @timestamp.setter def timestamp(self, timestamp): - """Sets the timestamp of this WebhookSignalResponseFactoryReset. + """Sets the timestamp of this FactoryResetResult. Same value as it's in the `time` field but represented in timestamp format. # noqa: E501 - :param timestamp: The timestamp of this WebhookSignalResponseFactoryReset. # noqa: E501 + :param timestamp: The timestamp of this FactoryResetResult. # noqa: E501 :type: int """ + if timestamp is None: + raise ValueError("Invalid value for `timestamp`, must not be `None`") # noqa: E501 self._timestamp = timestamp @@ -114,7 +116,7 @@ def to_dict(self): )) else: result[attr] = value - if issubclass(WebhookSignalResponseFactoryReset, dict): + if issubclass(FactoryResetResult, dict): for key, value in self.items(): result[key] = value @@ -130,14 +132,14 @@ def __repr__(self): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, WebhookSignalResponseFactoryReset): + if not isinstance(other, FactoryResetResult): return False return self.to_dict() == other.to_dict() def __ne__(self, other): """Returns true if both objects are not equal""" - if not isinstance(other, WebhookSignalResponseFactoryReset): + if not isinstance(other, FactoryResetResult): return True return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_frida_data.py b/fingerprint_pro_server_api_sdk/models/frida_result.py similarity index 73% rename from fingerprint_pro_server_api_sdk/models/signal_response_frida_data.py rename to fingerprint_pro_server_api_sdk/models/frida_result.py index e01addf9..855940e3 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_frida_data.py +++ b/fingerprint_pro_server_api_sdk/models/frida_result.py @@ -15,7 +15,7 @@ import six -class SignalResponseFridaData(object): +class FridaResult(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -36,32 +36,33 @@ class SignalResponseFridaData(object): } def __init__(self, result=None): # noqa: E501 - """SignalResponseFridaData - a model defined in Swagger""" # noqa: E501 + """FridaResult - a model defined in Swagger""" # noqa: E501 self._result = None self.discriminator = None - if result is not None: - self.result = result + self.result = result @property def result(self): - """Gets the result of this SignalResponseFridaData. # noqa: E501 + """Gets the result of this FridaResult. # noqa: E501 - iOS specific [Frida](https://frida.re/docs/ios/) detection. There are 2 values: • `true` - Frida detected • `false` - No signs of Frida or the client is not iOS. # noqa: E501 + [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. # noqa: E501 - :return: The result of this SignalResponseFridaData. # noqa: E501 + :return: The result of this FridaResult. # noqa: E501 :rtype: bool """ return self._result @result.setter def result(self, result): - """Sets the result of this SignalResponseFridaData. + """Sets the result of this FridaResult. - iOS specific [Frida](https://frida.re/docs/ios/) detection. There are 2 values: • `true` - Frida detected • `false` - No signs of Frida or the client is not iOS. # noqa: E501 + [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. # noqa: E501 - :param result: The result of this SignalResponseFridaData. # noqa: E501 + :param result: The result of this FridaResult. # noqa: E501 :type: bool """ + if result is None: + raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 self._result = result @@ -86,7 +87,7 @@ def to_dict(self): )) else: result[attr] = value - if issubclass(SignalResponseFridaData, dict): + if issubclass(FridaResult, dict): for key, value in self.items(): result[key] = value @@ -102,14 +103,14 @@ def __repr__(self): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, SignalResponseFridaData): + if not isinstance(other, FridaResult): return False return self.to_dict() == other.to_dict() def __ne__(self, other): """Returns true if both objects are not equal""" - if not isinstance(other, SignalResponseFridaData): + if not isinstance(other, FridaResult): return True return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_incognito_data.py b/fingerprint_pro_server_api_sdk/models/incognito_result.py similarity index 81% rename from fingerprint_pro_server_api_sdk/models/signal_response_incognito_data.py rename to fingerprint_pro_server_api_sdk/models/incognito_result.py index f9bc0993..d251f37b 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_incognito_data.py +++ b/fingerprint_pro_server_api_sdk/models/incognito_result.py @@ -15,7 +15,7 @@ import six -class SignalResponseIncognitoData(object): +class IncognitoResult(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -36,32 +36,33 @@ class SignalResponseIncognitoData(object): } def __init__(self, result=None): # noqa: E501 - """SignalResponseIncognitoData - a model defined in Swagger""" # noqa: E501 + """IncognitoResult - a model defined in Swagger""" # noqa: E501 self._result = None self.discriminator = None - if result is not None: - self.result = result + self.result = result @property def result(self): - """Gets the result of this SignalResponseIncognitoData. # noqa: E501 + """Gets the result of this IncognitoResult. # noqa: E501 `true` if we detected incognito mode used in the browser, `false` otherwise. # noqa: E501 - :return: The result of this SignalResponseIncognitoData. # noqa: E501 + :return: The result of this IncognitoResult. # noqa: E501 :rtype: bool """ return self._result @result.setter def result(self, result): - """Sets the result of this SignalResponseIncognitoData. + """Sets the result of this IncognitoResult. `true` if we detected incognito mode used in the browser, `false` otherwise. # noqa: E501 - :param result: The result of this SignalResponseIncognitoData. # noqa: E501 + :param result: The result of this IncognitoResult. # noqa: E501 :type: bool """ + if result is None: + raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 self._result = result @@ -86,7 +87,7 @@ def to_dict(self): )) else: result[attr] = value - if issubclass(SignalResponseIncognitoData, dict): + if issubclass(IncognitoResult, dict): for key, value in self.items(): result[key] = value @@ -102,14 +103,14 @@ def __repr__(self): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, SignalResponseIncognitoData): + if not isinstance(other, IncognitoResult): return False return self.to_dict() == other.to_dict() def __ne__(self, other): """Returns true if both objects are not equal""" - if not isinstance(other, SignalResponseIncognitoData): + if not isinstance(other, IncognitoResult): return True return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_jailbroken_data.py b/fingerprint_pro_server_api_sdk/models/jailbroken_result.py similarity index 82% rename from fingerprint_pro_server_api_sdk/models/signal_response_jailbroken_data.py rename to fingerprint_pro_server_api_sdk/models/jailbroken_result.py index 99035cf8..74a30a9d 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_jailbroken_data.py +++ b/fingerprint_pro_server_api_sdk/models/jailbroken_result.py @@ -15,7 +15,7 @@ import six -class SignalResponseJailbrokenData(object): +class JailbrokenResult(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -36,32 +36,33 @@ class SignalResponseJailbrokenData(object): } def __init__(self, result=None): # noqa: E501 - """SignalResponseJailbrokenData - a model defined in Swagger""" # noqa: E501 + """JailbrokenResult - a model defined in Swagger""" # noqa: E501 self._result = None self.discriminator = None - if result is not None: - self.result = result + self.result = result @property def result(self): - """Gets the result of this SignalResponseJailbrokenData. # noqa: E501 + """Gets the result of this JailbrokenResult. # noqa: E501 iOS specific jailbreak detection. There are 2 values: • `true` - Jailbreak detected • `false` - No signs of jailbreak or the client is not iOS. # noqa: E501 - :return: The result of this SignalResponseJailbrokenData. # noqa: E501 + :return: The result of this JailbrokenResult. # noqa: E501 :rtype: bool """ return self._result @result.setter def result(self, result): - """Sets the result of this SignalResponseJailbrokenData. + """Sets the result of this JailbrokenResult. iOS specific jailbreak detection. There are 2 values: • `true` - Jailbreak detected • `false` - No signs of jailbreak or the client is not iOS. # noqa: E501 - :param result: The result of this SignalResponseJailbrokenData. # noqa: E501 + :param result: The result of this JailbrokenResult. # noqa: E501 :type: bool """ + if result is None: + raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 self._result = result @@ -86,7 +87,7 @@ def to_dict(self): )) else: result[attr] = value - if issubclass(SignalResponseJailbrokenData, dict): + if issubclass(JailbrokenResult, dict): for key, value in self.items(): result[key] = value @@ -102,14 +103,14 @@ def __repr__(self): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, SignalResponseJailbrokenData): + if not isinstance(other, JailbrokenResult): return False return self.to_dict() == other.to_dict() def __ne__(self, other): """Returns true if both objects are not equal""" - if not isinstance(other, SignalResponseJailbrokenData): + if not isinstance(other, JailbrokenResult): return True return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_privacy_settings_data.py b/fingerprint_pro_server_api_sdk/models/privacy_settings_result.py similarity index 81% rename from fingerprint_pro_server_api_sdk/models/signal_response_privacy_settings_data.py rename to fingerprint_pro_server_api_sdk/models/privacy_settings_result.py index f81601e0..8ea30c6d 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_privacy_settings_data.py +++ b/fingerprint_pro_server_api_sdk/models/privacy_settings_result.py @@ -15,7 +15,7 @@ import six -class SignalResponsePrivacySettingsData(object): +class PrivacySettingsResult(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -36,32 +36,33 @@ class SignalResponsePrivacySettingsData(object): } def __init__(self, result=None): # noqa: E501 - """SignalResponsePrivacySettingsData - a model defined in Swagger""" # noqa: E501 + """PrivacySettingsResult - a model defined in Swagger""" # noqa: E501 self._result = None self.discriminator = None - if result is not None: - self.result = result + self.result = result @property def result(self): - """Gets the result of this SignalResponsePrivacySettingsData. # noqa: E501 + """Gets the result of this PrivacySettingsResult. # noqa: E501 `true` if the request is from a privacy aware browser (e.g. Tor) or from a browser in which fingerprinting is blocked. Otherwise `false`. # noqa: E501 - :return: The result of this SignalResponsePrivacySettingsData. # noqa: E501 + :return: The result of this PrivacySettingsResult. # noqa: E501 :rtype: bool """ return self._result @result.setter def result(self, result): - """Sets the result of this SignalResponsePrivacySettingsData. + """Sets the result of this PrivacySettingsResult. `true` if the request is from a privacy aware browser (e.g. Tor) or from a browser in which fingerprinting is blocked. Otherwise `false`. # noqa: E501 - :param result: The result of this SignalResponsePrivacySettingsData. # noqa: E501 + :param result: The result of this PrivacySettingsResult. # noqa: E501 :type: bool """ + if result is None: + raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 self._result = result @@ -86,7 +87,7 @@ def to_dict(self): )) else: result[attr] = value - if issubclass(SignalResponsePrivacySettingsData, dict): + if issubclass(PrivacySettingsResult, dict): for key, value in self.items(): result[key] = value @@ -102,14 +103,14 @@ def __repr__(self): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, SignalResponsePrivacySettingsData): + if not isinstance(other, PrivacySettingsResult): return False return self.to_dict() == other.to_dict() def __ne__(self, other): """Returns true if both objects are not equal""" - if not isinstance(other, SignalResponsePrivacySettingsData): + if not isinstance(other, PrivacySettingsResult): return True return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_proxy_data.py b/fingerprint_pro_server_api_sdk/models/proxy_result.py similarity index 82% rename from fingerprint_pro_server_api_sdk/models/signal_response_proxy_data.py rename to fingerprint_pro_server_api_sdk/models/proxy_result.py index fb344c53..7f0e0880 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_proxy_data.py +++ b/fingerprint_pro_server_api_sdk/models/proxy_result.py @@ -15,7 +15,7 @@ import six -class SignalResponseProxyData(object): +class ProxyResult(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -36,32 +36,33 @@ class SignalResponseProxyData(object): } def __init__(self, result=None): # noqa: E501 - """SignalResponseProxyData - a model defined in Swagger""" # noqa: E501 + """ProxyResult - a model defined in Swagger""" # noqa: E501 self._result = None self.discriminator = None - if result is not None: - self.result = result + self.result = result @property def result(self): - """Gets the result of this SignalResponseProxyData. # noqa: E501 + """Gets the result of this ProxyResult. # noqa: E501 `true` if the request IP address is used by a public proxy provider, `false` otherwise. # noqa: E501 - :return: The result of this SignalResponseProxyData. # noqa: E501 + :return: The result of this ProxyResult. # noqa: E501 :rtype: bool """ return self._result @result.setter def result(self, result): - """Sets the result of this SignalResponseProxyData. + """Sets the result of this ProxyResult. `true` if the request IP address is used by a public proxy provider, `false` otherwise. # noqa: E501 - :param result: The result of this SignalResponseProxyData. # noqa: E501 + :param result: The result of this ProxyResult. # noqa: E501 :type: bool """ + if result is None: + raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 self._result = result @@ -86,7 +87,7 @@ def to_dict(self): )) else: result[attr] = value - if issubclass(SignalResponseProxyData, dict): + if issubclass(ProxyResult, dict): for key, value in self.items(): result[key] = value @@ -102,14 +103,14 @@ def __repr__(self): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, SignalResponseProxyData): + if not isinstance(other, ProxyResult): return False return self.to_dict() == other.to_dict() def __ne__(self, other): """Returns true if both objects are not equal""" - if not isinstance(other, SignalResponseProxyData): + if not isinstance(other, ProxyResult): return True return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_root_apps.py b/fingerprint_pro_server_api_sdk/models/root_apps_result.py similarity index 82% rename from fingerprint_pro_server_api_sdk/models/webhook_signal_response_root_apps.py rename to fingerprint_pro_server_api_sdk/models/root_apps_result.py index bbc0eb8f..c08f51a9 100644 --- a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_root_apps.py +++ b/fingerprint_pro_server_api_sdk/models/root_apps_result.py @@ -15,7 +15,7 @@ import six -class WebhookSignalResponseRootApps(object): +class RootAppsResult(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -36,32 +36,33 @@ class WebhookSignalResponseRootApps(object): } def __init__(self, result=None): # noqa: E501 - """WebhookSignalResponseRootApps - a model defined in Swagger""" # noqa: E501 + """RootAppsResult - a model defined in Swagger""" # noqa: E501 self._result = None self.discriminator = None - if result is not None: - self.result = result + self.result = result @property def result(self): - """Gets the result of this WebhookSignalResponseRootApps. # noqa: E501 + """Gets the result of this RootAppsResult. # noqa: E501 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. # noqa: E501 - :return: The result of this WebhookSignalResponseRootApps. # noqa: E501 + :return: The result of this RootAppsResult. # noqa: E501 :rtype: bool """ return self._result @result.setter def result(self, result): - """Sets the result of this WebhookSignalResponseRootApps. + """Sets the result of this RootAppsResult. 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. # noqa: E501 - :param result: The result of this WebhookSignalResponseRootApps. # noqa: E501 + :param result: The result of this RootAppsResult. # noqa: E501 :type: bool """ + if result is None: + raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 self._result = result @@ -86,7 +87,7 @@ def to_dict(self): )) else: result[attr] = value - if issubclass(WebhookSignalResponseRootApps, dict): + if issubclass(RootAppsResult, dict): for key, value in self.items(): result[key] = value @@ -102,14 +103,14 @@ def __repr__(self): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, WebhookSignalResponseRootApps): + if not isinstance(other, RootAppsResult): return False return self.to_dict() == other.to_dict() def __ne__(self, other): """Returns true if both objects are not equal""" - if not isinstance(other, WebhookSignalResponseRootApps): + if not isinstance(other, RootAppsResult): return True return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_cloned_app.py b/fingerprint_pro_server_api_sdk/models/signal_response_cloned_app.py index d66fed8c..d83ac05c 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_cloned_app.py +++ b/fingerprint_pro_server_api_sdk/models/signal_response_cloned_app.py @@ -28,7 +28,7 @@ class SignalResponseClonedApp(object): and the value is json key in definition. """ swagger_types = { - 'data': 'SignalResponseClonedAppData', + 'data': 'ClonedAppResult', 'error': 'ProductError' } @@ -53,7 +53,7 @@ def data(self): :return: The data of this SignalResponseClonedApp. # noqa: E501 - :rtype: SignalResponseClonedAppData + :rtype: ClonedAppResult """ return self._data @@ -63,7 +63,7 @@ def data(self, data): :param data: The data of this SignalResponseClonedApp. # noqa: E501 - :type: SignalResponseClonedAppData + :type: ClonedAppResult """ self._data = data diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_emulator.py b/fingerprint_pro_server_api_sdk/models/signal_response_emulator.py index 519aa9ea..f87139cc 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_emulator.py +++ b/fingerprint_pro_server_api_sdk/models/signal_response_emulator.py @@ -28,7 +28,7 @@ class SignalResponseEmulator(object): and the value is json key in definition. """ swagger_types = { - 'data': 'SignalResponseEmulatorData', + 'data': 'EmulatorResult', 'error': 'ProductError' } @@ -53,7 +53,7 @@ def data(self): :return: The data of this SignalResponseEmulator. # noqa: E501 - :rtype: SignalResponseEmulatorData + :rtype: EmulatorResult """ return self._data @@ -63,7 +63,7 @@ def data(self, data): :param data: The data of this SignalResponseEmulator. # noqa: E501 - :type: SignalResponseEmulatorData + :type: EmulatorResult """ self._data = data diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_factory_reset.py b/fingerprint_pro_server_api_sdk/models/signal_response_factory_reset.py index 1d802526..01b47238 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_factory_reset.py +++ b/fingerprint_pro_server_api_sdk/models/signal_response_factory_reset.py @@ -28,7 +28,7 @@ class SignalResponseFactoryReset(object): and the value is json key in definition. """ swagger_types = { - 'data': 'SignalResponseFactoryResetData', + 'data': 'FactoryResetResult', 'error': 'ProductError' } @@ -53,7 +53,7 @@ def data(self): :return: The data of this SignalResponseFactoryReset. # noqa: E501 - :rtype: SignalResponseFactoryResetData + :rtype: FactoryResetResult """ return self._data @@ -63,7 +63,7 @@ def data(self, data): :param data: The data of this SignalResponseFactoryReset. # noqa: E501 - :type: SignalResponseFactoryResetData + :type: FactoryResetResult """ self._data = data diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_factory_reset_data.py b/fingerprint_pro_server_api_sdk/models/signal_response_factory_reset_data.py deleted file mode 100644 index 6072f63f..00000000 --- a/fingerprint_pro_server_api_sdk/models/signal_response_factory_reset_data.py +++ /dev/null @@ -1,143 +0,0 @@ -# coding: utf-8 - -""" - Fingerprint Pro Server API - - Fingerprint Pro Server API allows you to get information about visitors and about individual events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 - - OpenAPI spec version: 3 - Contact: support@fingerprint.com - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -class SignalResponseFactoryResetData(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'time': 'datetime', - 'timestamp': 'int' - } - - attribute_map = { - 'time': 'time', - 'timestamp': 'timestamp' - } - - def __init__(self, time=None, timestamp=None): # noqa: E501 - """SignalResponseFactoryResetData - a model defined in Swagger""" # noqa: E501 - self._time = None - self._timestamp = None - self.discriminator = None - if time is not None: - self.time = time - if timestamp is not None: - self.timestamp = timestamp - - @property - def time(self): - """Gets the time of this SignalResponseFactoryResetData. # noqa: E501 - - Time in UTC for the Android client when recent factory reset was done. If there is no sign of factory reset or the client isn't Android, the field will be epoch time. # noqa: E501 - - :return: The time of this SignalResponseFactoryResetData. # noqa: E501 - :rtype: datetime - """ - return self._time - - @time.setter - def time(self, time): - """Sets the time of this SignalResponseFactoryResetData. - - Time in UTC for the Android client when recent factory reset was done. If there is no sign of factory reset or the client isn't Android, the field will be epoch time. # noqa: E501 - - :param time: The time of this SignalResponseFactoryResetData. # noqa: E501 - :type: datetime - """ - - self._time = time - - @property - def timestamp(self): - """Gets the timestamp of this SignalResponseFactoryResetData. # noqa: E501 - - Same value as it's in the `time` field but represented in timestamp format. # noqa: E501 - - :return: The timestamp of this SignalResponseFactoryResetData. # noqa: E501 - :rtype: int - """ - return self._timestamp - - @timestamp.setter - def timestamp(self, timestamp): - """Sets the timestamp of this SignalResponseFactoryResetData. - - Same value as it's in the `time` field but represented in timestamp format. # noqa: E501 - - :param timestamp: The timestamp of this SignalResponseFactoryResetData. # noqa: E501 - :type: int - """ - - self._timestamp = timestamp - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(SignalResponseFactoryResetData, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, SignalResponseFactoryResetData): - return False - - return self.to_dict() == other.to_dict() - - def __ne__(self, other): - """Returns true if both objects are not equal""" - if not isinstance(other, SignalResponseFactoryResetData): - return True - - return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_frida.py b/fingerprint_pro_server_api_sdk/models/signal_response_frida.py index 60e73374..14c69874 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_frida.py +++ b/fingerprint_pro_server_api_sdk/models/signal_response_frida.py @@ -28,7 +28,7 @@ class SignalResponseFrida(object): and the value is json key in definition. """ swagger_types = { - 'data': 'SignalResponseFridaData', + 'data': 'FridaResult', 'error': 'ProductError' } @@ -53,7 +53,7 @@ def data(self): :return: The data of this SignalResponseFrida. # noqa: E501 - :rtype: SignalResponseFridaData + :rtype: FridaResult """ return self._data @@ -63,7 +63,7 @@ def data(self, data): :param data: The data of this SignalResponseFrida. # noqa: E501 - :type: SignalResponseFridaData + :type: FridaResult """ self._data = data diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_incognito.py b/fingerprint_pro_server_api_sdk/models/signal_response_incognito.py index 1309428d..0937e73d 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_incognito.py +++ b/fingerprint_pro_server_api_sdk/models/signal_response_incognito.py @@ -28,7 +28,7 @@ class SignalResponseIncognito(object): and the value is json key in definition. """ swagger_types = { - 'data': 'SignalResponseIncognitoData', + 'data': 'IncognitoResult', 'error': 'ProductError' } @@ -53,7 +53,7 @@ def data(self): :return: The data of this SignalResponseIncognito. # noqa: E501 - :rtype: SignalResponseIncognitoData + :rtype: IncognitoResult """ return self._data @@ -63,7 +63,7 @@ def data(self, data): :param data: The data of this SignalResponseIncognito. # noqa: E501 - :type: SignalResponseIncognitoData + :type: IncognitoResult """ self._data = data diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_jailbroken.py b/fingerprint_pro_server_api_sdk/models/signal_response_jailbroken.py index 6c1147a6..2208b454 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_jailbroken.py +++ b/fingerprint_pro_server_api_sdk/models/signal_response_jailbroken.py @@ -28,7 +28,7 @@ class SignalResponseJailbroken(object): and the value is json key in definition. """ swagger_types = { - 'data': 'SignalResponseJailbrokenData', + 'data': 'JailbrokenResult', 'error': 'ProductError' } @@ -53,7 +53,7 @@ def data(self): :return: The data of this SignalResponseJailbroken. # noqa: E501 - :rtype: SignalResponseJailbrokenData + :rtype: JailbrokenResult """ return self._data @@ -63,7 +63,7 @@ def data(self, data): :param data: The data of this SignalResponseJailbroken. # noqa: E501 - :type: SignalResponseJailbrokenData + :type: JailbrokenResult """ self._data = data diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_privacy_settings.py b/fingerprint_pro_server_api_sdk/models/signal_response_privacy_settings.py index da1e3167..2d11213f 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_privacy_settings.py +++ b/fingerprint_pro_server_api_sdk/models/signal_response_privacy_settings.py @@ -28,7 +28,7 @@ class SignalResponsePrivacySettings(object): and the value is json key in definition. """ swagger_types = { - 'data': 'SignalResponsePrivacySettingsData', + 'data': 'PrivacySettingsResult', 'error': 'ProductError' } @@ -53,7 +53,7 @@ def data(self): :return: The data of this SignalResponsePrivacySettings. # noqa: E501 - :rtype: SignalResponsePrivacySettingsData + :rtype: PrivacySettingsResult """ return self._data @@ -63,7 +63,7 @@ def data(self, data): :param data: The data of this SignalResponsePrivacySettings. # noqa: E501 - :type: SignalResponsePrivacySettingsData + :type: PrivacySettingsResult """ self._data = data diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_proxy.py b/fingerprint_pro_server_api_sdk/models/signal_response_proxy.py index 9219f660..0d71ec77 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_proxy.py +++ b/fingerprint_pro_server_api_sdk/models/signal_response_proxy.py @@ -28,7 +28,7 @@ class SignalResponseProxy(object): and the value is json key in definition. """ swagger_types = { - 'data': 'SignalResponseProxyData', + 'data': 'ProxyResult', 'error': 'ProductError' } @@ -53,7 +53,7 @@ def data(self): :return: The data of this SignalResponseProxy. # noqa: E501 - :rtype: SignalResponseProxyData + :rtype: ProxyResult """ return self._data @@ -63,7 +63,7 @@ def data(self, data): :param data: The data of this SignalResponseProxy. # noqa: E501 - :type: SignalResponseProxyData + :type: ProxyResult """ self._data = data diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_root_apps.py b/fingerprint_pro_server_api_sdk/models/signal_response_root_apps.py index 38877157..7cfb63b2 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_root_apps.py +++ b/fingerprint_pro_server_api_sdk/models/signal_response_root_apps.py @@ -28,7 +28,7 @@ class SignalResponseRootApps(object): and the value is json key in definition. """ swagger_types = { - 'data': 'SignalResponseRootAppsData', + 'data': 'RootAppsResult', 'error': 'ProductError' } @@ -53,7 +53,7 @@ def data(self): :return: The data of this SignalResponseRootApps. # noqa: E501 - :rtype: SignalResponseRootAppsData + :rtype: RootAppsResult """ return self._data @@ -63,7 +63,7 @@ def data(self, data): :param data: The data of this SignalResponseRootApps. # noqa: E501 - :type: SignalResponseRootAppsData + :type: RootAppsResult """ self._data = data diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_root_apps_data.py b/fingerprint_pro_server_api_sdk/models/signal_response_root_apps_data.py deleted file mode 100644 index 84e945fd..00000000 --- a/fingerprint_pro_server_api_sdk/models/signal_response_root_apps_data.py +++ /dev/null @@ -1,115 +0,0 @@ -# coding: utf-8 - -""" - Fingerprint Pro Server API - - Fingerprint Pro Server API allows you to get information about visitors and about individual events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 - - OpenAPI spec version: 3 - Contact: support@fingerprint.com - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -class SignalResponseRootAppsData(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'result': 'bool' - } - - attribute_map = { - 'result': 'result' - } - - def __init__(self, result=None): # noqa: E501 - """SignalResponseRootAppsData - a model defined in Swagger""" # noqa: E501 - self._result = None - self.discriminator = None - if result is not None: - self.result = result - - @property - def result(self): - """Gets the result of this SignalResponseRootAppsData. # noqa: E501 - - 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 is not Android. # noqa: E501 - - :return: The result of this SignalResponseRootAppsData. # noqa: E501 - :rtype: bool - """ - return self._result - - @result.setter - def result(self, result): - """Sets the result of this SignalResponseRootAppsData. - - 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 is not Android. # noqa: E501 - - :param result: The result of this SignalResponseRootAppsData. # noqa: E501 - :type: bool - """ - - self._result = result - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(SignalResponseRootAppsData, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, SignalResponseRootAppsData): - return False - - return self.to_dict() == other.to_dict() - - def __ne__(self, other): - """Returns true if both objects are not equal""" - if not isinstance(other, SignalResponseRootAppsData): - return True - - return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_tor.py b/fingerprint_pro_server_api_sdk/models/signal_response_tor.py index 9785258b..c1861bc0 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_tor.py +++ b/fingerprint_pro_server_api_sdk/models/signal_response_tor.py @@ -28,7 +28,7 @@ class SignalResponseTor(object): and the value is json key in definition. """ swagger_types = { - 'data': 'SignalResponseTorData', + 'data': 'TorResult', 'error': 'ProductError' } @@ -53,7 +53,7 @@ def data(self): :return: The data of this SignalResponseTor. # noqa: E501 - :rtype: SignalResponseTorData + :rtype: TorResult """ return self._data @@ -63,7 +63,7 @@ def data(self, data): :param data: The data of this SignalResponseTor. # noqa: E501 - :type: SignalResponseTorData + :type: TorResult """ self._data = data diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_virtual_machine.py b/fingerprint_pro_server_api_sdk/models/signal_response_virtual_machine.py index 477ff269..e26dffef 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_virtual_machine.py +++ b/fingerprint_pro_server_api_sdk/models/signal_response_virtual_machine.py @@ -28,7 +28,7 @@ class SignalResponseVirtualMachine(object): and the value is json key in definition. """ swagger_types = { - 'data': 'SignalResponseVirtualMachineData', + 'data': 'VirtualMachineResult', 'error': 'ProductError' } @@ -53,7 +53,7 @@ def data(self): :return: The data of this SignalResponseVirtualMachine. # noqa: E501 - :rtype: SignalResponseVirtualMachineData + :rtype: VirtualMachineResult """ return self._data @@ -63,7 +63,7 @@ def data(self, data): :param data: The data of this SignalResponseVirtualMachine. # noqa: E501 - :type: SignalResponseVirtualMachineData + :type: VirtualMachineResult """ self._data = data diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_tor_data.py b/fingerprint_pro_server_api_sdk/models/tor_result.py similarity index 83% rename from fingerprint_pro_server_api_sdk/models/signal_response_tor_data.py rename to fingerprint_pro_server_api_sdk/models/tor_result.py index 9f71b09f..4978a588 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_tor_data.py +++ b/fingerprint_pro_server_api_sdk/models/tor_result.py @@ -15,7 +15,7 @@ import six -class SignalResponseTorData(object): +class TorResult(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -36,32 +36,33 @@ class SignalResponseTorData(object): } def __init__(self, result=None): # noqa: E501 - """SignalResponseTorData - a model defined in Swagger""" # noqa: E501 + """TorResult - a model defined in Swagger""" # noqa: E501 self._result = None self.discriminator = None - if result is not None: - self.result = result + self.result = result @property def result(self): - """Gets the result of this SignalResponseTorData. # noqa: E501 + """Gets the result of this TorResult. # noqa: E501 `true` if the request IP address is a known tor exit node, `false` otherwise. # noqa: E501 - :return: The result of this SignalResponseTorData. # noqa: E501 + :return: The result of this TorResult. # noqa: E501 :rtype: bool """ return self._result @result.setter def result(self, result): - """Sets the result of this SignalResponseTorData. + """Sets the result of this TorResult. `true` if the request IP address is a known tor exit node, `false` otherwise. # noqa: E501 - :param result: The result of this SignalResponseTorData. # noqa: E501 + :param result: The result of this TorResult. # noqa: E501 :type: bool """ + if result is None: + raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 self._result = result @@ -86,7 +87,7 @@ def to_dict(self): )) else: result[attr] = value - if issubclass(SignalResponseTorData, dict): + if issubclass(TorResult, dict): for key, value in self.items(): result[key] = value @@ -102,14 +103,14 @@ def __repr__(self): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, SignalResponseTorData): + if not isinstance(other, TorResult): return False return self.to_dict() == other.to_dict() def __ne__(self, other): """Returns true if both objects are not equal""" - if not isinstance(other, SignalResponseTorData): + if not isinstance(other, TorResult): return True return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_virtual_machine_data.py b/fingerprint_pro_server_api_sdk/models/virtual_machine_result.py similarity index 81% rename from fingerprint_pro_server_api_sdk/models/signal_response_virtual_machine_data.py rename to fingerprint_pro_server_api_sdk/models/virtual_machine_result.py index 9b8f319c..67038bb4 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_virtual_machine_data.py +++ b/fingerprint_pro_server_api_sdk/models/virtual_machine_result.py @@ -15,7 +15,7 @@ import six -class SignalResponseVirtualMachineData(object): +class VirtualMachineResult(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -36,32 +36,33 @@ class SignalResponseVirtualMachineData(object): } def __init__(self, result=None): # noqa: E501 - """SignalResponseVirtualMachineData - a model defined in Swagger""" # noqa: E501 + """VirtualMachineResult - a model defined in Swagger""" # noqa: E501 self._result = None self.discriminator = None - if result is not None: - self.result = result + self.result = result @property def result(self): - """Gets the result of this SignalResponseVirtualMachineData. # noqa: E501 + """Gets the result of this VirtualMachineResult. # noqa: E501 `true` if the request came from a browser running inside a virtual machine (e.g. VMWare), `false` otherwise. # noqa: E501 - :return: The result of this SignalResponseVirtualMachineData. # noqa: E501 + :return: The result of this VirtualMachineResult. # noqa: E501 :rtype: bool """ return self._result @result.setter def result(self, result): - """Sets the result of this SignalResponseVirtualMachineData. + """Sets the result of this VirtualMachineResult. `true` if the request came from a browser running inside a virtual machine (e.g. VMWare), `false` otherwise. # noqa: E501 - :param result: The result of this SignalResponseVirtualMachineData. # noqa: E501 + :param result: The result of this VirtualMachineResult. # noqa: E501 :type: bool """ + if result is None: + raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 self._result = result @@ -86,7 +87,7 @@ def to_dict(self): )) else: result[attr] = value - if issubclass(SignalResponseVirtualMachineData, dict): + if issubclass(VirtualMachineResult, dict): for key, value in self.items(): result[key] = value @@ -102,14 +103,14 @@ def __repr__(self): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, SignalResponseVirtualMachineData): + if not isinstance(other, VirtualMachineResult): return False return self.to_dict() == other.to_dict() def __ne__(self, other): """Returns true if both objects are not equal""" - if not isinstance(other, SignalResponseVirtualMachineData): + if not isinstance(other, VirtualMachineResult): return True return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_cloned_app.py b/fingerprint_pro_server_api_sdk/models/webhook_signal_response_cloned_app.py deleted file mode 100644 index b0545e92..00000000 --- a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_cloned_app.py +++ /dev/null @@ -1,115 +0,0 @@ -# coding: utf-8 - -""" - Fingerprint Pro Server API - - Fingerprint Pro Server API allows you to get information about visitors and about individual events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 - - OpenAPI spec version: 3 - Contact: support@fingerprint.com - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -class WebhookSignalResponseClonedApp(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'result': 'bool' - } - - attribute_map = { - 'result': 'result' - } - - def __init__(self, result=None): # noqa: E501 - """WebhookSignalResponseClonedApp - a model defined in Swagger""" # noqa: E501 - self._result = None - self.discriminator = None - if result is not None: - self.result = result - - @property - def result(self): - """Gets the result of this WebhookSignalResponseClonedApp. # noqa: E501 - - 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. # noqa: E501 - - :return: The result of this WebhookSignalResponseClonedApp. # noqa: E501 - :rtype: bool - """ - return self._result - - @result.setter - def result(self, result): - """Sets the result of this WebhookSignalResponseClonedApp. - - 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. # noqa: E501 - - :param result: The result of this WebhookSignalResponseClonedApp. # noqa: E501 - :type: bool - """ - - self._result = result - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(WebhookSignalResponseClonedApp, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, WebhookSignalResponseClonedApp): - return False - - return self.to_dict() == other.to_dict() - - def __ne__(self, other): - """Returns true if both objects are not equal""" - if not isinstance(other, WebhookSignalResponseClonedApp): - return True - - return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_emulator.py b/fingerprint_pro_server_api_sdk/models/webhook_signal_response_emulator.py deleted file mode 100644 index b11d7ad4..00000000 --- a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_emulator.py +++ /dev/null @@ -1,115 +0,0 @@ -# coding: utf-8 - -""" - Fingerprint Pro Server API - - Fingerprint Pro Server API allows you to get information about visitors and about individual events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 - - OpenAPI spec version: 3 - Contact: support@fingerprint.com - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -class WebhookSignalResponseEmulator(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'result': 'bool' - } - - attribute_map = { - 'result': 'result' - } - - def __init__(self, result=None): # noqa: E501 - """WebhookSignalResponseEmulator - a model defined in Swagger""" # noqa: E501 - self._result = None - self.discriminator = None - if result is not None: - self.result = result - - @property - def result(self): - """Gets the result of this WebhookSignalResponseEmulator. # noqa: E501 - - 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 isn't Android. # noqa: E501 - - :return: The result of this WebhookSignalResponseEmulator. # noqa: E501 - :rtype: bool - """ - return self._result - - @result.setter - def result(self, result): - """Sets the result of this WebhookSignalResponseEmulator. - - 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 isn't Android. # noqa: E501 - - :param result: The result of this WebhookSignalResponseEmulator. # noqa: E501 - :type: bool - """ - - self._result = result - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(WebhookSignalResponseEmulator, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, WebhookSignalResponseEmulator): - return False - - return self.to_dict() == other.to_dict() - - def __ne__(self, other): - """Returns true if both objects are not equal""" - if not isinstance(other, WebhookSignalResponseEmulator): - return True - - return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_frida.py b/fingerprint_pro_server_api_sdk/models/webhook_signal_response_frida.py deleted file mode 100644 index e0ee36ea..00000000 --- a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_frida.py +++ /dev/null @@ -1,115 +0,0 @@ -# coding: utf-8 - -""" - Fingerprint Pro Server API - - Fingerprint Pro Server API allows you to get information about visitors and about individual events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 - - OpenAPI spec version: 3 - Contact: support@fingerprint.com - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -class WebhookSignalResponseFrida(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'result': 'bool' - } - - attribute_map = { - 'result': 'result' - } - - def __init__(self, result=None): # noqa: E501 - """WebhookSignalResponseFrida - a model defined in Swagger""" # noqa: E501 - self._result = None - self.discriminator = None - if result is not None: - self.result = result - - @property - def result(self): - """Gets the result of this WebhookSignalResponseFrida. # noqa: E501 - - iOS specific [Frida](https://frida.re/docs/ios/) detection. There are 2 values: • `true` - Frida detected • `false` - No signs of Frida or the client is not iOS. # noqa: E501 - - :return: The result of this WebhookSignalResponseFrida. # noqa: E501 - :rtype: bool - """ - return self._result - - @result.setter - def result(self, result): - """Sets the result of this WebhookSignalResponseFrida. - - iOS specific [Frida](https://frida.re/docs/ios/) detection. There are 2 values: • `true` - Frida detected • `false` - No signs of Frida or the client is not iOS. # noqa: E501 - - :param result: The result of this WebhookSignalResponseFrida. # noqa: E501 - :type: bool - """ - - self._result = result - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(WebhookSignalResponseFrida, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, WebhookSignalResponseFrida): - return False - - return self.to_dict() == other.to_dict() - - def __ne__(self, other): - """Returns true if both objects are not equal""" - if not isinstance(other, WebhookSignalResponseFrida): - return True - - return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_jailbroken.py b/fingerprint_pro_server_api_sdk/models/webhook_signal_response_jailbroken.py deleted file mode 100644 index f4521561..00000000 --- a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_jailbroken.py +++ /dev/null @@ -1,115 +0,0 @@ -# coding: utf-8 - -""" - Fingerprint Pro Server API - - Fingerprint Pro Server API allows you to get information about visitors and about individual events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 - - OpenAPI spec version: 3 - Contact: support@fingerprint.com - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -class WebhookSignalResponseJailbroken(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'result': 'bool' - } - - attribute_map = { - 'result': 'result' - } - - def __init__(self, result=None): # noqa: E501 - """WebhookSignalResponseJailbroken - a model defined in Swagger""" # noqa: E501 - self._result = None - self.discriminator = None - if result is not None: - self.result = result - - @property - def result(self): - """Gets the result of this WebhookSignalResponseJailbroken. # noqa: E501 - - iOS specific jailbreak detection. There are 2 values: • `true` - Jailbreak detected • `false` - No signs of jailbreak or the client is not iOS. # noqa: E501 - - :return: The result of this WebhookSignalResponseJailbroken. # noqa: E501 - :rtype: bool - """ - return self._result - - @result.setter - def result(self, result): - """Sets the result of this WebhookSignalResponseJailbroken. - - iOS specific jailbreak detection. There are 2 values: • `true` - Jailbreak detected • `false` - No signs of jailbreak or the client is not iOS. # noqa: E501 - - :param result: The result of this WebhookSignalResponseJailbroken. # noqa: E501 - :type: bool - """ - - self._result = result - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(WebhookSignalResponseJailbroken, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, WebhookSignalResponseJailbroken): - return False - - return self.to_dict() == other.to_dict() - - def __ne__(self, other): - """Returns true if both objects are not equal""" - if not isinstance(other, WebhookSignalResponseJailbroken): - return True - - return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_privacy_settings.py b/fingerprint_pro_server_api_sdk/models/webhook_signal_response_privacy_settings.py deleted file mode 100644 index 668fb7e3..00000000 --- a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_privacy_settings.py +++ /dev/null @@ -1,115 +0,0 @@ -# coding: utf-8 - -""" - Fingerprint Pro Server API - - Fingerprint Pro Server API allows you to get information about visitors and about individual events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 - - OpenAPI spec version: 3 - Contact: support@fingerprint.com - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -class WebhookSignalResponsePrivacySettings(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'result': 'bool' - } - - attribute_map = { - 'result': 'result' - } - - def __init__(self, result=None): # noqa: E501 - """WebhookSignalResponsePrivacySettings - a model defined in Swagger""" # noqa: E501 - self._result = None - self.discriminator = None - if result is not None: - self.result = result - - @property - def result(self): - """Gets the result of this WebhookSignalResponsePrivacySettings. # noqa: E501 - - `true` if the request is from a privacy aware browser (e.g. Tor) or from a browser in which fingerprinting is blocked. Otherwise `false`. # noqa: E501 - - :return: The result of this WebhookSignalResponsePrivacySettings. # noqa: E501 - :rtype: bool - """ - return self._result - - @result.setter - def result(self, result): - """Sets the result of this WebhookSignalResponsePrivacySettings. - - `true` if the request is from a privacy aware browser (e.g. Tor) or from a browser in which fingerprinting is blocked. Otherwise `false`. # noqa: E501 - - :param result: The result of this WebhookSignalResponsePrivacySettings. # noqa: E501 - :type: bool - """ - - self._result = result - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(WebhookSignalResponsePrivacySettings, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, WebhookSignalResponsePrivacySettings): - return False - - return self.to_dict() == other.to_dict() - - def __ne__(self, other): - """Returns true if both objects are not equal""" - if not isinstance(other, WebhookSignalResponsePrivacySettings): - return True - - return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_proxy.py b/fingerprint_pro_server_api_sdk/models/webhook_signal_response_proxy.py deleted file mode 100644 index 3182c09b..00000000 --- a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_proxy.py +++ /dev/null @@ -1,115 +0,0 @@ -# coding: utf-8 - -""" - Fingerprint Pro Server API - - Fingerprint Pro Server API allows you to get information about visitors and about individual events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 - - OpenAPI spec version: 3 - Contact: support@fingerprint.com - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -class WebhookSignalResponseProxy(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'result': 'bool' - } - - attribute_map = { - 'result': 'result' - } - - def __init__(self, result=None): # noqa: E501 - """WebhookSignalResponseProxy - a model defined in Swagger""" # noqa: E501 - self._result = None - self.discriminator = None - if result is not None: - self.result = result - - @property - def result(self): - """Gets the result of this WebhookSignalResponseProxy. # noqa: E501 - - `true` if the request IP address is used by a public proxy provider, `false` otherwise. # noqa: E501 - - :return: The result of this WebhookSignalResponseProxy. # noqa: E501 - :rtype: bool - """ - return self._result - - @result.setter - def result(self, result): - """Sets the result of this WebhookSignalResponseProxy. - - `true` if the request IP address is used by a public proxy provider, `false` otherwise. # noqa: E501 - - :param result: The result of this WebhookSignalResponseProxy. # noqa: E501 - :type: bool - """ - - self._result = result - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(WebhookSignalResponseProxy, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, WebhookSignalResponseProxy): - return False - - return self.to_dict() == other.to_dict() - - def __ne__(self, other): - """Returns true if both objects are not equal""" - if not isinstance(other, WebhookSignalResponseProxy): - return True - - return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_tor.py b/fingerprint_pro_server_api_sdk/models/webhook_signal_response_tor.py deleted file mode 100644 index 830b6acf..00000000 --- a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_tor.py +++ /dev/null @@ -1,115 +0,0 @@ -# coding: utf-8 - -""" - Fingerprint Pro Server API - - Fingerprint Pro Server API allows you to get information about visitors and about individual events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 - - OpenAPI spec version: 3 - Contact: support@fingerprint.com - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -class WebhookSignalResponseTor(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'result': 'bool' - } - - attribute_map = { - 'result': 'result' - } - - def __init__(self, result=None): # noqa: E501 - """WebhookSignalResponseTor - a model defined in Swagger""" # noqa: E501 - self._result = None - self.discriminator = None - if result is not None: - self.result = result - - @property - def result(self): - """Gets the result of this WebhookSignalResponseTor. # noqa: E501 - - `true` if the request IP address is a known tor exit node, `false` otherwise. # noqa: E501 - - :return: The result of this WebhookSignalResponseTor. # noqa: E501 - :rtype: bool - """ - return self._result - - @result.setter - def result(self, result): - """Sets the result of this WebhookSignalResponseTor. - - `true` if the request IP address is a known tor exit node, `false` otherwise. # noqa: E501 - - :param result: The result of this WebhookSignalResponseTor. # noqa: E501 - :type: bool - """ - - self._result = result - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(WebhookSignalResponseTor, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, WebhookSignalResponseTor): - return False - - return self.to_dict() == other.to_dict() - - def __ne__(self, other): - """Returns true if both objects are not equal""" - if not isinstance(other, WebhookSignalResponseTor): - return True - - return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_virtual_machine.py b/fingerprint_pro_server_api_sdk/models/webhook_signal_response_virtual_machine.py deleted file mode 100644 index cd228c2a..00000000 --- a/fingerprint_pro_server_api_sdk/models/webhook_signal_response_virtual_machine.py +++ /dev/null @@ -1,115 +0,0 @@ -# coding: utf-8 - -""" - Fingerprint Pro Server API - - Fingerprint Pro Server API allows you to get information about visitors and about individual events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 - - OpenAPI spec version: 3 - Contact: support@fingerprint.com - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -class WebhookSignalResponseVirtualMachine(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'result': 'bool' - } - - attribute_map = { - 'result': 'result' - } - - def __init__(self, result=None): # noqa: E501 - """WebhookSignalResponseVirtualMachine - a model defined in Swagger""" # noqa: E501 - self._result = None - self.discriminator = None - if result is not None: - self.result = result - - @property - def result(self): - """Gets the result of this WebhookSignalResponseVirtualMachine. # noqa: E501 - - `true` if the request came from a browser running inside a virtual machine (e.g. VMWare), `false` otherwise. # noqa: E501 - - :return: The result of this WebhookSignalResponseVirtualMachine. # noqa: E501 - :rtype: bool - """ - return self._result - - @result.setter - def result(self, result): - """Sets the result of this WebhookSignalResponseVirtualMachine. - - `true` if the request came from a browser running inside a virtual machine (e.g. VMWare), `false` otherwise. # noqa: E501 - - :param result: The result of this WebhookSignalResponseVirtualMachine. # noqa: E501 - :type: bool - """ - - self._result = result - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(WebhookSignalResponseVirtualMachine, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, WebhookSignalResponseVirtualMachine): - return False - - return self.to_dict() == other.to_dict() - - def __ne__(self, other): - """Returns true if both objects are not equal""" - if not isinstance(other, WebhookSignalResponseVirtualMachine): - return True - - return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/webhook_visit.py b/fingerprint_pro_server_api_sdk/models/webhook_visit.py index 3d8a40ea..8de9932b 100644 --- a/fingerprint_pro_server_api_sdk/models/webhook_visit.py +++ b/fingerprint_pro_server_api_sdk/models/webhook_visit.py @@ -34,18 +34,18 @@ class WebhookVisit(object): 'bot': 'BotdDetectionResult', 'ip_info': 'IpInfoResult', 'incognito': 'bool', - 'root_apps': 'WebhookSignalResponseRootApps', - 'emulator': 'WebhookSignalResponseEmulator', - 'cloned_app': 'WebhookSignalResponseClonedApp', - 'factory_reset': 'WebhookSignalResponseFactoryReset', - 'jailbroken': 'WebhookSignalResponseJailbroken', - 'frida': 'WebhookSignalResponseFrida', + 'root_apps': 'RootAppsResult', + 'emulator': 'EmulatorResult', + 'cloned_app': 'ClonedAppResult', + 'factory_reset': 'FactoryResetResult', + 'jailbroken': 'JailbrokenResult', + 'frida': 'FridaResult', 'ip_blocklist': 'IpBlockListResult', - 'tor': 'WebhookSignalResponseTor', - 'privacy_settings': 'WebhookSignalResponsePrivacySettings', - 'virtual_machine': 'WebhookSignalResponseVirtualMachine', + 'tor': 'TorResult', + 'privacy_settings': 'PrivacySettingsResult', + 'virtual_machine': 'VirtualMachineResult', 'vpn': 'VpnResult', - 'proxy': 'WebhookSignalResponseProxy', + 'proxy': 'ProxyResult', 'tampering': 'TamperingResult', 'raw_device_attributes': 'RawDeviceAttributesResult', 'high_activity': 'HighActivityResult', @@ -338,7 +338,7 @@ def root_apps(self): :return: The root_apps of this WebhookVisit. # noqa: E501 - :rtype: WebhookSignalResponseRootApps + :rtype: RootAppsResult """ return self._root_apps @@ -348,7 +348,7 @@ def root_apps(self, root_apps): :param root_apps: The root_apps of this WebhookVisit. # noqa: E501 - :type: WebhookSignalResponseRootApps + :type: RootAppsResult """ self._root_apps = root_apps @@ -359,7 +359,7 @@ def emulator(self): :return: The emulator of this WebhookVisit. # noqa: E501 - :rtype: WebhookSignalResponseEmulator + :rtype: EmulatorResult """ return self._emulator @@ -369,7 +369,7 @@ def emulator(self, emulator): :param emulator: The emulator of this WebhookVisit. # noqa: E501 - :type: WebhookSignalResponseEmulator + :type: EmulatorResult """ self._emulator = emulator @@ -380,7 +380,7 @@ def cloned_app(self): :return: The cloned_app of this WebhookVisit. # noqa: E501 - :rtype: WebhookSignalResponseClonedApp + :rtype: ClonedAppResult """ return self._cloned_app @@ -390,7 +390,7 @@ def cloned_app(self, cloned_app): :param cloned_app: The cloned_app of this WebhookVisit. # noqa: E501 - :type: WebhookSignalResponseClonedApp + :type: ClonedAppResult """ self._cloned_app = cloned_app @@ -401,7 +401,7 @@ def factory_reset(self): :return: The factory_reset of this WebhookVisit. # noqa: E501 - :rtype: WebhookSignalResponseFactoryReset + :rtype: FactoryResetResult """ return self._factory_reset @@ -411,7 +411,7 @@ def factory_reset(self, factory_reset): :param factory_reset: The factory_reset of this WebhookVisit. # noqa: E501 - :type: WebhookSignalResponseFactoryReset + :type: FactoryResetResult """ self._factory_reset = factory_reset @@ -422,7 +422,7 @@ def jailbroken(self): :return: The jailbroken of this WebhookVisit. # noqa: E501 - :rtype: WebhookSignalResponseJailbroken + :rtype: JailbrokenResult """ return self._jailbroken @@ -432,7 +432,7 @@ def jailbroken(self, jailbroken): :param jailbroken: The jailbroken of this WebhookVisit. # noqa: E501 - :type: WebhookSignalResponseJailbroken + :type: JailbrokenResult """ self._jailbroken = jailbroken @@ -443,7 +443,7 @@ def frida(self): :return: The frida of this WebhookVisit. # noqa: E501 - :rtype: WebhookSignalResponseFrida + :rtype: FridaResult """ return self._frida @@ -453,7 +453,7 @@ def frida(self, frida): :param frida: The frida of this WebhookVisit. # noqa: E501 - :type: WebhookSignalResponseFrida + :type: FridaResult """ self._frida = frida @@ -485,7 +485,7 @@ def tor(self): :return: The tor of this WebhookVisit. # noqa: E501 - :rtype: WebhookSignalResponseTor + :rtype: TorResult """ return self._tor @@ -495,7 +495,7 @@ def tor(self, tor): :param tor: The tor of this WebhookVisit. # noqa: E501 - :type: WebhookSignalResponseTor + :type: TorResult """ self._tor = tor @@ -506,7 +506,7 @@ def privacy_settings(self): :return: The privacy_settings of this WebhookVisit. # noqa: E501 - :rtype: WebhookSignalResponsePrivacySettings + :rtype: PrivacySettingsResult """ return self._privacy_settings @@ -516,7 +516,7 @@ def privacy_settings(self, privacy_settings): :param privacy_settings: The privacy_settings of this WebhookVisit. # noqa: E501 - :type: WebhookSignalResponsePrivacySettings + :type: PrivacySettingsResult """ self._privacy_settings = privacy_settings @@ -527,7 +527,7 @@ def virtual_machine(self): :return: The virtual_machine of this WebhookVisit. # noqa: E501 - :rtype: WebhookSignalResponseVirtualMachine + :rtype: VirtualMachineResult """ return self._virtual_machine @@ -537,7 +537,7 @@ def virtual_machine(self, virtual_machine): :param virtual_machine: The virtual_machine of this WebhookVisit. # noqa: E501 - :type: WebhookSignalResponseVirtualMachine + :type: VirtualMachineResult """ self._virtual_machine = virtual_machine @@ -569,7 +569,7 @@ def proxy(self): :return: The proxy of this WebhookVisit. # noqa: E501 - :rtype: WebhookSignalResponseProxy + :rtype: ProxyResult """ return self._proxy @@ -579,7 +579,7 @@ def proxy(self, proxy): :param proxy: The proxy of this WebhookVisit. # noqa: E501 - :type: WebhookSignalResponseProxy + :type: ProxyResult """ self._proxy = proxy @@ -745,7 +745,7 @@ def ip_location(self): :return: The ip_location of this WebhookVisit. # noqa: E501 - :rtype: IPLocation + :rtype: DeprecatedIPLocation """ return self._ip_location @@ -755,7 +755,7 @@ def ip_location(self, ip_location): :param ip_location: The ip_location of this WebhookVisit. # noqa: E501 - :type: IPLocation + :type: DeprecatedIPLocation """ self._ip_location = ip_location From 331f2a82b31e7a281dfaa7921b015128b147cbe8 Mon Sep 17 00:00:00 2001 From: Ilya Taratukhin Date: Fri, 15 Mar 2024 17:55:21 +0100 Subject: [PATCH 05/13] feat: add `SuspectScore` smart signal support --- README.md | 3 +- docs/ProductsResponse.md | 1 + docs/SignalResponseSuspectScore.md | 10 ++ docs/SuspectScoreResult.md | 9 ++ docs/WebhookVisit.md | 1 + fingerprint_pro_server_api_sdk/__init__.py | 3 +- .../models/__init__.py | 2 +- .../models/products_response.py | 28 +++- .../models/signal_response_suspect_score.py | 139 ++++++++++++++++++ .../models/suspect_score_result.py | 116 +++++++++++++++ .../models/webhook_visit.py | 28 +++- 11 files changed, 335 insertions(+), 5 deletions(-) create mode 100644 docs/SignalResponseSuspectScore.md create mode 100644 docs/SuspectScoreResult.md create mode 100644 fingerprint_pro_server_api_sdk/models/signal_response_suspect_score.py create mode 100644 fingerprint_pro_server_api_sdk/models/suspect_score_result.py diff --git a/README.md b/README.md index 0acacf2a..8cd6346f 100644 --- a/README.md +++ b/README.md @@ -242,12 +242,13 @@ Class | Method | HTTP request | Description - [SignalResponseProxy](docs/SignalResponseProxy.md) - [SignalResponseRawDeviceAttributes](docs/SignalResponseRawDeviceAttributes.md) - [SignalResponseRootApps](docs/SignalResponseRootApps.md) - - [SignalResponseRootAppsData](docs/SignalResponseRootAppsData.md) + - [SignalResponseSuspectScore](docs/SignalResponseSuspectScore.md) - [SignalResponseTampering](docs/SignalResponseTampering.md) - [SignalResponseTor](docs/SignalResponseTor.md) - [SignalResponseVirtualMachine](docs/SignalResponseVirtualMachine.md) - [SignalResponseVpn](docs/SignalResponseVpn.md) - [Subdivision](docs/Subdivision.md) + - [SuspectScoreResult](docs/SuspectScoreResult.md) - [TamperingResult](docs/TamperingResult.md) - [TorResult](docs/TorResult.md) - [VirtualMachineResult](docs/VirtualMachineResult.md) diff --git a/docs/ProductsResponse.md b/docs/ProductsResponse.md index 2f0f6d80..009f3eed 100644 --- a/docs/ProductsResponse.md +++ b/docs/ProductsResponse.md @@ -24,6 +24,7 @@ Name | Type | Description | Notes **tampering** | [**SignalResponseTampering**](SignalResponseTampering.md) | | [optional] **high_activity** | [**SignalResponseHighActivity**](SignalResponseHighActivity.md) | | [optional] **location_spoofing** | [**SignalResponseLocationSpoofing**](SignalResponseLocationSpoofing.md) | | [optional] +**suspect_score** | [**SignalResponseSuspectScore**](SignalResponseSuspectScore.md) | | [optional] **raw_device_attributes** | [**SignalResponseRawDeviceAttributes**](SignalResponseRawDeviceAttributes.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseSuspectScore.md b/docs/SignalResponseSuspectScore.md new file mode 100644 index 00000000..8adfe42c --- /dev/null +++ b/docs/SignalResponseSuspectScore.md @@ -0,0 +1,10 @@ +# SignalResponseSuspectScore + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | [**SuspectScoreResult**](SuspectScoreResult.md) | | [optional] +**error** | [**ProductError**](ProductError.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/docs/SuspectScoreResult.md b/docs/SuspectScoreResult.md new file mode 100644 index 00000000..142be54b --- /dev/null +++ b/docs/SuspectScoreResult.md @@ -0,0 +1,9 @@ +# SuspectScoreResult + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**result** | **int** | 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 | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/docs/WebhookVisit.md b/docs/WebhookVisit.md index 5b5f821a..e2468ae9 100644 --- a/docs/WebhookVisit.md +++ b/docs/WebhookVisit.md @@ -25,6 +25,7 @@ Name | Type | Description | Notes **raw_device_attributes** | [**RawDeviceAttributesResult**](RawDeviceAttributesResult.md) | | [optional] **high_activity** | [**HighActivityResult**](HighActivityResult.md) | | [optional] **location_spoofing** | [**LocationSpoofingResult**](LocationSpoofingResult.md) | | [optional] +**suspect_score** | [**SuspectScoreResult**](SuspectScoreResult.md) | | [optional] **request_id** | **str** | Unique identifier of the user's identification request. | **browser_details** | [**BrowserDetails**](BrowserDetails.md) | | **ip** | **str** | | diff --git a/fingerprint_pro_server_api_sdk/__init__.py b/fingerprint_pro_server_api_sdk/__init__.py index cc421c58..f7d7b5f4 100644 --- a/fingerprint_pro_server_api_sdk/__init__.py +++ b/fingerprint_pro_server_api_sdk/__init__.py @@ -74,12 +74,13 @@ from fingerprint_pro_server_api_sdk.models.signal_response_proxy import SignalResponseProxy from fingerprint_pro_server_api_sdk.models.signal_response_raw_device_attributes import SignalResponseRawDeviceAttributes from fingerprint_pro_server_api_sdk.models.signal_response_root_apps import SignalResponseRootApps -from fingerprint_pro_server_api_sdk.models.signal_response_root_apps_data import SignalResponseRootAppsData +from fingerprint_pro_server_api_sdk.models.signal_response_suspect_score import SignalResponseSuspectScore from fingerprint_pro_server_api_sdk.models.signal_response_tampering import SignalResponseTampering from fingerprint_pro_server_api_sdk.models.signal_response_tor import SignalResponseTor from fingerprint_pro_server_api_sdk.models.signal_response_virtual_machine import SignalResponseVirtualMachine from fingerprint_pro_server_api_sdk.models.signal_response_vpn import SignalResponseVpn from fingerprint_pro_server_api_sdk.models.subdivision import Subdivision +from fingerprint_pro_server_api_sdk.models.suspect_score_result import SuspectScoreResult from fingerprint_pro_server_api_sdk.models.tampering_result import TamperingResult from fingerprint_pro_server_api_sdk.models.tor_result import TorResult from fingerprint_pro_server_api_sdk.models.virtual_machine_result import VirtualMachineResult diff --git a/fingerprint_pro_server_api_sdk/models/__init__.py b/fingerprint_pro_server_api_sdk/models/__init__.py index 6598d718..81e3854a 100644 --- a/fingerprint_pro_server_api_sdk/models/__init__.py +++ b/fingerprint_pro_server_api_sdk/models/__init__.py @@ -72,7 +72,7 @@ from fingerprint_pro_server_api_sdk.models.signal_response_proxy import SignalResponseProxy from fingerprint_pro_server_api_sdk.models.signal_response_raw_device_attributes import SignalResponseRawDeviceAttributes from fingerprint_pro_server_api_sdk.models.signal_response_root_apps import SignalResponseRootApps -from fingerprint_pro_server_api_sdk.models.signal_response_root_apps_data import SignalResponseRootAppsData +from fingerprint_pro_server_api_sdk.models.signal_response_suspect_score import SignalResponseSuspectScore from fingerprint_pro_server_api_sdk.models.signal_response_tampering import SignalResponseTampering from fingerprint_pro_server_api_sdk.models.signal_response_tor import SignalResponseTor from fingerprint_pro_server_api_sdk.models.signal_response_virtual_machine import SignalResponseVirtualMachine diff --git a/fingerprint_pro_server_api_sdk/models/products_response.py b/fingerprint_pro_server_api_sdk/models/products_response.py index ab325ee6..95d42dd9 100644 --- a/fingerprint_pro_server_api_sdk/models/products_response.py +++ b/fingerprint_pro_server_api_sdk/models/products_response.py @@ -50,6 +50,7 @@ class ProductsResponse(object): 'tampering': 'SignalResponseTampering', 'high_activity': 'SignalResponseHighActivity', 'location_spoofing': 'SignalResponseLocationSpoofing', + 'suspect_score': 'SignalResponseSuspectScore', 'raw_device_attributes': 'SignalResponseRawDeviceAttributes' } @@ -73,10 +74,11 @@ class ProductsResponse(object): 'tampering': 'tampering', 'high_activity': 'highActivity', 'location_spoofing': 'locationSpoofing', + 'suspect_score': 'suspectScore', 'raw_device_attributes': 'rawDeviceAttributes' } - def __init__(self, identification=None, botd=None, ip_info=None, incognito=None, root_apps=None, emulator=None, cloned_app=None, factory_reset=None, jailbroken=None, frida=None, ip_blocklist=None, tor=None, privacy_settings=None, virtual_machine=None, vpn=None, proxy=None, tampering=None, high_activity=None, location_spoofing=None, raw_device_attributes=None): # noqa: E501 + def __init__(self, identification=None, botd=None, ip_info=None, incognito=None, root_apps=None, emulator=None, cloned_app=None, factory_reset=None, jailbroken=None, frida=None, ip_blocklist=None, tor=None, privacy_settings=None, virtual_machine=None, vpn=None, proxy=None, tampering=None, high_activity=None, location_spoofing=None, suspect_score=None, raw_device_attributes=None): # noqa: E501 """ProductsResponse - a model defined in Swagger""" # noqa: E501 self._identification = None self._botd = None @@ -97,6 +99,7 @@ def __init__(self, identification=None, botd=None, ip_info=None, incognito=None, self._tampering = None self._high_activity = None self._location_spoofing = None + self._suspect_score = None self._raw_device_attributes = None self.discriminator = None if identification is not None: @@ -137,6 +140,8 @@ def __init__(self, identification=None, botd=None, ip_info=None, incognito=None, self.high_activity = high_activity if location_spoofing is not None: self.location_spoofing = location_spoofing + if suspect_score is not None: + self.suspect_score = suspect_score if raw_device_attributes is not None: self.raw_device_attributes = raw_device_attributes @@ -539,6 +544,27 @@ def location_spoofing(self, location_spoofing): self._location_spoofing = location_spoofing + @property + def suspect_score(self): + """Gets the suspect_score of this ProductsResponse. # noqa: E501 + + + :return: The suspect_score of this ProductsResponse. # noqa: E501 + :rtype: SignalResponseSuspectScore + """ + return self._suspect_score + + @suspect_score.setter + def suspect_score(self, suspect_score): + """Sets the suspect_score of this ProductsResponse. + + + :param suspect_score: The suspect_score of this ProductsResponse. # noqa: E501 + :type: SignalResponseSuspectScore + """ + + self._suspect_score = suspect_score + @property def raw_device_attributes(self): """Gets the raw_device_attributes of this ProductsResponse. # noqa: E501 diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_suspect_score.py b/fingerprint_pro_server_api_sdk/models/signal_response_suspect_score.py new file mode 100644 index 00000000..d5fabff1 --- /dev/null +++ b/fingerprint_pro_server_api_sdk/models/signal_response_suspect_score.py @@ -0,0 +1,139 @@ +# coding: utf-8 + +""" + Fingerprint Pro Server API + + Fingerprint Pro Server API allows you to get information about visitors and about individual events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 + + OpenAPI spec version: 3 + Contact: support@fingerprint.com + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class SignalResponseSuspectScore(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'data': 'SuspectScoreResult', + 'error': 'ProductError' + } + + attribute_map = { + 'data': 'data', + 'error': 'error' + } + + def __init__(self, data=None, error=None): # noqa: E501 + """SignalResponseSuspectScore - a model defined in Swagger""" # noqa: E501 + self._data = None + self._error = None + self.discriminator = None + if data is not None: + self.data = data + if error is not None: + self.error = error + + @property + def data(self): + """Gets the data of this SignalResponseSuspectScore. # noqa: E501 + + + :return: The data of this SignalResponseSuspectScore. # noqa: E501 + :rtype: SuspectScoreResult + """ + return self._data + + @data.setter + def data(self, data): + """Sets the data of this SignalResponseSuspectScore. + + + :param data: The data of this SignalResponseSuspectScore. # noqa: E501 + :type: SuspectScoreResult + """ + + self._data = data + + @property + def error(self): + """Gets the error of this SignalResponseSuspectScore. # noqa: E501 + + + :return: The error of this SignalResponseSuspectScore. # noqa: E501 + :rtype: ProductError + """ + return self._error + + @error.setter + def error(self, error): + """Sets the error of this SignalResponseSuspectScore. + + + :param error: The error of this SignalResponseSuspectScore. # noqa: E501 + :type: ProductError + """ + + self._error = error + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(SignalResponseSuspectScore, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, SignalResponseSuspectScore): + return False + + return self.to_dict() == other.to_dict() + + def __ne__(self, other): + """Returns true if both objects are not equal""" + if not isinstance(other, SignalResponseSuspectScore): + return True + + return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/suspect_score_result.py b/fingerprint_pro_server_api_sdk/models/suspect_score_result.py new file mode 100644 index 00000000..b7684285 --- /dev/null +++ b/fingerprint_pro_server_api_sdk/models/suspect_score_result.py @@ -0,0 +1,116 @@ +# coding: utf-8 + +""" + Fingerprint Pro Server API + + Fingerprint Pro Server API allows you to get information about visitors and about individual events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 + + OpenAPI spec version: 3 + Contact: support@fingerprint.com + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class SuspectScoreResult(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'result': 'int' + } + + attribute_map = { + 'result': 'result' + } + + def __init__(self, result=None): # noqa: E501 + """SuspectScoreResult - a model defined in Swagger""" # noqa: E501 + self._result = None + self.discriminator = None + self.result = result + + @property + def result(self): + """Gets the result of this SuspectScoreResult. # noqa: E501 + + 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 # noqa: E501 + + :return: The result of this SuspectScoreResult. # noqa: E501 + :rtype: int + """ + return self._result + + @result.setter + def result(self, result): + """Sets the result of this SuspectScoreResult. + + 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 # noqa: E501 + + :param result: The result of this SuspectScoreResult. # noqa: E501 + :type: int + """ + if result is None: + raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 + + self._result = result + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(SuspectScoreResult, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, SuspectScoreResult): + return False + + return self.to_dict() == other.to_dict() + + def __ne__(self, other): + """Returns true if both objects are not equal""" + if not isinstance(other, SuspectScoreResult): + return True + + return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/webhook_visit.py b/fingerprint_pro_server_api_sdk/models/webhook_visit.py index 8de9932b..24fecf29 100644 --- a/fingerprint_pro_server_api_sdk/models/webhook_visit.py +++ b/fingerprint_pro_server_api_sdk/models/webhook_visit.py @@ -50,6 +50,7 @@ class WebhookVisit(object): 'raw_device_attributes': 'RawDeviceAttributesResult', 'high_activity': 'HighActivityResult', 'location_spoofing': 'LocationSpoofingResult', + 'suspect_score': 'SuspectScoreResult', 'request_id': 'str', 'browser_details': 'BrowserDetails', 'ip': 'str', @@ -88,6 +89,7 @@ class WebhookVisit(object): 'raw_device_attributes': 'rawDeviceAttributes', 'high_activity': 'highActivity', 'location_spoofing': 'locationSpoofing', + 'suspect_score': 'suspectScore', 'request_id': 'requestId', 'browser_details': 'browserDetails', 'ip': 'ip', @@ -103,7 +105,7 @@ class WebhookVisit(object): 'last_seen_at': 'lastSeenAt' } - def __init__(self, visitor_id=None, client_referrer=None, user_agent=None, bot=None, ip_info=None, incognito=None, root_apps=None, emulator=None, cloned_app=None, factory_reset=None, jailbroken=None, frida=None, ip_blocklist=None, tor=None, privacy_settings=None, virtual_machine=None, vpn=None, proxy=None, tampering=None, raw_device_attributes=None, high_activity=None, location_spoofing=None, request_id=None, browser_details=None, ip=None, ip_location=None, timestamp=None, time=None, url=None, tag=None, linked_id=None, confidence=None, visitor_found=None, first_seen_at=None, last_seen_at=None): # noqa: E501 + def __init__(self, visitor_id=None, client_referrer=None, user_agent=None, bot=None, ip_info=None, incognito=None, root_apps=None, emulator=None, cloned_app=None, factory_reset=None, jailbroken=None, frida=None, ip_blocklist=None, tor=None, privacy_settings=None, virtual_machine=None, vpn=None, proxy=None, tampering=None, raw_device_attributes=None, high_activity=None, location_spoofing=None, suspect_score=None, request_id=None, browser_details=None, ip=None, ip_location=None, timestamp=None, time=None, url=None, tag=None, linked_id=None, confidence=None, visitor_found=None, first_seen_at=None, last_seen_at=None): # noqa: E501 """WebhookVisit - a model defined in Swagger""" # noqa: E501 self._visitor_id = None self._client_referrer = None @@ -127,6 +129,7 @@ def __init__(self, visitor_id=None, client_referrer=None, user_agent=None, bot=N self._raw_device_attributes = None self._high_activity = None self._location_spoofing = None + self._suspect_score = None self._request_id = None self._browser_details = None self._ip = None @@ -183,6 +186,8 @@ def __init__(self, visitor_id=None, client_referrer=None, user_agent=None, bot=N self.high_activity = high_activity if location_spoofing is not None: self.location_spoofing = location_spoofing + if suspect_score is not None: + self.suspect_score = suspect_score self.request_id = request_id self.browser_details = browser_details self.ip = ip @@ -668,6 +673,27 @@ def location_spoofing(self, location_spoofing): self._location_spoofing = location_spoofing + @property + def suspect_score(self): + """Gets the suspect_score of this WebhookVisit. # noqa: E501 + + + :return: The suspect_score of this WebhookVisit. # noqa: E501 + :rtype: SuspectScoreResult + """ + return self._suspect_score + + @suspect_score.setter + def suspect_score(self, suspect_score): + """Sets the suspect_score of this WebhookVisit. + + + :param suspect_score: The suspect_score of this WebhookVisit. # noqa: E501 + :type: SuspectScoreResult + """ + + self._suspect_score = suspect_score + @property def request_id(self): """Gets the request_id of this WebhookVisit. # noqa: E501 From cb3b7b1ade37fc3d221e2fa46c5d691a85a37248 Mon Sep 17 00:00:00 2001 From: Ilya Taratukhin Date: Fri, 15 Mar 2024 17:58:43 +0100 Subject: [PATCH 06/13] feat: fix `ipLocation` deprecation BREAKING CHANGE: deprecated `ipLocation` field uses `DeprecatedIpLocation` model --- README.md | 3 + docs/DeprecatedIPLocation.md | 19 + docs/DeprecatedIPLocationCity.md | 9 + docs/IPLocation.md | 2 - docs/ProductsResponseIdentificationData.md | 2 +- docs/ResponseVisits.md | 2 +- docs/Visit.md | 2 +- docs/WebhookVisit.md | 2 +- fingerprint_pro_server_api_sdk/__init__.py | 4 + .../models/deprecated_ip_location.py | 326 ++++++++++++++++++ .../models/deprecated_ip_location_city.py | 113 ++++++ .../models/ip_location.py | 5 +- .../products_response_identification_data.py | 6 +- .../models/response_visits.py | 6 +- .../models/visit.py | 6 +- .../models/webhook_visit.py | 2 +- 16 files changed, 489 insertions(+), 20 deletions(-) create mode 100644 docs/DeprecatedIPLocation.md create mode 100644 docs/DeprecatedIPLocationCity.md create mode 100644 fingerprint_pro_server_api_sdk/models/deprecated_ip_location.py create mode 100644 fingerprint_pro_server_api_sdk/models/deprecated_ip_location_city.py diff --git a/README.md b/README.md index 8cd6346f..ee60fc5c 100644 --- a/README.md +++ b/README.md @@ -194,6 +194,9 @@ Class | Method | HTTP request | Description - [ClonedAppResult](docs/ClonedAppResult.md) - [Confidence](docs/Confidence.md) - [DataCenter](docs/DataCenter.md) + - [DeprecatedIPLocation](docs/DeprecatedIPLocation.md) + - [DeprecatedIPLocationCity](docs/DeprecatedIPLocationCity.md) + - [EmulatorResult](docs/EmulatorResult.md) - [ErrorEvent403Response](docs/ErrorEvent403Response.md) - [ErrorEvent403ResponseError](docs/ErrorEvent403ResponseError.md) - [ErrorEvent404Response](docs/ErrorEvent404Response.md) diff --git a/docs/DeprecatedIPLocation.md b/docs/DeprecatedIPLocation.md new file mode 100644 index 00000000..2f7f50df --- /dev/null +++ b/docs/DeprecatedIPLocation.md @@ -0,0 +1,19 @@ +# DeprecatedIPLocation +This field is **deprecated** and will not return a result for **applications created after January 23rd, 2024**. Please use the [IP Geolocation Smart signal](https://dev.fingerprint.com/docs/smart-signals-overview#ip-geolocation) for geolocation information. + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**accuracy_radius** | **int** | The IP address is likely to be within this radius (in km) of the specified location. | [optional] +**latitude** | **float** | | [optional] +**longitude** | **float** | | [optional] +**postal_code** | **str** | | [optional] +**timezone** | **str** | | [optional] +**city** | [**DeprecatedIPLocationCity**](DeprecatedIPLocationCity.md) | | [optional] +**country** | [**Location**](Location.md) | | [optional] +**continent** | [**Location**](Location.md) | | [optional] +**subdivisions** | [**list[Subdivision]**](Subdivision.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/docs/DeprecatedIPLocationCity.md b/docs/DeprecatedIPLocationCity.md new file mode 100644 index 00000000..f609c25a --- /dev/null +++ b/docs/DeprecatedIPLocationCity.md @@ -0,0 +1,9 @@ +# DeprecatedIPLocationCity + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/docs/IPLocation.md b/docs/IPLocation.md index 73e6458c..5fc4bd38 100644 --- a/docs/IPLocation.md +++ b/docs/IPLocation.md @@ -1,6 +1,4 @@ # IPLocation -This field is **deprecated** and will not return a result for **accounts created after December 18th, 2023**. Please use the [`ipInfo` Smart signal](https://dev.fingerprint.com/docs/smart-signals-overview#ip-geolocation) for geolocation information. - ## Properties Name | Type | Description | Notes diff --git a/docs/ProductsResponseIdentificationData.md b/docs/ProductsResponseIdentificationData.md index 250b1356..46f4e39b 100644 --- a/docs/ProductsResponseIdentificationData.md +++ b/docs/ProductsResponseIdentificationData.md @@ -7,7 +7,7 @@ Name | Type | Description | Notes **browser_details** | [**BrowserDetails**](BrowserDetails.md) | | **incognito** | **bool** | Flag if user used incognito session. | **ip** | **str** | | -**ip_location** | [**IPLocation**](IPLocation.md) | | [optional] +**ip_location** | [**DeprecatedIPLocation**](DeprecatedIPLocation.md) | | [optional] **timestamp** | **int** | Timestamp of the event with millisecond precision in Unix time. | **time** | **datetime** | Time expressed according to ISO 8601 in UTC format. | **url** | **str** | Page URL from which identification request was sent. | diff --git a/docs/ResponseVisits.md b/docs/ResponseVisits.md index 1ddca7f5..e79be0df 100644 --- a/docs/ResponseVisits.md +++ b/docs/ResponseVisits.md @@ -7,7 +7,7 @@ Name | Type | Description | Notes **browser_details** | [**BrowserDetails**](BrowserDetails.md) | | **incognito** | **bool** | Flag if user used incognito session. | **ip** | **str** | | -**ip_location** | [**IPLocation**](IPLocation.md) | | [optional] +**ip_location** | [**DeprecatedIPLocation**](DeprecatedIPLocation.md) | | [optional] **timestamp** | **int** | Timestamp of the event with millisecond precision in Unix time. | **time** | **datetime** | Time expressed according to ISO 8601 in UTC format. | **url** | **str** | Page URL from which identification request was sent. | diff --git a/docs/Visit.md b/docs/Visit.md index 52c3bb60..f16cbe1c 100644 --- a/docs/Visit.md +++ b/docs/Visit.md @@ -7,7 +7,7 @@ Name | Type | Description | Notes **browser_details** | [**BrowserDetails**](BrowserDetails.md) | | **incognito** | **bool** | Flag if user used incognito session. | **ip** | **str** | | -**ip_location** | [**IPLocation**](IPLocation.md) | | [optional] +**ip_location** | [**DeprecatedIPLocation**](DeprecatedIPLocation.md) | | [optional] **timestamp** | **int** | Timestamp of the event with millisecond precision in Unix time. | **time** | **datetime** | Time expressed according to ISO 8601 in UTC format. | **url** | **str** | Page URL from which identification request was sent. | diff --git a/docs/WebhookVisit.md b/docs/WebhookVisit.md index e2468ae9..a76e129a 100644 --- a/docs/WebhookVisit.md +++ b/docs/WebhookVisit.md @@ -29,7 +29,7 @@ Name | Type | Description | Notes **request_id** | **str** | Unique identifier of the user's identification request. | **browser_details** | [**BrowserDetails**](BrowserDetails.md) | | **ip** | **str** | | -**ip_location** | [**IPLocation**](IPLocation.md) | | [optional] +**ip_location** | [**DeprecatedIPLocation**](DeprecatedIPLocation.md) | | [optional] **timestamp** | **int** | Timestamp of the event with millisecond precision in Unix time. | **time** | **datetime** | Time expressed according to ISO 8601 in UTC format. | **url** | **str** | Page URL from which identification request was sent. | diff --git a/fingerprint_pro_server_api_sdk/__init__.py b/fingerprint_pro_server_api_sdk/__init__.py index f7d7b5f4..dea46c32 100644 --- a/fingerprint_pro_server_api_sdk/__init__.py +++ b/fingerprint_pro_server_api_sdk/__init__.py @@ -27,6 +27,9 @@ from fingerprint_pro_server_api_sdk.models.cloned_app_result import ClonedAppResult from fingerprint_pro_server_api_sdk.models.confidence import Confidence from fingerprint_pro_server_api_sdk.models.data_center import DataCenter +from fingerprint_pro_server_api_sdk.models.deprecated_ip_location import DeprecatedIPLocation +from fingerprint_pro_server_api_sdk.models.deprecated_ip_location_city import DeprecatedIPLocationCity +from fingerprint_pro_server_api_sdk.models.emulator_result import EmulatorResult from fingerprint_pro_server_api_sdk.models.error_event403_response import ErrorEvent403Response from fingerprint_pro_server_api_sdk.models.error_event403_response_error import ErrorEvent403ResponseError from fingerprint_pro_server_api_sdk.models.error_event404_response import ErrorEvent404Response @@ -39,6 +42,7 @@ from fingerprint_pro_server_api_sdk.models.ip_location import IPLocation from fingerprint_pro_server_api_sdk.models.ip_location_city import IPLocationCity from fingerprint_pro_server_api_sdk.models.identification_error import IdentificationError +from fingerprint_pro_server_api_sdk.models.incognito_result import IncognitoResult from fingerprint_pro_server_api_sdk.models.ip_block_list_result import IpBlockListResult from fingerprint_pro_server_api_sdk.models.ip_block_list_result_details import IpBlockListResultDetails from fingerprint_pro_server_api_sdk.models.ip_info_result import IpInfoResult diff --git a/fingerprint_pro_server_api_sdk/models/deprecated_ip_location.py b/fingerprint_pro_server_api_sdk/models/deprecated_ip_location.py new file mode 100644 index 00000000..7695dd3b --- /dev/null +++ b/fingerprint_pro_server_api_sdk/models/deprecated_ip_location.py @@ -0,0 +1,326 @@ +# coding: utf-8 + +""" + Fingerprint Pro Server API + + Fingerprint Pro Server API allows you to get information about visitors and about individual events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 + + OpenAPI spec version: 3 + Contact: support@fingerprint.com + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class DeprecatedIPLocation(object): + """ + This field is **deprecated** and will not return a result for **applications created after January 23rd, 2024**. Please use the [IP Geolocation Smart signal](https://dev.fingerprint.com/docs/smart-signals-overview#ip-geolocation) for geolocation information. + + NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'accuracy_radius': 'int', + 'latitude': 'float', + 'longitude': 'float', + 'postal_code': 'str', + 'timezone': 'str', + 'city': 'DeprecatedIPLocationCity', + 'country': 'Location', + 'continent': 'Location', + 'subdivisions': 'list[Subdivision]' + } + + attribute_map = { + 'accuracy_radius': 'accuracyRadius', + 'latitude': 'latitude', + 'longitude': 'longitude', + 'postal_code': 'postalCode', + 'timezone': 'timezone', + 'city': 'city', + 'country': 'country', + 'continent': 'continent', + 'subdivisions': 'subdivisions' + } + + def __init__(self, accuracy_radius=None, latitude=None, longitude=None, postal_code=None, timezone=None, city=None, country=None, continent=None, subdivisions=None): # noqa: E501 + """DeprecatedIPLocation - a model defined in Swagger""" # noqa: E501 + self._accuracy_radius = None + self._latitude = None + self._longitude = None + self._postal_code = None + self._timezone = None + self._city = None + self._country = None + self._continent = None + self._subdivisions = None + self.discriminator = None + if accuracy_radius is not None: + self.accuracy_radius = accuracy_radius + if latitude is not None: + self.latitude = latitude + if longitude is not None: + self.longitude = longitude + if postal_code is not None: + self.postal_code = postal_code + if timezone is not None: + self.timezone = timezone + if city is not None: + self.city = city + if country is not None: + self.country = country + if continent is not None: + self.continent = continent + if subdivisions is not None: + self.subdivisions = subdivisions + + @property + def accuracy_radius(self): + """Gets the accuracy_radius of this DeprecatedIPLocation. # noqa: E501 + + The IP address is likely to be within this radius (in km) of the specified location. # noqa: E501 + + :return: The accuracy_radius of this DeprecatedIPLocation. # noqa: E501 + :rtype: int + """ + return self._accuracy_radius + + @accuracy_radius.setter + def accuracy_radius(self, accuracy_radius): + """Sets the accuracy_radius of this DeprecatedIPLocation. + + The IP address is likely to be within this radius (in km) of the specified location. # noqa: E501 + + :param accuracy_radius: The accuracy_radius of this DeprecatedIPLocation. # noqa: E501 + :type: int + """ + + self._accuracy_radius = accuracy_radius + + @property + def latitude(self): + """Gets the latitude of this DeprecatedIPLocation. # noqa: E501 + + + :return: The latitude of this DeprecatedIPLocation. # noqa: E501 + :rtype: float + """ + return self._latitude + + @latitude.setter + def latitude(self, latitude): + """Sets the latitude of this DeprecatedIPLocation. + + + :param latitude: The latitude of this DeprecatedIPLocation. # noqa: E501 + :type: float + """ + + self._latitude = latitude + + @property + def longitude(self): + """Gets the longitude of this DeprecatedIPLocation. # noqa: E501 + + + :return: The longitude of this DeprecatedIPLocation. # noqa: E501 + :rtype: float + """ + return self._longitude + + @longitude.setter + def longitude(self, longitude): + """Sets the longitude of this DeprecatedIPLocation. + + + :param longitude: The longitude of this DeprecatedIPLocation. # noqa: E501 + :type: float + """ + + self._longitude = longitude + + @property + def postal_code(self): + """Gets the postal_code of this DeprecatedIPLocation. # noqa: E501 + + + :return: The postal_code of this DeprecatedIPLocation. # noqa: E501 + :rtype: str + """ + return self._postal_code + + @postal_code.setter + def postal_code(self, postal_code): + """Sets the postal_code of this DeprecatedIPLocation. + + + :param postal_code: The postal_code of this DeprecatedIPLocation. # noqa: E501 + :type: str + """ + + self._postal_code = postal_code + + @property + def timezone(self): + """Gets the timezone of this DeprecatedIPLocation. # noqa: E501 + + + :return: The timezone of this DeprecatedIPLocation. # noqa: E501 + :rtype: str + """ + return self._timezone + + @timezone.setter + def timezone(self, timezone): + """Sets the timezone of this DeprecatedIPLocation. + + + :param timezone: The timezone of this DeprecatedIPLocation. # noqa: E501 + :type: str + """ + + self._timezone = timezone + + @property + def city(self): + """Gets the city of this DeprecatedIPLocation. # noqa: E501 + + + :return: The city of this DeprecatedIPLocation. # noqa: E501 + :rtype: DeprecatedIPLocationCity + """ + return self._city + + @city.setter + def city(self, city): + """Sets the city of this DeprecatedIPLocation. + + + :param city: The city of this DeprecatedIPLocation. # noqa: E501 + :type: DeprecatedIPLocationCity + """ + + self._city = city + + @property + def country(self): + """Gets the country of this DeprecatedIPLocation. # noqa: E501 + + + :return: The country of this DeprecatedIPLocation. # noqa: E501 + :rtype: Location + """ + return self._country + + @country.setter + def country(self, country): + """Sets the country of this DeprecatedIPLocation. + + + :param country: The country of this DeprecatedIPLocation. # noqa: E501 + :type: Location + """ + + self._country = country + + @property + def continent(self): + """Gets the continent of this DeprecatedIPLocation. # noqa: E501 + + + :return: The continent of this DeprecatedIPLocation. # noqa: E501 + :rtype: Location + """ + return self._continent + + @continent.setter + def continent(self, continent): + """Sets the continent of this DeprecatedIPLocation. + + + :param continent: The continent of this DeprecatedIPLocation. # noqa: E501 + :type: Location + """ + + self._continent = continent + + @property + def subdivisions(self): + """Gets the subdivisions of this DeprecatedIPLocation. # noqa: E501 + + + :return: The subdivisions of this DeprecatedIPLocation. # noqa: E501 + :rtype: list[Subdivision] + """ + return self._subdivisions + + @subdivisions.setter + def subdivisions(self, subdivisions): + """Sets the subdivisions of this DeprecatedIPLocation. + + + :param subdivisions: The subdivisions of this DeprecatedIPLocation. # noqa: E501 + :type: list[Subdivision] + """ + + self._subdivisions = subdivisions + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(DeprecatedIPLocation, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, DeprecatedIPLocation): + return False + + return self.to_dict() == other.to_dict() + + def __ne__(self, other): + """Returns true if both objects are not equal""" + if not isinstance(other, DeprecatedIPLocation): + return True + + return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/deprecated_ip_location_city.py b/fingerprint_pro_server_api_sdk/models/deprecated_ip_location_city.py new file mode 100644 index 00000000..96abca3b --- /dev/null +++ b/fingerprint_pro_server_api_sdk/models/deprecated_ip_location_city.py @@ -0,0 +1,113 @@ +# coding: utf-8 + +""" + Fingerprint Pro Server API + + Fingerprint Pro Server API allows you to get information about visitors and about individual events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. # noqa: E501 + + OpenAPI spec version: 3 + Contact: support@fingerprint.com + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class DeprecatedIPLocationCity(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'name': 'str' + } + + attribute_map = { + 'name': 'name' + } + + def __init__(self, name=None): # noqa: E501 + """DeprecatedIPLocationCity - a model defined in Swagger""" # noqa: E501 + self._name = None + self.discriminator = None + if name is not None: + self.name = name + + @property + def name(self): + """Gets the name of this DeprecatedIPLocationCity. # noqa: E501 + + + :return: The name of this DeprecatedIPLocationCity. # noqa: E501 + :rtype: str + """ + return self._name + + @name.setter + def name(self, name): + """Sets the name of this DeprecatedIPLocationCity. + + + :param name: The name of this DeprecatedIPLocationCity. # noqa: E501 + :type: str + """ + + self._name = name + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(DeprecatedIPLocationCity, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, DeprecatedIPLocationCity): + return False + + return self.to_dict() == other.to_dict() + + def __ne__(self, other): + """Returns true if both objects are not equal""" + if not isinstance(other, DeprecatedIPLocationCity): + return True + + return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/ip_location.py b/fingerprint_pro_server_api_sdk/models/ip_location.py index 4a0d2a95..fc5710f4 100644 --- a/fingerprint_pro_server_api_sdk/models/ip_location.py +++ b/fingerprint_pro_server_api_sdk/models/ip_location.py @@ -16,10 +16,7 @@ import six class IPLocation(object): - """ - This field is **deprecated** and will not return a result for **accounts created after December 18th, 2023**. Please use the [`ipInfo` Smart signal](https://dev.fingerprint.com/docs/smart-signals-overview#ip-geolocation) for geolocation information. - - NOTE: This class is auto generated by the swagger code generator program. + """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. """ diff --git a/fingerprint_pro_server_api_sdk/models/products_response_identification_data.py b/fingerprint_pro_server_api_sdk/models/products_response_identification_data.py index cee6eb96..2f57a7f8 100644 --- a/fingerprint_pro_server_api_sdk/models/products_response_identification_data.py +++ b/fingerprint_pro_server_api_sdk/models/products_response_identification_data.py @@ -32,7 +32,7 @@ class ProductsResponseIdentificationData(object): 'browser_details': 'BrowserDetails', 'incognito': 'bool', 'ip': 'str', - 'ip_location': 'IPLocation', + 'ip_location': 'DeprecatedIPLocation', 'timestamp': 'int', 'time': 'datetime', 'url': 'str', @@ -202,7 +202,7 @@ def ip_location(self): :return: The ip_location of this ProductsResponseIdentificationData. # noqa: E501 - :rtype: IPLocation + :rtype: DeprecatedIPLocation """ return self._ip_location @@ -212,7 +212,7 @@ def ip_location(self, ip_location): :param ip_location: The ip_location of this ProductsResponseIdentificationData. # noqa: E501 - :type: IPLocation + :type: DeprecatedIPLocation """ self._ip_location = ip_location diff --git a/fingerprint_pro_server_api_sdk/models/response_visits.py b/fingerprint_pro_server_api_sdk/models/response_visits.py index 71e419f6..dd0d9dfa 100644 --- a/fingerprint_pro_server_api_sdk/models/response_visits.py +++ b/fingerprint_pro_server_api_sdk/models/response_visits.py @@ -32,7 +32,7 @@ class ResponseVisits(object): 'browser_details': 'BrowserDetails', 'incognito': 'bool', 'ip': 'str', - 'ip_location': 'IPLocation', + 'ip_location': 'DeprecatedIPLocation', 'timestamp': 'int', 'time': 'datetime', 'url': 'str', @@ -197,7 +197,7 @@ def ip_location(self): :return: The ip_location of this ResponseVisits. # noqa: E501 - :rtype: IPLocation + :rtype: DeprecatedIPLocation """ return self._ip_location @@ -207,7 +207,7 @@ def ip_location(self, ip_location): :param ip_location: The ip_location of this ResponseVisits. # noqa: E501 - :type: IPLocation + :type: DeprecatedIPLocation """ self._ip_location = ip_location diff --git a/fingerprint_pro_server_api_sdk/models/visit.py b/fingerprint_pro_server_api_sdk/models/visit.py index cb80ae19..a22d53d9 100644 --- a/fingerprint_pro_server_api_sdk/models/visit.py +++ b/fingerprint_pro_server_api_sdk/models/visit.py @@ -32,7 +32,7 @@ class Visit(object): 'browser_details': 'BrowserDetails', 'incognito': 'bool', 'ip': 'str', - 'ip_location': 'IPLocation', + 'ip_location': 'DeprecatedIPLocation', 'timestamp': 'int', 'time': 'datetime', 'url': 'str', @@ -198,7 +198,7 @@ def ip_location(self): :return: The ip_location of this Visit. # noqa: E501 - :rtype: IPLocation + :rtype: DeprecatedIPLocation """ return self._ip_location @@ -208,7 +208,7 @@ def ip_location(self, ip_location): :param ip_location: The ip_location of this Visit. # noqa: E501 - :type: IPLocation + :type: DeprecatedIPLocation """ self._ip_location = ip_location diff --git a/fingerprint_pro_server_api_sdk/models/webhook_visit.py b/fingerprint_pro_server_api_sdk/models/webhook_visit.py index 24fecf29..69050b2a 100644 --- a/fingerprint_pro_server_api_sdk/models/webhook_visit.py +++ b/fingerprint_pro_server_api_sdk/models/webhook_visit.py @@ -54,7 +54,7 @@ class WebhookVisit(object): 'request_id': 'str', 'browser_details': 'BrowserDetails', 'ip': 'str', - 'ip_location': 'IPLocation', + 'ip_location': 'DeprecatedIPLocation', 'timestamp': 'int', 'time': 'datetime', 'url': 'str', From 3aba5d0c4782696d1974f650ae22ff30deeedd20 Mon Sep 17 00:00:00 2001 From: Ilya Taratukhin Date: Fri, 15 Mar 2024 18:01:09 +0100 Subject: [PATCH 07/13] feat: add `linked_id` field to the `BotdResult` type --- docs/BotdResult.md | 5 ++- .../models/botd_result.py | 38 ++++++++++++++++--- 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/docs/BotdResult.md b/docs/BotdResult.md index 79af6049..bdc46d21 100644 --- a/docs/BotdResult.md +++ b/docs/BotdResult.md @@ -8,8 +8,9 @@ Name | Type | Description | Notes **ip** | **str** | IP address of the requesting browser or bot. | **time** | **datetime** | Time in UTC when the request from the JS agent was made. We recommend to treat requests that are older than 2 minutes as malicious. Otherwise, request replay attacks are possible | **url** | **str** | Page URL from which identification request was sent. | -**user_agent** | **str** | | [optional] -**request_id** | **str** | | [optional] +**user_agent** | **str** | | +**request_id** | **str** | | +**linked_id** | **str** | | [optional] **bot** | [**BotdDetectionResult**](BotdDetectionResult.md) | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/fingerprint_pro_server_api_sdk/models/botd_result.py b/fingerprint_pro_server_api_sdk/models/botd_result.py index 3e78c750..04c797ff 100644 --- a/fingerprint_pro_server_api_sdk/models/botd_result.py +++ b/fingerprint_pro_server_api_sdk/models/botd_result.py @@ -36,6 +36,7 @@ class BotdResult(object): 'url': 'str', 'user_agent': 'str', 'request_id': 'str', + 'linked_id': 'str', 'bot': 'BotdDetectionResult' } @@ -45,25 +46,27 @@ class BotdResult(object): 'url': 'url', 'user_agent': 'userAgent', 'request_id': 'requestId', + 'linked_id': 'linkedId', 'bot': 'bot' } - def __init__(self, ip=None, time=None, url=None, user_agent=None, request_id=None, bot=None): # noqa: E501 + def __init__(self, ip=None, time=None, url=None, user_agent=None, request_id=None, linked_id=None, bot=None): # noqa: E501 """BotdResult - a model defined in Swagger""" # noqa: E501 self._ip = None self._time = None self._url = None self._user_agent = None self._request_id = None + self._linked_id = None self._bot = None self.discriminator = None self.ip = ip self.time = time self.url = url - if user_agent is not None: - self.user_agent = user_agent - if request_id is not None: - self.request_id = request_id + self.user_agent = user_agent + self.request_id = request_id + if linked_id is not None: + self.linked_id = linked_id self.bot = bot @property @@ -159,6 +162,8 @@ def user_agent(self, user_agent): :param user_agent: The user_agent of this BotdResult. # noqa: E501 :type: str """ + if user_agent is None: + raise ValueError("Invalid value for `user_agent`, must not be `None`") # noqa: E501 self._user_agent = user_agent @@ -180,9 +185,32 @@ def request_id(self, request_id): :param request_id: The request_id of this BotdResult. # noqa: E501 :type: str """ + if request_id is None: + raise ValueError("Invalid value for `request_id`, must not be `None`") # noqa: E501 self._request_id = request_id + @property + def linked_id(self): + """Gets the linked_id of this BotdResult. # noqa: E501 + + + :return: The linked_id of this BotdResult. # noqa: E501 + :rtype: str + """ + return self._linked_id + + @linked_id.setter + def linked_id(self, linked_id): + """Sets the linked_id of this BotdResult. + + + :param linked_id: The linked_id of this BotdResult. # noqa: E501 + :type: str + """ + + self._linked_id = linked_id + @property def bot(self): """Gets the bot of this BotdResult. # noqa: E501 From 678a3a187fe5a10c5811b56dc43daab57e7cdff4 Mon Sep 17 00:00:00 2001 From: Ilya Taratukhin Date: Fri, 15 Mar 2024 18:02:26 +0100 Subject: [PATCH 08/13] feat: make identification field `tag` required BREAKING CHANGE: make identification field `confidence` optional --- docs/ProductsResponseIdentificationData.md | 6 +++--- docs/ResponseVisits.md | 4 ++-- docs/Visit.md | 6 +++--- docs/WebhookVisit.md | 6 +++--- .../api/fingerprint_api.py | 4 ++-- .../products_response_identification_data.py | 14 +++++++------- .../models/response_visits.py | 9 ++++----- fingerprint_pro_server_api_sdk/models/visit.py | 14 +++++++------- .../models/webhook_visit.py | 14 +++++++------- 9 files changed, 38 insertions(+), 39 deletions(-) diff --git a/docs/ProductsResponseIdentificationData.md b/docs/ProductsResponseIdentificationData.md index 46f4e39b..31a0e4b2 100644 --- a/docs/ProductsResponseIdentificationData.md +++ b/docs/ProductsResponseIdentificationData.md @@ -10,10 +10,10 @@ Name | Type | Description | Notes **ip_location** | [**DeprecatedIPLocation**](DeprecatedIPLocation.md) | | [optional] **timestamp** | **int** | Timestamp of the event with millisecond precision in Unix time. | **time** | **datetime** | Time expressed according to ISO 8601 in UTC format. | -**url** | **str** | Page URL from which identification request was sent. | -**tag** | **dict(str, object)** | A customer-provided value or an object that was sent with identification request. | [optional] +**url** | **str** | Page URL from which the identification request was sent. | +**tag** | **dict(str, object)** | A customer-provided value or an object that was sent with identification request. | **linked_id** | **str** | A customer-provided id that was sent with identification request. | [optional] -**confidence** | [**Confidence**](Confidence.md) | | +**confidence** | [**Confidence**](Confidence.md) | | [optional] **visitor_found** | **bool** | Attribute represents if a visitor had been identified before. | **first_seen_at** | [**SeenAt**](SeenAt.md) | | **last_seen_at** | [**SeenAt**](SeenAt.md) | | diff --git a/docs/ResponseVisits.md b/docs/ResponseVisits.md index e79be0df..6e379ba3 100644 --- a/docs/ResponseVisits.md +++ b/docs/ResponseVisits.md @@ -10,10 +10,10 @@ Name | Type | Description | Notes **ip_location** | [**DeprecatedIPLocation**](DeprecatedIPLocation.md) | | [optional] **timestamp** | **int** | Timestamp of the event with millisecond precision in Unix time. | **time** | **datetime** | Time expressed according to ISO 8601 in UTC format. | -**url** | **str** | Page URL from which identification request was sent. | +**url** | **str** | Page URL from which the identification request was sent. | **tag** | **dict(str, object)** | A customer-provided value or an object that was sent with identification request. | **linked_id** | **str** | A customer-provided id that was sent with identification request. | [optional] -**confidence** | [**Confidence**](Confidence.md) | | +**confidence** | [**Confidence**](Confidence.md) | | [optional] **visitor_found** | **bool** | Attribute represents if a visitor had been identified before. | **first_seen_at** | [**SeenAt**](SeenAt.md) | | **last_seen_at** | [**SeenAt**](SeenAt.md) | | diff --git a/docs/Visit.md b/docs/Visit.md index f16cbe1c..fe4e708d 100644 --- a/docs/Visit.md +++ b/docs/Visit.md @@ -10,10 +10,10 @@ Name | Type | Description | Notes **ip_location** | [**DeprecatedIPLocation**](DeprecatedIPLocation.md) | | [optional] **timestamp** | **int** | Timestamp of the event with millisecond precision in Unix time. | **time** | **datetime** | Time expressed according to ISO 8601 in UTC format. | -**url** | **str** | Page URL from which identification request was sent. | -**tag** | **dict(str, object)** | A customer-provided value or an object that was sent with identification request. | [optional] +**url** | **str** | Page URL from which the identification request was sent. | +**tag** | **dict(str, object)** | A customer-provided value or an object that was sent with identification request. | **linked_id** | **str** | A customer-provided id that was sent with identification request. | [optional] -**confidence** | [**Confidence**](Confidence.md) | | +**confidence** | [**Confidence**](Confidence.md) | | [optional] **visitor_found** | **bool** | Attribute represents if a visitor had been identified before. | **first_seen_at** | [**SeenAt**](SeenAt.md) | | **last_seen_at** | [**SeenAt**](SeenAt.md) | | diff --git a/docs/WebhookVisit.md b/docs/WebhookVisit.md index a76e129a..ba6c33f5 100644 --- a/docs/WebhookVisit.md +++ b/docs/WebhookVisit.md @@ -32,10 +32,10 @@ Name | Type | Description | Notes **ip_location** | [**DeprecatedIPLocation**](DeprecatedIPLocation.md) | | [optional] **timestamp** | **int** | Timestamp of the event with millisecond precision in Unix time. | **time** | **datetime** | Time expressed according to ISO 8601 in UTC format. | -**url** | **str** | Page URL from which identification request was sent. | -**tag** | **dict(str, object)** | A customer-provided value or an object that was sent with identification request. | [optional] +**url** | **str** | Page URL from which the identification request was sent. | +**tag** | **dict(str, object)** | A customer-provided value or an object that was sent with identification request. | **linked_id** | **str** | A customer-provided id that was sent with identification request. | [optional] -**confidence** | [**Confidence**](Confidence.md) | | +**confidence** | [**Confidence**](Confidence.md) | | [optional] **visitor_found** | **bool** | Attribute represents if a visitor had been identified before. | **first_seen_at** | [**SeenAt**](SeenAt.md) | | **last_seen_at** | [**SeenAt**](SeenAt.md) | | diff --git a/fingerprint_pro_server_api_sdk/api/fingerprint_api.py b/fingerprint_pro_server_api_sdk/api/fingerprint_api.py index 5c938564..b26343cc 100644 --- a/fingerprint_pro_server_api_sdk/api/fingerprint_api.py +++ b/fingerprint_pro_server_api_sdk/api/fingerprint_api.py @@ -37,7 +37,7 @@ def __init__(self, configuration=None, pool=None): def get_event(self, request_id, **kwargs): # noqa: E501 """Get event by requestId # noqa: E501 - This endpoint allows you to get a detailed analysis of an individual request. **Only for Enterprise customers:** Please note that the response includes mobile signals (e.g. `rootApps`) even if the request orignated from a non-mobile platform. It is highly recommended that you **ignore** the mobile signals for such requests. Use `requestId` as the URL path parameter. This API method is scoped to a request, i.e. all returned information is by `requestId`. # noqa: E501 + This endpoint allows you to get a detailed analysis of an individual request. **Only for Enterprise customers:** Please note that the response includes mobile signals (e.g. `rootApps`) even if the request originated from a non-mobile platform. It is highly recommended that you **ignore** the mobile signals for such requests. Use `requestId` as the URL path parameter. This API method is scoped to a request, i.e. all returned information is by `requestId`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True >>> thread = api.get_event(request_id, async_req=True) @@ -59,7 +59,7 @@ def get_event(self, request_id, **kwargs): # noqa: E501 def get_event_with_http_info(self, request_id, **kwargs): # noqa: E501 """Get event by requestId # noqa: E501 - This endpoint allows you to get a detailed analysis of an individual request. **Only for Enterprise customers:** Please note that the response includes mobile signals (e.g. `rootApps`) even if the request orignated from a non-mobile platform. It is highly recommended that you **ignore** the mobile signals for such requests. Use `requestId` as the URL path parameter. This API method is scoped to a request, i.e. all returned information is by `requestId`. # noqa: E501 + This endpoint allows you to get a detailed analysis of an individual request. **Only for Enterprise customers:** Please note that the response includes mobile signals (e.g. `rootApps`) even if the request originated from a non-mobile platform. It is highly recommended that you **ignore** the mobile signals for such requests. Use `requestId` as the URL path parameter. This API method is scoped to a request, i.e. all returned information is by `requestId`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True >>> thread = api.get_event_with_http_info(request_id, async_req=True) diff --git a/fingerprint_pro_server_api_sdk/models/products_response_identification_data.py b/fingerprint_pro_server_api_sdk/models/products_response_identification_data.py index 2f57a7f8..f89f1f44 100644 --- a/fingerprint_pro_server_api_sdk/models/products_response_identification_data.py +++ b/fingerprint_pro_server_api_sdk/models/products_response_identification_data.py @@ -90,11 +90,11 @@ def __init__(self, request_id=None, browser_details=None, incognito=None, ip=Non self.timestamp = timestamp self.time = time self.url = url - if tag is not None: - self.tag = tag + self.tag = tag if linked_id is not None: self.linked_id = linked_id - self.confidence = confidence + if confidence is not None: + self.confidence = confidence self.visitor_found = visitor_found self.first_seen_at = first_seen_at self.last_seen_at = last_seen_at @@ -271,7 +271,7 @@ def time(self, time): def url(self): """Gets the url of this ProductsResponseIdentificationData. # noqa: E501 - Page URL from which identification request was sent. # noqa: E501 + Page URL from which the identification request was sent. # noqa: E501 :return: The url of this ProductsResponseIdentificationData. # noqa: E501 :rtype: str @@ -282,7 +282,7 @@ def url(self): def url(self, url): """Sets the url of this ProductsResponseIdentificationData. - Page URL from which identification request was sent. # noqa: E501 + Page URL from which the identification request was sent. # noqa: E501 :param url: The url of this ProductsResponseIdentificationData. # noqa: E501 :type: str @@ -312,6 +312,8 @@ def tag(self, tag): :param tag: The tag of this ProductsResponseIdentificationData. # noqa: E501 :type: dict(str, object) """ + if tag is None: + raise ValueError("Invalid value for `tag`, must not be `None`") # noqa: E501 self._tag = tag @@ -356,8 +358,6 @@ def confidence(self, confidence): :param confidence: The confidence of this ProductsResponseIdentificationData. # noqa: E501 :type: Confidence """ - if confidence is None: - raise ValueError("Invalid value for `confidence`, must not be `None`") # noqa: E501 self._confidence = confidence diff --git a/fingerprint_pro_server_api_sdk/models/response_visits.py b/fingerprint_pro_server_api_sdk/models/response_visits.py index dd0d9dfa..ca2676bf 100644 --- a/fingerprint_pro_server_api_sdk/models/response_visits.py +++ b/fingerprint_pro_server_api_sdk/models/response_visits.py @@ -90,7 +90,8 @@ def __init__(self, request_id=None, browser_details=None, incognito=None, ip=Non self.tag = tag if linked_id is not None: self.linked_id = linked_id - self.confidence = confidence + if confidence is not None: + self.confidence = confidence self.visitor_found = visitor_found self.first_seen_at = first_seen_at self.last_seen_at = last_seen_at @@ -266,7 +267,7 @@ def time(self, time): def url(self): """Gets the url of this ResponseVisits. # noqa: E501 - Page URL from which identification request was sent. # noqa: E501 + Page URL from which the identification request was sent. # noqa: E501 :return: The url of this ResponseVisits. # noqa: E501 :rtype: str @@ -277,7 +278,7 @@ def url(self): def url(self, url): """Sets the url of this ResponseVisits. - Page URL from which identification request was sent. # noqa: E501 + Page URL from which the identification request was sent. # noqa: E501 :param url: The url of this ResponseVisits. # noqa: E501 :type: str @@ -353,8 +354,6 @@ def confidence(self, confidence): :param confidence: The confidence of this ResponseVisits. # noqa: E501 :type: Confidence """ - if confidence is None: - raise ValueError("Invalid value for `confidence`, must not be `None`") # noqa: E501 self._confidence = confidence diff --git a/fingerprint_pro_server_api_sdk/models/visit.py b/fingerprint_pro_server_api_sdk/models/visit.py index a22d53d9..b6e52d57 100644 --- a/fingerprint_pro_server_api_sdk/models/visit.py +++ b/fingerprint_pro_server_api_sdk/models/visit.py @@ -87,11 +87,11 @@ def __init__(self, request_id=None, browser_details=None, incognito=None, ip=Non self.timestamp = timestamp self.time = time self.url = url - if tag is not None: - self.tag = tag + self.tag = tag if linked_id is not None: self.linked_id = linked_id - self.confidence = confidence + if confidence is not None: + self.confidence = confidence self.visitor_found = visitor_found self.first_seen_at = first_seen_at self.last_seen_at = last_seen_at @@ -267,7 +267,7 @@ def time(self, time): def url(self): """Gets the url of this Visit. # noqa: E501 - Page URL from which identification request was sent. # noqa: E501 + Page URL from which the identification request was sent. # noqa: E501 :return: The url of this Visit. # noqa: E501 :rtype: str @@ -278,7 +278,7 @@ def url(self): def url(self, url): """Sets the url of this Visit. - Page URL from which identification request was sent. # noqa: E501 + Page URL from which the identification request was sent. # noqa: E501 :param url: The url of this Visit. # noqa: E501 :type: str @@ -308,6 +308,8 @@ def tag(self, tag): :param tag: The tag of this Visit. # noqa: E501 :type: dict(str, object) """ + if tag is None: + raise ValueError("Invalid value for `tag`, must not be `None`") # noqa: E501 self._tag = tag @@ -352,8 +354,6 @@ def confidence(self, confidence): :param confidence: The confidence of this Visit. # noqa: E501 :type: Confidence """ - if confidence is None: - raise ValueError("Invalid value for `confidence`, must not be `None`") # noqa: E501 self._confidence = confidence diff --git a/fingerprint_pro_server_api_sdk/models/webhook_visit.py b/fingerprint_pro_server_api_sdk/models/webhook_visit.py index 69050b2a..3f0aa14f 100644 --- a/fingerprint_pro_server_api_sdk/models/webhook_visit.py +++ b/fingerprint_pro_server_api_sdk/models/webhook_visit.py @@ -196,11 +196,11 @@ def __init__(self, visitor_id=None, client_referrer=None, user_agent=None, bot=N self.timestamp = timestamp self.time = time self.url = url - if tag is not None: - self.tag = tag + self.tag = tag if linked_id is not None: self.linked_id = linked_id - self.confidence = confidence + if confidence is not None: + self.confidence = confidence self.visitor_found = visitor_found self.first_seen_at = first_seen_at self.last_seen_at = last_seen_at @@ -840,7 +840,7 @@ def time(self, time): def url(self): """Gets the url of this WebhookVisit. # noqa: E501 - Page URL from which identification request was sent. # noqa: E501 + Page URL from which the identification request was sent. # noqa: E501 :return: The url of this WebhookVisit. # noqa: E501 :rtype: str @@ -851,7 +851,7 @@ def url(self): def url(self, url): """Sets the url of this WebhookVisit. - Page URL from which identification request was sent. # noqa: E501 + Page URL from which the identification request was sent. # noqa: E501 :param url: The url of this WebhookVisit. # noqa: E501 :type: str @@ -881,6 +881,8 @@ def tag(self, tag): :param tag: The tag of this WebhookVisit. # noqa: E501 :type: dict(str, object) """ + if tag is None: + raise ValueError("Invalid value for `tag`, must not be `None`") # noqa: E501 self._tag = tag @@ -925,8 +927,6 @@ def confidence(self, confidence): :param confidence: The confidence of this WebhookVisit. # noqa: E501 :type: Confidence """ - if confidence is None: - raise ValueError("Invalid value for `confidence`, must not be `None`") # noqa: E501 self._confidence = confidence From 27f7c580e36b2c6b803c2617462b19d51c886e17 Mon Sep 17 00:00:00 2001 From: Ilya Taratukhin Date: Fri, 15 Mar 2024 18:04:27 +0100 Subject: [PATCH 09/13] feat: add `origin_country` field to the `vpn` signal --- docs/VpnResult.md | 7 +-- .../models/vpn_result.py | 45 ++++++++++++++++--- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/docs/VpnResult.md b/docs/VpnResult.md index 6c38c69e..b7760cb6 100644 --- a/docs/VpnResult.md +++ b/docs/VpnResult.md @@ -3,9 +3,10 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**result** | **bool** | VPN or other anonymizing service has been used when sending the request. | [optional] -**origin_timezone** | **str** | Local timezone which is used in timezoneMismatch method. | [optional] -**methods** | [**VpnResultMethods**](VpnResultMethods.md) | | [optional] +**result** | **bool** | VPN or other anonymizing service has been used when sending the request. | +**origin_timezone** | **str** | Local timezone which is used in timezoneMismatch method. | +**origin_country** | **str** | Country of the request (only for Android SDK version >= 2.4.0, ISO 3166 format or unknown). | [optional] +**methods** | [**VpnResultMethods**](VpnResultMethods.md) | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/fingerprint_pro_server_api_sdk/models/vpn_result.py b/fingerprint_pro_server_api_sdk/models/vpn_result.py index f1d22f68..ed5db6f4 100644 --- a/fingerprint_pro_server_api_sdk/models/vpn_result.py +++ b/fingerprint_pro_server_api_sdk/models/vpn_result.py @@ -30,27 +30,29 @@ class VpnResult(object): swagger_types = { 'result': 'bool', 'origin_timezone': 'str', + 'origin_country': 'str', 'methods': 'VpnResultMethods' } attribute_map = { 'result': 'result', 'origin_timezone': 'originTimezone', + 'origin_country': 'originCountry', 'methods': 'methods' } - def __init__(self, result=None, origin_timezone=None, methods=None): # noqa: E501 + def __init__(self, result=None, origin_timezone=None, origin_country=None, methods=None): # noqa: E501 """VpnResult - a model defined in Swagger""" # noqa: E501 self._result = None self._origin_timezone = None + self._origin_country = None self._methods = None self.discriminator = None - if result is not None: - self.result = result - if origin_timezone is not None: - self.origin_timezone = origin_timezone - if methods is not None: - self.methods = methods + self.result = result + self.origin_timezone = origin_timezone + if origin_country is not None: + self.origin_country = origin_country + self.methods = methods @property def result(self): @@ -72,6 +74,8 @@ def result(self, result): :param result: The result of this VpnResult. # noqa: E501 :type: bool """ + if result is None: + raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 self._result = result @@ -95,9 +99,34 @@ def origin_timezone(self, origin_timezone): :param origin_timezone: The origin_timezone of this VpnResult. # noqa: E501 :type: str """ + if origin_timezone is None: + raise ValueError("Invalid value for `origin_timezone`, must not be `None`") # noqa: E501 self._origin_timezone = origin_timezone + @property + def origin_country(self): + """Gets the origin_country of this VpnResult. # noqa: E501 + + Country of the request (only for Android SDK version >= 2.4.0, ISO 3166 format or unknown). # noqa: E501 + + :return: The origin_country of this VpnResult. # noqa: E501 + :rtype: str + """ + return self._origin_country + + @origin_country.setter + def origin_country(self, origin_country): + """Sets the origin_country of this VpnResult. + + Country of the request (only for Android SDK version >= 2.4.0, ISO 3166 format or unknown). # noqa: E501 + + :param origin_country: The origin_country of this VpnResult. # noqa: E501 + :type: str + """ + + self._origin_country = origin_country + @property def methods(self): """Gets the methods of this VpnResult. # noqa: E501 @@ -116,6 +145,8 @@ def methods(self, methods): :param methods: The methods of this VpnResult. # noqa: E501 :type: VpnResultMethods """ + if methods is None: + raise ValueError("Invalid value for `methods`, must not be `None`") # noqa: E501 self._methods = methods From 8beb757db67af38b7a112f93f1a7c21ef35e62a8 Mon Sep 17 00:00:00 2001 From: Ilya Taratukhin Date: Fri, 15 Mar 2024 18:05:18 +0100 Subject: [PATCH 10/13] fix: make fields required according to real API response --- docs/EventResponse.md | 3 +- docs/FingerprintApi.md | 2 +- docs/HighActivityResult.md | 2 +- docs/IpBlockListResult.md | 4 +- docs/IpBlockListResultDetails.md | 4 +- docs/IpInfoResultV4.md | 4 +- docs/IpInfoResultV6.md | 4 +- docs/LocationSpoofingResult.md | 2 +- docs/SignalResponseRawDeviceAttributes.md | 1 + docs/TamperingResult.md | 4 +- docs/VpnResultMethods.md | 6 +-- .../models/event_response.py | 37 ++++++++++++++++--- .../models/high_activity_result.py | 5 ++- .../models/ip_block_list_result.py | 10 +++-- .../models/ip_block_list_result_details.py | 10 +++-- .../models/ip_info_result_v4.py | 10 +++-- .../models/ip_info_result_v6.py | 10 +++-- .../models/location_spoofing_result.py | 9 +++-- .../signal_response_raw_device_attributes.py | 32 ++++++++++++++-- .../models/tampering_result.py | 10 +++-- .../models/vpn_result_methods.py | 15 +++++--- 21 files changed, 127 insertions(+), 57 deletions(-) diff --git a/docs/EventResponse.md b/docs/EventResponse.md index 476eb47d..32c81c70 100644 --- a/docs/EventResponse.md +++ b/docs/EventResponse.md @@ -5,7 +5,8 @@ Contains results from all activated products - Fingerprint Pro, Bot Detection, a ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**products** | [**ProductsResponse**](ProductsResponse.md) | | [optional] +**products** | [**ProductsResponse**](ProductsResponse.md) | | +**error** | [**ProductError**](ProductError.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/FingerprintApi.md b/docs/FingerprintApi.md index d6cf0744..897b9172 100644 --- a/docs/FingerprintApi.md +++ b/docs/FingerprintApi.md @@ -12,7 +12,7 @@ Method | HTTP request | Description Get event by requestId -This endpoint allows you to get a detailed analysis of an individual request. **Only for Enterprise customers:** Please note that the response includes mobile signals (e.g. `rootApps`) even if the request orignated from a non-mobile platform. It is highly recommended that you **ignore** the mobile signals for such requests. Use `requestId` as the URL path parameter. This API method is scoped to a request, i.e. all returned information is by `requestId`. +This endpoint allows you to get a detailed analysis of an individual request. **Only for Enterprise customers:** Please note that the response includes mobile signals (e.g. `rootApps`) even if the request originated from a non-mobile platform. It is highly recommended that you **ignore** the mobile signals for such requests. Use `requestId` as the URL path parameter. This API method is scoped to a request, i.e. all returned information is by `requestId`. ### Example ```python diff --git a/docs/HighActivityResult.md b/docs/HighActivityResult.md index 80435cc8..a7e7f5fa 100644 --- a/docs/HighActivityResult.md +++ b/docs/HighActivityResult.md @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**result** | **bool** | Flag indicating whether the request came from a high activity visitor. | [optional] +**result** | **bool** | Flag indicating whether the request came from a high activity visitor. | **daily_requests** | **float** | Number of requests from the same visitor in the previous day. | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/IpBlockListResult.md b/docs/IpBlockListResult.md index c8b610a7..5fbd20d8 100644 --- a/docs/IpBlockListResult.md +++ b/docs/IpBlockListResult.md @@ -3,8 +3,8 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**result** | **bool** | `true` if request IP address is part of any database that we use to search for known malicious actors, `false` otherwise. | [optional] -**details** | [**IpBlockListResultDetails**](IpBlockListResultDetails.md) | | [optional] +**result** | **bool** | `true` if request IP address is part of any database that we use to search for known malicious actors, `false` otherwise. | +**details** | [**IpBlockListResultDetails**](IpBlockListResultDetails.md) | | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/IpBlockListResultDetails.md b/docs/IpBlockListResultDetails.md index 41c58a42..a3223854 100644 --- a/docs/IpBlockListResultDetails.md +++ b/docs/IpBlockListResultDetails.md @@ -3,8 +3,8 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**email_spam** | **bool** | IP address was part of a known email spam attack (SMTP). | [optional] -**attack_source** | **bool** | IP address was part of a known network attack (SSH/HTTPS). | [optional] +**email_spam** | **bool** | IP address was part of a known email spam attack (SMTP). | +**attack_source** | **bool** | IP address was part of a known network attack (SSH/HTTPS). | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/IpInfoResultV4.md b/docs/IpInfoResultV4.md index 0ff48b16..e2559b16 100644 --- a/docs/IpInfoResultV4.md +++ b/docs/IpInfoResultV4.md @@ -3,8 +3,8 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**address** | **str** | | [optional] -**geolocation** | [**IPLocation**](IPLocation.md) | | [optional] +**address** | **str** | | +**geolocation** | [**IPLocation**](IPLocation.md) | | **asn** | [**ASN**](ASN.md) | | [optional] **datacenter** | [**DataCenter**](DataCenter.md) | | [optional] diff --git a/docs/IpInfoResultV6.md b/docs/IpInfoResultV6.md index 8bed1402..eae81b81 100644 --- a/docs/IpInfoResultV6.md +++ b/docs/IpInfoResultV6.md @@ -3,8 +3,8 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**address** | **str** | | [optional] -**geolocation** | [**IPLocation**](IPLocation.md) | | [optional] +**address** | **str** | | +**geolocation** | [**IPLocation**](IPLocation.md) | | **asn** | [**ASN**](ASN.md) | | [optional] **datacenter** | [**DataCenter**](DataCenter.md) | | [optional] diff --git a/docs/LocationSpoofingResult.md b/docs/LocationSpoofingResult.md index 8f41c6be..ba0f563d 100644 --- a/docs/LocationSpoofingResult.md +++ b/docs/LocationSpoofingResult.md @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**result** | **bool** | Flag indicating whether the request came from a device with location spoofing enabled. | [optional] +**result** | **bool** | Flag indicating whether the request came from a mobile device with location spoofing enabled. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseRawDeviceAttributes.md b/docs/SignalResponseRawDeviceAttributes.md index fd044d43..6a5a2027 100644 --- a/docs/SignalResponseRawDeviceAttributes.md +++ b/docs/SignalResponseRawDeviceAttributes.md @@ -4,6 +4,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **data** | [**RawDeviceAttributesResult**](RawDeviceAttributesResult.md) | | [optional] +**error** | [**ProductError**](ProductError.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/TamperingResult.md b/docs/TamperingResult.md index 18c531f3..d836cf18 100644 --- a/docs/TamperingResult.md +++ b/docs/TamperingResult.md @@ -3,8 +3,8 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**result** | **bool** | Flag indicating whether browser tampering was detected according to our internal thresholds. | [optional] -**anomaly_score** | **float** | Confidence score (`0.0 - 1.0`) for the tampering detection. Values above `0.5` suggest that we're reasonably sure there was a tampering attempt. Values below `0.5` are genuine browsers. | [optional] +**result** | **bool** | Flag indicating whether browser tampering was detected according to our internal thresholds. | +**anomaly_score** | **float** | Confidence score (`0.0 - 1.0`) for the tampering detection. Values above `0.5` suggest that we're reasonably sure there was a tampering attempt. Values below `0.5` are genuine browsers. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/VpnResultMethods.md b/docs/VpnResultMethods.md index bba8c3d9..74528c95 100644 --- a/docs/VpnResultMethods.md +++ b/docs/VpnResultMethods.md @@ -3,9 +3,9 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**timezone_mismatch** | **bool** | User's browser timezone doesn't match the timezone from which the request was originally made. | [optional] -**public_vpn** | **bool** | Request IP address is owned and used by a public VPN service provider. | [optional] -**auxiliary_mobile** | **bool** | This method applies to mobile devices only. Indicates the result of additional methods used to detect a VPN in mobile devices. | [optional] +**timezone_mismatch** | **bool** | User's browser timezone doesn't match the timezone from which the request was originally made. | +**public_vpn** | **bool** | Request IP address is owned and used by a public VPN service provider. | +**auxiliary_mobile** | **bool** | This method applies to mobile devices only. Indicates the result of additional methods used to detect a VPN in mobile devices. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/fingerprint_pro_server_api_sdk/models/event_response.py b/fingerprint_pro_server_api_sdk/models/event_response.py index 1df65b80..34b77b02 100644 --- a/fingerprint_pro_server_api_sdk/models/event_response.py +++ b/fingerprint_pro_server_api_sdk/models/event_response.py @@ -31,19 +31,23 @@ class EventResponse(object): and the value is json key in definition. """ swagger_types = { - 'products': 'ProductsResponse' + 'products': 'ProductsResponse', + 'error': 'ProductError' } attribute_map = { - 'products': 'products' + 'products': 'products', + 'error': 'error' } - def __init__(self, products=None): # noqa: E501 + def __init__(self, products=None, error=None): # noqa: E501 """EventResponse - a model defined in Swagger""" # noqa: E501 self._products = None + self._error = None self.discriminator = None - if products is not None: - self.products = products + self.products = products + if error is not None: + self.error = error @property def products(self): @@ -63,9 +67,32 @@ def products(self, products): :param products: The products of this EventResponse. # noqa: E501 :type: ProductsResponse """ + if products is None: + raise ValueError("Invalid value for `products`, must not be `None`") # noqa: E501 self._products = products + @property + def error(self): + """Gets the error of this EventResponse. # noqa: E501 + + + :return: The error of this EventResponse. # noqa: E501 + :rtype: ProductError + """ + return self._error + + @error.setter + def error(self, error): + """Sets the error of this EventResponse. + + + :param error: The error of this EventResponse. # noqa: E501 + :type: ProductError + """ + + self._error = error + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/fingerprint_pro_server_api_sdk/models/high_activity_result.py b/fingerprint_pro_server_api_sdk/models/high_activity_result.py index 3bb83f29..6bdaf6e8 100644 --- a/fingerprint_pro_server_api_sdk/models/high_activity_result.py +++ b/fingerprint_pro_server_api_sdk/models/high_activity_result.py @@ -42,8 +42,7 @@ def __init__(self, result=None, daily_requests=None): # noqa: E501 self._result = None self._daily_requests = None self.discriminator = None - if result is not None: - self.result = result + self.result = result if daily_requests is not None: self.daily_requests = daily_requests @@ -67,6 +66,8 @@ def result(self, result): :param result: The result of this HighActivityResult. # noqa: E501 :type: bool """ + if result is None: + raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 self._result = result diff --git a/fingerprint_pro_server_api_sdk/models/ip_block_list_result.py b/fingerprint_pro_server_api_sdk/models/ip_block_list_result.py index 9c0c0119..5ae947e9 100644 --- a/fingerprint_pro_server_api_sdk/models/ip_block_list_result.py +++ b/fingerprint_pro_server_api_sdk/models/ip_block_list_result.py @@ -42,10 +42,8 @@ def __init__(self, result=None, details=None): # noqa: E501 self._result = None self._details = None self.discriminator = None - if result is not None: - self.result = result - if details is not None: - self.details = details + self.result = result + self.details = details @property def result(self): @@ -67,6 +65,8 @@ def result(self, result): :param result: The result of this IpBlockListResult. # noqa: E501 :type: bool """ + if result is None: + raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 self._result = result @@ -88,6 +88,8 @@ def details(self, details): :param details: The details of this IpBlockListResult. # noqa: E501 :type: IpBlockListResultDetails """ + if details is None: + raise ValueError("Invalid value for `details`, must not be `None`") # noqa: E501 self._details = details diff --git a/fingerprint_pro_server_api_sdk/models/ip_block_list_result_details.py b/fingerprint_pro_server_api_sdk/models/ip_block_list_result_details.py index b2adbe6c..4af784f8 100644 --- a/fingerprint_pro_server_api_sdk/models/ip_block_list_result_details.py +++ b/fingerprint_pro_server_api_sdk/models/ip_block_list_result_details.py @@ -42,10 +42,8 @@ def __init__(self, email_spam=None, attack_source=None): # noqa: E501 self._email_spam = None self._attack_source = None self.discriminator = None - if email_spam is not None: - self.email_spam = email_spam - if attack_source is not None: - self.attack_source = attack_source + self.email_spam = email_spam + self.attack_source = attack_source @property def email_spam(self): @@ -67,6 +65,8 @@ def email_spam(self, email_spam): :param email_spam: The email_spam of this IpBlockListResultDetails. # noqa: E501 :type: bool """ + if email_spam is None: + raise ValueError("Invalid value for `email_spam`, must not be `None`") # noqa: E501 self._email_spam = email_spam @@ -90,6 +90,8 @@ def attack_source(self, attack_source): :param attack_source: The attack_source of this IpBlockListResultDetails. # noqa: E501 :type: bool """ + if attack_source is None: + raise ValueError("Invalid value for `attack_source`, must not be `None`") # noqa: E501 self._attack_source = attack_source diff --git a/fingerprint_pro_server_api_sdk/models/ip_info_result_v4.py b/fingerprint_pro_server_api_sdk/models/ip_info_result_v4.py index bbee6ae3..90a157b0 100644 --- a/fingerprint_pro_server_api_sdk/models/ip_info_result_v4.py +++ b/fingerprint_pro_server_api_sdk/models/ip_info_result_v4.py @@ -48,10 +48,8 @@ def __init__(self, address=None, geolocation=None, asn=None, datacenter=None): self._asn = None self._datacenter = None self.discriminator = None - if address is not None: - self.address = address - if geolocation is not None: - self.geolocation = geolocation + self.address = address + self.geolocation = geolocation if asn is not None: self.asn = asn if datacenter is not None: @@ -75,6 +73,8 @@ def address(self, address): :param address: The address of this IpInfoResultV4. # noqa: E501 :type: str """ + if address is None: + raise ValueError("Invalid value for `address`, must not be `None`") # noqa: E501 self._address = address @@ -96,6 +96,8 @@ def geolocation(self, geolocation): :param geolocation: The geolocation of this IpInfoResultV4. # noqa: E501 :type: IPLocation """ + if geolocation is None: + raise ValueError("Invalid value for `geolocation`, must not be `None`") # noqa: E501 self._geolocation = geolocation diff --git a/fingerprint_pro_server_api_sdk/models/ip_info_result_v6.py b/fingerprint_pro_server_api_sdk/models/ip_info_result_v6.py index a039f9f0..b1446197 100644 --- a/fingerprint_pro_server_api_sdk/models/ip_info_result_v6.py +++ b/fingerprint_pro_server_api_sdk/models/ip_info_result_v6.py @@ -48,10 +48,8 @@ def __init__(self, address=None, geolocation=None, asn=None, datacenter=None): self._asn = None self._datacenter = None self.discriminator = None - if address is not None: - self.address = address - if geolocation is not None: - self.geolocation = geolocation + self.address = address + self.geolocation = geolocation if asn is not None: self.asn = asn if datacenter is not None: @@ -75,6 +73,8 @@ def address(self, address): :param address: The address of this IpInfoResultV6. # noqa: E501 :type: str """ + if address is None: + raise ValueError("Invalid value for `address`, must not be `None`") # noqa: E501 self._address = address @@ -96,6 +96,8 @@ def geolocation(self, geolocation): :param geolocation: The geolocation of this IpInfoResultV6. # noqa: E501 :type: IPLocation """ + if geolocation is None: + raise ValueError("Invalid value for `geolocation`, must not be `None`") # noqa: E501 self._geolocation = geolocation diff --git a/fingerprint_pro_server_api_sdk/models/location_spoofing_result.py b/fingerprint_pro_server_api_sdk/models/location_spoofing_result.py index 808df4fb..ca386ac8 100644 --- a/fingerprint_pro_server_api_sdk/models/location_spoofing_result.py +++ b/fingerprint_pro_server_api_sdk/models/location_spoofing_result.py @@ -39,14 +39,13 @@ def __init__(self, result=None): # noqa: E501 """LocationSpoofingResult - a model defined in Swagger""" # noqa: E501 self._result = None self.discriminator = None - if result is not None: - self.result = result + self.result = result @property def result(self): """Gets the result of this LocationSpoofingResult. # noqa: E501 - Flag indicating whether the request came from a device with location spoofing enabled. # noqa: E501 + Flag indicating whether the request came from a mobile device with location spoofing enabled. # noqa: E501 :return: The result of this LocationSpoofingResult. # noqa: E501 :rtype: bool @@ -57,11 +56,13 @@ def result(self): def result(self, result): """Sets the result of this LocationSpoofingResult. - Flag indicating whether the request came from a device with location spoofing enabled. # noqa: E501 + Flag indicating whether the request came from a mobile device with location spoofing enabled. # noqa: E501 :param result: The result of this LocationSpoofingResult. # noqa: E501 :type: bool """ + if result is None: + raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 self._result = result diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_raw_device_attributes.py b/fingerprint_pro_server_api_sdk/models/signal_response_raw_device_attributes.py index 7459b404..1fcca218 100644 --- a/fingerprint_pro_server_api_sdk/models/signal_response_raw_device_attributes.py +++ b/fingerprint_pro_server_api_sdk/models/signal_response_raw_device_attributes.py @@ -28,19 +28,24 @@ class SignalResponseRawDeviceAttributes(object): and the value is json key in definition. """ swagger_types = { - 'data': 'RawDeviceAttributesResult' + 'data': 'RawDeviceAttributesResult', + 'error': 'ProductError' } attribute_map = { - 'data': 'data' + 'data': 'data', + 'error': 'error' } - def __init__(self, data=None): # noqa: E501 + def __init__(self, data=None, error=None): # noqa: E501 """SignalResponseRawDeviceAttributes - a model defined in Swagger""" # noqa: E501 self._data = None + self._error = None self.discriminator = None if data is not None: self.data = data + if error is not None: + self.error = error @property def data(self): @@ -63,6 +68,27 @@ def data(self, data): self._data = data + @property + def error(self): + """Gets the error of this SignalResponseRawDeviceAttributes. # noqa: E501 + + + :return: The error of this SignalResponseRawDeviceAttributes. # noqa: E501 + :rtype: ProductError + """ + return self._error + + @error.setter + def error(self, error): + """Sets the error of this SignalResponseRawDeviceAttributes. + + + :param error: The error of this SignalResponseRawDeviceAttributes. # noqa: E501 + :type: ProductError + """ + + self._error = error + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/fingerprint_pro_server_api_sdk/models/tampering_result.py b/fingerprint_pro_server_api_sdk/models/tampering_result.py index 24d87eb7..e0b105aa 100644 --- a/fingerprint_pro_server_api_sdk/models/tampering_result.py +++ b/fingerprint_pro_server_api_sdk/models/tampering_result.py @@ -42,10 +42,8 @@ def __init__(self, result=None, anomaly_score=None): # noqa: E501 self._result = None self._anomaly_score = None self.discriminator = None - if result is not None: - self.result = result - if anomaly_score is not None: - self.anomaly_score = anomaly_score + self.result = result + self.anomaly_score = anomaly_score @property def result(self): @@ -67,6 +65,8 @@ def result(self, result): :param result: The result of this TamperingResult. # noqa: E501 :type: bool """ + if result is None: + raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501 self._result = result @@ -90,6 +90,8 @@ def anomaly_score(self, anomaly_score): :param anomaly_score: The anomaly_score of this TamperingResult. # noqa: E501 :type: float """ + if anomaly_score is None: + raise ValueError("Invalid value for `anomaly_score`, must not be `None`") # noqa: E501 self._anomaly_score = anomaly_score diff --git a/fingerprint_pro_server_api_sdk/models/vpn_result_methods.py b/fingerprint_pro_server_api_sdk/models/vpn_result_methods.py index b79fdab9..0205afc4 100644 --- a/fingerprint_pro_server_api_sdk/models/vpn_result_methods.py +++ b/fingerprint_pro_server_api_sdk/models/vpn_result_methods.py @@ -45,12 +45,9 @@ def __init__(self, timezone_mismatch=None, public_vpn=None, auxiliary_mobile=Non self._public_vpn = None self._auxiliary_mobile = None self.discriminator = None - if timezone_mismatch is not None: - self.timezone_mismatch = timezone_mismatch - if public_vpn is not None: - self.public_vpn = public_vpn - if auxiliary_mobile is not None: - self.auxiliary_mobile = auxiliary_mobile + self.timezone_mismatch = timezone_mismatch + self.public_vpn = public_vpn + self.auxiliary_mobile = auxiliary_mobile @property def timezone_mismatch(self): @@ -72,6 +69,8 @@ def timezone_mismatch(self, timezone_mismatch): :param timezone_mismatch: The timezone_mismatch of this VpnResultMethods. # noqa: E501 :type: bool """ + if timezone_mismatch is None: + raise ValueError("Invalid value for `timezone_mismatch`, must not be `None`") # noqa: E501 self._timezone_mismatch = timezone_mismatch @@ -95,6 +94,8 @@ def public_vpn(self, public_vpn): :param public_vpn: The public_vpn of this VpnResultMethods. # noqa: E501 :type: bool """ + if public_vpn is None: + raise ValueError("Invalid value for `public_vpn`, must not be `None`") # noqa: E501 self._public_vpn = public_vpn @@ -118,6 +119,8 @@ def auxiliary_mobile(self, auxiliary_mobile): :param auxiliary_mobile: The auxiliary_mobile of this VpnResultMethods. # noqa: E501 :type: bool """ + if auxiliary_mobile is None: + raise ValueError("Invalid value for `auxiliary_mobile`, must not be `None`") # noqa: E501 self._auxiliary_mobile = auxiliary_mobile From ef141aaae36e4d220144f16a3e8d781ff7934848 Mon Sep 17 00:00:00 2001 From: Ilya Taratukhin Date: Fri, 15 Mar 2024 18:09:05 +0100 Subject: [PATCH 11/13] chore: add @sshelomentsev and @TheUnderScorer to the CODEOWNERS --- CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index 50bad149..fd1655ee 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1 +1 @@ -* @ilfa \ No newline at end of file +* @ilfa @sshelomentsev @TheUnderScorer From b6422e793221fb7ae4a0debed0ad07da2e125a0e Mon Sep 17 00:00:00 2001 From: Ilya Taratukhin Date: Fri, 15 Mar 2024 18:17:58 +0100 Subject: [PATCH 12/13] test: rename missed mocks in test file --- test/test_fingerprint_api.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/test_fingerprint_api.py b/test/test_fingerprint_api.py index 038f2d4a..9dd573a7 100644 --- a/test/test_fingerprint_api.py +++ b/test/test_fingerprint_api.py @@ -111,10 +111,10 @@ def test_get_visits_correct_data(self): """Test checks correct code run result in default scenario""" mock_pool = MockPoolManager(self) self.api.api_client.rest_client.pool_manager = mock_pool - mock_file1 = 'visits_limit_1.json' - mock_file2 = 'visits_limit_500.json' - mock_file3 = 'visits_limit_500.json' - mock_file4 = 'visits_limit_500.json' + mock_file1 = 'get_visits_200_limit_1.json' + mock_file2 = 'get_visits_200_limit_500.json' + mock_file3 = 'get_visits_200_limit_500.json' + mock_file4 = 'get_visits_200_limit_500.json' mock_pool.expect_request('GET', TestFingerprintApi.get_get_visits_method_path(visitor_id=mock_file1), fields=[self.integration_info], headers=self.request_headers, preload_content=True, timeout=None) @@ -134,7 +134,7 @@ def test_get_visits_error_403(self): """Test checks correct code run result in case of 403 error""" mock_pool = MockPoolManager(self) self.api.api_client.rest_client.pool_manager = mock_pool - mock_file = 'visits_403_error.json' + mock_file = 'get_visits_403_error.json' mock_pool.expect_request('GET', TestFingerprintApi.get_get_visits_method_path(visitor_id=mock_file), fields=[self.integration_info], headers=self.request_headers, preload_content=True, timeout=None, status=403) @@ -176,7 +176,7 @@ def test_get_event_correct_data(self): """Test checks correct code run result in default scenario""" mock_pool = MockPoolManager(self) self.api.api_client.rest_client.pool_manager = mock_pool - mock_file1 = 'get_event.json' + mock_file1 = 'get_event_200.json' mock_pool.expect_request('GET', TestFingerprintApi.get_get_event_method_path(request_id=mock_file1), fields=[self.integration_info], headers=self.request_headers, preload_content=True, timeout=None) From b60fa09e52637faa8d8a1dcc96719ecbd8b2d9ea Mon Sep 17 00:00:00 2001 From: Ilya Taratukhin Date: Fri, 15 Mar 2024 18:50:30 +0100 Subject: [PATCH 13/13] test: fix test for empty response, fix naming in the mocking function --- test/test_fingerprint_api.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/test/test_fingerprint_api.py b/test/test_fingerprint_api.py index 9dd573a7..4ee46f5c 100644 --- a/test/test_fingerprint_api.py +++ b/test/test_fingerprint_api.py @@ -51,24 +51,26 @@ def request(self, *args, **kwargs): self._tc.assertEqual(r[1], kwargs) # TODO Add support for more complex paths? - mock_file_by_visitor_id = MockPoolManager.get_mock_from_path(r[0][1]) + mock_file_by_first_argument = MockPoolManager.get_mock_from_path(r[0][1]) - if mock_file_by_visitor_id == 'bad_text_data': + if mock_file_by_first_argument == 'bad_text_data': return urllib3.HTTPResponse(status=200, body='really bad data') - if mock_file_by_visitor_id == 'bad_json_data': + if mock_file_by_first_argument == 'bad_json_data': return urllib3.HTTPResponse(status=200, body='{}') + if mock_file_by_first_argument == 'empty_event_answer': + return urllib3.HTTPResponse(status=200, body='{"products": {}}') try: - with io.open('./test/mocks/' + mock_file_by_visitor_id, 'r', encoding='utf-8') as mock_file: + with io.open('./test/mocks/' + mock_file_by_first_argument, 'r', encoding='utf-8') as mock_file: answer_mock = mock_file.read() mock_file.close() headers = {} - if mock_file_by_visitor_id == 'get_visits_429_too_many_requests_error.json': + if mock_file_by_first_argument == 'get_visits_429_too_many_requests_error.json': headers.update({'Retry-After': '4'}) return urllib3.HTTPResponse(status=status, body=answer_mock, headers=headers) except IOError as e: print(e) - return urllib3.HTTPResponse(status=200, body='{"visitorId": "%s", "visits": []}' % mock_file_by_visitor_id) + return urllib3.HTTPResponse(status=200, body='{"visitorId": "%s", "visits": []}' % mock_file_by_first_argument) pass @@ -246,13 +248,17 @@ def test_get_event_empty_data(self): """Test checks correct code running in case of there is no events""" mock_pool = MockPoolManager(self) self.api.api_client.rest_client.pool_manager = mock_pool - mocked_id = 'empty_answer' + mocked_id = 'empty_event_answer' mock_pool.expect_request('GET', TestFingerprintApi.get_get_event_method_path(request_id=mocked_id), fields=[self.integration_info], headers=self.request_headers, preload_content=True, timeout=None) response = self.api.get_event(mocked_id) - self.assertEqual(response.products, None) + self.assertIsNotNone(response.products) + for field in response.products.attribute_map.keys(): + value = getattr(response.products, field) + self.assertIsNone(value, f"Signal '{field}' is not empty") + def test_get_visits_empty_answer(self): """Test checks correct code running in case of there is no visits"""