vpndetection 5.6.4 → 5.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/vpndetection/api/account_wire_api.rb +1 -1
  4. data/lib/vpndetection/api/api_keys_wire_api.rb +1 -1
  5. data/lib/vpndetection/api/authorization_wire_api.rb +71 -3
  6. data/lib/vpndetection/api/database_wire_api.rb +1 -1
  7. data/lib/vpndetection/api/entitlement_wire_api.rb +1 -1
  8. data/lib/vpndetection/api/lookup_wire_api.rb +1 -1
  9. data/lib/vpndetection/api/organization_wire_api.rb +1 -1
  10. data/lib/vpndetection/api_client.rb +1 -1
  11. data/lib/vpndetection/api_error.rb +1 -1
  12. data/lib/vpndetection/api_model_base.rb +1 -1
  13. data/lib/vpndetection/configuration.rb +1 -1
  14. data/lib/vpndetection/models/account_create_apikey_request.rb +1 -1
  15. data/lib/vpndetection/models/account_created_apikey.rb +1 -1
  16. data/lib/vpndetection/models/account_org.rb +1 -1
  17. data/lib/vpndetection/models/account_org_ref.rb +1 -1
  18. data/lib/vpndetection/models/account_org_wrap.rb +1 -1
  19. data/lib/vpndetection/models/account_rc.rb +1 -1
  20. data/lib/vpndetection/models/account_revealed_apikey.rb +1 -1
  21. data/lib/vpndetection/models/account_user.rb +1 -1
  22. data/lib/vpndetection/models/apikey_detail.rb +1 -1
  23. data/lib/vpndetection/models/apikey_list.rb +1 -1
  24. data/lib/vpndetection/models/batch_lookup_error.rb +1 -1
  25. data/lib/vpndetection/models/batch_lookup_request.rb +1 -1
  26. data/lib/vpndetection/models/batch_lookup_response.rb +1 -1
  27. data/lib/vpndetection/models/class_detail.rb +1 -1
  28. data/lib/vpndetection/models/client_registration.rb +306 -0
  29. data/lib/vpndetection/models/client_registration_request.rb +211 -0
  30. data/lib/vpndetection/models/database.rb +1 -1
  31. data/lib/vpndetection/models/database_checksums_response.rb +1 -1
  32. data/lib/vpndetection/models/database_format.rb +1 -1
  33. data/lib/vpndetection/models/database_format_size.rb +1 -1
  34. data/lib/vpndetection/models/database_list.rb +1 -1
  35. data/lib/vpndetection/models/database_metadata.rb +1 -1
  36. data/lib/vpndetection/models/database_metadata_column.rb +1 -1
  37. data/lib/vpndetection/models/database_version.rb +1 -1
  38. data/lib/vpndetection/models/db_checksums.rb +1 -1
  39. data/lib/vpndetection/models/device_authorization.rb +1 -1
  40. data/lib/vpndetection/models/download.rb +1 -1
  41. data/lib/vpndetection/models/download_list.rb +1 -1
  42. data/lib/vpndetection/models/entitlement.rb +1 -1
  43. data/lib/vpndetection/models/entitlement_apikey.rb +1 -1
  44. data/lib/vpndetection/models/entitlement_error.rb +1 -1
  45. data/lib/vpndetection/models/entitlement_plan.rb +1 -1
  46. data/lib/vpndetection/models/entitlement_usage.rb +1 -1
  47. data/lib/vpndetection/models/error_envelope.rb +1 -1
  48. data/lib/vpndetection/models/identity.rb +1 -1
  49. data/lib/vpndetection/models/lookup_error.rb +1 -1
  50. data/lib/vpndetection/models/lookup_response.rb +26 -6
  51. data/lib/vpndetection/models/oauth_error.rb +1 -1
  52. data/lib/vpndetection/models/oauth_metadata.rb +12 -2
  53. data/lib/vpndetection/models/proxy_detail.rb +1 -1
  54. data/lib/vpndetection/models/pubproxy_detail.rb +191 -0
  55. data/lib/vpndetection/models/standing.rb +1 -1
  56. data/lib/vpndetection/models/token_response.rb +2 -2
  57. data/lib/vpndetection/models/vpn_detail.rb +1 -1
  58. data/lib/vpndetection/result.rb +24 -4
  59. data/lib/vpndetection/version.rb +1 -1
  60. metadata +4 -1
