openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
65 lines (64 loc) • 1.68 kB
JavaScript
import { chmodSync, statSync, unlinkSync, writeFileSync } from "node:fs";
import path from "node:path";
import { randomUUID } from "node:crypto";
//#region src/infra/private-mode.ts
const CHMOD_UNSUPPORTED_CODES = /* @__PURE__ */ new Set([
"ENOTSUP",
"EOPNOTSUPP",
"EINVAL"
]);
const PRIVATE_PROBE_FILE_MODE = 384;
function hasRestrictivePermissions(target) {
try {
return (statSync(target).mode & 63) === 0;
} catch {
return false;
}
}
function filesystemRejectsChmod(target) {
let probePath;
try {
const probeDir = statSync(target).isDirectory() ? target : path.dirname(target);
probePath = path.join(probeDir, `.openclaw-chmod-probe-${randomUUID()}`);
writeFileSync(probePath, "", {
flag: "wx",
mode: PRIVATE_PROBE_FILE_MODE
});
} catch {
return false;
}
try {
chmodSync(probePath, PRIVATE_PROBE_FILE_MODE);
return false;
} catch (err) {
return err.code === "EPERM";
} finally {
try {
unlinkSync(probePath);
} catch {}
}
}
function canIgnorePrivateChmodError(target, code) {
if (code && CHMOD_UNSUPPORTED_CODES.has(code)) return true;
if (code === "EROFS") return hasRestrictivePermissions(target);
if (code !== "EPERM") return false;
return hasRestrictivePermissions(target) || filesystemRejectsChmod(target);
}
/**
* Applies a private POSIX mode, reporting unsupported filesystems without
* weakening real permission failures.
*/
function applyPrivateModeSync(target, mode) {
try {
chmodSync(target, mode);
return { applied: true };
} catch (err) {
if (!canIgnorePrivateChmodError(target, err.code)) throw err;
return {
applied: false,
error: err
};
}
}
//#endregion
export { applyPrivateModeSync as t };