npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

whatsapp-universal

v1.0.4

Published

Un package WhatsApp universel qui fonctionne sur tous les systèmes sans dépendre du navigateur

Downloads

17

Readme

WhatsApp Universal 📱

Un package WhatsApp universel qui fonctionne sur tous les systèmes sans dépendre du navigateur. Conçu pour être léger, rapide et compatible avec Node.js sur Windows, Linux et macOS.

🚀 Caractéristiques

  • Multi-plateforme : Fonctionne sur Windows, Linux et macOS
  • 🚫 Sans navigateur : Aucune dépendance à Puppeteer ou navigateur
  • 🔄 Reconnexion automatique : Gestion intelligente des déconnexions
  • 📱 QR Code intégré : Authentification simple via QR code
  • 🎯 Événements avancés : Système d'événements complet avec middlewares
  • 📨 Gestion complète : Messages, contacts, groupes et médias
  • 🛡️ Sécurisé : Gestion sécurisée des sessions et données
  • 📊 Statistiques : Suivi des événements et performances

📦 Installation

npm install whatsapp-universal

🔧 Configuration requise

  • Node.js >= 14.0.0
  • Aucune dépendance système supplémentaire

🚀 Utilisation rapide

Exemple basique

import WhatsAppUniversal from 'whatsapp-universal';

// Créer une instance
const whatsapp = new WhatsAppUniversal();

// Configurer les événements
whatsapp.on('ready', () => {
  console.log('WhatsApp est prêt!');
});

whatsapp.on('qr', (qrData) => {
  console.log('Scannez ce QR code avec votre téléphone');
  // Le QR code s'affiche automatiquement dans le terminal
});

whatsapp.on('authenticated', (session) => {
  console.log('Authentifié avec succès!');
});

whatsapp.on('message', (message) => {
  console.log('Nouveau message:', message.body);
});

// Initialiser la connexion
whatsapp.initialize();

Envoi de messages

// Message texte
await whatsapp.sendMessage('[email protected]', 'Bonjour!');

// Message avec média
await whatsapp.sendMedia('[email protected]', './image.jpg', 'Voici une image');

// Vérifier si un numéro est enregistré
const isRegistered = await whatsapp.isRegisteredUser('1234567890');
if (isRegistered) {
  await whatsapp.sendMessage('[email protected]', 'Message envoyé!');
}

📚 Documentation complète

Initialisation avec options

const whatsapp = new WhatsAppUniversal({
  autoReconnect: true,        // Reconnexion automatique
  reconnectInterval: 5000,    // Intervalle de reconnexion (ms)
  maxReconnectAttempts: 10    // Nombre max de tentatives
});

Gestion des événements

Événements principaux

// Connexion et authentification
whatsapp.on('ready', () => {});
whatsapp.on('qr', (qrData) => {});
whatsapp.on('authenticated', (session) => {});
whatsapp.on('disconnected', () => {});

// Messages
whatsapp.on('message', (message) => {});
whatsapp.on('message_sent', (message) => {});

// Contacts et chats
whatsapp.on('contacts_loaded', (contacts) => {});
whatsapp.on('chats_loaded', (chats) => {});

// Erreurs
whatsapp.on('error', (error) => {});

Événements avancés avec options

// Listener avec priorité
whatsapp.addListener('message', (message) => {
  console.log('Message prioritaire:', message.body);
}, { priority: 100 });

// Listener conditionnel
whatsapp.onCondition('message', 
  (message) => !message.isFromMe, // Condition
  (message) => {
    console.log('Message reçu:', message.body);
  }
);

// Listener avec délai
whatsapp.onDelayed('message', 1000, (message) => {
  console.log('Message traité après 1 seconde');
});

Gestion des contacts

import { searchContacts, sortContactsByName } from 'whatsapp-universal/utils/contactUtils';

// Récupérer tous les contacts
const contacts = await whatsapp.getContacts();

// Rechercher des contacts
const results = searchContacts(contacts, 'John');

// Trier les contacts
const sorted = sortContactsByName(contacts, 'asc');

// Créer un contact
const newContact = createContactFromNumber('+1234567890', 'John Doe');

Gestion des messages

import { formatPhoneNumber, validateMessageContent } from 'whatsapp-universal/utils/messageUtils';

// Formater un numéro
const chatId = formatPhoneNumber('+1234567890'); // Retourne: [email protected]

// Valider un message
const validation = validateMessageContent('Mon message');
if (validation.isValid) {
  await whatsapp.sendMessage(chatId, 'Mon message');
}

// Détecter les mentions
const mentions = detectMentions('Salut @1234567890 comment ça va?');

Middlewares

// Middleware de logging
whatsapp.addMiddleware('message', (args) => {
  const [message] = args;
  console.log(`[LOG] ${message.from}: ${message.body}`);
  return args;
});

// Middleware de filtrage
whatsapp.addMiddleware('message', (args) => {
  const [message] = args;
  if (message.body.includes('spam')) {
    return null; // Annule le traitement
  }
  return args;
});