@@ -3,7 +3,7 @@
3
3
 
4
4
  #The VPNDetection API: classify any IP address, and download the databases behind the answers. See https://docs.vpndetection.io for guides and https://github.com/vpndetection-io for the official client libraries.
5
5
 
6
- The version of the OpenAPI document: 2026.10.15
6
+ The version of the OpenAPI document: 2026.10.18
7
7
  Contact: support@vpndetection.io
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.25.0
@@ -3,7 +3,7 @@
3
3
 
4
4
  #The VPNDetection API: classify any IP address, and download the databases behind the answers. See https://docs.vpndetection.io for guides and https://github.com/vpndetection-io for the official client libraries.
5
5
 
6
- The version of the OpenAPI document: 2026.10.15
6
+ The version of the OpenAPI document: 2026.10.18
7
7
  Contact: support@vpndetection.io
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.25.0
@@ -3,7 +3,7 @@
3
3
 
4
4
  #The VPNDetection API: classify any IP address, and download the databases behind the answers. See https://docs.vpndetection.io for guides and https://github.com/vpndetection-io for the official client libraries.
5
5
 
6
- The version of the OpenAPI document: 2026.10.15
6
+ The version of the OpenAPI document: 2026.10.18
7
7
  Contact: support@vpndetection.io
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.25.0
@@ -3,7 +3,7 @@
3
3
 
4
4
  #The VPNDetection API: classify any IP address, and download the databases behind the answers. See https://docs.vpndetection.io for guides and https://github.com/vpndetection-io for the official client libraries.
5
5
 
6
- The version of the OpenAPI document: 2026.10.15
6
+ The version of the OpenAPI document: 2026.10.18
7
7
  Contact: support@vpndetection.io
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.25.0
@@ -3,7 +3,7 @@
3
3
 
4
4
  #The VPNDetection API: classify any IP address, and download the databases behind the answers. See https://docs.vpndetection.io for guides and https://github.com/vpndetection-io for the official client libraries.
5
5
 
6
- The version of the OpenAPI document: 2026.10.15
6
+ The version of the OpenAPI document: 2026.10.18
7
7
  Contact: support@vpndetection.io
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.25.0
@@ -25,7 +25,7 @@ module VPNDetection
25
25
  # Whether the address belongs to a hosting or cloud provider. Starter and above.
26
26
  attr_accessor :is_hosting
27
27
 
28
- # Whether the address is a privacy relay egress. Starter and above.
28
+ # Whether the address is privacy relay or enterprise web gateway egress, such as iCloud Private Relay or Zscaler. Starter and above.
29
29
  attr_accessor :is_relay
30
30
 
31
31
  # Whether the address is a Tor node. Starter and above.
@@ -43,6 +43,9 @@ module VPNDetection
43
43
  # Whether the address was seen in a mobile proxy pool. Scale and above.
44
44
  attr_accessor :is_mobproxy
45
45
 
46
+ # Whether a public proxy, one anyone can connect through, listens on the address or sends its traffic out from it. Scale and above.
47
+ attr_accessor :is_pubproxy
48
+
46
49
  # Detail for `is_vpn`. Empty when `is_vpn` is false. Starter and above.
47
50
  attr_accessor :vpn
48
51
 
@@ -67,6 +70,9 @@ module VPNDetection
67
70
  # Detail for `is_mobproxy`. Empty when false. Max only.
68
71
  attr_accessor :mobproxy
69
72
 
