* feat: add feishu & yuque dataset (#3379) * feat: add feishu & yuque dataset * fix ts * fix ts * move type position * fix * fix: merge interface * fix * feat: dingtalk sso support (#3408) * fix: optional sso state * feat: dingtalk bot * feat: dingtalk sso login * chore: move i18n to user namespace * feat: dingtalk bot integration (#3415) * feat: dingtalk bot integration * docs: config dingtalk bot * feat:sear XNG服务 (#3413) * feat:sear XNG服务 * 补充了courseUrl * 添加了官方文档 * 错误时返回情况修正了一下 * Tracks (#3420) * feat: node intro * feat: add domain track * dingding sso login * perf: api dataset code and add doc * feat: tracks * feat: searXNG plugins * fix: ts * feat: delete node tracks (#3423) * fix: dingtalk bot GET verification (#3424) * 4.8.16 test: fix: plugin inputs render;fix: ui offset (#3426) * fix: ui offset * perf: dingding talk * fix: plugin inputs render * feat: menu all folder (#3429) * fix: recall code --------- Co-authored-by: heheer <heheer@sealos.io> Co-authored-by: a.e. <49438478+I-Info@users.noreply.github.com> Co-authored-by: Jiangween <145003935+Jiangween@users.noreply.github.com>
102 lines
2.5 KiB
TypeScript
102 lines
2.5 KiB
TypeScript
import { PluginSourceEnum } from '@fastgpt/global/core/plugin/constants';
|
|
import { SystemPluginResponseType } from './type';
|
|
import { SystemPluginTemplateItemType } from '@fastgpt/global/core/workflow/type';
|
|
import { cloneDeep } from 'lodash';
|
|
import { WorkerNameEnum, runWorker } from '@fastgpt/service/worker/utils';
|
|
|
|
// Run in main thread
|
|
const staticPluginList = [
|
|
'getTime',
|
|
'fetchUrl',
|
|
'feishu',
|
|
'DingTalkWebhook',
|
|
'WeWorkWebhook',
|
|
'google',
|
|
'bing'
|
|
];
|
|
// Run in worker thread (Have npm packages)
|
|
const packagePluginList = [
|
|
'mathExprVal',
|
|
'duckduckgo',
|
|
'duckduckgo/search',
|
|
'duckduckgo/searchImg',
|
|
'duckduckgo/searchNews',
|
|
'duckduckgo/searchVideo',
|
|
'drawing',
|
|
'drawing/baseChart',
|
|
'wiki',
|
|
'databaseConnection',
|
|
'Doc2X',
|
|
'Doc2X/PDF2text',
|
|
'searchXNG'
|
|
];
|
|
|
|
export const list = [...staticPluginList, ...packagePluginList];
|
|
|
|
/* Get plugins */
|
|
export const getCommunityPlugins = () => {
|
|
return list.map<SystemPluginTemplateItemType>((name) => {
|
|
const config = require(`./src/${name}/template.json`);
|
|
|
|
const isFolder = list.find((item) => item.startsWith(`${name}/`));
|
|
|
|
const parentIdList = name.split('/').slice(0, -1);
|
|
const parentId =
|
|
parentIdList.length > 0 ? `${PluginSourceEnum.community}-${parentIdList.join('/')}` : null;
|
|
|
|
return {
|
|
...config,
|
|
id: `${PluginSourceEnum.community}-${name}`,
|
|
isFolder,
|
|
parentId,
|
|
isActive: true,
|
|
isOfficial: true
|
|
};
|
|
});
|
|
};
|
|
|
|
export const getSystemPluginTemplates = () => {
|
|
if (!global.systemPlugins) return [];
|
|
|
|
const oldPlugins = global.communityPlugins ?? [];
|
|
return [...oldPlugins, ...cloneDeep(global.systemPlugins)];
|
|
};
|
|
|
|
export const getCommunityCb = async () => {
|
|
const loadCommunityModule = async (name: string) => {
|
|
const module = await import(`./src/${name}/index`);
|
|
return module.default;
|
|
};
|
|
|
|
const result = (
|
|
await Promise.all(
|
|
list.map(async (name) => {
|
|
try {
|
|
return {
|
|
name,
|
|
cb: staticPluginList.includes(name)
|
|
? await loadCommunityModule(name)
|
|
: (e: any) => {
|
|
return runWorker(WorkerNameEnum.systemPluginRun, {
|
|
pluginName: name,
|
|
data: e
|
|
});
|
|
}
|
|
};
|
|
} catch (error) {}
|
|
})
|
|
)
|
|
).filter(Boolean) as {
|
|
name: string;
|
|
cb: any;
|
|
}[];
|
|
|
|
return result.reduce<Record<string, (e: any) => SystemPluginResponseType>>(
|
|
(acc, { name, cb }) => {
|
|
acc[name] = cb;
|
|
return acc;
|
|
},
|
|
{}
|
|
);
|
|
};
|