vpndetection-fastapi 2.1.5__tar.gz → 2.1.7__tar.gz

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.
@@ -2,6 +2,18 @@
2
2
 
3
3
  What each release changed for you, newest first. Each line is a commit's summary, linked to its full description and diff. Releases before 2.0.5 are described by their release commits.
4
4
 
5
+ ## 2.1.7 - 2026-10-18
6
+
7
+ ### Fixes
8
+
9
+ - Require vpndetection 5.9.0: is_pubproxy and the pubproxy detail ([`f307abd`](https://github.com/vpndetection-io/sdk-python-fastapi/commit/f307abded300ba66edf95e82bc692451a661d3c0))
10
+
11
+ ## 2.1.6 - 2026-10-17
12
+
13
+ ### Features
14
+
15
+ - Require vpndetection 5.8.0: OauthMetadata carries registration_endpoint ([`e912868`](https://github.com/vpndetection-io/sdk-python-fastapi/commit/e91286800be6db8f33012ff373a54fcb607ba889))
16
+
5
17
  ## 2.1.5 - 2026-10-16
6
18
 
7
19
  ### Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: vpndetection-fastapi
3
- Version: 2.1.5
3
+ Version: 2.1.7
4
4
  Summary: Official FastAPI and Starlette middleware for the VPNDetection API. Detect VPNs, proxies, Tor, hosting and CDN visitors on every request.
5
5
  Project-URL: Homepage, https://vpndetection.io
6
6
  Project-URL: Source, https://github.com/vpndetection-io/sdk-python-fastapi
@@ -20,7 +20,7 @@ Classifier: Topic :: Security
20
20
  Classifier: Typing :: Typed
21
21
  Requires-Python: >=3.11
22
22
  Requires-Dist: starlette>=0.37
23
- Requires-Dist: vpndetection<6,>=5.7.3
23
+ Requires-Dist: vpndetection<6,>=5.9.0
24
24
  Provides-Extra: dev
25
25
  Requires-Dist: fastapi>=0.115; extra == 'dev'
26
26
  Requires-Dist: mypy>=1.11; extra == 'dev'
@@ -24,7 +24,7 @@ classifiers = [
24
24
  "Topic :: Security",
25
25
  "Typing :: Typed",
26
26
  ]
27
- dependencies = ["vpndetection>=5.7.3,<6", "starlette>=0.37"]
27
+ dependencies = ["vpndetection>=5.9.0,<6", "starlette>=0.37"]
28
28
 
29
29
  [project.urls]
30
30
  Homepage = "https://vpndetection.io"
@@ -45,7 +45,7 @@ __all__ = [
45
45
  "xff_ip_selector",
46
46
  ]
47
47
 
48
- __version__ = "2.1.5"
48
+ __version__ = "2.1.7"
49
49
 
50
50
  # Set on a request ``skip`` claimed, so block_if can tell it from one the middleware
51
51
  # never saw.
@@ -305,7 +305,8 @@
305
305
  "is_cdn",
306
306
  "is_resproxy",
307
307
  "is_dcproxy",
308
- "is_mobproxy"
308
+ "is_mobproxy",
309
+ "is_pubproxy"
309
310
  ],
310
311
  "emptyObjects": [
311
312
  "vpn",
@@ -315,7 +316,8 @@
315
316
  "cdn",
316
317
  "resproxy",
317
318
  "dcproxy",
318
- "mobproxy"
319
+ "mobproxy",
320
+ "pubproxy"
319
321
  ]
320
322
  },
321
323
  "lookup": [
@@ -348,7 +350,9 @@
348
350
  "cdn",
349
351
  "resproxy",
350
352
  "dcproxy",
351
- "mobproxy"
353
+ "mobproxy",
354
+ "is_pubproxy",
355
+ "pubproxy"
352
356
  ]
353
357
  }
354
358
  },
@@ -386,7 +390,9 @@
386
390
  "cdn",
387
391
  "resproxy",
388
392
  "dcproxy",
389
- "mobproxy"
393
+ "mobproxy",
394
+ "is_pubproxy",
395
+ "pubproxy"
390
396
  ],
391
397
  "vpn": {
392
398
  "provider": "mullvad",
@@ -429,7 +435,9 @@
429
435
  "is_mobproxy",
430
436
  "resproxy",
431
437
  "dcproxy",
432
- "mobproxy"
438
+ "mobproxy",
439
+ "is_pubproxy",
440
+ "pubproxy"
433
441
  ],
