UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

65 lines (64 loc) 1.68 kB
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 };