SDK JavaScript
SDK JavaScript Sharokey pour le partage sécurisé de secrets avec chiffrement Zero Knowledge. Package NPM avec support TypeScript et compatibilité Node.js/Navigateur.
Installation
# Installer via NPM
npm install Sharokey/sharokey-js
# Configurer et tester
import Sharokey from 'sharokey-js';
Sharokey.config({token: 'votre_token_api_ici'});
await Sharokey.test();
Commandes
Méthode | Équivalent CLI | Description | Exemple |
---|---|---|---|
config() | sharokey config | Configurer le token | Sharokey.config({token: 'TOKEN'}) |
create() | sharokey create | Créer un secret | Sharokey.create("motdepasse", 24, 1) |
list() | sharokey list | Lister les secrets | Sharokey.list({limit: 10, status: 'active'}) |
get() | sharokey get | Obtenir les détails d'un secret | Sharokey.get('ABC123') |
delete() | sharokey delete | Expirer un secret (efface le contenu) | Sharokey.delete('ABC123') |
stats() | sharokey stats | Afficher les statistiques | Sharokey.stats() |
test() | sharokey test | Tester la connectivité | Sharokey.test() |
Requêtes de Secrets
Méthode | Équivalent CLI | Description | Exemple |
---|---|---|---|
createRequest() | sharokey create-request | Créer une requête | Sharokey.createRequest({secretExpirationHours: 24, requestExpirationHours: 48, maximumViews: 1}) |
listRequests() | sharokey list-requests | Lister les requêtes | Sharokey.listRequests({status: 'active', limit: 10}) |
getRequest() | sharokey get-request | Obtenir les détails d'une requête | Sharokey.getRequest('abc123token456') |
deleteRequest() | sharokey delete-request | Expirer une requête (annule) | Sharokey.deleteRequest('abc123token456') |
requestStats() | sharokey request-stats | Statistiques des requêtes | Sharokey.requestStats() |
Paramètres
Créer un Secret
Paramètre | Description | Exemple |
---|---|---|
content | Contenu du secret (255 caractères max) | "Mot de passe base de données : admin123" |
hours | Heures d'expiration (1-8760) | 24 |
views | Vues maximum (1-100) | 1 |
options.description | Description du secret (255 caractères max) | {description: "Identifiants BD"} |
options.message | Message pour le visualiseur (255 caractères max) | {message: "Utiliser avec précaution"} |
options.password | Protection additionnelle (4-100 caractères) | {password: "secret123"} |
options.captcha | Activer la vérification CAPTCHA | {captcha: true} |
options.otpEmail | OTP par email (format valide) | {otpEmail: "[email protected]"} |
options.otpPhone | OTP par SMS (format international) | {otpPhone: "+33674747474"} |
options.ipWhitelist | IPs autorisées (255 caractères max) | {ipWhitelist: "203.0.113.5,198.51.100.10"} |
options.geolocation | Pays autorisés (255 caractères max) | {geolocation: "FR,US,DE"} |
options.attachments | Tableau de fichiers (10 fichiers, 10MB max) | {attachments: [file1, file2]} |
Priorité de Sécurité
Si plusieurs options de sécurité sont spécifiées, seul le niveau le plus élevé est appliqué :captcha
< password
< otpEmail
< otpPhone
(le plus élevé)
Exemple : {password: "secret", captcha: true, otpPhone: "+33123456789"}
→ Seul l'OTP téléphone sera utilisé
Configuration
Paramètre | Description | Exemple |
---|---|---|
token | Token API (requis) | {token: 'abcd1234...'} |
timeout | Timeout de requête en millisecondes | {timeout: 60000} |
debug | Activer la journalisation de débogage | {debug: true} |
Types d'Utilisation
Type d'Import | Utilisation | Exemple |
---|---|---|
Modules ES | JavaScript/TypeScript moderne | import Sharokey from 'sharokey-js'; |
CommonJS | Node.js require | const Sharokey = require('sharokey-js'); |
TypeScript | Avec support de type complet | import Sharokey, { type Secret } from 'sharokey-js'; |
Exemples
Utilisation de Base
// Module ES
import Sharokey from 'sharokey-js';
Sharokey.config({token: 'votre-token'});
// Secret simple
const secret = await Sharokey.create("Mot de passe base de données : admin123", 24, 1);
console.log('URL de partage :', secret.share_url);
// Avec options de sécurité
const protectedSecret = await Sharokey.create("Données sensibles", 12, 1, {
description: "Identifiants de production",
password: "securiteExtra123",
otpEmail: "[email protected]"
});
Serveur Node.js
// server.js
const Sharokey = require('sharokey-js');
const express = require('express');
Sharokey.config({token: process.env.SHAROKEY_TOKEN});
const app = express();
app.use(express.json());
app.post('/create-secret', async (req, res) => {
try {
const secret = await Sharokey.create(req.body.content, 24, 1, {
description: `Créé par ${req.user.email}`,
ipWhitelist: req.ip
});
res.json({shareUrl: secret.share_url});
} catch (error) {
res.status(500).json({error: error.message});
}
});
Utilisation TypeScript
import Sharokey, { type Secret, type SharokeyConfig } from 'sharokey-js';
const config: SharokeyConfig = {
token: process.env.SHAROKEY_TOKEN!,
timeout: 15000,
debug: true
};
Sharokey.config(config);
const secret: Secret = await Sharokey.create('Secret TypeScript', 24, 1, {
description: 'Création de secret entièrement typée'
});
Pièces Jointes de Fichiers
// Téléchargement de fichier navigateur
const fileInput = document.getElementById('fileInput');
const files = Array.from(fileInput.files);
const secret = await Sharokey.create('Fichiers projet', 48, 5, {
description: 'Documents projet partagés',
attachments: files
});
// Gestion de fichiers Node.js
const fs = require('fs').promises;
const fileData = await fs.readFile('document.pdf');
const fileObject = {
name: 'document.pdf',
arrayBuffer: () => Promise.resolve(fileData.buffer),
size: fileData.length
};
const secret = await Sharokey.create('Document', 24, 1, {
attachments: [fileObject]
});
Filtrage Avancé
// Lister les secrets actifs avec filtrage
const activeSecrets = await Sharokey.list({
status: 'active',
limit: 20,
creator: '[email protected]'
});
// Fonctionnalité de recherche
const searchResults = await Sharokey.search('identifiants base de données', {
limit: 10,
status: 'active'
});
// Obtenir seulement les secrets actifs
const onlyActive = await Sharokey.getActiveSecrets({limit: 50});
Requêtes de Secrets
// Créer une requête de secret
const request = await Sharokey.createRequest({
secretExpirationHours: 24,
requestExpirationHours: 72,
maximumViews: 1,
message: "Veuillez partager les identifiants API de manière sécurisée",
emailTo: "[email protected]",
locale: "fr"
});
console.log('URL de requête :', request.url);
console.log('Token de requête :', request.token);
// Gérer les requêtes
const requests = await Sharokey.listRequests({status: 'active'});
const requestDetails = await Sharokey.getRequest('token-ici');
await Sharokey.deleteRequest('token-ici');
Intégration React
import { useState, useEffect } from 'react';
import Sharokey, { type Secret } from 'sharokey-js';
export function useSecrets() {
const [secrets, setSecrets] = useState<Secret[]>([]);
const [loading, setLoading] = useState(false);
useEffect(() => {
Sharokey.config({token: process.env.REACT_APP_SHAROKEY_TOKEN!});
}, []);
const createSecret = async (content: string) => {
setLoading(true);
try {
const secret = await Sharokey.create(content, 24, 1);
setSecrets(prev => [secret, ...prev]);
return secret.share_url;
} finally {
setLoading(false);
}
};
return {secrets, loading, createSecret};
}
Test & Diagnostics
Le SDK fournit des outils de test complets pour vérifier la connectivité et diagnostiquer les problèmes :
// Diagnostics complets (6 vérifications)
const results = await Sharokey.test();
console.log(`Tests réussis : ${results.passed}/${results.total}`);
console.log('Détails :', results.details);
// Vérification booléenne simple
const isConnected = await Sharokey.testConnection();
console.log('Connecté :', isConnected);
// Obtenir les informations du SDK
const info = Sharokey.getInfo();
console.log('Version SDK :', info.version);
console.log('Fonctionnalités :', info.features);
Processus de Test :
- ✅ Configuration : Vérifie la présence du token API
- ✅ Réseau : Teste la connectivité serveur via l'endpoint de santé
- ✅ Authentification : Valide le token avec l'API
- ✅ Accès Lecture : Teste les permissions de listage des secrets
- ✅ Accès Écriture : Vérifie les capacités de création de secrets
- ✅ Statistiques : Teste l'accès à l'endpoint d'analyse
Contrairement au simple endpoint de santé, test()
fournit des diagnostics complets côté client incluant la validation du token, les permissions, et la disponibilité des fonctionnalités.
Méthodes Utilitaires
// Obtenir la configuration actuelle (sans token)
const config = Sharokey.getConfig();
console.log('URL API :', config.apiUrl);
console.log('A un token :', config.hasToken);
// Statistiques et analyses
const stats = await Sharokey.stats();
console.log('Total des secrets :', stats.data.total_secrets);
console.log('Secrets actifs :', stats.data.active_secrets);
// Fonctionnalités spécifiques à l'environnement
if (typeof window !== 'undefined') {
// Code spécifique au navigateur
console.log('Fonctionnement dans le navigateur');
} else {
// Code spécifique à Node.js
console.log('Fonctionnement dans Node.js');
}
Gestion d'Erreurs
try {
const secret = await Sharokey.create('test', 24, 1);
} catch (error) {
if (error.message.includes('Token not configured')) {
console.error('Configurez d\'abord votre token API');
} else if (error.message.includes('timeout')) {
console.error('Timeout de requête - vérifiez la connexion');
} else {
console.error('Erreur :', error.message);
}
}
// Erreurs de validation
try {
await Sharokey.create('', 24, 1); // Contenu vide
} catch (error) {
// Erreur : Le contenu est requis et doit être une chaîne non vide
}
try {
await Sharokey.create('test', 9000, 1); // Heures invalides
} catch (error) {
// Erreur : Les heures doivent être entre 1 et 8760
}
Ressources Connexes
- Documentation CLI - Référence de l'interface en ligne de commande
- CDN JavaScript - Version légère navigateur uniquement
- Comparaison de Fonctionnalités - Comparer toutes les librairies Sharokey
- Sécurité Zero Knowledge - Comprendre notre modèle de sécurité
Dépannage
Problèmes courants :
- "Token not configured" : Utiliser
Sharokey.config({token: 'TOKEN'})
d'abord - "Web Crypto API not supported" : Mettre à jour vers Node.js 16+ ou navigateur moderne
- Erreurs d'import : Vérifier l'utilisation ES Module vs CommonJS
- Échecs de pièces jointes : S'assurer que les fichiers ont les méthodes
name
,size
, etarrayBuffer()
Sharokey fournit le meilleur SDK JavaScript pour le partage sécurisé de secrets avec support TypeScript complet et chiffrement Zero Knowledge. 🔐