123 lines
3.0 KiB
TypeScript
123 lines
3.0 KiB
TypeScript
import { webPageInspectionSchema } from "../../../src/domain/browserObservationSchemas.js";
|
|
import { createWebTextArtifact } from "../../../src/domain/webContentArtifact.js";
|
|
|
|
export interface WebPageScriptFixture {
|
|
source: string;
|
|
scriptKey: string;
|
|
url: string;
|
|
origin: string;
|
|
cdpHash: string;
|
|
}
|
|
|
|
const origin = "https://app.example.test";
|
|
|
|
export const createWebPageInspection = (
|
|
scripts: readonly WebPageScriptFixture[],
|
|
) =>
|
|
webPageInspectionSchema.parse({
|
|
browser: {
|
|
product: "Fake Chrome",
|
|
protocol_version: "1.3",
|
|
revision: "1",
|
|
user_agent: "fake",
|
|
js_version: "1",
|
|
},
|
|
target: {
|
|
target_id: "page-1",
|
|
type: "page",
|
|
title: "App",
|
|
url: `${origin}/app`,
|
|
origin,
|
|
attached: false,
|
|
},
|
|
capture_window: {
|
|
started_at: "2026-07-14T00:00:00.000Z",
|
|
ended_at: "2026-07-14T00:00:01.000Z",
|
|
observation_ms: 1_000,
|
|
},
|
|
completeness: {
|
|
status: "attach_limited",
|
|
conditions: ["attach_limited"],
|
|
policy_filtered_sections: [],
|
|
attach_limited_sections: ["network_requests"],
|
|
truncated_sections: [],
|
|
unavailable_sections: [],
|
|
excluded: [],
|
|
dropped_events: {
|
|
scripts: 0,
|
|
network_requests: 0,
|
|
console_events: 0,
|
|
websocket_connections: 0,
|
|
websocket_frames: 0,
|
|
webmcp_tools: 0,
|
|
timeline_events: 0,
|
|
total: 0,
|
|
},
|
|
},
|
|
frames: [],
|
|
dom: { total_nodes: 0, nodes: [] },
|
|
accessibility: {
|
|
total_nodes: 0,
|
|
text_capture: {
|
|
status: "not_approved",
|
|
retained_bytes: 0,
|
|
excluded_fields: 0,
|
|
},
|
|
nodes: [],
|
|
},
|
|
scripts: {
|
|
total: scripts.length,
|
|
items: scripts.map(
|
|
({ source, scriptKey, url, origin: scriptOrigin, cdpHash }) => ({
|
|
script_key: scriptKey,
|
|
url,
|
|
origin: scriptOrigin,
|
|
cdp_hash: cdpHash,
|
|
length: Buffer.byteLength(source),
|
|
is_module: true,
|
|
language: "JavaScript",
|
|
source_map_url: null,
|
|
resource_reconciliation: {
|
|
status: "unmatched",
|
|
reason: "no_exact_sanitized_url",
|
|
},
|
|
source: {
|
|
included: true,
|
|
artifact: createWebTextArtifact(source, "text/javascript"),
|
|
},
|
|
}),
|
|
),
|
|
},
|
|
resources: [],
|
|
network: {
|
|
requests: [],
|
|
websocket_connections: [],
|
|
coverage_started_at: "2026-07-14T00:00:00.000Z",
|
|
prior_activity_available: false,
|
|
},
|
|
console: {
|
|
events: [],
|
|
coverage_started_at: "2026-07-14T00:00:00.000Z",
|
|
prior_activity_available: false,
|
|
},
|
|
workers: [],
|
|
metadata: {
|
|
responses: [],
|
|
dom_urls: [],
|
|
agent_hints: [],
|
|
excluded_dom_urls: 0,
|
|
headers_allowlisted: true,
|
|
},
|
|
storage: {
|
|
origin,
|
|
usage_bytes: null,
|
|
quota_bytes: null,
|
|
local_storage_keys: [],
|
|
session_storage_keys: [],
|
|
indexed_db_names: [],
|
|
cache_names: [],
|
|
values_redacted: true,
|
|
},
|
|
limitations: [],
|
|
});
|