UNPKG

@grouparoo/core

Version:
185 lines (184 loc) 6.63 kB
"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;