import { mkdir } from "node:fs/promises"; import { isAbsolute, join, normalize } from "node:path"; import { runDirectoryForRequest } from "./run-store.js"; import type { WorkerRequest } from "./workflow-types.js"; export function runArtifactDirectory(namespaceDirectory: string, requestKey: string): string { return join(runDirectoryForRequest(namespaceDirectory, requestKey), "artifacts"); } export async function ensureRunArtifactDirectory( namespaceDirectory: string, requestKey: string, ): Promise { const directory = runArtifactDirectory(namespaceDirectory, requestKey); await mkdir(directory, { recursive: true, mode: 0o700 }); return directory; } export function withRunArtifactContext( request: WorkerRequest, artifactDirectory: string, ): WorkerRequest { if (!isAbsolute(artifactDirectory)) { throw new TypeError("Run artifact directory must be absolute"); } const canonical = normalize(artifactDirectory); return { ...request, contextRefs: [ { kind: "artifact", value: canonical }, ...request.contextRefs.filter((reference) => reference.kind !== "artifact" || normalize(reference.value) !== canonical), ], }; }