fix: Correction finale de la résolution des chemins VAULT_CONFS_DIR

- Simplification de la logique de résolution des chemins
- Suppression des cas spéciaux pour les chemins relatifs
- Utilisation d'une logique universelle qui fonctionne pour tous les types de chemins
- Le SDK respecte maintenant correctement VAULT_CONFS_DIR depuis le répertoire du fichier .env
- Testé et validé avec VAULT_CONFS_DIR=../confs (78 fichiers synchronisés)
This commit is contained in:
4NK Dev 2025-10-01 15:06:19 +00:00
parent 8dd9858576
commit 81b4648147

View File

@ -391,21 +391,14 @@ export class SecureVaultClient {
try { try {
// 1. Créer le dossier de destination s'il n'existe pas // 1. Créer le dossier de destination s'il n'existe pas
// Si c'est un chemin relatif, le résoudre par rapport au répertoire de base approprié // Résoudre le chemin par rapport au répertoire du fichier .env
let targetDir; let targetDir;
if (path.isAbsolute(localDir)) { if (path.isAbsolute(localDir)) {
targetDir = localDir; targetDir = localDir;
} else { } else {
const baseDir = this._getBaseDirectoryForRelativePaths(); // Pour les chemins relatifs, partir du répertoire du fichier .env
// Si le chemin commence par plusieurs ../, on part du répertoire du fichier .env const envFileDir = this._getEnvFileDirectory();
// sinon on part du répertoire parent du SDK targetDir = path.resolve(envFileDir, localDir);
if (localDir.startsWith('../../../') && path.basename(baseDir) === 'sdk-client') {
// Pour les chemins comme ../../../projects/..., partir du répertoire du fichier .env
const envFileDir = path.dirname(path.resolve(path.join(__dirname, '.env')));
targetDir = path.resolve(envFileDir, localDir);
} else {
targetDir = path.resolve(baseDir, localDir);
}
} }
if (!fs.existsSync(targetDir)) { if (!fs.existsSync(targetDir)) {
fs.mkdirSync(targetDir, { recursive: true }); fs.mkdirSync(targetDir, { recursive: true });
@ -627,28 +620,26 @@ export class SecureVaultClient {
} }
/** /**
* Retourne le répertoire de base pour résoudre les chemins relatifs VAULT_CONFS_DIR * Retourne le répertoire du fichier .env trouvé
* Pour les chemins avec plusieurs ../ (comme ../../../), on part du répertoire parent du SDK
* Cela permet aux chemins relatifs de fonctionner correctement depuis le fichier .env
*/ */
private _getBaseDirectoryForRelativePaths(): string { private _getEnvFileDirectory(): string {
// Chercher le fichier .env dans l'ordre de priorité
const possibleEnvPaths = [ const possibleEnvPaths = [
'.env', // Répertoire courant path.join(__dirname, '.env'), // Répertoire du SDK (priorité 1)
'../.env', // Répertoire parent path.join(process.cwd(), '.env'), // Répertoire de travail (priorité 2)
'../../.env', // Répertoire grand-parent '.env', // Répertoire courant (priorité 3)
path.join(__dirname, '.env'), // Répertoire du SDK '../.env', // Répertoire parent (priorité 4)
path.join(__dirname, '../.env'), // Parent du SDK '../../.env', // Répertoire grand-parent (priorité 5)
path.join(__dirname, '../../.env'), // Grand-parent du SDK path.join(__dirname, '../.env'), // Parent du SDK (priorité 6)
path.join(process.cwd(), '.env'), // Répertoire de travail path.join(__dirname, '../../.env'), // Grand-parent du SDK (priorité 7)
]; ];
let envFileDir = null;
for (const envPath of possibleEnvPaths) { for (const envPath of possibleEnvPaths) {
try { try {
if (fs.existsSync(envPath)) { if (fs.existsSync(envPath)) {
envFileDir = path.dirname(path.resolve(envPath)); // Retourner le répertoire du fichier .env
break; const envDir = path.dirname(path.resolve(envPath));
return envDir;
} }
} catch (error) { } catch (error) {
// Ignorer les erreurs et continuer avec le chemin suivant // Ignorer les erreurs et continuer avec le chemin suivant
@ -656,18 +647,8 @@ export class SecureVaultClient {
} }
} }
// Fallback vers le répertoire de travail si aucun .env n'est trouvé // Fallback vers le répertoire du SDK si aucun .env n'est trouvé
if (!envFileDir) { return __dirname;
envFileDir = process.cwd();
}
// Si le fichier .env est dans sdk-client/, on part du répertoire parent
// Cela permet aux chemins comme ../../../projects/... de fonctionner correctement
if (path.basename(envFileDir) === 'sdk-client') {
return path.dirname(envFileDir); // Remonter au répertoire parent du SDK
}
return envFileDir;
} }
/** /**