[package]
edition = "2021"
rust-version = "1.85"
name = "captchaforge"
version = "0.2.39"
authors = ["Santh Project <contact@santh.dev>"]
build = false
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Captcha detection and solving for Firefox and BiDi-driven browsers. Detection, vendor solver scaffolding, trusted cross-origin click delivery into nested OOPIFs, and stealth personas are implemented and tested; broad live-vendor solve rates are not yet benchmarked."
readme = "README.md"
keywords = [
"captcha",
"headless-browser",
"turnstile",
"recaptcha",
]
categories = [
"web-programming",
"authentication",
]
license = "MIT OR Apache-2.0"
repository = "https://github.com/santhreal/captchaforge"
[package.metadata.binstall]
pkg-url = "{ repo }/releases/download/v{ version }/captchaforge-v{ version }-{ target }.{ archive-format }"
bin-dir = "captchaforge-v{ version }-{ target }/{ bin }{ binary-ext }"
[package.metadata.binstall.overrides.x86_64-pc-windows-msvc]
pkg-fmt = "zip"
[features]
default = []
tls-impersonate = ["guise/tls-impersonate"]
vision = [
"dep:ort",
"dep:image",
"dep:ndarray",
]
[lib]
name = "captchaforge"
path = "src/lib.rs"
[[example]]
name = "03_decoy_classify"
path = "examples/03_decoy_classify.rs"
[[example]]
name = "04_bandit_chooser"
path = "examples/04_bandit_chooser.rs"
[[example]]
name = "07_real_waf_bench"
path = "examples/07_real_waf_bench.rs"
[[example]]
name = "08_prometheus_exporter"
path = "examples/08_prometheus_exporter.rs"
[[example]]
name = "architecture_proof"
path = "examples/architecture_proof.rs"
[[example]]
name = "solve_url_simple"
path = "examples/solve_url_simple.rs"
[[test]]
name = "behavioral_trusted"
path = "tests/behavioral_trusted.rs"
[[test]]
name = "captcha_type_display"
path = "tests/captcha_type_display.rs"
[[test]]
name = "chaos_behavior"
path = "tests/chaos_behavior.rs"
[[test]]
name = "chaos_frame"
path = "tests/chaos_frame.rs"
[[test]]
name = "chaos_resilience"
path = "tests/chaos_resilience.rs"
[[test]]
name = "chaos_solver"
path = "tests/chaos_solver.rs"
[[test]]
name = "community_rules"
path = "tests/community_rules.rs"
[[test]]
name = "community_rules_schema"
path = "tests/community_rules_schema.rs"
[[test]]
name = "cve_replay"
path = "tests/cve_replay.rs"
[[test]]
name = "cve_replay_decoy"
path = "tests/cve_replay_decoy.rs"
[[test]]
name = "fuzz_smoke"
path = "tests/fuzz_smoke.rs"
[[test]]
name = "fuzz_solver_chain"
path = "tests/fuzz_solver_chain.rs"
[[test]]
name = "helm_chart_structure"
path = "tests/helm_chart_structure.rs"
[[test]]
name = "integration"
path = "tests/integration.rs"
[[test]]
name = "integration_behavior"
path = "tests/integration_behavior.rs"
[[test]]
name = "integration_browser"
path = "tests/integration_browser.rs"
[[test]]
name = "integration_chain_wires"
path = "tests/integration_chain_wires.rs"
[[test]]
name = "integration_concurrent"
path = "tests/integration_concurrent.rs"
[[test]]
name = "integration_cross_module"
path = "tests/integration_cross_module.rs"
[[test]]
name = "integration_detect_all_types"
path = "tests/integration_detect_all_types.rs"
[[test]]
name = "integration_errors"
path = "tests/integration_errors.rs"
[[test]]
name = "integration_frame"
path = "tests/integration_frame.rs"
[[test]]
name = "integration_solvers"
path = "tests/integration_solvers.rs"
[[test]]
name = "integration_stealth_contract"
path = "tests/integration_stealth_contract.rs"
[[test]]
name = "local_scorecard"
path = "tests/local_scorecard.rs"
[[test]]
name = "mdbook_structure"
path = "tests/mdbook_structure.rs"
[[test]]
name = "multi_step_trusted_click"
path = "tests/multi_step_trusted_click.rs"
[[test]]
name = "oracle_cross_origin_presence"
path = "tests/oracle_cross_origin_presence.rs"
[[test]]
name = "pattern_store"
path = "tests/pattern_store.rs"
[[test]]
name = "prometheus_rules_structure"
path = "tests/prometheus_rules_structure.rs"
[[test]]
name = "property_audio_dsp"
path = "tests/property_audio_dsp.rs"
[[test]]
name = "property_behavior"
path = "tests/property_behavior.rs"
[[test]]
name = "property_captcha_type"
path = "tests/property_captcha_type.rs"
[[test]]
name = "property_detect"
path = "tests/property_detect.rs"
[[test]]
name = "property_frame"
path = "tests/property_frame.rs"
[[test]]
name = "property_frame_graph"
path = "tests/property_frame_graph.rs"
[[test]]
name = "property_json"
path = "tests/property_json.rs"
[[test]]
name = "property_pattern"
path = "tests/property_pattern.rs"
[[test]]
name = "property_solve_method"
path = "tests/property_solve_method.rs"
[[test]]
name = "property_solver"
path = "tests/property_solver.rs"
[[test]]
name = "property_token_shapes"
path = "tests/property_token_shapes.rs"
[[test]]
name = "property_url"
path = "tests/property_url.rs"
[[test]]
name = "reynard_webdriver"
path = "tests/reynard_webdriver.rs"
[[test]]
name = "rule_fixture_contract"
path = "tests/rule_fixture_contract.rs"
[[test]]
name = "scale_property"
path = "tests/scale_property.rs"
[[test]]
name = "serde_roundtrip"
path = "tests/serde_roundtrip.rs"
[[test]]
name = "snapshot_structures"
path = "tests/snapshot_structures.rs"
[[test]]
name = "snapshot_wire_shapes"
path = "tests/snapshot_wire_shapes.rs"
[[test]]
name = "stealth_coherence"
path = "tests/stealth_coherence.rs"
[[test]]
name = "synthetic_corpus"
path = "tests/synthetic_corpus.rs"
[[test]]
name = "training_pipeline"
path = "tests/training_pipeline.rs"
[[test]]
name = "training_pipeline_end_to_end"
path = "tests/training_pipeline_end_to_end.rs"
[[test]]
name = "turnstile_interactive_live"
path = "tests/turnstile_interactive_live.rs"
[[test]]
name = "vendor_contract"
path = "tests/vendor_contract.rs"
[[test]]
name = "vendor_solve_e2e"
path = "tests/vendor_solve_e2e.rs"
[[test]]
name = "vision_e2e"
path = "tests/vision_e2e.rs"
[[test]]
name = "vision_integration"
path = "tests/vision_integration.rs"
[[test]]
name = "vision_property"
path = "tests/vision_property.rs"
[[test]]
name = "warmup_trusted"
path = "tests/warmup_trusted.rs"
[[test]]
name = "webdriver_native_pref"
path = "tests/webdriver_native_pref.rs"
[[test]]
name = "wirings"
path = "tests/wirings.rs"
[[bench]]
name = "hot_path"
path = "benches/hot_path.rs"
harness = false
[dependencies.anyhow]
version = "1"
[dependencies.async-trait]
version = "0.1"
[dependencies.base64]
version = "0.22"
[dependencies.bytes]
version = "1"
[dependencies.dirs]
version = "6"
[dependencies.erroracle]
version = "0.2.1"
[dependencies.futures-util]
version = "0.3"
[dependencies.guise]
version = "0.1.2"
features = [
"browser",
"http-headers",
"human",
"rotation",
]
default-features = false
[dependencies.image]
version = "0.25"
optional = true
[dependencies.ndarray]
version = "0.16"
optional = true
[dependencies.ort]
version = "2.0.0-rc.12"
features = [
"cuda",
"tensorrt",
]
optional = true
[dependencies.rand]
version = "0.8"
[dependencies.reqwest]
version = "0.12"
features = [
"json",
"multipart",
"rustls-tls",
]
default-features = false
[dependencies.runtime-foxdriver]
version = "0.1.0"
[dependencies.rustenium]
version = "1.1.10"
[dependencies.rustenium-bidi-definitions]
version = "0.1.1"
[dependencies.rustenium-core]
version = "1.1.1"
[dependencies.scanclient]
version = "0.2.1"
[dependencies.serde]
version = "1"
features = ["derive"]
[dependencies.serde_json]
version = "1"
[dependencies.sha2]
version = "0.10"
[dependencies.tempfile]
version = "3"
[dependencies.thiserror]
version = "1"
[dependencies.tokio]
version = "1"
features = ["full"]
[dependencies.toml]
version = "0.8"
[dependencies.tracing]
version = "0.1"
[dependencies.url]
version = "2"
[dev-dependencies.criterion]
version = "0.5"
features = ["html_reports"]
[dev-dependencies.insta]
version = "1.41"
features = [
"json",
"redactions",
]
[dev-dependencies.proptest]
version = "1.5"
[dev-dependencies.scraper]
version = "0.20"
[dev-dependencies.which]
version = "7"
[lints.rust]
unsafe_code = "forbid"