voidcrawl 0.3.3__tar.gz → 0.3.5__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.
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/Cargo.lock +44 -44
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/PKG-INFO +3 -2
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/README.md +1 -0
- voidcrawl-0.3.5/crates/core/CORPUS.md +54 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/Cargo.toml +4 -1
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/README.md +1 -0
- voidcrawl-0.3.5/crates/core/src/antibot.rs +439 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/src/error.rs +16 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/src/lib.rs +2 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/src/page.rs +567 -11
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/src/session.rs +37 -1
- voidcrawl-0.3.5/crates/core/tests/antibot_accuracy.rs +221 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/pyo3_bindings/Cargo.toml +2 -2
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/pyo3_bindings/src/lib.rs +251 -20
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/pyproject.toml +2 -2
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/__init__.py +20 -6
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/__init__.pyi +10 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/_ext.pyi +132 -3
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/Cargo.toml +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/LICENSE.md +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/examples/download_and_scan.rs +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/examples/download_via_action.rs +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/src/ax.rs +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/src/captcha.rs +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/src/pool.rs +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/src/profile.rs +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/src/scanner.rs +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/src/stealth.rs +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/tests/ax_tree.rs +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/tests/captcha_capture.rs +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/tests/captcha_runtime_loaded.rs +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/tests/download.rs +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/tests/emulation.rs +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/tests/integration.rs +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/tests/profile_lock.rs +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/tests/scanner.rs +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/crates/core/tests/stealth_ua.rs +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/_downloads.py +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/__init__.py +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/__init__.pyi +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/_base.py +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/_base.pyi +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/_flow.py +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/_flow.pyi +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/_protocol.py +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/_protocol.pyi +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/builtin/__init__.py +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/builtin/__init__.pyi +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/builtin/click.py +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/builtin/click.pyi +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/builtin/dom.py +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/builtin/dom.pyi +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/builtin/hover.py +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/builtin/hover.pyi +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/builtin/input.py +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/builtin/input.pyi +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/builtin/network.py +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/builtin/network.pyi +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/builtin/scroll.py +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/builtin/scroll.pyi +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/builtin/wait.py +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/builtin/wait.pyi +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/js/click_at.js +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/js/hover.js +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/actions/js/wait_for_selector.js +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/cli.py +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/debug.py +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/debug.pyi +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/profiles.py +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/py.typed +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/scale.py +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/scale.pyi +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/schema.py +0 -0
- {voidcrawl-0.3.3 → voidcrawl-0.3.5}/voidcrawl/schema.pyi +0 -0
|
@@ -188,9 +188,9 @@ dependencies = [
|
|
|
188
188
|
|
|
189
189
|
[[package]]
|
|
190
190
|
name = "bitflags"
|
|
191
|
-
version = "2.
|
|
191
|
+
version = "2.13.0"
|
|
192
192
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
193
|
-
checksum = "
|
|
193
|
+
checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"
|
|
194
194
|
dependencies = [
|
|
195
195
|
"serde_core",
|
|
196
196
|
]
|
|
@@ -342,9 +342,9 @@ dependencies = [
|
|
|
342
342
|
|
|
343
343
|
[[package]]
|
|
344
344
|
name = "chrono"
|
|
345
|
-
version = "0.4.
|
|
345
|
+
version = "0.4.45"
|
|
346
346
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
347
|
-
checksum = "
|
|
347
|
+
checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327"
|
|
348
348
|
dependencies = [
|
|
349
349
|
"iana-time-zone",
|
|
350
350
|
"num-traits",
|
|
@@ -1044,9 +1044,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
|
|
|
1044
1044
|
|
|
1045
1045
|
[[package]]
|
|
1046
1046
|
name = "http"
|
|
1047
|
-
version = "1.4.
|
|
1047
|
+
version = "1.4.2"
|
|
1048
1048
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1049
|
-
checksum = "
|
|
1049
|
+
checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425"
|
|
1050
1050
|
dependencies = [
|
|
1051
1051
|
"bytes",
|
|
1052
1052
|
"itoa",
|
|
@@ -1287,9 +1287,9 @@ dependencies = [
|
|
|
1287
1287
|
|
|
1288
1288
|
[[package]]
|
|
1289
1289
|
name = "ignore"
|
|
1290
|
-
version = "0.4.
|
|
1290
|
+
version = "0.4.26"
|
|
1291
1291
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1292
|
-
checksum = "
|
|
1292
|
+
checksum = "b915661dd01db3f05050265b2477bcc6527b3792388e2749b41623cc592be67d"
|
|
1293
1293
|
dependencies = [
|
|
1294
1294
|
"crossbeam-deque",
|
|
1295
1295
|
"globset",
|
|
@@ -1415,13 +1415,12 @@ dependencies = [
|
|
|
1415
1415
|
|
|
1416
1416
|
[[package]]
|
|
1417
1417
|
name = "js-sys"
|
|
1418
|
-
version = "0.3.
|
|
1418
|
+
version = "0.3.100"
|
|
1419
1419
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1420
|
-
checksum = "
|
|
1420
|
+
checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162"
|
|
1421
1421
|
dependencies = [
|
|
1422
1422
|
"cfg-if",
|
|
1423
1423
|
"futures-util",
|
|
1424
|
-
"once_cell",
|
|
1425
1424
|
"wasm-bindgen",
|
|
1426
1425
|
]
|
|
1427
1426
|
|
|
@@ -1478,9 +1477,9 @@ dependencies = [
|
|
|
1478
1477
|
|
|
1479
1478
|
[[package]]
|
|
1480
1479
|
name = "log"
|
|
1481
|
-
version = "0.4.
|
|
1480
|
+
version = "0.4.32"
|
|
1482
1481
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1483
|
-
checksum = "
|
|
1482
|
+
checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a"
|
|
1484
1483
|
|
|
1485
1484
|
[[package]]
|
|
1486
1485
|
name = "logos"
|
|
@@ -1950,9 +1949,9 @@ dependencies = [
|
|
|
1950
1949
|
|
|
1951
1950
|
[[package]]
|
|
1952
1951
|
name = "regex"
|
|
1953
|
-
version = "1.12.
|
|
1952
|
+
version = "1.12.4"
|
|
1954
1953
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1955
|
-
checksum = "
|
|
1954
|
+
checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba"
|
|
1956
1955
|
dependencies = [
|
|
1957
1956
|
"aho-corasick",
|
|
1958
1957
|
"memchr",
|
|
@@ -1973,9 +1972,9 @@ dependencies = [
|
|
|
1973
1972
|
|
|
1974
1973
|
[[package]]
|
|
1975
1974
|
name = "regex-syntax"
|
|
1976
|
-
version = "0.8.
|
|
1975
|
+
version = "0.8.11"
|
|
1977
1976
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1978
|
-
checksum = "
|
|
1977
|
+
checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
|
|
1979
1978
|
|
|
1980
1979
|
[[package]]
|
|
1981
1980
|
name = "reqwest"
|
|
@@ -2124,9 +2123,9 @@ dependencies = [
|
|
|
2124
2123
|
|
|
2125
2124
|
[[package]]
|
|
2126
2125
|
name = "rustls-native-certs"
|
|
2127
|
-
version = "0.8.
|
|
2126
|
+
version = "0.8.4"
|
|
2128
2127
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2129
|
-
checksum = "
|
|
2128
|
+
checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d"
|
|
2130
2129
|
dependencies = [
|
|
2131
2130
|
"openssl-probe",
|
|
2132
2131
|
"rustls-pki-types",
|
|
@@ -2817,9 +2816,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
|
|
|
2817
2816
|
|
|
2818
2817
|
[[package]]
|
|
2819
2818
|
name = "uuid"
|
|
2820
|
-
version = "1.23.
|
|
2819
|
+
version = "1.23.3"
|
|
2821
2820
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2822
|
-
checksum = "
|
|
2821
|
+
checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7"
|
|
2823
2822
|
dependencies = [
|
|
2824
2823
|
"getrandom 0.4.2",
|
|
2825
2824
|
"js-sys",
|
|
@@ -2846,7 +2845,7 @@ checksum = "051eb1abcf10076295e815102942cc58f9d5e3b4560e46e53c21e8ff6f3af7b1"
|
|
|
2846
2845
|
|
|
2847
2846
|
[[package]]
|
|
2848
2847
|
name = "void_crawl"
|
|
2849
|
-
version = "0.3.
|
|
2848
|
+
version = "0.3.5"
|
|
2850
2849
|
dependencies = [
|
|
2851
2850
|
"futures",
|
|
2852
2851
|
"pyo3",
|
|
@@ -2858,12 +2857,13 @@ dependencies = [
|
|
|
2858
2857
|
|
|
2859
2858
|
[[package]]
|
|
2860
2859
|
name = "void_crawl_core"
|
|
2861
|
-
version = "0.3.
|
|
2860
|
+
version = "0.3.5"
|
|
2862
2861
|
dependencies = [
|
|
2863
2862
|
"chromiumoxide",
|
|
2864
2863
|
"fd-lock",
|
|
2865
2864
|
"futures",
|
|
2866
2865
|
"infer",
|
|
2866
|
+
"regex",
|
|
2867
2867
|
"reqwest",
|
|
2868
2868
|
"rustls",
|
|
2869
2869
|
"serde",
|
|
@@ -2876,7 +2876,7 @@ dependencies = [
|
|
|
2876
2876
|
|
|
2877
2877
|
[[package]]
|
|
2878
2878
|
name = "voidcrawl-mcp"
|
|
2879
|
-
version = "0.3.
|
|
2879
|
+
version = "0.3.5"
|
|
2880
2880
|
dependencies = [
|
|
2881
2881
|
"anyhow",
|
|
2882
2882
|
"base64",
|
|
@@ -2972,9 +2972,9 @@ dependencies = [
|
|
|
2972
2972
|
|
|
2973
2973
|
[[package]]
|
|
2974
2974
|
name = "wasm-bindgen"
|
|
2975
|
-
version = "0.2.
|
|
2975
|
+
version = "0.2.123"
|
|
2976
2976
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2977
|
-
checksum = "
|
|
2977
|
+
checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563"
|
|
2978
2978
|
dependencies = [
|
|
2979
2979
|
"cfg-if",
|
|
2980
2980
|
"once_cell",
|
|
@@ -2985,9 +2985,9 @@ dependencies = [
|
|
|
2985
2985
|
|
|
2986
2986
|
[[package]]
|
|
2987
2987
|
name = "wasm-bindgen-futures"
|
|
2988
|
-
version = "0.4.
|
|
2988
|
+
version = "0.4.73"
|
|
2989
2989
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2990
|
-
checksum = "
|
|
2990
|
+
checksum = "54568702fabf5d4849ce2b90fadfa64168a097eaf4b351ce9df8b687a0086aaf"
|
|
2991
2991
|
dependencies = [
|
|
2992
2992
|
"js-sys",
|
|
2993
2993
|
"wasm-bindgen",
|
|
@@ -2995,9 +2995,9 @@ dependencies = [
|
|
|
2995
2995
|
|
|
2996
2996
|
[[package]]
|
|
2997
2997
|
name = "wasm-bindgen-macro"
|
|
2998
|
-
version = "0.2.
|
|
2998
|
+
version = "0.2.123"
|
|
2999
2999
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3000
|
-
checksum = "
|
|
3000
|
+
checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc"
|
|
3001
3001
|
dependencies = [
|
|
3002
3002
|
"quote",
|
|
3003
3003
|
"wasm-bindgen-macro-support",
|
|
@@ -3005,9 +3005,9 @@ dependencies = [
|
|
|
3005
3005
|
|
|
3006
3006
|
[[package]]
|
|
3007
3007
|
name = "wasm-bindgen-macro-support"
|
|
3008
|
-
version = "0.2.
|
|
3008
|
+
version = "0.2.123"
|
|
3009
3009
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3010
|
-
checksum = "
|
|
3010
|
+
checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b"
|
|
3011
3011
|
dependencies = [
|
|
3012
3012
|
"bumpalo",
|
|
3013
3013
|
"proc-macro2",
|
|
@@ -3018,9 +3018,9 @@ dependencies = [
|
|
|
3018
3018
|
|
|
3019
3019
|
[[package]]
|
|
3020
3020
|
name = "wasm-bindgen-shared"
|
|
3021
|
-
version = "0.2.
|
|
3021
|
+
version = "0.2.123"
|
|
3022
3022
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3023
|
-
checksum = "
|
|
3023
|
+
checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92"
|
|
3024
3024
|
dependencies = [
|
|
3025
3025
|
"unicode-ident",
|
|
3026
3026
|
]
|
|
@@ -3258,9 +3258,9 @@ dependencies = [
|
|
|
3258
3258
|
|
|
3259
3259
|
[[package]]
|
|
3260
3260
|
name = "web-sys"
|
|
3261
|
-
version = "0.3.
|
|
3261
|
+
version = "0.3.100"
|
|
3262
3262
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3263
|
-
checksum = "
|
|
3263
|
+
checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69"
|
|
3264
3264
|
dependencies = [
|
|
3265
3265
|
"js-sys",
|
|
3266
3266
|
"wasm-bindgen",
|
|
@@ -3277,9 +3277,9 @@ dependencies = [
|
|
|
3277
3277
|
|
|
3278
3278
|
[[package]]
|
|
3279
3279
|
name = "which"
|
|
3280
|
-
version = "8.0.
|
|
3280
|
+
version = "8.0.3"
|
|
3281
3281
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3282
|
-
checksum = "
|
|
3282
|
+
checksum = "c789537cf2f7f55be8e6192f92e464174ee55f91af622777f7f1ceb0dbccd03e"
|
|
3283
3283
|
dependencies = [
|
|
3284
3284
|
"libc",
|
|
3285
3285
|
]
|
|
@@ -3638,9 +3638,9 @@ dependencies = [
|
|
|
3638
3638
|
|
|
3639
3639
|
[[package]]
|
|
3640
3640
|
name = "yoke"
|
|
3641
|
-
version = "0.8.
|
|
3641
|
+
version = "0.8.3"
|
|
3642
3642
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3643
|
-
checksum = "
|
|
3643
|
+
checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5"
|
|
3644
3644
|
dependencies = [
|
|
3645
3645
|
"stable_deref_trait",
|
|
3646
3646
|
"yoke-derive",
|
|
@@ -3661,18 +3661,18 @@ dependencies = [
|
|
|
3661
3661
|
|
|
3662
3662
|
[[package]]
|
|
3663
3663
|
name = "zerocopy"
|
|
3664
|
-
version = "0.8.
|
|
3664
|
+
version = "0.8.52"
|
|
3665
3665
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3666
|
-
checksum = "
|
|
3666
|
+
checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f"
|
|
3667
3667
|
dependencies = [
|
|
3668
3668
|
"zerocopy-derive",
|
|
3669
3669
|
]
|
|
3670
3670
|
|
|
3671
3671
|
[[package]]
|
|
3672
3672
|
name = "zerocopy-derive"
|
|
3673
|
-
version = "0.8.
|
|
3673
|
+
version = "0.8.52"
|
|
3674
3674
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3675
|
-
checksum = "
|
|
3675
|
+
checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930"
|
|
3676
3676
|
dependencies = [
|
|
3677
3677
|
"proc-macro2",
|
|
3678
3678
|
"quote",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: voidcrawl
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.5
|
|
4
4
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
5
5
|
Classifier: Programming Language :: Python :: 3.10
|
|
6
6
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -10,7 +10,7 @@ Classifier: Programming Language :: Python :: 3.14
|
|
|
10
10
|
Requires-Dist: click>=8.3.2
|
|
11
11
|
Requires-Dist: pydantic>=2
|
|
12
12
|
Requires-Dist: rich>=14.3.3 ; extra == 'debug'
|
|
13
|
-
Requires-Dist: voidcrawl-mcp==0.3.
|
|
13
|
+
Requires-Dist: voidcrawl-mcp==0.3.5 ; extra == 'mcp'
|
|
14
14
|
Provides-Extra: debug
|
|
15
15
|
Provides-Extra: mcp
|
|
16
16
|
License-File: LICENSE.md
|
|
@@ -177,6 +177,7 @@ uv run pytest tests/ -v
|
|
|
177
177
|
## Documentation
|
|
178
178
|
|
|
179
179
|
- [Full API reference](docs/api-reference.md)
|
|
180
|
+
- [Anti-bot / CDN detection](docs/antibot.md)
|
|
180
181
|
- [Examples](examples/)
|
|
181
182
|
|
|
182
183
|
## Contact
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Anti-bot signature corpus
|
|
2
|
+
|
|
3
|
+
The signature corpus embedded in [`src/antibot.rs`](src/antibot.rs) (the
|
|
4
|
+
`CORPUS_JSON` const) fingerprints which anti-bot / WAF / CDN vendor is gating an
|
|
5
|
+
HTTP response, and whether that vendor is *actively challenging* us (a wall) vs.
|
|
6
|
+
merely *present* (a CDN fronting a site that served us fine).
|
|
7
|
+
|
|
8
|
+
## Provenance & license
|
|
9
|
+
|
|
10
|
+
The vendor list and the `signals[]` / `challenge[]` split are modeled on
|
|
11
|
+
**`albinstman/antibot-print`** (MIT) — <https://github.com/albinstman/antibot-print>.
|
|
12
|
+
|
|
13
|
+
- **Upstream license:** MIT (compatible with this Apache-2.0 / MIT crate).
|
|
14
|
+
- **Reference commit:** *record the SHA you authored against here when syncing.*
|
|
15
|
+
- **What we took:** the *idea* and the vendor taxonomy. The actual regex
|
|
16
|
+
patterns are **first-party** — hand-authored against the vendors we actually
|
|
17
|
+
meet, not a wholesale vendoring of the upstream JSON. This keeps the ruleset
|
|
18
|
+
small, readable, owned, and unit-testable, and avoids tracking upstream churn
|
|
19
|
+
or importing a pattern that bloats compile.
|
|
20
|
+
|
|
21
|
+
## Governance
|
|
22
|
+
|
|
23
|
+
- The corpus is **not** auto-synced. Treat any change as a reviewable diff.
|
|
24
|
+
- **Bump `CORPUS_VERSION`** in `src/antibot.rs` on every edit. Verdicts are
|
|
25
|
+
recorded with this version so a replay-grade archive can reproduce a
|
|
26
|
+
classification deterministically — a verdict is captured data, never
|
|
27
|
+
recomputed at replay time against a newer corpus.
|
|
28
|
+
- Drift is caught loudly by the **offline accuracy benchmark**
|
|
29
|
+
(`tests/antibot_accuracy.rs`): a held-out labeled corpus scored for
|
|
30
|
+
precision/recall. If a vendor changes its markers and a signature rots, that
|
|
31
|
+
test fails rather than silently lowering field accuracy.
|
|
32
|
+
- The benchmark corpus is deliberately **disjoint** from the live canaries
|
|
33
|
+
(`fortress.theplumber.dev`, `bot.sannysoft.com`) so we measure the detector,
|
|
34
|
+
not one target.
|
|
35
|
+
|
|
36
|
+
## Adding / editing a vendor
|
|
37
|
+
|
|
38
|
+
1. Edit `CORPUS_JSON` in `src/antibot.rs`. Patterns are RE2-style (no
|
|
39
|
+
backreferences / lookaround) so they run under the linear-time `regex`
|
|
40
|
+
engine and are safe on attacker-controlled input. Matched case-insensitively
|
|
41
|
+
against the normalized `S:`/`H:`/`B:` form.
|
|
42
|
+
- `H:` patterns are anchored at the header line start (`h:server: …`).
|
|
43
|
+
- `B:` patterns match their marker *anywhere* in the (bounded) body.
|
|
44
|
+
- Put markers that only appear during an **active block** in `challenge[]`;
|
|
45
|
+
put mere-presence markers (CDN headers) in `signals[]`.
|
|
46
|
+
2. Add a labeled fixture to `tests/antibot_accuracy.rs`.
|
|
47
|
+
3. Bump `CORPUS_VERSION`.
|
|
48
|
+
4. `cargo test -p void_crawl_core antibot` + `--test antibot_accuracy`.
|
|
49
|
+
|
|
50
|
+
## Vendor coverage
|
|
51
|
+
|
|
52
|
+
WAF/CDN: Cloudflare, Akamai, Imperva/Incapsula, AWS WAF, F5 BigIP, Sucuri,
|
|
53
|
+
CloudFront. Bot detection: DataDome, PerimeterX/HUMAN, Kasada. Challenge
|
|
54
|
+
widgets: reCAPTCHA, hCaptcha (Turnstile is folded into the `cloudflare` vendor).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "void_crawl_core"
|
|
3
|
-
version = "0.3.
|
|
3
|
+
version = "0.3.5"
|
|
4
4
|
edition.workspace = true
|
|
5
5
|
license.workspace = true
|
|
6
6
|
rust-version.workspace = true
|
|
@@ -22,6 +22,9 @@ futures = "0.3"
|
|
|
22
22
|
thiserror = "2"
|
|
23
23
|
serde = { version = "1", features = ["derive"] }
|
|
24
24
|
serde_json = "1"
|
|
25
|
+
# Linear-time (RE2-style) regex engine for anti-bot vendor fingerprinting.
|
|
26
|
+
# No backtracking → safe to run on attacker-controlled responses every fetch.
|
|
27
|
+
regex = "1"
|
|
25
28
|
reqwest = { version = "0.13", default-features = false, features = ["rustls-no-provider", "json"] }
|
|
26
29
|
rustls = { version = "0.23", default-features = false, features = ["ring", "std", "tls12"] }
|
|
27
30
|
tempfile = "3"
|