Files
reverse-engineering-anything/src/application/javascript/ElectronActiveEvidence.ts
T

57 lines
2.0 KiB
TypeScript

import { digestCanonicalValue } from "../../domain/canonicalDigest.js";
import type { ProviderIdentity } from "../AnalysisProvider.js";
import type { Evidence, EvidenceObservation } from "../../domain/evidence.js";
import { createEvidence } from "../../domain/evidence.js";
import type {
ElectronActiveObservationInput,
ElectronActiveObservationResult,
} from "../../domain/javascript/electronActiveObservation.js";
import { jsonObjectSchema } from "../../domain/jsonValue.js";
import type { CanonicalElectronActiveObservationInput } from "./ElectronActiveObservationPort.js";
/** Commit the selected Electron experiment and its observed result. */
export const createElectronActiveEvidence = (
input: ElectronActiveObservationInput,
result: ElectronActiveObservationResult,
provider: ProviderIdentity,
resolvedInput?: CanonicalElectronActiveObservationInput,
): Evidence =>
createEvidence(undefined, provider, {
predicateType: "rea.electron-active-scenario",
operation: "capture_electron_scenario",
parameters: parameters(input, resolvedInput),
result,
confidence: "observed",
authority: "controlled-replay",
environment: {
id: `${result.application.electron_version}@unknown`,
platform: "unknown",
architecture: "unknown",
isolation: "none",
},
limitations: [
...result.limitations,
"Application host platform and architecture were not observed.",
],
});
const parameters = (
input: ElectronActiveObservationInput,
resolvedInput?: CanonicalElectronActiveObservationInput,
): EvidenceObservation["parameters"] => {
const scenario = jsonObjectSchema.parse(input);
return {
...scenario,
scenario_sha256: digestCanonicalValue(scenario, "Electron scenario"),
...(resolvedInput === undefined
? {}
: {
resolved_paths: {
executable_path: resolvedInput.executable_path,
application_path: resolvedInput.application_path,
application_root: resolvedInput.application_root,
},
}),
};
};