mirror of
https://github.com/morluto/rea
synced 2026-10-27 14:42:18 -04:00
54 lines
2.0 KiB
TypeScript
54 lines
2.0 KiB
TypeScript
import { classifyStaticLoadStates } from "./javascriptRuntimeLoadState.js";
|
|
import { buildReconciledApplicationGraph } from "./javascriptRuntimeReconciliationGraph.js";
|
|
import { reconcileRuntimeEntities } from "./javascriptRuntimeReconciliationMatching.js";
|
|
import {
|
|
parseRuntimeCaptures,
|
|
parseStaticLayers,
|
|
} from "./javascriptRuntimeReconciliationParsing.js";
|
|
import { createJavaScriptRuntimeReconciliationResult } from "./javascriptRuntimeReconciliationResult.js";
|
|
import type { JavaScriptRuntimeReconciliationResult } from "./javascriptRuntimeReconciliationSchemas.js";
|
|
import { reconcileJavaScriptRuntimeInputSchema } from "./javascriptRuntimeReconciliationSchemas.js";
|
|
import { projectRuntimeCaptures } from "./javascriptRuntimeReconciliationRuntime.js";
|
|
import { collectStaticRuntimeCandidates } from "./javascriptRuntimeStaticCandidates.js";
|
|
|
|
/** Reconcile static JAG layers with authorized passive CDP Evidence. */
|
|
export const reconcileJavaScriptRuntime = (
|
|
input: unknown,
|
|
): JavaScriptRuntimeReconciliationResult => {
|
|
const parsed = reconcileJavaScriptRuntimeInputSchema.parse(input);
|
|
const layers = parseStaticLayers(parsed.static_layers);
|
|
const captures = parseRuntimeCaptures(parsed.runtime_observations);
|
|
const runtime = projectRuntimeCaptures(captures);
|
|
const candidates = collectStaticRuntimeCandidates(layers);
|
|
const matching = reconcileRuntimeEntities({
|
|
entities: runtime.entities,
|
|
candidates,
|
|
layers,
|
|
});
|
|
const loadStates = classifyStaticLoadStates(
|
|
layers,
|
|
runtime.entities,
|
|
matching.items,
|
|
{
|
|
reconciliationComplete:
|
|
runtime.omittedEntities === 0 && matching.omittedItems === 0,
|
|
},
|
|
);
|
|
const graph = buildReconciledApplicationGraph({
|
|
layers,
|
|
captures,
|
|
runtime,
|
|
reconciliationEdges: matching.edges,
|
|
omittedReconciliationItems: matching.omittedItems,
|
|
});
|
|
return createJavaScriptRuntimeReconciliationResult({
|
|
layers,
|
|
captures,
|
|
runtime,
|
|
matching,
|
|
loadStates,
|
|
graph: graph.graph,
|
|
omittedGraphItems: graph.omittedGraphItems,
|
|
});
|
|
};
|