use super::super::{BrowserSession, access};
use crate::browser::{BrowserError, BrowserOutput, request::ReplayRequest};
use std::time::Duration;
const EVAL_TIMEOUT: Duration = Duration::from_secs(60);
pub async fn replay(
session: &BrowserSession,
request: ReplayRequest,
) -> Result<BrowserOutput, BrowserError> {
let page = access::current_page(session).await?;
let _ = super::super::lifecycle::install_page_hooks(&page).await;
let script = super::replay_tmpl::build_script(request)?;
let result = tokio::time::timeout(EVAL_TIMEOUT, page.evaluate_expression(script))
.await
.map_err(|_| BrowserError::EvaluationTimeout)??;
let value = result
.object()
.value
.clone()
.unwrap_or(serde_json::json!({"ok": false, "status": 0, "error": "no value"}));
Ok(BrowserOutput::Json(value))
}