Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[alias]
xtask = "run --quiet --package xtask --"
36 changes: 18 additions & 18 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

34 changes: 17 additions & 17 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down
Loading