diff --git a/sdk-client/src/index.ts b/sdk-client/src/index.ts index 65cf3a8..ee8c4f6 100644 --- a/sdk-client/src/index.ts +++ b/sdk-client/src/index.ts @@ -391,10 +391,22 @@ export class SecureVaultClient { try { // 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 du fichier .env - const targetDir = path.isAbsolute(localDir) - ? localDir - : path.resolve(this._getEnvFileDirectory(), localDir); + // Si c'est un chemin relatif, le résoudre par rapport au répertoire de base approprié + let targetDir; + if (path.isAbsolute(localDir)) { + targetDir = localDir; + } else { + const baseDir = this._getBaseDirectoryForRelativePaths(); + // Si le chemin commence par plusieurs ../, on part du répertoire du fichier .env + // sinon on part du répertoire parent du SDK + 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)) { fs.mkdirSync(targetDir, { recursive: true }); if (verbose) { @@ -615,9 +627,11 @@ export class SecureVaultClient { } /** - * Retourne le répertoire du fichier .env trouvé + * Retourne le répertoire de base pour résoudre les chemins relatifs VAULT_CONFS_DIR + * 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 _getEnvFileDirectory(): string { + private _getBaseDirectoryForRelativePaths(): string { const possibleEnvPaths = [ '.env', // Répertoire courant '../.env', // Répertoire parent @@ -628,10 +642,13 @@ export class SecureVaultClient { path.join(process.cwd(), '.env'), // Répertoire de travail ]; + let envFileDir = null; + for (const envPath of possibleEnvPaths) { try { if (fs.existsSync(envPath)) { - return path.dirname(path.resolve(envPath)); + envFileDir = path.dirname(path.resolve(envPath)); + break; } } catch (error) { // Ignorer les erreurs et continuer avec le chemin suivant @@ -640,7 +657,17 @@ export class SecureVaultClient { } // Fallback vers le répertoire de travail si aucun .env n'est trouvé - return process.cwd(); + if (!envFileDir) { + 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; } /**