4NK_vault/sdk-client
4NK Dev f75e45103d ci: docker_tag=secure-rotation
🔒 ImplĂ©mentation du chiffrement client-serveur sĂ©curisĂ© avec rotation Ă  chaque requĂȘte

✅ NOUVEAU SYSTÈME DE SÉCURITÉ:
‱ Chiffrement client-serveur avec clĂ©s partagĂ©es
‱ Rotation automatique Ă  chaque requĂȘte (pas Ă  chaque connexion)
‱ Envoi de la prochaine clĂ© dans le flux chiffrĂ©
‱ SDK conserve la clĂ© pour les requĂȘtes suivantes

🔧 MODIFICATIONS API:
‱ Nouvelle mĂ©thode _encrypt_with_user_key_and_next()
‱ Rotation automatique dans get_or_create_user_key()
‱ Headers X-Next-Key avec la prochaine clĂ©
‱ Contenu chiffrĂ© retournĂ© (application/octet-stream)

🔧 MODIFICATIONS SDK:
‱ Gestion de la prochaine clĂ© dans decryptContent()
‱ Extraction de X-Next-Key depuis les headers
‱ MĂ©thode updateNextKey() pour sauvegarder la clĂ©
‱ Support des mĂ©tadonnĂ©es avec next_key

đŸ§Ș TESTS VALIDÉS:
‱ Rotation Ă  chaque requĂȘte confirmĂ©e
‱ Prochaine clĂ© diffĂ©rente Ă  chaque appel
‱ Contenu chiffrĂ© correctement transmis
‱ MĂ©tadonnĂ©es avec informations de rotation

🔐 SÉCURITÉ:
‱ Chiffrement quantique rĂ©sistant (ChaCha20-Poly1305)
‱ ClĂ©s individuelles par utilisateur et environnement
‱ Rotation transparente pour l'utilisateur
‱ Audit complet dans les logs serveur
2025-09-29 22:15:19 +00:00
..
2025-09-29 22:15:19 +00:00
2025-09-29 22:15:19 +00:00

SDK Client TypeScript pour l'API Vault 4NK

Un SDK TypeScript moderne et type-safe pour interagir avec l'API Vault 4NK, permettant de récupérer et déchiffrer des fichiers depuis un service de stockage sécurisé avec chiffrement quantique résistant.

🚀 CaractĂ©ristiques

  • Type-safe : EntiĂšrement Ă©crit en TypeScript avec types stricts
  • Chiffrement quantique rĂ©sistant : Support de ChaCha20-Poly1305
  • Gestion d'erreurs avancĂ©e : Classes d'erreurs spĂ©cialisĂ©es
  • RequĂȘtes parallĂšles : RĂ©cupĂ©ration de plusieurs fichiers simultanĂ©ment
  • Configuration flexible : Timeouts, SSL, etc.
  • Utilitaires crypto : GĂ©nĂ©ration et validation de clĂ©s
  • Monitoring : Endpoints de santĂ© et d'information

📩 Installation

npm install @4nk/vault-sdk

🔧 Configuration

Clé de déchiffrement

Le SDK nécessite une clé de déchiffrement de 32 bytes pour déchiffrer les fichiers :

import { VaultCrypto } from '@4nk/vault-sdk';

// Génération d'une clé aléatoire
const randomKey = VaultCrypto.generateKey();

// Ou dérivation depuis un mot de passe
const derivedKey = VaultCrypto.hashToKey('mon-mot-de-passe-secret');

// Validation d'une clé
const isValid = VaultCrypto.validateKey(myKey);

📖 Utilisation

Exemple basique

import { createVaultClient } from '@4nk/vault-sdk';

// Création du client
const client = createVaultClient(
  'https://vault.4nkweb.com:6666',
  // Plus de clé nécessaire - clés dynamiques automatiques
);

// Récupération d'un fichier
try {
  const file = await client.getFile('dev', 'bitcoin/bitcoin.conf');
  console.log(`Contenu: ${file.content}`);
  console.log(`Taille: ${file.size} caractĂšres`);
  console.log(`Chiffré: ${file.encrypted ? 'Oui' : 'Non'}`);
} catch (error) {
  console.error('Erreur:', error.message);
}

Configuration avancée

import { VaultClient } from '@4nk/vault-sdk';

const client = new VaultClient(
  {
    baseUrl: 'https://vault.4nkweb.com:6666',
    verifySsl: false, // Pour les certificats auto-signés
    timeout: 10000,   // 10 secondes
  },
  // Plus de clé nécessaire - clés dynamiques automatiques
);

Récupération de plusieurs fichiers

// Récupération parallÚle
const files = await client.getFiles([
  { env: 'dev', filePath: 'bitcoin/bitcoin.conf' },
  { env: 'dev', filePath: 'tor/torrc' },
  { env: 'dev', filePath: 'sdk_relay/sdk_relay.conf' }
]);

files.forEach(file => {
  console.log(`${file.filename}: ${file.size} caractĂšres`);
});

Monitoring et santé

// Test de connectivité
const isConnected = await client.ping();
console.log(`Connecté: ${isConnected}`);

// Informations sur l'API
const info = await client.info();
console.log(`API: ${info.name} v${info.version}`);

