mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-31 12:33:40 +00:00
add start/stop/restart to effects
fix: add a default always to the get status chore: Only do updates when the thing is installed. chore: Make the thing buildable for testing chore: Add in the debugging chore: Remove the bluj tracing chore: Fix the build Chore: Make these fn's instead of allways ran. chore: Fix the testing fix: The stopping/ restarting service fix: Fix the restarting.
This commit is contained in:
@@ -1,8 +1,6 @@
|
||||
import Deno from "/deno_global.js";
|
||||
import * as mainModule from "/embassy.js";
|
||||
|
||||
// throw new Error("I'm going crasy")
|
||||
|
||||
function requireParam(param) {
|
||||
throw new Error(`Missing required parameter ${param}`);
|
||||
}
|
||||
@@ -49,10 +47,8 @@ const writeFile = (
|
||||
) => Deno.core.opAsync("write_file", volumeId, path, toWrite);
|
||||
|
||||
const readFile = (
|
||||
{
|
||||
volumeId = requireParam("volumeId"),
|
||||
path = requireParam("path"),
|
||||
} = requireParam("options"),
|
||||
{ volumeId = requireParam("volumeId"), path = requireParam("path") } =
|
||||
requireParam("options"),
|
||||
) => Deno.core.opAsync("read_file", volumeId, path);
|
||||
|
||||
const runDaemon = (
|
||||
@@ -74,11 +70,8 @@ const runDaemon = (
|
||||
};
|
||||
};
|
||||
const runCommand = async (
|
||||
{
|
||||
command = requireParam("command"),
|
||||
args = [],
|
||||
timeoutMillis = 30000,
|
||||
} = requireParam("options"),
|
||||
{ command = requireParam("command"), args = [], timeoutMillis = 30000 } =
|
||||
requireParam("options"),
|
||||
) => {
|
||||
let id = Deno.core.opAsync(
|
||||
"start_command",
|
||||
@@ -128,10 +121,8 @@ const rename = (
|
||||
} = requireParam("options"),
|
||||
) => Deno.core.opAsync("rename", srcVolume, srcPath, dstVolume, dstPath);
|
||||
const metadata = async (
|
||||
{
|
||||
volumeId = requireParam("volumeId"),
|
||||
path = requireParam("path"),
|
||||
} = requireParam("options"),
|
||||
{ volumeId = requireParam("volumeId"), path = requireParam("path") } =
|
||||
requireParam("options"),
|
||||
) => {
|
||||
const data = await Deno.core.opAsync("metadata", volumeId, path);
|
||||
return {
|
||||
@@ -142,10 +133,8 @@ const metadata = async (
|
||||
};
|
||||
};
|
||||
const removeFile = (
|
||||
{
|
||||
volumeId = requireParam("volumeId"),
|
||||
path = requireParam("path"),
|
||||
} = requireParam("options"),
|
||||
{ volumeId = requireParam("volumeId"), path = requireParam("path") } =
|
||||
requireParam("options"),
|
||||
) => Deno.core.opAsync("remove_file", volumeId, path);
|
||||
const isSandboxed = () => Deno.core.opSync("is_sandboxed");
|
||||
|
||||
@@ -182,26 +171,20 @@ const chmod = async (
|
||||
return await Deno.core.opAsync("chmod", volumeId, path, mode);
|
||||
};
|
||||
const readJsonFile = async (
|
||||
{
|
||||
volumeId = requireParam("volumeId"),
|
||||
path = requireParam("path"),
|
||||
} = requireParam("options"),
|
||||
{ volumeId = requireParam("volumeId"), path = requireParam("path") } =
|
||||
requireParam("options"),
|
||||
) => JSON.parse(await readFile({ volumeId, path }));
|
||||
const createDir = (
|
||||
{
|
||||
volumeId = requireParam("volumeId"),
|
||||
path = requireParam("path"),
|
||||
} = requireParam("options"),
|
||||
{ volumeId = requireParam("volumeId"), path = requireParam("path") } =
|
||||
requireParam("options"),
|
||||
) => Deno.core.opAsync("create_dir", volumeId, path);
|
||||
|
||||
const readDir = (
|
||||
{ volumeId = requireParam("volumeId"), path = requireParam("path") } = requireParam("options"),
|
||||
) => Deno.core.opAsync("read_dir", volumeId, path);
|
||||
const removeDir = (
|
||||
{
|
||||
volumeId = requireParam("volumeId"),
|
||||
path = requireParam("path"),
|
||||
} = requireParam("options"),
|
||||
{ volumeId = requireParam("volumeId"), path = requireParam("path") } =
|
||||
requireParam("options"),
|
||||
) => Deno.core.opAsync("remove_dir", volumeId, path);
|
||||
const trace = (whatToTrace = requireParam("whatToTrace")) =>
|
||||
Deno.core.opAsync("log_trace", whatToTrace);
|
||||
@@ -276,15 +259,10 @@ const getServiceConfig = async (
|
||||
);
|
||||
};
|
||||
|
||||
const setPermissions = async (
|
||||
{
|
||||
volumeId = requireParam("volumeId"),
|
||||
path = requireParam("path"),
|
||||
readonly = requireParam("readonly"),
|
||||
} = requireParam("options"),
|
||||
) => {
|
||||
return await Deno.core.opAsync("set_permissions", volumeId, path, readonly);
|
||||
};
|
||||
const started = () => Deno.core.opSync("set_started");
|
||||
const restart = () => Deno.core.opAsync("restart");
|
||||
const start = () => Deno.core.opAsync("start");
|
||||
const stop = () => Deno.core.opAsync("stop");
|
||||
|
||||
const currentFunction = Deno.core.opSync("current_function");
|
||||
const input = Deno.core.opSync("get_input");
|
||||
@@ -314,13 +292,19 @@ const effects = {
|
||||
runCommand,
|
||||
runDaemon,
|
||||
runRsync,
|
||||
setPermissions,
|
||||
chmod,
|
||||
signalGroup,
|
||||
sleep,
|
||||
trace,
|
||||
warn,
|
||||
writeFile,
|
||||
writeJsonFile,
|
||||
restart,
|
||||
start,
|
||||
stop,
|
||||
};
|
||||
const fnSpecificArgs = {
|
||||
main: { started },
|
||||
};
|
||||
|
||||
const defaults = {
|
||||
@@ -337,8 +321,10 @@ function safeToString(fn, orValue = "") {
|
||||
}
|
||||
}
|
||||
|
||||
const apiVersion = mainModule?.version || defaults?.version || 0;
|
||||
const runFunction = jsonPointerValue(mainModule, currentFunction) ||
|
||||
jsonPointerValue(defaults, currentFunction);
|
||||
const extraArgs = jsonPointerValue(fnSpecificArgs, currentFunction) || {};
|
||||
(async () => {
|
||||
const answer = await (async () => {
|
||||
if (typeof runFunction !== "function") {
|
||||
@@ -346,7 +332,21 @@ const runFunction = jsonPointerValue(mainModule, currentFunction) ||
|
||||
throw new Error(`Expecting ${currentFunction} to be a function`);
|
||||
}
|
||||
})()
|
||||
.then(() => runFunction(effects, input, ...variable_args))
|
||||
.then(() => {
|
||||
switch (apiVersion) {
|
||||
case 0:
|
||||
return runFunction(effects, input, ...variable_args);
|
||||
case 1:
|
||||
return runFunction({
|
||||
effects,
|
||||
input,
|
||||
args: variable_args,
|
||||
...extraArgs,
|
||||
});
|
||||
default:
|
||||
return { error: `Unknown API version ${apiVersion}` };
|
||||
}
|
||||
})
|
||||
.catch((e) => {
|
||||
if ("error" in e) return e;
|
||||
if ("error-code" in e) return e;
|
||||
|
||||
Reference in New Issue
Block a user