73
+ # Detail for `is_pubproxy`. Empty when false. Max only.
74
+ attr_accessor :pubproxy
75
+
70
76
  # Attribute mapping from ruby-style variable name to JSON key.
71
77
  def self.attribute_map
72
78
  {
@@ -79,6 +85,7 @@ module VPNDetection
79
85
  :'is_resproxy' => :'is_resproxy',
80
86
  :'is_dcproxy' => :'is_dcproxy',
81
87
  :'is_mobproxy' => :'is_mobproxy',
88
+ :'is_pubproxy' => :'is_pubproxy',
82
89
  :'vpn' => :'vpn',
83
90
  :'hosting' => :'hosting',
84
91
  :'relay' => :'relay',
@@ -86,7 +93,8 @@ module VPNDetection
86
93
  :'cdn' => :'cdn',
87
94
  :'resproxy' => :'resproxy',
88
95
  :'dcproxy' => :'dcproxy',
89
- :'mobproxy' => :'mobproxy'
96
+ :'mobproxy' => :'mobproxy',
97
+ :'pubproxy' => :'pubproxy'
90
98
  }
91
99
  end
92
100
 
@@ -112,6 +120,7 @@ module VPNDetection
112
120
  :'is_resproxy' => :'Boolean',
113
121
  :'is_dcproxy' => :'Boolean',
114
122
  :'is_mobproxy' => :'Boolean',
123
+ :'is_pubproxy' => :'Boolean',
115
124
  :'vpn' => :'VpnDetail',
116
125
  :'hosting' => :'ClassDetail',
117
126
  :'relay' => :'ClassDetail',
@@ -119,7 +128,8 @@ module VPNDetection
119
128
  :'cdn' => :'ClassDetail',
120
129
  :'resproxy' => :'ProxyDetail',
121
130
  :'dcproxy' => :'ProxyDetail',
122
- :'mobproxy' => :'ProxyDetail'
131
+ :'mobproxy' => :'ProxyDetail',
132
+ :'pubproxy' => :'PubproxyDetail'
123
133
  }
124
134
  end
125
135
 
@@ -185,6 +195,10 @@ module VPNDetection
185
195
  self.is_mobproxy = attributes[:'is_mobproxy']
186
196
  end
187
197
 
198
+ if attributes.key?(:'is_pubproxy')
199
+ self.is_pubproxy = attributes[:'is_pubproxy']
200
+ end
201
+
188
202
  if attributes.key?(:'vpn')
189
203
  self.vpn = attributes[:'vpn']
190
204
  end
@@ -216,6 +230,10 @@ module VPNDetection
216
230
  if attributes.key?(:'mobproxy')
217
231
  self.mobproxy = attributes[:'mobproxy']
218
232
  end
233
+
234
+ if attributes.key?(:'pubproxy')
235
+ self.pubproxy = attributes[:'pubproxy']
236
+ end
219
237
  end
220
238
 
221
239
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -277,6 +295,7 @@ module VPNDetection
277
295
  is_resproxy == o.is_resproxy &&
278
296
  is_dcproxy == o.is_dcproxy &&
279
297
  is_mobproxy == o.is_mobproxy &&
298
+ is_pubproxy == o.is_pubproxy &&
280
299
  vpn == o.vpn &&
281
300
  hosting == o.hosting &&
282
301
  relay == o.relay &&
@@ -284,7 +303,8 @@ module VPNDetection
284
303
  cdn == o.cdn &&
285
304
  resproxy == o.resproxy &&
286
305
  dcproxy == o.dcproxy &&
287
- mobproxy == o.mobproxy
306
+ mobproxy == o.mobproxy &&
307
+ pubproxy == o.pubproxy
288
308
  end
289
309
 
290
310
  # @see the `==` method
@@ -296,7 +316,7 @@ module VPNDetection
296
316
  # Calculates hash code according to all attributes.
297
317
  # @return [Integer] Hash code
