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

@neelegirly/baileys

v2.2.33

Published

Eigenstaendiger Baileys-Fork von Neele Girl (NICHT WhiskeySockets/Baileys) — multi-device WhatsApp Web API fuer Node.js, mit Multi-Button-Support, QR-/Pairing-Stabilitaet und self-healing WA-Web-Version.

Readme

🌸 @neelegirly/baileys 🌸

Die WhatsApp-Web-API mit sauberem Neelegirly-Glow-up

QR Branding · Self-Healing WA-Web-Version · Wrapper-Aware Update Notify · LID · Smart Queue

npm wa-api libsignal WA-Web Node

Installation · Quickstart · Was ist dieser Fork? · Versionsschema · Message-ID · Release Notes


⚠️ Das hier ist NICHT WhiskeySockets/Baileys

@neelegirly/baileys ist ein eigenständiger Fork, gepflegt von Neele Girl. Eigene Versionszählung (2.2.x, nicht 6.7.x / 7.x), eigene Anpassungen: Multi-Buttons (interactiveMessage / carouselMessage / nativeFlow), QR-/Pairing-Stabilität, self-healing WA-Web-Version, eigene Message-ID-Signatur, Store-Layer und Mongo-/Single-File-Auth-States.

Bug-Reports gehören zu neelegirly/baileys/issues — nicht ins Upstream-Repo. Umgekehrt gilt: Upstream-Issues/PRs treffen auf diesen Fork oft nicht zu, weil er strukturell abweicht.

Basiert auf Baileys von Rajeh Taher/WhiskeySockets, MIT-lizenziert — deren Copyright-Vermerk bleibt in der LICENSE erhalten. Danke für die Grundlage. 🌸 Nicht offiziell mit WhatsApp, Meta oder dem Baileys-Upstream verbunden.


🌷 Was ist dieser Fork?

