fix: amélioration du chargement des variables d'environnement pour VAULT_CONFS_DIR

- 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.
This commit is contained in:
4NK Dev 2025-10-01 14:09:45 +00:00
parent e525d0b29c
commit b7c53069db
2 changed files with 120 additions and 1 deletions

View File

@ -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_CONFS_DIR` | Dossier de destination pour les fichiers synchronisés | ❌ | `../confs` |
| `VAULT_URL` | URL de l'API Vault | ❌ | `https://vault.4nkweb.com:6666` | | `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 ### Configuration manuelle
```typescript ```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 ## 📚 API Reference
### Classes principales ### Classes principales

View File

@ -137,7 +137,8 @@ export class SecureVaultClient {
constructor(config?: VaultConfig) { constructor(config?: VaultConfig) {
// Charger les variables d'environnement depuis .env // 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 // Si pas de config fournie, utiliser les variables d'environnement
if (!config) { 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 * Les fichiers existants dans confs/ sont toujours écrasés pour avoir le contenu le plus récent
*/ */
async syncLocalFiles(options: SyncOptions): Promise<SyncResult> { async syncLocalFiles(options: SyncOptions): Promise<SyncResult> {
// 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 // Récupérer le dossier de destination depuis les variables d'environnement
const defaultConfsDir = process.env['VAULT_CONFS_DIR'] || '../confs'; 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é * Met à jour le fichier .env avec la nouvelle clé
*/ */