115 lines
3.1 KiB
JavaScript
115 lines
3.1 KiB
JavaScript
import fs from 'fs';
|
|
import path, { join } from 'path';
|
|
import { fileURLToPath } from 'url';
|
|
import appInfoConverter from '../helpers/app-info-converter.js';
|
|
import getApp from '../helpers/get-app.js';
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
|
|
class App {
|
|
static folderPath = join(__dirname, '../apps');
|
|
static list = fs
|
|
.readdirSync(this.folderPath)
|
|
.filter((file) => fs.statSync(this.folderPath + '/' + file).isDirectory());
|
|
|
|
static async findAll(name, stripFuncs = true) {
|
|
if (!name)
|
|
return Promise.all(
|
|
this.list.map(
|
|
async (name) => await this.findOneByName(name, stripFuncs)
|
|
)
|
|
);
|
|
|
|
return Promise.all(
|
|
this.list
|
|
.filter((app) => app.includes(name.toLowerCase()))
|
|
.map((name) => this.findOneByName(name, stripFuncs))
|
|
);
|
|
}
|
|
|
|
static async findOneByName(name, stripFuncs = false) {
|
|
const rawAppData = await getApp(name.toLocaleLowerCase(), stripFuncs);
|
|
|
|
return appInfoConverter(rawAppData);
|
|
}
|
|
|
|
static async findOneByKey(key, stripFuncs = false) {
|
|
const rawAppData = await getApp(key, stripFuncs);
|
|
|
|
return appInfoConverter(rawAppData);
|
|
}
|
|
|
|
static async findAuthByKey(key, stripFuncs = false) {
|
|
const rawAppData = await getApp(key, stripFuncs);
|
|
const appData = appInfoConverter(rawAppData);
|
|
|
|
return appData?.auth || {};
|
|
}
|
|
|
|
static async findTriggersByKey(key, stripFuncs = false) {
|
|
const rawAppData = await getApp(key, stripFuncs);
|
|
const appData = appInfoConverter(rawAppData);
|
|
|
|
return appData?.triggers || [];
|
|
}
|
|
|
|
static async findTriggerSubsteps(appKey, triggerKey, stripFuncs = false) {
|
|
const rawAppData = await getApp(appKey, stripFuncs);
|
|
const appData = appInfoConverter(rawAppData);
|
|
|
|
const trigger = appData?.triggers?.find(
|
|
(trigger) => trigger.key === triggerKey
|
|
);
|
|
|
|
return trigger?.substeps || [];
|
|
}
|
|
|
|
static async findActionsByKey(key, stripFuncs = false) {
|
|
const rawAppData = await getApp(key, stripFuncs);
|
|
const appData = appInfoConverter(rawAppData);
|
|
|
|
return appData?.actions || [];
|
|
}
|
|
|
|
static async findActionSubsteps(appKey, actionKey, stripFuncs = false) {
|
|
const rawAppData = await getApp(appKey, stripFuncs);
|
|
const appData = appInfoConverter(rawAppData);
|
|
|
|
const action = appData?.actions?.find((action) => action.key === actionKey);
|
|
|
|
return action?.substeps || [];
|
|
}
|
|
|
|
static async checkAppAndAction(appKey, actionKey) {
|
|
const app = await this.findOneByKey(appKey);
|
|
|
|
if (!actionKey) return;
|
|
|
|
const hasAction = app.actions?.find((action) => action.key === actionKey);
|
|
|
|
if (!hasAction) {
|
|
throw new Error(
|
|
`${app.name} does not have an action with the "${actionKey}" key!`
|
|
);
|
|
}
|
|
}
|
|
|
|
static async checkAppAndTrigger(appKey, triggerKey) {
|
|
const app = await this.findOneByKey(appKey);
|
|
|
|
if (!triggerKey) return;
|
|
|
|
const hasTrigger = app.triggers?.find(
|
|
(trigger) => trigger.key === triggerKey
|
|
);
|
|
|
|
if (!hasTrigger) {
|
|
throw new Error(
|
|
`${app.name} does not have a trigger with the "${triggerKey}" key!`
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
export default App;
|