Files
openclaw/scripts/lib/npm-verify-exec.ts

49 lines
1.5 KiB
TypeScript

// Npm Verify Exec script supports OpenClaw repository automation.
import { execFileSync, type ExecFileSyncOptionsWithStringEncoding } from "node:child_process";
import { readPositiveEnvInt } from "./numeric-options.mjs";
export type NpmVerifyCommandInvocation = {
command: string;
args: string[];
windowsVerbatimArguments?: boolean;
};
type NpmVerifyExecOptions = ExecFileSyncOptionsWithStringEncoding & {
windowsVerbatimArguments?: boolean;
};
const DEFAULT_NPM_VERIFY_COMMAND_TIMEOUT_MS = 5 * 60 * 1000;
const DEFAULT_NPM_VERIFY_COMMAND_MAX_BUFFER_BYTES = 16 * 1024 * 1024;
export function runNpmVerifyCommand(
invocation: NpmVerifyCommandInvocation,
cwd: string,
options: { maxBufferBytes?: number; timeoutMs?: number } = {},
): string {
const timeoutMs =
options.timeoutMs ??
readPositiveEnvInt(
"OPENCLAW_NPM_VERIFY_COMMAND_TIMEOUT_MS",
process.env,
DEFAULT_NPM_VERIFY_COMMAND_TIMEOUT_MS,
);
const maxBuffer =
options.maxBufferBytes ??
readPositiveEnvInt(
"OPENCLAW_NPM_VERIFY_COMMAND_MAX_BUFFER_BYTES",
process.env,
DEFAULT_NPM_VERIFY_COMMAND_MAX_BUFFER_BYTES,
);
const execOptions: NpmVerifyExecOptions = {
cwd,
encoding: "utf8",
killSignal: "SIGKILL",
maxBuffer,
stdio: ["ignore", "pipe", "pipe"],
timeout: timeoutMs,
windowsVerbatimArguments: invocation.windowsVerbatimArguments,
};
return execFileSync(invocation.command, invocation.args, execOptions).trim();
}