vpndetection 5.4.3 → 5.5.1

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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  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 +24 -16
  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/bogon.rb +12 -3
  14. data/lib/vpndetection/bogons.rb +32 -6
  15. data/lib/vpndetection/client.rb +9 -4
  16. data/lib/vpndetection/configuration.rb +1 -1
  17. data/lib/vpndetection/models/account_create_apikey_request.rb +1 -1
  18. data/lib/vpndetection/models/account_created_apikey.rb +1 -1
  19. data/lib/vpndetection/models/account_org.rb +1 -1
  20. data/lib/vpndetection/models/account_org_ref.rb +1 -1
  21. data/lib/vpndetection/models/account_org_wrap.rb +1 -1
  22. data/lib/vpndetection/models/account_rc.rb +1 -1
  23. data/lib/vpndetection/models/account_revealed_apikey.rb +1 -1
  24. data/lib/vpndetection/models/account_user.rb +1 -1
  25. data/lib/vpndetection/models/apikey_detail.rb +1 -1
  26. data/lib/vpndetection/models/apikey_list.rb +1 -1
  27. data/lib/vpndetection/models/batch_lookup_error.rb +1 -1
  28. data/lib/vpndetection/models/batch_lookup_request.rb +1 -1
  29. data/lib/vpndetection/models/batch_lookup_response.rb +1 -1
  30. data/lib/vpndetection/models/class_detail.rb +1 -1
  31. data/lib/vpndetection/models/database.rb +1 -1
  32. data/lib/vpndetection/models/database_checksums_response.rb +1 -1
  33. data/lib/vpndetection/models/database_format.rb +1 -1
  34. data/lib/vpndetection/models/database_format_size.rb +1 -1
  35. data/lib/vpndetection/models/database_list.rb +1 -1
  36. data/lib/vpndetection/models/database_metadata.rb +1 -1
  37. data/lib/vpndetection/models/database_metadata_column.rb +1 -1
  38. data/lib/vpndetection/models/database_version.rb +1 -1
  39. data/lib/vpndetection/models/db_checksums.rb +1 -1
  40. data/lib/vpndetection/models/device_authorization.rb +1 -1
  41. data/lib/vpndetection/models/download.rb +1 -1
  42. data/lib/vpndetection/models/download_list.rb +1 -1
  43. data/lib/vpndetection/models/entitlement.rb +1 -1
  44. data/lib/vpndetection/models/entitlement_apikey.rb +1 -1
  45. data/lib/vpndetection/models/entitlement_error.rb +1 -1
  46. data/lib/vpndetection/models/entitlement_plan.rb +1 -1
  47. data/lib/vpndetection/models/entitlement_usage.rb +1 -1
  48. data/lib/vpndetection/models/error_envelope.rb +1 -1
  49. data/lib/vpndetection/models/identity.rb +1 -1
  50. data/lib/vpndetection/models/lookup_error.rb +1 -1
  51. data/lib/vpndetection/models/lookup_response.rb +1 -1
  52. data/lib/vpndetection/models/oauth_error.rb +1 -1
  53. data/lib/vpndetection/models/oauth_metadata.rb +12 -2
  54. data/lib/vpndetection/models/proxy_detail.rb +1 -1
  55. data/lib/vpndetection/models/standing.rb +1 -1
  56. data/lib/vpndetection/models/token_response.rb +3 -3
  57. data/lib/vpndetection/models/vpn_detail.rb +1 -1
  58. data/lib/vpndetection/version.rb +1 -1
  59. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ba80a879812af8dc9d6cdefdb305d97fe38281550cad1b2c9bd76ab31b416bf2
4
- data.tar.gz: 602fb1b3b602fa0ec12ca8d465dcda92e22d87610714ca31ec735033a83b61f6
3
+ metadata.gz: 0f1b1aeb8a3c63721e409832879f7e12383b9ab81b50448dd1ae961efc2e68c5
4
+ data.tar.gz: a2478e011ccc7b22d7ae8a267dc3561a4bad18bc8f768dccb3aa8d2e8d24988a
5
5
  SHA512:
