Skip to main content

bobby_browser_client/
state.rs

1//! Session and page runtime state returned by `/v1` endpoints.
2
3use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5
6use crate::{ExecutionPolicy, PageId, SessionId};
7
8/// Page rendering / interaction mode.
9#[derive(Debug, Clone, Serialize, Deserialize)]
10#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
11pub enum PageMode {
12    Document,
13    Interactive,
14    Render,
15}
16
17/// `GET /v1/runtime` body.
18#[derive(Debug, Clone, Serialize, Deserialize)]
19#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
20pub struct RuntimeInfo {
21    pub version: String,
22    pub capabilities: Vec<String>,
23    pub active_sessions: usize,
24    pub queued_jobs: usize,
25    pub uptime_ms: u64,
26}
27
28/// Browser session returned by session create/list endpoints.
29#[derive(Debug, Clone, Serialize, Deserialize)]
30#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
31pub struct SessionState {
32    pub id: SessionId,
33    pub profile: String,
34    pub proxy: Option<String>,
35    pub page_ids: Vec<PageId>,
36    pub created_at: DateTime<Utc>,
37    pub last_used_at: DateTime<Utc>,
38    pub execution_policy: ExecutionPolicy,
39}
40
41/// Page within a session.
42#[derive(Debug, Clone, Serialize, Deserialize)]
43#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
44pub struct PageState {
45    pub id: PageId,
46    pub session_id: SessionId,
47    pub url: Option<String>,
48    pub mode: PageMode,
49    pub ready_state: String,
50    pub pending_requests: usize,
51}
52
53/// Result of a navigation command.
54#[derive(Debug, Clone, Serialize, Deserialize)]
55#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
56pub struct NavigationResult {
57    pub page_id: PageId,
58    pub url: String,
59    pub ready_state: String,
60}
61
62/// Result of a structured extract command.
63#[derive(Debug, Clone, Serialize, Deserialize)]
64#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
65pub struct ExtractResult {
66    pub page_id: PageId,
67    pub data: serde_json::Value,
68}