mirror of
https://github.com/morluto/rea
synced 2026-10-27 06:33:32 -04:00
142 lines
4.3 KiB
TypeScript
142 lines
4.3 KiB
TypeScript
import { z } from "zod";
|
|
|
|
import { webRuntimeCommandTimeoutSchema } from "../browserDeadline.js";
|
|
import { browserCompletenessSchema } from "../browserCompleteness.js";
|
|
import { browserEndpointSchema } from "../browserObservation.js";
|
|
import { browserVersionSchema } from "../browserObservationSchemas.js";
|
|
import {
|
|
cdpDomNodeSchema,
|
|
cdpScriptSourceSchema,
|
|
cdpScriptMetadataSchema,
|
|
} from "../cdpObservationSchemas.js";
|
|
import { prefixedDigestSchema } from "../digests.js";
|
|
|
|
const approvedElectronInput = {
|
|
cdp_endpoint: browserEndpointSchema,
|
|
};
|
|
|
|
/** Input for listing local file:// page targets from an explicit Electron CDP endpoint. */
|
|
export const listElectronTargetsInputSchema = z.strictObject({
|
|
...approvedElectronInput,
|
|
});
|
|
export type ListElectronTargetsInput = z.infer<
|
|
typeof listElectronTargetsInputSchema
|
|
>;
|
|
|
|
/** Input for passive structural inspection of one Electron file page. */
|
|
const inspectElectronPageFacts = {
|
|
...approvedElectronInput,
|
|
target_id: z.string().trim().min(1),
|
|
observation_ms: z.int().min(0).default(100),
|
|
command_timeout_ms: webRuntimeCommandTimeoutSchema,
|
|
} as const;
|
|
export const inspectElectronPageInputSchema = z.union([
|
|
z.strictObject({
|
|
...inspectElectronPageFacts,
|
|
include_script_sources: z.literal(false).default(false),
|
|
}),
|
|
z.strictObject({
|
|
...inspectElectronPageFacts,
|
|
include_script_sources: z.literal(true),
|
|
}),
|
|
]);
|
|
export type InspectElectronPageInput = z.infer<
|
|
typeof inspectElectronPageInputSchema
|
|
>;
|
|
|
|
const electronTargetSchema = z.object({
|
|
target_id: z.string(),
|
|
type: z.string(),
|
|
title: z.string(),
|
|
file_path: z.string(),
|
|
attached: z
|
|
.boolean()
|
|
.nullable()
|
|
.describe(
|
|
"Discovery-reported debugger attachment state; null means unknown",
|
|
),
|
|
});
|
|
|
|
/** Complete local file target inventory from one Electron CDP endpoint. */
|
|
export const electronTargetListSchema = z.object({
|
|
browser: browserVersionSchema,
|
|
targets: z.array(electronTargetSchema),
|
|
excluded: z.object({
|
|
unsupported_url: z.int().min(0),
|
|
non_page: z.int().min(0),
|
|
}),
|
|
limitations: z.array(z.string()),
|
|
});
|
|
export type ElectronTargetList = z.infer<typeof electronTargetListSchema>;
|
|
|
|
/** Provider-neutral passive Electron file-page structure and script inventory. */
|
|
export const electronPageInspectionSchema = z.object({
|
|
browser: browserVersionSchema,
|
|
target: electronTargetSchema,
|
|
capture_window: z.object({
|
|
started_at: z.iso.datetime(),
|
|
ended_at: z.iso.datetime(),
|
|
observation_ms: z.int().min(0),
|
|
}),
|
|
completeness: browserCompletenessSchema,
|
|
frames: z.array(
|
|
z.object({
|
|
frame_id: z.string(),
|
|
parent_frame_id: z.string().nullable(),
|
|
file_path: z.string(),
|
|
}),
|
|
),
|
|
dom: z.object({
|
|
total_nodes: z.int().min(0),
|
|
nodes: z.array(cdpDomNodeSchema),
|
|
}),
|
|
scripts: z.object({
|
|
total: z.int().min(0),
|
|
items: z.array(
|
|
z.object({
|
|
script_key: prefixedDigestSchema("electron_script"),
|
|
frame_id: z.string().nullable().default(null),
|
|
frame_scope: z.enum(["authorized", "unknown"]).optional(),
|
|
file_path: z.string(),
|
|
has_source_url: z.boolean().nullable().optional(),
|
|
reported_url: z.string().optional(),
|
|
...cdpScriptMetadataSchema.shape,
|
|
source: cdpScriptSourceSchema,
|
|
}),
|
|
),
|
|
}),
|
|
resources: z.array(
|
|
z.object({
|
|
resource_key: prefixedDigestSchema("electron_resource"),
|
|
file_path: z.string(),
|
|
type: z.string(),
|
|
mime_type: z.string(),
|
|
content_size: z.number().min(0).nullable(),
|
|
}),
|
|
),
|
|
workers: z
|
|
.array(
|
|
z.object({
|
|
target_id: z.string().min(1),
|
|
type: z.string().min(1),
|
|
file_path: z.string(),
|
|
attached: z.boolean(),
|
|
opener_target_id: z.string().min(1).nullable(),
|
|
parent_frame_id: z.string().min(1).nullable(),
|
|
}),
|
|
)
|
|
.default([]),
|
|
limitations: z.array(z.string()),
|
|
});
|
|
export type ElectronPageInspection = z.infer<
|
|
typeof electronPageInspectionSchema
|
|
>;
|
|
|
|
/** Completed Electron facts retained when later request finalization fails. */
|
|
export interface ElectronPagePartialObservation {
|
|
readonly kind: "electron-page-observation";
|
|
readonly inspection: ElectronPageInspection;
|
|
/** REA's CDP transport closed; target shutdown is never implied. */
|
|
readonly cleanup: "transport-closed" | "incomplete";
|
|
}
|