dynamic plugin system, toast notifications, board delete, gitea-sync plugin rewrite, granular locking fixes
This commit is contained in:
@@ -13,6 +13,7 @@ import prisma from "./lib/prisma.js";
|
||||
import securityPlugin from "./middleware/security.js";
|
||||
import authPlugin from "./middleware/auth.js";
|
||||
import { loadPlugins, startupPlugins, shutdownPlugins, getActivePluginInfo, getPluginAdminRoutes } from "./plugins/loader.js";
|
||||
import { setLogger, initDynamicPlugins, shutdownDynamicPlugins, getDynamicPluginInfo, getDynamicPluginAdminRoutes } from "./plugins/registry.js";
|
||||
import { seedAllBoardTemplates } from "./lib/default-templates.js";
|
||||
|
||||
import boardRoutes from "./routes/boards.js";
|
||||
@@ -50,6 +51,8 @@ import avatarRoutes from "./routes/avatars.js";
|
||||
import recoveryRoutes from "./routes/recovery.js";
|
||||
import settingsRoutes from "./routes/admin/settings.js";
|
||||
import adminTeamRoutes from "./routes/admin/team.js";
|
||||
import adminPluginRoutes from "./routes/admin/plugins.js";
|
||||
import pluginApiRoutes from "./routes/plugins-api.js";
|
||||
|
||||
export async function createServer() {
|
||||
const app = Fastify({
|
||||
@@ -160,6 +163,8 @@ export async function createServer() {
|
||||
await api.register(recoveryRoutes);
|
||||
await api.register(settingsRoutes);
|
||||
await api.register(adminTeamRoutes);
|
||||
await api.register(adminPluginRoutes);
|
||||
await api.register(pluginApiRoutes);
|
||||
}, { prefix: "/api/v1" });
|
||||
|
||||
// serve static frontend build in production
|
||||
@@ -177,6 +182,8 @@ export async function createServer() {
|
||||
|
||||
await loadPlugins(app);
|
||||
await startupPlugins();
|
||||
setLogger(app.log);
|
||||
await initDynamicPlugins();
|
||||
|
||||
// seed default templates for boards that have none
|
||||
await seedAllBoardTemplates(prisma);
|
||||
@@ -185,7 +192,7 @@ export async function createServer() {
|
||||
await app.register(async (api) => {
|
||||
api.get("/plugins/active", {
|
||||
config: { rateLimit: { max: 30, timeWindow: "1 minute" } },
|
||||
}, async () => getActivePluginInfo());
|
||||
}, async () => [...getActivePluginInfo(), ...getDynamicPluginInfo()]);
|
||||
|
||||
// register plugin-provided admin routes
|
||||
for (const route of getPluginAdminRoutes()) {
|
||||
@@ -194,10 +201,18 @@ export async function createServer() {
|
||||
component: route.component,
|
||||
}));
|
||||
}
|
||||
|
||||
// register dynamic plugin admin routes
|
||||
for (const route of getDynamicPluginAdminRoutes()) {
|
||||
api.get(`/plugins${route.path}`, { preHandler: [app.requireAdmin] }, async () => ({
|
||||
label: route.label,
|
||||
}));
|
||||
}
|
||||
}, { prefix: "/api/v1" });
|
||||
|
||||
app.addHook("onClose", async () => {
|
||||
await shutdownPlugins();
|
||||
await shutdownDynamicPlugins();
|
||||
});
|
||||
|
||||
return app;
|
||||
|
||||
Reference in New Issue
Block a user