6
- metadata.gz: 340fbe8a1a6265f5dec5d5e93fecd2c63c171af83699fdc073ac98410d83e2ec4924c2b358c4a30785f3aeebb8b606cbefa0eeba0c54f402fda60a03dda1f843
7
- data.tar.gz: eae9ca20b51fbb6d12060add25b281625c5096e9b54fd7ef1b596a8c54c476589fc09662c117c4eeb879556482fe7caa9056c0b81581af98d739079df544d557
6
+ metadata.gz: 0153bf1aabac68578a6951e9f00568ac8059d3030ac8427b1745c23ae474d90188360a87139cfaee3d9acbfb6dbaff4d233844c7cd8e4ccd2894a77d0b068832
7
+ data.tar.gz: aa3f85f7db3f517447a65b5d20f7e1134c030a7e1ea6b330021290e51502fd31b4a38b4cfb477eaeef63636e16ea74afd79ca5526a03d33a3e46b4870b0b37d7
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # [<img src="https://s3.vpndetection.io/vpndetection-public/brand/mark.svg" alt="VPNDetection" width="24"/>](https://vpndetection.io/) VPNDetection Ruby Client Library
1
+ # [<img src="https://s3.vpndetection.io/vpndetection-public/brand/mark.svg" alt="VPNDetection" height="28"/>](https://vpndetection.io/) VPNDetection Ruby Client Library
2
2
 
