From 596983733f18a440da930fefe865c726df78cf16 Mon Sep 17 00:00:00 2001 From: KeyCode17 Date: Sat, 8 Aug 2026 00:53:33 +0700 Subject: [PATCH 1/2] build: wire up the documented `cargo xtask` alias ADR-0016, the root README and xtask's own README all invoke `cargo xtask `, but no .cargo/config.toml existed, so the alias resolved to nothing and every documented invocation failed with "no such command". Contributors had to know to run `cargo run -p xtask --` instead. --- .cargo/config.toml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .cargo/config.toml diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..9741f11 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,2 @@ +[alias] +xtask = "run --quiet --package xtask --" From 2820171adbc21b4b470f2b7b124f803d47d717e9 Mon Sep 17 00:00:00 2001 From: KeyCode17 Date: Sat, 8 Aug 2026 00:54:09 +0700 Subject: [PATCH 2/2] chore: bump to 1.10.0 --- Cargo.lock | 36 ++++++++++++++++++------------------ Cargo.toml | 34 +++++++++++++++++----------------- README.md | 2 +- 3 files changed, 36 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9d97658..01d0ac6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1485,7 +1485,7 @@ dependencies = [ [[package]] name = "px-cli" -version = "1.9.0" +version = "1.10.0" dependencies = [ "anyhow", "argon2", @@ -1504,7 +1504,7 @@ dependencies = [ [[package]] name = "px-server" -version = "1.9.0" +version = "1.10.0" dependencies = [ "anyhow", "argon2", @@ -1537,7 +1537,7 @@ dependencies = [ [[package]] name = "pxsolver-auth" -version = "1.9.0" +version = "1.10.0" dependencies = [ "argon2", "async-trait", @@ -1554,7 +1554,7 @@ dependencies = [ [[package]] name = "pxsolver-cache" -version = "1.9.0" +version = "1.10.0" dependencies = [ "async-trait", "dashmap", @@ -1566,7 +1566,7 @@ dependencies = [ [[package]] name = "pxsolver-camoufox" -version = "1.9.0" +version = "1.10.0" dependencies = [ "async-trait", "fantoccini", @@ -1584,7 +1584,7 @@ dependencies = [ [[package]] name = "pxsolver-captcha" -version = "1.9.0" +version = "1.10.0" dependencies = [ "async-trait", "pxsolver-errors", @@ -1593,7 +1593,7 @@ dependencies = [ [[package]] name = "pxsolver-cloudflare" -version = "1.9.0" +version = "1.10.0" dependencies = [ "async-trait", "pxsolver-core", @@ -1605,7 +1605,7 @@ dependencies = [ [[package]] name = "pxsolver-core" -version = "1.9.0" +version = "1.10.0" dependencies = [ "serde", "serde_json", @@ -1614,7 +1614,7 @@ dependencies = [ [[package]] name = "pxsolver-datadome" -version = "1.9.0" +version = "1.10.0" dependencies = [ "async-trait", "pxsolver-errors", @@ -1623,7 +1623,7 @@ dependencies = [ [[package]] name = "pxsolver-detector" -version = "1.9.0" +version = "1.10.0" dependencies = [ "pxsolver-core", "regex", @@ -1631,7 +1631,7 @@ dependencies = [ [[package]] name = "pxsolver-errors" -version = "1.9.0" +version = "1.10.0" dependencies = [ "axum", "serde", @@ -1640,7 +1640,7 @@ dependencies = [ [[package]] name = "pxsolver-harvester" -version = "1.9.0" +version = "1.10.0" dependencies = [ "async-trait", "chromiumoxide", @@ -1653,7 +1653,7 @@ dependencies = [ [[package]] name = "pxsolver-native" -version = "1.9.0" +version = "1.10.0" dependencies = [ "async-trait", "futures", @@ -1672,7 +1672,7 @@ dependencies = [ [[package]] name = "pxsolver-perimeterx" -version = "1.9.0" +version = "1.10.0" dependencies = [ "async-trait", "pxsolver-core", @@ -1686,7 +1686,7 @@ dependencies = [ [[package]] name = "pxsolver-pipeline" -version = "1.9.0" +version = "1.10.0" dependencies = [ "async-trait", "pxsolver-core", @@ -1698,7 +1698,7 @@ dependencies = [ [[package]] name = "pxsolver-turnstile" -version = "1.9.0" +version = "1.10.0" dependencies = [ "async-trait", "pxsolver-errors", @@ -1707,7 +1707,7 @@ dependencies = [ [[package]] name = "pxsolver-types" -version = "1.9.0" +version = "1.10.0" dependencies = [ "serde", "serde_json", @@ -1715,7 +1715,7 @@ dependencies = [ [[package]] name = "pxsolver-validation" -version = "1.9.0" +version = "1.10.0" dependencies = [ "axum", "pxsolver-errors", diff --git a/Cargo.toml b/Cargo.toml index 584641e..00a2ef8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,7 @@ members = [ ] [workspace.package] -version = "1.9.0" +version = "1.10.0" edition = "2024" rust-version = "1.95" license = "AGPL-3.0-or-later" @@ -38,22 +38,22 @@ unsafe_code = "forbid" # so `cargo publish` can resolve to the registry copy. Each entry's package # = pxsolver-* (the crates.io name); the local alias `px-*` is kept so # source files can continue to `use px_core::…` unchanged. -px-core = { path = "px-core", version = "1.9.0", package = "pxsolver-core" } -px-types = { path = "px-types", version = "1.9.0", package = "pxsolver-types" } -px-errors = { path = "px-errors", version = "1.9.0", package = "pxsolver-errors" } -px-validation = { path = "px-validation", version = "1.9.0", package = "pxsolver-validation" } -px-cache = { path = "px-cache", version = "1.9.0", package = "pxsolver-cache" } -px-detector = { path = "px-detector", version = "1.9.0", package = "pxsolver-detector" } -px-harvester = { path = "px-harvester", version = "1.9.0", package = "pxsolver-harvester" } -px-pipeline = { path = "px-pipeline", version = "1.9.0", package = "pxsolver-pipeline" } -px-perimeterx = { path = "px-perimeterx", version = "1.9.0", package = "pxsolver-perimeterx" } -px-cloudflare = { path = "px-cloudflare", version = "1.9.0", package = "pxsolver-cloudflare" } -px-turnstile = { path = "px-turnstile", version = "1.9.0", package = "pxsolver-turnstile" } -px-captcha = { path = "px-captcha", version = "1.9.0", package = "pxsolver-captcha" } -px-datadome = { path = "px-datadome", version = "1.9.0", package = "pxsolver-datadome" } -px-native = { path = "px-native", version = "1.9.0", package = "pxsolver-native" } -px-auth = { path = "px-auth", version = "1.9.0", package = "pxsolver-auth" } -px-camoufox = { path = "px-camoufox", version = "1.9.0", package = "pxsolver-camoufox" } +px-core = { path = "px-core", version = "1.10.0", package = "pxsolver-core" } +px-types = { path = "px-types", version = "1.10.0", package = "pxsolver-types" } +px-errors = { path = "px-errors", version = "1.10.0", package = "pxsolver-errors" } +px-validation = { path = "px-validation", version = "1.10.0", package = "pxsolver-validation" } +px-cache = { path = "px-cache", version = "1.10.0", package = "pxsolver-cache" } +px-detector = { path = "px-detector", version = "1.10.0", package = "pxsolver-detector" } +px-harvester = { path = "px-harvester", version = "1.10.0", package = "pxsolver-harvester" } +px-pipeline = { path = "px-pipeline", version = "1.10.0", package = "pxsolver-pipeline" } +px-perimeterx = { path = "px-perimeterx", version = "1.10.0", package = "pxsolver-perimeterx" } +px-cloudflare = { path = "px-cloudflare", version = "1.10.0", package = "pxsolver-cloudflare" } +px-turnstile = { path = "px-turnstile", version = "1.10.0", package = "pxsolver-turnstile" } +px-captcha = { path = "px-captcha", version = "1.10.0", package = "pxsolver-captcha" } +px-datadome = { path = "px-datadome", version = "1.10.0", package = "pxsolver-datadome" } +px-native = { path = "px-native", version = "1.10.0", package = "pxsolver-native" } +px-auth = { path = "px-auth", version = "1.10.0", package = "pxsolver-auth" } +px-camoufox = { path = "px-camoufox", version = "1.10.0", package = "pxsolver-camoufox" } anyhow = "1.0" argon2 = "0.5" diff --git a/README.md b/README.md index 1834a4b..2a610ba 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ A Rust-built solver service for PerimeterX (HUMAN Security) protection. Given a target URL on a per-domain allowlist, returns a valid `_px3` cookie bundle that a downstream authorized client can use to issue requests as if from a real browser. -> **Status:** v1.9.0, published to crates.io as the `pxsolver-*` family of crates. MVP gate hit at v1.0.0; v1.1.0 added a Camoufox-backed Cloudflare bypass path; v1.2.0 renamed the published library crates; v1.8.0 activated native `_px3` sensor synthesis ([ADR-0024](docs/adr/0024-activate-native-px3-sensor-synthesis.md)); v1.9.0 makes the per-request egress proxy real end to end ([ADR-0025](docs/adr/0025-egress-proxy-propagation-contract.md)). See [GitHub Releases](https://github.com/KeyCode17/px-solver/releases) for the per-version notes. +> **Status:** v1.10.0, published to crates.io as the `pxsolver-*` family of crates. MVP gate hit at v1.0.0; v1.1.0 added a Camoufox-backed Cloudflare bypass path; v1.2.0 renamed the published library crates; v1.8.0 activated native `_px3` sensor synthesis ([ADR-0024](docs/adr/0024-activate-native-px3-sensor-synthesis.md)); v1.9.0 made the per-request egress proxy real end to end ([ADR-0025](docs/adr/0025-egress-proxy-propagation-contract.md)); v1.10.0 carries per-crate documentation only — no code change from v1.9.0. See [GitHub Releases](https://github.com/KeyCode17/px-solver/releases) for the per-version notes. > > ⚠️ **v1.9.0 is source-breaking despite the minor bump.** `ChallengeHandler::solve` and `SolveDispatcher::solve` take a `SolveAction` / `SolveRequest` instead of `&PageHtml` / `&str`. If you implement `ChallengeHandler` outside this workspace, add the parameter when upgrading; the rest of the published surface is unchanged.