Skip to main content
Glama
WorkflowManagerToolInterface.ts6.78 kB
import express from 'express'; import path from 'path'; import fs from 'fs'; import WorkflowManagerTool from './WorkflowManagerTool.js'; import multer, { diskStorage, Multer } from 'multer'; export class WorkflowManagerToolInterface { private tool: WorkflowManagerTool; private outputBaseDir: string; constructor() { // Définir le répertoire de sortie pour les fichiers de workflow this.outputBaseDir = process.env.WORKFLOW_OUTPUT_DIR || path.join(process.cwd(), 'output', 'workflows'); // Créer le répertoire s'il n'existe pas if (!fs.existsSync(this.outputBaseDir)) { fs.mkdirSync(this.outputBaseDir, { recursive: true }); } // Créer une instance de WorkflowManagerTool this.tool = new WorkflowManagerTool(); } registerRoutes(app: express.Application) { // Configuration de multer pour l'upload de fichiers const storage = diskStorage({ destination: (req: express.Request, file: Express.Multer.File, cb: (error: Error | null, destination: string) => void) => { cb(null, this.outputBaseDir); }, filename: (req: express.Request, file: Express.Multer.File, cb: (error: Error | null, filename: string) => void) => { cb(null, `${Date.now()}-${file.originalname}`); } }); const upload = multer({ storage }) as Multer; // Route pour lister les workflows app.get('/api/workflow-manager/list', async (req: express.Request, res: express.Response) => { try { const tags = req.query.tags ? String(req.query.tags).split(',') : undefined; const result = await this.tool.execute({ action: "list", tags }); return res.json(result); } catch (error: unknown) { console.error('Erreur lors du listage des workflows:', error); const errorMessage = error instanceof Error ? error.message : String(error); return res.status(500).json({ success: false, message: `Erreur: ${errorMessage}` }); } }); // Route pour récupérer un workflow app.get('/api/workflow-manager/get/:id', async (req: express.Request, res: express.Response) => { try { const { id } = req.params; const result = await this.tool.execute({ action: "get", workflowId: id }); return res.json(result); } catch (error: unknown) { console.error('Erreur lors de la récupération du workflow:', error); const errorMessage = error instanceof Error ? error.message : String(error); return res.status(500).json({ success: false, message: `Erreur: ${errorMessage}` }); } }); // Route pour créer un workflow app.post('/api/workflow-manager/create', async (req: express.Request, res: express.Response) => { try { const workflowData = req.body; const result = await this.tool.execute({ action: "create", workflowData }); return res.json(result); } catch (error: unknown) { console.error('Erreur lors de la création du workflow:', error); const errorMessage = error instanceof Error ? error.message : String(error); return res.status(500).json({ success: false, message: `Erreur: ${errorMessage}` }); } }); // Route pour mettre à jour un workflow app.put('/api/workflow-manager/update/:id', async (req: express.Request, res: express.Response) => { try { const { id } = req.params; const workflowData = req.body; const result = await this.tool.execute({ action: "update", workflowId: id, workflowData }); return res.json(result); } catch (error: unknown) { console.error('Erreur lors de la mise à jour du workflow:', error); const errorMessage = error instanceof Error ? error.message : String(error); return res.status(500).json({ success: false, message: `Erreur: ${errorMessage}` }); } }); // Route pour supprimer un workflow app.delete('/api/workflow-manager/delete/:id', async (req: express.Request, res: express.Response) => { try { const { id } = req.params; const result = await this.tool.execute({ action: "delete", workflowId: id }); return res.json(result); } catch (error: unknown) { console.error('Erreur lors de la suppression du workflow:', error); const errorMessage = error instanceof Error ? error.message : String(error); return res.status(500).json({ success: false, message: `Erreur: ${errorMessage}` }); } }); // Route pour exporter un workflow app.get('/api/workflow-manager/export/:id', async (req: express.Request, res: express.Response) => { try { const { id } = req.params; const workflowPath = path.join(this.outputBaseDir, `workflow-${id}.json`); const result = await this.tool.execute({ action: "export", workflowId: id, workflowPath }); if (result.success) { return res.download(workflowPath, `workflow-${id}.json`); } else { return res.status(500).json(result); } } catch (error: unknown) { console.error('Erreur lors de l\'exportation du workflow:', error); const errorMessage = error instanceof Error ? error.message : String(error); return res.status(500).json({ success: false, message: `Erreur: ${errorMessage}` }); } }); // Route pour importer un workflow app.post('/api/workflow-manager/import', upload.single('workflow'), async (req: express.Request & { file?: Express.Multer.File }, res: express.Response) => { try { if (!req.file) { return res.status(400).json({ success: false, message: "Aucun fichier n'a été téléchargé" }); } const workflowPath = req.file.path; const result = await this.tool.execute({ action: "import", workflowPath }); return res.json(result); } catch (error: unknown) { console.error('Erreur lors de l\'importation du workflow:', error); const errorMessage = error instanceof Error ? error.message : String(error); return res.status(500).json({ success: false, message: `Erreur: ${errorMessage}` }); } }); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lowprofix/n8n-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server