72 lines
2.6 KiB
TypeScript
72 lines
2.6 KiB
TypeScript
import type { AnalysisError } from "../../domain/analysisErrorBase.js";
|
|
import { createEvidence, type Evidence } from "../../domain/evidence.js";
|
|
import { ok, type Result } from "../../domain/result.js";
|
|
import { verifyManagedNativeVerificationSource } from "../../domain/managed/managedNativeVerification.js";
|
|
import {
|
|
readManagedNativeVerificationSource,
|
|
type ManagedNativeVerificationSource,
|
|
} from "../../domain/managed/managedNativeVerificationSource.js";
|
|
import type { ManagedNativeVerificationResult } from "../../domain/managed/managedNativeVerificationSchemas.js";
|
|
import { MANAGED_WORKFLOW_PROVIDER } from "../InvestigationProviders.js";
|
|
|
|
const OPERATION = "verify_managed_native_boundaries" as const;
|
|
|
|
export interface ManagedNativeVerificationExecution {
|
|
readonly evidence: Evidence;
|
|
readonly summary: ManagedNativeVerificationResult["summary"];
|
|
readonly sourceEvidence: readonly Evidence[];
|
|
}
|
|
|
|
/** Resolve untrusted source Evidence, then execute over the trusted parsed source. */
|
|
export const executeManagedNativeBoundaries = (
|
|
rawInput: unknown,
|
|
): Result<ManagedNativeVerificationExecution, AnalysisError> => {
|
|
const source = readManagedNativeVerificationSource(rawInput);
|
|
if (!source.ok) return source;
|
|
const result = verifyManagedNativeVerificationSource(source.value);
|
|
const evidence = createManagedNativeVerificationEvidence(
|
|
source.value,
|
|
result,
|
|
);
|
|
return ok({
|
|
evidence,
|
|
summary: result.summary,
|
|
sourceEvidence: [
|
|
source.value.managedEvidence,
|
|
...source.value.nativeObservations.map(
|
|
({ evidence: observation }) => observation,
|
|
),
|
|
],
|
|
});
|
|
};
|
|
|
|
/** Return only derived Evidence for callers that do not need source observations. */
|
|
export const verifyManagedNativeBoundariesEvidence = (
|
|
rawInput: unknown,
|
|
): Result<Evidence, AnalysisError> => {
|
|
const execution = executeManagedNativeBoundaries(rawInput);
|
|
return execution.ok ? ok(execution.value.evidence) : execution;
|
|
};
|
|
|
|
const createManagedNativeVerificationEvidence = (
|
|
source: ManagedNativeVerificationSource,
|
|
result: ManagedNativeVerificationResult,
|
|
): Evidence =>
|
|
createEvidence(undefined, MANAGED_WORKFLOW_PROVIDER, {
|
|
predicateType: "rea.managed-native-verification",
|
|
operation: OPERATION,
|
|
parameters: {
|
|
managed_boundaries_evidence_id: source.managedEvidence.evidence_id,
|
|
native_evidence_ids: source.nativeObservations.map(
|
|
({ evidence }) => evidence.evidence_id,
|
|
),
|
|
},
|
|
result,
|
|
rawResult: null,
|
|
confidence: "inferred",
|
|
authority: "analyst-inference",
|
|
environment: null,
|
|
limitations: result.limitations,
|
|
evidenceLinks: result.evidence_links,
|
|
});
|