434
442
  "emptyPresent": [
435
443
  "vpn",
@@ -446,7 +454,7 @@
446
454
  },
447
455
  {
448
456
  "name": "max-full-shape",
449
- "why": "Max adds confidence and method on vpn, plus the three proxy families.",
457
+ "why": "Max adds confidence and method on vpn, plus the three proxy families and the public proxy detail.",
450
458
  "status": 200,
451
459
  "body": {
452
460
  "ip": "45.83.91.1",
@@ -458,6 +466,7 @@
458
466
  "is_resproxy": false,
459
467
  "is_dcproxy": true,
460
468
  "is_mobproxy": false,
469
+ "is_pubproxy": true,
461
470
  "vpn": {
462
471
  "provider": "mullvad",
463
472
  "last_seen": "2026-09-02",
@@ -481,7 +490,17 @@
481
490
  "hits_days_pct": 63,
482
491
  "providers_num": 2
483
492
  },
484
- "mobproxy": {}
493
+ "mobproxy": {},
494
+ "pubproxy": {
495
+ "entry": true,
496
+ "exit": false,
497
+ "protocols": [
498
+ "http",
499
+ "https"
500
+ ],
501
+ "last_seen": "2026-10-17",
502
+ "last_usable": ""
503
+ }
485
504
  },
486
505
  "expect": {
487
506
  "ip": "45.83.91.1",
@@ -489,7 +508,8 @@
489
508
  "present": {
490
509
  "is_vpn": true,
491
510
  "is_dcproxy": true,
492
- "is_resproxy": false
511
+ "is_resproxy": false,
512
+ "is_pubproxy": true
493
513
  },
494
514
  "absent": [],
495
515
  "vpn": {
@@ -505,6 +525,16 @@
505
525
  "hits": 42,
506
526
  "hits_days_pct": 63,
507
527
  "providers_num": 2
528
+ },
529
+ "pubproxy": {
530
+ "entry": true,
531
+ "exit": false,
532
+ "protocols": [
533
+ "http",
534
+ "https"
535
+ ],
536
+ "last_seen": "2026-10-17",
537
+ "last_usable": ""
508
538
  }
509
539
  }
510
540
  },
@@ -546,6 +576,7 @@
546
576
  "is_resproxy": false,
547
577
  "is_dcproxy": false,
548
578
  "is_mobproxy": false,
579
+ "is_pubproxy": false,
549
580
  "vpn": {},
550
581
  "hosting": {},
551
582
  "relay": {},
@@ -553,7 +584,8 @@
553
584
  "cdn": {},
554
585
  "resproxy": {},
555
586
  "dcproxy": {},
556
- "mobproxy": {}
587
+ "mobproxy": {},
588
+ "pubproxy": {}
557
589
  },
558
590
  "expect": {
559
591
  "ip": "8.8.4.4",
@@ -566,7 +598,8 @@
566
598
  "is_cdn": false,
567
599
  "is_resproxy": false,
568
600
  "is_dcproxy": false,
569
- "is_mobproxy": false
601
+ "is_mobproxy": false,
602
+ "is_pubproxy": false
570
603
  },
571
604
  "absent": [],
572
605
  "emptyPresent": [
@@ -577,7 +610,8 @@
577
610
  "cdn",
578
611
  "resproxy",
579
612
  "dcproxy",
580
- "mobproxy"
613
+ "mobproxy",
614
+ "pubproxy"
581
615
  ]
582
616
  }
583
617
  }
@@ -5424,6 +5458,123 @@
5424
5458
  "blocked": false,
5425
5459
  "missing": []
5426
5460
  }