298
318
  def hash
299
- [ip, is_vpn, is_hosting, is_relay, is_tor, is_cdn, is_resproxy, is_dcproxy, is_mobproxy, vpn, hosting, relay, tor, cdn, resproxy, dcproxy, mobproxy].hash
319
+ [ip, is_vpn, is_hosting, is_relay, is_tor, is_cdn, is_resproxy, is_dcproxy, is_mobproxy, is_pubproxy, vpn, hosting, relay, tor, cdn, resproxy, dcproxy, mobproxy, pubproxy].hash
300
320
  end
301
321
 
302
322
  # Builds the object from hash
@@ -3,7 +3,7 @@
3
3
 
4
4
  #The VPNDetection API: classify any IP address, and download the databases behind the answers. See https://docs.vpndetection.io for guides and https://github.com/vpndetection-io for the official client libraries.
5
5
 
6
- The version of the OpenAPI document: 2026.10.15
6
+ The version of the OpenAPI document: 2026.10.18
7
7
  Contact: support@vpndetection.io
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.25.0
@@ -3,7 +3,7 @@
3
3
 
4
4
  #The VPNDetection API: classify any IP address, and download the databases behind the answers. See https://docs.vpndetection.io for guides and https://github.com/vpndetection-io for the official client libraries.
5
5
 
6
- The version of the OpenAPI document: 2026.10.15
6
+ The version of the OpenAPI document: 2026.10.18
7
7
  Contact: support@vpndetection.io
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.25.0
@@ -36,6 +36,9 @@ module VPNDetection
36
36
  # Any client may sign in with an https `client_id` serving its own metadata.
37
37
  attr_accessor :client_id_metadata_document_supported
38
38
 
39
+ # RFC 7591 dynamic client registration, for a client that cannot serve its own metadata.
40
+ attr_accessor :registration_endpoint
41
+
39
42
  # Always `none`. Every client is public and has no secret.
40
43
  attr_accessor :token_endpoint_auth_methods_supported
41
44
 
@@ -57,6 +60,7 @@ module VPNDetection
57
60
  :'grant_types_supported' => :'grant_types_supported',
58
61
  :'code_challenge_methods_supported' => :'code_challenge_methods_supported',
59
62
  :'client_id_metadata_document_supported' => :'client_id_metadata_document_supported',
63
+ :'registration_endpoint' => :'registration_endpoint',
60
64
  :'token_endpoint_auth_methods_supported' => :'token_endpoint_auth_methods_supported',
61
65
  :'authorization_response_iss_parameter_supported' => :'authorization_response_iss_parameter_supported',
62
66
  :'service_documentation' => :'service_documentation'
@@ -86,6 +90,7 @@ module VPNDetection
86
90
  :'grant_types_supported' => :'Array<String>',
87
91
  :'code_challenge_methods_supported' => :'Array<String>',
88
92
  :'client_id_metadata_document_supported' => :'Boolean',
93
+ :'registration_endpoint' => :'String',
89
94
  :'token_endpoint_auth_methods_supported' => :'Array<String>',
90
95
  :'authorization_response_iss_parameter_supported' => :'Boolean',
91
96
  :'service_documentation' => :'String'
@@ -168,6 +173,10 @@ module VPNDetection
168
173
  self.client_id_metadata_document_supported = attributes[:'client_id_metadata_document_supported']
169
174
  end
170
175
 
176
+ if attributes.key?(:'registration_endpoint')
177
+ self.registration_endpoint = attributes[:'registration_endpoint']
178
+ end
179
+
171
180
  if attributes.key?(:'token_endpoint_auth_methods_supported')
172
181
  if (value = attributes[:'token_endpoint_auth_methods_supported']).is_a?(Array)
173
182
  self.token_endpoint_auth_methods_supported = value
@@ -258,6 +267,7 @@ module VPNDetection
258
267
  grant_types_supported == o.grant_types_supported &&