🤖 Exemples d'utilisation

Bot de réponse automatique

const commands = {
  '/help': 'Commandes: /time, /ping, /info',
  '/time': () => new Date().toLocaleString(),
  '/ping': 'Pong! 🏓',
  '/info': 'Bot WhatsApp Universal v1.0.0'
};

whatsapp.on('message', async (message) => {
  if (message.isFromMe) return;
  
  const command = message.body.toLowerCase().trim();
  
  if (commands[command]) {
    const response = typeof commands[command] === 'function' 
      ? commands[command]()
      : commands[command];
    
    await whatsapp.sendMessage(message.chatId, response);
  }
});

Gestionnaire de groupes

whatsapp.on('message', async (message) => {
  // Seulement dans les groupes
  if (!message.chatId.includes('@g.us')) return;
  
  // Commandes d'administration
  if (message.body === '/membres') {
    const chat = await whatsapp.getChatById(message.chatId);
    const count = chat.participants?.length || 0;
    await whatsapp.sendMessage(message.chatId, `Ce groupe a ${count} membres`);
  }
});

Sauvegarde automatique

import fs from 'fs';

whatsapp.on('message', (message) => {
  // Sauvegarde tous les messages
  const logEntry = {
    timestamp: new Date().toISOString(),
    from: message.from,
    chatId: message.chatId,
    body: message.body,
    type: message.type
  };
  
  fs.appendFileSync('messages.log', JSON.stringify(logEntry) + '\n');
});

🔍 Méthodes disponibles

Connexion

  • initialize() - Initialise la connexion
  • disconnect() - Déconnecte WhatsApp
  • reconnect() - Reconnecte manuellement
  • getConnectionStatus() - Obtient le statut de connexion

Messages

  • sendMessage(chatId, message) - Envoie un message texte
  • sendMedia(chatId, mediaPath, caption) - Envoie un média
  • isRegisteredUser(number) - Vérifie si un numéro est enregistré

Contacts et Chats

  • getContacts() - Récupère tous les contacts
  • getChats() - Récupère tous les chats
  • getChatById(chatId) - Récupère un chat spécifique

Événements avancés

  • addListener(event, callback, options) - Ajoute un listener avec options
  • addMiddleware(event, middleware) - Ajoute un middleware
  • waitForEvent(event, timeout) - Attend un événement
  • emitAsync(event, ...args) - Émet un événement de manière asynchrone

🛠️ Utilitaires

Messages (utils/messageUtils.js)

  • formatPhoneNumber(number) - Formate un numéro pour WhatsApp
  • validateMessageContent(content) - Valide le contenu d'un message
  • detectMentions(content) - Détecte les mentions dans un message
  • createReplyMessage(original, reply) - Crée un message de réponse

Contacts (utils/contactUtils.js)

  • createContact(data) - Crée un objet contact
  • validatePhoneNumber(number) - Valide un numéro de téléphone
  • searchContacts(contacts, query) - Recherche dans les contacts
  • sortContactsByName(contacts, order) - Trie les contacts par nom

📊 Statistiques et débogage

// Obtenir les statistiques d'événements
const stats = whatsapp.getEventStats();
console.log('Statistiques:', stats);

// Obtenir l'historique des événements
const history = whatsapp.getEventHistory('message', 50);
console.log('Derniers 50 messages:', history);

// Informations de débogage
const debug = whatsapp.getDebugInfo();
console.log('Debug:', debug);

🚨 Gestion d'erreurs

whatsapp.on('error', (error) => {
  console.error('Erreur WhatsApp:', error.message);
  
  // Gestion spécifique selon le type d'erreur
  switch (error.code) {
    case 'CONNECTION_LOST':
      console.log('Tentative de reconnexion...');
      whatsapp.reconnect();
      break;
    case 'AUTH_FAILURE':
      console.log('Échec d\'authentification, nouveau QR requis');
      break;
    default:
      console.log('Erreur inconnue:', error);
  }
});

🔒 Sécurité

  • Les sessions sont gérées de manière sécurisée
  • Aucune donnée sensible n'est stockée en plain text
  • Validation automatique des entrées utilisateur
  • Protection contre les attaques par déni de service

🤝 Contribution

Les contributions sont les bienvenues! Veuillez:

  1. Fork le projet
  2. Créer une branche pour votre fonctionnalité
  3. Commiter vos changements
  4. Pousser vers la branche
  5. Ouvrir une Pull Request

📄 Licence

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

🆘 Support

Pour obtenir de l'aide:

  • 📖 Consultez cette documentation
  • 🐛 Ouvrez une issue sur GitHub
  • 💬 Rejoignez notre communauté

🔄 Changelog

v1.0.0

  • ✨ Version initiale
  • 🚀 Support multi-plateforme
  • 📱 Authentification QR Code
  • 📨 Envoi/réception de messages
  • 👥 Gestion des contacts
  • 🎯 Système d'événements avancé

WhatsApp Universal - Un package moderne pour intégrer WhatsApp dans vos applications Node.js 🚀