{"_id":"emnex-baileys","_rev":"4-26a6d96372a776b1621caa073ef65765","name":"emnex-baileys","dist-tags":{"latest":"2.5.11"},"versions":{"2.5.8":{"name":"emnex-baileys","version":"2.5.8","keywords":["whatsapp","whatsapp-api","whatsapp-web","baileys","whatsapp-bot","messaging","chat"],"author":{"name":"Emnex Tech"},"license":"MIT","_id":"emnex-baileys@2.5.8","maintainers":[{"name":"ngwenyamae","email":"ngwenyamae3118@gmail.com"}],"homepage":"https://github.com/emnextech/emnex-baileys#readme","bugs":{"url":"https://github.com/emnextech/emnex-baileys/issues"},"dist":{"shasum":"1096bc3f47ba1bab6d29d2b895298b4774635494","tarball":"https://registry.npmjs.org/emnex-baileys/-/emnex-baileys-2.5.8.tgz","fileCount":98,"integrity":"sha512-/LXskTh6x/Q0KYDLJRIKnBAR6tasM++/jFpf/lftnWFCPgI0qbGOIJv0vmxpFtI+tMCs1CqoBtthjEgLqCxyvA==","signatures":[{"sig":"MEQCIGC4nRyoZam+x57A/DHggmB1wIqhiF967SDNclw6gU2pAiBfTaEmEmuU+sni+l2Udkx138ry6OO86RmZi0MWT2wzPw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9692671},"main":"lib/index.js","types":"lib/index.d.ts","gitHead":"ab1ad11c2dcdb6ade428cc86064b8bc189c1be92","_npmUser":{"name":"ngwenyamae","email":"ngwenyamae3118@gmail.com"},"repository":{"url":"git+https://github.com/emnextech/emnex-baileys.git","type":"git"},"_npmVersion":"11.11.0","description":"A lightweight, full-featured WhatsApp Web API library for Node.js","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ws":"^8.13.0","pino":"^9.6","axios":"^1.6.0","lodash":"^4.17.21","libsignal":"github:WhiskeySockets/libsignal-node","@hapi/boom":"^9.1.3","node-fetch":"^2.6.1","protobufjs":"^7.2.4","async-mutex":"^0.5.0","music-metadata":"^7.12.3","@cacheable/node-cache":"^1.4.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/emnex-baileys_2.5.8_1780077723963_0.4213660900139695","host":"s3://npm-registry-packages-npm-production"}},"2.5.9":{"name":"emnex-baileys","version":"2.5.9","keywords":["whatsapp","whatsapp-api","whatsapp-web","baileys","whatsapp-bot","messaging","chat"],"author":{"name":"Emnex Tech"},"license":"MIT","_id":"emnex-baileys@2.5.9","maintainers":[{"name":"ngwenyamae","email":"ngwenyamae3118@gmail.com"}],"homepage":"https://github.com/emnextech/emnex-baileys#readme","bugs":{"url":"https://github.com/emnextech/emnex-baileys/issues"},"dist":{"shasum":"5006e3737a9815fc7210cf5344b80f410bce1a97","tarball":"https://registry.npmjs.org/emnex-baileys/-/emnex-baileys-2.5.9.tgz","fileCount":97,"integrity":"sha512-HntGzZwj/o9mCWyxDqtRfA0uNmABtwS00/ZxsXiWiYt4gQkIFekOUAvJmwmeIzEFEIe5hEDr6V51M7le7B1jIQ==","signatures":[{"sig":"MEYCIQCt5ozRHG7tijx0GCIowbV/BUUiW/hXq7mfNsCAaU6V3AIhALGV03Nox8r/gl/SN0VdDNADamsC0Z2C3cSEVZkRy/au","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9692552},"main":"lib/index.js","types":"lib/index.d.ts","gitHead":"ab1ad11c2dcdb6ade428cc86064b8bc189c1be92","_npmUser":{"name":"ngwenyamae","email":"ngwenyamae3118@gmail.com"},"repository":{"url":"git+https://github.com/emnextech/emnex-baileys.git","type":"git"},"_npmVersion":"11.11.0","description":"A lightweight, full-featured WhatsApp Web API library for Node.js","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ws":"^8.13.0","pino":"^9.6","axios":"^1.6.0","lodash":"^4.17.21","libsignal":"github:WhiskeySockets/libsignal-node","@hapi/boom":"^9.1.3","node-fetch":"^2.6.1","protobufjs":"^7.2.4","async-mutex":"^0.5.0","music-metadata":"^7.12.3","@cacheable/node-cache":"^1.4.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/emnex-baileys_2.5.9_1780079120375_0.761512135728307","host":"s3://npm-registry-packages-npm-production"}},"2.5.10":{"name":"emnex-baileys","version":"2.5.10","keywords":["whatsapp","whatsapp-api","whatsapp-web","whatsapp-bot","whatsapp-automation","whatsapp-multi-device","multi-device","baileys","baileys-fork","gifted-baileys","emnex-baileys","wa","wa-bot","messaging","chat","qr-code","pairing-code","websocket","newsletter","whatsapp-channels","nodejs"],"author":{"name":"Emnex Tech"},"license":"MIT","_id":"emnex-baileys@2.5.10","maintainers":[{"name":"ngwenyamae","email":"ngwenyamae3118@gmail.com"}],"homepage":"https://github.com/emnextech/emnex-baileys#readme","bugs":{"url":"https://github.com/emnextech/emnex-baileys/issues"},"dist":{"shasum":"fda374b84aca734517a92b7d4a0b6f9e32a27b70","tarball":"https://registry.npmjs.org/emnex-baileys/-/emnex-baileys-2.5.10.tgz","fileCount":98,"integrity":"sha512-XV8L/BLc+KRHhNDEoe2FGQKx06apBCOGd4dhgcH43hMrM+v8/ll0zgdozdUaVikqOF2ODyBPSHz+zYR641nwog==","signatures":[{"sig":"MEUCIQDDNFb+C5QwfHxAgtmzu2egJJBdFfe4Ghics3d2DMM5hwIgEl5sE9s7BW7F8VxZs0IWRZw1v7wiLdWdwc6wnT3TVa0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9697704},"main":"lib/index.js","types":"lib/index.d.ts","gitHead":"cdd308180849696d04fbae6bb14f0da0549509b2","_npmUser":{"name":"ngwenyamae","email":"ngwenyamae3118@gmail.com"},"repository":{"url":"git+https://github.com/emnextech/emnex-baileys.git","type":"git"},"_npmVersion":"11.11.0","description":"A lightweight, full-featured WhatsApp Web API library for Node.js","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ws":"^8.13.0","pino":"^9.6","axios":"^1.6.0","lodash":"^4.17.21","libsignal":"github:WhiskeySockets/libsignal-node","@hapi/boom":"^9.1.3","node-fetch":"^2.6.1","protobufjs":"^7.2.4","async-mutex":"^0.5.0","music-metadata":"^7.12.3","@cacheable/node-cache":"^1.4.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/emnex-baileys_2.5.10_1780079892122_0.7655781651465139","host":"s3://npm-registry-packages-npm-production"}},"2.5.11":{"name":"emnex-baileys","version":"2.5.11","description":"A lightweight, full-featured WhatsApp Web API library for Node.js","main":"lib/index.js","types":"lib/index.d.ts","homepage":"https://github.com/emnextech/emnex-baileys#readme","repository":{"type":"git","url":"git+https://github.com/emnextech/emnex-baileys.git"},"bugs":{"url":"https://github.com/emnextech/emnex-baileys/issues"},"author":{"name":"Emnex Tech"},"license":"MIT","keywords":["whatsapp","whatsapp-api","whatsapp-web","whatsapp-bot","whatsapp-automation","whatsapp-multi-device","multi-device","baileys","baileys-fork","gifted-baileys","emnex-baileys","wa","wa-bot","messaging","chat","qr-code","pairing-code","websocket","newsletter","whatsapp-channels","nodejs"],"dependencies":{"@cacheable/node-cache":"^1.4.0","@hapi/boom":"^9.1.3","async-mutex":"^0.5.0","axios":"^1.6.0","libsignal":"github:WhiskeySockets/libsignal-node","lodash":"^4.17.21","music-metadata":"^7.12.3","node-fetch":"^2.6.1","pino":"^9.6","protobufjs":"^7.2.4","ws":"^8.13.0"},"gitHead":"4e2dc504511cd14f1580606d47515c15447bd0bc","_id":"emnex-baileys@2.5.11","_nodeVersion":"24.14.0","_npmVersion":"11.11.0","dist":{"integrity":"sha512-o+p8qIF8AHNjnl/Jn1fvn148DL3knsGa5FurB8T15QsUZ+C0Dz3daccz6jjwXUOb6ydrZmz7J0vUajpW+43Ukw==","shasum":"87c01a640056aca9bcd688cf12fcdff6aec4aa2f","tarball":"https://registry.npmjs.org/emnex-baileys/-/emnex-baileys-2.5.11.tgz","fileCount":98,"unpackedSize":9697704,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDnPuyj8mLqyr5NYqCDN5WJIoPkc9DWS/b5r9UNvI2NfwIhAL8OPKtYPhuqDCKlhalcS73Cr4zsK9m7TumrJB23CptT"}]},"_npmUser":{"name":"ngwenyamae","email":"ngwenyamae3118@gmail.com"},"directories":{},"maintainers":[{"name":"ngwenyamae","email":"ngwenyamae3118@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/emnex-baileys_2.5.11_1781601055547_0.1271172775475793"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-29T18:02:03.894Z","modified":"2026-06-16T09:10:55.842Z","2.5.8":"2026-05-29T18:02:04.197Z","2.5.9":"2026-05-29T18:25:20.565Z","2.5.10":"2026-05-29T18:38:12.291Z","2.5.11":"2026-06-16T09:10:55.726Z"},"bugs":{"url":"https://github.com/emnextech/emnex-baileys/issues"},"author":{"name":"Emnex Tech"},"license":"MIT","homepage":"https://github.com/emnextech/emnex-baileys#readme","keywords":["whatsapp","whatsapp-api","whatsapp-web","whatsapp-bot","whatsapp-automation","whatsapp-multi-device","multi-device","baileys","baileys-fork","gifted-baileys","emnex-baileys","wa","wa-bot","messaging","chat","qr-code","pairing-code","websocket","newsletter","whatsapp-channels","nodejs"],"repository":{"type":"git","url":"git+https://github.com/emnextech/emnex-baileys.git"},"description":"A lightweight, full-featured WhatsApp Web API library for Node.js","maintainers":[{"name":"ngwenyamae","email":"ngwenyamae3118@gmail.com"}],"readme":"<div align=\"center\">\n  <h1>Emnex-Baileys</h1>\n  <p><b>A lightweight, full-featured WhatsApp Web API library for Node.js</b> — build WhatsApp bots and automations over a WebSocket connection, with multi-device support and no Selenium or browser required.</p>\n\n  [![npm version](https://img.shields.io/npm/v/emnex-baileys.svg)](https://www.npmjs.com/package/emnex-baileys)\n  [![npm downloads](https://img.shields.io/npm/dm/emnex-baileys.svg)](https://www.npmjs.com/package/emnex-baileys)\n  [![License](https://img.shields.io/npm/l/emnex-baileys.svg)](https://github.com/emnextech/emnex-baileys/blob/main/LICENSE)\n</div>\n\n## Features\n\n- 📱 **Multi-device** — connects directly to the WhatsApp Web multi-device API; no browser, Selenium, or phone-tethering required.\n- 🔌 **WebSocket-based** — fast and lightweight, with a small dependency footprint.\n- 🔑 **Two auth flows** — link a device with a **QR code** or an 8-character **pairing code**.\n- 💬 **Rich messaging** — text, images, video, audio/voice notes, documents, locations, contacts, and reactions.\n- 👥 **Groups** — create, manage participants, invite links, and metadata.\n- 📢 **Channels & Status** — follow/manage newsletters (channels) and post to status/stories.\n- 🟦 **TypeScript** — ships with full type definitions.\n\n## Disclaimer\n\nThis project is not affiliated, associated, authorized, endorsed by, or in any way officially connected with WhatsApp or any of its subsidiaries or affiliates. Use at your own discretion. Do not spam people with this. We discourage any stalkerware, bulk or automated messaging usage.\n\n## Credits & Acknowledgements\n\n`emnex-baileys` (maintained by **Emnex Tech**) stands on the shoulders of others:\n\n- **[Baileys](https://github.com/WhiskeySockets/Baileys)** by **WhiskeySockets** — the original, brilliant WhatsApp Web API implementation that makes all of this possible.\n- **gifted-baileys** by **Gifted Tech** — the fork this project is based on. Big thanks to Gifted Tech for their work.\n\nThis library is MIT-licensed and retains the copyright notices of the projects above. Please support and credit the upstream authors.\n\n## Table of Contents\n\n- [Features](#features)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Getting Started: a complete bot](#getting-started-a-complete-bot)\n- [Authentication](#authentication)\n  - [QR Code](#qr-code)\n  - [Pairing Code](#pairing-code)\n- [Connection & Reconnection](#connection--reconnection)\n- [Events](#events)\n- [Sending Messages](#sending-messages)\n- [Receiving & Downloading Media](#receiving--downloading-media)\n- [Group Management](#group-management)\n- [Channels / Newsletters](#channels--newsletters)\n- [Status / Stories](#status--stories)\n- [Profile & Privacy](#profile--privacy)\n- [Changelog](#changelog)\n- [License](#license)\n\n## Installation\n\n```bash\nnpm install emnex-baileys\n```\n\nOr using yarn:\n\n```bash\nyarn add emnex-baileys\n```\n\n> **Requirements:** Node.js 20 or newer.\n\n## Quick Start\n\n### CommonJS (Recommended)\n\n```javascript\nconst { default: makeWASocket, useMultiFileAuthState, Browsers, DisconnectReason } = require('emnex-baileys')\n\nasync function start() {\n  const { state, saveCreds } = await useMultiFileAuthState('auth')\n\n  const sock = makeWASocket({\n    auth: state,\n    browser: Browsers.ubuntu('Chrome'),\n  })\n\n  // persist updated credentials\n  sock.ev.on('creds.update', saveCreds)\n\n  sock.ev.on('connection.update', (update) => {\n    const { connection } = update\n    if (connection === 'open') console.log('✅ connected')\n  })\n\n  sock.ev.on('messages.upsert', async ({ messages }) => {\n    const msg = messages[0]\n    if (!msg.message || msg.key.fromMe) return\n    if (msg.message.conversation === 'hi') {\n      await sock.sendMessage(msg.key.remoteJid, { text: 'Hello 👋' })\n    }\n  })\n}\n\nstart()\n```\n\n### ES Modules / TypeScript\n\n```javascript\nimport pkg from 'emnex-baileys'\nconst { default: makeWASocket, useMultiFileAuthState, Browsers } = pkg\n```\n\n## Getting Started: a complete bot\n\nHere's a complete, copy-paste **echo bot** you can run right now. It renders a QR code in\nyour terminal, reconnects automatically, and replies to any incoming text message.\n\n```bash\nnpm install emnex-baileys qrcode-terminal\n```\n\n```javascript\n// bot.js\nconst {\n  default: makeWASocket,\n  useMultiFileAuthState,\n  Browsers,\n  DisconnectReason,\n} = require('emnex-baileys')\nconst qrcode = require('qrcode-terminal')\n\nasync function startBot() {\n  const { state, saveCreds } = await useMultiFileAuthState('auth')\n\n  const sock = makeWASocket({\n    auth: state,\n    browser: Browsers.ubuntu('Chrome'),\n  })\n\n  // 1. persist credentials whenever they change\n  sock.ev.on('creds.update', saveCreds)\n\n  // 2. handle connection lifecycle + QR rendering\n  sock.ev.on('connection.update', (update) => {\n    const { connection, lastDisconnect, qr } = update\n\n    if (qr) qrcode.generate(qr, { small: true }) // scan this with WhatsApp\n\n    if (connection === 'open') {\n      console.log('✅ Bot connected and ready!')\n    } else if (connection === 'close') {\n      const shouldReconnect =\n        lastDisconnect?.error?.output?.statusCode !== DisconnectReason.loggedOut\n      console.log('Connection closed.', shouldReconnect ? 'Reconnecting…' : 'Logged out.')\n      if (shouldReconnect) startBot()\n    }\n  })\n\n  // 3. reply to incoming messages\n  sock.ev.on('messages.upsert', async ({ messages }) => {\n    const msg = messages[0]\n    if (!msg.message || msg.key.fromMe) return\n\n    const text =\n      msg.message.conversation || msg.message.extendedTextMessage?.text || ''\n    if (!text) return\n\n    await sock.sendMessage(msg.key.remoteJid, { text: `You said: ${text}` }, { quoted: msg })\n  })\n}\n\nstartBot()\n```\n\nRun it:\n\n```bash\nnode bot.js\n```\n\nScan the QR code (WhatsApp → **Settings → Linked Devices → Link a Device**). Once you see\n`✅ Bot connected and ready!`, message the linked account from another phone and it will\necho your text back. The `auth/` folder keeps you logged in, so you only scan once.\n\n## Authentication\n\n`useMultiFileAuthState('auth')` stores the session in a folder (here `./auth`) so you only\nauthenticate once. There are two ways to link a device.\n\n### QR Code\n\nThe `printQRInTerminal` option is **deprecated and no longer prints automatically**. Listen\nto the `connection.update` event and render the `qr` string yourself, e.g. with\n[`qrcode-terminal`](https://www.npmjs.com/package/qrcode-terminal):\n\n```javascript\nconst qrcode = require('qrcode-terminal')\n\nsock.ev.on('connection.update', (update) => {\n  const { qr } = update\n  if (qr) qrcode.generate(qr, { small: true })\n})\n```\n\nThen open WhatsApp → **Settings → Linked Devices → Link a Device** and scan it.\n\n### Pairing Code\n\nInstead of a QR, request an 8-character pairing code for a phone number (international\nformat, digits only):\n\n```javascript\nif (!sock.authState.creds.registered) {\n  const code = await sock.requestPairingCode('254700000000')\n  console.log('Pairing code:', code) // enter this in WhatsApp → Link a Device → Link with phone number\n}\n\n// optional: supply your own 8-char custom code\n// const code = await sock.requestPairingCode('254700000000', 'EMNEX123')\n```\n\n## Connection & Reconnection\n\nHandle drops and re-link based on the disconnect reason:\n\n```javascript\nconst { DisconnectReason } = require('emnex-baileys')\n\nsock.ev.on('connection.update', (update) => {\n  const { connection, lastDisconnect } = update\n  if (connection === 'close') {\n    const code = lastDisconnect?.error?.output?.statusCode\n    if (code !== DisconnectReason.loggedOut) {\n      start() // reconnect\n    } else {\n      console.log('Logged out — delete the ./auth folder and re-authenticate.')\n    }\n  }\n})\n```\n\n## Events\n\nSubscribe with `sock.ev.on(eventName, handler)`. Commonly used events:\n\n| Event | Fires when |\n|-------|------------|\n| `connection.update` | Connection state changes (incl. `qr`, `connection`, `lastDisconnect`) |\n| `creds.update` | Auth credentials change — pair with `saveCreds` |\n| `messages.upsert` | New or appended messages arrive |\n| `messages.update` | Existing messages are edited / status changes |\n| `message-receipt.update` | Read / delivery receipts |\n| `groups.update` | Group metadata changes |\n| `group-participants.update` | Members added / removed / promoted |\n| `contacts.update` | Contact info changes |\n| `presence.update` | Online / typing presence |\n\n## Sending Messages\n\nAll sends go through `sock.sendMessage(jid, content, options?)`. The `jid` is\n`number@s.whatsapp.net` for users, `id@g.us` for groups, or `id@newsletter` for channels.\n\n```javascript\nconst jid = '254700000000@s.whatsapp.net'\n\n// Text\nawait sock.sendMessage(jid, { text: 'Hello from emnex-baileys' })\n\n// Reply to a message\nawait sock.sendMessage(jid, { text: 'replying' }, { quoted: someMsg })\n\n// Image (Buffer or { url })\nawait sock.sendMessage(jid, { image: { url: './photo.jpg' }, caption: 'nice 📸' })\n\n// Video\nawait sock.sendMessage(jid, { video: { url: './clip.mp4' }, caption: 'watch' })\n\n// Audio / voice note\nawait sock.sendMessage(jid, { audio: { url: './voice.mp3' }, mimetype: 'audio/mp4', ptt: true })\n\n// Document\nawait sock.sendMessage(jid, { document: { url: './file.pdf' }, mimetype: 'application/pdf', fileName: 'file.pdf' })\n\n// Location\nawait sock.sendMessage(jid, { location: { degreesLatitude: -1.286389, degreesLongitude: 36.817223 } })\n\n// Contact (vCard)\nawait sock.sendMessage(jid, {\n  contacts: {\n    displayName: 'Emnex',\n    contacts: [{ vcard: 'BEGIN:VCARD\\nVERSION:3.0\\nFN:Emnex\\nTEL;type=CELL:254700000000\\nEND:VCARD' }],\n  },\n})\n\n// Reaction (emoji on a message key)\nawait sock.sendMessage(jid, { react: { text: '🔥', key: someMsg.key } })\n```\n\n> **Note:** For interactive buttons, use the separate [`gifted-btns`](https://npmjs.com/package/gifted-btns) package.\n\n## Receiving & Downloading Media\n\n```javascript\nconst { downloadMediaMessage } = require('emnex-baileys')\n\nsock.ev.on('messages.upsert', async ({ messages }) => {\n  const msg = messages[0]\n  const type = Object.keys(msg.message || {})[0]\n  if (['imageMessage', 'videoMessage', 'audioMessage', 'documentMessage'].includes(type)) {\n    const buffer = await downloadMediaMessage(msg, 'buffer', {})\n    // write `buffer` to disk, re-upload, etc.\n  }\n})\n```\n\n## Group Management\n\n```javascript\n// Create a group\nconst group = await sock.groupCreate('My Group', ['254700000000@s.whatsapp.net'])\n\n// Add / remove / promote / demote participants\nawait sock.groupParticipantsUpdate(group.id, ['254711111111@s.whatsapp.net'], 'add')    // 'remove' | 'promote' | 'demote'\n\n// Update subject\nawait sock.groupUpdateSubject(group.id, 'New Name')\n\n// Read metadata\nconst meta = await sock.groupMetadata(group.id)\n\n// Invite links\nconst code = await sock.groupInviteCode(group.id)   // -> https://chat.whatsapp.com/<code>\nawait sock.groupAcceptInvite('<code>')\n\n// Leave\nawait sock.groupLeave(group.id)\n```\n\n## Channels / Newsletters\n\nChannels use `xxxxxxxxxxxx@newsletter` JIDs.\n\n```javascript\n// Resolve a channel invite link to its metadata (incl. the @newsletter id)\nconst meta = await sock.newsletterMetadata('invite', '0029Vb...')   // the code after /channel/\nconsole.log(meta.id, meta.name)\n\n// By JID\nconst byJid = await sock.newsletterMetadata('jid', '120363xxxxxxxxx@newsletter')\n\n// Manage\nawait sock.newsletterCreate('My Channel', 'Description here')\nawait sock.newsletterFollow('120363xxxxxxxxx@newsletter')\nawait sock.newsletterUnfollow('120363xxxxxxxxx@newsletter')\nawait sock.newsletterMute('120363xxxxxxxxx@newsletter')\nawait sock.newsletterFetchMessages('120363xxxxxxxxx@newsletter', 50)\n```\n\n### How to find your channel ID\n\nEvery message that arrives from a channel has a `remoteJid` ending in `@newsletter`.\nLog it from `messages.upsert`:\n\n```javascript\nsock.ev.on('messages.upsert', ({ messages }) => {\n  for (const m of messages) {\n    const jid = m.key?.remoteJid\n    if (jid?.endsWith('@newsletter')) console.log('channel:', jid)\n  }\n})\n```\n\nAlternatively, resolve a channel's invite link with `newsletterMetadata('invite', code)` (above).\n\n## Status / Stories\n\nSend to your status broadcast by targeting `status@broadcast` and listing the recipients\nwho should see it via `statusJidList`:\n\n```javascript\nawait sock.sendMessage(\n  'status@broadcast',\n  { image: { url: './story.jpg' }, caption: 'my status' },\n  { statusJidList: ['254700000000@s.whatsapp.net'] },\n)\n```\n\n## Profile & Privacy\n\n```javascript\nawait sock.updateProfileName('Emnex Bot')\nawait sock.updateProfileStatus('Powered by emnex-baileys')\nawait sock.updateProfilePicture('me@s.whatsapp.net', { url: './avatar.jpg' })\nawait sock.sendPresenceUpdate('available') // 'available' | 'unavailable' | 'composing' | 'recording'\n```\n\n## Changelog\n\nSee [CHANGELOG.md](./CHANGELOG.md) for release notes and the version history.\n\n## License\n\nReleased under the [MIT License](./LICENSE). Copyright © Emnex Tech, with retained notices\nfor Gifted Tech and Baileys (WhiskeySockets). See [Credits & Acknowledgements](#credits--acknowledgements).\n","readmeFilename":"README.md"}