import express from 'express';
import path from 'path';
import fs from 'fs';
import N8nApiTool from './N8nApiTool.js';
export class N8nApiToolInterface {
private tool: N8nApiTool;
constructor() {
// Créer une instance de N8nApiTool
this.tool = new N8nApiTool();
}
registerRoutes(app: express.Application) {
// Route pour interagir avec l'API n8n
app.post('/api/n8n-api', async (req: express.Request, res: express.Response) => {
try {
const { endpoint, method, data, params } = req.body;
if (!endpoint || !method) {
return res.status(400).json({
success: false,
message: "Les paramètres endpoint et method sont requis"
});
}
// Valider la méthode
if (!["GET", "POST", "PUT", "DELETE"].includes(method)) {
return res.status(400).json({
success: false,
message: "La méthode doit être GET, POST, PUT ou DELETE"
});
}
const result = await this.tool.execute({
endpoint,
method,
data,
params
});
return res.json(result);
} catch (error: unknown) {
console.error('Erreur lors de l\'appel à l\'API n8n:', error);
const errorMessage = error instanceof Error ? error.message : String(error);
return res.status(500).json({
success: false,
message: `Erreur: ${errorMessage}`
});
}
});
// Route pour la documentation de l'API
app.get('/api/n8n-api/docs', (req: express.Request, res: express.Response) => {
try {
const docsPath = path.join(process.cwd(), 'src', 'public', 'docs', 'n8n-api.html');
if (fs.existsSync(docsPath)) {
return res.sendFile(docsPath);
} else {
return res.status(404).json({
success: false,
message: "Documentation non trouvée"
});
}
} catch (error: unknown) {
console.error('Erreur lors de l\'accès à la documentation:', error);
const errorMessage = error instanceof Error ? error.message : String(error);
return res.status(500).json({
success: false,
message: `Erreur: ${errorMessage}`
});
}
});
}
}