3
3
  [![gem](https://img.shields.io/gem/v/vpndetection.svg)](https://rubygems.org/gems/vpndetection)
4
4
  [![license](https://img.shields.io/github/license/vpndetection-io/sdk-ruby.svg)](LICENSE)
@@ -220,7 +220,7 @@ There are official VPNDetection client libraries available for many languages in
220
220
 
221
221
  VPN Detection API: Accurate anonymity detection identifying VPNs, residential proxies, hosting servers, Tor nodes, CDNs, relays and more.
222
222
 
223
- [<img src="https://s3.vpndetection.io/vpndetection-public/brand/mark.svg" alt="VPNDetection" width="96"/>](https://vpndetection.io/)
223
+ [<img src="https://s3.vpndetection.io/vpndetection-public/brand/mark.svg" alt="VPNDetection" height="64"/>](https://vpndetection.io/)
224
224
 
225
225
  ## License
226
226
 
@@ -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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
7
7
  Contact: support@vpndetection.io
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.25.0
@@ -22,35 +22,35 @@ module VPNDetection
22
22
  @api_client = api_client
23
23
  end
24
24
  # Authorize
25
- # The browser entry point for the authorization-code flow. This is a redirect target, not something to call from code. An unknown `client_id` or an unregistered `redirect_uri` is shown to the USER and never redirected, because sending an error to an address we have not verified belongs to you is how an open redirector works. Everything else comes back to your `redirect_uri` with `error`, your `state`, and `iss`.
25
+ # The browser entry point for the authorization-code flow. This is a redirect target, not something to call from code. Any client may sign in without registering first by using a Client ID Metadata Document: make `client_id` an https URL that serves your client's metadata as JSON, naming that same URL as its `client_id`, with `token_endpoint_auth_method` `none` and your `redirect_uris`. An https redirect URI must be on the same origin as the `client_id`; a loopback one (`http://127.0.0.1`, `http://[::1]`, `http://localhost`) matches on any port. Such a client is granted `apikeys.use` at most. An unknown `client_id` or an unregistered `redirect_uri` is shown to the USER and never redirected, because sending an error to an address we have not verified belongs to you is how an open redirector works. Everything else comes back to your `redirect_uri` with `error`, your `state`, and `iss`.
26
26
  # @param client_id [String]
27
27
  # @param redirect_uri [String]
28
28
  # @param response_type [String]
29
29
  # @param code_challenge [String]
30
+ # @param code_challenge_method [String] S256, named explicitly. &#x60;plain&#x60;, or no method at all, is refused rather than downgraded.
30
31
  # @param [Hash] opts the optional parameters
31
- # @option opts [String] :code_challenge_method S256 only. &#x60;plain&#x60; is refused rather than downgraded.
32
32
  # @option opts [String] :scope
33
33
  # @option opts [String] :state Returned unchanged. Use it to bind the response to your request.
34
- # @option opts [String] :resource RFC 8707. What the token is FOR, so it cannot be replayed elsewhere.
34
+ # @option opts [String] :resource RFC 8707. What the token is FOR, so it cannot be replayed elsewhere: this brand&#39;s MCP server, the only resource it issues tokens for. Anything else answers &#x60;invalid_target&#x60;. A client that names none is given that server.
35
35
  # @return [nil]
36
- def oauth_authorize(client_id, redirect_uri, response_type, code_challenge, opts = {})
37
- oauth_authorize_with_http_info(client_id, redirect_uri, response_type, code_challenge, opts)
36
+ def oauth_authorize(client_id, redirect_uri, response_type, code_challenge, code_challenge_method, opts = {})
37
+ oauth_authorize_with_http_info(client_id, redirect_uri, response_type, code_challenge, code_challenge_method, opts)
38
38
  nil
39
39
  end
40
40
 
41
41
  # Authorize
42
- # The browser entry point for the authorization-code flow. This is a redirect target, not something to call from code. An unknown &#x60;client_id&#x60; or an unregistered &#x60;redirect_uri&#x60; is shown to the USER and never redirected, because sending an error to an address we have not verified belongs to you is how an open redirector works. Everything else comes back to your &#x60;redirect_uri&#x60; with &#x60;error&#x60;, your &#x60;state&#x60;, and &#x60;iss&#x60;.
42
+ # The browser entry point for the authorization-code flow. This is a redirect target, not something to call from code. Any client may sign in without registering first by using a Client ID Metadata Document: make &#x60;client_id&#x60; an https URL that serves your client&#39;s metadata as JSON, naming that same URL as its &#x60;client_id&#x60;, with &#x60;token_endpoint_auth_method&#x60; &#x60;none&#x60; and your &#x60;redirect_uris&#x60;. An https redirect URI must be on the same origin as the &#x60;client_id&#x60;; a loopback one (&#x60;http://127.0.0.1&#x60;, &#x60;http://[::1]&#x60;, &#x60;http://localhost&#x60;) matches on any port. Such a client is granted &#x60;apikeys.use&#x60; at most. An unknown &#x60;client_id&#x60; or an unregistered &#x60;redirect_uri&#x60; is shown to the USER and never redirected, because sending an error to an address we have not verified belongs to you is how an open redirector works. Everything else comes back to your &#x60;redirect_uri&#x60; with &#x60;error&#x60;, your &#x60;state&#x60;, and &#x60;iss&#x60;.
43
43
  # @param client_id [String]
44
44
  # @param redirect_uri [String]
45
45
  # @param response_type [String]
46
46
  # @param code_challenge [String]
47
+ # @param code_challenge_method [String] S256, named explicitly. &#x60;plain&#x60;, or no method at all, is refused rather than downgraded.
47
48
  # @param [Hash] opts the optional parameters
48
- # @option opts [String] :code_challenge_method S256 only. &#x60;plain&#x60; is refused rather than downgraded.
49
49
  # @option opts [String] :scope
50
50
  # @option opts [String] :state Returned unchanged. Use it to bind the response to your request.
51
- # @option opts [String] :resource RFC 8707. What the token is FOR, so it cannot be replayed elsewhere.
51
+ # @option opts [String] :resource RFC 8707. What the token is FOR, so it cannot be replayed elsewhere: this brand&#39;s MCP server, the only resource it issues tokens for. Anything else answers &#x60;invalid_target&#x60;. A client that names none is given that server.
52
52
  # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
53
- def oauth_authorize_with_http_info(client_id, redirect_uri, response_type, code_challenge, opts = {})
53
+ def oauth_authorize_with_http_info(client_id, redirect_uri, response_type, code_challenge, code_challenge_method, opts = {})
54
54
  if @api_client.config.debugging
55
55
  @api_client.config.logger.debug 'Calling API: AuthorizationWireApi.oauth_authorize ...'
56
56
  end
@@ -75,8 +75,13 @@ module VPNDetection
75
75
  if @api_client.config.client_side_validation && code_challenge.nil?
76
76
  fail ArgumentError, "Missing the required parameter 'code_challenge' when calling AuthorizationWireApi.oauth_authorize"
77
77
  end
78
+ # verify the required parameter 'code_challenge_method' is set
79
+ if @api_client.config.client_side_validation && code_challenge_method.nil?
80
+ fail ArgumentError, "Missing the required parameter 'code_challenge_method' when calling AuthorizationWireApi.oauth_authorize"
81
+ end
82
+ # verify enum value
78
83
  allowable_values = ["S256"]
79
- if @api_client.config.client_side_validation && opts[:'code_challenge_method'] && !allowable_values.include?(opts[:'code_challenge_method'])
84
+ if @api_client.config.client_side_validation && !allowable_values.include?(code_challenge_method)
80
85
  fail ArgumentError, "invalid value for \"code_challenge_method\", must be one of #{allowable_values}"
81
86
  end
82
87
  # resource path
@@ -88,7 +93,7 @@ module VPNDetection
88
93
  query_params[:'redirect_uri'] = redirect_uri
89
94
  query_params[:'response_type'] = response_type
90
95
  query_params[:'code_challenge'] = code_challenge
91
- query_params[:'code_challenge_method'] = opts[:'code_challenge_method'] if !opts[:'code_challenge_method'].nil?
96
+ query_params[:'code_challenge_method'] = code_challenge_method
92
97
  query_params[:'scope'] = opts[:'scope'] if !opts[:'scope'].nil?
93
98
  query_params[:'state'] = opts[:'state'] if !opts[:'state'].nil?
94
99
  query_params[:'resource'] = opts[:'resource'] if !opts[:'resource'].nil?
@@ -330,14 +335,15 @@ module VPNDetection
330
335
  end
331
336
 
332
337
  # Token
333
- # Three grant types. `urn:ietf:params:oauth:grant-type:device_code` polls a device authorization. Until the person approves it answers `authorization_pending`; poll faster than `interval` and it answers `slow_down`, which means widen your interval and keep it widened. `authorization_code` exchanges a code from `/oauth/authorize`, with the `code_verifier` matching the challenge you sent. `refresh_token` exchanges a refresh token. The presented token is consumed whatever happens next, so store the new one before using it.
338
+ # Three grant types. `urn:ietf:params:oauth:grant-type:device_code` polls a device authorization. Until the person approves it answers `authorization_pending`; poll faster than `interval` and it answers `slow_down`, which means widen your interval and keep it widened. `authorization_code` exchanges a code from `/oauth/authorize`, with the `code_verifier` matching the challenge you sent and the same `redirect_uri`. A code works once: presenting it again also revokes what the first exchange issued. `refresh_token` exchanges a refresh token. The presented token is consumed whatever happens next, so store the new one before using it. Presenting a consumed refresh token again ends the whole authorization, since it means the token was copied.
334
339
  # @param grant_type [String] &#x60;urn:ietf:params:oauth:grant-type:device_code&#x60;, &#x60;authorization_code&#x60; or &#x60;refresh_token&#x60;.
335
340
  # @param client_id [String]
336
341
  # @param [Hash] opts the optional parameters
337
342
  # @option opts [String] :device_code Required by the device code grant.
338
343
  # @option opts [String] :code Required by the authorization code grant.
339
344
  # @option opts [String] :code_verifier Required by the authorization code grant.
340
- # @option opts [String] :redirect_uri Authorization code grant: the &#x60;redirect_uri&#x60; the code was issued against, exactly.
345
+ # @option opts [String] :redirect_uri Required by the authorization code grant: the &#x60;redirect_uri&#x60; the code was issued against, exactly.
346
+ # @option opts [String] :resource Authorization code grant, optional: RFC 8707, and it must name what was authorized.
341
347
  # @option opts [String] :refresh_token Required by the refresh token grant.
342
348
  # @return [TokenResponse]
343
349
  def oauth_token(grant_type, client_id, opts = {})
@@ -346,14 +352,15 @@ module VPNDetection
346
352
  end
347
353
 
348
354
  # Token
349
- # Three grant types. &#x60;urn:ietf:params:oauth:grant-type:device_code&#x60; polls a device authorization. Until the person approves it answers &#x60;authorization_pending&#x60;; poll faster than &#x60;interval&#x60; and it answers &#x60;slow_down&#x60;, which means widen your interval and keep it widened. &#x60;authorization_code&#x60; exchanges a code from &#x60;/oauth/authorize&#x60;, with the &#x60;code_verifier&#x60; matching the challenge you sent. &#x60;refresh_token&#x60; exchanges a refresh token. The presented token is consumed whatever happens next, so store the new one before using it.
355
+ # Three grant types. &#x60;urn:ietf:params:oauth:grant-type:device_code&#x60; polls a device authorization. Until the person approves it answers &#x60;authorization_pending&#x60;; poll faster than &#x60;interval&#x60; and it answers &#x60;slow_down&#x60;, which means widen your interval and keep it widened. &#x60;authorization_code&#x60; exchanges a code from &#x60;/oauth/authorize&#x60;, with the &#x60;code_verifier&#x60; matching the challenge you sent and the same &#x60;redirect_uri&#x60;. A code works once: presenting it again also revokes what the first exchange issued. &#x60;refresh_token&#x60; exchanges a refresh token. The presented token is consumed whatever happens next, so store the new one before using it. Presenting a consumed refresh token again ends the whole authorization, since it means the token was copied.
350
356
  # @param grant_type [String] &#x60;urn:ietf:params:oauth:grant-type:device_code&#x60;, &#x60;authorization_code&#x60; or &#x60;refresh_token&#x60;.
351
357
  # @param client_id [String]
352
358
  # @param [Hash] opts the optional parameters
353
359
  # @option opts [String] :device_code Required by the device code grant.
354
360
  # @option opts [String] :code Required by the authorization code grant.
355
361
  # @option opts [String] :code_verifier Required by the authorization code grant.
356
- # @option opts [String] :redirect_uri Authorization code grant: the &#x60;redirect_uri&#x60; the code was issued against, exactly.
362
+ # @option opts [String] :redirect_uri Required by the authorization code grant: the &#x60;redirect_uri&#x60; the code was issued against, exactly.
363
+ # @option opts [String] :resource Authorization code grant, optional: RFC 8707, and it must name what was authorized.
357
364
  # @option opts [String] :refresh_token Required by the refresh token grant.
358
365
  # @return [Array<(TokenResponse, Integer, Hash)>] TokenResponse data, response status code and response headers
359
366
  def oauth_token_with_http_info(grant_type, client_id, opts = {})
@@ -392,6 +399,7 @@ module VPNDetection
392
399
  form_params['code'] = opts[:'code'] if !opts[:'code'].nil?
393
400
  form_params['code_verifier'] = opts[:'code_verifier'] if !opts[:'code_verifier'].nil?
394
401
  form_params['redirect_uri'] = opts[:'redirect_uri'] if !opts[:'redirect_uri'].nil?
402
+ form_params['resource'] = opts[:'resource'] if !opts[:'resource'].nil?
395
403
  form_params['refresh_token'] = opts[:'refresh_token'] if !opts[:'refresh_token'].nil?
396
404
 
397
405
  # http body (model)
@@ -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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
7
7
  Contact: support@vpndetection.io
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.25.0
@@ -16,12 +16,21 @@ module VPNDetection
16
16
  addr = parse(ip)
17
17
  return false if addr.nil?
18
18
 
19
- # An IPv4-mapped address stays in the v6 table, which is where the
20
- # canonical ranges put ::ffff:0:0/96. Unmapping it first would match it
21
- # against the v4 table and disagree with every other SDK.
19
+ addr = addr.native if addr.ipv4_mapped?
22
20
  (addr.ipv4? ? v4 : v6).any? { |range| range.include?(addr) }
23
21
  end
24
22
 
23
+ # The IPv4 address an IPv4-mapped IPv6 address (::ffff:a.b.c.d, in any
24
+ # spelling) carries, dotted, and any other address as given. A server
25
+ # listening on :: sees every IPv4 visitor in that form, which read whole is
26
+ # inside ::ffff:0:0/96, so judging it whole would answer every such visitor
27
+ # locally as a bogon. ::a.b.c.d is IPv4-compatible rather than mapped, and
28
+ # stays IPv6: IPAddr#native alone would unwrap that too.
29
+ def unmapped(ip)
30
+ addr = ip.to_s.include?(':') ? parse(ip) : nil
31
+ addr&.ipv4_mapped? ? addr.native.to_s : ip
32
+ end
33
+
25
34
  # The answer a bogon gets, in the full shape the API serves at its widest
26
35
  # plan: every flag present and false, every detail object present and empty.
27
36
  #
@@ -1,6 +1,6 @@
1
- # Generated by sdk/common. Do not edit.
2
- # The canonical list lives in the monorepo and is checked against both
3
- # upstream definitions on every regeneration.
1
+ # Generated. Do not edit: a regeneration overwrites it.
2
+ # The list is checked against both upstream definitions on every
3
+ # regeneration.
4
4
 
5
5
  module VPNDetection
6
6
  module Bogons
@@ -13,13 +13,14 @@ module VPNDetection
13
13
  '172.16.0.0/12',
14
14
  '192.0.0.0/24',
15
15
  '192.0.2.0/24',
16
+ '192.88.99.2/32',
16
17
  '192.168.0.0/16',
17
18
  '198.18.0.0/15',
18
19
  '198.51.100.0/24',
19
20
  '203.0.113.0/24',
20
21
  '224.0.0.0/4',
21
- '240.0.0.0/4',
22
22
  '255.255.255.255/32',
23
+ '240.0.0.0/4',
23
24
  ].freeze
24
25
 
25
26
  V6 = [
@@ -27,41 +28,66 @@ module VPNDetection
27
28
  '::1/128',
28
29
  '::ffff:0:0/96',
29
30
  '::/96',
31
+ '64:ff9b::/96',
32
+ '64:ff9b:1::/48',
30
33
  '100::/64',
34
+ '100:0:0:1::/64',
35
+ '2001:2::/48',
31
36
  '2001:10::/28',
32
37
  '2001:db8::/32',
38
+ '3fff::/20',
39
+ '5f00::/16',
33
40
  'fc00::/7',
34
41
  'fe80::/10',
35
42
  'fec0::/10',
36
43
  'ff00::/8',
37
44
  '2002::/24',
38
45
  '2002:a00::/24',
46
+ '2002:6440::/26',
39
47
  '2002:7f00::/24',
40
48
  '2002:a9fe::/32',
41
49
  '2002:ac10::/28',
42
50
  '2002:c000::/40',
43
51
  '2002:c000:200::/40',
52
+ '2002:c058:6302::/48',
44
53
  '2002:c0a8::/32',
45
54
  '2002:c612::/31',
46
55
  '2002:c633:6400::/40',
47
56
  '2002:cb00:7100::/40',
48
57
  '2002:e000::/20',
49
- '2002:f000::/20',
50
58
  '2002:ffff:ffff::/48',
59
+ '2002:f000::/20',
51
60
  '2001::/40',
52
61
  '2001:0:a00::/40',
62
+ '2001:0:6440::/42',
53
63
  '2001:0:7f00::/40',
54
64
  '2001:0:a9fe::/48',
55
65
  '2001:0:ac10::/44',
56
66
  '2001:0:c000::/56',
57
67
  '2001:0:c000:200::/56',
68
+ '2001:0:c058:6302::/64',
58
69
  '2001:0:c0a8::/48',
59
70
  '2001:0:c612::/47',
60
71
  '2001:0:c633:6400::/56',
61
72
  '2001:0:cb00:7100::/56',
62
73
  '2001:0:e000::/36',
63
- '2001:0:f000::/36',
64
74
  '2001:0:ffff:ffff::/64',
75
+ '2001:0:f000::/36',
76
+ '2001:1::/32',
77
+ '2001:2::/31',
78
+ '2001:4::/30',
79
+ '2001:8::/29',
80
+ '2001:20::/27',
81
+ '2001:40::/26',
82
+ '2001:80::/25',
83
+ '2001:100::/24',
84
+ '::/3',
85
+ '4000::/3',
86
+ '6000::/3',
87
+ '8000::/3',
88
+ 'a000::/3',
89
+ 'c000::/3',
90
+ 'e000::/3',
65
91
  ].freeze
66
92
  end
67
93
  end
@@ -79,6 +79,8 @@ module VPNDetection
79
79
  def lookup(ip, retries: nil, timeout: nil)
80
80
  # Here as well as in the transport: a bogon or a cached answer returns before any request.
81
81
  Transport.checked_timeout(timeout) unless timeout.nil?
82
+ # Judged, cached and sent as the IPv4 address it carries, if it is mapped.
83
+ ip = Bogon.unmapped(ip)
82
84
  return Bogon.result(ip) if Bogon.bogon?(ip)
83
85
 
84
86
  loop do
@@ -167,7 +169,10 @@ module VPNDetection
167
169
  end
168
170
  Transport.checked_timeout(timeout) unless timeout.nil?
169
171
 
170
- addresses = ips.to_a.uniq
172
+ # An IPv4-mapped address is sent as the address it carries, once however
173
+ # many of its spellings were asked, and answered under each one asked.
174
+ asked = ips.to_a.uniq
175
+ addresses = asked.map { |ip| Bogon.unmapped(ip) }.uniq
171
176
  answers = {}
172
177
  pending = []
173
178
 
@@ -199,13 +204,13 @@ module VPNDetection
199
204
 
200
205
  # Reinstated in input order: a hydra settles in completion order, and a
201
206
  # caller iterating the hash should see what they passed in.
202
- addresses.to_h { |ip| [ip, answers[ip]] }
207
+ asked.to_h { |ip| [ip, answers[Bogon.unmapped(ip)]] }
203
208
  end
204
209
 
205
210
  private
206
211
 
207
- # Concurrent misses for one address share ONE request (docs/sdk/contract.md,
208
- # UMAN-4645): 5.4.2 sent one per calling thread. The first miss boards the
212
+ # Concurrent misses for one address share ONE request: 5.4.2 sent one per
213
+ # calling thread. The first miss boards the
209
214
  # address and every miss after it, a batch's included, waits on its Flight.
210
215
  class Flight
211
216
  def initialize
@@ -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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
7
7
  Contact: support@vpndetection.io
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.25.0
@@ -33,6 +33,9 @@ module VPNDetection
33
33
 
34
34
  attr_accessor :code_challenge_methods_supported
35
35
 
36
+ # Any client may sign in with an https `client_id` serving its own metadata.
37
+ attr_accessor :client_id_metadata_document_supported
38
+
36
39
  # Always `none`. Every client is public and has no secret.
37
40
  attr_accessor :token_endpoint_auth_methods_supported
38
41
 
@@ -53,6 +56,7 @@ module VPNDetection
53
56
  :'response_types_supported' => :'response_types_supported',
54
57
  :'grant_types_supported' => :'grant_types_supported',
55
58
  :'code_challenge_methods_supported' => :'code_challenge_methods_supported',
59
+ :'client_id_metadata_document_supported' => :'client_id_metadata_document_supported',
56
60
  :'token_endpoint_auth_methods_supported' => :'token_endpoint_auth_methods_supported',
57
61
  :'authorization_response_iss_parameter_supported' => :'authorization_response_iss_parameter_supported',
58
62
  :'service_documentation' => :'service_documentation'
@@ -81,6 +85,7 @@ module VPNDetection
81
85
  :'response_types_supported' => :'Array<String>',
82
86
  :'grant_types_supported' => :'Array<String>',
83
87
  :'code_challenge_methods_supported' => :'Array<String>',
88
+ :'client_id_metadata_document_supported' => :'Boolean',
84
89
  :'token_endpoint_auth_methods_supported' => :'Array<String>',
85
90
  :'authorization_response_iss_parameter_supported' => :'Boolean',
86
91
  :'service_documentation' => :'String'
@@ -159,6 +164,10 @@ module VPNDetection
159
164
  end
160
165
  end
161
166
 
167
+ if attributes.key?(:'client_id_metadata_document_supported')
168
+ self.client_id_metadata_document_supported = attributes[:'client_id_metadata_document_supported']
169
+ end
170
+
162
171
  if attributes.key?(:'token_endpoint_auth_methods_supported')
163
172
  if (value = attributes[:'token_endpoint_auth_methods_supported']).is_a?(Array)
164
173
  self.token_endpoint_auth_methods_supported = value
@@ -248,6 +257,7 @@ module VPNDetection
248
257
  response_types_supported == o.response_types_supported &&
249
258
  grant_types_supported == o.grant_types_supported &&
250
259
  code_challenge_methods_supported == o.code_challenge_methods_supported &&
260
+ client_id_metadata_document_supported == o.client_id_metadata_document_supported &&
251
261
  token_endpoint_auth_methods_supported == o.token_endpoint_auth_methods_supported &&
252
262
  authorization_response_iss_parameter_supported == o.authorization_response_iss_parameter_supported &&
253
263
  service_documentation == o.service_documentation
@@ -262,7 +272,7 @@ module VPNDetection
262
272
  # Calculates hash code according to all attributes.
263
273
  # @return [Integer] Hash code
264
274
  def hash
265
- [issuer, authorization_endpoint, token_endpoint, device_authorization_endpoint, revocation_endpoint, scopes_supported, response_types_supported, grant_types_supported, code_challenge_methods_supported, token_endpoint_auth_methods_supported, authorization_response_iss_parameter_supported, service_documentation].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
266
276
  end
267
277
 
268
278
  # 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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
7
7
  Contact: support@vpndetection.io
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.25.0
@@ -29,10 +29,10 @@ module VPNDetection
29
29
  # What was actually granted, which may be narrower than what was asked for.
30
30
  attr_accessor :scope
31
31
 
32
- # Not part of OAuth. 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.
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. 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 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.09.21
6
+ The version of the OpenAPI document: 2026.09.26
7
7
  Contact: support@vpndetection.io
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.25.0
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module VPNDetection
4
- VERSION = '5.4.3'
4
+ VERSION = '5.5.1'
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.4.3
4
+ version: 5.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mslm Dev