import type { ExecutionOptions } from "./AnalysisProvider.js"; import type { JavaScriptRuntimeObservationPort } from "./JavaScriptRuntimeObservationPort.js"; import { createJavaScriptRuntimeObservationEvidence } from "./JavaScriptRuntimeObservationEvidence.js"; import type { Evidence } from "../domain/evidence.js"; import { AnalysisCapabilityUnavailableError, type AnalysisError, } from "../domain/errors.js"; import type { ListJavaScriptRuntimeTargetsInput, ObserveJavaScriptRuntimeInput, } from "../domain/javascriptRuntimeObservation.js"; import { err, ok, type Result } from "../domain/result.js"; /** List targets exposed by the explicitly selected loopback Inspector. */ export const listJavaScriptRuntimeTargets = async ( provider: JavaScriptRuntimeObservationPort | undefined, input: ListJavaScriptRuntimeTargetsInput, options: ExecutionOptions = {}, ): Promise> => { const ready = requireProvider(provider, "list_javascript_runtime_targets"); if (!ready.ok) return ready; const result = await ready.value.listTargets(input, options); return result.ok ? ok( createJavaScriptRuntimeObservationEvidence( "list_javascript_runtime_targets", input, result.value, ready.value.identity(), ), ) : result; }; /** Observe one attach-only Inspector target selected by the request. */ export const observeJavaScriptRuntime = async ( provider: JavaScriptRuntimeObservationPort | undefined, input: ObserveJavaScriptRuntimeInput, options: ExecutionOptions = {}, ): Promise> => { const ready = requireProvider(provider, "observe_javascript_runtime"); if (!ready.ok) return ready; const result = await ready.value.observe(input, options); return result.ok ? ok( createJavaScriptRuntimeObservationEvidence( "observe_javascript_runtime", input, result.value, ready.value.identity(), ), ) : result; }; const requireProvider = ( provider: JavaScriptRuntimeObservationPort | undefined, operation: "list_javascript_runtime_targets" | "observe_javascript_runtime", ): Result => provider === undefined ? err( new AnalysisCapabilityUnavailableError( "rea-v8-inspector", operation, "V8 Inspector observation provider is not configured", ), ) : ok(provider);