Skip to content

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

bash
# 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 CLIDescriptionExemple
config()sharokey configConfigurer le tokenSharokey.config({token: 'TOKEN'})
create()sharokey createCréer un secretSharokey.create("motdepasse", 24, 1)
list()sharokey listLister les secretsSharokey.list({limit: 10, status: 'active'})
get()sharokey getObtenir les détails d'un secretSharokey.get('ABC123')
delete()sharokey deleteExpirer un secret (efface le contenu)Sharokey.delete('ABC123')
stats()sharokey statsAfficher les statistiquesSharokey.stats()
test()sharokey testTester la connectivitéSharokey.test()

Requêtes de Secrets

MéthodeÉquivalent CLIDescriptionExemple
createRequest()sharokey create-requestCréer une requêteSharokey.createRequest({secretExpirationHours: 24, requestExpirationHours: 48, maximumViews: 1})
listRequests()sharokey list-requestsLister les requêtesSharokey.listRequests({status: 'active', limit: 10})
getRequest()sharokey get-requestObtenir les détails d'une requêteSharokey.getRequest('abc123token456')
deleteRequest()sharokey delete-requestExpirer une requête (annule)Sharokey.deleteRequest('abc123token456')
requestStats()sharokey request-statsStatistiques des requêtesSharokey.requestStats()

Paramètres

Créer un Secret

ParamètreDescriptionExemple
contentContenu du secret (255 caractères max)"Mot de passe base de données : admin123"
hoursHeures d'expiration (1-8760)24
viewsVues maximum (1-100)1
options.descriptionDescription du secret (255 caractères max){description: "Identifiants BD"}
options.messageMessage pour le visualiseur (255 caractères max){message: "Utiliser avec précaution"}
options.passwordProtection additionnelle (4-100 caractères){password: "secret123"}
options.captchaActiver la vérification CAPTCHA{captcha: true}
options.otpEmailOTP par email (format valide){otpEmail: "[email protected]"}
options.otpPhoneOTP par SMS (format international){otpPhone: "+33674747474"}
options.ipWhitelistIPs autorisées (255 caractères max){ipWhitelist: "203.0.113.5,198.51.100.10"}
options.geolocationPays autorisés (255 caractères max){geolocation: "FR,US,DE"}
options.attachmentsTableau 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ètreDescriptionExemple
tokenToken API (requis){token: 'abcd1234...'}
timeoutTimeout de requête en millisecondes{timeout: 60000}
debugActiver la journalisation de débogage{debug: true}

Types d'Utilisation

Type d'ImportUtilisationExemple
Modules ESJavaScript/TypeScript moderneimport Sharokey from 'sharokey-js';
CommonJSNode.js requireconst Sharokey = require('sharokey-js');
TypeScriptAvec support de type completimport Sharokey, { type Secret } from 'sharokey-js';

Exemples

Utilisation de Base

javascript
// 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

javascript
// 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

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

javascript
// 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é

javascript
// 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

javascript
// 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

typescript
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 :

javascript
// 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 :

  1. Configuration : Vérifie la présence du token API
  2. Réseau : Teste la connectivité serveur via l'endpoint de santé
  3. Authentification : Valide le token avec l'API
  4. Accès Lecture : Teste les permissions de listage des secrets
  5. Accès Écriture : Vérifie les capacités de création de secrets
  6. 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

javascript
// 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

javascript
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

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, et arrayBuffer()

Sharokey fournit le meilleur SDK JavaScript pour le partage sécurisé de secrets avec support TypeScript complet et chiffrement Zero Knowledge. 🔐

Released under the MIT License.