From b7c53069db55b36ae4bb682fa7677059c8984d8e Mon Sep 17 00:00:00 2001 From: 4NK Dev Date: Wed, 1 Oct 2025 14:09:45 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20am=C3=A9lioration=20du=20chargement=20de?= =?UTF-8?q?s=20variables=20d'environnement=20pour=20VAULT=5FCONFS=5FDIR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Ajout d'un système de chargement robuste des variables d'environnement - Recherche automatique des fichiers .env dans plusieurs emplacements - Rechargement des variables à chaque appel de syncLocalFiles() - Ajout de logs pour indiquer quel fichier .env a été chargé - Documentation complète avec section de dépannage - Solutions pour les problèmes courants avec VAULT_CONFS_DIR Résout le problème où VAULT_CONFS_DIR n'était pas pris en compte quand le fichier .env n'était pas dans le répertoire courant du projet. --- sdk-client/README.md | 73 +++++++++++++++++++++++++++++++++++++++++ sdk-client/src/index.ts | 48 ++++++++++++++++++++++++++- 2 files changed, 120 insertions(+), 1 deletion(-) diff --git a/sdk-client/README.md b/sdk-client/README.md index b062298..544a3d4 100644 --- a/sdk-client/README.md +++ b/sdk-client/README.md @@ -44,6 +44,18 @@ VAULT_CONFS_DIR=../confs # Dossier de destination pour les fichiers synchronis | `VAULT_CONFS_DIR` | Dossier de destination pour les fichiers synchronisés | ❌ | `../confs` | | `VAULT_URL` | URL de l'API Vault | ❌ | `https://vault.4nkweb.com:6666` | +#### Chargement automatique des variables d'environnement + +Le SDK charge automatiquement les variables d'environnement depuis plusieurs emplacements possibles : + +1. **Répertoire courant** : `.env` +2. **Répertoire parent** : `../.env` +3. **Répertoire grand-parent** : `../../.env` +4. **Répertoire de travail** : `process.cwd()/.env` +5. **Variables système** : Variables d'environnement du système + +Le SDK recherche ces fichiers dans l'ordre et utilise le premier trouvé. Cette approche garantit que le SDK fonctionne même si le fichier `.env` n'est pas dans le répertoire courant du projet qui l'utilise. + ### Configuration manuelle ```typescript @@ -229,6 +241,67 @@ const syncResult = await client.syncLocalFiles({ }); ``` +## 🔧 Dépannage + +### Problèmes courants avec les variables d'environnement + +#### Le paramètre `VAULT_CONFS_DIR` n'est pas pris en compte + +**Problème** : Le SDK utilise toujours `../confs` au lieu de votre dossier personnalisé. + +**Solutions** : +1. **Vérifiez l'emplacement du fichier `.env`** : + ```bash + # Le SDK recherche dans cet ordre : + ls -la .env # Répertoire courant + ls -la ../.env # Répertoire parent + ls -la ../../.env # Répertoire grand-parent + ``` + +2. **Créez un fichier `.env` dans le bon répertoire** : + ```bash + # Dans le répertoire de votre projet + echo "VAULT_CONFS_DIR=./mon-dossier-confs" >> .env + ``` + +3. **Utilisez le paramètre direct** : + ```typescript + const syncResult = await client.syncLocalFiles({ + environment: 'dev', + localDir: './mon-dossier-confs', // Priorité sur VAULT_CONFS_DIR + verbose: true + }); + ``` + +#### Variables d'environnement non chargées + +**Problème** : Le SDK ne trouve pas votre fichier `.env`. + +**Solutions** : +1. **Vérifiez les logs** : Le SDK affiche quel fichier `.env` il a chargé +2. **Placez le fichier `.env` dans le bon répertoire** selon l'ordre de priorité +3. **Utilisez les variables système** : + ```bash + export VAULT_CONFS_DIR=./mon-dossier-confs + ``` + +#### Erreur "Variables d'environnement requises" + +**Problème** : `VAULT_USER`, `VAULT_KEY`, ou `VAULT_ENV` manquants. + +**Solutions** : +1. **Ajoutez les variables manquantes** dans votre `.env` +2. **Vérifiez la syntaxe** du fichier `.env` (pas d'espaces autour du `=`) +3. **Utilisez la configuration manuelle** : + ```typescript + const client = new SecureVaultClient({ + baseUrl: 'https://vault.4nkweb.com:6666', + userId: 'demo_user_001', + vaultKey: 'your-key', + verifySsl: false + }); + ``` + ## 📚 API Reference ### Classes principales diff --git a/sdk-client/src/index.ts b/sdk-client/src/index.ts index 7ca523a..b43f9e8 100644 --- a/sdk-client/src/index.ts +++ b/sdk-client/src/index.ts @@ -137,7 +137,8 @@ export class SecureVaultClient { constructor(config?: VaultConfig) { // Charger les variables d'environnement depuis .env - dotenv.config(); + // Essayer plusieurs emplacements pour le fichier .env + this._loadEnvironmentVariables(); // Si pas de config fournie, utiliser les variables d'environnement if (!config) { @@ -369,6 +370,9 @@ export class SecureVaultClient { * Les fichiers existants dans confs/ sont toujours écrasés pour avoir le contenu le plus récent */ async syncLocalFiles(options: SyncOptions): Promise { + // Recharger les variables d'environnement au cas où elles auraient changé + this._loadEnvironmentVariables(); + // Récupérer le dossier de destination depuis les variables d'environnement const defaultConfsDir = process.env['VAULT_CONFS_DIR'] || '../confs'; @@ -607,6 +611,48 @@ export class SecureVaultClient { } } + /** + * Charge les variables d'environnement depuis plusieurs emplacements possibles + */ + private _loadEnvironmentVariables(): void { + const possibleEnvPaths = [ + '.env', // Répertoire courant + '../.env', // Répertoire parent + '../../.env', // Répertoire grand-parent + path.join(__dirname, '.env'), // Répertoire du SDK + path.join(__dirname, '../.env'), // Parent du SDK + path.join(__dirname, '../../.env'), // Grand-parent du SDK + path.join(process.cwd(), '.env'), // Répertoire de travail + ]; + + let envLoaded = false; + for (const envPath of possibleEnvPaths) { + try { + if (fs.existsSync(envPath)) { + const result = dotenv.config({ path: envPath }); + if (!result.error) { + console.log(`📄 Variables d'environnement chargées depuis: ${envPath}`); + envLoaded = true; + break; + } + } + } catch (error) { + // Ignorer les erreurs et continuer avec le chemin suivant + continue; + } + } + + // Si aucun fichier .env n'a été trouvé, essayer le chargement par défaut + if (!envLoaded) { + try { + dotenv.config(); + console.log('📄 Variables d\'environnement chargées depuis .env par défaut'); + } catch (error) { + console.log('⚠️ Aucun fichier .env trouvé, utilisation des variables système uniquement'); + } + } + } + /** * Met à jour le fichier .env avec la nouvelle clé */