|
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; |
|
|