
- API complètement dynamique: routes /<env>/<project>/<file_name> - Scanner automatique de tous les environnements disponibles - Sécurité renforcée contre path traversal attacks - Endpoint /routes dynamique avec 72 fichiers détectés - SDK mis à jour pour récupération dynamique des routes - Gestion d'erreurs complète et logs de sécurité - Architecture production-ready avec multi-environnements
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}`);
Synchronisation locale
// Récupération des routes disponibles
const routes = await client.getRoutes();
console.log(`Routes disponibles: ${routes.total_routes}`);
// Synchronisation des fichiers déchiffrés localement
const syncResult = await client.syncLocalFiles({
environment: 'dev',
localDir: '../confs',
force: false,
verbose: true
});
console.log(`Synchronisés: ${syncResult.synced}`);
console.log(`Ignorés: ${syncResult.skipped}`);
console.log(`Erreurs: ${syncResult.errors}`);
Mapping de synchronisation :
- Route vault :
/<env>/<project>/<file_name>
- Dossier local :
../confs/<project>/<file_name>
- Exemple :
/dev/bitcoin/bitcoin.conf
→../confs/bitcoin/bitcoin.conf
🛡️ 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'APIstatusCode
: Code d'erreur HTTPendpoint
: 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>
// Routes et synchronisation
getRoutes(): Promise<VaultRoutes>
syncLocalFiles(options: SyncOptions): Promise<SyncResult>
// 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 VaultRoutes {
routes: VaultRoute[];
total_routes: number;
authentication: {
type: string;
header: string;
description: string;
};
user_id: string;
timestamp: string;
}
interface SyncOptions {
environment: string;
localDir?: string;
force?: boolean;
verbose?: boolean;
}
interface SyncResult {
synced: number;
skipped: number;
errors: number;
details: Array<{
file: string;
status: 'synced' | 'skipped' | 'error';
message?: string;
}>;
}
interface VaultConfig {
baseUrl: string;
verifySsl?: boolean;
timeout?: number;
}
🧪 Tests et exemples
Exemples fournis
usage.ts
: Scénario complet avec 5 étapes- Initialisation + Gestion des erreurs
- Récupération des routes + Gestion des erreurs
- Parcours des routes + Gestion des erreurs
- Synchronisation locale + Gestion des erreurs
- Déchiffrement des contenus + Gestion des erreurs
Exécution des exemples
# Compilation
npm run build
# Scénario complet
node dist/examples/usage.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
- Fork le projet
- Créer une branche feature (
git checkout -b feature/nouvelle-fonctionnalite
) - Commit les changements (
git commit -am 'Ajouter nouvelle fonctionnalité'
) - Push vers la branche (
git push origin feature/nouvelle-fonctionnalite
) - Ouvrir une Pull Request
📞 Support
- Issues : Git Issues
- Documentation : Wiki du projet
- Email : support@4nkweb.com
Version : 1.0.0 API Vault : vault.4nkweb.com:6666 Chiffrement : ChaCha20-Poly1305 (quantique résistant)