@grouparoo/core
Version:
The Grouparoo Core
185 lines (184 loc) • 6.63 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AppDestroy = exports.AppView = exports.AppTest = exports.AppEdit = exports.AppCreate = exports.AppOptions = exports.AppsList = void 0;
const authenticatedAction_1 = require("../classes/actions/authenticatedAction");
const App_1 = require("../models/App");
const optionHelper_1 = require("../modules/optionHelper");
const configWriter_1 = require("../modules/configWriter");
const apiData_1 = require("../modules/apiData");
class AppsList extends authenticatedAction_1.AuthenticatedAction {
constructor() {
super(...arguments);
this.name = "apps:list";
this.description = "list all the apps";
this.permission = { topic: "app", mode: "read" };
this.outputExample = {};
this.inputs = {
limit: { required: true, default: 100, formatter: apiData_1.APIData.ensureNumber },
offset: { required: true, default: 0, formatter: apiData_1.APIData.ensureNumber },
state: { required: false },
order: {
required: false,
formatter: apiData_1.APIData.ensureArray,
default: [
["name", "desc"],
["createdAt", "desc"],
],
},
};
}
async runWithinTransaction({ params }) {
const where = {};
if (params.state)
where["state"] = params.state;
const total = await App_1.App.scope(null).count({ where });
const apps = await App_1.App.scope(null).findAll({
where,
limit: params.limit,
offset: params.offset,
order: params.order,
});
return {
total,
apps: await Promise.all(apps.map(async (app) => app.apiData())),
};
}
}
exports.AppsList = AppsList;
class AppOptions extends authenticatedAction_1.AuthenticatedAction {
constructor() {
super(...arguments);
this.name = "app:options";
this.description = "return option choices from this app";
this.outputExample = {};
this.permission = { topic: "app", mode: "read" };
this.inputs = {
id: { required: true },
};
}
async runWithinTransaction({ params }) {
const environmentVariableOptions = optionHelper_1.OptionHelper.getEnvironmentVariableOptionsForTopic("app");
const app = await App_1.App.findById(params.id);
const { pluginApp } = await app.getPlugin();
const pluginOptions = pluginApp.options;
return {
options: await app.appOptions(),
pluginOptions,
environmentVariableOptions,
};
}
}
exports.AppOptions = AppOptions;
class AppCreate extends authenticatedAction_1.AuthenticatedAction {
constructor() {
super(...arguments);
this.name = "app:create";
this.description = "create an app";
this.outputExample = {};
this.permission = { topic: "app", mode: "write" };
this.inputs = {
name: { required: false },
type: { required: true },
state: { required: false },
options: { required: false, formatter: apiData_1.APIData.ensureObject },
};
}
async runWithinTransaction({ params }) {
const app = await App_1.App.create({
name: params.name,
type: params.type,
});
if (params.options)
await app.setOptions(params.options);
if (params.state)
await app.update({ state: params.state });
await configWriter_1.ConfigWriter.run();
return { app: await app.apiData() };
}
}
exports.AppCreate = AppCreate;
class AppEdit extends authenticatedAction_1.AuthenticatedAction {
constructor() {
super(...arguments);
this.name = "app:edit";
this.description = "edit an app";
this.outputExample = {};
this.permission = { topic: "app", mode: "write" };
this.inputs = {
id: { required: true },
name: { required: false },
type: { required: false },
state: { required: false },
options: { required: false, formatter: apiData_1.APIData.ensureObject },
};
}
async runWithinTransaction({ params }) {
const app = await App_1.App.findById(params.id);
if (params.options)
await app.setOptions(params.options);
await app.update(params);
await configWriter_1.ConfigWriter.run();
return { app: await app.apiData() };
}
}
exports.AppEdit = AppEdit;
class AppTest extends authenticatedAction_1.AuthenticatedAction {
constructor() {
super(...arguments);
this.name = "app:test";
this.description = "test the options passed to an app";
this.outputExample = {};
this.permission = { topic: "app", mode: "write" };
this.inputs = {
id: { required: true },
options: { required: false, formatter: apiData_1.APIData.ensureObject },
};
}
async runWithinTransaction({ params }) {
const app = await App_1.App.findById(params.id);
const test = await app.test(params.options);
if (test.error)
test.error = String(test.error);
return {
test,
app: await app.apiData(),
};
}
}
exports.AppTest = AppTest;
class AppView extends authenticatedAction_1.AuthenticatedAction {
constructor() {
super(...arguments);
this.name = "app:view";
this.description = "view an app";
this.outputExample = {};
this.permission = { topic: "app", mode: "read" };
this.inputs = {
id: { required: true },
};
}
async runWithinTransaction({ params }) {
const app = await App_1.App.findById(params.id);
return { app: await app.apiData() };
}
}
exports.AppView = AppView;
class AppDestroy extends authenticatedAction_1.AuthenticatedAction {
constructor() {
super(...arguments);
this.name = "app:destroy";
this.description = "destroy an app";
this.outputExample = {};
this.permission = { topic: "app", mode: "write" };
this.inputs = {
id: { required: true },
};
}
async runWithinTransaction({ params }) {
const app = await App_1.App.findById(params.id);
await app.destroy();
await configWriter_1.ConfigWriter.run();
return { success: true };
}
}
exports.AppDestroy = AppDestroy;