259
268
  code_challenge_methods_supported == o.code_challenge_methods_supported &&
260
269
  client_id_metadata_document_supported == o.client_id_metadata_document_supported &&
270
+ registration_endpoint == o.registration_endpoint &&
261
271
  token_endpoint_auth_methods_supported == o.token_endpoint_auth_methods_supported &&
262
272
  authorization_response_iss_parameter_supported == o.authorization_response_iss_parameter_supported &&
263
273
  service_documentation == o.service_documentation
@@ -272,7 +282,7 @@ module VPNDetection
272
282
  # Calculates hash code according to all attributes.
273
283
  # @return [Integer] Hash code
274
284
  def hash
275
- [issuer, authorization_endpoint, token_endpoint, device_authorization_endpoint, revocation_endpoint, scopes_supported, response_types_supported, grant_types_supported, code_challenge_methods_supported, client_id_metadata_document_supported, token_endpoint_auth_methods_supported, authorization_response_iss_parameter_supported, service_documentation].hash
285
+ [issuer, authorization_endpoint, token_endpoint, device_authorization_endpoint, revocation_endpoint, scopes_supported, response_types_supported, grant_types_supported, code_challenge_methods_supported, client_id_metadata_document_supported, registration_endpoint, token_endpoint_auth_methods_supported, authorization_response_iss_parameter_supported, service_documentation].hash
276
286
  end
277
287
 
278
288
  # Builds the object from hash
@@ -3,7 +3,7 @@
3
3
 
4
4
  #The VPNDetection API: classify any IP address, and download the databases behind the answers. See https://docs.vpndetection.io for guides and https://github.com/vpndetection-io for the official client libraries.
5
5
 
