@judgeq/simple-sandbox
Version:
A simple sandbox for Node.js using Linux namespaces and cgroup.
70 lines (66 loc) • 1.71 kB
TypeScript
interface MountInfo {
src: string;
dst: string;
limit: number;
}
interface SandboxParameter {
time: number;
memory: number;
process: number;
chroot: string;
hostname: string;
mounts: MountInfo[];
redirectBeforeChroot: boolean;
mountProc: boolean;
executable: string;
stdin?: string | number;
stdout?: string | number;
stderr?: string | number;
user: {
uid: number;
gid: number;
};
cgroup: string;
parameters?: string[];
environments?: string[];
workingDirectory: string;
stackSize?: number;
}
declare enum SandboxStatus {
Unknown = 0,
OK = 1,
TimeLimitExceeded = 2,
MemoryLimitExceeded = 3,
RuntimeError = 4,
Cancelled = 5,
OutputLimitExceeded = 6
}
interface SandboxResult {
status: SandboxStatus;
time: number;
memory: number;
code: number;
}
declare class SandboxProcess {
readonly parameter: SandboxParameter;
readonly pid: number;
private readonly cancellationToken;
private readonly stopCallback;
private countedCpuTime;
private actualCpuTime;
private timeout;
private cancelled;
private waitPromise;
running: boolean;
constructor(parameter: SandboxParameter, pid: number, execParam: ArrayBuffer);
private removeCgroup;
private cleanup;
stop(): void;
waitForStop(): Promise<SandboxResult>;
}
declare function startSandbox(parameter: SandboxParameter): SandboxProcess;
declare function getUidAndGidInSandbox(rootfs: string, username: string): {
uid: number;
gid: number;
};
export { MountInfo, SandboxParameter, SandboxResult, SandboxStatus, getUidAndGidInSandbox, startSandbox };