5461
+ },
5462
+ {
5463
+ "name": "pubproxy-detail-term-matches",
5464
+ "why": "The public proxy detail is a member like the other families: a nested boolean term reaches it.",
5465
+ "body": {
5466
+ "ip": "45.83.91.1",
5467
+ "is_vpn": true,
5468
+ "is_hosting": true,
5469
+ "is_relay": false,
5470
+ "is_tor": false,
5471
+ "is_cdn": false,
5472
+ "is_resproxy": true,
5473
+ "is_dcproxy": false,
5474
+ "is_mobproxy": false,
5475
+ "vpn": {
5476
+ "provider": "nordvpn",
5477
+ "confidence": "high",
5478
+ "method": "rdns",
5479
+ "last_seen": "2026-09-01"
5480
+ },
5481
+ "hosting": {
5482
+ "provider": "ovh",
5483
+ "confidence": "medium",
5484
+ "last_seen": "2026-09-01"
5485
+ },
5486
+ "relay": {},
5487
+ "tor": {},
5488
+ "cdn": {},
5489
+ "resproxy": {
5490
+ "provider": "brightdata",
5491
+ "first_seen": "2026-06-01",
5492
+ "last_seen": "2026-09-01",
5493
+ "hits": 7,
5494
+ "hits_days_pct": 42,
5495
+ "providers_num": 2
5496
+ },
5497
+ "dcproxy": {},
5498
+ "mobproxy": {},
5499
+ "is_pubproxy": true,
5500
+ "pubproxy": {
5501
+ "entry": true,
5502
+ "exit": false,
5503
+ "protocols": [
5504
+ "socks5"
5505
+ ],
5506
+ "last_seen": "2026-10-17",
5507
+ "last_usable": "2026-10-16"
5508
+ }
5509
+ },
5510
+ "condition": {
5511
+ "is_pubproxy": true,
5512
+ "pubproxy": {
5513
+ "entry": true
5514
+ }
5515
+ },
5516
+ "expect": {
5517
+ "blocked": true,
5518
+ "missing": []
5519
+ }
5520
+ },
5521
+ {
5522
+ "name": "pubproxy-detail-term-misses",
5523
+ "why": "A nested term that disagrees with the served detail does not block.",
5524
+ "body": {
5525
+ "ip": "45.83.91.1",
5526
+ "is_vpn": true,
5527
+ "is_hosting": true,
5528
+ "is_relay": false,
5529
+ "is_tor": false,
5530
+ "is_cdn": false,
5531
+ "is_resproxy": true,
5532
+ "is_dcproxy": false,
5533
+ "is_mobproxy": false,
5534
+ "vpn": {
5535
+ "provider": "nordvpn",
5536
+ "confidence": "high",
5537
+ "method": "rdns",
5538
+ "last_seen": "2026-09-01"
5539
+ },
5540
+ "hosting": {
5541
+ "provider": "ovh",
5542
+ "confidence": "medium",
5543
+ "last_seen": "2026-09-01"
5544
+ },
5545
+ "relay": {},
5546
+ "tor": {},
5547
+ "cdn": {},
5548
+ "resproxy": {
5549
+ "provider": "brightdata",
5550
+ "first_seen": "2026-06-01",
5551
+ "last_seen": "2026-09-01",
5552
+ "hits": 7,
5553
+ "hits_days_pct": 42,
5554
+ "providers_num": 2
5555
+ },
5556
+ "dcproxy": {},
5557
+ "mobproxy": {},
5558
+ "is_pubproxy": true,
5559
+ "pubproxy": {
5560
+ "entry": true,
5561
+ "exit": false,
5562
+ "protocols": [
5563
+ "socks5"
5564
+ ],
5565
+ "last_seen": "2026-10-17",
5566
+ "last_usable": "2026-10-16"
5567
+ }
5568
+ },
5569
+ "condition": {
5570
+ "pubproxy": {
5571
+ "exit": true
5572
+ }
5573
+ },
5574
+ "expect": {
5575
+ "blocked": false,
5576
+ "missing": []
5577
+ }
5427
5578
  }
5428
5579
  ],
5429
5580
  "invalidConditions": [
@@ -5588,6 +5739,7 @@
5588
5739
  ],
5589
5740
  "authorization_response_iss_parameter_supported": true,
5590
5741
  "client_id_metadata_document_supported": true,
5742
+ "registration_endpoint": "https://api.vpndetection.io/oauth/register",
5591
5743
  "service_documentation": "https://api.vpndetection.io/"
5592
5744
  },
5593
5745
  "expect": {
@@ -5621,6 +5773,7 @@
5621
5773
  ],
5622
5774
  "authorization_response_iss_parameter_supported": true,
5623
5775
  "client_id_metadata_document_supported": true,
5776
+ "registration_endpoint": "https://api.vpndetection.io/oauth/register",
5624
5777
  "service_documentation": "https://api.vpndetection.io/"
5625
5778
  },
5626
5779
  "absent": []
@@ -6105,6 +6258,7 @@
6105
6258
  ],
6106
6259
  "authorization_response_iss_parameter_supported": true,
6107
6260
  "client_id_metadata_document_supported": true,
6261
+ "registration_endpoint": "https://api.vpndetection.io/oauth/register",
6108
6262
  "service_documentation": "https://api.vpndetection.io/"
6109
6263
  }
6110
6264
  }