Files
overlord/Overlord-Server/src/server/build-utils.ts
T
2026-03-05 00:04:26 -06:00

31 lines
940 B
TypeScript

import path from "path";
const MUTEX_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-";
export function generateBuildMutex(length = 24): string {
const bytes = new Uint8Array(length);
crypto.getRandomValues(bytes);
return Array.from(bytes)
.map((b) => MUTEX_CHARS[b % MUTEX_CHARS.length])
.join("");
}
export function sanitizeMutex(value?: string): string | undefined {
if (!value) return undefined;
const trimmed = value.trim();
if (!trimmed) return undefined;
if (!/^[A-Za-z0-9._-]{1,64}$/.test(trimmed)) {
throw new Error("Mutex must be 1-64 chars using letters, numbers, '.', '_' or '-' only");
}
return trimmed;
}
export function sanitizeOutputName(name: string): string {
const base = path.basename(name);
const cleaned = base.replace(/[^A-Za-z0-9._-]/g, "");
if (!cleaned || cleaned !== base) {
throw new Error("Invalid output filename");
}
return cleaned;
}