pub type BrowserId = u32;
#[derive(Clone, Copy, Debug, PartialEq, Eq, serde::Serialize)]
#[serde(rename_all = "lowercase")]
pub enum Phase {
Idle,
Navigating,
Challenge,
Verifying,
Cleared,
Blocked,
Failed,
}
pub trait Observer: Send + Sync {
fn register(&self, display: Option<String>) -> BrowserId;
fn phase(&self, id: BrowserId, phase: Phase);
fn navigating(&self, id: BrowserId, url: &str);
fn set_user_agent(&self, id: BrowserId, ua: String);
fn event(&self, msg: String);
fn clicked(&self, id: BrowserId, x: i32, y: i32);
fn failed(&self, id: BrowserId, screenshot: Option<Vec<u8>>, summary: String, elapsed_ms: u64);
fn deregister(&self, id: BrowserId);
}