mirror of
https://github.com/priyanshujain/sanderling.git
synced 2026-10-02 19:17:10 +00:00
HierarchyPanel renders the captured DOM/AX tree with a filter input. HtmlPanel renders the per-step HTML in an iframe (sandboxed) with a toggle to view source. HTML tab only shows when the step actually has HTML captured.
30 lines
1.0 KiB
TypeScript
30 lines
1.0 KiB
TypeScript
import type { Run, RunSummary, Step } from "./types";
|
|
|
|
async function getJson<T>(path: string): Promise<T> {
|
|
const response = await fetch(path, { headers: { Accept: "application/json" } });
|
|
if (!response.ok) {
|
|
throw new Error(`request failed: ${response.status} ${response.statusText} (${path})`);
|
|
}
|
|
return (await response.json()) as T;
|
|
}
|
|
|
|
export function listRuns(): Promise<RunSummary[]> {
|
|
return getJson<RunSummary[]>("/api/runs");
|
|
}
|
|
|
|
export function getRun(runId: string): Promise<Run> {
|
|
return getJson<Run>(`/api/runs/${encodeURIComponent(runId)}`);
|
|
}
|
|
|
|
export function getStep(runId: string, index: number): Promise<Step> {
|
|
return getJson<Step>(`/api/runs/${encodeURIComponent(runId)}/steps/${index}`);
|
|
}
|
|
|
|
export function screenshotUrl(runId: string, name: string): string {
|
|
return `/api/runs/${encodeURIComponent(runId)}/screenshots/${encodeURIComponent(name)}`;
|
|
}
|
|
|
|
export function htmlUrl(runId: string, name: string): string {
|
|
return `/api/runs/${encodeURIComponent(runId)}/html/${encodeURIComponent(name)}`;
|
|
}
|