From e90c0fe2f2818824c9869b2120a198e5b65117dc Mon Sep 17 00:00:00 2001 From: 4NK Dev Date: Wed, 1 Oct 2025 22:17:40 +0000 Subject: [PATCH] docs+ops: vault sync workflow; deploy-all with live progress and URL checks; prompt updates --- __pycache__/api_server.cpython-313.pyc | Bin 0 -> 34996 bytes sdk-client/dist/examples/usage.d.ts | 27 + sdk-client/dist/examples/usage.d.ts.map | 1 + sdk-client/dist/examples/usage.js | 388 +++++++++++++ sdk-client/dist/examples/usage.js.map | 1 + sdk-client/dist/src/__tests__/setup.d.ts | 4 + sdk-client/dist/src/__tests__/setup.d.ts.map | 1 + sdk-client/dist/src/__tests__/setup.js | 26 + sdk-client/dist/src/__tests__/setup.js.map | 1 + sdk-client/dist/src/index.d.ts | 167 ++++++ sdk-client/dist/src/index.d.ts.map | 1 + sdk-client/dist/src/index.js | 559 +++++++++++++++++++ sdk-client/dist/src/index.js.map | 1 + storage/dev/4NK_miner/.gitkeep | 1 + 14 files changed, 1178 insertions(+) create mode 100644 __pycache__/api_server.cpython-313.pyc create mode 100644 sdk-client/dist/examples/usage.d.ts create mode 100644 sdk-client/dist/examples/usage.d.ts.map create mode 100644 sdk-client/dist/examples/usage.js create mode 100644 sdk-client/dist/examples/usage.js.map create mode 100644 sdk-client/dist/src/__tests__/setup.d.ts create mode 100644 sdk-client/dist/src/__tests__/setup.d.ts.map create mode 100644 sdk-client/dist/src/__tests__/setup.js create mode 100644 sdk-client/dist/src/__tests__/setup.js.map create mode 100644 sdk-client/dist/src/index.d.ts create mode 100644 sdk-client/dist/src/index.d.ts.map create mode 100644 sdk-client/dist/src/index.js create mode 100644 sdk-client/dist/src/index.js.map create mode 100644 storage/dev/4NK_miner/.gitkeep diff --git a/__pycache__/api_server.cpython-313.pyc b/__pycache__/api_server.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e92ca22c9988d15b94257fbded9fdf6ef46f9359 GIT binary patch literal 34996 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 literal 0 HcmV?d00001 diff --git a/sdk-client/dist/examples/usage.d.ts b/sdk-client/dist/examples/usage.d.ts new file mode 100644 index 0000000..030d365 --- /dev/null +++ b/sdk-client/dist/examples/usage.d.ts @@ -0,0 +1,27 @@ +/** + * Exemple d'utilisation du client Vault + * Scénario complet : Initialisation → Routes → Parcours → Déchiffrement + */ +import { SecureVaultClient } from '../src/index'; +/** + * ÉTAPE 1: Initialisation + Gestion des erreurs + */ +declare function step1_Initialization(): Promise; +/** + * ÉTAPE 2: Récupération de toutes les routes + Gestion des erreurs + */ +declare function step2_GetRoutes(client: SecureVaultClient): Promise; +/** + * ÉTAPE 3: Parcours de toutes les routes pour récupération du contenu + Gestion des erreurs + */ +declare function step3_ParseRoutes(routes: any, client: SecureVaultClient): Promise; +/** + * ÉTAPE 4: Synchronisation locale des fichiers déchiffrés + Gestion des erreurs + */ +declare function step4_SyncLocalFiles(client: SecureVaultClient): Promise; +/** + * ÉTAPE 5: Déchiffrement des contenus récupérés (non stocké) + Gestion des erreurs + */ +declare function step5_DecryptContents(results: any[]): Promise; +export { step1_Initialization, step2_GetRoutes, step3_ParseRoutes, step4_SyncLocalFiles, step5_DecryptContents }; +//# sourceMappingURL=usage.d.ts.map \ No newline at end of file diff --git a/sdk-client/dist/examples/usage.d.ts.map b/sdk-client/dist/examples/usage.d.ts.map new file mode 100644 index 0000000..ca5a1e1 --- /dev/null +++ b/sdk-client/dist/examples/usage.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../examples/usage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAiE,MAAM,cAAc,CAAC;AAEhH;;GAEG;AACH,iBAAe,oBAAoB,+BA+DlC;AAED;;GAEG;AACH,iBAAe,eAAe,CAAC,MAAM,EAAE,iBAAiB,+CAuDvD;AAED;;GAEG;AACH,iBAAe,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,iBAAiB,kBA0GtE;AAED;;GAEG;AACH,iBAAe,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,iBAiD5D;AAED;;GAEG;AACH,iBAAe,qBAAqB,CAAC,OAAO,EAAE,GAAG,EAAE,iBA+ElD;AAgDD,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACtB,CAAC"} \ No newline at end of file diff --git a/sdk-client/dist/examples/usage.js b/sdk-client/dist/examples/usage.js new file mode 100644 index 0000000..3ce707d --- /dev/null +++ b/sdk-client/dist/examples/usage.js @@ -0,0 +1,388 @@ +"use strict"; +/** + * Exemple d'utilisation du client Vault + * Scénario complet : Initialisation → Routes → Parcours → Déchiffrement + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.step1_Initialization = step1_Initialization; +exports.step2_GetRoutes = step2_GetRoutes; +exports.step3_ParseRoutes = step3_ParseRoutes; +exports.step4_SyncLocalFiles = step4_SyncLocalFiles; +exports.step5_DecryptContents = step5_DecryptContents; +const index_1 = require("../src/index"); +/** + * ÉTAPE 1: Initialisation + Gestion des erreurs + */ +async function step1_Initialization() { + console.log('🚀 ÉTAPE 1: Initialisation du client + Gestion des erreurs'); + console.log('='.repeat(70)); + try { + // Test avec différents IDs utilisateur + const testUserIds = [ + 'demo_user_001', // ID existant + 'invalid@user', // ID invalide (caractères interdits) + 'ab', // ID trop court + 'a'.repeat(129), // ID trop long + '3506ea43d9207038eea58caca84d51e4ccc01c496b6572bbf4dfda7fa03085b8' // Votre clé + ]; + let validClient = null; + for (const userId of testUserIds) { + try { + console.log(`\n🔍 Test avec l'ID: ${userId.substring(0, 20)}${userId.length > 20 ? '...' : ''}`); + // Utiliser le constructeur avec chargement automatique des clés .env + // Pour le test avec les vraies clés, utiliser le constructeur sans paramètres + const client = userId === 'demo_user_001' ? new index_1.SecureVaultClient() : new index_1.SecureVaultClient({ + baseUrl: 'https://vault.4nkweb.com:6666', + userId: userId, + timeout: 30000, + verifySsl: false + }); + // Test de connectivité + const isConnected = await client.ping(); + if (isConnected) { + console.log(` ✅ ID valide et connecté: ${userId}`); + if (!validClient) { + validClient = client; + } + } + else { + console.log(` ❌ ID valide mais non connecté: ${userId}`); + } + } + catch (error) { + if (error instanceof index_1.VaultAuthenticationError) { + console.log(` 🔑 Erreur d'authentification: ${error.message}`); + } + else if (error.message.includes('ID utilisateur requis') || error.message.includes('invalide')) { + console.log(` ⚠️ ID invalide: ${error.message}`); + } + else { + console.log(` ❌ Erreur inattendue: ${error.message}`); + } + } + } + if (!validClient) { + throw new Error('Aucun client valide trouvé - impossible de continuer'); + } + console.log('\n✅ ÉTAPE 1 TERMINÉE: Client initialisé avec succès'); + return validClient; + } + catch (error) { + console.error('\n❌ ÉTAPE 1 ÉCHOUÉE:', error); + throw error; + } +} +/** + * ÉTAPE 2: Récupération de toutes les routes + Gestion des erreurs + */ +async function step2_GetRoutes(client) { + console.log('\n🛣️ ÉTAPE 2: Récupération de toutes les routes + Gestion des erreurs'); + console.log('='.repeat(70)); + try { + // Test de récupération des routes + console.log('\n📋 Récupération des routes disponibles...'); + const routes = await client.getRoutes(); + console.log(` ✅ Total des routes: ${routes.total_routes}`); + console.log(` ✅ Utilisateur: ${routes.user_id}`); + console.log(` ✅ Type d'authentification: ${routes.authentication.type}`); + console.log('\n📝 Routes disponibles:'); + routes.routes.forEach((route, index) => { + console.log(` ${index + 1}. ${route.method} ${route.path}`); + console.log(` → ${route.description}`); + console.log(` → Authentification: ${route.authentication}`); + console.log(` → Type de réponse: ${route.response_type}`); + if (route.parameters) { + console.log(` → Paramètres:`); + Object.entries(route.parameters).forEach(([key, value]) => { + console.log(` • ${key}: ${value}`); + }); + } + if (route.examples && route.examples.length > 0) { + console.log(` → Exemples:`); + route.examples.forEach(example => { + console.log(` • ${example}`); + }); + } + console.log(''); + }); + console.log('✅ ÉTAPE 2 TERMINÉE: Routes récupérées avec succès'); + return routes; + } + catch (error) { + console.error('\n❌ ÉTAPE 2 ÉCHOUÉE:'); + if (error instanceof index_1.VaultApiError) { + console.error(` Erreur API: ${error.message}`); + console.error(` Code HTTP: ${error.statusCode}`); + console.error(` Code d'erreur: ${error.code}`); + } + else if (error instanceof index_1.VaultAuthenticationError) { + console.error(` Erreur d'authentification: ${error.message}`); + console.error(` Code HTTP: ${error.statusCode}`); + } + else { + console.error(` Erreur inattendue: ${error.message}`); + } + throw error; + } +} +/** + * ÉTAPE 3: Parcours de toutes les routes pour récupération du contenu + Gestion des erreurs + */ +async function step3_ParseRoutes(routes, client) { + console.log('\n📁 ÉTAPE 3: Parcours des routes pour récupération du contenu + Gestion des erreurs'); + console.log('='.repeat(70)); + const results = []; + try { + for (const route of routes.routes) { + console.log(`\n🔍 Test de la route: ${route.method} ${route.path}`); + try { + let result = null; + switch (route.path) { + case '/health': + result = await client.health(); + console.log(` ✅ Health: ${result.status} - ${result.service}`); + break; + case '/info': + result = await client.info(); + console.log(` ✅ Info: ${result.name} v${result.version}`); + break; + case '/routes': + result = await client.getRoutes(); + console.log(` ✅ Routes: ${result.total_routes} routes disponibles`); + break; + default: + // Route dynamique // + if (route.path.includes('') && route.path.includes('')) { + console.log(` 📂 Test des fichiers de configuration...`); + // Tester quelques fichiers de configuration connus + const testFiles = [ + 'bitcoin/bitcoin.conf', + 'nginx/nginx.conf', + 'grafana/grafana.ini' + ]; + for (const filePath of testFiles) { + try { + const fileResult = await client.getFile('dev', filePath); + console.log(` ✅ ${filePath}: ${fileResult.size} caractères`); + results.push({ + route: `${route.method} /dev/${filePath}`, + success: true, + data: fileResult + }); + } + catch (fileError) { + console.log(` ❌ ${filePath}: ${fileError.message}`); + results.push({ + route: `${route.method} /dev/${filePath}`, + success: false, + error: fileError.message + }); + } + } + } + break; + } + if (result) { + results.push({ + route: `${route.method} ${route.path}`, + success: true, + data: result + }); + } + } + catch (error) { + console.log(` ❌ Erreur: ${error.message}`); + if (error instanceof index_1.VaultApiError) { + console.log(` → Code HTTP: ${error.statusCode}`); + console.log(` → Code d'erreur: ${error.code}`); + } + else if (error instanceof index_1.VaultAuthenticationError) { + console.log(` → Erreur d'authentification`); + } + else if (error instanceof index_1.VaultDecryptionError) { + console.log(` → Erreur de déchiffrement`); + } + results.push({ + route: `${route.method} ${route.path}`, + success: false, + error: error.message, + errorType: error.name + }); + } + } + console.log(`\n📊 Résumé des tests:`); + const successCount = results.filter(r => r.success).length; + const errorCount = results.filter(r => !r.success).length; + console.log(` ✅ Succès: ${successCount}/${results.length}`); + console.log(` ❌ Erreurs: ${errorCount}/${results.length}`); + console.log('\n✅ ÉTAPE 3 TERMINÉE: Parcours des routes terminé'); + return results; + } + catch (error) { + console.error('\n❌ ÉTAPE 3 ÉCHOUÉE:', error); + throw error; + } +} +/** + * ÉTAPE 4: Synchronisation locale des fichiers déchiffrés + Gestion des erreurs + */ +async function step4_SyncLocalFiles(client) { + console.log('\n💾 ÉTAPE 4: Synchronisation locale des fichiers déchiffrés + Gestion des erreurs'); + console.log('='.repeat(70)); + try { + console.log('\n🔄 Synchronisation des fichiers vers le dossier local...'); + console.log(' Utilise VAULT_CONFS_DIR depuis le fichier .env'); + // Synchronisation avec options détaillées + // Ne pas spécifier localDir pour utiliser VAULT_CONFS_DIR du .env + const syncResult = await client.syncLocalFiles({ + environment: 'dev', + verbose: true + }); + console.log(`\n📊 Résultats de synchronisation:`); + console.log(` ✅ Fichiers synchronisés: ${syncResult.synced}`); + console.log(` ⏭️ Fichiers ignorés: ${syncResult.skipped}`); + console.log(` ❌ Erreurs: ${syncResult.errors}`); + // Affichage détaillé des résultats + if (syncResult.details.length > 0) { + console.log('\n📋 Détails par fichier:'); + syncResult.details.forEach(detail => { + const icon = detail.status === 'synced' ? '✅' : + detail.status === 'skipped' ? '⏭️' : '❌'; + console.log(` ${icon} ${detail.file}: ${detail.status}`); + if (detail.message) { + console.log(` → ${detail.message}`); + } + }); + } + console.log('\n✅ ÉTAPE 4 TERMINÉE: Synchronisation locale terminée'); + } + catch (error) { + console.error('\n❌ ÉTAPE 4 ÉCHOUÉE:'); + if (error instanceof index_1.VaultApiError) { + console.error(` Erreur API: ${error.message}`); + console.error(` Code HTTP: ${error.statusCode}`); + } + else if (error.message.includes('synchronisation')) { + console.error(` Erreur de synchronisation: ${error.message}`); + } + else { + console.error(` Erreur inattendue: ${error.message}`); + } + throw error; + } +} +/** + * ÉTAPE 5: Déchiffrement des contenus récupérés (non stocké) + Gestion des erreurs + */ +async function step5_DecryptContents(results) { + console.log('\n🔓 ÉTAPE 5: Déchiffrement des contenus récupérés + Gestion des erreurs'); + console.log('='.repeat(70)); + try { + const fileResults = results.filter(r => r.success && r.data && r.data.content); + if (fileResults.length === 0) { + console.log(' ⚠️ Aucun fichier récupéré pour déchiffrement'); + return; + } + console.log(`\n🔍 Déchiffrement de ${fileResults.length} fichier(s)...`); + for (const fileResult of fileResults) { + console.log(`\n📄 Fichier: ${fileResult.route}`); + try { + const content = fileResult.data.content; + // Vérifier si le contenu est chiffré (format de démonstration) + if (content.includes('[CONTENU CHIFFRÉ - DÉCHIFFREMENT NÉCESSAIRE]')) { + console.log(' 🔐 Contenu chiffré détecté (format de démonstration)'); + // Extraire les métadonnées du format de démonstration + const lines = content.split('\n'); + const metadata = {}; + lines.forEach((line) => { + if (line.includes('Utilisateur:')) { + metadata.user = line.split('Utilisateur:')[1]?.trim() || ''; + } + else if (line.includes('Version de clé:')) { + metadata.keyVersion = line.split('Version de clé:')[1]?.trim() || ''; + } + else if (line.includes('Algorithme:')) { + metadata.algorithm = line.split('Algorithme:')[1]?.trim() || ''; + } + else if (line.includes('Rotation:')) { + metadata.rotation = line.split('Rotation:')[1]?.trim() || ''; + } + else if (line.includes('Taille chiffrée:')) { + metadata.encryptedSize = line.split('Taille chiffrée:')[1]?.trim() || ''; + } + }); + console.log(` 📋 Métadonnées extraites:`); + console.log(` → Utilisateur: ${metadata.user}`); + console.log(` → Version de clé: ${metadata.keyVersion}`); + console.log(` → Algorithme: ${metadata.algorithm}`); + console.log(` → Rotation: ${metadata.rotation}`); + console.log(` → Taille chiffrée: ${metadata.encryptedSize}`); + // Dans un vrai déchiffrement, on utiliserait la clé utilisateur + console.log(` 🔑 Déchiffrement simulé: Contenu accessible avec la clé utilisateur`); + } + else { + console.log(' 📝 Contenu non chiffré détecté'); + console.log(` 📄 Aperçu: ${content.substring(0, 100)}${content.length > 100 ? '...' : ''}`); + } + console.log(` ✅ Déchiffrement traité avec succès`); + } + catch (error) { + console.log(` ❌ Erreur de déchiffrement: ${error.message}`); + if (error instanceof index_1.VaultDecryptionError) { + console.log(` → Erreur de déchiffrement spécifique`); + console.log(` → Code: ${error.code}`); + } + else if (error.message.includes('déchiffrement')) { + console.log(` → Erreur de traitement du contenu`); + } + else { + console.log(` → Erreur inattendue lors du déchiffrement`); + } + } + } + console.log('\n✅ ÉTAPE 5 TERMINÉE: Déchiffrement des contenus terminé'); + } + catch (error) { + console.error('\n❌ ÉTAPE 5 ÉCHOUÉE:', error); + throw error; + } +} +/** + * Fonction principale - Exécute le scénario complet + */ +async function main() { + console.log('🚀 DÉMONSTRATION COMPLÈTE DU CLIENT VAULT'); + console.log('Scénario: Initialisation → Routes → Parcours → Synchronisation → Déchiffrement'); + console.log('='.repeat(80)); + try { + // ÉTAPE 1: Initialisation + const client = await step1_Initialization(); + // ÉTAPE 2: Récupération des routes + const routes = await step2_GetRoutes(client); + // ÉTAPE 3: Parcours des routes + const results = await step3_ParseRoutes(routes, client); + // ÉTAPE 4: Synchronisation locale + await step4_SyncLocalFiles(client); + // ÉTAPE 5: Déchiffrement + await step5_DecryptContents(results); + console.log('\n🎉 SCÉNARIO COMPLET TERMINÉ AVEC SUCCÈS!'); + console.log('\n📝 Résumé du système sécurisé:'); + console.log(' • ✅ Authentification par ID utilisateur validée'); + console.log(' • ✅ Récupération des routes API fonctionnelle'); + console.log(' • ✅ Parcours de toutes les routes testé'); + console.log(' • ✅ Synchronisation locale des fichiers déchiffrés'); + console.log(' • ✅ Déchiffrement des contenus géré'); + console.log(' • ✅ Gestion d\'erreurs complète à chaque étape'); + console.log(' • ✅ Rotation automatique des clés active'); + console.log(' • ✅ Chiffrement quantum-résistant (ChaCha20-Poly1305)'); + } + catch (error) { + console.error('\n💥 ÉCHEC DU SCÉNARIO:', error); + process.exit(1); + } +} +// Exécution si appelé directement +if (require.main === module) { + main().catch(console.error); +} +//# sourceMappingURL=usage.js.map \ No newline at end of file diff --git a/sdk-client/dist/examples/usage.js.map b/sdk-client/dist/examples/usage.js.map new file mode 100644 index 0000000..d886f18 --- /dev/null +++ b/sdk-client/dist/examples/usage.js.map @@ -0,0 +1 @@ +{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../examples/usage.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/sdk-client/dist/src/__tests__/setup.d.ts b/sdk-client/dist/src/__tests__/setup.d.ts new file mode 100644 index 0000000..11bd3f1 --- /dev/null +++ b/sdk-client/dist/src/__tests__/setup.d.ts @@ -0,0 +1,4 @@ +/** + * Configuration des tests pour le SDK Vault Client + */ +//# sourceMappingURL=setup.d.ts.map \ No newline at end of file diff --git a/sdk-client/dist/src/__tests__/setup.d.ts.map b/sdk-client/dist/src/__tests__/setup.d.ts.map new file mode 100644 index 0000000..f336d49 --- /dev/null +++ b/sdk-client/dist/src/__tests__/setup.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/__tests__/setup.ts"],"names":[],"mappings":"AAAA;;GAEG"} \ No newline at end of file diff --git a/sdk-client/dist/src/__tests__/setup.js b/sdk-client/dist/src/__tests__/setup.js new file mode 100644 index 0000000..d500466 --- /dev/null +++ b/sdk-client/dist/src/__tests__/setup.js @@ -0,0 +1,26 @@ +"use strict"; +/** + * Configuration des tests pour le SDK Vault Client + */ +// Configuration globale pour les tests +beforeAll(() => { + // Configuration des timeouts pour les tests + jest.setTimeout(30000); +}); +beforeEach(() => { + // Reset des mocks avant chaque test + jest.clearAllMocks(); +}); +afterEach(() => { + // Nettoyage après chaque test + jest.restoreAllMocks(); +}); +// Mock des modules Node.js si nécessaire +jest.mock('crypto', () => ({ + ...jest.requireActual('crypto'), + createDecipher: jest.fn(), +})); +// Variables d'environnement pour les tests +process.env['NODE_ENV'] = 'test'; +process.env['TZ'] = 'UTC'; +//# sourceMappingURL=setup.js.map \ No newline at end of file diff --git a/sdk-client/dist/src/__tests__/setup.js.map b/sdk-client/dist/src/__tests__/setup.js.map new file mode 100644 index 0000000..8c12c72 --- /dev/null +++ b/sdk-client/dist/src/__tests__/setup.js.map @@ -0,0 +1 @@ +{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/__tests__/setup.ts"],"names":[],"mappings":";AAAA;;GAEG;AAEH,uCAAuC;AACvC,SAAS,CAAC,GAAG,EAAE;IACb,4CAA4C;IAC5C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC;AAEH,UAAU,CAAC,GAAG,EAAE;IACd,oCAAoC;IACpC,IAAI,CAAC,aAAa,EAAE,CAAC;AACvB,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,8BAA8B;IAC9B,IAAI,CAAC,eAAe,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEH,yCAAyC;AACzC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IACzB,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;IAC/B,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;CAC1B,CAAC,CAAC,CAAC;AAEJ,2CAA2C;AAC3C,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;AACjC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC"} \ No newline at end of file diff --git a/sdk-client/dist/src/index.d.ts b/sdk-client/dist/src/index.d.ts new file mode 100644 index 0000000..6b92382 --- /dev/null +++ b/sdk-client/dist/src/index.d.ts @@ -0,0 +1,167 @@ +export interface VaultConfig { + baseUrl: string; + verifySsl?: boolean; + timeout?: number; + userId: string; +} +export interface VaultFile { + content: string; + filename: string; + size: number; + encrypted: boolean; + algorithm?: string | undefined; + user_id?: string | undefined; + key_version?: string | undefined; + timestamp?: string | undefined; +} +export interface VaultHealth { + status: string; + service: string; + encryption: string; + algorithm: string; + authentication?: string; + key_rotation?: string; + timestamp?: string; +} +export interface VaultInfo { + name: string; + version: string; + domain: string; + port: number; + protocol: string; + encryption: string; + authentication?: string; + key_rotation?: string; + endpoints?: Record; +} +export interface VaultRoute { + method: string; + path: string; + description: string; + authentication: string; + headers_required: string[]; + response_type: string; + parameters?: Record; + examples?: string[]; +} +export interface VaultRoutes { + routes: VaultRoute[]; + total_routes: number; + authentication: { + type: string; + header: string; + description: string; + }; + user_id: string; + timestamp: string; +} +export interface SyncOptions { + environment: string; + localDir?: string; + verbose?: boolean; +} +export interface SyncResult { + synced: number; + skipped: number; + errors: number; + details: Array<{ + file: string; + status: 'synced' | 'skipped' | 'error'; + message?: string; + }>; +} +export interface VaultError { + message: string; + code?: string | undefined; + statusCode?: number | undefined; +} +export declare class VaultApiError extends Error implements VaultError { + readonly code?: string | undefined; + readonly statusCode?: number | undefined; + constructor(message: string, code?: string, statusCode?: number); +} +export declare class VaultDecryptionError extends Error implements VaultError { + readonly code?: string | undefined; + constructor(message: string, code?: string); +} +export declare class VaultAuthenticationError extends Error implements VaultError { + readonly code?: string | undefined; + readonly statusCode?: number | undefined; + constructor(message: string, code?: string, statusCode?: number); +} +/** + * Client sécurisé pour l'API Vault avec authentification par clés utilisateur + * Les clés sont gérées côté serveur avec rotation automatique + */ +export declare class SecureVaultClient { + private config; + private vaultKey; + constructor(config?: VaultConfig); + /** + * Récupère un fichier depuis l'API Vault + */ + getFile(env: string, filePath: string): Promise; + /** + * Récupère plusieurs fichiers en parallèle + */ + getFiles(env: string, filePaths: string[]): Promise; + /** + * Recherche des fichiers correspondant à un pattern + */ + searchFiles(_env: string, _pattern: string): Promise; + /** + * Vérifie l'état de santé de l'API + */ + health(): Promise; + /** + * Récupère les informations sur l'API + */ + info(): Promise; + /** + * Test de connectivité simple + */ + ping(): Promise; + /** + * Récupère toutes les routes disponibles de l'API + */ + getRoutes(): Promise; + /** + * Synchronise les fichiers déchiffrés localement + * Route vault /// -> ../confs// + * Les fichiers existants dans confs/ sont toujours écrasés pour avoir le contenu le plus récent + */ + syncLocalFiles(options: SyncOptions): Promise; + /** + * Déchiffre le contenu avec les métadonnées utilisateur et gère la prochaine clé + */ + private decryptContent; + /** + * Met à jour la prochaine clé pour les requêtes suivantes et le fichier .env + */ + private updateNextKey; + /** + * Retourne le répertoire du fichier .env trouvé + */ + private _getEnvFileDirectory; + /** + * Charge les variables d'environnement depuis plusieurs emplacements possibles + */ + private _loadEnvironmentVariables; + /** + * Met à jour le fichier .env avec la nouvelle clé + */ + private updateEnvFile; + /** + * Effectue une requête vers l'API avec authentification + */ + private _fetchApi; +} +/** + * Fonction utilitaire pour créer un client sécurisé + */ +export declare function createSecureVaultClient(baseUrl: string, userId: string): SecureVaultClient; +/** + * Fonction utilitaire pour créer un client sécurisé avec configuration complète + */ +export declare function createSecureVaultClientWithConfig(config: VaultConfig): SecureVaultClient; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/sdk-client/dist/src/index.d.ts.map b/sdk-client/dist/src/index.d.ts.map new file mode 100644 index 0000000..c9fd594 --- /dev/null +++ b/sdk-client/dist/src/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/sdk-client/dist/src/index.js b/sdk-client/dist/src/index.js new file mode 100644 index 0000000..d561201 --- /dev/null +++ b/sdk-client/dist/src/index.js @@ -0,0 +1,559 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SecureVaultClient = exports.VaultAuthenticationError = exports.VaultDecryptionError = exports.VaultApiError = void 0; +exports.createSecureVaultClient = createSecureVaultClient; +exports.createSecureVaultClientWithConfig = createSecureVaultClientWithConfig; +const node_fetch_1 = __importDefault(require("node-fetch")); +const https_1 = __importDefault(require("https")); +const dotenv_1 = __importDefault(require("dotenv")); +const { chacha20poly1305 } = require('@noble/ciphers/chacha.js'); +const fs_1 = __importDefault(require("fs")); +const path_1 = __importDefault(require("path")); +class VaultApiError extends Error { + constructor(message, code, statusCode) { + super(message); + this.name = 'VaultApiError'; + this.code = code; + this.statusCode = statusCode; + } +} +exports.VaultApiError = VaultApiError; +class VaultDecryptionError extends Error { + constructor(message, code) { + super(message); + this.name = 'VaultDecryptionError'; + this.code = code; + } +} +exports.VaultDecryptionError = VaultDecryptionError; +class VaultAuthenticationError extends Error { + constructor(message, code, statusCode) { + super(message); + this.name = 'VaultAuthenticationError'; + this.code = code; + this.statusCode = statusCode; + } +} +exports.VaultAuthenticationError = VaultAuthenticationError; +/** + * Client sécurisé pour l'API Vault avec authentification par clés utilisateur + * Les clés sont gérées côté serveur avec rotation automatique + */ +class SecureVaultClient { + constructor(config) { + this.vaultKey = null; + // Charger les variables d'environnement depuis .env + // Essayer plusieurs emplacements pour le fichier .env + this._loadEnvironmentVariables(); + // Si pas de config fournie, utiliser les variables d'environnement + if (!config) { + const envUser = process.env['VAULT_USER']; + const envKey = process.env['VAULT_KEY']; + const envEnv = process.env['VAULT_ENV']; + if (!envUser || !envKey || !envEnv) { + throw new Error('Variables d\'environnement requises: VAULT_USER, VAULT_KEY, VAULT_ENV'); + } + config = { + baseUrl: 'https://vault.4nkweb.com:6666', + userId: envUser, + timeout: 30000, + verifySsl: false + }; + this.vaultKey = envKey; + } + this.config = { + verifySsl: false, + timeout: 30000, + ...config, + }; + // Validation de l'ID utilisateur + if (!this.config.userId || this.config.userId.length < 3 || this.config.userId.length > 128) { + throw new Error('ID utilisateur requis (3-128 caractères)'); + } + if (!/^[a-zA-Z0-9_-]+$/.test(this.config.userId)) { + throw new Error('ID utilisateur invalide - caractères autorisés: a-z, A-Z, 0-9, _, -'); + } + } + /** + * Récupère un fichier depuis l'API Vault + */ + async getFile(env, filePath) { + const url = `${this.config.baseUrl}/${env}/${filePath}`; + try { + const response = await this._fetchApi(url); + if (!response.ok) { + if (response.status === 401) { + throw new VaultAuthenticationError('Authentification échouée - vérifiez votre ID utilisateur', 'AUTH_FAILED', response.status); + } + if (response.status === 403) { + throw new VaultApiError('Accès non autorisé à ce fichier', 'ACCESS_DENIED', response.status); + } + throw new VaultApiError(`Erreur API: ${response.status} ${response.statusText}`, 'API_ERROR', response.status); + } + const encryptedData = await response.arrayBuffer(); + // Extraction des métadonnées depuis les headers + const user_id = response.headers.get('X-User-ID') || undefined; + const keyRotation = response.headers.get('X-Key-Rotation') || undefined; + const algorithm = response.headers.get('X-Algorithm') || undefined; + // Déchiffrement du contenu avec les headers pour la prochaine clé + const decryptedContent = this.decryptContent(Buffer.from(encryptedData), response.headers); + return { + content: decryptedContent, + filename: filePath.split('/').pop() || filePath, + size: decryptedContent.length, + encrypted: true, + algorithm, + user_id, + key_version: keyRotation, + timestamp: new Date().toISOString() + }; + } + catch (error) { + if (error instanceof VaultApiError || error instanceof VaultAuthenticationError) { + throw error; + } + throw new VaultApiError(`Erreur lors de la récupération du fichier: ${error instanceof Error ? error.message : 'Inconnue'}`); + } + } + /** + * Récupère plusieurs fichiers en parallèle + */ + async getFiles(env, filePaths) { + const promises = filePaths.map(filePath => this.getFile(env, filePath)); + return Promise.all(promises); + } + /** + * Recherche des fichiers correspondant à un pattern + */ + async searchFiles(_env, _pattern) { + // Cette fonctionnalité nécessiterait une implémentation côté serveur + // Pour l'instant, retour d'une erreur explicative + throw new VaultApiError('Recherche de fichiers non implémentée - contactez l\'administrateur', 'NOT_IMPLEMENTED'); + } + /** + * Vérifie l'état de santé de l'API + */ + async health() { + const url = `${this.config.baseUrl}/health`; + try { + const response = await this._fetchApi(url); + if (!response.ok) { + throw new VaultApiError(`Erreur de santé API: ${response.status}`, 'HEALTH_CHECK_FAILED', response.status); + } + return await response.json(); + } + catch (error) { + if (error instanceof VaultApiError) { + throw error; + } + throw new VaultApiError(`Erreur lors du contrôle de santé: ${error instanceof Error ? error.message : 'Inconnue'}`); + } + } + /** + * Récupère les informations sur l'API + */ + async info() { + const url = `${this.config.baseUrl}/info`; + try { + const response = await this._fetchApi(url); + if (!response.ok) { + throw new VaultApiError(`Erreur info API: ${response.status}`, 'INFO_ERROR', response.status); + } + return await response.json(); + } + catch (error) { + if (error instanceof VaultApiError) { + throw error; + } + throw new VaultApiError(`Erreur lors de la récupération des informations: ${error instanceof Error ? error.message : 'Inconnue'}`); + } + } + /** + * Test de connectivité simple + */ + async ping() { + try { + await this.health(); + return true; + } + catch (error) { + return false; + } + } + /** + * Récupère toutes les routes disponibles de l'API + */ + async getRoutes() { + const url = `${this.config.baseUrl}/routes`; + try { + const response = await this._fetchApi(url); + if (!response.ok) { + if (response.status === 401) { + throw new VaultAuthenticationError('Authentification échouée - vérifiez votre ID utilisateur', 'AUTH_FAILED', response.status); + } + throw new VaultApiError(`Erreur API routes: ${response.status} ${response.statusText}`, 'ROUTES_API_ERROR', response.status); + } + return await response.json(); + } + catch (error) { + if (error instanceof VaultApiError || error instanceof VaultAuthenticationError) { + throw error; + } + throw new VaultApiError(`Erreur lors de la récupération des routes: ${error instanceof Error ? error.message : 'Inconnue'}`); + } + } + /** + * Synchronise les fichiers déchiffrés localement + * Route vault /// -> ../confs// + * Les fichiers existants dans confs/ sont toujours écrasés pour avoir le contenu le plus récent + */ + async syncLocalFiles(options) { + // 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'; + const { environment, localDir = defaultConfsDir, verbose = false } = options; + const result = { + synced: 0, + skipped: 0, + errors: 0, + details: [] + }; + try { + // 1. Créer le dossier de destination s'il n'existe pas + // Résoudre le chemin par rapport au répertoire du fichier .env + let targetDir; + if (path_1.default.isAbsolute(localDir)) { + targetDir = localDir; + } + else { + // Pour les chemins relatifs, partir du répertoire du fichier .env + const envFileDir = this._getEnvFileDirectory(); + targetDir = path_1.default.resolve(envFileDir, localDir); + } + if (!fs_1.default.existsSync(targetDir)) { + fs_1.default.mkdirSync(targetDir, { recursive: true }); + if (verbose) { + console.log(`📁 Dossier créé: ${targetDir}`); + } + } + // 2. Récupérer la liste des routes pour identifier les fichiers + const routes = await this.getRoutes(); + // 3. Extraire les fichiers disponibles depuis les exemples de routes + const fileRoute = routes.routes.find(route => route.path.includes('') && route.path.includes('')); + if (!fileRoute || !fileRoute.examples) { + throw new VaultApiError('Impossible de déterminer les fichiers disponibles'); + } + // 4. Parser les exemples pour extraire les projets et fichiers + const filesToSync = []; + for (const example of fileRoute.examples) { + // Format: /dev/bitcoin/bitcoin.conf -> project: bitcoin, fileName: bitcoin.conf + const pathParts = example.split('/').filter(part => part && part !== environment); + if (pathParts.length >= 2) { + const project = pathParts[0] || 'unknown'; + const fileName = pathParts[pathParts.length - 1] || 'unknown'; + const vaultPath = pathParts.join('/'); + filesToSync.push({ + project, + fileName, + vaultPath + }); + } + } + // 5. Synchroniser chaque fichier + for (const file of filesToSync) { + try { + const localProjectDir = path_1.default.join(targetDir, file.project); + const localFilePath = path_1.default.join(localProjectDir, file.fileName); + // Créer le dossier du projet s'il n'existe pas + if (!fs_1.default.existsSync(localProjectDir)) { + fs_1.default.mkdirSync(localProjectDir, { recursive: true }); + if (verbose) { + console.log(`📁 Dossier projet créé: ${localProjectDir}`); + } + } + // Toujours écraser les fichiers dans confs/ pour avoir le contenu le plus récent + // La vérification d'existence est conservée pour le logging uniquement + const fileExists = fs_1.default.existsSync(localFilePath); + if (fileExists && verbose) { + console.log(`🔄 Écrasement du fichier existant: ${file.vaultPath}`); + } + // Récupérer le fichier depuis le vault + const vaultFile = await this.getFile(environment, file.vaultPath); + // Extraire le contenu déchiffré (simulation pour le format de démonstration) + let content = vaultFile.content; + // Le contenu est maintenant déchiffré automatiquement par decryptContent + // Pas besoin de récupérer depuis le storage, le contenu vient de l'API déchiffrée + // Écrire le fichier local + fs_1.default.writeFileSync(localFilePath, content, 'utf8'); + result.synced++; + result.details.push({ + file: file.vaultPath, + status: 'synced', + message: `Synchronisé vers ${localFilePath}` + }); + if (verbose) { + console.log(`✅ Synchronisé: ${file.vaultPath} -> ${localFilePath}`); + } + } + catch (error) { + result.errors++; + const errorMessage = error instanceof Error ? error.message : 'Erreur inconnue'; + result.details.push({ + file: file.vaultPath, + status: 'error', + message: errorMessage + }); + if (verbose) { + console.log(`❌ Erreur: ${file.vaultPath} - ${errorMessage}`); + } + } + } + if (verbose) { + console.log(`\n📊 Résumé de synchronisation:`); + console.log(` ✅ Synchronisés: ${result.synced}`); + console.log(` ⏭️ Ignorés: ${result.skipped}`); + console.log(` ❌ Erreurs: ${result.errors}`); + } + return result; + } + catch (error) { + throw new VaultApiError(`Erreur lors de la synchronisation: ${error instanceof Error ? error.message : 'Inconnue'}`); + } + } + /** + * Déchiffre le contenu avec les métadonnées utilisateur et gère la prochaine clé + */ + decryptContent(encryptedData, responseHeaders) { + try { + // Décoder le base64 + const decoded = Buffer.from(encryptedData.toString(), 'base64'); + // Nouveau format: nonce (12 bytes) + taille_métadonnées (4 bytes) + métadonnées + contenu chiffré + if (decoded.length < 16) { + throw new Error('Données chiffrées invalides - format incorrect'); + } + const nonce = decoded.subarray(0, 12); + const metadataSize = decoded.readUInt32BE(12); + const metadataJson = decoded.subarray(16, 16 + metadataSize); + const ciphertext = decoded.subarray(16 + metadataSize); + // Parse des métadonnées + const metadata = JSON.parse(metadataJson.toString('utf-8')); + // Vérification de l'utilisateur + if (metadata.user_id !== this.config.userId) { + throw new VaultAuthenticationError('Métadonnées utilisateur ne correspondent pas', 'USER_MISMATCH'); + } + // Récupération de la prochaine clé depuis les headers ou les métadonnées + const nextKey = responseHeaders?.get('X-Next-Key') || metadata.next_key; + // Pour le déchiffrement, utiliser la clé courante d'abord + const keyToUse = this.vaultKey; + if (!keyToUse) { + throw new VaultDecryptionError('Clé de déchiffrement non disponible'); + } + console.log(`🔑 Utilisation de la clé courante pour déchiffrement: ${keyToUse.substring(0, 20)}...`); + // Ne pas mettre à jour la clé immédiatement, attendre un déchiffrement réussi + try { + // Convertir la clé base64 en Uint8Array + const key = Buffer.from(keyToUse, 'base64'); + // Déchiffrement ChaCha20-Poly1305 avec @noble/ciphers + const cipher = chacha20poly1305(key, nonce); + const decrypted = cipher.decrypt(ciphertext); + // Déchiffrement réussi, mettre à jour la clé pour la prochaine requête + if (nextKey) { + this.updateNextKey(nextKey); + } + // Retourner le contenu déchiffré + return Buffer.from(decrypted).toString('utf-8'); + } + catch (decryptError) { + // Si le déchiffrement échoue, essayer avec la prochaine clé si elle est différente + if (nextKey && nextKey !== keyToUse) { + console.log(`🔄 Tentative de déchiffrement avec la prochaine clé...`); + try { + const nextKeyBuffer = Buffer.from(nextKey, 'base64'); + const cipherNext = chacha20poly1305(nextKeyBuffer, nonce); + const decryptedNext = cipherNext.decrypt(ciphertext); + console.log(`✅ Déchiffrement réussi avec la prochaine clé !`); + // Déchiffrement réussi avec la prochaine clé, mettre à jour + this.updateNextKey(nextKey); + return Buffer.from(decryptedNext).toString('utf-8'); + } + catch (nextDecryptError) { + console.warn(`⚠️ Déchiffrement avec la prochaine clé échoué: ${nextDecryptError instanceof Error ? nextDecryptError.message : 'Erreur inconnue'}`); + } + } + throw new VaultDecryptionError(`Erreur de déchiffrement ChaCha20-Poly1305: ${decryptError instanceof Error ? decryptError.message : 'Inconnue'}`); + } + } + catch (error) { + if (error instanceof VaultAuthenticationError || error instanceof VaultDecryptionError) { + throw error; + } + throw new VaultDecryptionError(`Erreur de déchiffrement: ${error instanceof Error ? error.message : 'Inconnue'}`); + } + } + /** + * Met à jour la prochaine clé pour les requêtes suivantes et le fichier .env + */ + updateNextKey(nextKey) { + if (nextKey) { + this.vaultKey = nextKey; // Mettre à jour la clé courante + // Mettre à jour le fichier .env avec la nouvelle clé + this.updateEnvFile(nextKey); + console.log(`🔑 Prochaine clé mise à jour: ${nextKey.substring(0, 20)}...`); + } + } + /** + * Retourne le répertoire du fichier .env trouvé + */ + _getEnvFileDirectory() { + // Chercher le fichier .env dans l'ordre de priorité + const possibleEnvPaths = [ + path_1.default.join(__dirname, '.env'), // Répertoire du SDK (priorité 1) + path_1.default.join(process.cwd(), '.env'), // Répertoire de travail (priorité 2) + '.env', // Répertoire courant (priorité 3) + '../.env', // Répertoire parent (priorité 4) + '../../.env', // Répertoire grand-parent (priorité 5) + path_1.default.join(__dirname, '../.env'), // Parent du SDK (priorité 6) + path_1.default.join(__dirname, '../../.env'), // Grand-parent du SDK (priorité 7) + ]; + for (const envPath of possibleEnvPaths) { + try { + if (fs_1.default.existsSync(envPath)) { + // Retourner le répertoire du fichier .env + const envDir = path_1.default.dirname(path_1.default.resolve(envPath)); + return envDir; + } + } + catch (error) { + // Ignorer les erreurs et continuer avec le chemin suivant + continue; + } + } + // Fallback vers le répertoire du SDK si aucun .env n'est trouvé + return __dirname; + } + /** + * Charge les variables d'environnement depuis plusieurs emplacements possibles + */ + _loadEnvironmentVariables() { + const possibleEnvPaths = [ + '.env', // Répertoire courant + '../.env', // Répertoire parent + '../../.env', // Répertoire grand-parent + path_1.default.join(__dirname, '.env'), // Répertoire du SDK + path_1.default.join(__dirname, '../.env'), // Parent du SDK + path_1.default.join(__dirname, '../../.env'), // Grand-parent du SDK + path_1.default.join(process.cwd(), '.env'), // Répertoire de travail + ]; + let envLoaded = false; + for (const envPath of possibleEnvPaths) { + try { + if (fs_1.default.existsSync(envPath)) { + const result = dotenv_1.default.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_1.default.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é + */ + updateEnvFile(newKey) { + try { + const envPath = path_1.default.join(__dirname, '../../.env'); + // Lire le fichier .env actuel + let envContent = ''; + if (fs_1.default.existsSync(envPath)) { + envContent = fs_1.default.readFileSync(envPath, 'utf8'); + } + // Mettre à jour ou ajouter la clé VAULT_KEY + const keyRegex = /^VAULT_KEY=.*$/m; + if (keyRegex.test(envContent)) { + envContent = envContent.replace(keyRegex, `VAULT_KEY="${newKey}"`); + } + else { + envContent += `\nVAULT_KEY="${newKey}"\n`; + } + // Écrire le fichier .env mis à jour + fs_1.default.writeFileSync(envPath, envContent, 'utf8'); + console.log(`📝 Fichier .env mis à jour avec la nouvelle clé`); + } + catch (error) { + console.warn(`⚠️ Impossible de mettre à jour le fichier .env: ${error instanceof Error ? error.message : 'Erreur inconnue'}`); + } + } + /** + * Effectue une requête vers l'API avec authentification + */ + async _fetchApi(url) { + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), this.config.timeout); + try { + const mergedOptions = { + method: 'GET', + headers: { + 'User-Agent': 'SecureVaultClient/2.0.0', + 'X-User-ID': this.config.userId, + 'Accept': 'application/octet-stream' + }, + signal: controller.signal + }; + // Configuration SSL pour les certificats auto-signés + if (this.config.verifySsl === false) { + mergedOptions.agent = new https_1.default.Agent({ + rejectUnauthorized: false + }); + } + const response = await (0, node_fetch_1.default)(url, mergedOptions); + clearTimeout(timeoutId); + return response; + } + catch (error) { + clearTimeout(timeoutId); + if (error instanceof Error && error.name === 'AbortError') { + throw new VaultApiError(`Timeout de la requête (${this.config.timeout}ms)`, 'TIMEOUT'); + } + throw new VaultApiError(`Erreur de connexion: ${error instanceof Error ? error.message : 'Inconnue'}`); + } + } +} +exports.SecureVaultClient = SecureVaultClient; +/** + * Fonction utilitaire pour créer un client sécurisé + */ +function createSecureVaultClient(baseUrl, userId) { + return new SecureVaultClient({ + baseUrl, + userId, + verifySsl: false, // Pour les certificats auto-signés en développement + timeout: 15000 + }); +} +/** + * Fonction utilitaire pour créer un client sécurisé avec configuration complète + */ +function createSecureVaultClientWithConfig(config) { + return new SecureVaultClient(config); +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/sdk-client/dist/src/index.js.map b/sdk-client/dist/src/index.js.map new file mode 100644 index 0000000..df1748f --- /dev/null +++ b/sdk-client/dist/src/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/storage/dev/4NK_miner/.gitkeep b/storage/dev/4NK_miner/.gitkeep new file mode 100644 index 0000000..6a04314 --- /dev/null +++ b/storage/dev/4NK_miner/.gitkeep @@ -0,0 +1 @@ +./ \ No newline at end of file