use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum SecurityProfile {
Permissive,
Moderate,
Restrictive,
}
#[derive(Debug, Default, Serialize)]
pub struct RunOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub image: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub profile: Option<SecurityProfile>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fast: Option<bool>,
}
#[derive(Debug, Deserialize)]
pub struct RunOutput {
pub output: String,
}
#[derive(Debug, Deserialize)]
pub struct SandboxInfo {
pub name: String,
#[serde(default)]
pub uuid: Option<String>,
pub status: String,
pub backend: String,
pub image: Option<String>,
pub vcpus: Option<u32>,
pub memory_mb: Option<u64>,
pub created_at: Option<String>,
}
#[derive(Debug)]
pub struct StreamEvent {
pub event_type: String,
pub data: serde_json::Value,
}
pub type Orchestration = serde_json::Value;
pub type OrchestrationCreateRequest = serde_json::Value;
pub type OrchestrationDefinition = serde_json::Value;
pub type DurableObject = serde_json::Value;
pub type DurableObjectCreateRequest = serde_json::Value;
pub type Schedule = serde_json::Value;
pub type ScheduleCreateRequest = serde_json::Value;
pub type DurableStore = serde_json::Value;
pub type DurableStoreCreateRequest = serde_json::Value;
pub type DurableStoreQueryResult = serde_json::Value;
pub type DurableStoreExecuteResult = serde_json::Value;
pub type DurableStoreCommandResult = serde_json::Value;
#[derive(Debug, Deserialize)]
pub(crate) struct ApiResponse<T> {
pub success: bool,
pub data: Option<T>,
pub error: Option<String>,
}
#[derive(Serialize)]
pub(crate) struct RunRequest {
pub command: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub image: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub profile: Option<SecurityProfile>,
pub fast: bool,
}
#[derive(Debug, Default, Serialize)]
pub struct CreateSandboxOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub image: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vcpus: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub memory_mb: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub profile: Option<SecurityProfile>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_ref: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(default)]
pub volumes: Vec<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(default)]
pub secrets: Vec<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(default)]
pub secret_files: Vec<String>,
}
#[derive(Serialize)]
pub(crate) struct CreateRequest {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub image: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vcpus: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub memory_mb: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub profile: Option<SecurityProfile>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_ref: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(default)]
pub volumes: Vec<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(default)]
pub secrets: Vec<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(default)]
pub secret_files: Vec<String>,
}
#[derive(Debug, Default, Serialize)]
pub struct ExecOptions {
#[serde(skip_serializing_if = "Vec::is_empty")]
pub env: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub workdir: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sudo: Option<bool>,
}
#[derive(Serialize)]
pub(crate) struct ExecRequest {
pub command: Vec<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub env: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub workdir: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sudo: Option<bool>,
}
#[derive(Serialize)]
pub(crate) struct FileWriteRequest {
pub content: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub encoding: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct FileReadResponse {
pub content: String,
pub encoding: String,
pub size: usize,
}
#[derive(Serialize)]
pub(crate) struct BatchRunRequest {
pub commands: Vec<BatchCommand>,
}
#[derive(Debug, Serialize)]
pub struct BatchCommand {
pub command: Vec<String>,
}
#[derive(Debug, Deserialize)]
pub struct BatchResult {
pub output: Option<String>,
pub error: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct BatchRunResponse {
pub results: Vec<BatchResult>,
}
#[derive(Serialize)]
pub(crate) struct BatchFileWriteRequest {
pub files: std::collections::HashMap<String, String>,
}
#[derive(Debug, Deserialize)]
pub struct BatchFileWriteResponse {
pub written: usize,
}
#[derive(Debug, Deserialize)]
pub struct ExtendTtlResponse {
pub expires_at: Option<String>,
}
#[derive(Serialize)]
pub(crate) struct ExtendTtlRequest {
pub by: String,
}
#[derive(Debug, Deserialize)]
pub struct SnapshotMeta {
pub name: String,
pub sandbox: String,
pub image_tag: String,
pub backend: String,
pub base_image: Option<String>,
pub vcpus: Option<u32>,
pub memory_mb: Option<u64>,
pub created_at: String,
}
#[derive(Debug, Default, Serialize)]
pub struct TakeSnapshotOptions {
pub sandbox: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum DetachedStatus {
Running,
Completed,
Failed,
}
#[derive(Debug, Deserialize)]
pub struct DetachedCommand {
pub id: String,
pub sandbox: String,
pub command: Vec<String>,
pub pid: u32,
pub status: DetachedStatus,
pub exit_code: Option<i32>,
pub started_at: String,
}
#[derive(Debug, Deserialize)]
pub struct DetachedLogsResponse {
pub stdout: Option<String>,
pub stderr: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PageLink {
pub text: String,
pub href: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PageResult {
pub title: String,
pub url: String,
pub text: String,
pub links: Vec<PageLink>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AriaSnapshot {
pub snapshot: String,
pub url: String,
pub title: String,
#[serde(default)]
pub refs: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BrowserEvent {
pub seq: u64,
#[serde(rename = "type")]
pub event_type: String,
pub page: String,
pub ts: String,
}