2023-05-23 18:53:53 +00:00
|
|
|
import { HttpSpacePrimitives } from "../../common/spaces/http_space_primitives.ts";
|
|
|
|
import { SysCallMapping } from "../../plugos/system.ts";
|
|
|
|
|
|
|
|
export function shellSyscalls(
|
|
|
|
httpSpacePrimitives?: HttpSpacePrimitives,
|
|
|
|
): SysCallMapping {
|
|
|
|
return {
|
|
|
|
"shell.run": async (
|
|
|
|
_ctx,
|
|
|
|
cmd: string,
|
|
|
|
args: string[],
|
|
|
|
): Promise<{ stdout: string; stderr: string; code: number }> => {
|
|
|
|
if (!httpSpacePrimitives) {
|
|
|
|
throw new Error("Not supported in fully local mode");
|
|
|
|
}
|
|
|
|
const resp = httpSpacePrimitives.authenticatedFetch(
|
2023-07-06 14:47:50 +00:00
|
|
|
`${httpSpacePrimitives.url}/.rpc`,
|
2023-05-23 18:53:53 +00:00
|
|
|
{
|
|
|
|
method: "POST",
|
|
|
|
body: JSON.stringify({
|
|
|
|
operation: "shell",
|
|
|
|
cmd,
|
|
|
|
args,
|
|
|
|
}),
|
|
|
|
},
|
|
|
|
);
|
|
|
|
const { code, stderr, stdout } = await (await resp).json();
|
|
|
|
if (code !== 0) {
|
|
|
|
throw new Error(stderr);
|
|
|
|
}
|
|
|
|
return { code, stderr, stdout };
|
|
|
|
},
|
|
|
|
};
|
|
|
|
}
|