pub mod captcha_manager;
pub mod cookie_manager;
pub mod injection_tracker;
pub mod js_challenge_manager;
pub mod progression_manager;
pub use captcha_manager::{CaptchaChallenge, CaptchaConfig, CaptchaManager, CaptchaStats};
pub use cookie_manager::{CookieChallenge, CookieConfig, CookieError, CookieManager, CookieStats};
pub use injection_tracker::{
HeadlessIndicators, InjectionRecord, InjectionSummary, InjectionTracker,
InjectionTrackerConfig, InjectionTrackerStats,
};
pub use js_challenge_manager::{
JsChallenge, JsChallengeConfig, JsChallengeManager, JsChallengeStats,
};
pub use progression_manager::{
ActorChallengeState, ChallengeLevel, ProgressionConfig, ProgressionManager, ProgressionStats,
ProgressionStatsSnapshot,
};
#[derive(Debug, Clone)]
pub enum ChallengeResponse {
Allow,
Cookie {
name: String,
value: String,
max_age: u64,
http_only: bool,
secure: bool,
},
JsChallenge {
html: String,
expected_solution: String,
expires_at: u64,
},
Captcha { html: String, session_id: String },
Tarpit { delay_ms: u64 },
Block { html: String, status_code: u16 },
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ValidationResult {
Valid,
Invalid(String),
Expired,
NotFound,
}
pub trait Interrogator: Send + Sync {
fn name(&self) -> &'static str;
fn challenge_level(&self) -> u8;
fn generate_challenge(&self, actor_id: &str) -> ChallengeResponse;
fn validate_response(&self, actor_id: &str, response: &str) -> ValidationResult;
fn should_escalate(&self, actor_id: &str) -> bool;
}