101 lines
4.3 KiB
JavaScript
101 lines
4.3 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.pluginsRouter = void 0;
|
|
const express_1 = require("express");
|
|
const plugin_registry_1 = require("../../core/plugin-registry");
|
|
const plugin_config_1 = require("../../core/plugin-config");
|
|
const StorageProvider_1 = require("../../core/StorageProvider");
|
|
/**
|
|
* Rotas de gerenciamento de plugins — exclusivo admin.
|
|
* Montado em /api/admin/plugins pelo server.ts via adminRouter.
|
|
*/
|
|
exports.pluginsRouter = (0, express_1.Router)();
|
|
// GET /api/admin/plugins — lista todos os plugins com status e config atual
|
|
exports.pluginsRouter.get('/', (_req, res) => {
|
|
const plugins = plugin_registry_1.pluginRegistry.list().map((entry) => ({
|
|
name: entry.name,
|
|
displayName: entry.manifest.displayName,
|
|
version: entry.manifest.version,
|
|
description: entry.manifest.description,
|
|
author: entry.manifest.author,
|
|
category: entry.manifest.category,
|
|
active: entry.active,
|
|
canDisable: entry.manifest.canDisable,
|
|
dependencies: entry.manifest.dependencies,
|
|
configSchema: entry.manifest.configSchema ?? [],
|
|
config: plugin_config_1.pluginConfig.get(entry.name),
|
|
hooks: entry.manifest.hooks ?? { subscribes: [], emits: [] },
|
|
}));
|
|
res.json(plugins);
|
|
});
|
|
// POST /api/admin/plugins/:name/enable — ativa plugin
|
|
exports.pluginsRouter.post('/:name/enable', async (req, res) => {
|
|
const { name } = req.params;
|
|
try {
|
|
await plugin_registry_1.pluginRegistry.activate(name);
|
|
res.json({ ok: true, message: `Plugin "${name}" ativado` });
|
|
}
|
|
catch (err) {
|
|
res.status(400).json({ error: err.message });
|
|
}
|
|
});
|
|
// POST /api/admin/plugins/:name/disable — desativa plugin (se canDisable=true)
|
|
exports.pluginsRouter.post('/:name/disable', async (req, res) => {
|
|
const { name } = req.params;
|
|
try {
|
|
await plugin_registry_1.pluginRegistry.deactivate(name);
|
|
res.json({ ok: true, message: `Plugin "${name}" desativado` });
|
|
}
|
|
catch (err) {
|
|
res.status(400).json({ error: err.message });
|
|
}
|
|
});
|
|
// GET /api/admin/plugins/:name/config — retorna config atual
|
|
exports.pluginsRouter.get('/:name/config', (req, res) => {
|
|
const { name } = req.params;
|
|
const entry = plugin_registry_1.pluginRegistry.getEntry(name);
|
|
if (!entry)
|
|
return res.status(404).json({ error: `Plugin "${name}" não encontrado` });
|
|
res.json({
|
|
name,
|
|
config: plugin_config_1.pluginConfig.get(name),
|
|
schema: entry.manifest.configSchema ?? [],
|
|
});
|
|
});
|
|
// GET /api/admin/plugins/storage/health — retorna status detalhado do storage
|
|
exports.pluginsRouter.get('/storage/health', async (_req, res) => {
|
|
if (!StorageProvider_1.storageProvider.isRegistered()) {
|
|
const cfg = plugin_config_1.pluginConfig.get('UnifiedStorageProvider');
|
|
const configured = !!(cfg.wasabiAccessKey && cfg.wasabiSecretKey && cfg.wasabiBucket);
|
|
return res.json({
|
|
healthy: false,
|
|
configured,
|
|
reason: configured ? 'needs_restart' : 'not_configured',
|
|
message: configured
|
|
? 'Credenciais salvas mas o plugin ainda não foi inicializado. Reinicie o servidor ou reative o plugin.'
|
|
: 'Wasabi não configurado. Acesse Admin > Plugins > UnifiedStorageProvider e insira as credenciais.',
|
|
});
|
|
}
|
|
await StorageProvider_1.storageProvider.updateHealth();
|
|
return res.json(StorageProvider_1.storageProvider.getLastHealthStatus());
|
|
});
|
|
// PUT /api/admin/plugins/:name/config — salva config e reativa plugin se necessário
|
|
exports.pluginsRouter.put('/:name/config', async (req, res) => {
|
|
const { name } = req.params;
|
|
const entry = plugin_registry_1.pluginRegistry.getEntry(name);
|
|
if (!entry)
|
|
return res.status(404).json({ error: `Plugin "${name}" não encontrado` });
|
|
const newConfig = req.body;
|
|
await plugin_config_1.pluginConfig.set(name, newConfig);
|
|
// Reativa o plugin para aplicar a nova config imediatamente
|
|
if (entry.active) {
|
|
try {
|
|
await plugin_registry_1.pluginRegistry.reactivate(name);
|
|
}
|
|
catch (err) {
|
|
return res.status(500).json({ error: `Config salva mas falha ao reativar: ${err.message}` });
|
|
}
|
|
}
|
|
res.json({ ok: true, message: `Config do plugin "${name}" salva`, config: newConfig });
|
|
});
|