sentinelsup 0.2.1__tar.gz → 0.2.3__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.
- {sentinelsup-0.2.1 → sentinelsup-0.2.3}/.gitignore +7 -7
- {sentinelsup-0.2.1 → sentinelsup-0.2.3}/LICENSE +21 -21
- {sentinelsup-0.2.1 → sentinelsup-0.2.3}/PKG-INFO +46 -28
- {sentinelsup-0.2.1 → sentinelsup-0.2.3}/README.md +257 -239
- {sentinelsup-0.2.1 → sentinelsup-0.2.3}/examples/django_middleware.py +48 -48
- {sentinelsup-0.2.1 → sentinelsup-0.2.3}/examples/flask_signup_guard.py +46 -46
- {sentinelsup-0.2.1 → sentinelsup-0.2.3}/pyproject.toml +48 -48
- {sentinelsup-0.2.1 → sentinelsup-0.2.3}/sentinel/__init__.py +208 -200
- sentinelsup-0.2.3/sentinel/py.typed +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
__pycache__/
|
|
2
|
-
*.py[cod]
|
|
3
|
-
*.egg-info/
|
|
4
|
-
build/
|
|
5
|
-
dist/
|
|
6
|
-
.venv/
|
|
7
|
-
.pytest_cache/
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.py[cod]
|
|
3
|
+
*.egg-info/
|
|
4
|
+
build/
|
|
5
|
+
dist/
|
|
6
|
+
.venv/
|
|
7
|
+
.pytest_cache/
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Sentinel Edge Networks LTD
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Sentinel Edge Networks LTD
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sentinelsup
|
|
3
|
-
Version: 0.2.
|
|
4
|
-
Summary:
|
|
5
|
-
Project-URL: Homepage, https://
|
|
6
|
-
Project-URL: Documentation, https://
|
|
7
|
-
Project-URL: Repository, https://github.com/sentinelsup/
|
|
8
|
-
Project-URL: Issues, https://github.com/sentinelsup/
|
|
9
|
-
Author-email: Sentinel Edge Networks LTD <support@
|
|
3
|
+
Version: 0.2.3
|
|
4
|
+
Summary: Maskbreak — real-time fraud, VPN, proxy, and bot detection API. Free tier, sub-40ms response.
|
|
5
|
+
Project-URL: Homepage, https://maskbreak.com
|
|
6
|
+
Project-URL: Documentation, https://maskbreak.com/api
|
|
7
|
+
Project-URL: Repository, https://github.com/sentinelsup/maskbreak-python
|
|
8
|
+
Project-URL: Issues, https://github.com/sentinelsup/maskbreak-python/issues
|
|
9
|
+
Author-email: Sentinel Edge Networks LTD <support@maskbreak.com>
|
|
10
10
|
License: MIT
|
|
11
11
|
License-File: LICENSE
|
|
12
12
|
Keywords: antidetect-browser,api,bot-detection,device-fingerprinting,fraud-detection,proxy-detection,sentinel,vpn-detection
|
|
@@ -27,9 +27,9 @@ Classifier: Typing :: Typed
|
|
|
27
27
|
Requires-Python: >=3.8
|
|
28
28
|
Description-Content-Type: text/markdown
|
|
29
29
|
|
|
30
|
-
# sentinelsup —
|
|
30
|
+
# sentinelsup — Maskbreak Python SDK
|
|
31
31
|
|
|
32
|
-
Official Python SDK for [
|
|
32
|
+
Official Python SDK for [Maskbreak](https://maskbreak.com) — a real-time fraud detection API that flags VPNs, residential proxies, antidetect browsers (Kameleo, GoLogin, Multilogin), Tor exit nodes, and AI bots in under 40 ms.
|
|
33
33
|
|
|
34
34
|
[](https://pypi.org/project/sentinelsup/)
|
|
35
35
|
[](https://pypi.org/project/sentinelsup/)
|
|
@@ -43,12 +43,12 @@ Using Claude Code, Cursor, Copilot, or any AI coding assistant? Paste this one
|
|
|
43
43
|
prompt and it wires the whole integration — frontend script, backend check,
|
|
44
44
|
env var, and a test:
|
|
45
45
|
|
|
46
|
-
> Fetch https://
|
|
46
|
+
> Fetch https://maskbreak.com/integrate.md and follow it to add Maskbreak fraud
|
|
47
47
|
> protection to this app — protect signup, login, and checkout. My API key
|
|
48
48
|
> is sk_live_YOUR_KEY; put it in a SENTINEL_KEY env var, never in
|
|
49
49
|
> client-side code. Then show me how to test it.
|
|
50
50
|
|
|
51
|
-
[`integrate.md`](https://
|
|
51
|
+
[`integrate.md`](https://maskbreak.com/integrate.md) is the canonical
|
|
52
52
|
machine-readable integration guide, kept in sync with the live API.
|
|
53
53
|
|
|
54
54
|
## Install
|
|
@@ -57,7 +57,7 @@ machine-readable integration guide, kept in sync with the live API.
|
|
|
57
57
|
pip install sentinelsup
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
-
Python 3.8+. Get a free API key (no credit card) at [
|
|
60
|
+
Python 3.8+. Get a free API key (no credit card) at [maskbreak.com/signup](https://maskbreak.com/signup).
|
|
61
61
|
|
|
62
62
|
## Quick start
|
|
63
63
|
|
|
@@ -92,10 +92,6 @@ print(info["verdict"]) # 'allow' | 'review' | 'block'
|
|
|
92
92
|
print(info["signals"]) # {'vpn': ..., 'proxied': ..., 'tor': ..., 'dch': ..., 'anon': ...}
|
|
93
93
|
```
|
|
94
94
|
|
|
95
|
-
> `email=` and `lookup()` ship in the **next PyPI release (0.2.1)** — on PyPI
|
|
96
|
-
> today, use the raw HTTP endpoints documented at
|
|
97
|
-
> [sntlhq.com/api](https://sntlhq.com/api) until it lands.
|
|
98
|
-
|
|
99
95
|
## What you get back
|
|
100
96
|
|
|
101
97
|
`evaluate()` returns an `EvaluateResult` dataclass:
|
|
@@ -110,6 +106,10 @@ class EvaluateResult:
|
|
|
110
106
|
network: dict # {vpn, proxy, datacenter, anonymous, tor, residential, service}
|
|
111
107
|
device: dict # antidetect / automation / emulator signals
|
|
112
108
|
reasons: list[str] # machine-readable codes
|
|
109
|
+
email: dict | None # {disposable: bool} — present when you passed email=
|
|
110
|
+
decision_source: str | None # 'rules' | 'exception' when your policy matched
|
|
111
|
+
engine_decision: str | None # engine's own verdict when policy changed the decision
|
|
112
|
+
test: bool # True for test-token / test-key calls
|
|
113
113
|
raw: dict # full upstream response
|
|
114
114
|
|
|
115
115
|
is_suspicious: bool # True if decision != 'allow'
|
|
@@ -119,18 +119,18 @@ class EvaluateResult:
|
|
|
119
119
|
Try the live sample (same shape, no key needed):
|
|
120
120
|
|
|
121
121
|
```bash
|
|
122
|
-
curl "https://
|
|
122
|
+
curl "https://maskbreak.com/v1/evaluate/sample?scenario=vpn"
|
|
123
123
|
```
|
|
124
124
|
|
|
125
|
-
Or use the [interactive playground](https://
|
|
125
|
+
Or use the [interactive playground](https://maskbreak.com/api#playground).
|
|
126
126
|
|
|
127
127
|
## Frontend setup
|
|
128
128
|
|
|
129
|
-
Add the
|
|
129
|
+
Add the Maskbreak SDK to your frontend. One script loads **both** layers —
|
|
130
130
|
network (VPN/proxy/datacenter) and device (antidetect/bot/tampering):
|
|
131
131
|
|
|
132
132
|
```html
|
|
133
|
-
<script async src="https://
|
|
133
|
+
<script async src="https://maskbreak.com/assets/sentinel.js"></script>
|
|
134
134
|
|
|
135
135
|
<!-- Add class="monocle-enriched" to any form you want evaluated -->
|
|
136
136
|
<form class="monocle-enriched" id="signup-form">
|
|
@@ -206,12 +206,12 @@ Runnable versions live in [`examples/`](./examples/).
|
|
|
206
206
|
|
|
207
207
|
## API
|
|
208
208
|
|
|
209
|
-
### `Sentinel(api_key=None, endpoint="https://
|
|
209
|
+
### `Sentinel(api_key=None, endpoint="https://maskbreak.com", timeout=5.0)`
|
|
210
210
|
|
|
211
211
|
| Option | Default | Description |
|
|
212
212
|
|--------|---------|-------------|
|
|
213
213
|
| `api_key` | `$SENTINEL_KEY` (falls back to `$SENTINEL_API_KEY`) | Your key starting with `sk_live_` |
|
|
214
|
-
| `endpoint` | `https://
|
|
214
|
+
| `endpoint` | `https://maskbreak.com` | Override base URL (for testing) |
|
|
215
215
|
| `timeout` | `5.0` | Per-request timeout in seconds |
|
|
216
216
|
|
|
217
217
|
### `sentinel.evaluate(token, fingerprint_event_id=None, account_id=None, email=None)`
|
|
@@ -226,6 +226,24 @@ Returns `EvaluateResult`. Raises `SentinelError` on network/API failure.
|
|
|
226
226
|
|
|
227
227
|
Returns the raw response dict for any public IPv4/IPv6 address (wraps `GET /v1/lookup/{ip}`): `verdict` (`allow`/`review`/`block`), `risk_score` (0–100), `known`, `signals` (`{vpn, proxied, tor, dch, anon}` or `None`), `network` (`{asn, org, country, city}`), `latency_ms`. Shares the per-key hourly quota with `evaluate()`. `known: False` means our feeds hold no data — it is **not** a clean guarantee.
|
|
228
228
|
|
|
229
|
+
## Testing
|
|
230
|
+
|
|
231
|
+
Deterministic test tokens exercise your allow / review / block handling end-to-end — no browser needed. Test calls are authenticated and rate-limited like real ones but never billed, stored, or webhooked, and the response carries `test=True`:
|
|
232
|
+
|
|
233
|
+
```python
|
|
234
|
+
result = s.evaluate(token="test_vpn") # also: test_clean, test_proxy, test_datacenter, test_tor
|
|
235
|
+
assert result.decision == "review"
|
|
236
|
+
assert result.test
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
No account yet? The public sandbox key accepts the same test tokens:
|
|
240
|
+
|
|
241
|
+
```python
|
|
242
|
+
s = Sentinel(api_key="sk_test_sandbox") # CI/staging — nothing billed, nothing stored
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Every account also has a personal `sk_test_...` key (Settings → API Key) that runs the *complete* live pipeline — real tokens, your rules and exception pins included — while events stay flagged as test and never count toward usage or webhooks.
|
|
246
|
+
|
|
229
247
|
## Errors
|
|
230
248
|
|
|
231
249
|
All failures raise `SentinelError`. The exception carries `.status` (HTTP code) and `.body` (parsed error body) when available.
|
|
@@ -247,9 +265,9 @@ except SentinelError as e:
|
|
|
247
265
|
## Rate limits
|
|
248
266
|
|
|
249
267
|
Free tier: **1,000 requests/hour** per API key. No monthly cap, no credit
|
|
250
|
-
card. Upgrade at [
|
|
268
|
+
card. Upgrade at [maskbreak.com](https://maskbreak.com) when you need more.
|
|
251
269
|
|
|
252
|
-
## What
|
|
270
|
+
## What Maskbreak detects
|
|
253
271
|
|
|
254
272
|
VPNs (commercial + self-hosted) · residential proxies (Bright Data, IPRoyal,
|
|
255
273
|
and similar networks) · datacenter IPs · Tor exit nodes · antidetect browsers
|
|
@@ -259,10 +277,10 @@ virtual machines · browser tampering.
|
|
|
259
277
|
|
|
260
278
|
## Related
|
|
261
279
|
|
|
262
|
-
- **Node.js SDK** — [`@sentinelsup/sdk`](https://github.com/sentinelsup/
|
|
263
|
-
- **API docs** — [
|
|
264
|
-
- **Free IP lookup tool** — [
|
|
280
|
+
- **Node.js SDK** — [`@sentinelsup/sdk`](https://github.com/sentinelsup/maskbreak-node) on npm
|
|
281
|
+
- **API docs** — [maskbreak.com/api](https://maskbreak.com/api)
|
|
282
|
+
- **Free IP lookup tool** — [maskbreak.com/ip-lookup](https://maskbreak.com/ip-lookup)
|
|
265
283
|
|
|
266
284
|
## License
|
|
267
285
|
|
|
268
|
-
MIT © [Sentinel Edge Networks LTD](https://
|
|
286
|
+
MIT © [Sentinel Edge Networks LTD](https://maskbreak.com). See [LICENSE](LICENSE).
|