24 lines
1.3 KiB
JavaScript
24 lines
1.3 KiB
JavaScript
#!/usr/bin/env node
|
|
// Usage: node tools/n8n-pull.mjs <workflowId> <fichierSortie>
|
|
// GET d'un workflow n8n vers un fichier local (mise sous controle du depot).
|
|
// Meme configuration d'API que n8n-push.mjs. N'ecrit rien sur le serveur.
|
|
import fs from 'fs';
|
|
import os from 'os';
|
|
import path from 'path';
|
|
|
|
const [ID, OUT] = process.argv.slice(2);
|
|
if (!ID || !OUT) { console.error('Usage: node tools/n8n-pull.mjs <workflowId> <fichierSortie>'); process.exit(1); }
|
|
function loadApiConfig() {
|
|
if (process.env.N8N_API_KEY) return { url: process.env.N8N_URL || 'https://n8n.airtria.pro', key: process.env.N8N_API_KEY };
|
|
const cfg = JSON.parse(fs.readFileSync(path.join(os.homedir(), '.config/opencode/opencode.json'), 'utf8'));
|
|
const env = cfg?.mcp?.['n8n-mcp']?.environment || {};
|
|
if (!env.N8N_API_KEY) { console.error('Clé API n8n introuvable'); process.exit(1); }
|
|
return { url: (env.N8N_API_URL || 'https://n8n.airtria.pro/api/v1').replace(/\/api\/v1\/?$/, ''), key: env.N8N_API_KEY };
|
|
}
|
|
const { url, key } = loadApiConfig();
|
|
const r = await fetch(`${url}/api/v1/workflows/${ID}`, { headers: { 'X-N8N-API-KEY': key } });
|
|
if (!r.ok) { console.error(`GET ${r.status}`); process.exit(1); }
|
|
const wf = await r.json();
|
|
fs.writeFileSync(OUT, JSON.stringify(wf, null, 2) + '\n');
|
|
console.log(`${OUT} ← "${wf.name}" (${wf.nodes.length} nodes, active=${wf.active})`);
|