6
- The version of the OpenAPI document: 2026.10.15
6
+ The version of the OpenAPI document: 2026.10.18
7
7
  Contact: support@vpndetection.io
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.25.0
@@ -0,0 +1,191 @@
1
+ =begin
2
+ #VPNDetection API
3
+
4
+ #The VPNDetection API: classify any IP address, and download the databases behind the answers. See https://docs.vpndetection.io for guides and https://github.com/vpndetection-io for the official client libraries.
5
+
6
+ The version of the OpenAPI document: 2026.10.18
7
+ Contact: support@vpndetection.io
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.25.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module VPNDetection
17
+ # The address in Public Proxy IP, open proxies anyone can connect through, over a rolling 90 day window. It covers both ends of a proxy: the address it listens on and the address its traffic leaves from. Every key is present when the object is populated; the object is `{}` when `is_pubproxy` is false.
18
+ class PubproxyDetail < ApiModelBase
19
+ # Whether a public proxy listens on this address.
20
+ attr_accessor :entry
21
+
22
+ # Whether a public proxy's traffic leaves from this address.
23
+ attr_accessor :exit
24
+
25
+ # The protocols of the proxies listening on or leaving from this address: `http`, `https` (an HTTP proxy that also tunnels HTTPS), `socks4` or `socks5`. Empty where only the address is known.
26
+ attr_accessor :protocols
27
+
28
+ # The most recent date within the window a proxy on this address was seen.
29
+ attr_accessor :last_seen
30
+
31
+ # The most recent date within the window a request through a proxy on this address was answered, as YYYY-MM-DD, or an empty string when none was.
32
+ attr_accessor :last_usable
33
+
34
+ # Attribute mapping from ruby-style variable name to JSON key.
35
+ def self.attribute_map
36
+ {
37
+ :'entry' => :'entry',
38
+ :'exit' => :'exit',
39
+ :'protocols' => :'protocols',
40
+ :'last_seen' => :'last_seen',
41
+ :'last_usable' => :'last_usable'
42
+ }
43
+ end
44
+
45
+ # Returns attribute mapping this model knows about
46
+ def self.acceptable_attribute_map
47
+ attribute_map
48
+ end
49
+
50
+ # Returns all the JSON keys this model knows about
51
+ def self.acceptable_attributes
52
+ acceptable_attribute_map.values
53
+ end
54
+
55
+ # Attribute type mapping.
56
+ def self.openapi_types
57
+ {
58
+ :'entry' => :'Boolean',
59
+ :'exit' => :'Boolean',
60
+ :'protocols' => :'Array<String>',
61
+ :'last_seen' => :'Date',
62
+ :'last_usable' => :'String'
63
+ }
64
+ end
65
+
66
+ # List of attributes with nullable: true
67
+ def self.openapi_nullable
68
+ Set.new([
69
+ ])
70
+ end
71
+
72
+ # Initializes the object
73
+ # @param [Hash] attributes Model attributes in the form of hash
74
+ def initialize(attributes = {})
75
+ if (!attributes.is_a?(Hash))
76
+ fail ArgumentError, "The input argument (attributes) must be a hash in `VPNDetection::PubproxyDetail` initialize method"
77
+ end
78
+
79
+ # check to see if the attribute exists and convert string to symbol for hash key
80
+ acceptable_attribute_map = self.class.acceptable_attribute_map
81
+ attributes = attributes.each_with_object({}) { |(k, v), h|
82
+ if (!acceptable_attribute_map.key?(k.to_sym))
83
+ fail ArgumentError, "`#{k}` is not a valid attribute in `VPNDetection::PubproxyDetail`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
84
+ end
85
+ h[k.to_sym] = v
86
+ }
87
+
88
+ if attributes.key?(:'entry')
89
+ self.entry = attributes[:'entry']
90
+ end
91
+
92
+ if attributes.key?(:'exit')
93
+ self.exit = attributes[:'exit']
94
+ end
95
+
96
+ if attributes.key?(:'protocols')
97
+ if (value = attributes[:'protocols']).is_a?(Array)
98
+ self.protocols = value
99
+ end
100
+ end
101
+
102
+ if attributes.key?(:'last_seen')
103
+ self.last_seen = attributes[:'last_seen']
104
+ end
105
+
106
+ if attributes.key?(:'last_usable')
107
+ self.last_usable = attributes[:'last_usable']
108
+ end
109
+ end
110
+
111
+ # Show invalid properties with the reasons. Usually used together with valid?
112
+ # @return Array for valid properties with the reasons
113
+ def list_invalid_properties
114
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
115
+ invalid_properties = Array.new
116
+ invalid_properties
117
+ end
118
+
119
+ # Check to see if the all the properties in the model are valid
120
+ # @return true if the model is valid
121
+ def valid?
122
+ warn '[DEPRECATED] the `valid?` method is obsolete'
123
+ true
124
+ end
125
+
126
+ # Checks equality by comparing each attribute.
127
+ # @param [Object] Object to be compared
128
+ def ==(o)
129
+ return true if self.equal?(o)
130
+ self.class == o.class &&
131
+ entry == o.entry &&
132
+ exit == o.exit &&
133
+ protocols == o.protocols &&
134
+ last_seen == o.last_seen &&
135
+ last_usable == o.last_usable
136
+ end
137
+
138
+ # @see the `==` method
139
+ # @param [Object] Object to be compared
140
+ def eql?(o)
141
+ self == o
142
+ end
143
+
144
+ # Calculates hash code according to all attributes.
145
+ # @return [Integer] Hash code
146
+ def hash
147
+ [entry, exit, protocols, last_seen, last_usable].hash
148
+ end
149
+
150
+ # Builds the object from hash
151
+ # @param [Hash] attributes Model attributes in the form of hash
152
+ # @return [Object] Returns the model itself
153
+ def self.build_from_hash(attributes)
154
+ return nil unless attributes.is_a?(Hash)
155
+ attributes = attributes.transform_keys(&:to_sym)
156
+ transformed_hash = {}
157
+ openapi_types.each_pair do |key, type|
158
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
159
+ transformed_hash["#{key}"] = nil
160
+ elsif type =~ /\AArray<(.*)>/i
161
+ # check to ensure the input is an array given that the attribute
162
+ # is documented as an array but the input is not
163
+ if attributes[attribute_map[key]].is_a?(Array)
164
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
165
+ end
166
+ elsif !attributes[attribute_map[key]].nil?
167
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
168
+ end
169
+ end
170
+ new(transformed_hash)
171
+ end
172
+
173
+ # Returns the object in the form of hash
174
+ # @return [Hash] Returns the object in the form of hash
175
+ def to_hash
176
+ hash = {}
177
+ self.class.attribute_map.each_pair do |attr, param|
178
+ value = self.send(attr)
179
+ if value.nil?
180
+ is_nullable = self.class.openapi_nullable.include?(attr)
181
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
182
+ end
183
+
184
+ hash[param] = _to_hash(value)
185
+ end
186
+ hash
187
+ end
188
+
189
+ end
190
+
191
+ end
@@ -3,7 +3,7 @@
3
3
 
