fix(cli): preserve script export evidence through shared finalization

This commit is contained in:
morluto committed 2026-10-26 13:47:15 +08:00
1 parent 7ccecbcb00
commit 991a240606
2 files changed
+95 -45

No files matched your search

+19 -41
View File
@@ -1,15 +1,13 @@
import { Cli, z } from "incur";
import { exportWebScripts } from "../application/WebScriptExportService.js";
import { ArtifactReaderFailure } from "../artifacts/ArtifactReader.js";
import { ArtifactResourceScope } from "../artifacts/ArtifactResourceScope.js";
import { CLI_COMMANDS } from "../cliCommandNames.js";
import { logCliCommand } from "../cliLogging.js";
import { analysisErrorWithCleanupFailure } from "../domain/analysisErrorCleanup.js";
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
import { ProviderCleanupError } from "../domain/providerCleanupError.js";
import type { Logger } from "pino";
import { withCommandCancellation } from "./commandCancellation.js";
import { finishAnalysisCommand } from "./finishAnalysisCommand.js";
import { WEB_SCRIPT_EXPORT_PROVIDER } from "../domain/investigationProviders.js";
/** Register the local captured-script export CLI workflow. */
export const registerWebScriptCommands = (
@@ -33,45 +31,25 @@ export const registerWebScriptCommands = (
withCommandCancellation((signal) =>
logCliCommand(logger, CLI_COMMANDS.exportWebScripts, async () => {
const resources = new ArtifactResourceScope();
const result = await exportWebScripts(
{
capture_path: args.capturePath,
output_directory: args.outputDirectory,
},
const result = await finishAnalysisCommand(
() =>
exportWebScripts(
{
capture_path: args.capturePath,
output_directory: args.outputDirectory,
},
resources,
{ signal },
),
resources,
{ signal },
WEB_SCRIPT_EXPORT_PROVIDER.id,
"export_web_scripts",
signal,
"Web script export resources",
);
try {
await resources.close();
} catch (cause: unknown) {
const cleanup = ArtifactReaderFailure.cleanupObservation(
cause,
"Web script export resources",
);
const failure = new ProviderCleanupError(
"web-script-export",
cleanup.resources,
{ reason: cleanup.reason },
{ cause, operation: "export_web_scripts" },
);
const error = result.ok
? failure
: analysisErrorWithCleanupFailure(
result.error,
failure,
"export_web_scripts",
);
return {
error: "Script export failed",
...projectAnalysisError(error),
};
}
return result.ok
? result.value
: {
error: "Script export failed",
...projectAnalysisError(result.error),
};
return "evidence_id" in result
? result
: { error: "Script export failed", ...result };
}),
),
});