Browser automation DSL with humanized interactions, locators, and auto-waiting
| Tier | infrastructure |
| Role | unclassified (baselined) |
| Path | crates/infrastructure/browser-automation |
| Edition | 2021 |
| Targets | first_party_xray, human_browse, mouse_path, privacy_xray, scan_site, infrastructure_browser_automation |
| Public items | 183 across 17 modules |
| Tests | 141 |
What it is for
This crate does not document itself. No //! block on its entry point. The facts below are complete; the reason this crate exists is not written down anywhere, and belongs in src/lib.rs rather than here.
Capabilities
ActionEngine
_No module-level documentation is present in the source._
| Item |
|---|
pub struct ActionEngine<'a> |
ActionEngine<'a>:click
_No module-level documentation is present in the source._
| Item |
|---|
ActionEngine<'a> :: fn click(& mut self, locator : & Locator) -> Result <(), AutomationError> |
ActionEngine<'a> :: fn click_with_options(& mut self, locator : & Locator, opts : & ActionOptions,) -> Result <(), AutomationError> |
ActionEngine<'a>:detect
_No module-level documentation is present in the source._
| Item |
|---|
ActionEngine<'a> :: fn detect_bot_detectors(& self) -> Result <Vec <BotDetectorInfo>, AutomationError> |
ActionEngine<'a>:navigate
_No module-level documentation is present in the source._
| Item |
|---|
ActionEngine<'a> :: fn navigate(& mut self, url : & str) -> Result <(), AutomationError> |
ActionEngine<'a>:new
_No module-level documentation is present in the source._
| Item |
|---|
ActionEngine<'a> :: fn new(session : & 'a CdpSession, humanizer : Humanizer) -> Self |
ActionEngine<'a>:policy
_No module-level documentation is present in the source._
| Item |
|---|
ActionEngine<'a> :: fn policy(& self) -> & SessionPolicy |
ActionEngine<'a>:read
_No module-level documentation is present in the source._
| Item |
|---|
ActionEngine<'a> :: fn read_text(& mut self, locator : & Locator) -> Result <String, AutomationError> |
ActionEngine<'a> :: fn read_text_with_options(& mut self, locator : & Locator, opts : & ActionOptions,) -> Result <String, AutomationError> |
ActionEngine<'a>:refresh
_No module-level documentation is present in the source._
| Item |
|---|
ActionEngine<'a> :: fn refresh_state(& mut self) -> Result <(), AutomationError> |
ActionEngine<'a>:screenshot
_No module-level documentation is present in the source._
| Item |
|---|
ActionEngine<'a> :: fn screenshot(& self) -> Result <String, AutomationError> |
ActionEngine<'a>:state
_No module-level documentation is present in the source._
| Item |
|---|
ActionEngine<'a> :: fn state(& self) -> & PageState |
ActionEngine<'a>:type
_No module-level documentation is present in the source._
| Item |
|---|
ActionEngine<'a> :: fn type_text(& mut self, locator : & Locator, text : & str) -> Result <(), AutomationError> |
ActionEngine<'a> :: fn type_text_with_options(& mut self, locator : & Locator, text : & str, opts : & ActionOptions,) -> Result <(), AutomationError> |
ActionEngine<'a>:with
_No module-level documentation is present in the source._
| Item |
|---|
ActionEngine<'a> :: fn with_options(session : & 'a CdpSession, humanizer : Humanizer, wait : WaitOptions, policy : SessionPolicy,) -> Self |
BotDetectorInfo
_No module-level documentation is present in the source._
| Item |
|---|
pub struct BotDetectorInfo |
SessionPolicy
_No module-level documentation is present in the source._
| Item |
|---|
pub struct SessionPolicy |
SessionPolicy :: fn default() -> Self |
SessionPolicy :: fn permissive() -> Self |
action_monitor (other)
_No module-level documentation is present in the source._
| Item |
|---|
fn diff(before : & ActionCheckpoint, after : & ActionCheckpoint) -> ActionImpact |
ActionCheckpoint
_No module-level documentation is present in the source._
| Item |
|---|
pub struct ActionCheckpoint |
fn checkpoint(session : & infrastructure_browser_cdp::CdpSession,) -> Result <ActionCheckpoint, crate::error::AutomationError> |
ActionImpact
_No module-level documentation is present in the source._
| Item |
|---|
pub struct ActionImpact |
ActionImpact :: fn is_clean(& self) -> bool |
ActionImpact :: fn summary(& self) -> String |
ImpactSeverity
_No module-level documentation is present in the source._
| Item |
|---|
pub enum ImpactSeverity |
ImpactSeverity :: fn fmt(& self, f : & mut std::fmt::Formatter <'_>) -> std::fmt::Result |
ArtifactKind
_No module-level documentation is present in the source._
| Item |
|---|
pub enum ArtifactKind |
CookieClaim
_No module-level documentation is present in the source._
| Item |
|---|
pub struct CookieClaim |
CookieDecodeResult
_No module-level documentation is present in the source._
| Item |
|---|
pub struct CookieDecodeResult |
fn decode_cookie(name : & str, value : & str) -> CookieDecodeResult |
DecodeStatus
_No module-level documentation is present in the source._
| Item |
|---|
pub enum DecodeStatus |
DecodedArtifact
_No module-level documentation is present in the source._
| Item |
|---|
pub struct DecodedArtifact |
PiiClass
_No module-level documentation is present in the source._
| Item |
|---|
pub enum PiiClass |
Detection
Detection engine — evaluates rules against collected page evidence.
| Item |
|---|
pub struct Detection |
DetectionCategory
Detection engine — evaluates rules against collected page evidence.
| Item |
|---|
pub enum DetectionCategory |
DetectionCategory :: fn fmt(& self, f : & mut std::fmt::Formatter <'_>) -> std::fmt::Result |
DetectionCondition
Detection engine — evaluates rules against collected page evidence.
| Item |
|---|
pub struct DetectionCondition |
DetectionEmission
Detection engine — evaluates rules against collected page evidence.
| Item |
|---|
pub struct DetectionEmission |
DetectionEngine
Detection engine — evaluates rules against collected page evidence.
| Item |
|---|
pub struct DetectionEngine |
DetectionEngine :: fn with_defaults() -> Self |
DetectionEngine :: fn from_toml_file(path : & str) -> Self |
DetectionEngine :: fn from_toml(content : & str) -> Result <Self, String> |
DetectionEngine :: fn new(rules : Vec <DetectionRule>) -> Self |
DetectionEngine :: fn add_rules(& mut self, rules : Vec <DetectionRule>) |
DetectionEngine :: fn rule_count(& self) -> usize |
DetectionEngine :: fn evaluate(& self, evidence : & PageEvidence) -> DetectionResult |
DetectionResult
Detection engine — evaluates rules against collected page evidence.
| Item |
|---|
pub struct DetectionResult |
DetectionRule
Detection engine — evaluates rules against collected page evidence.
| Item |
|---|
pub struct DetectionRule |
EvidenceItem
Detection engine — evaluates rules against collected page evidence.
| Item |
|---|
pub struct EvidenceItem |
MatchPolicy
Detection engine — evaluates rules against collected page evidence.
| Item |
|---|
pub enum MatchPolicy |
MatchedEvidence
Detection engine — evaluates rules against collected page evidence.
| Item |
|---|
pub struct MatchedEvidence |
PageEvidence
Detection engine — evaluates rules against collected page evidence.
| Item |
|---|
pub struct PageEvidence |
PatternKind
Detection engine — evaluates rules against collected page evidence.
| Item |
|---|
pub enum PatternKind |
RuleSource
Detection engine — evaluates rules against collected page evidence.
| Item |
|---|
pub enum RuleSource |
SourceType
Detection engine — evaluates rules against collected page evidence.
| Item |
|---|
pub enum SourceType |
BrowserState
_No module-level documentation is present in the source._
| Item |
|---|
pub struct BrowserState |
DetectionReport
_No module-level documentation is present in the source._
| Item |
|---|
fn scan_page(session : & CdpSession) -> Result <DetectionReport, AutomationError> |
pub struct DetectionReport |
DetectionReport :: fn threat_level(& self) -> ThreatLevel |
DetectionReport :: fn summary(& self) -> String |
EndpointMatch
_No module-level documentation is present in the source._
| Item |
|---|
pub struct EndpointMatch |
ScriptMatch
_No module-level documentation is present in the source._
| Item |
|---|
pub struct ScriptMatch |
ThreatLevel
_No module-level documentation is present in the source._
| Item |
|---|
pub enum ThreatLevel |
ThreatLevel :: fn fmt(& self, f : & mut std::fmt::Formatter <'_>) -> std::fmt::Result |
AutomationError
_No module-level documentation is present in the source._
| Item |
|---|
pub enum AutomationError |
fingerprint (other)
_No module-level documentation is present in the source._
| Item |
|---|
fn canvas_hash_fnv1a(data_url : & str) -> i64 |
pub const COLLECTOR_JS: & str |
FingerprintAudit
_No module-level documentation is present in the source._
| Item |
|---|
fn audit_fingerprint(session : & CdpSession) -> Result <FingerprintAudit, AutomationError> |
pub struct FingerprintAudit |
FingerprintAudit :: fn red_flags(& self) -> Vec <String> |
StealthReport
_No module-level documentation is present in the source._
| Item |
|---|
fn apply_stealth(session : & CdpSession) -> Result <StealthReport, AutomationError> |
pub struct StealthReport |
StealthReport :: fn all_applied(& self) -> bool |
BehavioralTracking
_No module-level documentation is present in the source._
| Item |
|---|
pub struct BehavioralTracking |
BotDetectionInfo
_No module-level documentation is present in the source._
| Item |
|---|
pub struct BotDetectionInfo |
FirstPartyReport
_No module-level documentation is present in the source._
| Item |
|---|
fn audit_first_party(session : & CdpSession) -> Result <FirstPartyReport, AutomationError> |
pub struct FirstPartyReport |
FirstPartyReport :: fn grade(& self) -> & 'static str |
FirstPartyReport :: fn summary(& self) -> String |
FirstPartyScore
_No module-level documentation is present in the source._
| Item |
|---|
pub struct FirstPartyScore |
PersistenceInfo
_No module-level documentation is present in the source._
| Item |
|---|
pub struct PersistenceInfo |
StorageFootprint
_No module-level documentation is present in the source._
| Item |
|---|
pub struct StorageFootprint |
TelemetryInfo
_No module-level documentation is present in the source._
| Item |
|---|
pub struct TelemetryInfo |
TrackingKey
_No module-level documentation is present in the source._
| Item |
|---|
pub struct TrackingKey |
TransparencyInfo
_No module-level documentation is present in the source._
| Item |
|---|
pub struct TransparencyInfo |
FormField
_No module-level documentation is present in the source._
| Item |
|---|
pub struct FormField |
FormInfo
_No module-level documentation is present in the source._
| Item |
|---|
pub struct FormInfo |
FormReport
_No module-level documentation is present in the source._
| Item |
|---|
fn scan_forms(session : & CdpSession) -> Result <FormReport, AutomationError> |
pub struct FormReport |
HumanProfile
_No module-level documentation is present in the source._
| Item |
|---|
pub struct HumanProfile |
HumanProfile :: fn default_profile() -> Self |
HumanProfile :: fn fast_typist() -> Self |
HumanProfile :: fn careful() -> Self |
Humanizer:Humanizer
_No module-level documentation is present in the source._
| Item |
|---|
pub struct Humanizer |
Humanizer:action
_No module-level documentation is present in the source._
| Item |
|---|
Humanizer :: fn action_delay(& mut self) -> Duration |
Humanizer:click
_No module-level documentation is present in the source._
| Item |
|---|
Humanizer :: fn click_hold(& mut self) -> Duration |
Humanizer:dwell
_No module-level documentation is present in the source._
| Item |
|---|
Humanizer :: fn dwell_short(& mut self) -> Duration |
Humanizer :: fn dwell_long(& mut self) -> Duration |
Humanizer:keystroke
_No module-level documentation is present in the source._
| Item |
|---|
Humanizer :: fn keystroke_delay(& mut self) -> Duration |
Humanizer:mouse
_No module-level documentation is present in the source._
| Item |
|---|
Humanizer :: fn mouse_path(& mut self, from : Point, to : Point) -> Vec <Point> |
Humanizer :: fn mouse_step_delay(& mut self, total_distance : f64, steps : usize) -> Duration |
Humanizer:new
_No module-level documentation is present in the source._
| Item |
|---|
Humanizer :: fn new(profile : HumanProfile) -> Self |
Humanizer:plan
_No module-level documentation is present in the source._
| Item |
|---|
Humanizer :: fn plan_typing(& mut self, text : & str) -> Vec <TypingEvent> |
Humanizer :: fn plan_scroll(& mut self, current_y : f64, target_y : f64) -> Vec <ScrollEvent> |
Humanizer :: fn plan_mouse_move(& mut self, from : Point, to : Point) -> Vec <MouseMoveEvent> |
Humanizer:pre
_No module-level documentation is present in the source._
| Item |
|---|
Humanizer :: fn pre_click_pause(& mut self) -> Duration |
Humanizer:profile
_No module-level documentation is present in the source._
| Item |
|---|
Humanizer :: fn profile(& self) -> & HumanProfile |
Humanizer:scan
_No module-level documentation is present in the source._
| Item |
|---|
Humanizer :: fn scan_points_near(& mut self, target : Point, radius : f64) -> Vec <Point> |
Humanizer :: fn scan_pause(& mut self) -> Duration |
Humanizer:should
_No module-level documentation is present in the source._
| Item |
|---|
Humanizer :: fn should_typo(& mut self) -> bool |
Humanizer :: fn should_trackpad_bump(& mut self) -> bool |
Humanizer :: fn should_scan_before_click(& mut self) -> bool |
Humanizer:trackpad
_No module-level documentation is present in the source._
| Item |
|---|
Humanizer :: fn trackpad_bump(& mut self) -> Point |
Humanizer:typo
_No module-level documentation is present in the source._
| Item |
|---|
Humanizer :: fn typo_char(& mut self, intended : char) -> char |
Humanizer :: fn typo_reaction_delay(& mut self) -> Duration |
Humanizer:with
_No module-level documentation is present in the source._
| Item |
|---|
Humanizer :: fn with_seed(profile : HumanProfile, seed : u64) -> Self |
Humanizer:word
_No module-level documentation is present in the source._
| Item |
|---|
Humanizer :: fn word_pause(& mut self) -> Duration |
MouseMoveEvent
_No module-level documentation is present in the source._
| Item |
|---|
pub struct MouseMoveEvent |
Point
_No module-level documentation is present in the source._
| Item |
|---|
pub struct Point |
Point :: fn new(x : f64, y : f64) -> Self |
Point :: fn distance_to(& self, other : & Point) -> f64 |
ScrollEvent
_No module-level documentation is present in the source._
| Item |
|---|
pub enum ScrollEvent |
TypingEvent
_No module-level documentation is present in the source._
| Item |
|---|
pub enum TypingEvent |
JsLibrary
_No module-level documentation is present in the source._
| Item |
|---|
pub struct JsLibrary |
JsLibraryReport
_No module-level documentation is present in the source._
| Item |
|---|
fn detect_js_libraries(session : & CdpSession) -> Result <JsLibraryReport, AutomationError> |
pub struct JsLibraryReport |
Filter
_No module-level documentation is present in the source._
| Item |
|---|
pub enum Filter |
Filter :: fn fmt(& self, f : & mut std::fmt::Formatter <'_>) -> std::fmt::Result |
Locator
_No module-level documentation is present in the source._
| Item |
|---|
pub struct Locator |
Locator :: fn css(selector : & str) -> Self |
Locator :: fn xpath(expr : & str) -> Self |
Locator :: fn text(text : & str) -> Self |
Locator :: fn with_fallbacks(strategies : Vec <SelectorStrategy>) -> Self |
Locator :: fn within(self, parent : Locator) -> Self |
Locator :: fn filter(mut self, f : Filter) -> Self |
Locator :: fn strategies_ordered(& self) -> Vec <(usize, & SelectorStrategy)> |
ResolvedElement
_No module-level documentation is present in the source._
| Item |
|---|
pub struct ResolvedElement |
SelectorStrategy
_No module-level documentation is present in the source._
| Item |
|---|
pub enum SelectorStrategy |
SelectorStrategy :: fn fmt(& self, f : & mut std::fmt::Formatter <'_>) -> std::fmt::Result |
HeadingInfo
_No module-level documentation is present in the source._
| Item |
|---|
pub struct HeadingInfo |
HreflangLink
_No module-level documentation is present in the source._
| Item |
|---|
pub struct HreflangLink |
MetaSeoReport
_No module-level documentation is present in the source._
| Item |
|---|
fn extract_meta_seo(session : & CdpSession) -> Result <MetaSeoReport, AutomationError> |
pub struct MetaSeoReport |
MetaTag
_No module-level documentation is present in the source._
| Item |
|---|
pub struct MetaTag |
SeoInfo
_No module-level documentation is present in the source._
| Item |
|---|
pub struct SeoInfo |
StructuredDataBlock
_No module-level documentation is present in the source._
| Item |
|---|
pub struct StructuredDataBlock |
PageState
_No module-level documentation is present in the source._
| Item |
|---|
pub struct PageState |
PageState :: fn new() -> Self |
PageState :: fn default() -> Self |
ApiAccess
_No module-level documentation is present in the source._
| Item |
|---|
pub struct ApiAccess |
BehavioralSection
_No module-level documentation is present in the source._
| Item |
|---|
pub struct BehavioralSection |
CookieInfo
_No module-level documentation is present in the source._
| Item |
|---|
pub struct CookieInfo |
FingerprintingSection
_No module-level documentation is present in the source._
| Item |
|---|
pub struct FingerprintingSection |
NetworkSection
_No module-level documentation is present in the source._
| Item |
|---|
pub struct NetworkSection |
PrivacyReport
_No module-level documentation is present in the source._
| Item |
|---|
fn audit_privacy(session : & CdpSession) -> Result <PrivacyReport, AutomationError> |
pub struct PrivacyReport |
PrivacyReport :: fn grade(& self) -> & 'static str |
PrivacyReport :: fn summary(& self) -> String |
PrivacyScore
_No module-level documentation is present in the source._
| Item |
|---|
pub struct PrivacyScore |
ServiceWorkerInfo
_No module-level documentation is present in the source._
| Item |
|---|
pub struct ServiceWorkerInfo |
SessionStorageKey
_No module-level documentation is present in the source._
| Item |
|---|
pub struct SessionStorageKey |
StorageKeyInfo
_No module-level documentation is present in the source._
| Item |
|---|
pub struct StorageKeyInfo |
StorageSection
_No module-level documentation is present in the source._
| Item |
|---|
pub struct StorageSection |
ThirdPartyDomain
_No module-level documentation is present in the source._
| Item |
|---|
pub struct ThirdPartyDomain |
SecurityReport
_No module-level documentation is present in the source._
| Item |
|---|
fn audit_security(session : & CdpSession) -> Result <SecurityReport, AutomationError> |
pub struct SecurityReport |
SecurityReport :: fn grade(& self) -> & 'static str |
ActionMode
_No module-level documentation is present in the source._
| Item |
|---|
pub enum ActionMode |
ActionOptions
_No module-level documentation is present in the source._
| Item |
|---|
pub struct ActionOptions |
ActionOptions :: fn default() -> Self |
ActionabilityResult
_No module-level documentation is present in the source._
| Item |
|---|
pub struct ActionabilityResult |
ActionabilityResult :: fn is_actionable(& self) -> bool |
ActionabilityResult :: fn failure_reason(& self) -> Option <String> |
BoundingRect
_No module-level documentation is present in the source._
| Item |
|---|
pub struct BoundingRect |
BoundingRect :: fn center(& self) ->(f64, f64) |
BoundingRect :: fn has_area(& self) -> bool |
BoundingRect :: fn approx_eq(& self, other : & BoundingRect, tolerance : f64) -> bool |
ReadMode
_No module-level documentation is present in the source._
| Item |
|---|
pub enum ReadMode |
WaitOptions
_No module-level documentation is present in the source._
| Item |
|---|
pub struct WaitOptions |
WaitOptions :: fn default() -> Self |
WaitOptions :: fn fast() -> Self |
WaitOptions :: fn patient() -> Self |
How to use it
From `examples/first_party_xray.rs`:
use infrastructure_browser_automation::{audit_first_party, audit_privacy};
use infrastructure_browser_cdp::{BrowserEndpoint, DEFAULT_PORT};
fn main() {
let pattern = std::env::args().nth(1).unwrap_or_else(|| "whatsapp".into());
let ep = BrowserEndpoint::connect(&format!("http://localhost:{}", DEFAULT_PORT)).unwrap();
let target = ep
.find_target(|t| t.url.contains(&pattern) && t.websocket_url.is_some())
.unwrap()
.unwrap_or_else(|| {
eprintln!("No tab matching '{pattern}'");
std::process::exit(1);
});
println!("Target: {} — {}\n", target.title, target.url);
let session = ep.open_session(&target).unwrap();
From `examples/human_browse.rs`:
use infrastructure_browser_automation::humanizer::{HumanProfile, Humanizer, Point, ScrollEvent};
use infrastructure_browser_cdp::commands::{input, runtime};
use infrastructure_browser_cdp::{BrowserEndpoint, DEFAULT_PORT};
use std::thread;
use std::time::Duration;
fn main() {
let pattern = std::env::args()
.nth(1)
.unwrap_or_else(|| "google.com/search".into());
let ep = BrowserEndpoint::connect(&format!("http://localhost:{}", DEFAULT_PORT)).unwrap();
let target = ep
.find_target(|t| t.url.contains(&pattern) && t.websocket_url.is_some())
.unwrap()
.unwrap_or_else(|| {
eprintln!("No tab matching '{pattern}'");
std::process::exit(1);
Module structure
infrastructure_browser_automation
action_engineaction_monitorcookie_decodedetection_enginedetection_laberrorfingerprintfirst_party_auditform_scannerhumanizerjs_librarieslocatormeta_seopage_stateprivacy_auditsecurity_auditwait
flowchart TD n_infrastructure_browser_automation["infrastructure_browser_automation"] n_infrastructure_browser_automation --> n_action_engine["action_engine"] n_infrastructure_browser_automation --> n_action_monitor["action_monitor"] n_infrastructure_browser_automation --> n_cookie_decode["cookie_decode"] n_infrastructure_browser_automation --> n_detection_engine["detection_engine"] n_infrastructure_browser_automation --> n_detection_lab["detection_lab"] n_infrastructure_browser_automation --> n_error["error"] n_infrastructure_browser_automation --> n_fingerprint["fingerprint"] n_infrastructure_browser_automation --> n_first_party_audit["first_party_audit"] n_infrastructure_browser_automation --> n_form_scanner["form_scanner"] n_infrastructure_browser_automation --> n_humanizer["humanizer"] n_infrastructure_browser_automation --> n_js_libraries["js_libraries"] n_infrastructure_browser_automation --> n_locator["locator"] n_infrastructure_browser_automation --> n_meta_seo["meta_seo"] n_infrastructure_browser_automation --> n_page_state["page_state"] n_infrastructure_browser_automation --> n_privacy_audit["privacy_audit"] n_infrastructure_browser_automation --> n_security_audit["security_audit"] n_infrastructure_browser_automation --> n_wait["wait"]
Public surface
`action_engine`
| Item | What it is |
|---|---|
pub struct SessionPolicy | CDP session policy — controls which domains/features are allowed |
SessionPolicy :: fn default() -> Self | — |
SessionPolicy :: fn permissive() -> Self | Permissive policy — enables all features |
pub struct ActionEngine<'a> | The main automation engine |
ActionEngine<'a> :: fn new(session : & 'a CdpSession, humanizer : Humanizer) -> Self | Create a new ActionEngine with default-safe policy |
ActionEngine<'a> :: fn with_options(session : & 'a CdpSession, humanizer : Humanizer, wait : WaitOptions, policy : SessionPolicy,) -> Self | Create with custom wait options and policy. |
ActionEngine<'a> :: fn policy(& self) -> & SessionPolicy | Get the current session policy. |
ActionEngine<'a> :: fn state(& self) -> & PageState | Get the current page state. |
ActionEngine<'a> :: fn refresh_state(& mut self) -> Result <(), AutomationError> | Refresh page state from the browser. |
ActionEngine<'a> :: fn click(& mut self, locator : & Locator) -> Result <(), AutomationError> | Click an element: wait → scroll → move mouse → click. |
ActionEngine<'a> :: fn click_with_options(& mut self, locator : & Locator, opts : & ActionOptions,) -> Result <(), AutomationError> | Click with custom options. |
ActionEngine<'a> :: fn type_text(& mut self, locator : & Locator, text : & str) -> Result <(), AutomationError> | Type text into the focused element (or click first if locator given). |
ActionEngine<'a> :: fn type_text_with_options(& mut self, locator : & Locator, text : & str, opts : & ActionOptions,) -> Result <(), AutomationError> | Type text with options. |
ActionEngine<'a> :: fn read_text(& mut self, locator : & Locator) -> Result <String, AutomationError> | Read text from an element. |
ActionEngine<'a> :: fn read_text_with_options(& mut self, locator : & Locator, opts : & ActionOptions,) -> Result <String, AutomationError> | Read text with options (InnerText, TextContent, Html). |
ActionEngine<'a> :: fn navigate(& mut self, url : & str) -> Result <(), AutomationError> | Navigate to a URL |
ActionEngine<'a> :: fn screenshot(& self) -> Result <String, AutomationError> | Take a screenshot. |
ActionEngine<'a> :: fn detect_bot_detectors(& self) -> Result <Vec <BotDetectorInfo>, AutomationError> | Detect bot detection scripts on the current page |
pub struct BotDetectorInfo | Information about a detected bot-detection mechanism. |
`action_monitor`
| Item | What it is |
|---|---|
pub struct ActionCheckpoint | Lightweight state checkpoint for before/after action diffing |
pub struct ActionImpact | Result of diffing two checkpoints. |
ActionImpact :: fn is_clean(& self) -> bool | — |
ActionImpact :: fn summary(& self) -> String | — |
pub enum ImpactSeverity | — |
ImpactSeverity :: fn fmt(& self, f : & mut std::fmt::Formatter <'_>) -> std::fmt::Result | — |
fn checkpoint(session : & infrastructure_browser_cdp::CdpSession,) -> Result <ActionCheckpoint, crate::error::AutomationError> | Take a lightweight checkpoint of the current page state (requires CDP). |
fn diff(before : & ActionCheckpoint, after : & ActionCheckpoint) -> ActionImpact | Diff two checkpoints to compute the impact of an action. |
`cookie_decode`
| Item | What it is |
|---|---|
pub struct DecodedArtifact | Decoded artifact from a cookie value. |
pub enum ArtifactKind | Kind of decoded artifact. |
pub struct CookieClaim | A claim extracted from a cookie value. |
pub enum PiiClass | PII classification. |
pub enum DecodeStatus | Decode status for a cookie. |
pub struct CookieDecodeResult | Full decode result for a single cookie. |
fn decode_cookie(name : & str, value : & str) -> CookieDecodeResult | Decode a cookie value through the full pipeline (greedy — tries ALL decoders). |
`detection_engine`
| Item | What it is |
|---|---|
pub struct DetectionRule | A detection rule describing how to identify a technology or service. |
pub enum DetectionCategory | Category of detected technology. |
DetectionCategory :: fn fmt(& self, f : & mut std::fmt::Formatter <'_>) -> std::fmt::Result | — |
pub enum MatchPolicy | How conditions are combined for a rule. |
pub enum RuleSource | Where a rule came from. |
pub struct DetectionCondition | A condition within a detection rule. |
pub enum SourceType | Source of evidence for a condition. |
pub enum PatternKind | How to match the pattern. |
pub struct DetectionEmission | What a rule emits when it matches. |
pub struct PageEvidence | Collected evidence from a page for rule evaluation. |
pub struct EvidenceItem | A single piece of evidence. |
pub struct DetectionResult | Result of running the detection engine on a page. |
pub struct Detection | A single detected technology or service. |
pub struct MatchedEvidence | Evidence that matched a condition. |
pub struct DetectionEngine | The detection engine |
DetectionEngine :: fn with_defaults() -> Self | Create engine with default shipped rules (hardcoded fallback). |
DetectionEngine :: fn from_toml_file(path : & str) -> Self | Load rules from a TOML file |
DetectionEngine :: fn from_toml(content : & str) -> Result <Self, String> | Parse rules from a TOML string. |
DetectionEngine :: fn new(rules : Vec <DetectionRule>) -> Self | Create engine with custom rules. |
DetectionEngine :: fn add_rules(& mut self, rules : Vec <DetectionRule>) | Add rules to the engine. |
DetectionEngine :: fn rule_count(& self) -> usize | Number of loaded rules. |
DetectionEngine :: fn evaluate(& self, evidence : & PageEvidence) -> DetectionResult | Evaluate all rules against collected evidence. |
`detection_lab`
| Item | What it is |
|---|---|
fn scan_page(session : & CdpSession) -> Result <DetectionReport, AutomationError> | Passive reconnaissance module for detecting bot-detection mechanisms on a page |
pub struct DetectionReport | Full detection report for a scanned page. |
DetectionReport :: fn threat_level(& self) -> ThreatLevel | Get a threat level assessment (informational). |
DetectionReport :: fn summary(& self) -> String | Human-readable summary. |
pub struct ScriptMatch | — |
pub struct EndpointMatch | — |
pub struct BrowserState | — |
pub enum ThreatLevel | Informational threat level based on detection scan. |
ThreatLevel :: fn fmt(& self, f : & mut std::fmt::Formatter <'_>) -> std::fmt::Result | — |
`error`
| Item | What it is |
|---|---|
pub enum AutomationError | — |
`fingerprint`
| Item | What it is |
|---|---|
fn apply_stealth(session : & CdpSession) -> Result <StealthReport, AutomationError> | WARNING: USE WITH CAUTION. Applies browser fingerprint masking |
fn canvas_hash_fnv1a(data_url : & str) -> i64 | Rust mirror of the canvas-hash step inside COLLECTOR_JS |
pub const COLLECTOR_JS: & str | The page-side fingerprint collector: one self-contained expression that returns a JSON string deserializable as FingerprintAudit |
fn audit_fingerprint(session : & CdpSession) -> Result <FingerprintAudit, AutomationError> | Audit the current page's fingerprint — returns what a bot detector would see |
pub struct StealthReport | — |
StealthReport :: fn all_applied(& self) -> bool | — |
pub struct FingerprintAudit | Fingerprint audit result — what a detector would see about the browser. |
FingerprintAudit :: fn red_flags(& self) -> Vec <String> | Check for red flags that suggest automation. |
`first_party_audit`
| Item | What it is |
|---|---|
fn audit_first_party(session : & CdpSession) -> Result <FirstPartyReport, AutomationError> | Audit first-party data collection — what the site itself stores and tracks |
pub struct FirstPartyReport | — |
FirstPartyReport :: fn grade(& self) -> & 'static str | — |
FirstPartyReport :: fn summary(& self) -> String | — |
pub struct StorageFootprint | — |
pub struct BehavioralTracking | — |
pub struct TrackingKey | — |
pub struct TelemetryInfo | — |
pub struct TransparencyInfo | — |
pub struct PersistenceInfo | — |
pub struct BotDetectionInfo | — |
pub struct FirstPartyScore | — |
`form_scanner`
| Item | What it is |
|---|---|
fn scan_forms(session : & CdpSession) -> Result <FormReport, AutomationError> | Scan all forms and input fields on the page, classifying what data they collect. |
pub struct FormReport | — |
pub struct FormInfo | — |
pub struct FormField | — |
`humanizer`
| Item | What it is |
|---|---|
pub struct HumanProfile | Human behavior profile defining typing speed, mouse behavior, and error rates. |
HumanProfile :: fn default_profile() -> Self | Default profile: moderate speed, occasional typos, natural mouse. |
HumanProfile :: fn fast_typist() -> Self | Fast typist profile: quicker, fewer errors. |
HumanProfile :: fn careful() -> Self | Careful user profile: slower, more deliberate. |
pub struct Point | A point on screen. |
Point :: fn new(x : f64, y : f64) -> Self | — |
Point :: fn distance_to(& self, other : & Point) -> f64 | — |
pub struct Humanizer | Humanization engine that generates realistic interaction timings and paths |
Humanizer :: fn new(profile : HumanProfile) -> Self | Create a humanizer with a random seed. |
Humanizer :: fn with_seed(profile : HumanProfile, seed : u64) -> Self | Create a humanizer with a fixed seed (deterministic, for tests). |
Humanizer :: fn profile(& self) -> & HumanProfile | Get a reference to the profile. |
Humanizer :: fn keystroke_delay(& mut self) -> Duration | Generate a delay between keystrokes based on typing speed. |
Humanizer :: fn word_pause(& mut self) -> Duration | Generate a longer pause between words. |
Humanizer :: fn should_typo(& mut self) -> bool | Decide whether to make a typo on this character. |
Humanizer :: fn typo_char(& mut self, intended : char) -> char | Generate a random wrong character near the intended one on a QWERTY keyboard. |
Humanizer :: fn typo_reaction_delay(& mut self) -> Duration | Generate the "oops" delay before correcting a typo. |
Humanizer :: fn mouse_path(& mut self, from : Point, to : Point) -> Vec <Point> | Generate a Bezier curve mouse path from from to to |
Humanizer :: fn mouse_step_delay(& mut self, total_distance : f64, steps : usize) -> Duration | Generate delay between mouse movement steps (for velocity profile). |
Humanizer :: fn pre_click_pause(& mut self) -> Duration | Generate pre-click hover pause. |
Humanizer :: fn click_hold(& mut self) -> Duration | Generate click hold duration (mousedown → mouseup). |
Humanizer :: fn action_delay(& mut self) -> Duration | Generate inter-action delay. |
Humanizer :: fn should_trackpad_bump(& mut self) -> bool | Decide whether to do a small trackpad bump (idle fidget). |
Humanizer :: fn trackpad_bump(& mut self) -> Point | Generate a small random trackpad bump offset. |
Humanizer :: fn plan_typing(& mut self, text : & str) -> Vec <TypingEvent> | Plan typing a string, including typos and corrections |
Humanizer :: fn plan_scroll(& mut self, current_y : f64, target_y : f64) -> Vec <ScrollEvent> | Plan a humanized scroll sequence from current position to target Y offset |
Humanizer :: fn dwell_short(& mut self) -> Duration | Generate a short dwell time (before clicking a simple element). |
Humanizer :: fn dwell_long(& mut self) -> Duration | Generate a long dwell time (before interacting with content-heavy area). |
Humanizer :: fn should_scan_before_click(& mut self) -> bool | Decide whether to scan nearby elements before clicking. |
Humanizer :: fn scan_points_near(& mut self, target : Point, radius : f64) -> Vec <Point> | Generate scan points near a target — small cursor movements as if the user is visually scanning nearby elements before committing to click. |
Humanizer :: fn scan_pause(& mut self) -> Duration | Generate a pause between scan points. |
Humanizer :: fn plan_mouse_move(& mut self, from : Point, to : Point) -> Vec <MouseMoveEvent> | Plan a pointer move as a curve with acceleration, overshoot and settle |
pub struct MouseMoveEvent | One step of a humanized pointer move: where to put the pointer, and how long to wait before the next step. |
pub enum ScrollEvent | A single event in a scroll sequence. |
pub enum TypingEvent | A single event in a typing sequence. |
`js_libraries`
| Item | What it is |
|---|---|
fn detect_js_libraries(session : & CdpSession) -> Result <JsLibraryReport, AutomationError> | Detect JavaScript libraries and their versions via global objects and script URLs. |
pub struct JsLibraryReport | — |
pub struct JsLibrary | — |
`locator`
| Item | What it is |
|---|---|
pub struct Locator | A declarative, immutable element locator with fallback strategies |
Locator :: fn css(selector : & str) -> Self | Create a locator with a single CSS selector. |
Locator :: fn xpath(expr : & str) -> Self | Create a locator with a single XPath expression. |
Locator :: fn text(text : & str) -> Self | Create a locator with a text content match. |
Locator :: fn with_fallbacks(strategies : Vec <SelectorStrategy>) -> Self | Create a locator with multiple fallback strategies. |
Locator :: fn within(self, parent : Locator) -> Self | Scope this locator within a parent (returns new Locator). |
Locator :: fn filter(mut self, f : Filter) -> Self | Add a filter (returns new Locator). |
Locator :: fn strategies_ordered(& self) -> Vec <(usize, & SelectorStrategy)> | Get strategies in resolution order (last successful first, then rest). |
pub enum SelectorStrategy | Strategy for finding an element in the DOM. |
SelectorStrategy :: fn fmt(& self, f : & mut std::fmt::Formatter <'_>) -> std::fmt::Result | — |
pub enum Filter | Post-resolution filter applied after finding candidate elements. |
Filter :: fn fmt(& self, f : & mut std::fmt::Formatter <'_>) -> std::fmt::Result | — |
pub struct ResolvedElement | A resolved element reference from the DOM. |
`meta_seo`
| Item | What it is |
|---|---|
fn extract_meta_seo(session : & CdpSession) -> Result <MetaSeoReport, AutomationError> | Extract all meta tags, SEO signals, and structured data from the page. |
pub struct MetaSeoReport | — |
pub struct MetaTag | — |
pub struct StructuredDataBlock | — |
pub struct SeoInfo | — |
pub struct HreflangLink | — |
pub struct HeadingInfo | — |
`page_state`
| Item | What it is |
|---|---|
pub struct PageState | Snapshot of the current page state. |
PageState :: fn new() -> Self | — |
PageState :: fn default() -> Self | — |
`privacy_audit`
| Item | What it is |
|---|---|
fn audit_privacy(session : & CdpSession) -> Result <PrivacyReport, AutomationError> | — |
pub struct PrivacyReport | Complete privacy audit report for a page. |
PrivacyReport :: fn grade(& self) -> & 'static str | Get a letter grade (A-F) based on the privacy score. |
PrivacyReport :: fn summary(& self) -> String | Human-readable summary. |
pub struct FingerprintingSection | — |
pub struct ApiAccess | — |
pub struct BehavioralSection | — |
pub struct StorageSection | — |
pub struct CookieInfo | — |
pub struct StorageKeyInfo | — |
pub struct SessionStorageKey | — |
pub struct ServiceWorkerInfo | — |
pub struct NetworkSection | — |
pub struct ThirdPartyDomain | — |
pub struct PrivacyScore | — |
`security_audit`
| Item | What it is |
|---|---|
fn audit_security(session : & CdpSession) -> Result <SecurityReport, AutomationError> | Audit security headers and posture of the current page |
pub struct SecurityReport | — |
SecurityReport :: fn grade(& self) -> & 'static str | — |
`wait`
| Item | What it is |
|---|---|
pub struct WaitOptions | Configuration for waiting/polling behavior. |
WaitOptions :: fn default() -> Self | — |
WaitOptions :: fn fast() -> Self | — |
WaitOptions :: fn patient() -> Self | — |
pub struct ActionabilityResult | Result of an actionability check on a resolved element. |
ActionabilityResult :: fn is_actionable(& self) -> bool | Whether the element is fully actionable. |
ActionabilityResult :: fn failure_reason(& self) -> Option <String> | Human-readable reason if not actionable. |
pub struct BoundingRect | Bounding rect for an element (from getBoundingClientRect). |
BoundingRect :: fn center(& self) ->(f64, f64) | Center point of the element. |
BoundingRect :: fn has_area(& self) -> bool | Whether the rect has non-zero size. |
BoundingRect :: fn approx_eq(& self, other : & BoundingRect, tolerance : f64) -> bool | Whether this rect is approximately equal to another (within tolerance). |
pub enum ReadMode | How to read text from an element. |
pub enum ActionMode | Action execution mode. |
pub struct ActionOptions | Per-action options override. |
ActionOptions :: fn default() -> Self | — |
Re-exports. Exported here, defined elsewhere.
| Export | Defined in |
|---|---|
AutomationError | error::AutomationError |
PageState | page_state::PageState |
checkpoint | action_monitor::checkpoint |
shannon_entropy | infrastructure_dlp_detect::shannon_entropy |
{ActionEngine,BotDetectorInfo,SessionPolicy} | action_engine::{ActionEngine,BotDetectorInfo,SessionPolicy} |
{ActionMode,ActionOptions,ActionabilityResult,BoundingRect,ReadMode,WaitOptions,} | wait::{ActionMode,ActionOptions,ActionabilityResult,BoundingRect,ReadMode,WaitOptions,} |
{DetectionEngine,DetectionResult,PageEvidence} | detection_engine::{DetectionEngine,DetectionResult,PageEvidence} |
{Filter,Locator,ResolvedElement,SelectorStrategy} | locator::{Filter,Locator,ResolvedElement,SelectorStrategy} |
{HumanProfile,Humanizer,Point,ScrollEvent,TypingEvent} | humanizer::{HumanProfile,Humanizer,Point,ScrollEvent,TypingEvent} |
{apply_stealth,audit_fingerprint,FingerprintAudit,StealthReport} | fingerprint::{apply_stealth,audit_fingerprint,FingerprintAudit,StealthReport} |
{audit_first_party,FirstPartyReport} | first_party_audit::{audit_first_party,FirstPartyReport} |
{audit_privacy,PrivacyReport,PrivacyScore} | privacy_audit::{audit_privacy,PrivacyReport,PrivacyScore} |
{audit_security,SecurityReport} | security_audit::{audit_security,SecurityReport} |
{decode_cookie,CookieClaim,CookieDecodeResult,DecodeStatus,PiiClass} | cookie_decode::{decode_cookie,CookieClaim,CookieDecodeResult,DecodeStatus,PiiClass} |
{detect_js_libraries,JsLibraryReport} | js_libraries::{detect_js_libraries,JsLibraryReport} |
{diff,ActionCheckpoint,ActionImpact,ImpactSeverity} | action_monitor::{diff,ActionCheckpoint,ActionImpact,ImpactSeverity} |
{extract_meta_seo,MetaSeoReport} | meta_seo::{extract_meta_seo,MetaSeoReport} |
{scan_forms,FormReport} | form_scanner::{scan_forms,FormReport} |
{scan_page,DetectionReport,ThreatLevel} | detection_lab::{scan_page,DetectionReport,ThreatLevel} |
Boundary
Depends on no other workspace tier.
Shares tier infrastructure with 82 other crates: infrastructure-acquire, infrastructure-adapters-google-calendar, infrastructure-adapters-google-gmail, infrastructure-adapters-google-places, infrastructure-adapters-google-trends, infrastructure-adapters-shodan, infrastructure-adapters-yelp, infrastructure-agent, … (82 total).
_What this crate deliberately does NOT own is a judgment. No committed registry records one for it, so none is stated here._
Where it sits
| Tier (ontology) | infrastructure |
| Architectural role (taxonomy) | unclassified (baselined) |
| Location | crates/infrastructure/browser-automation |
| Vocabulary in force (lexicon) | current |
Dependencies
Runtime, in this workspace.
| Crate | Tier | Optional | Only on |
|---|---|---|---|
| `infrastructure-browser-cdp` | infrastructure | yes | always |
| `infrastructure-dlp-detect` | infrastructure | no | always |
| `infrastructure-fetcher` | infrastructure | yes | always |
Runtime, from outside the workspace.
| Crate | Requirement | Features | Optional | Only on |
|---|---|---|---|---|
rand | ^0.9 | small_rng | no | always |
serde | ^1 | derive | no | always |
serde_json | ^1 | — | no | always |
thiserror | ^2 | — | no | always |
toml | ^0.8 | — | no | always |
tracing | ^0.1 | — | no | always |
url | ^2 | — | yes | always |
Development. None.
Build. None.
Depended on by. 7 workspace crates.
Signal flow — what reaches this crate, and what it reaches.
flowchart LR n_application_browser_automation["application-browser-automation"] -->|uses| SELF n_infrastructure_acquire["infrastructure-acquire"] -->|uses| SELF n_infrastructure_browser_automation_wasm["infrastructure-browser-automation-wasm"] -->|uses| SELF n_operations_browser_agent_worker["operations-browser-agent-worker"] -->|uses| SELF n_operations_e2e_harness["operations-e2e-harness"] -->|uses| SELF n_operations_privacy_scan_runner["operations-privacy-scan-runner"] -->|uses| SELF n_platform_disclosure_lab["platform-disclosure-lab"] -->|uses| SELF SELF["infrastructure-browser-automation"] SELF -->|runtime| n_infrastructure_browser_cdp["infrastructure-browser-cdp"] SELF -->|runtime| n_infrastructure_dlp_detect["infrastructure-dlp-detect"] SELF -->|runtime| n_infrastructure_fetcher["infrastructure-fetcher"] classDef self fill:#1f883d,stroke:#1f883d,color:#fff; class SELF self;
Feature flags
| Feature | Enables | On by default |
|---|---|---|
cdp | infrastructure-browser-cdp, infrastructure-fetcher, url | yes |
default | cdp | yes |
infrastructure-browser-cdp | dep:infrastructure-browser-cdp | no |
infrastructure-fetcher | dep:infrastructure-fetcher | no |
url | dep:url | no |
flowchart LR n_cdp["cdp"] --> n_infrastructure_browser_cdp["infrastructure-browser-cdp"] n_cdp["cdp"] --> n_infrastructure_fetcher["infrastructure-fetcher"] n_cdp["cdp"] --> n_url["url"] n_default["default"] --> n_cdp["cdp"] n_infrastructure_browser_cdp["infrastructure-browser-cdp"] --> n_dep_infrastructure_browser_cdp["dep:infrastructure-browser-cdp"] n_infrastructure_fetcher["infrastructure-fetcher"] --> n_dep_infrastructure_fetcher["dep:infrastructure-fetcher"] n_url["url"] --> n_dep_url["dep:url"]
Targets
| Kind | Name | Source |
|---|---|---|
| example | first_party_xray | `examples/first_party_xray.rs` |
| example | human_browse | `examples/human_browse.rs` |
| example | mouse_path | `examples/mouse_path.rs` |
| example | privacy_xray | `examples/privacy_xray.rs` |
| example | scan_site | `examples/scan_site.rs` |
| lib | infrastructure_browser_automation | `src/lib.rs` |
Error model
| Error type | Named by |
|---|---|
AutomationError | apply_stealth, audit_fingerprint, audit_first_party, audit_privacy, audit_security, checkpoint, … (10 total) |
Operational characteristics
| Property | Evidence |
|---|---|
| async public surface | none detected |
| async runtime | none detected |
| database access | none detected |
| network I/O | none detected |
| unsafe code | none detected |
| environment variables | none detected |
No unsafe block, unsafe fn, unsafe impl or unsafe trait was found by the parser anywhere in this crate's source.
Configuration
No environment variable is read with a literal name anywhere in this crate. A variable whose key is computed at run time cannot be listed here, and is not claimed to be absent.
Related capabilities
7 workspace crates depend on this one: application-browser-automation, infrastructure-acquire, infrastructure-browser-automation-wasm, operations-browser-agent-worker, operations-e2e-harness, operations-privacy-scan-runner, platform-disclosure-lab.
Verification
| Kind | Count |
|---|---|
| Unit tests | 141 |
| Integration tests | 0 |
| Examples | 5 |
| Doctests | 0 |
Evidence by module. How often each public module is named by something executable.
| Module | Tests | Examples | Consumers |
|---|---|---|---|
action_engine | 3 | 0 | 3 |
action_monitor | 5 | 0 | 1 |
cookie_decode | 7 | 0 | 3 |
detection_engine | 14 | 1 | 4 |
detection_lab | 6 | 1 | 1 |
error | 1 | 0 | 2 |
fingerprint | 6 | 1 | 1 |
first_party_audit | 10 | 1 | 0 |
form_scanner | 4 | 0 | 1 |
humanizer | 6 | 4 | 17 |
js_libraries | 3 | 0 | 1 |
locator | 4 | 0 | 2 |
meta_seo | 7 | 0 | 1 |
page_state | 1 | 0 | 1 |
privacy_audit | 13 | 1 | 1 |
security_audit | 2 | 0 | 1 |
wait | 6 | 0 | 5 |
What the tests establish, by name:
bot_detector_info_deserializes—src/action_engine.rsnavigation_target_allows_public_https—src/action_engine.rsnavigation_target_rejects_link_local_metadata_ip—src/action_engine.rsnavigation_target_rejects_loopback_literal_ip—src/action_engine.rsnavigation_target_rejects_non_http_scheme—src/action_engine.rsnavigation_target_rejects_unparseable_url—src/action_engine.rsclean_diff_when_identical—src/action_monitor.rscritical_on_new_detection_signal—src/action_monitor.rsdetects_new_scripts—src/action_monitor.rsdetects_new_third_party_domain—src/action_monitor.rshigh_on_captcha_script—src/action_monitor.rssummary_clean—src/action_monitor.rssummary_with_changes—src/action_monitor.rsurl_change_detected—src/action_monitor.rsdecode_email_in_cookie—src/cookie_decode.rsdecode_fbp_cookie—src/cookie_decode.rsdecode_ga_cookie—src/cookie_decode.rsdecode_hotjar_cookie—src/cookie_decode.rsdecode_json_cookie—src/cookie_decode.rsdecode_jwt_cookie—src/cookie_decode.rsdecode_opaque_cookie—src/cookie_decode.rsdecode_sha256_hash—src/cookie_decode.rsdecode_url_encoded_cookie—src/cookie_decode.rsdecode_uuid_cookie—src/cookie_decode.rsfind_email_invalid—src/cookie_decode.rsfind_email_valid—src/cookie_decode.rsgreedy_decoding_produces_multiple_claims—src/cookie_decode.rsis_uuid_like_invalid—src/cookie_decode.rsis_uuid_like_valid—src/cookie_decode.rsshannon_entropy_high—src/cookie_decode.rs- _… 111 more_
Documentation coverage
| Measure | Documented | Total |
|---|---|---|
| Public items with rustdoc | 124 | 183 |
Public modules with a //! block | 1 | 17 |
pie showData
title Public items with rustdoc
"Documented" : 124
"No rustdoc detected" : 59
Metrics
| Metric | Value |
|---|---|
| Rust source files | 18 |
| Source lines | 8211 |
| Code lines | 6794 |
| Public API items | 183 |
| Public modules | 17 |
| Tests | 141 |
| Examples | 5 |
| Cargo features | 5 |
| Direct runtime dependencies | 10 |
| Workspace reverse dependencies | 7 |
pie showData
title Public API by kind
"constant" : 1
"enum" : 17
"function" : 13
"method" : 85
"struct" : 67
pie showData
title Rust source composition
"Code" : 6794
"Blank or comment" : 1417
Generation
Rendered by tools-corpus corpus readme from repository evidence alone, renderer schema 2, lexicon current. No model, network service or database was consulted. Regenerate with tools-corpus corpus readme --write; verify with --check.