import { ParamsFrom } from "actionhero"; import { AuthenticatedAction } from "../classes/actions/authenticatedAction"; import { OptionallyAuthenticatedAction } from "../classes/actions/optionallyAuthenticatedAction"; import { spawnPromise } from "../modules/spawnPromise"; import { ConfigUser } from "../modules/configUser"; import { ConfigWriter } from "../modules/configWriter"; import { APIData } from "../modules/apiData"; import { ActionPermission } from "../models/Permission"; import { getGrouparooRunMode } from "../modules/runMode"; export class ConfigValidate extends AuthenticatedAction { name = "config:validate"; description = "I validate the local config"; permission: ActionPermission = { topic: "app", mode: "write" }; inputs = { local: { required: true, default: false, formatter: APIData.ensureBoolean, }, } as const; async runWithinTransaction({ params, }: { params: ParamsFrom; }) { return spawnPromise("./node_modules/.bin/grouparoo", [ "validate", params.local === true ? `--validate` : null, ]); } } export class ConfigApply extends AuthenticatedAction { name = "config:apply"; description = "I apply the local config"; permission: ActionPermission = { topic: "system", mode: "write" }; inputs = { local: { required: true, default: false, formatter: APIData.ensureBoolean, }, } as const; async runWithinTransaction({ params }: { params: ParamsFrom }) { return spawnPromise("./node_modules/.bin/grouparoo", [ "apply", params.local === true ? `--validate` : null, ]); } } export class ConfigUserCreate extends OptionallyAuthenticatedAction { name = "config:user:create"; description = "I write user details to a .local file."; permission: ActionPermission = { topic: "system", mode: "write" }; inputs = { email: { required: true }, company: { required: true }, subscribed: { required: false, formatter: APIData.ensureBoolean }, } as const; async runWithinTransaction({ params, }: { params: ParamsFrom; }) { if (getGrouparooRunMode() !== "cli:config") { throw new Error("Action only available in config mode."); } await ConfigUser.create(params); const user = await ConfigUser.get(); await ConfigWriter.run(); return { user }; } }