mirror of
https://github.com/chaos-zhu/easynode.git
synced 2026-10-07 11:33:44 +08:00
50 lines
1.4 KiB
JavaScript
50 lines
1.4 KiB
JavaScript
/**
|
|
* 脚本库访问层
|
|
*
|
|
* Web 接口与 AI 工具都从这里读取脚本,避免两边各自维护一份内置脚本
|
|
* 或对 id / 分组的转换规则。这里仅负责读取;执行权限仍由各调用方控制。
|
|
*/
|
|
|
|
import { randomStr } from './utils/tools.js'
|
|
import { ScriptsDB } from './utils/db-class.js'
|
|
import localShellJson from './config/shell.json' with { type: 'json' }
|
|
|
|
const scriptsDB = new ScriptsDB().getInstance()
|
|
|
|
// 内置脚本没有数据库 _id,启动时生成稳定于本进程生命周期的可引用 id。
|
|
const builtinScripts = JSON.parse(JSON.stringify(localShellJson)).map((item) => ({
|
|
...item,
|
|
id: randomStr(10),
|
|
index: '--',
|
|
description: item.description,
|
|
group: 'builtin',
|
|
builtin: true
|
|
}))
|
|
|
|
function normalizeStoredScript(item) {
|
|
return {
|
|
...item,
|
|
id: item._id,
|
|
group: item.group || 'default',
|
|
builtin: false
|
|
}
|
|
}
|
|
|
|
export async function listScripts() {
|
|
const scripts = (await scriptsDB.findAsync({})).map(normalizeStoredScript)
|
|
scripts.sort((a, b) => Number(b.index || 0) - Number(a.index || 0))
|
|
return [...scripts, ...builtinScripts]
|
|
}
|
|
|
|
export function listBuiltinScripts() {
|
|
return builtinScripts
|
|
}
|
|
|
|
export async function getScriptById(id) {
|
|
const builtin = builtinScripts.find((item) => item.id === id)
|
|
if (builtin) return builtin
|
|
|
|
const stored = await scriptsDB.findOneAsync({ _id: id })
|
|
return stored ? normalizeStoredScript(stored) : null
|
|
}
|