UNPKG

agile-planner-mcp-server

Version:

Serveur MCP pour la génération d'artefacts agiles (backlogs, features, user stories) avec IA - compatible Windsurf, Claude et Cursor

141 lines (121 loc) 4.41 kB
/** * @fileoverview Script de vérification des clés API dans les variables d'environnement * Vérifie la présence des clés API requises dans le fichier .env * * Usage: node server/test_env_key.js */ 'use strict'; require('dotenv').config({ path: require('path').join(__dirname, '../.env') }); const chalk = require('chalk'); /** * Configuration des clés API à vérifier * @type {Array<{name: string, required: boolean, urlDoc: string}>} */ const API_KEYS_CONFIG = [ { name: 'OPENAI_API_KEY', required: true, urlDoc: 'https://platform.openai.com/api-keys' }, { name: 'GROQ_API_KEY', required: false, urlDoc: 'https://console.groq.com/keys' }, { name: 'CLAUDE_API_KEY', required: false, urlDoc: 'https://console.anthropic.com/settings/keys' } ]; /** * Affiche les informations d'une clé API présente dans l'environnement * @param {string} name - Nom de la clé API * @param {string} keyValue - Valeur de la clé API */ function displayFoundKey(name, keyValue) { // Masquer la clé tout en montrant quelques caractères pour débogage const maskedKey = keyValue.length > 10 ? `${keyValue.slice(0, 5)}...${keyValue.slice(-4)}` : '***'; console.log( chalk.green(`✓ ${name}: `), chalk.dim('[TROUVÉE]'), chalk.yellow(`ℹ️ Valeur: ${maskedKey}`) ); } /** * Affiche les informations d'une clé API manquante * @param {string} name - Nom de la clé API * @param {boolean} required - Si la clé est requise * @param {string} urlDoc - URL de documentation pour obtenir la clé */ function displayMissingKey(name, required, urlDoc) { // Colorier différemment selon si la clé est requise ou optionnelle const statusColor = required ? chalk.red : chalk.yellow; const statusText = required ? '[MANQUANTE - REQUISE]' : '[MANQUANTE - OPTIONNELLE]'; console.log( statusColor(`${required ? '❌' : '⚠️'} ${name}: `), statusColor(statusText) ); // Ajouter des instructions pour obtenir la clé console.log( chalk.dim(` Pour obtenir cette clé: ${urlDoc}`) ); } /** * Vérifie la présence et la validité basique des clés API * @returns {Object} Résultat de la vérification avec le nombre de clés trouvées/manquantes */ function checkApiKeys() { console.log(chalk.blue('\n🔑 Vérification des clés API dans les variables d\'environnement...\n')); const results = { found: 0, missing: 0, required: 0, optional: 0, missingRequired: 0 }; // Vérification des clés API API_KEYS_CONFIG.forEach(keyConfig => { const { name, required, urlDoc } = keyConfig; const keyValue = process.env[name]; const keyExists = !!keyValue; // Compter pour les statistiques if (required) results.required++; else results.optional++; if (keyExists) { results.found++; displayFoundKey(name, keyValue); } else { results.missing++; if (required) results.missingRequired++; displayMissingKey(name, required, urlDoc); } console.log(''); // Ligne vide pour espacement }); return results; } /** * Affiche un résumé des résultats de la vérification * @param {Object} results Résultats de la vérification */ function displaySummary(results) { console.log(chalk.blue('\n📈 Résumé de la vérification:')); console.log(`• Total des clés vérifiées: ${results.required + results.optional}`); console.log(`• Clés trouvées: ${results.found}`); console.log(`• Clés manquantes: ${results.missing} (${results.missingRequired} requise(s), ${results.missing - results.missingRequired} optionnelle(s))`); if (results.missingRequired > 0) { console.log(chalk.red('\n❌ Certaines clés requises sont manquantes. Le projet pourrait ne pas fonctionner correctement.')); console.log(chalk.yellow('ℹ️ Ajoutez les clés manquantes dans le fichier .env à la racine du projet.\n')); } else { console.log(chalk.green('\n✅ Toutes les clés requises sont présentes.\n')); } } // Exécution principale const results = checkApiKeys(); displaySummary(results); // Code de sortie basé sur la présence des clés requises if (results.missingRequired > 0) { process.exit(1); }