@neelegirly/baileys ist ein gepflegter Fork von Baileys (multi-device WhatsApp-Web-API für Node.js). Er bleibt nah am Upstream, ergänzt aber ein paar fokussierte Neelegirly-Eigenheiten:

  • 💖 Eigene Message-ID-Generierung (iOS-Style mit NEELE-Signatur) – siehe unten.
  • 🌐 Self-Healing WA-Web-Version – die Verbindung zieht sich die aktuelle WhatsApp-Web-Version automatisch, damit der QR-/Pairing-Login nicht durch veraltete Versionsangaben mit statusCode 405 abbricht.
  • 📷 QR Branding – Header/Footer + Versionskontext direkt im QR-Flow.
  • 🔔 Wrapper-Aware Update Notify – Statuszeilen für Baileys und den optionalen @neelegirly/wa-api-Wrapper.
  • 🎀 Sauberer @neelegirly/*-Scope mit gepinntem Begleit-Ökosystem.

Hinweis: Dieses Projekt ist nicht offiziell mit WhatsApp, Meta oder dem Baileys-Upstream verbunden.


🧱 Architektur

@neelegirly/libsignal        ← Signal-Protokoll-Krypto
        ↓
@neelegirly/baileys          ← dieser Fork · Socket, Events, Messaging
        ↓
@neelegirly/wa-api           ← Multi-Session-Wrapper (Lifecycle, QR, Update Notify)
        ↓
App (PM2 managed)
        ↓
@neelegirly/downloader       ← optionale Media-Utility

PM2-Regel: @neelegirly/wa-api verwaltet Sessions intern. PM2 startet nur die App, nicht einen Prozess pro Session.


🔢 Versionsschema

Wichtig zu verstehen — hier laufen zwei voneinander unabhängige Versionsnummern:

| Nummer | Beispiel | Bedeutung | | --- | --- | --- | | Fork-Version | 2.2.32 | Die npm-Version dieses Pakets. Eigenes semver-Schema von Neelegirly – nicht identisch mit der Upstream-Baileys-Versionsnummer. | | WhatsApp-Web-Baseline | 2.3000.1043857760 | Die Client-Version, die im Handshake an WhatsApp gemeldet wird. Wird zur Laufzeit aktuell gehalten (self-healing). |

Die Fork-Version 2.2.x ist also reines Paket-Versioning. Welche WhatsApp-Web-Version tatsächlich verbunden wird, zeigt der Boot-Banner und fetchLatestBaileysVersion().


💖 Message-ID-Anpassung (NEELE)

Dieser Fork erzeugt Message-IDs in einem iOS-Style-Format mit eingebetteter NEELE-Signatur (z. B. 3A…NEELE…, 20 Zeichen). Das ist eine bewusste, dauerhafte Anpassung – generateMessageID und generateMessageIDV2 werden niemals durch die Upstream-Variante überschrieben.

const { generateMessageID } = require('@neelegirly/baileys')
generateMessageID() // → z. B. "3AC18D8ANEELE3B14420"

Beim Abgleich mit dem Upstream bleibt diese Logik 1:1 erhalten.


🚀 Installation

npm install @neelegirly/[email protected] @neelegirly/[email protected] --save-exact
yarn add @neelegirly/[email protected] @neelegirly/[email protected] --exact

Für den kompletten Stack passt dazu @neelegirly/[email protected].

Update eines bestehenden Setups

npm install @neelegirly/baileys@latest @neelegirly/wa-api@latest --save-exact

Nach dem Update genügt ein App-Neustart. Der QR-/Pairing-Login zieht sich die aktuelle WhatsApp-Web-Version automatisch.


⚡ Quickstart

import makeWASocket, {
  useMultiFileAuthState,
  fetchLatestBaileysVersion,
  DisconnectReason,
  Browsers
} from '@neelegirly/baileys'

async function start() {
  const { state, saveCreds } = await useMultiFileAuthState('./auth')
  const { version } = await fetchLatestBaileysVersion() // self-healing WA-Web-Version

  const sock = makeWASocket({
    auth: state,
    version,
    browser: Browsers.ubuntu('Chrome'),
    printQRInTerminal: true
  })

  sock.ev.on('creds.update', saveCreds)

  sock.ev.on('connection.update', ({ connection, lastDisconnect }) => {
    if (connection === 'open') return console.log('Verbunden 💖')
    if (connection === 'close') {
      const statusCode = lastDisconnect?.error?.output?.statusCode
      if (statusCode !== DisconnectReason.loggedOut) start().catch(console.error)
    }
  })
}

start().catch(console.error)

fetchLatestBaileysVersion() ist die empfohlene Quelle für version: Sie liefert die aktuell gültige WhatsApp-Web-Version und fällt bei Netzwerkfehlern auf die gebündelte Baseline zurück.


🧩 Companion Stack

| Paket | Version | Rolle | |------|---------|-------| | @neelegirly/baileys | 2.2.32 | Socket, Events, Messaging | | @neelegirly/libsignal | 1.0.33 | Signal-Protokoll-Komponente | | @neelegirly/wa-api | 1.8.13 | Lifecycle-, Session- und Update-Wrapper |


🩷 QR Branding & Update Status

Beim QR-Scan werden Markenzeilen ober- und unterhalb des QR-Codes ausgegeben. Versionen werden dynamisch aus package.json gelesen, Update-Status robust verarbeitet und optionaler Wrapper-Kontext aus @neelegirly/wa-api dargestellt. Der Boot-Banner zeigt zusätzlich die aktive WhatsApp-Web-Baseline.


🌐 Namespace-Migration

- import makeWASocket from '@whiskeysockets/baileys'
+ import makeWASocket from '@neelegirly/baileys'

📝 Release Notes 2.2.33

patchMessageForMdIfRequired erhält jetzt die vom Aufrufer übergebene rohe interactiveMessage.carouselMessage-Struktur. Der bisherige automatische View-once-Patch für einzelne Karten wird nicht mehr auf rohe Karussells angewendet. Bereits ausdrücklich umhüllte Nachrichten bleiben erhalten; einzelne interaktive Karten, Listen und Templates behalten ihren bisherigen MD-Patch. Die Darstellung der verwendeten Knöpfe muss weiterhin auf den jeweiligen WhatsApp-Clients geprüft werden.

📝 Release Notes 2.2.32

prepareInteractiveMessageForMd(message) ergänzt für eine interaktive Karte genau einen Multi-Device-Umschlag mit deviceListMetadataVersion: 2. Ein vorhandener View-once-Umschlag bleibt erhalten. GIF/Video im Header, Text, Knöpfe und Zitat bleiben gemeinsam in einer Nachricht. Der Helper sendet nichts selbst und verändert weder Socket-Verbindungen noch Konten.

const { prepareInteractiveMessageForMd, generateWAMessageFromContent } = require('@neelegirly/baileys')
// card: vorhandenes { interactiveMessage: { header, body, footer, nativeFlowMessage } }
const msg = generateWAMessageFromContent(jid, prepareInteractiveMessageForMd(card), {
  userJid: sock.user.id
})
await sock.relayMessage(jid, msg.message, { messageId: msg.key.id })

Für eine GIF-Karte mit direkten Auswahlknöpfen quick_reply verwenden. single_select ist ein anderer Knopftyp; der Helper macht ihn nicht durch einen Umschlag automatisch auf jedem iOS-/Android-Client sichtbar. Die Darstellung muss auf den verwendeten WhatsApp-Clients geprüft werden. Es gibt keine automatische Umstellung vorhandener Nachrichten.

📝 Release Notes 2.2.31

  • 🔐 „Warte auf diese Nachricht“: Gerät beim Entschlüsseln erhalten. Sessions von Zweitgeräten (WhatsApp Web/Desktop) landeten im Datensatz des Handys, der Bot verschlüsselte ans Handy danach mit dem falschen Schlüssel.
  • 🔁 Retry repariert. Neuzustellung an die echte Geräteadresse (vorher eine erfundene <lid>@s.whatsapp.net), beide Adressen (LID + Nummer) frisch, Schlüssel direkt aus der Retry-Anfrage (portiert aus WhiskeySockets 7.0.0-rc14, MIT), Logzeile [ONIMAI retry].
  • 🗝️ Signal-Sessions: kein Ersatz durch fremde Geräte, max. 40 Sessions je Datensatz, keine ~200 Lesezugriffe je Nachricht mehr.
  • 🧩 Multi-Buttons / Native Flow / Carousel und Umfrage-Stimmen ohne patch-package.
  • 🧷 NEELE-Message-IDs, QR/Pairing, Store, Auth-Helfer unverändert. Details: CHANGELOG.md.
  • 🔗 Companion-Stack: 2.2.31 / 1.8.14 / 1.0.33.

📝 Release Notes 2.2.30

  • 🔧 fetchLatestWaWebVersion() repariert. Die Guard-Zeile las match?.match[1] statt match?.[1] und warf dadurch bei jedem Aufruf einen TypeError, der im catch verschwand. Die Funktion fiel deshalb immer still auf die eingebaute Baseline zurück und meldete isLatest: false — sie hat nie funktioniert. Jetzt liefert sie die echte Live-Version von web.whatsapp.com/sw.js.
  • 📌 WA-Web-Baseline aktualisiert auf 2.3000.1043857760 (vorher 2.3000.1035194821). Das ist nur der Offline-Notnagel: fetchLatestBaileysVersion() holt die Version weiterhin zur Laufzeit. Greift also, wenn beim Start kein Netz zur Versionsquelle besteht.
  • ⚖️ LICENSE korrigiert. Der MIT-Copyright-Vermerk des Upstreams (Rajeh Taher/WhiskeySockets) war entfernt worden — MIT verlangt ihn aber bei substanziellen Teilen. Er steht jetzt wieder drin, neben dem Fork-Copyright.
  • 🏷️ Klarere Abgrenzung. README-Kopf, description und contributors machen unmissverständlich, dass dies ein eigenständiger Fork von Neele Girl ist und nicht WhiskeySockets/Baileys.
  • 🧷 Message-ID- und QR-/Pairing-Logik unverändert. Kein Byte an generateMessageID / generateMessageIDV2 (NEELE-Signatur) oder am QR-/Pairing-Flow.
  • 🔗 Companion-Stack: 2.2.30 / 1.8.13 / 1.0.33.

Kein Upstream-Merge. Dieser Fork weicht strukturell von WhiskeySockets/Baileys ab (eigener Store-Layer, Socket/registration, WASignalGroup, eigene Message-IDs; Upstream 7.x setzt inzwischen auf whatsapp-rust-bridge und hat Store entfernt). Ein mechanischer Merge würde den Fork zerlegen. Der einzige Punkt, der Logins wirklich bricht — die WhatsApp-Web-Version — wird zur Laufzeit self-healing nachgezogen.