Files
rea/src/application/managed/ManagedNativeVerificationService.ts
T

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,
});