4
4
  #The VPNDetection API: classify any IP address, and download the databases behind the answers. See https://docs.vpndetection.io for guides and https://github.com/vpndetection-io for the official client libraries.
5
5
 
6
- The version of the OpenAPI document: 2026.10.15
6
+ The version of the OpenAPI document: 2026.10.18
7
7
  Contact: support@vpndetection.io
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.25.0
@@ -3,7 +3,7 @@
3
3
 
4
4
  #The VPNDetection API: classify any IP address, and download the databases behind the answers. See https://docs.vpndetection.io for guides and https://github.com/vpndetection-io for the official client libraries.
5
5
 
6
- The version of the OpenAPI document: 2026.10.15
6
+ The version of the OpenAPI document: 2026.10.18
7
7
  Contact: support@vpndetection.io
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.25.0
@@ -32,7 +32,7 @@ module VPNDetection
32
32
  # Not part of OAuth, and only for our own clients. The ID of the API key the person picked when they approved, returned by every grant while this authorization may still read that key back. Absent when no key was picked, or when the person's role no longer allows reading keys back.
33
33
  attr_accessor :apikey_id
34
34
 
35
- # Not part of OAuth, and only for our own clients: a client that signed in with a Client ID Metadata Document never receives a key. The API key itself, so a device ends up holding an ordinary key. Returned by the device code and authorization code grants only, never by a refresh, and only alongside `mslm:apikey_id`. Absent when that key's secret cannot be read back, which is the case for a key created before keys could be shown again in the console; a rotated key can be.
35
+ # Not part of OAuth, and only for our own clients: a client that signed in with a Client ID Metadata Document or registered itself never receives a key. The API key itself, so a device ends up holding an ordinary key. Returned by the device code and authorization code grants only, never by a refresh, and only alongside `mslm:apikey_id`. Absent when that key's secret cannot be read back, which is the case for a key created before keys could be shown again in the console; a rotated key can be.
36
36
  attr_accessor :apikey
37
37
 
38
38
  # Attribute mapping from ruby-style variable name to JSON key.
@@ -3,7 +3,7 @@
3
3
 
4
4
  #The VPNDetection API: classify any IP address, and download the databases behind the answers. See https://docs.vpndetection.io for guides and https://github.com/vpndetection-io for the official client libraries.
5
5
 
6
- The version of the OpenAPI document: 2026.10.15
6
+ The version of the OpenAPI document: 2026.10.18
7
7
  Contact: support@vpndetection.io
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.25.0
@@ -19,9 +19,10 @@ module VPNDetection
19
19
  class Result
20
20
  FLAGS = %w[
21
21
  is_vpn is_hosting is_relay is_tor is_cdn is_resproxy is_dcproxy is_mobproxy
22
+ is_pubproxy
22
23
  ].freeze
23
24
 
