refactor(javascript): parse runtime evidence into one verified owner

This commit is contained in:
morluto
2026-10-10 03:30:58 +08:00
parent 415145d04f
commit 006b295f1d
15 changed files with 839 additions and 512 deletions
@@ -2,22 +2,42 @@ import { classifyStaticLoadStates } from "./javascriptRuntimeLoadState.js";
import { buildReconciledApplicationGraph } from "./javascriptRuntimeReconciliationGraph.js";
import { reconcileRuntimeEntities } from "./javascriptRuntimeReconciliationMatching.js";
import {
parseRuntimeCaptures,
parseStaticLayers,
type ParsedStaticLayer,
} from "./javascriptRuntimeReconciliationParsing.js";
import {
parseRuntimeCaptures,
type ParsedRuntimeCapture,
} from "./javascriptRuntimeReconciliationCaptureParsing.js";
import { createJavaScriptRuntimeReconciliationResult } from "./javascriptRuntimeReconciliationResult.js";
import type { JavaScriptRuntimeReconciliationResult } from "./javascriptRuntimeReconciliationSchemas.js";
import { reconcileJavaScriptRuntimeInputSchema } from "./javascriptRuntimeReconciliationSchemas.js";
import type { ReconcileJavaScriptRuntimeInput } from "./javascriptRuntimeReconciliationSchemas.js";
import { projectRuntimeCaptures } from "./javascriptRuntimeReconciliationRuntime.js";
import { collectStaticRuntimeCandidates } from "./javascriptRuntimeStaticCandidates.js";
/** Verified caller input and the static and runtime facts parsed from it. */
export interface ParsedRuntimeReconciliationInput {
readonly input: ReconcileJavaScriptRuntimeInput;
readonly layers: readonly ParsedStaticLayer[];
readonly captures: readonly ParsedRuntimeCapture[];
}
/** Parse caller Evidence once into the owner consumed by reconciliation. */
export const parseRuntimeReconciliationInput = (
input: ReconcileJavaScriptRuntimeInput,
): ParsedRuntimeReconciliationInput => ({
input,
layers: parseStaticLayers(input.static_layers, ["static_layers"]),
captures: parseRuntimeCaptures(input.runtime_observations, [
"runtime_observations",
]),
});
/** Reconcile static JAG layers with authorized passive CDP Evidence. */
export const reconcileJavaScriptRuntime = (
input: unknown,
parsed: ParsedRuntimeReconciliationInput,
): JavaScriptRuntimeReconciliationResult => {
const parsed = reconcileJavaScriptRuntimeInputSchema.parse(input);
const layers = parseStaticLayers(parsed.static_layers);
const captures = parseRuntimeCaptures(parsed.runtime_observations);
const { layers, captures } = parsed;
const runtime = projectRuntimeCaptures(captures);
const candidates = collectStaticRuntimeCandidates(layers);
const matching = reconcileRuntimeEntities({