
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
libresend-p2p
Advanced tools
Messagerie décentralisée, chiffrée et anti-censure
LibreSend est un SDK de communication P2P complet, sans serveur central, sans email, sans numéro de téléphone. Votre identité = vos clés cryptographiques.
npm install libresend
import { LibreSend } from 'libresend';
// Initialiser le client
const client = new LibreSend();
await client.initialize();
// Créer une identité (génère les clés cryptographiques)
const identity = await client.createIdentity('Alice');
console.log('Mon ID:', identity.peerId);
// Se connecter au réseau P2P
await client.connect();
// Envoyer un message chiffré E2E
await client.send('peer-id-destinataire', 'Hello, monde décentralisé!');
// Recevoir des messages
client.onMessage((message) => {
console.log(`${message.from}: ${message.content}`);
});
LibreSendconst client = new LibreSend(options?: LibreSendOptions);
interface LibreSendOptions {
bootstrapNodes?: string[]; // Nœuds bootstrap personnalisés
enableRelay?: boolean; // Activer le relay pour NAT traversal (défaut: true)
}
| Méthode | Description |
|---|---|
initialize() | Initialise le client et la crypto |
createIdentity(name) | Crée une nouvelle identité avec clés |
loadIdentity(exported) | Charge une identité exportée |
connect() | Se connecte au réseau P2P |
disconnect() | Se déconnecte proprement |
send(peerId, content) | Envoie un message chiffré |
onMessage(callback) | Écoute les messages entrants |
// Créer ou rejoindre un salon
const room = await client.joinRoom('mon-salon');
// Envoyer un message au salon
await room.send('Hello tout le monde!');
// Écouter les messages du salon
room.onMessage((msg) => {
console.log(`[${msg.sender}]: ${msg.content}`);
});
// Synchronisation automatique via CRDT (Yjs)
// Les messages sont ordonnés et convergent automatiquement
// Exporter l'identité (pour backup)
const exported = await client.exportIdentity('mot-de-passe-fort');
// Importer sur un autre appareil
await client.loadIdentity(exported, 'mot-de-passe-fort');
// Obtenir le fingerprint pour vérification
const fingerprint = client.getFingerprint();
// "A1B2 C3D4 E5F6 ..."
┌─────────────────────────────────────────────────────────────┐
│ Votre Application │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────▼─────────────────────────────────┐
│ LibreSend SDK │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Identity │ │ Messaging │ │ Rooms │ │
│ │ Manager │ │ (E2E) │ │ (CRDT) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└───────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────▼─────────────────────────────────┐
│ Réseau P2P │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ WebRTC │ │ DHT │ │ GossipSub│ │ Relay │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└───────────────────────────────────────────────────────────────┘
| Composant | Algorithme |
|---|---|
| Identity Key | Ed25519 |
| Key Exchange | X25519 (Curve25519) |
| Chiffrement | ChaCha20-Poly1305 |
| Key Derivation | HKDF-SHA256 |
| Password Hash | Argon2id |
Alice Bob
│ │
│ 1. X3DH Key Agreement │
│ ──────────────────────────────────► │
│ │
│ 2. Symmetric Ratchet (chaque msg) │
│ ◄─────────────────────────────────► │
│ │
│ 3. DH Ratchet (périodique) │
│ ◄─────────────────────────────────► │
LibreSend inclut un bridge pour migrer progressivement depuis Socket.IO :
import { LibreSendBridge } from 'libresend/bridge';
const bridge = new LibreSendBridge({
mode: 'gateway', // 'gateway' | 'hybrid'
socketIOPort: 3001,
});
// Les clients Socket.IO existants fonctionnent sans modification
// Le bridge traduit automatiquement vers LibreSend
Voir le guide de migration complet.
LibreSend gère automatiquement le NAT traversal :
Le chiffrement E2E est préservé dans tous les cas.
Les messages pour les pairs hors-ligne sont stockés temporairement via Waku :
const client = new LibreSend({
// Nœuds bootstrap personnalisés
bootstrapNodes: [
'/dns4/bootstrap.example.com/tcp/4001/p2p/...',
],
// Désactiver le relay (connexions directes uniquement)
enableRelay: false,
});
Les contributions sont les bienvenues ! Voir le dépôt GitLab.
AGPL-3.0 - Libre pour toujours.
LibreSend - Communication libre, chiffrée, décentralisée.
FAQs
Decentralized, encrypted, censorship-resistant messaging SDK
We found that libresend-p2p demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.