24
- DETAILS = %w[vpn hosting relay tor cdn resproxy dcproxy mobproxy].freeze
25
+ DETAILS = %w[vpn hosting relay tor cdn resproxy dcproxy mobproxy pubproxy].freeze
25
26
 
26
27
  # The response exactly as it came off the wire, with its original names.
27
28
  # Frozen, because the cache hands this same object to every later caller of
@@ -109,7 +110,7 @@ module VPNDetection
109
110
  end
110
111
 
111
112
  # Whether the address was seen in a residential proxy pool, or nil when your
112
- # plan does not include it. Max only.
113
+ # plan does not include it. Scale and above.
113
114
  def is_resproxy
114
115
  @raw['is_resproxy']
115
116
  end
@@ -120,7 +121,7 @@ module VPNDetection
120
121
  end
121
122
 
122
123
  # Whether the address was seen in a datacenter proxy pool, or nil when your
123
- # plan does not include it. Max only.
124
+ # plan does not include it. Scale and above.
124
125
  def is_dcproxy
125
126
  @raw['is_dcproxy']
126
127
  end
@@ -131,7 +132,7 @@ module VPNDetection
131
132
  end
132
133
 
133
134
  # Whether the address was seen in a mobile proxy pool, or nil when your plan
134
- # does not include it. Max only.
135
+ # does not include it. Scale and above.
135
136
  def is_mobproxy
136
137
  @raw['is_mobproxy']
137
138
  end
@@ -141,6 +142,18 @@ module VPNDetection
141
142
  @raw['is_mobproxy'] == true
142
143
  end
143
144
 
145
+ # Whether a public proxy, one anyone can connect through, listens on the
146
+ # address or sends its traffic out from it, or nil when your plan does not
147
+ # include it. Scale and above.
148
+ def is_pubproxy
149
+ @raw['is_pubproxy']
150
+ end
151
+
152
+ # `is_pubproxy` with an absent member read as false.
153
+ def pubproxy?
154
+ @raw['is_pubproxy'] == true
155
+ end
156
+
144
157
  # Detail for `is_vpn`: provider, last_seen, and on max confidence and method.
145
158
  def vpn
146
159
  @raw['vpn']
@@ -181,6 +194,13 @@ module VPNDetection
181
194
  @raw['mobproxy']
182
195
  end
183
196
 
197
+ # Detail for `is_pubproxy`: entry, exit, protocols, last_seen and
198
+ # last_usable, the last an empty string when no request through a proxy on
199
+ # the address was answered. Max only.
200
+ def pubproxy
201
+ @raw['pubproxy']
202
+ end
203
+
184
204
  def to_h
185
205
  @raw
186
206
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module VPNDetection
4
- VERSION = '5.6.4'
4
+ VERSION = '5.8.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vpndetection
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.6.4
4
+ version: 5.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mslm Dev
@@ -82,6 +82,8 @@ files:
82
82
  - lib/vpndetection/models/batch_lookup_request.rb
83
83
  - lib/vpndetection/models/batch_lookup_response.rb
84
84
  - lib/vpndetection/models/class_detail.rb
85
+ - lib/vpndetection/models/client_registration.rb
86
+ - lib/vpndetection/models/client_registration_request.rb
85
87
  - lib/vpndetection/models/database.rb
86
88
  - lib/vpndetection/models/database_checksums_response.rb
87
89
  - lib/vpndetection/models/database_format.rb
@@ -106,6 +108,7 @@ files:
106
108
  - lib/vpndetection/models/oauth_error.rb
107
109
  - lib/vpndetection/models/oauth_metadata.rb
108
110
  - lib/vpndetection/models/proxy_detail.rb
111
+ - lib/vpndetection/models/pubproxy_detail.rb
109
112
  - lib/vpndetection/models/standing.rb
110
113
  - lib/vpndetection/models/token_response.rb
111
114
  - lib/vpndetection/models/vpn_detail.rb