File Explorer

/proc/4/cwd/_ssr

This explorer reads the filesystem of the server it runs on, so /workspace/user isn't present here. Browsing and the terminal still work against this server's own disk from /.

0 dirs
9 files
shell-server-DFeDm4h2.mjs5.0 KB · 182 lines
import { n as createServerFn } from "./ssr.mjs";import { t as createServerRpc } from "./createServerRpc-A6pJPYTF.mjs";import { promises } from "node:fs";import * as path from "node:path";import { exec } from "node:child_process";//#region node_modules/.nitro/vite/services/ssr/assets/shell-server-DFeDm4h2.jsvar ROOT = "/";var MAX_OUTPUT = 2e5;var TIMEOUT_MS = 3e4;function resolveSafe(relPath) {	const cleaned = (relPath ?? "").replace(/^\/+/, "").replace(/\\/g, "/");	if (cleaned.includes("\0")) throw new Error("Invalid path");	const abs = path.resolve(ROOT, cleaned);	const rootResolved = path.resolve(ROOT);	if (abs !== rootResolved && !abs.startsWith(rootResolved)) throw new Error("Path escapes allowed root");	return abs;}function toRel(abs) {	return path.relative(path.resolve(ROOT), abs).split(path.sep).join("/");}var runCommand_createServerFn_handler = createServerRpc({	id: "43655b12b2525448f49cc143e8e0a1f9d366816530f47cde443331fced610278",	name: "runCommand",	filename: "src/lib/shell-server.ts"}, (opts) => runCommand.__executeServer(opts));var runCommand = createServerFn({ method: "POST" }).validator((d) => d).handler(runCommand_createServerFn_handler, async ({ data }) => {	const command = (data?.command ?? "").trim();	let cwdAbs = path.resolve(ROOT);	let cwdRel = "";	try {		cwdAbs = resolveSafe(data?.cwd ?? "");		if (!(await promises.stat(cwdAbs)).isDirectory()) cwdAbs = path.dirname(cwdAbs);		cwdRel = toRel(cwdAbs);	} catch {		cwdAbs = path.resolve(ROOT);		cwdRel = "";	}	if (!command) return {		cwd: cwdRel,		command,		stdout: "",		stderr: "",		code: 0,		durationMs: 0,		truncated: false,		newCwd: null	};	const cdMatch = /^cd(?:\s+(.+))?$/.exec(command);	if (cdMatch && !/[;&|]/.test(command)) {		const arg = (cdMatch[1] ?? "").trim().replace(/^["']|["']$/g, "");		let targetRel;		if (arg === "" || arg === "~" || arg === "/") targetRel = "";		else if (arg.startsWith("/")) targetRel = arg.replace(/^\/+/, "");		else targetRel = cwdRel ? `${cwdRel}/${arg}` : arg;		try {			const targetAbs = resolveSafe(targetRel);			if (!(await promises.stat(targetAbs)).isDirectory()) return {				cwd: cwdRel,				command,				stdout: "",				stderr: `cd: not a directory: ${arg}`,				code: 1,				durationMs: 0,				truncated: false,				newCwd: null			};			const newRel = toRel(targetAbs);			return {				cwd: cwdRel,				command,				stdout: "",				stderr: "",				code: 0,				durationMs: 0,				truncated: false,				newCwd: newRel			};		} catch (e) {			const code = e?.code;			const msg = code === "EACCES" || code === "EPERM" ? `cd: permission denied: ${arg}` : `cd: no such file or directory: ${arg}`;			return {				cwd: cwdRel,				command,				stdout: "",				stderr: msg,				code: 1,				durationMs: 0,				truncated: false,				newCwd: null			};		}	}	const started = Date.now();	return await new Promise((resolve) => {		exec(command, {			cwd: cwdAbs,			timeout: TIMEOUT_MS,			maxBuffer: MAX_OUTPUT * 4,			shell: "/bin/bash",			env: {				...process.env,				TERM: "dumb"			},			windowsHide: true		}, (error, stdout, stderr) => {			let out = stdout ?? "";			let err = stderr ?? "";			let truncated = false;			if (out.length > MAX_OUTPUT) {				out = out.slice(0, MAX_OUTPUT);				truncated = true;			}			if (err.length > MAX_OUTPUT) {				err = err.slice(0, MAX_OUTPUT);				truncated = true;			}			const code = error && typeof error.code === "number" ? error.code : error ? 1 : 0;			if (error && error.killed) err = (err ? err + "\n" : "") + `[command timed out after ${TIMEOUT_MS / 1e3}s]`;			resolve({				cwd: cwdRel,				command,				stdout: out,				stderr: err,				code,				durationMs: Date.now() - started,				truncated,				newCwd: null			});		});	});});var saveFile_createServerFn_handler = createServerRpc({	id: "3e9ad7efb5ff1b6ad57a93cc9f3882a022f3d539053d163dfd6fb95a332c1f69",	name: "saveFile",	filename: "src/lib/shell-server.ts"}, (opts) => saveFile.__executeServer(opts));var saveFile = createServerFn({ method: "POST" }).validator((d) => d).handler(saveFile_createServerFn_handler, async ({ data }) => {	const relInput = (data?.path ?? "").trim();	const content = data?.content ?? "";	let abs;	let relPath;	try {		abs = resolveSafe(relInput);		relPath = toRel(abs);	} catch {		return {			ok: false,			relPath: relInput,			size: 0,			error: "Invalid path"		};	}	try {		if ((await promises.stat(abs)).isDirectory()) return {			ok: false,			relPath,			size: 0,			error: "Path is a directory"		};	} catch {}	try {		await promises.writeFile(abs, content, "utf8");		const st = await promises.stat(abs);		return {			ok: true,			relPath,			size: st.size,			error: null		};	} catch (e) {		const code = e?.code;		return {			ok: false,			relPath,			size: 0,			error: code === "EACCES" || code === "EPERM" ? "Permission denied" : code === "ENOENT" ? "Parent folder doesn't exist" : "Could not write file"		};	}});//#endregionexport { runCommand_createServerFn_handler, saveFile_createServerFn_handler };