Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
56.55% covered (warning)
56.55%
151 / 267
59.54% covered (warning)
59.54%
78 / 131
CRAP
0.00% covered (danger)
0.00%
0 / 1
Event
56.55% covered (warning)
56.55%
151 / 267
59.54% covered (warning)
59.54%
78 / 131
1995.11
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
55 / 55
100.00% covered (success)
100.00%
1 / 1
1
 __toString
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 openAPITypes
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 openAPIFormats
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 isNullable
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 isNullableSetToNull
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 attributeMap
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setters
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getters
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getModelName
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 listInvalidProperties
71.43% covered (warning)
71.43%
10 / 14
0.00% covered (danger)
0.00%
0 / 1
13.82
 valid
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getEventId
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setEventId
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getTimestamp
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setTimestamp
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getIncrementalIdentificationStatus
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setIncrementalIdentificationStatus
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getLinkedId
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setLinkedId
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getEnvironmentId
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setEnvironmentId
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getSuspect
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setSuspect
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getSdk
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setSdk
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getReplayed
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setReplayed
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getIdentification
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setIdentification
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getSupplementaryIdHighRecall
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setSupplementaryIdHighRecall
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getTags
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setTags
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getUrl
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setUrl
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getBundleId
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setBundleId
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getPackageName
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setPackageName
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getIpAddress
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setIpAddress
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getUserAgent
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setUserAgent
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getClientReferrer
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setClientReferrer
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getBrowserDetails
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setBrowserDetails
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getProximity
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setProximity
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getBot
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setBot
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getBotType
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setBotType
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getBotInfo
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setBotInfo
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getClonedApp
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setClonedApp
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getDeveloperTools
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setDeveloperTools
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getEmulator
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setEmulator
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getFactoryResetTimestamp
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setFactoryResetTimestamp
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getFrida
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setFrida
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getIpBlocklist
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setIpBlocklist
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getIpInfo
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setIpInfo
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getProxy
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setProxy
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getProxyConfidence
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setProxyConfidence
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getProxyDetails
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setProxyDetails
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getIncognito
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setIncognito
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getJailbroken
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setJailbroken
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getLocationSpoofing
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setLocationSpoofing
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getMitmAttack
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setMitmAttack
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getPrivacySettings
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setPrivacySettings
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getRootApps
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setRootApps
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getRuleAction
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setRuleAction
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getSimulator
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setSimulator
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getSuspectScore
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setSuspectScore
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getTampering
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setTampering
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getTamperingConfidence
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setTamperingConfidence
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getTamperingMlScore
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setTamperingMlScore
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
12
 getTamperingDetails
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setTamperingDetails
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getVelocity
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setVelocity
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getVirtualMachine
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setVirtualMachine
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getVirtualMachineMlScore
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setVirtualMachineMlScore
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
12
 getVpn
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setVpn
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getVpnConfidence
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setVpnConfidence
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getVpnOriginTimezone
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setVpnOriginTimezone
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getVpnOriginCountry
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setVpnOriginCountry
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getVpnMethods
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setVpnMethods
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getHighActivityDevice
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setHighActivityDevice
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getRawDeviceAttributes
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setRawDeviceAttributes
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 offsetExists
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 offsetGet
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 offsetSet
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 offsetUnset
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 jsonSerialize
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 toHeaderValue
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 openAPINullables
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getOpenAPINullablesSetToNull
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setOpenAPINullablesSetToNull
n/a
0 / 0
n/a
0 / 0
1
 setIfExists
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
4
1<?php
2
3/**
4 * Event.
5 *
6 * @category Class
7 *
8 * @author   Fingerprint
9 *
10 * @see      https://fingerprint.com
11 */
12
13/**
14 * Server API.
15 *
16 * Fingerprint Server API allows you to get, search, and update 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.
17 *
18 * The version of the OpenAPI document: 4
19 * Contact: support@fingerprint.com
20 * Generated by: https://openapi-generator.tech
21 * Generator version: 7.21.0
22 */
23
24/**
25 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
26 * https://openapi-generator.tech
27 * Do not edit the class manually.
28 */
29
30namespace Fingerprint\ServerSdk\Model;
31
32use Fingerprint\ServerSdk\ObjectSerializer;
33
34/**
35 * Contains results from Fingerprint Identification and all active Smart Signals.
36 *
37 * @category Class
38 *
39 * @description Contains results from Fingerprint Identification and all active Smart Signals.
40 *
41 * @author   Fingerprint
42 *
43 * @see      https://fingerprint.com
44 *
45 * @implements \ArrayAccess<string, mixed>
46 *
47 * @noinspection GrazieInspection
48 * @noinspection RedundantSuppression
49 */
50class Event implements ModelInterface, \ArrayAccess, \JsonSerializable
51{
52    public const DISCRIMINATOR = null;
53
54    /**
55     * The original name of the model.
56     *
57     */
58    protected static string $openAPIModelName = 'Event';
59
60    /**
61     * Array of property to type mappings. Used for (de)serialization.
62     *
63     * @var string[]
64     */
65    protected static array $openAPITypes = [
66        'event_id' => 'string',
67        'timestamp' => 'int',
68        'incremental_identification_status' => '\Fingerprint\ServerSdk\Model\IncrementalIdentificationStatus',
69        'linked_id' => 'string',
70        'environment_id' => 'string',
71        'suspect' => 'bool',
72        'sdk' => '\Fingerprint\ServerSdk\Model\SDK',
73        'replayed' => 'bool',
74        'identification' => '\Fingerprint\ServerSdk\Model\Identification',
75        'supplementary_id_high_recall' => '\Fingerprint\ServerSdk\Model\SupplementaryIDHighRecall',
76        'tags' => 'array<string,mixed>',
77        'url' => 'string',
78        'bundle_id' => 'string',
79        'package_name' => 'string',
80        'ip_address' => 'string',
81        'user_agent' => 'string',
82        'client_referrer' => 'string',
83        'browser_details' => '\Fingerprint\ServerSdk\Model\BrowserDetails',
84        'proximity' => '\Fingerprint\ServerSdk\Model\Proximity',
85        'bot' => '\Fingerprint\ServerSdk\Model\BotResult',
86        'bot_type' => 'string',
87        'bot_info' => '\Fingerprint\ServerSdk\Model\BotInfo',
88        'cloned_app' => 'bool',
89        'developer_tools' => 'bool',
90        'emulator' => 'bool',
91        'factory_reset_timestamp' => 'int',
92        'frida' => 'bool',
93        'ip_blocklist' => '\Fingerprint\ServerSdk\Model\IPBlockList',
94        'ip_info' => '\Fingerprint\ServerSdk\Model\IPInfo',
95        'proxy' => 'bool',
96        'proxy_confidence' => '\Fingerprint\ServerSdk\Model\ProxyConfidence',
97        'proxy_details' => '\Fingerprint\ServerSdk\Model\ProxyDetails',
98        'incognito' => 'bool',
99        'jailbroken' => 'bool',
100        'location_spoofing' => 'bool',
101        'mitm_attack' => 'bool',
102        'privacy_settings' => 'bool',
103        'root_apps' => 'bool',
104        'rule_action' => '\Fingerprint\ServerSdk\Model\EventRuleAction',
105        'simulator' => 'bool',
106        'suspect_score' => 'int',
107        'tampering' => 'bool',
108        'tampering_confidence' => '\Fingerprint\ServerSdk\Model\TamperingConfidence',
109        'tampering_ml_score' => 'float',
110        'tampering_details' => '\Fingerprint\ServerSdk\Model\TamperingDetails',
111        'velocity' => '\Fingerprint\ServerSdk\Model\Velocity',
112        'virtual_machine' => 'bool',
113        'virtual_machine_ml_score' => 'float',
114        'vpn' => 'bool',
115        'vpn_confidence' => '\Fingerprint\ServerSdk\Model\VpnConfidence',
116        'vpn_origin_timezone' => 'string',
117        'vpn_origin_country' => 'string',
118        'vpn_methods' => '\Fingerprint\ServerSdk\Model\VpnMethods',
119        'high_activity_device' => 'bool',
120        'raw_device_attributes' => '\Fingerprint\ServerSdk\Model\RawDeviceAttributes',
121    ];
122
123    /**
124     * Array of property to format mappings. Used for (de)serialization.
125     *
126     * @var string[]
127     *
128     * @phpstan-var array<string, string|null>
129     *
130     * @psalm-var array<string, string|null>
131     */
132    protected static array $openAPIFormats = [
133        'event_id' => null,
134        'timestamp' => 'int64',
135        'incremental_identification_status' => null,
136        'linked_id' => null,
137        'environment_id' => null,
138        'suspect' => null,
139        'sdk' => null,
140        'replayed' => null,
141        'identification' => null,
142        'supplementary_id_high_recall' => null,
143        'tags' => null,
144        'url' => null,
145        'bundle_id' => null,
146        'package_name' => null,
147        'ip_address' => null,
148        'user_agent' => null,
149        'client_referrer' => null,
150        'browser_details' => null,
151        'proximity' => null,
152        'bot' => null,
153        'bot_type' => null,
154        'bot_info' => null,
155        'cloned_app' => null,
156        'developer_tools' => null,
157        'emulator' => null,
158        'factory_reset_timestamp' => 'int64',
159        'frida' => null,
160        'ip_blocklist' => null,
161        'ip_info' => null,
162        'proxy' => null,
163        'proxy_confidence' => null,
164        'proxy_details' => null,
165        'incognito' => null,
166        'jailbroken' => null,
167        'location_spoofing' => null,
168        'mitm_attack' => null,
169        'privacy_settings' => null,
170        'root_apps' => null,
171        'rule_action' => null,
172        'simulator' => null,
173        'suspect_score' => null,
174        'tampering' => null,
175        'tampering_confidence' => null,
176        'tampering_ml_score' => 'double',
177        'tampering_details' => null,
178        'velocity' => null,
179        'virtual_machine' => null,
180        'virtual_machine_ml_score' => 'double',
181        'vpn' => null,
182        'vpn_confidence' => null,
183        'vpn_origin_timezone' => null,
184        'vpn_origin_country' => null,
185        'vpn_methods' => null,
186        'high_activity_device' => null,
187        'raw_device_attributes' => null,
188    ];
189
190    /**
191     * Array of nullable properties. Used for (de)serialization.
192     *
193     * @var bool[]
194     */
195    protected static array $openAPINullables = [
196        'event_id' => false,
197        'timestamp' => false,
198        'incremental_identification_status' => false,
199        'linked_id' => false,
200        'environment_id' => false,
201        'suspect' => false,
202        'sdk' => false,
203        'replayed' => false,
204        'identification' => false,
205        'supplementary_id_high_recall' => false,
206        'tags' => false,
207        'url' => false,
208        'bundle_id' => false,
209        'package_name' => false,
210        'ip_address' => false,
211        'user_agent' => false,
212        'client_referrer' => false,
213        'browser_details' => false,
214        'proximity' => false,
215        'bot' => false,
216        'bot_type' => false,
217        'bot_info' => false,
218        'cloned_app' => false,
219        'developer_tools' => false,
220        'emulator' => false,
221        'factory_reset_timestamp' => false,
222        'frida' => false,
223        'ip_blocklist' => false,
224        'ip_info' => false,
225        'proxy' => false,
226        'proxy_confidence' => false,
227        'proxy_details' => false,
228        'incognito' => false,
229        'jailbroken' => false,
230        'location_spoofing' => false,
231        'mitm_attack' => false,
232        'privacy_settings' => false,
233        'root_apps' => false,
234        'rule_action' => false,
235        'simulator' => false,
236        'suspect_score' => false,
237        'tampering' => false,
238        'tampering_confidence' => false,
239        'tampering_ml_score' => false,
240        'tampering_details' => false,
241        'velocity' => false,
242        'virtual_machine' => false,
243        'virtual_machine_ml_score' => false,
244        'vpn' => false,
245        'vpn_confidence' => false,
246        'vpn_origin_timezone' => false,
247        'vpn_origin_country' => false,
248        'vpn_methods' => false,
249        'high_activity_device' => false,
250        'raw_device_attributes' => false,
251    ];
252
253    /**
254     * If a nullable field gets set to null, insert it here.
255     *
256     * @var bool[]
257     */
258    protected array $openAPINullablesSetToNull = [];
259
260    /**
261     * Array of attributes where the key is the local name,
262     * and the value is the original name.
263     *
264     * @var string[]
265     */
266    protected static array $attributeMap = [
267        'event_id' => 'event_id',
268        'timestamp' => 'timestamp',
269        'incremental_identification_status' => 'incremental_identification_status',
270        'linked_id' => 'linked_id',
271        'environment_id' => 'environment_id',
272        'suspect' => 'suspect',
273        'sdk' => 'sdk',
274        'replayed' => 'replayed',
275        'identification' => 'identification',
276        'supplementary_id_high_recall' => 'supplementary_id_high_recall',
277        'tags' => 'tags',
278        'url' => 'url',
279        'bundle_id' => 'bundle_id',
280        'package_name' => 'package_name',
281        'ip_address' => 'ip_address',
282        'user_agent' => 'user_agent',
283        'client_referrer' => 'client_referrer',
284        'browser_details' => 'browser_details',
285        'proximity' => 'proximity',
286        'bot' => 'bot',
287        'bot_type' => 'bot_type',
288        'bot_info' => 'bot_info',
289        'cloned_app' => 'cloned_app',
290        'developer_tools' => 'developer_tools',
291        'emulator' => 'emulator',
292        'factory_reset_timestamp' => 'factory_reset_timestamp',
293        'frida' => 'frida',
294        'ip_blocklist' => 'ip_blocklist',
295        'ip_info' => 'ip_info',
296        'proxy' => 'proxy',
297        'proxy_confidence' => 'proxy_confidence',
298        'proxy_details' => 'proxy_details',
299        'incognito' => 'incognito',
300        'jailbroken' => 'jailbroken',
301        'location_spoofing' => 'location_spoofing',
302        'mitm_attack' => 'mitm_attack',
303        'privacy_settings' => 'privacy_settings',
304        'root_apps' => 'root_apps',
305        'rule_action' => 'rule_action',
306        'simulator' => 'simulator',
307        'suspect_score' => 'suspect_score',
308        'tampering' => 'tampering',
309        'tampering_confidence' => 'tampering_confidence',
310        'tampering_ml_score' => 'tampering_ml_score',
311        'tampering_details' => 'tampering_details',
312        'velocity' => 'velocity',
313        'virtual_machine' => 'virtual_machine',
314        'virtual_machine_ml_score' => 'virtual_machine_ml_score',
315        'vpn' => 'vpn',
316        'vpn_confidence' => 'vpn_confidence',
317        'vpn_origin_timezone' => 'vpn_origin_timezone',
318        'vpn_origin_country' => 'vpn_origin_country',
319        'vpn_methods' => 'vpn_methods',
320        'high_activity_device' => 'high_activity_device',
321        'raw_device_attributes' => 'raw_device_attributes',
322    ];
323
324    /**
325     * Array of attributes to setter functions (for deserialization of responses).
326     *
327     * @var string[]
328     */
329    protected static array $setters = [
330        'event_id' => 'setEventId',
331        'timestamp' => 'setTimestamp',
332        'incremental_identification_status' => 'setIncrementalIdentificationStatus',
333        'linked_id' => 'setLinkedId',
334        'environment_id' => 'setEnvironmentId',
335        'suspect' => 'setSuspect',
336        'sdk' => 'setSdk',
337        'replayed' => 'setReplayed',
338        'identification' => 'setIdentification',
339        'supplementary_id_high_recall' => 'setSupplementaryIdHighRecall',
340        'tags' => 'setTags',
341        'url' => 'setUrl',
342        'bundle_id' => 'setBundleId',
343        'package_name' => 'setPackageName',
344        'ip_address' => 'setIpAddress',
345        'user_agent' => 'setUserAgent',
346        'client_referrer' => 'setClientReferrer',
347        'browser_details' => 'setBrowserDetails',
348        'proximity' => 'setProximity',
349        'bot' => 'setBot',
350        'bot_type' => 'setBotType',
351        'bot_info' => 'setBotInfo',
352        'cloned_app' => 'setClonedApp',
353        'developer_tools' => 'setDeveloperTools',
354        'emulator' => 'setEmulator',
355        'factory_reset_timestamp' => 'setFactoryResetTimestamp',
356        'frida' => 'setFrida',
357        'ip_blocklist' => 'setIpBlocklist',
358        'ip_info' => 'setIpInfo',
359        'proxy' => 'setProxy',
360        'proxy_confidence' => 'setProxyConfidence',
361        'proxy_details' => 'setProxyDetails',
362        'incognito' => 'setIncognito',
363        'jailbroken' => 'setJailbroken',
364        'location_spoofing' => 'setLocationSpoofing',
365        'mitm_attack' => 'setMitmAttack',
366        'privacy_settings' => 'setPrivacySettings',
367        'root_apps' => 'setRootApps',
368        'rule_action' => 'setRuleAction',
369        'simulator' => 'setSimulator',
370        'suspect_score' => 'setSuspectScore',
371        'tampering' => 'setTampering',
372        'tampering_confidence' => 'setTamperingConfidence',
373        'tampering_ml_score' => 'setTamperingMlScore',
374        'tampering_details' => 'setTamperingDetails',
375        'velocity' => 'setVelocity',
376        'virtual_machine' => 'setVirtualMachine',
377        'virtual_machine_ml_score' => 'setVirtualMachineMlScore',
378        'vpn' => 'setVpn',
379        'vpn_confidence' => 'setVpnConfidence',
380        'vpn_origin_timezone' => 'setVpnOriginTimezone',
381        'vpn_origin_country' => 'setVpnOriginCountry',
382        'vpn_methods' => 'setVpnMethods',
383        'high_activity_device' => 'setHighActivityDevice',
384        'raw_device_attributes' => 'setRawDeviceAttributes',
385    ];
386
387    /**
388     * Array of attributes to getter functions (for serialization of requests).
389     *
390     * @var string[]
391     */
392    protected static array $getters = [
393        'event_id' => 'getEventId',
394        'timestamp' => 'getTimestamp',
395        'incremental_identification_status' => 'getIncrementalIdentificationStatus',
396        'linked_id' => 'getLinkedId',
397        'environment_id' => 'getEnvironmentId',
398        'suspect' => 'getSuspect',
399        'sdk' => 'getSdk',
400        'replayed' => 'getReplayed',
401        'identification' => 'getIdentification',
402        'supplementary_id_high_recall' => 'getSupplementaryIdHighRecall',
403        'tags' => 'getTags',
404        'url' => 'getUrl',
405        'bundle_id' => 'getBundleId',
406        'package_name' => 'getPackageName',
407        'ip_address' => 'getIpAddress',
408        'user_agent' => 'getUserAgent',
409        'client_referrer' => 'getClientReferrer',
410        'browser_details' => 'getBrowserDetails',
411        'proximity' => 'getProximity',
412        'bot' => 'getBot',
413        'bot_type' => 'getBotType',
414        'bot_info' => 'getBotInfo',
415        'cloned_app' => 'getClonedApp',
416        'developer_tools' => 'getDeveloperTools',
417        'emulator' => 'getEmulator',
418        'factory_reset_timestamp' => 'getFactoryResetTimestamp',
419        'frida' => 'getFrida',
420        'ip_blocklist' => 'getIpBlocklist',
421        'ip_info' => 'getIpInfo',
422        'proxy' => 'getProxy',
423        'proxy_confidence' => 'getProxyConfidence',
424        'proxy_details' => 'getProxyDetails',
425        'incognito' => 'getIncognito',
426        'jailbroken' => 'getJailbroken',
427        'location_spoofing' => 'getLocationSpoofing',
428        'mitm_attack' => 'getMitmAttack',
429        'privacy_settings' => 'getPrivacySettings',
430        'root_apps' => 'getRootApps',
431        'rule_action' => 'getRuleAction',
432        'simulator' => 'getSimulator',
433        'suspect_score' => 'getSuspectScore',
434        'tampering' => 'getTampering',
435        'tampering_confidence' => 'getTamperingConfidence',
436        'tampering_ml_score' => 'getTamperingMlScore',
437        'tampering_details' => 'getTamperingDetails',
438        'velocity' => 'getVelocity',
439        'virtual_machine' => 'getVirtualMachine',
440        'virtual_machine_ml_score' => 'getVirtualMachineMlScore',
441        'vpn' => 'getVpn',
442        'vpn_confidence' => 'getVpnConfidence',
443        'vpn_origin_timezone' => 'getVpnOriginTimezone',
444        'vpn_origin_country' => 'getVpnOriginCountry',
445        'vpn_methods' => 'getVpnMethods',
446        'high_activity_device' => 'getHighActivityDevice',
447        'raw_device_attributes' => 'getRawDeviceAttributes',
448    ];
449
450    /**
451     * Associative array for storing property values.
452     */
453    protected array $container = [];
454
455    /**
456     * Constructor.
457     *
458     * @param array|null $data Associated array of property values
459     *                         initializing the model
460     *
461     * @noinspection DuplicatedCode
462     */
463    public function __construct(?array $data = null)
464    {
465        $this->setIfExists('event_id', $data ?? [], null);
466        $this->setIfExists('timestamp', $data ?? [], null);
467        $this->setIfExists('incremental_identification_status', $data ?? [], null);
468        $this->setIfExists('linked_id', $data ?? [], null);
469        $this->setIfExists('environment_id', $data ?? [], null);
470        $this->setIfExists('suspect', $data ?? [], null);
471        $this->setIfExists('sdk', $data ?? [], null);
472        $this->setIfExists('replayed', $data ?? [], null);
473        $this->setIfExists('identification', $data ?? [], null);
474        $this->setIfExists('supplementary_id_high_recall', $data ?? [], null);
475        $this->setIfExists('tags', $data ?? [], null);
476        $this->setIfExists('url', $data ?? [], null);
477        $this->setIfExists('bundle_id', $data ?? [], null);
478        $this->setIfExists('package_name', $data ?? [], null);
479        $this->setIfExists('ip_address', $data ?? [], null);
480        $this->setIfExists('user_agent', $data ?? [], null);
481        $this->setIfExists('client_referrer', $data ?? [], null);
482        $this->setIfExists('browser_details', $data ?? [], null);
483        $this->setIfExists('proximity', $data ?? [], null);
484        $this->setIfExists('bot', $data ?? [], null);
485        $this->setIfExists('bot_type', $data ?? [], null);
486        $this->setIfExists('bot_info', $data ?? [], null);
487        $this->setIfExists('cloned_app', $data ?? [], null);
488        $this->setIfExists('developer_tools', $data ?? [], null);
489        $this->setIfExists('emulator', $data ?? [], null);
490        $this->setIfExists('factory_reset_timestamp', $data ?? [], null);
491        $this->setIfExists('frida', $data ?? [], null);
492        $this->setIfExists('ip_blocklist', $data ?? [], null);
493        $this->setIfExists('ip_info', $data ?? [], null);
494        $this->setIfExists('proxy', $data ?? [], null);
495        $this->setIfExists('proxy_confidence', $data ?? [], null);
496        $this->setIfExists('proxy_details', $data ?? [], null);
497        $this->setIfExists('incognito', $data ?? [], null);
498        $this->setIfExists('jailbroken', $data ?? [], null);
499        $this->setIfExists('location_spoofing', $data ?? [], null);
500        $this->setIfExists('mitm_attack', $data ?? [], null);
501        $this->setIfExists('privacy_settings', $data ?? [], null);
502        $this->setIfExists('root_apps', $data ?? [], null);
503        $this->setIfExists('rule_action', $data ?? [], null);
504        $this->setIfExists('simulator', $data ?? [], null);
505        $this->setIfExists('suspect_score', $data ?? [], null);
506        $this->setIfExists('tampering', $data ?? [], null);
507        $this->setIfExists('tampering_confidence', $data ?? [], null);
508        $this->setIfExists('tampering_ml_score', $data ?? [], null);
509        $this->setIfExists('tampering_details', $data ?? [], null);
510        $this->setIfExists('velocity', $data ?? [], null);
511        $this->setIfExists('virtual_machine', $data ?? [], null);
512        $this->setIfExists('virtual_machine_ml_score', $data ?? [], null);
513        $this->setIfExists('vpn', $data ?? [], null);
514        $this->setIfExists('vpn_confidence', $data ?? [], null);
515        $this->setIfExists('vpn_origin_timezone', $data ?? [], null);
516        $this->setIfExists('vpn_origin_country', $data ?? [], null);
517        $this->setIfExists('vpn_methods', $data ?? [], null);
518        $this->setIfExists('high_activity_device', $data ?? [], null);
519        $this->setIfExists('raw_device_attributes', $data ?? [], null);
520    }
521
522    /**
523     * Gets the string presentation of the object.
524     *
525     */
526    public function __toString(): string
527    {
528        return json_encode(
529            ObjectSerializer::sanitizeForSerialization($this),
530            JSON_PRETTY_PRINT
531        );
532    }
533
534    /**
535     * Array of property to type mappings. Used for (de)serialization.
536     *
537     */
538    public static function openAPITypes(): array
539    {
540        return self::$openAPITypes;
541    }
542
543    /**
544     * Array of property to format mappings. Used for (de)serialization.
545     */
546    public static function openAPIFormats(): array
547    {
548        return self::$openAPIFormats;
549    }
550
551    /**
552     * Checks if a property is nullable.
553     *
554     */
555    public static function isNullable(string $property): bool
556    {
557        return self::openAPINullables()[$property] ?? false;
558    }
559
560    /**
561     * Checks if a nullable property is set to null.
562     *
563     */
564    public function isNullableSetToNull(string $property): bool
565    {
566        return in_array($property, $this->getOpenAPINullablesSetToNull(), true);
567    }
568
569    /**
570     * Array of attributes where the key is the local name,
571     * and the value is the original name.
572     *
573     */
574    public static function attributeMap(): array
575    {
576        return self::$attributeMap;
577    }
578
579    /**
580     * Array of attributes to setter functions (for deserialization of responses).
581     *
582     */
583    public static function setters(): array
584    {
585        return self::$setters;
586    }
587
588    /**
589     * Array of attributes to getter functions (for serialization of requests).
590     *
591     */
592    public static function getters(): array
593    {
594        return self::$getters;
595    }
596
597    /**
598     * The original name of the model.
599     *
600     */
601    public function getModelName(): string
602    {
603        return self::$openAPIModelName;
604    }
605
606    /**
607     * Show all the invalid properties with reasons.
608     *
609     * @return array invalid properties with reasons
610     */
611    public function listInvalidProperties(): array
612    {
613        $invalidProperties = [];
614
615        if (null === $this->container['event_id']) {
616            $invalidProperties[] = "'event_id' can't be null";
617        }
618        if (null === $this->container['timestamp']) {
619            $invalidProperties[] = "'timestamp' can't be null";
620        }
621        if (!is_null($this->container['tampering_ml_score']) && ($this->container['tampering_ml_score'] > 1)) {
622            $invalidProperties[] = "invalid value for 'tampering_ml_score', must be smaller than or equal to 1.";
623        }
624
625        if (!is_null($this->container['tampering_ml_score']) && ($this->container['tampering_ml_score'] < 0)) {
626            $invalidProperties[] = "invalid value for 'tampering_ml_score', must be bigger than or equal to 0.";
627        }
628
629        if (!is_null($this->container['virtual_machine_ml_score']) && ($this->container['virtual_machine_ml_score'] > 1)) {
630            $invalidProperties[] = "invalid value for 'virtual_machine_ml_score', must be smaller than or equal to 1.";
631        }
632
633        if (!is_null($this->container['virtual_machine_ml_score']) && ($this->container['virtual_machine_ml_score'] < 0)) {
634            $invalidProperties[] = "invalid value for 'virtual_machine_ml_score', must be bigger than or equal to 0.";
635        }
636
637        return $invalidProperties;
638    }
639
640    /**
641     * Validate all the properties in the model
642     * return true if all passed.
643     *
644     * @return bool True if all properties are valid
645     */
646    public function valid(): bool
647    {
648        return 0 === count($this->listInvalidProperties());
649    }
650
651    /**
652     * Gets event_id.
653     *
654     */
655    public function getEventId(): ?string
656    {
657        return $this->container['event_id'];
658    }
659
660    /**
661     * Sets event_id.
662     *
663     * @param string $event_id Unique identifier of the user's request. The first portion of the event_id is a unix epoch milliseconds timestamp For example: `1758130560902.8tRtrH`
664     *
665     */
666    public function setEventId(string $event_id): self
667    {
668        $this->container['event_id'] = $event_id;
669
670        return $this;
671    }
672
673    /**
674     * Gets timestamp.
675     *
676     */
677    public function getTimestamp(): ?int
678    {
679        return $this->container['timestamp'];
680    }
681
682    /**
683     * Sets timestamp.
684     *
685     * @param int $timestamp timestamp of the event with millisecond precision in Unix time
686     *
687     */
688    public function setTimestamp(int $timestamp): self
689    {
690        $this->container['timestamp'] = $timestamp;
691
692        return $this;
693    }
694
695    /**
696     * Gets incremental_identification_status.
697     *
698     */
699    public function getIncrementalIdentificationStatus(): ?IncrementalIdentificationStatus
700    {
701        return $this->container['incremental_identification_status'];
702    }
703
704    /**
705     * Sets incremental_identification_status.
706     *
707     * @param IncrementalIdentificationStatus $incremental_identification_status incremental_identification_status
708     *
709     */
710    public function setIncrementalIdentificationStatus(IncrementalIdentificationStatus $incremental_identification_status): self
711    {
712        $this->container['incremental_identification_status'] = $incremental_identification_status;
713
714        return $this;
715    }
716
717    /**
718     * Gets linked_id.
719     *
720     */
721    public function getLinkedId(): ?string
722    {
723        return $this->container['linked_id'];
724    }
725
726    /**
727     * Sets linked_id.
728     *
729     * @param string $linked_id a customer-provided id that was sent with the request
730     *
731     */
732    public function setLinkedId(string $linked_id): self
733    {
734        $this->container['linked_id'] = $linked_id;
735
736        return $this;
737    }
738
739    /**
740     * Gets environment_id.
741     *
742     */
743    public function getEnvironmentId(): ?string
744    {
745        return $this->container['environment_id'];
746    }
747
748    /**
749     * Sets environment_id.
750     *
751     * @param string $environment_id Environment Id of the event. For example: `ae_47abaca3db2c7c43`
752     *
753     */
754    public function setEnvironmentId(string $environment_id): self
755    {
756        $this->container['environment_id'] = $environment_id;
757
758        return $this;
759    }
760
761    /**
762     * Gets suspect.
763     *
764     */
765    public function getSuspect(): ?bool
766    {
767        return $this->container['suspect'];
768    }
769
770    /**
771     * Sets suspect.
772     *
773     * @param bool $suspect Field is `true` if you have previously set the `suspect` flag for this event using the [Server API Update event endpoint](https://docs.fingerprint.com/reference/server-api-v4-update-event).
774     *
775     */
776    public function setSuspect(bool $suspect): self
777    {
778        $this->container['suspect'] = $suspect;
779
780        return $this;
781    }
782
783    /**
784     * Gets sdk.
785     *
786     */
787    public function getSdk(): ?SDK
788    {
789        return $this->container['sdk'];
790    }
791
792    /**
793     * Sets sdk.
794     *
795     * @param SDK $sdk sdk
796     *
797     */
798    public function setSdk(SDK $sdk): self
799    {
800        $this->container['sdk'] = $sdk;
801
802        return $this;
803    }
804
805    /**
806     * Gets replayed.
807     *
808     */
809    public function getReplayed(): ?bool
810    {
811        return $this->container['replayed'];
812    }
813
814    /**
815     * Sets replayed.
816     *
817     * @param bool $replayed `true` if we determined that this payload was replayed, `false` otherwise
818     *
819     */
820    public function setReplayed(bool $replayed): self
821    {
822        $this->container['replayed'] = $replayed;
823
824        return $this;
825    }
826
827    /**
828     * Gets identification.
829     *
830     */
831    public function getIdentification(): ?Identification
832    {
833        return $this->container['identification'];
834    }
835
836    /**
837     * Sets identification.
838     *
839     * @param Identification $identification identification
840     *
841     */
842    public function setIdentification(Identification $identification): self
843    {
844        $this->container['identification'] = $identification;
845
846        return $this;
847    }
848
849    /**
850     * Gets supplementary_id_high_recall.
851     *
852     */
853    public function getSupplementaryIdHighRecall(): ?SupplementaryIDHighRecall
854    {
855        return $this->container['supplementary_id_high_recall'];
856    }
857
858    /**
859     * Sets supplementary_id_high_recall.
860     *
861     * @param SupplementaryIDHighRecall $supplementary_id_high_recall supplementary_id_high_recall
862     *
863     */
864    public function setSupplementaryIdHighRecall(SupplementaryIDHighRecall $supplementary_id_high_recall): self
865    {
866        $this->container['supplementary_id_high_recall'] = $supplementary_id_high_recall;
867
868        return $this;
869    }
870
871    /**
872     * Gets tags.
873     *
874     * @return array<string,mixed>|null
875     */
876    public function getTags(): ?array
877    {
878        return $this->container['tags'];
879    }
880
881    /**
882     * Sets tags.
883     *
884     * @param array<string,mixed> $tags a customer-provided value or an object that was sent with the identification request or updated later
885     *
886     */
887    public function setTags(array $tags): self
888    {
889        $this->container['tags'] = $tags;
890
891        return $this;
892    }
893
894    /**
895     * Gets url.
896     *
897     */
898    public function getUrl(): ?string
899    {
900        return $this->container['url'];
901    }
902
903    /**
904     * Sets url.
905     *
906     * @param string $url Page URL from which the request was sent. For example `https://example.com/`
907     *
908     */
909    public function setUrl(string $url): self
910    {
911        $this->container['url'] = $url;
912
913        return $this;
914    }
915
916    /**
917     * Gets bundle_id.
918     *
919     */
920    public function getBundleId(): ?string
921    {
922        return $this->container['bundle_id'];
923    }
924
925    /**
926     * Sets bundle_id.
927     *
928     * @param string $bundle_id Bundle Id of the iOS application integrated with the Fingerprint SDK for the event. For example: `com.foo.app`
929     *
930     */
931    public function setBundleId(string $bundle_id): self
932    {
933        $this->container['bundle_id'] = $bundle_id;
934
935        return $this;
936    }
937
938    /**
939     * Gets package_name.
940     *
941     */
942    public function getPackageName(): ?string
943    {
944        return $this->container['package_name'];
945    }
946
947    /**
948     * Sets package_name.
949     *
950     * @param string $package_name Package name of the Android application integrated with the Fingerprint SDK for the event. For example: `com.foo.app`
951     *
952     */
953    public function setPackageName(string $package_name): self
954    {
955        $this->container['package_name'] = $package_name;
956
957        return $this;
958    }
959
960    /**
961     * Gets ip_address.
962     *
963     */
964    public function getIpAddress(): ?string
965    {
966        return $this->container['ip_address'];
967    }
968
969    /**
970     * Sets ip_address.
971     *
972     * @param string $ip_address IP address of the requesting browser or bot
973     *
974     */
975    public function setIpAddress(string $ip_address): self
976    {
977        $this->container['ip_address'] = $ip_address;
978
979        return $this;
980    }
981
982    /**
983     * Gets user_agent.
984     *
985     */
986    public function getUserAgent(): ?string
987    {
988        return $this->container['user_agent'];
989    }
990
991    /**
992     * Sets user_agent.
993     *
994     * @param string $user_agent User Agent of the client, for example: `Mozilla/5.0 (Windows NT 6.1; Win64; x64) ....`
995     *
996     */
997    public function setUserAgent(string $user_agent): self
998    {
999        $this->container['user_agent'] = $user_agent;
1000
1001        return $this;
1002    }
1003
1004    /**
1005     * Gets client_referrer.
1006     *
1007     */
1008    public function getClientReferrer(): ?string
1009    {
1010        return $this->container['client_referrer'];
1011    }
1012
1013    /**
1014     * Sets client_referrer.
1015     *
1016     * @param string $client_referrer Client Referrer field corresponds to the `document.referrer` field gathered during an identification request. The value is an empty string if the user navigated to the page directly (not through a link, but, for example, by using a bookmark) For example: `https://example.com/blog/my-article`
1017     *
1018     */
1019    public function setClientReferrer(string $client_referrer): self
1020    {
1021        $this->container['client_referrer'] = $client_referrer;
1022
1023        return $this;
1024    }
1025
1026    /**
1027     * Gets browser_details.
1028     *
1029     */
1030    public function getBrowserDetails(): ?BrowserDetails
1031    {
1032        return $this->container['browser_details'];
1033    }
1034
1035    /**
1036     * Sets browser_details.
1037     *
1038     * @param BrowserDetails $browser_details browser_details
1039     *
1040     */
1041    public function setBrowserDetails(BrowserDetails $browser_details): self
1042    {
1043        $this->container['browser_details'] = $browser_details;
1044
1045        return $this;
1046    }
1047
1048    /**
1049     * Gets proximity.
1050     *
1051     */
1052    public function getProximity(): ?Proximity
1053    {
1054        return $this->container['proximity'];
1055    }
1056
1057    /**
1058     * Sets proximity.
1059     *
1060     * @param Proximity $proximity proximity
1061     *
1062     */
1063    public function setProximity(Proximity $proximity): self
1064    {
1065        $this->container['proximity'] = $proximity;
1066
1067        return $this;
1068    }
1069
1070    /**
1071     * Gets bot.
1072     *
1073     */
1074    public function getBot(): ?BotResult
1075    {
1076        return $this->container['bot'];
1077    }
1078
1079    /**
1080     * Sets bot.
1081     *
1082     * @param BotResult $bot bot
1083     *
1084     */
1085    public function setBot(BotResult $bot): self
1086    {
1087        $this->container['bot'] = $bot;
1088
1089        return $this;
1090    }
1091
1092    /**
1093     * Gets bot_type.
1094     *
1095     */
1096    public function getBotType(): ?string
1097    {
1098        return $this->container['bot_type'];
1099    }
1100
1101    /**
1102     * Sets bot_type.
1103     *
1104     * @param string $bot_type additional classification of the bot type if detected
1105     *
1106     */
1107    public function setBotType(string $bot_type): self
1108    {
1109        $this->container['bot_type'] = $bot_type;
1110
1111        return $this;
1112    }
1113
1114    /**
1115     * Gets bot_info.
1116     *
1117     */
1118    public function getBotInfo(): ?BotInfo
1119    {
1120        return $this->container['bot_info'];
1121    }
1122
1123    /**
1124     * Sets bot_info.
1125     *
1126     * @param BotInfo $bot_info bot_info
1127     *
1128     */
1129    public function setBotInfo(BotInfo $bot_info): self
1130    {
1131        $this->container['bot_info'] = $bot_info;
1132
1133        return $this;
1134    }
1135
1136    /**
1137     * Gets cloned_app.
1138     *
1139     */
1140    public function getClonedApp(): ?bool
1141    {
1142        return $this->container['cloned_app'];
1143    }
1144
1145    /**
1146     * Sets cloned_app.
1147     *
1148     * @param bool $cloned_app 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.
1149     *
1150     */
1151    public function setClonedApp(bool $cloned_app): self
1152    {
1153        $this->container['cloned_app'] = $cloned_app;
1154
1155        return $this;
1156    }
1157
1158    /**
1159     * Gets developer_tools.
1160     *
1161     */
1162    public function getDeveloperTools(): ?bool
1163    {
1164        return $this->container['developer_tools'];
1165    }
1166
1167    /**
1168     * Sets developer_tools.
1169     *
1170     * @param bool $developer_tools `true` if the browser is Chrome with DevTools open or Firefox with Developer Tools open, `false` otherwise
1171     *
1172     */
1173    public function setDeveloperTools(bool $developer_tools): self
1174    {
1175        $this->container['developer_tools'] = $developer_tools;
1176
1177        return $this;
1178    }
1179
1180    /**
1181     * Gets emulator.
1182     *
1183     */
1184    public function getEmulator(): ?bool
1185    {
1186        return $this->container['emulator'];
1187    }
1188
1189    /**
1190     * Sets emulator.
1191     *
1192     * @param bool $emulator 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.
1193     *
1194     */
1195    public function setEmulator(bool $emulator): self
1196    {
1197        $this->container['emulator'] = $emulator;
1198
1199        return $this;
1200    }
1201
1202    /**
1203     * Gets factory_reset_timestamp.
1204     *
1205     */
1206    public function getFactoryResetTimestamp(): ?int
1207    {
1208        return $this->container['factory_reset_timestamp'];
1209    }
1210
1211    /**
1212     * Sets factory_reset_timestamp.
1213     *
1214     * @param int $factory_reset_timestamp The time of the most recent factory reset that happened on the **mobile device** is expressed as Unix epoch time. When a factory reset cannot be detected on the mobile device or when the request is initiated from a browser,  this field will correspond to the *epoch* time (i.e 1 Jan 1970 UTC) as a value of 0. See [Factory Reset Detection](https://docs.fingerprint.com/docs/smart-signals-reference#factory-reset-detection) to learn more about this Smart Signal.
1215     *
1216     */
1217    public function setFactoryResetTimestamp(int $factory_reset_timestamp): self
1218    {
1219        $this->container['factory_reset_timestamp'] = $factory_reset_timestamp;
1220
1221        return $this;
1222    }
1223
1224    /**
1225     * Gets frida.
1226     *
1227     */
1228    public function getFrida(): ?bool
1229    {
1230        return $this->container['frida'];
1231    }
1232
1233    /**
1234     * Sets frida.
1235     *
1236     * @param bool $frida [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.
1237     *
1238     */
1239    public function setFrida(bool $frida): self
1240    {
1241        $this->container['frida'] = $frida;
1242
1243        return $this;
1244    }
1245
1246    /**
1247     * Gets ip_blocklist.
1248     *
1249     */
1250    public function getIpBlocklist(): ?IPBlockList
1251    {
1252        return $this->container['ip_blocklist'];
1253    }
1254
1255    /**
1256     * Sets ip_blocklist.
1257     *
1258     * @param IPBlockList $ip_blocklist ip_blocklist
1259     *
1260     */
1261    public function setIpBlocklist(IPBlockList $ip_blocklist): self
1262    {
1263        $this->container['ip_blocklist'] = $ip_blocklist;
1264
1265        return $this;
1266    }
1267
1268    /**
1269     * Gets ip_info.
1270     *
1271     */
1272    public function getIpInfo(): ?IPInfo
1273    {
1274        return $this->container['ip_info'];
1275    }
1276
1277    /**
1278     * Sets ip_info.
1279     *
1280     * @param IPInfo $ip_info ip_info
1281     *
1282     */
1283    public function setIpInfo(IPInfo $ip_info): self
1284    {
1285        $this->container['ip_info'] = $ip_info;
1286
1287        return $this;
1288    }
1289
1290    /**
1291     * Gets proxy.
1292     *
1293     */
1294    public function getProxy(): ?bool
1295    {
1296        return $this->container['proxy'];
1297    }
1298
1299    /**
1300     * Sets proxy.
1301     *
1302     * @param bool $proxy IP address was used by a public proxy provider or belonged to a known recent residential proxy
1303     *
1304     */
1305    public function setProxy(bool $proxy): self
1306    {
1307        $this->container['proxy'] = $proxy;
1308
1309        return $this;
1310    }
1311
1312    /**
1313     * Gets proxy_confidence.
1314     *
1315     */
1316    public function getProxyConfidence(): ?ProxyConfidence
1317    {
1318        return $this->container['proxy_confidence'];
1319    }
1320
1321    /**
1322     * Sets proxy_confidence.
1323     *
1324     * @param ProxyConfidence $proxy_confidence proxy_confidence
1325     *
1326     */
1327    public function setProxyConfidence(ProxyConfidence $proxy_confidence): self
1328    {
1329        $this->container['proxy_confidence'] = $proxy_confidence;
1330
1331        return $this;
1332    }
1333
1334    /**
1335     * Gets proxy_details.
1336     *
1337     */
1338    public function getProxyDetails(): ?ProxyDetails
1339    {
1340        return $this->container['proxy_details'];
1341    }
1342
1343    /**
1344     * Sets proxy_details.
1345     *
1346     * @param ProxyDetails $proxy_details proxy_details
1347     *
1348     */
1349    public function setProxyDetails(ProxyDetails $proxy_details): self
1350    {
1351        $this->container['proxy_details'] = $proxy_details;
1352
1353        return $this;
1354    }
1355
1356    /**
1357     * Gets incognito.
1358     *
1359     */
1360    public function getIncognito(): ?bool
1361    {
1362        return $this->container['incognito'];
1363    }
1364
1365    /**
1366     * Sets incognito.
1367     *
1368     * @param bool $incognito `true` if we detected incognito mode used in the browser, `false` otherwise
1369     *
1370     */
1371    public function setIncognito(bool $incognito): self
1372    {
1373        $this->container['incognito'] = $incognito;
1374
1375        return $this;
1376    }
1377
1378    /**
1379     * Gets jailbroken.
1380     *
1381     */
1382    public function getJailbroken(): ?bool
1383    {
1384        return $this->container['jailbroken'];
1385    }
1386
1387    /**
1388     * Sets jailbroken.
1389     *
1390     * @param bool $jailbroken iOS specific jailbreak detection. There are 2 values:  * `true` - Jailbreak detected. * `false` - No signs of jailbreak or the client is not iOS.
1391     *
1392     */
1393    public function setJailbroken(bool $jailbroken): self
1394    {
1395        $this->container['jailbroken'] = $jailbroken;
1396
1397        return $this;
1398    }
1399
1400    /**
1401     * Gets location_spoofing.
1402     *
1403     */
1404    public function getLocationSpoofing(): ?bool
1405    {
1406        return $this->container['location_spoofing'];
1407    }
1408
1409    /**
1410     * Sets location_spoofing.
1411     *
1412     * @param bool $location_spoofing flag indicating whether the request came from a mobile device with location spoofing enabled
1413     *
1414     */
1415    public function setLocationSpoofing(bool $location_spoofing): self
1416    {
1417        $this->container['location_spoofing'] = $location_spoofing;
1418
1419        return $this;
1420    }
1421
1422    /**
1423     * Gets mitm_attack.
1424     *
1425     */
1426    public function getMitmAttack(): ?bool
1427    {
1428        return $this->container['mitm_attack'];
1429    }
1430
1431    /**
1432     * Sets mitm_attack.
1433     *
1434     * @param bool $mitm_attack * `true` - When requests made from your users' mobile devices to Fingerprint servers have been intercepted and potentially modified.  * `false` - Otherwise or when the request originated from a browser. See [MitM Attack Detection](https://docs.fingerprint.com/docs/smart-signals-reference#mitm-attack-detection) to learn more about this Smart Signal.
1435     *
1436     */
1437    public function setMitmAttack(bool $mitm_attack): self
1438    {
1439        $this->container['mitm_attack'] = $mitm_attack;
1440
1441        return $this;
1442    }
1443
1444    /**
1445     * Gets privacy_settings.
1446     *
1447     */
1448    public function getPrivacySettings(): ?bool
1449    {
1450        return $this->container['privacy_settings'];
1451    }
1452
1453    /**
1454     * Sets privacy_settings.
1455     *
1456     * @param bool $privacy_settings `true` if the request is from a privacy aware browser (e.g. Tor) or from a browser in which fingerprinting is blocked. Otherwise `false`.
1457     *
1458     */
1459    public function setPrivacySettings(bool $privacy_settings): self
1460    {
1461        $this->container['privacy_settings'] = $privacy_settings;
1462
1463        return $this;
1464    }
1465
1466    /**
1467     * Gets root_apps.
1468     *
1469     */
1470    public function getRootApps(): ?bool
1471    {
1472        return $this->container['root_apps'];
1473    }
1474
1475    /**
1476     * Sets root_apps.
1477     *
1478     * @param bool $root_apps 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.
1479     *
1480     */
1481    public function setRootApps(bool $root_apps): self
1482    {
1483        $this->container['root_apps'] = $root_apps;
1484
1485        return $this;
1486    }
1487
1488    /**
1489     * Gets rule_action.
1490     *
1491     */
1492    public function getRuleAction(): ?EventRuleAction
1493    {
1494        return $this->container['rule_action'];
1495    }
1496
1497    /**
1498     * Sets rule_action.
1499     *
1500     * @param EventRuleAction $rule_action rule_action
1501     *
1502     */
1503    public function setRuleAction(EventRuleAction $rule_action): self
1504    {
1505        $this->container['rule_action'] = $rule_action;
1506
1507        return $this;
1508    }
1509
1510    /**
1511     * Gets simulator.
1512     *
1513     */
1514    public function getSimulator(): ?bool
1515    {
1516        return $this->container['simulator'];
1517    }
1518
1519    /**
1520     * Sets simulator.
1521     *
1522     * @param bool $simulator iOS specific simulator detection. There are 2 values: * `true` - Simulator environment detected. * `false` - No signs of simulator or the client is not iOS.
1523     *
1524     */
1525    public function setSimulator(bool $simulator): self
1526    {
1527        $this->container['simulator'] = $simulator;
1528
1529        return $this;
1530    }
1531
1532    /**
1533     * Gets suspect_score.
1534     *
1535     */
1536    public function getSuspectScore(): ?int
1537    {
1538        return $this->container['suspect_score'];
1539    }
1540
1541    /**
1542     * Sets suspect_score.
1543     *
1544     * @param int $suspect_score Suspect Score is an easy way to integrate Smart Signals into your fraud protection work flow.  It is a weighted representation of all Smart Signals present in the payload that helps identify suspicious activity. The value range is [0; S] where S is sum of all Smart Signals weights.  See more details here: https://docs.fingerprint.com/docs/suspect-score
1545     *
1546     */
1547    public function setSuspectScore(int $suspect_score): self
1548    {
1549        $this->container['suspect_score'] = $suspect_score;
1550
1551        return $this;
1552    }
1553
1554    /**
1555     * Gets tampering.
1556     *
1557     */
1558    public function getTampering(): ?bool
1559    {
1560        return $this->container['tampering'];
1561    }
1562
1563    /**
1564     * Sets tampering.
1565     *
1566     * @param bool $tampering Flag indicating browser tampering was detected. This happens when either:   * There are inconsistencies in the browser configuration that cross internal tampering thresholds (see `tampering_details.anomaly_score`).   * The browser signature resembles an \"anti-detect\" browser specifically designed to evade fingerprinting (see `tampering_details.anti_detect_browser`).
1567     *
1568     */
1569    public function setTampering(bool $tampering): self
1570    {
1571        $this->container['tampering'] = $tampering;
1572
1573        return $this;
1574    }
1575
1576    /**
1577     * Gets tampering_confidence.
1578     *
1579     */
1580    public function getTamperingConfidence(): ?TamperingConfidence
1581    {
1582        return $this->container['tampering_confidence'];
1583    }
1584
1585    /**
1586     * Sets tampering_confidence.
1587     *
1588     * @param TamperingConfidence $tampering_confidence tampering_confidence
1589     *
1590     */
1591    public function setTamperingConfidence(TamperingConfidence $tampering_confidence): self
1592    {
1593        $this->container['tampering_confidence'] = $tampering_confidence;
1594
1595        return $this;
1596    }
1597
1598    /**
1599     * Gets tampering_ml_score.
1600     *
1601     */
1602    public function getTamperingMlScore(): ?float
1603    {
1604        return $this->container['tampering_ml_score'];
1605    }
1606
1607    /**
1608     * Sets tampering_ml_score.
1609     *
1610     * @param float $tampering_ml_score A score that indicates the models calculated probability that an event is coming from an anti detect browser.   * Values above `0.8` indicate that the request is an anti detect browser based on the ml model   * Values below `0.8` indicate that the request is not an anti detect browser based on the ml model
1611     *
1612     */
1613    public function setTamperingMlScore(float $tampering_ml_score): self
1614    {
1615        if ($tampering_ml_score > 1) {
1616            throw new \InvalidArgumentException('invalid value for $tampering_ml_score when calling Event., must be smaller than or equal to 1.');
1617        }
1618        if ($tampering_ml_score < 0) {
1619            throw new \InvalidArgumentException('invalid value for $tampering_ml_score when calling Event., must be bigger than or equal to 0.');
1620        }
1621
1622        $this->container['tampering_ml_score'] = $tampering_ml_score;
1623
1624        return $this;
1625    }
1626
1627    /**
1628     * Gets tampering_details.
1629     *
1630     */
1631    public function getTamperingDetails(): ?TamperingDetails
1632    {
1633        return $this->container['tampering_details'];
1634    }
1635
1636    /**
1637     * Sets tampering_details.
1638     *
1639     * @param TamperingDetails $tampering_details tampering_details
1640     *
1641     */
1642    public function setTamperingDetails(TamperingDetails $tampering_details): self
1643    {
1644        $this->container['tampering_details'] = $tampering_details;
1645
1646        return $this;
1647    }
1648
1649    /**
1650     * Gets velocity.
1651     *
1652     */
1653    public function getVelocity(): ?Velocity
1654    {
1655        return $this->container['velocity'];
1656    }
1657
1658    /**
1659     * Sets velocity.
1660     *
1661     * @param Velocity $velocity velocity
1662     *
1663     */
1664    public function setVelocity(Velocity $velocity): self
1665    {
1666        $this->container['velocity'] = $velocity;
1667
1668        return $this;
1669    }
1670
1671    /**
1672     * Gets virtual_machine.
1673     *
1674     */
1675    public function getVirtualMachine(): ?bool
1676    {
1677        return $this->container['virtual_machine'];
1678    }
1679
1680    /**
1681     * Sets virtual_machine.
1682     *
1683     * @param bool $virtual_machine `true` if the request came from a browser running inside a virtual machine (e.g. VMWare), `false` otherwise.
1684     *
1685     */
1686    public function setVirtualMachine(bool $virtual_machine): self
1687    {
1688        $this->container['virtual_machine'] = $virtual_machine;
1689
1690        return $this;
1691    }
1692
1693    /**
1694     * Gets virtual_machine_ml_score.
1695     *
1696     */
1697    public function getVirtualMachineMlScore(): ?float
1698    {
1699        return $this->container['virtual_machine_ml_score'];
1700    }
1701
1702    /**
1703     * Sets virtual_machine_ml_score.
1704     *
1705     * @param float $virtual_machine_ml_score Machine learning–based virtual machine score,  represented as a floating-point value between 0 and 1 (inclusive), with up to three decimal places of precision. A higher score means a higher confidence in the positive `virtual_machine` detection result
1706     *
1707     */
1708    public function setVirtualMachineMlScore(float $virtual_machine_ml_score): self
1709    {
1710        if ($virtual_machine_ml_score > 1) {
1711            throw new \InvalidArgumentException('invalid value for $virtual_machine_ml_score when calling Event., must be smaller than or equal to 1.');
1712        }
1713        if ($virtual_machine_ml_score < 0) {
1714            throw new \InvalidArgumentException('invalid value for $virtual_machine_ml_score when calling Event., must be bigger than or equal to 0.');
1715        }
1716
1717        $this->container['virtual_machine_ml_score'] = $virtual_machine_ml_score;
1718
1719        return $this;
1720    }
1721
1722    /**
1723     * Gets vpn.
1724     *
1725     */
1726    public function getVpn(): ?bool
1727    {
1728        return $this->container['vpn'];
1729    }
1730
1731    /**
1732     * Sets vpn.
1733     *
1734     * @param bool $vpn VPN or other anonymizing service has been used when sending the request
1735     *
1736     */
1737    public function setVpn(bool $vpn): self
1738    {
1739        $this->container['vpn'] = $vpn;
1740
1741        return $this;
1742    }
1743
1744    /**
1745     * Gets vpn_confidence.
1746     *
1747     */
1748    public function getVpnConfidence(): ?VpnConfidence
1749    {
1750        return $this->container['vpn_confidence'];
1751    }
1752
1753    /**
1754     * Sets vpn_confidence.
1755     *
1756     * @param VpnConfidence $vpn_confidence vpn_confidence
1757     *
1758     */
1759    public function setVpnConfidence(VpnConfidence $vpn_confidence): self
1760    {
1761        $this->container['vpn_confidence'] = $vpn_confidence;
1762
1763        return $this;
1764    }
1765
1766    /**
1767     * Gets vpn_origin_timezone.
1768     *
1769     */
1770    public function getVpnOriginTimezone(): ?string
1771    {
1772        return $this->container['vpn_origin_timezone'];
1773    }
1774
1775    /**
1776     * Sets vpn_origin_timezone.
1777     *
1778     * @param string $vpn_origin_timezone local timezone which is used in timezone_mismatch method
1779     *
1780     */
1781    public function setVpnOriginTimezone(string $vpn_origin_timezone): self
1782    {
1783        $this->container['vpn_origin_timezone'] = $vpn_origin_timezone;
1784
1785        return $this;
1786    }
1787
1788    /**
1789     * Gets vpn_origin_country.
1790     *
1791     */
1792    public function getVpnOriginCountry(): ?string
1793    {
1794        return $this->container['vpn_origin_country'];
1795    }
1796
1797    /**
1798     * Sets vpn_origin_country.
1799     *
1800     * @param string $vpn_origin_country Country of the request (only for Android SDK version >= 2.4.0, ISO 3166 format or unknown).
1801     *
1802     */
1803    public function setVpnOriginCountry(string $vpn_origin_country): self
1804    {
1805        $this->container['vpn_origin_country'] = $vpn_origin_country;
1806
1807        return $this;
1808    }
1809
1810    /**
1811     * Gets vpn_methods.
1812     *
1813     */
1814    public function getVpnMethods(): ?VpnMethods
1815    {
1816        return $this->container['vpn_methods'];
1817    }
1818
1819    /**
1820     * Sets vpn_methods.
1821     *
1822     * @param VpnMethods $vpn_methods vpn_methods
1823     *
1824     */
1825    public function setVpnMethods(VpnMethods $vpn_methods): self
1826    {
1827        $this->container['vpn_methods'] = $vpn_methods;
1828
1829        return $this;
1830    }
1831
1832    /**
1833     * Gets high_activity_device.
1834     *
1835     */
1836    public function getHighActivityDevice(): ?bool
1837    {
1838        return $this->container['high_activity_device'];
1839    }
1840
1841    /**
1842     * Sets high_activity_device.
1843     *
1844     * @param bool $high_activity_device flag indicating if the request came from a high-activity visitor
1845     *
1846     */
1847    public function setHighActivityDevice(bool $high_activity_device): self
1848    {
1849        $this->container['high_activity_device'] = $high_activity_device;
1850
1851        return $this;
1852    }
1853
1854    /**
1855     * Gets raw_device_attributes.
1856     *
1857     */
1858    public function getRawDeviceAttributes(): ?RawDeviceAttributes
1859    {
1860        return $this->container['raw_device_attributes'];
1861    }
1862
1863    /**
1864     * Sets raw_device_attributes.
1865     *
1866     * @param RawDeviceAttributes $raw_device_attributes raw_device_attributes
1867     *
1868     */
1869    public function setRawDeviceAttributes(RawDeviceAttributes $raw_device_attributes): self
1870    {
1871        $this->container['raw_device_attributes'] = $raw_device_attributes;
1872
1873        return $this;
1874    }
1875
1876    /**
1877     * Returns true if offset exists. False otherwise.
1878     *
1879     * @param int|string $offset Offset
1880     *
1881     */
1882    public function offsetExists(mixed $offset): bool
1883    {
1884        return isset($this->container[$offset]);
1885    }
1886
1887    /**
1888     * Gets offset.
1889     *
1890     * @param int|string $offset Offset
1891     *
1892     * @return mixed|null
1893     */
1894    #[\ReturnTypeWillChange]
1895    public function offsetGet(mixed $offset): mixed
1896    {
1897        return $this->container[$offset] ?? null;
1898    }
1899
1900    /**
1901     * Sets value based on offset.
1902     *
1903     * @param int|null $offset Offset
1904     * @param mixed    $value  Value to be set
1905     *
1906     */
1907    public function offsetSet(mixed $offset, mixed $value): void
1908    {
1909        if (is_null($offset)) {
1910            $this->container[] = $value;
1911        } else {
1912            $this->container[$offset] = $value;
1913        }
1914    }
1915
1916    /**
1917     * Unsets offset.
1918     *
1919     * @param int|string $offset Offset
1920     *
1921     */
1922    public function offsetUnset(mixed $offset): void
1923    {
1924        unset($this->container[$offset]);
1925    }
1926
1927    /**
1928     * Serializes the object to a value that can be serialized natively by json_encode().
1929     *
1930     * @see https://www.php.net/manual/en/jsonserializable.jsonserialize.php
1931     *
1932     * @return mixed returns data which can be serialized by json_encode(), which is a value
1933     *               of any type other than a resource
1934     */
1935    #[\ReturnTypeWillChange]
1936    public function jsonSerialize(): mixed
1937    {
1938        return ObjectSerializer::sanitizeForSerialization($this);
1939    }
1940
1941    /**
1942     * Gets a header-safe presentation of the object.
1943     *
1944     */
1945    public function toHeaderValue(): string
1946    {
1947        return json_encode(ObjectSerializer::sanitizeForSerialization($this));
1948    }
1949
1950    /**
1951     * Array of nullable properties.
1952     */
1953    protected static function openAPINullables(): array
1954    {
1955        return self::$openAPINullables;
1956    }
1957
1958    /**
1959     * Array of nullable field names deliberately set to null.
1960     *
1961     * @return bool[]
1962     */
1963    private function getOpenAPINullablesSetToNull(): array
1964    {
1965        return $this->openAPINullablesSetToNull;
1966    }
1967
1968    /**
1969     * Setter - Array of nullable field names deliberately set to null.
1970     *
1971     * @param bool[] $openAPINullablesSetToNull
1972     *
1973     * @codeCoverageIgnore
1974     */
1975    private function setOpenAPINullablesSetToNull(array $openAPINullablesSetToNull): void
1976    {
1977        $this->openAPINullablesSetToNull = $openAPINullablesSetToNull;
1978    }
1979
1980    /**
1981     * Sets $this->container[$variableName] to the given data or to the given default Value; if $variableName
1982     * is nullable and its value is set to null in the $fields array, then mark it as "set to null" in the
1983     * $this->openAPINullablesSetToNull array.
1984     *
1985     * @noinspection PhpSameParameterValueInspection
1986     */
1987    private function setIfExists(string $variableName, array $fields, mixed $defaultValue): void
1988    {
1989        if (self::isNullable($variableName) && array_key_exists($variableName, $fields) && is_null($fields[$variableName])) {
1990            $this->openAPINullablesSetToNull[] = $variableName; // @codeCoverageIgnore
1991        }
1992
1993        $this->container[$variableName] = $fields[$variableName] ?? $defaultValue;
1994    }
1995}