vpndetection-fastapi 2.1.6__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.
- {vpndetection_fastapi-2.1.6 → vpndetection_fastapi-2.1.7}/CHANGELOG.md +6 -0
- {vpndetection_fastapi-2.1.6 → vpndetection_fastapi-2.1.7}/PKG-INFO +2 -2
- {vpndetection_fastapi-2.1.6 → vpndetection_fastapi-2.1.7}/pyproject.toml +1 -1
- {vpndetection_fastapi-2.1.6 → vpndetection_fastapi-2.1.7}/src/vpndetection_fastapi/__init__.py +1 -1
- {vpndetection_fastapi-2.1.6 → vpndetection_fastapi-2.1.7}/testdata/testdata.json +162 -11
- {vpndetection_fastapi-2.1.6 → vpndetection_fastapi-2.1.7}/.github/workflows/ci.yml +0 -0
- {vpndetection_fastapi-2.1.6 → vpndetection_fastapi-2.1.7}/.github/workflows/release.yml +0 -0
- {vpndetection_fastapi-2.1.6 → vpndetection_fastapi-2.1.7}/.gitignore +0 -0
- {vpndetection_fastapi-2.1.6 → vpndetection_fastapi-2.1.7}/LICENSE +0 -0
- {vpndetection_fastapi-2.1.6 → vpndetection_fastapi-2.1.7}/README.md +0 -0
- {vpndetection_fastapi-2.1.6 → vpndetection_fastapi-2.1.7}/src/vpndetection_fastapi/py.typed +0 -0
- {vpndetection_fastapi-2.1.6 → vpndetection_fastapi-2.1.7}/testdata/bogons.json +0 -0
- {vpndetection_fastapi-2.1.6 → vpndetection_fastapi-2.1.7}/tests/test_middleware.py +0 -0
|
@@ -2,6 +2,12 @@
|
|
|
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
|
+
|
|
5
11
|
## 2.1.6 - 2026-10-17
|
|
6
12
|
|
|
7
13
|
### Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: vpndetection-fastapi
|
|
3
|
-
Version: 2.1.
|
|
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.
|
|
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'
|
|
@@ -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": [
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|