// État de santĂ©
const health = await client.health();
console.log(`Statut: ${health.status}`);

đŸ›Ąïž Gestion d'erreurs

Le SDK fournit des classes d'erreurs spécialisées :

import { VaultApiError, VaultDecryptionError } from '@4nk/vault-sdk';

try {
  await client.getFile('dev', 'fichier-inexistant.conf');
} catch (error) {
  if (error instanceof VaultApiError) {
    console.error(`Erreur API: ${error.message} (${error.statusCode})`);
    console.error(`Endpoint: ${error.endpoint}`);
  } else if (error instanceof VaultDecryptionError) {
    console.error(`Erreur de déchiffrement: ${error.message}`);
  } else {
    console.error(`Erreur inconnue: ${error.message}`);
  }
}

Types d'erreurs

  • VaultApiError : Erreurs HTTP de l'API

    • statusCode : Code d'erreur HTTP
    • endpoint : Endpoint qui a Ă©chouĂ©
  • VaultDecryptionError : Erreurs de dĂ©chiffrement

    • ClĂ© incorrecte
    • DonnĂ©es corrompues
    • Format invalide

🔐 SĂ©curitĂ©

Chiffrement

  • Algorithme : ChaCha20-Poly1305
  • Nonce : 12 bytes alĂ©atoires par fichier
  • ClĂ© : 32 bytes (256 bits)
  • Authentification : IntĂ©grĂ©e via Poly1305

Bonnes pratiques

// ✅ Utiliser des clĂ©s gĂ©nĂ©rĂ©es alĂ©atoirement
const key = VaultCrypto.generateKey();

// ✅ Valider les clĂ©s avant utilisation
if (!VaultCrypto.validateKey(key)) {
  throw new Error('Clé invalide');
}

// ✅ GĂ©rer les erreurs de dĂ©chiffrement
try {
  const file = await client.getFile('dev', 'config.conf');
} catch (error) {
  if (error instanceof VaultDecryptionError) {
    // Clé incorrecte ou données corrompues
    console.error('Erreur de déchiffrement');
  }
}

// ✅ Utiliser HTTPS en production
const client = new VaultClient(
  {
    baseUrl: 'https://vault.4nkweb.com:6666',
    verifySsl: true // Activer la validation SSL
  },
  key
);

📚 API Reference

Classes principales

VaultClient

class VaultClient {
  constructor(config: VaultConfig, decryptionKey: string)

  // Récupération de fichiers
  getFile(env: string, filePath: string): Promise<VaultFile>
  getFiles(requests: FileRequest[]): Promise<VaultFile[]>

  // Monitoring
  health(): Promise<VaultHealth>
  info(): Promise<VaultInfo>
  ping(): Promise<boolean>

  // Utilitaires
  searchFiles(env: string, pattern?: RegExp): Promise<string[]>
}

VaultCrypto

class VaultCrypto {
  // Génération de clés
  static generateKey(): string
  static hashToKey(password: string): string
  static validateKey(key: string): boolean
}

Types

interface VaultFile {
  content: string;
  filename: string;
  size: number;
  encrypted: boolean;
  algorithm?: string;
}

interface VaultHealth {
  status: string;
  service: string;
  encryption: string;
  algorithm: string;
}

interface VaultConfig {
  baseUrl: string;
  verifySsl?: boolean;
  timeout?: number;
}

đŸ§Ș Tests et exemples

Exemples fournis

  • basic-usage.ts : Utilisation simple du SDK
  • advanced-usage.ts : FonctionnalitĂ©s avancĂ©es et performance
  • error-handling.ts : Gestion d'erreurs complĂšte

Exécution des exemples

# Compilation
npm run build

# Exemple basique
node dist/examples/basic-usage.js

# Exemple avancé
node dist/examples/advanced-usage.js

# Gestion d'erreurs
node dist/examples/error-handling.js

Tests unitaires

npm test

🔧 DĂ©veloppement

Prérequis

  • Node.js >= 16.0.0
  • TypeScript >= 4.0.0

Installation des dépendances

npm install

Compilation

npm run build

Linting

npm run lint

Structure du projet

sdk-client/
├── src/
│   └── index.ts          # Code principal du SDK
├── examples/
│   ├── basic-usage.ts    # Exemple basique
│   ├── advanced-usage.ts # Exemple avancĂ©
│   └── error-handling.ts # Gestion d'erreurs
├── dist/                 # Code compilĂ©
├── package.json
├── tsconfig.json
└── README.md

🌐 CompatibilitĂ©

  • Node.js : >= 16.0.0
  • TypeScript : >= 4.0.0
  • Navigateurs : Support des APIs modernes (fetch, crypto)

📄 Licence

MIT License - Voir le fichier LICENSE pour plus de détails.

đŸ€ Contribution

  1. Fork le projet
  2. Créer une branche feature (git checkout -b feature/nouvelle-fonctionnalite)
  3. Commit les changements (git commit -am 'Ajouter nouvelle fonctionnalité')
  4. Push vers la branche (git push origin feature/nouvelle-fonctionnalite)
  5. Ouvrir une Pull Request

📞 Support


Version : 1.0.0 API Vault : vault.4nkweb.com:6666 Chiffrement : ChaCha20-Poly1305 (quantique résistant)