use reqwest::Method;
use serde::{Deserialize, Serialize};
use crate::client::Client;
use crate::error::BoxxkiteError;
#[derive(Debug, Clone, Deserialize)]
pub struct PreviewUrl {
pub url: String,
pub expires_at: String,
pub token_id: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct PreviewRevokeResult {
pub revoked: bool,
pub token_id: String,
}
impl Client {
pub async fn create_preview_url(
&self,
session_id: &str,
port: u16,
ttl_seconds: Option<u32>,
) -> Result<PreviewUrl, BoxxkiteError> {
#[derive(Serialize)]
struct Body {
#[serde(skip_serializing_if = "Option::is_none")]
ttl_seconds: Option<u32>,
}
let builder = self
.request(
Method::POST,
&format!("/v1/sandboxes/{session_id}/preview/{port}"),
)
.json(&Body { ttl_seconds });
self.send(builder).await
}
pub async fn revoke_preview_url(
&self,
session_id: &str,
port: u16,
token_id: &str,
) -> Result<PreviewRevokeResult, BoxxkiteError> {
#[derive(Serialize)]
struct Body<'a> {
token_id: &'a str,
}
let builder = self
.request(
Method::POST,
&format!("/v1/sandboxes/{session_id}/preview/{port}/revoke"),
)
.json(&Body { token_id });
self.send(builder).await
}
}