{"_id":"@aventa/boredom","_rev":"2-c96e678186e952c037ca11aa16833c66","name":"@aventa/boredom","dist-tags":{"latest":"0.0.2"},"versions":{"0.0.1":{"name":"@aventa/boredom","version":"0.0.1","keywords":["baileys","yupra","wabot","whatsapp","js-whatsapp","whatsapp-api","whatsapp-web","whatsapp-bot","automation","multi-device","yupra"],"author":{"name":"yupra"},"license":"MIT","_id":"@aventa/boredom@0.0.1","maintainers":[{"name":"hiraoffc","email":"renz4you28@gmail.com"}],"homepage":"https://www.npmjs.com/package/@yupra/baileys","dist":{"shasum":"bfeb22da88e90b2d3f0d32ed76e28b3999b9c393","tarball":"https://registry.npmjs.org/@aventa/boredom/-/boredom-0.0.1.tgz","fileCount":192,"integrity":"sha512-7TgWdvxoa7Xp49A8syjeXXghSxJHo6gG/sWTuEKWUsZwWmbcLNls798OtXevXSJgJH+m9kFgFwWzaP7kJ7h3aQ==","signatures":[{"sig":"MEUCIQCF9CYqxTXUjqlQ8FYak+PNTHssEXtOgcqmNRghO/wFxAIgRmUJXRwIQFTe2PrMgnwgycB6zuHNPiv9ZIixYUbmeDQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14840848},"main":"lib/index.js","types":"lib/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"lint":"eslint src --ext .js,.ts,.jsx,.tsx","test":"jest","example":"node --inspect -r ts-node/register Example/example.ts","prepack":"echo 'Yupra'","prepare":"echo 'Baileys'","release":"release-it","lint:fix":"eslint src --fix --ext .js,.ts,.jsx,.tsx","build:all":"tsc && typedoc","build:tsc":"tsc","build:docs":"typedoc","preinstall":"node ./engine-requirements.js","gen:protobuf":"sh WAProto/GenerateStatics.sh","changelog:last":"conventional-changelog -p angular -r 2","changelog:update":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","changelog:preview":"conventional-changelog -p angular -u"},"_npmUser":{"name":"hiraoffc","email":"renz4you28@gmail.com"},"repository":{"url":"https://www.npmjs.com/package/@aventa/baileys"},"_npmVersion":"10.9.3","description":"@aventa/baileys","directories":{},"_nodeVersion":"22.18.0","dependencies":{"ws":"^8.13.0","pino":"^9.6","uuid":"^10.0.0","axios":"^1.6.0","chalk":"^4.1.2","lodash":"^4.17.21","cheerio":"^1.0.0-rc.10","libsignal":"github:NaufalYupra/libsignal-node","@hapi/boom":"^9.1.3","protobufjs":"^6.11.3","async-mutex":"^0.5.0","cache-manager":"^5.7.6","music-metadata":"^7.12.3","gradient-string":"^2.0.2","libphonenumber-js":"^1.10.20","@adiwajshing/keyed-db":"^0.2.4","@cacheable/node-cache":"^1.4.0"},"_hasShrinkwrap":false,"packageManager":"yarn@1.22.19","devDependencies":{"jest":"^27.0.6","jimp":"^0.16.1","json":"^11.0.0","open":"^8.4.2","sharp":"^0.34.1","eslint":"^8.0.0","ts-jest":"^27.0.3","ts-node":"^10.8.1","typedoc":"^0.27.9","@types/ws":"^8.0.0","@types/got":"^9.6.11","release-it":"^15.10.3","typescript":"^5.8.2","@types/jest":"^27.5.1","@types/node":"^16.18.126","@types/sharp":"^0.29.4","link-preview-js":"^3.0.0","qrcode-terminal":"^0.12.0","@adiwajshing/eslint-config":"github:adiwajshing/eslint-config","conventional-changelog-cli":"^2.2.2"},"peerDependencies":{"jimp":"^0.16.1","sharp":"^0.34.1","audio-decode":"^2.1.3","link-preview-js":"^3.0.0","qrcode-terminal":"^0.12.0"},"peerDependenciesMeta":{"jimp":{"optional":true},"sharp":{"optional":true},"audio-decode":{"optional":true},"link-preview-js":{"optional":true},"qrcode-terminal":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/boredom_0.0.1_1757579213689_0.49629704523165796","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@aventa/boredom","version":"0.0.2","description":"@aventa/baileys","keywords":["baileys","yupra","wabot","whatsapp","js-whatsapp","whatsapp-api","whatsapp-web","whatsapp-bot","automation","multi-device","yupra"],"homepage":"https://www.npmjs.com/package/@yupra/baileys","repository":{"url":"https://www.npmjs.com/package/@aventa/baileys"},"license":"MIT","author":{"name":"yupra"},"main":"lib/index.js","types":"lib/index.d.ts","scripts":{"build:all":"tsc && typedoc","build:docs":"typedoc","build:tsc":"tsc","changelog:last":"conventional-changelog -p angular -r 2","changelog:preview":"conventional-changelog -p angular -u","changelog:update":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","example":"node --inspect -r ts-node/register Example/example.ts","gen:protobuf":"sh WAProto/GenerateStatics.sh","lint":"eslint src --ext .js,.ts,.jsx,.tsx","lint:fix":"eslint src --fix --ext .js,.ts,.jsx,.tsx","prepack":"echo 'Yupra'","prepare":"echo 'Baileys'","preinstall":"node ./engine-requirements.js","release":"release-it","test":"jest"},"dependencies":{"@adiwajshing/keyed-db":"^0.2.4","@cacheable/node-cache":"^1.4.0","@hapi/boom":"^9.1.3","async-mutex":"^0.5.0","axios":"^1.6.0","chalk":"^4.1.2","gradient-string":"^2.0.2","cache-manager":"^5.7.6","cheerio":"^1.0.0-rc.10","libphonenumber-js":"^1.10.20","libsignal":"github:NaufalYupra/libsignal-node","lodash":"^4.17.21","music-metadata":"^7.12.3","pino":"^9.6","protobufjs":"^6.11.3","uuid":"^10.0.0","ws":"^8.13.0"},"devDependencies":{"@adiwajshing/eslint-config":"github:adiwajshing/eslint-config","@types/got":"^9.6.11","@types/jest":"^27.5.1","@types/node":"^16.18.126","@types/sharp":"^0.29.4","@types/ws":"^8.0.0","conventional-changelog-cli":"^2.2.2","eslint":"^8.0.0","jest":"^27.0.6","jimp":"^0.16.1","json":"^11.0.0","link-preview-js":"^3.0.0","open":"^8.4.2","qrcode-terminal":"^0.12.0","release-it":"^15.10.3","sharp":"^0.34.1","ts-jest":"^27.0.3","ts-node":"^10.8.1","typedoc":"^0.27.9","typescript":"^5.8.2"},"peerDependencies":{"audio-decode":"^2.1.3","jimp":"^0.16.1","link-preview-js":"^3.0.0","qrcode-terminal":"^0.12.0","sharp":"^0.34.1"},"peerDependenciesMeta":{"audio-decode":{"optional":true},"jimp":{"optional":true},"link-preview-js":{"optional":true},"qrcode-terminal":{"optional":true},"sharp":{"optional":true}},"packageManager":"yarn@1.22.19","engines":{"node":">=20.0.0"},"_id":"@aventa/boredom@0.0.2","_nodeVersion":"22.18.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-ZrZFX7ITMN+fnmJyZIWJspSxw1i7nOIdT5rT/KIhHE/acqkERyx6oEHziBFrRlnrnilI1XFIhQqlN6Xo52qc4g==","shasum":"e7a1fb87fc7c698e97b64aa12f0c1cf66ef2cf50","tarball":"https://registry.npmjs.org/@aventa/boredom/-/boredom-0.0.2.tgz","fileCount":192,"unpackedSize":14840850,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHM4dqe7TQlUngLKgb8P+f/FwyU9iK0yOx/KcUZp9U1jAiBMbDztgrKuT3YRREzKqrfGM3BJFrJ4ZdbzBfancabCgQ=="}]},"_npmUser":{"name":"hiraoffc","email":"renz4you28@gmail.com"},"directories":{},"maintainers":[{"name":"hiraoffc","email":"renz4you28@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/boredom_0.0.2_1757579837759_0.8153982427323194"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-11T08:26:53.586Z","modified":"2025-09-11T08:37:18.181Z","0.0.1":"2025-09-11T08:26:53.915Z","0.0.2":"2025-09-11T08:37:17.999Z"},"author":{"name":"yupra"},"license":"MIT","homepage":"https://www.npmjs.com/package/@yupra/baileys","keywords":["baileys","yupra","wabot","whatsapp","js-whatsapp","whatsapp-api","whatsapp-web","whatsapp-bot","automation","multi-device","yupra"],"repository":{"url":"https://www.npmjs.com/package/@aventa/baileys"},"description":"@aventa/baileys","maintainers":[{"name":"hiraoffc","email":"renz4you28@gmail.com"}],"readme":"# <div align='center'>@yupra/baileys - Modern WhatsApp Web API</div>\n\n<div align='center'>\n\n![WhatsApp API](https://cdn.ypnk.biz.id/yp/h48tgotz.jpg)\n\n[![npm version](https://img.shields.io/npm/v/@yupra/baileys.svg)](https://www.npmjs.com/package/@yupra/baileys)\n[![License](https://img.shields.io/badge/license-GPL%203-blue.svg)](LICENSE)\n[![Downloads](https://img.shields.io/npm/dm/@yupra/baileys.svg)](https://www.npmjs.com/package/@yupra/baileys)\n\n</div>\n\n**@yupra/baileys** is a modern WebSocket-based TypeScript library for interacting with the WhatsApp Web API. This library has been enhanced to address issues with WhatsApp group `@lid` and `@jid` handling, ensuring robust performance.\n\n## ✨ Key Features\n\n- 🚀 **Modern & Fast** - Built with TypeScript and cutting-edge technologies\n- 🔧 **Fixed @lid & @jid** - Resolved WhatsApp group `@lid` and `@jid` issues\n- 📱 **Multi-Device Support** - Supports WhatsApp multi-device connections\n- 🔐 **End-to-End Encryption** - Fully encrypted communications\n- 📨 **All Message Types** - Supports all message types (text, media, polls, etc.)\n- 🎯 **Easy to Use** - Simple and intuitive API\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. The official WhatsApp website can be found at [whatsapp.com](https://whatsapp.com).\n\nThe maintainers of `@yupra/baileys` do not condone the use of this application in practices that violate WhatsApp's Terms of Service. We urge users to exercise personal responsibility and use this application fairly and responsibly.\n\n**Use wisely. Avoid spamming. Refrain from excessive automated usage.**\n\n## 📦 Installation\n\n### Stable Version (Recommended)\n```bash\nnpm install @yupra/baileys\n```\n\n### Edge Version (Latest Features)\n```bash\nnpm install @yupra/baileys@latest\n# or\nyarn add @yupra/baileys@latest\n```\n\n### Import in Code\n```javascript\nconst { default: makeWASocket } = require(\"@yupra/baileys\")\n// or ES6\nimport makeWASocket from \"@yupra/baileys\"\n```\n\n## 🚀 Quick Start\n\n### Example\nHere is an example you can use: [example.ts](Example/example.ts) or follow this tutorial to run the Baileys WhatsApp API code:\n1. ```bash\n   cd path/to/baileys\n   ```\n2. ```bash\n   npm install\n   ```\n3. ```bash\n   node example.js\n   ```\n\n### Basic Example\n```javascript\nconst { default: makeWASocket, DisconnectReason, useMultiFileAuthState } = require('@yupra/baileys')\nconst { Boom } = require('@hapi/boom')\n\nasync function connectToWhatsApp() {\n    const { state, saveCreds } = await useMultiFileAuthState('auth_info_baileys')\n    \n    const sock = makeWASocket({\n        auth: state,\n        printQRInTerminal: true,\n        browser: ['@yupra/baileys', 'Desktop', '3.0']\n    })\n\n    sock.ev.on('connection.update', (update) => {\n        const { connection, lastDisconnect } = update\n        if(connection === 'close') {\n            const shouldReconnect = (lastDisconnect?.error as Boom)?.output?.statusCode !== DisconnectReason.loggedOut\n            console.log('Connection closed due to ', lastDisconnect.error, ', reconnecting ', shouldReconnect)\n            if(shouldReconnect) {\n                connectToWhatsApp()\n            }\n        } else if(connection === 'open') {\n            console.log('✅ Successfully connected to WhatsApp!')\n        }\n    })\n\n    sock.ev.on('messages.upsert', async ({ messages }) => {\n        for (const m of messages) {\n            if (!m.message) continue\n            \n            console.log('📱 New message:', JSON.stringify(m, undefined, 2))\n            \n            // Auto reply\n            await sock.sendMessage(m.key.remoteJid!, { \n                text: 'Hello! I am a WhatsApp bot using @yupra/baileys 🤖' \n            })\n        }\n    })\n\n    sock.ev.on('creds.update', saveCreds)\n}\n\nconnectToWhatsApp()\n```\n\n# Index\n\n- [Connecting Account](#connecting-account)\n    - [Connect with QR Code](#starting-socket-with-qr-code)\n    - [Connect with Pairing Code](#starting-socket-with-pairing-code)\n    - [Receive Full History](#receive-full-history)\n- [Important Notes About Socket Config](#important-notes-about-socket-config)\n    - [Caching Group Metadata (Recommended)](#caching-group-metadata-recommended)\n    - [Improve Retry System & Decrypt Poll Votes](#improve-retry-system--decrypt-poll-votes)\n    - [Receive Notifications in WhatsApp App](#receive-notifications-in-whatsapp-app)\n- [Save Auth Info](#saving--restoring-sessions)\n- [Handling Events](#handling-events)\n    - [Example to Start](#example-to-start)\n    - [Decrypt Poll Votes](#decrypt-poll-votes)\n    - [Summary of Events on First Connection](#summary-of-events-on-first-connection)\n- [Implementing a Data Store](#implementing-a-data-store)\n- [WhatsApp IDs Explained](#whatsapp-ids-explain)\n- [Utility Functions](#utility-functions)\n- [Sending Messages](#sending-messages)\n    - [Non-Media Messages](#non-media-messages)\n        - [Buttons Message](#buttons-message)\n        - [Buttons Flow](#buttons-flow)\n        - [Interactive Message](#interactive-message)\n        - [Text Message](#text-message)\n        - [Quote Message](#quote-message-works-with-all-types)\n        - [Mention User](#mention-user-works-with-most-types)\n        - [Mention Status](#mention-status)\n        - [Result Poll From Newsletter](#result-poll-from-newsletter)\n        - [Send Album Message](#send-album-message)\n        - [Interactive Response](#interactive-response)\n        - [Request Payment](#request-payment)\n        - [Event Message](#event-message)\n        - [Interactive](#interactive)\n        - [Forward Messages](#forward-messages)\n        - [Location Message](#location-message)\n        - [Contact Message](#contact-message)\n        - [Reaction Message](#reaction-message)\n        - [Pin Message](#pin-message)\n        - [Poll Message](#poll-message)\n    - [Sending with Link Preview](#sending-messages-with-link-previews)\n    - [Media Messages](#media-messages)\n        - [GIF Message](#gif-message)\n        - [Video Message](#video-message)\n        - [Audio Message](#audio-message)\n        - [Image Message](#image-message)\n        - [View Once Message](#view-once-message)\n- [Modify Messages](#modify-messages)\n    - [Delete Messages (for everyone)](#deleting-messages-for-everyone)\n    - [Edit Messages](#editing-messages)\n- [Manipulating Media Messages](#manipulating-media-messages)\n    - [Thumbnail in Media Messages](#thumbnail-in-media-messages)\n    - [Downloading Media Messages](#downloading-media-messages)\n    - [Re-upload Media Message to WhatsApp](#re-upload-media-message-to-whatsapp)\n- [Reject Call](#reject-call)\n- [Send States in Chat](#send-states-in-chat)\n    - [Reading Messages](#reading-messages)\n    - [Update Presence](#update-presence)\n- [Modifying Chats](#modifying-chats)\n    - [Archive a Chat](#archive-a-chat)\n    - [Mute/Unmute a Chat](#muteunmute-a-chat)\n    - [Mark a Chat Read/Unread](#mark-a-chat-readunread)\n    - [Delete a Message for Me](#delete-a-message-for-me)\n    - [Delete a Chat](#delete-a-chat)\n    - [Pin/Unpin a Chat](#pinunpin-a-chat)\n    - [Star/Unstar a Message](#starunstar-a-message)\n    - [Disappearing Messages](#disappearing-messages)\n- [User Queries](#user-querys)\n    - [Check If ID Exists in WhatsApp](#check-if-id-exists-in-whatsapp)\n    - [Query Chat History (groups too)](#query-chat-history-groups-too)\n    - [Fetch Status](#fetch-status)\n    - [Fetch Profile Picture (groups too)](#fetch-profile-picture-groups-too)\n    - [Fetch Business Profile](#fetch-business-profile-such-as-description-or-category)\n    - [Fetch Someone's Presence](#fetch-someones-presence-if-theyre-typing-or-online)\n- [Change Profile](#change-profile)\n    - [Change Profile Status](#change-profile-status)\n    - [Change Profile Name](#change-profile-name)\n    - [Change Display Picture (groups too)](#change-display-picture-groups-too)\n    - [Remove Display Picture (groups too)](#remove-display-picture-groups-too)\n- [Groups](#groups)\n    - [Create a Group](#create-a-group)\n    - [Add/Remove or Demote/Promote](#addremove-or-demotepromote)\n    - [Change Subject (name)](#change-subject-name)\n    - [Change Description](#change-description)\n    - [Change Settings](#change-settings)\n    - [Leave a Group](#leave-a-group)\n    - [Get Invite Code](#get-invite-code)\n    - [Revoke Invite Code](#revoke-invite-code)\n    - [Join Using Invitation Code](#join-using-invitation-code)\n    - [Get Group Info by Invite Code](#get-group-info-by-invite-code)\n    - [Query Metadata](#query-metadata-participants-name-description)\n    - [Join using groupInviteMessage](#join-using-groupinvitemessage)\n    - [Get Request Join List](#get-request-join-list)\n    - [Approve/Reject Request Join](#approvereject-request-join)\n    - [Get All Participating Groups Metadata](#get-all-participating-groups-metadata)\n    - [Toggle Ephemeral](#toggle-ephemeral)\n    - [Change Add Mode](#change-add-mode)\n- [Privacy](#privacy)\n    - [Block/Unblock User](#blockunblock-user)\n    - [Get Privacy Settings](#get-privacy-settings)\n    - [Get BlockList](#get-blocklist)\n    - [Update LastSeen Privacy](#update-lastseen-privacy)\n    - [Update Online Privacy](#update-online-privacy)\n    - [Update Profile Picture Privacy](#update-profile-picture-privacy)\n    - [Update Status Privacy](#update-status-privacy)\n    - [Update Read Receipts Privacy](#update-read-receipts-privacy)\n    - [Update Groups Add Privacy](#update-groups-add-privacy)\n    - [Update Default Disappearing Mode](#update-default-disappearing-mode)\n- [Broadcast Lists & Stories](#broadcast-lists--stories)\n    - [Send Broadcast & Stories](#send-broadcast--stories)\n    - [Query a Broadcast List's Recipients & Name](#query-a-broadcast-lists-recipients--name)\n- [Writing Custom Functionality](#writing-custom-functionality)\n    - [Enabling Debug Level in Baileys Logs](#enabling-debug-level-in-baileys-logs)\n    - [How WhatsApp Communicates With Us](#how-whatsapp-communicate-with-us)\n    - [Register a Callback for WebSocket Events](#register-a-callback-for-websocket-events)\n- [Tips & Best Practices](#tips--best-practices)\n- [Troubleshooting](#troubleshooting)\n- [Contributing](#contributing)\n- [License](#license)\n- [Acknowledgments](#acknowledgments)\n\n## Connecting Account\n\nWhatsApp provides a multi-device API that allows `@yupra/baileys` to authenticate as a secondary WhatsApp client via QR code or pairing code.\n\n### Starting Socket with **QR Code**\n\n> [!TIP]\n> Customize the browser name using the `Browsers` constant. See available configurations [here](https://baileys.whiskeysockets.io/types/BrowsersMap.html).\n\n```javascript\nconst { default: makeWASocket, Browsers } = require(\"@yupra/baileys\")\n\nconst sock = makeWASocket({\n    browser: Browsers.ubuntu('My App'),\n    printQRInTerminal: true\n})\n```\n\nUpon successful connection, a QR code will be printed in the terminal. Scan it with WhatsApp on your phone to log in.\n\n### Starting Socket with **Pairing Code**\n\n> [!IMPORTANT]\n> Pairing codes are not part of the Mobile API. They allow connecting WhatsApp Web without a QR code, but only one device can be connected. See [WhatsApp FAQ](https://faq.whatsapp.com/1324084875126592/?cms_platform=web).\n\nPhone numbers must exclude `+`, `()`, or `-`, and include the country code.\n\n```javascript\nconst { default: makeWASocket } = require(\"@yupra/baileys\")\n\nconst sock = makeWASocket({\n    printQRInTerminal: false\n})\n\n// Normal Pairing\nif (!sock.authState.creds.registered) {\n    const number = '6285134816783'\n    const code = await sock.requestPairingCode(number)\n    console.log('🔑 Pairing Code:', code)\n}\n\n// Custom Pairing\nif (!sock.authState.creds.registered) {\n    const pair = \"YP240125\" // 8 characters\n    const number = '6285134816783'\n    const code = await sock.requestPairingCode(number, pair)\n    console.log('🔑 Custom Pairing Code:', code)\n}\n```\n\n### Receive Full History\n\n1. Set `syncFullHistory` to `true`.\n2. By default, Baileys uses Chrome browser config. For desktop-like connections (to receive more message history), use:\n\n```javascript\nconst { default: makeWASocket, Browsers } = require(\"@yupra/baileys\")\n\nconst sock = makeWASocket({\n    browser: Browsers.macOS('Desktop'),\n    syncFullHistory: true\n})\n```\n\n## Important Notes About Socket Config\n\n### Caching Group Metadata (Recommended)\n\nFor group usage, implement caching for group metadata:\n\n```javascript\nconst { default: makeWASocket } = require(\"@yupra/baileys\")\nconst NodeCache = require('node-cache')\n\nconst groupCache = new NodeCache({ stdTTL: 5 * 60, useClones: false })\n\nconst sock = makeWASocket({\n    cachedGroupMetadata: async (jid) => groupCache.get(jid)\n})\n\nsock.ev.on('groups.update', async ([event]) => {\n    const metadata = await sock.groupMetadata(event.id)\n    groupCache.set(event.id, metadata)\n})\n\nsock.ev.on('group-participants.update', async (event) => {\n    const metadata = await sock.groupMetadata(event.id)\n    groupCache.set(event.id, metadata)\n})\n```\n\n### Improve Retry System & Decrypt Poll Votes\n\nEnhance message sending and poll vote decryption with a store:\n\n```javascript\nconst sock = makeWASocket({\n    getMessage: async (key) => await getMessageFromStore(key)\n})\n```\n\n### Receive Notifications in WhatsApp App\n\nDisable online status to receive notifications:\n\n```javascript\nconst sock = makeWASocket({\n    markOnlineOnConnect: false\n})\n```\n\n## Saving & Restoring Sessions\n\nAvoid rescanning QR codes by saving credentials:\n\n```javascript\nconst makeWASocket = require(\"@yupra/baileys\").default\nconst { useMultiFileAuthState } = require(\"@yupra/baileys\")\n\nasync function connect() {\n    const { state, saveCreds } = await useMultiFileAuthState('auth_info_baileys')\n    const sock = makeWASocket({ auth: state })\n    sock.ev.on('creds.update', saveCreds)\n}\n\nconnect()\n```\n\n> [!IMPORTANT]\n> `useMultiFileAuthState` saves auth state in a folder. For production, use SQL/no-SQL databases and carefully manage key updates.\n\n## Handling Events\n\nBaileys uses EventEmitter for events, fully typed for IDE support.\n\n> [!IMPORTANT]\n> See all events [here](https://baileys.whiskeysockets.io/types/BaileysEventMap.html).\n\n```javascript\nconst sock = makeWASocket()\nsock.ev.on('messages.upsert', ({ messages }) => {\n    console.log('Got messages:', messages)\n})\n```\n\n### Example to Start\n\n```javascript\nconst makeWASocket = require(\"@yupra/baileys\").default\nconst { DisconnectReason, useMultiFileAuthState } = require(\"@yupra/baileys\")\nconst { Boom } = require('@hapi/boom')\n\nasync function connectToWhatsApp() {\n    const { state, saveCreds } = await useMultiFileAuthState('auth_info_baileys')\n    const sock = makeWASocket({\n        auth: state,\n        printQRInTerminal: true\n    })\n\n    sock.ev.on('connection.update', (update) => {\n        const { connection, lastDisconnect } = update\n        if(connection === 'close') {\n            const shouldReconnect = (lastDisconnect.error as Boom)?.output?.statusCode !== DisconnectReason.loggedOut\n            console.log('Connection closed due to ', lastDisconnect.error, ', reconnecting ', shouldReconnect)\n            if(shouldReconnect) {\n                connectToWhatsApp()\n            }\n        } else if(connection === 'open') {\n            console.log('Opened connection')\n        }\n    })\n\n    sock.ev.on('messages.upsert', async ({ messages }) => {\n        for (const m of messages) {\n            console.log(JSON.stringify(m, undefined, 2))\n            console.log('Replying to', m.key.remoteJid)\n            await sock.sendMessage(m.key.remoteJid!, { text: 'Hello World' })\n        }\n    })\n\n    sock.ev.on('creds.update', saveCreds)\n}\n\nconnectToWhatsApp()\n```\n\n### Decrypt Poll Votes\n\nHandle encrypted poll votes:\n\n```javascript\nsock.ev.on('messages.update', async (event) => {\n    for(const { key, update } of event) {\n        if(update.pollUpdates) {\n            const pollCreation = await getMessage(key)\n            if(pollCreation) {\n                console.log(\n                    'Got poll update, aggregation: ',\n                    getAggregateVotesInPollMessage({\n                        message: pollCreation,\n                        pollUpdates: update.pollUpdates,\n                    })\n                )\n            }\n        }\n    }\n})\n```\n\n### Summary of Events on First Connection\n\n1. `connection.update` triggers, requesting socket restart.\n2. History messages are received in `messaging.history-set`.\n\n## Implementing a Data Store\n\nBaileys provides an in-memory store for chats, contacts, and messages:\n\n```javascript\nconst makeWASocket = require(\"@yupra/baileys\").default\nconst { makeInMemoryStore } = require(\"@yupra/baileys\")\n\nconst store = makeInMemoryStore({})\nstore.readFromFile('./baileys_store.json')\nsetInterval(() => {\n    store.writeToFile('./baileys_store.json')\n}, 10_000)\n\nconst sock = makeWASocket({})\nstore.bind(sock.ev)\n\nsock.ev.on('chats.upsert', () => {\n    console.log('Got chats', store.chats.all())\n})\n\nsock.ev.on('contacts.upsert', () => {\n    console.log('Got contacts', Object.values(store.contacts))\n})\n```\n\n> [!IMPORTANT]\n> For production, implement a custom store to avoid memory issues.\n\n## WhatsApp IDs Explained\n\nWhatsApp IDs (`jid`) formats:\n\n- **Personal Chat**: `[country code][phone number]@s.whatsapp.net` (e.g., `6285134816783@s.whatsapp.net`)\n- **Group Chat** (Fixed `@jid`): `642108816399-1452992248@g.us`\n- **Broadcast**: `[timestamp]@broadcast` (e.g., `1234567890@broadcast`)\n- **Status/Story**: `status@broadcast`\n- **Newsletter**: `1234567890@newsletter`\n\n> [!NOTE]\n> `@lid` and `@jid` issues in groups are fixed in this library.\n\n## Utility Functions\n\n- `getContentType`: Returns message content type.\n- `getDevice`: Identifies device from message.\n- `makeCacheableSignalKeyStore`: Optimizes auth store.\n- `downloadContentFromMessage`: Downloads message content.\n\n## Sending Messages\n\nSend messages using:\n\n```javascript\nconst jid: string\nconst content: AnyMessageContent\nconst options: MiscMessageGenerationOptions\n\nsock.sendMessage(jid, content, options)\n```\n\n### Non-Media Messages\n\n#### Buttons Message\n```javascript\nawait sock.sendMessage(jid, {\n    text: \"Hello World!\",\n    footer: \"YP - 2025\",\n    buttons: [\n        {\n            buttonId: `🚀`,\n            buttonText: { displayText: '🗿' },\n            type: 1\n        }\n    ],\n    headerType: 1,\n    viewOnce: true\n}, { quoted: null })\n```\n\n#### Buttons Flow\n```javascript\nawait sock.sendMessage(jid, {\n    text: \"Hello World!\",\n    footer: \"© YP\",\n    buttons: [\n        {\n            buttonId: '.tes',\n            buttonText: { displayText: 'TESTING BOT' },\n            type: 1\n        },\n        {\n            buttonId: ' ',\n            buttonText: { displayText: 'PRIVATE SCRIPT' },\n            type: 1\n        },\n        {\n            buttonId: 'action',\n            buttonText: { displayText: 'Interactive Message' },\n            type: 4,\n            nativeFlowInfo: {\n                name: 'single_select',\n                paramsJson: JSON.stringify({\n                    title: 'message',\n                    sections: [\n                        {\n                            title: 'YP - 2025',\n                            highlight_label: '☺',\n                            rows: [\n                                { header: 'HEADER', title: 'TITLE', description: 'DESCRIPTION', id: 'YOUR ID' },\n                                { header: 'HEADER', title: 'TITLE', description: 'DESCRIPTION', id: 'YOUR ID' }\n                            ]\n                        }\n                    ]\n                })\n            }\n        }\n    ],\n    headerType: 1,\n    viewOnce: true\n}, { quoted: m })\n```\n\n#### Interactive Message\n```javascript\nlet msg = generateWAMessageFromContent(m.chat, {\n    viewOnceMessage: {\n        message: {\n            messageContextInfo: {\n                deviceListMetadata: {},\n                deviceListMetadataVersion: 2\n            },\n            interactiveMessage: proto.Message.InteractiveMessage.create({\n                body: proto.Message.InteractiveMessage.Body.create({ text: \"YP\" }),\n                footer: proto.Message.InteractiveMessage.Footer.create({ text: \"Bot\" }),\n                header: proto.Message.InteractiveMessage.Header.create({\n                    title: \"Igna\",\n                    subtitle: \"test\",\n                    hasMediaAttachment: false\n                }),\n                nativeFlowMessage: proto.Message.InteractiveMessage.NativeFlowMessage.create({\n                    buttons: [\n                        {\n                            name: \"single_select\",\n                            buttonParamsJson: \"{\\\"title\\\":\\\"title\\\",\\\"sections\\\":[{\\\".menu\\\":\\\".play dj webito\\\",\\\"highlight_label\\\":\\\"label\\\",\\\"rows\\\":[{\\\"header\\\":\\\"header\\\",\\\"title\\\":\\\"title\\\",\\\"description\\\":\\\"description\\\",\\\"id\\\":\\\"id\\\"},{\\\"header\\\":\\\"header\\\",\\\"title\\\":\\\"title\\\",\\\"description\\\":\\\"description\\\",\\\"id\\\":\\\"id\\\"}]}]}\"\n                        },\n                        { name: \"cta_reply\", buttonParamsJson: \"{\\\"display_text\\\":\\\"quick_reply\\\",\\\"id\\\":\\\"message\\\"}\" },\n                        { name: \"cta_url\", buttonParamsJson: \"{\\\"display_text\\\":\\\"url\\\",\\\"url\\\":\\\"https://www.google.com\\\",\\\"merchant_url\\\":\\\"https://www.google.com\\\"}\" },\n                        { name: \"cta_call\", buttonParamsJson: \"{\\\"display_text\\\":\\\"call\\\",\\\"id\\\":\\\"message\\\"}\" },\n                        { name: \"cta_copy\", buttonParamsJson: \"{\\\"display_text\\\":\\\"copy\\\",\\\"id\\\":\\\"123456789\\\",\\\"copy_code\\\":\\\"message\\\"}\" },\n                        { name: \"cta_reminder\", buttonParamsJson: \"{\\\"display_text\\\":\\\"Recordatorio\\\",\\\"id\\\":\\\"message\\\"}\" },\n                        { name: \"cta_cancel_reminder\", buttonParamsJson: \"{\\\"display_text\\\":\\\"cta_cancel_reminder\\\",\\\"id\\\":\\\"message\\\"}\" },\n                        { name: \"address_message\", buttonParamsJson: \"{\\\"display_text\\\":\\\"address_message\\\",\\\"id\\\":\\\"message\\\"}\" },\n                        { name: \"send_location\", buttonParamsJson: \"\" }\n                    ]\n                })\n            })\n        }\n    }\n}, {})\n\nreturn sock.relayMessage(msg.key.remoteJid, msg.message, { messageId: msg.key.id })\n```\n\n#### Text Message\n```javascript\nawait sock.sendMessage(jid, { text: 'Hello World' })\n```\n\n#### Quote Message (works with all types)\n```javascript\nawait sock.sendMessage(jid, { text: 'Hello World' }, { quoted: message })\n```\n\n#### Mention User (works with most types)\n```javascript\nawait sock.sendMessage(\n    jid,\n    {\n        text: '@6285134816783',\n        mentions: ['6285134816783@s.whatsapp.net']\n    }\n)\n```\n\n#### Mention Status\n```javascript\nawait sock.StatusMentions(\n    {\n        text: \"Hello\",\n    },\n    [\n        \"642108816399-1452992248@g.us\",\n        \"6285134816783@s.whatsapp.net\"\n    ]\n)\n```\n\n#### Result Poll From Newsletter\n```javascript\nawait sock.sendMessage(\n    jid,\n    {\n        pollResult: {\n            name: \"Text poll\",\n            votes: [[\"Option 1\", 10], [\"Option 2\", 10]]\n        }\n    }, { quoted: message }\n)\n```\n\n#### Send Album Message\n```javascript\nawait sock.sendAlbumMessage(\n    jid,\n    [\n        {\n            image: { url: \"https://example.jpg\" },\n            caption: \"Hello World\"\n        },\n        {\n            video: { url: \"https://example.mp4\" },\n            caption: \"Hello World\"\n        }\n    ],\n    { \n        quoted: message, \n        delay: 2000\n    }\n)\n```\n\n#### Interactive Response\n```javascript\nawait sock.sendMessage(\n    jid, \n    {\n        buttonReply: {\n            text: 'Text',\n            nativeFlow: { version: 3 }\n        },\n        type: 'interactive',\n        ephemeral: true\n    }\n)\n```\n\n#### Request Payment\n```javascript\n// Non-media sticker\nawait sock.sendMessage(\n    jid,\n    {\n        requestPayment: {      \n            currency: \"IDR\",\n            amount: \"10000000\",\n            from: \"6285134816783@s.whatsapp.net\",\n            note: \"Hi Guys\",\n            background: {}\n        }\n    },\n    { quoted: message }\n)\n\n// With media sticker buffer\nawait sock.sendMessage(\n    jid,\n    {\n        requestPayment: {      \n            currency: \"IDR\",\n            amount: \"10000000\",\n            from: \"6285134816783@s.whatsapp.net\",\n            sticker: Buffer,\n            background: {}\n        }\n    },\n    { quoted: message }\n)\n\n// With media sticker URL\nawait sock.sendMessage(\n    jid,\n    {\n        requestPayment: {      \n            currency: \"IDR\",\n            amount: \"10000000\",\n            from: \"6285134816783@s.whatsapp.net\",\n            sticker: { url: 'https://example.com/sticker.png' },\n            background: {}\n        }\n    },\n    { quoted: message }\n)\n```\n\n#### Event Message\n```javascript\nawait sock.sendMessage(\n    jid, \n    { \n        event: {\n            isCanceled: false,\n            name: \"Name Event\",\n            description: \"Description Event\",\n            location: { \n                degreesLatitude: 0,\n                degreesLongitude: 0\n            },\n            link: 'https://call.link',\n            startTime: m.messageTimestamp.low,\n            endTime: m.messageTimestamp.low + 86400,\n            extraGuestsAllowed: true\n        }\n    },\n    { quoted: message }\n)\n```\n\n#### Interactive\n```javascript\n// Non-header media\nawait sock.sendMessage(\n    jid,\n    {\n        text: \"Description Of Messages\",\n        title: \"Title Of Messages\",\n        subtitle: \"Subtitle Message\",\n        footer: \"Footer Messages\",\n        interactiveButtons: [\n            {\n                name: \"quick_reply\",\n                buttonParamsJson: JSON.stringify({ display_text: \"Display Button\", id: \"ID\" })\n            },\n            {\n                name: \"cta_url\",\n                buttonParamsJson: JSON.stringify({ display_text: \"Display Button\", url: \"https://www.example.com\" })\n            }\n        ]\n    },\n    { quoted: message }\n)\n\n// With media\nawait sock.sendMessage(\n    jid,\n    {\n        image: { url: \"https://example.jpg\" },\n        caption: \"Description Of Messages\",\n        title: \"Title Of Messages\",\n        subtitle: \"Subtitle Message\",\n        footer: \"Footer Messages\",\n        media: true,\n        interactiveButtons: [\n            {\n                name: \"quick_reply\",\n                buttonParamsJson: JSON.stringify({ display_text: \"Display Button\", id: \"ID\" })\n            },\n            {\n                name: \"cta_url\",\n                buttonParamsJson: JSON.stringify({ display_text: \"Display Button\", url: \"https://www.example.com\" })\n            }\n        ]\n    },\n    { quoted: message }\n)\n\n// With header product\nawait sock.sendMessage(\n    jid,\n    {\n        product: {\n            productImage: { url: \"https://example.jpg\" },\n            productImageCount: 1,\n            title: \"Title Product\",\n            description: \"Description Product\",\n            priceAmount1000: 20000 * 1000,\n            currencyCode: \"IDR\",\n            retailerId: \"Retail\",\n            url: \"https://example.com\"\n        },\n        businessOwnerJid: \"6285134816783@s.whatsapp.net\",\n        caption: \"Description Of Messages\",\n        title: \"Title Of Messages\",\n        footer: \"Footer Messages\",\n        media: true,\n        interactiveButtons: [\n            {\n                name: \"quick_reply\",\n                buttonParamsJson: JSON.stringify({ display_text: \"Display Button\", id: \"ID\" })\n            },\n            {\n                name: \"cta_url\",\n                buttonParamsJson: JSON.stringify({ display_text: \"Display Button\", url: \"https://www.example.com\" })\n            }\n        ]\n    },\n    { quoted: message }\n)\n```\n\n#### Forward Messages\n```javascript\nconst msg = getMessageFromStore()\nawait sock.sendMessage(jid, { forward: msg })\n```\n\n#### Location Message\n```javascript\nawait sock.sendMessage(\n    jid,\n    {\n        location: {\n            degreesLatitude: 24.121231,\n            degreesLongitude: 55.1121221\n        }\n    }\n)\n```\n\n#### Contact Message\n```javascript\nconst vcard = 'BEGIN:VCARD\\n'\n    + 'VERSION:3.0\\n'\n    + 'FN:Jeff Singh\\n'\n    + 'ORG:Ashoka Uni;\\n'\n    + 'TEL;type=CELL;type=VOICE;waid=6285134816783:+6285134816783\\n'\n    + 'END:VCARD'\n\nawait sock.sendMessage(\n    jid,\n    {\n        contacts: {\n            displayName: 'Jeff',\n            contacts: [{ vcard }]\n        }\n    }\n)\n```\n\n#### Reaction Message\n```javascript\nawait sock.sendMessage(\n    jid,\n    {\n        react: {\n            text: '💖',\n            key: message.key\n        }\n    }\n)\n```\n\n#### Pin Message\n```javascript\nawait sock.sendMessage(\n    jid,\n    {\n        pin: {\n            type: 1,\n            time: 86400,\n            key: message.key\n        }\n    }\n)\n```\n\n#### Poll Message\n```javascript\nawait sock.sendMessage(\n    jid,\n    {\n        poll: {\n            name: 'My Poll',\n            values: ['Option 1', 'Option 2'],\n            selectableCount: 1,\n            toAnnouncementGroup: false\n        }\n    }\n)\n```\n\n### Sending Messages with Link Previews\n\nAdd `link-preview-js` dependency:\n\n```bash\nyarn add link-preview-js\n```\n\nSend a link:\n\n```javascript\nawait sock.sendMessage(\n    jid,\n    {\n        text: 'Hi, this was sent using https://github.com/yupranetwork/baileys'\n    }\n)\n```\n\n### Media Messages\n\n> [!NOTE]\n> Use `{ stream: Stream }`, `{ url: Url }`, or `Buffer` for media. See [WAMediaUpload](https://baileys.whiskeysockets.io/types/WAMediaUpload.html).\n\n#### GIF Message\n```javascript\nawait sock.sendMessage(\n    jid,\n    {\n        video: fs.readFileSync('Media/ma_gif.mp4'),\n        caption: 'Hello World',\n        gifPlayback: true\n    }\n)\n```\n\n#### Video Message\n```javascript\nawait sock.sendMessage(\n    jid,\n    {\n        video: { url: './Media/ma_gif.mp4' },\n        caption: 'Hello World',\n        ptv: false\n    }\n)\n```\n\n#### Audio Message\n```javascript\nawait sock.sendMessage(\n    jid,\n    {\n        audio: { url: './Media/audio.mp3' },\n        mimetype: 'audio/mp4'\n    }\n)\n```\n\n#### Image Message\n```javascript\nawait sock.sendMessage(\n    jid,\n    {\n        image: { url: './Media/ma_img.png' },\n        caption: 'Hello World'\n    }\n)\n```\n\n#### View Once Message\n```javascript\nawait sock.sendMessage(\n    jid,\n    {\n        image: { url: './Media/ma_img.png' },\n        viewOnce: true,\n        caption: 'Hello World'\n    }\n)\n```\n\n## Modify Messages\n\n### Deleting Messages (for everyone)\n```javascript\nconst msg = await sock.sendMessage(jid, { text: 'Hello World' })\nawait sock.sendMessage(jid, { delete: msg.key })\n```\n\n### Editing Messages\n```javascript\nawait sock.sendMessage(jid, {\n    text: 'Updated text goes here',\n    edit: response.key\n})\n```\n\n## Manipulating Media Messages\n\n### Thumbnail in Media Messages\n\nAdd `jimp` or `sharp` for image/sticker thumbnails:\n\n```bash\nyarn add jimp\n# or\nyarn add sharp\n```\n\nFor video thumbnails, install `ffmpeg`.\n\n### Downloading Media Messages\n```javascript\nconst { createWriteStream } = require('fs')\nconst { downloadMediaMessage, getContentType } = require(\"@yupra/baileys\")\n\nsock.ev.on('messages.upsert', async ({ messages: [m] }) => {\n    if (!m.message) return\n    const messageType = getContentType(m.message)\n\n    if (messageType === 'imageMessage') {\n        const stream = await downloadMediaMessage(\n            m,\n            'stream',\n            {},\n            {\n                logger,\n                reuploadRequest: sock.updateMediaMessage\n            }\n        )\n        const writeStream = createWriteStream('./my-download.jpeg')\n        stream.pipe(writeStream)\n    }\n})\n```\n\n### Re-upload Media Message to WhatsApp\n```javascript\nawait sock.updateMediaMessage(msg)\n```\n\n## Reject Call\n```javascript\nawait sock.rejectCall(callId, callFrom)\n```\n\n## Send States in Chat\n\n### Reading Messages\n```javascript\nconst key: WAMessageKey\nawait sock.readMessages([key])\n```\n\n### Update Presence\n```javascript\nawait sock.sendPresenceUpdate('available', jid)\n```\n\n## Modifying Chats\n\n### Archive a Chat\n```javascript\nconst lastMsgInChat = await getLastMessageInChat(jid)\nawait sock.chatModify({ archive: true, lastMessages: [lastMsgInChat] }, jid)\n```\n\n### Mute/Unmute a Chat\n```javascript\nawait sock.chatModify({ mute: 8 * 60 * 60 * 1000 }, jid) // Mute for 8 hours\nawait sock.chatModify({ mute: null }, jid) // Unmute\n```\n\n### Mark a Chat Read/Unread\n```javascript\nconst lastMsgInChat = await getLastMessageInChat(jid)\nawait sock.chatModify({ markRead: false, lastMessages: [lastMsgInChat] }, jid)\n```\n\n### Delete a Message for Me\n```javascript\nawait sock.chatModify(\n    {\n        clear: {\n            messages: [\n                {\n                    id: 'ATWYHDNNWU81732J',\n                    fromMe: true,\n                    timestamp: '1654823909'\n                }\n            ]\n        }\n    },\n    jid\n)\n```\n\n### Delete a Chat\n```javascript\nconst lastMsgInChat = await getLastMessageInChat(jid)\nawait sock.chatModify({\n    delete: true,\n    lastMessages: [\n        {\n            key: lastMsgInChat.key,\n            messageTimestamp: lastMsgInChat.messageTimestamp\n        }\n    ]\n}, jid)\n```\n\n### Pin/Unpin a Chat\n```javascript\nawait sock.chatModify({\n    pin: true\n}, jid)\n```\n\n### Star/Unstar a Message\n```javascript\nawait sock.chatModify({\n    star: {\n        messages: [\n            {\n                id: 'messageID',\n                fromMe: true\n            }\n        ],\n        star: true\n    }\n}, jid)\n```\n\n### Disappearing Messages\n```javascript\nawait sock.sendMessage(\n    jid,\n    { disappearingMessagesInChat: 604800 }\n)\n\nawait sock.sendMessage(jid, { text: 'Hello' }, { ephemeralExpiration: 604800 })\n\nawait sock.sendMessage(\n    jid,\n    { disappearingMessagesInChat: false }\n)\n```\n\n## User Queries\n\n### Check If ID Exists in WhatsApp\n```javascript\nconst [result] = await sock.onWhatsApp(jid)\nif (result.exists) console.log(`${jid} exists on WhatsApp, as jid: ${result.jid}`)\n```\n\n### Query Chat History (groups too)\n```javascript\nconst msg = await getOldestMessageInChat(jid)\nawait sock.fetchMessageHistory(\n    50,\n    msg.key,\n    msg.messageTimestamp\n)\n```\n\n### Fetch Status\n```javascript\nconst status = await sock.fetchStatus(jid)\nconsole.log('Status: ' + status)\n```\n\n### Fetch Profile Picture (groups too)\n```javascript\nconst ppUrl = await sock.profilePictureUrl(jid, 'image')\nconsole.log(ppUrl)\n```\n\n### Fetch Business Profile (such as description or category)\n```javascript\nconst profile = await sock.getBusinessProfile(jid)\nconsole.log('Business description: ' + profile.description + ', category: ' + profile.category)\n```\n\n### Fetch Someone's Presence (if they're typing or online)\n```javascript\nsock.ev.on('presence.update', console.log)\nawait sock.presenceSubscribe(jid)\n```\n\n## Change Profile\n\n### Change Profile Status\n```javascript\nawait sock.updateProfileStatus('Hello World!')\n```\n\n### Change Profile Name\n```javascript\nawait sock.updateProfileName('My Name')\n```\n\n### Change Display Picture (groups too)\n```javascript\nawait sock.updateProfilePicture(jid, { url: './new-profile-picture.jpeg' })\n```\n\n### Remove Display Picture (groups too)\n```javascript\nawait sock.removeProfilePicture(jid)\n```\n\n## Groups\n\n### Create a Group\n```javascript\nconst group = await sock.groupCreate('My Fab Group', ['6285134816783@s.whatsapp.net', '6281234567890@s.whatsapp.net'])\nconsole.log('Created group with id: ' + group.gid)\nawait sock.sendMessage(group.id, { text: 'Hello there' })\n```\n\n### Add/Remove or Demote/Promote\n```javascript\nawait sock.groupParticipantsUpdate(\n    jid,\n    ['6285134816783@s.whatsapp.net', '6281234567890@s.whatsapp.net'],\n    'add'\n)\n```\n\n### Change Subject (name)\n```javascript\nawait sock.groupUpdateSubject(jid, 'New Subject!')\n```\n\n### Change Description\n```javascript\nawait sock.groupUpdateDescription(jid, 'New Description!')\n```\n\n### Change Settings\n```javascript\nawait sock.groupSettingUpdate(jid, 'announcement')\nawait sock.groupSettingUpdate(jid, 'not_announcement')\nawait sock.groupSettingUpdate(jid, 'unlocked')\nawait sock.groupSettingUpdate(jid, 'locked')\n```\n\n### Leave a Group\n```javascript\nawait sock.groupLeave(jid)\n```\n\n### Get Invite Code\n```javascript\nconst code = await sock.groupInviteCode(jid)\nconsole.log('Group code: ' + code)\n```\n\n### Revoke Invite Code\n```javascript\nconst code = await sock.groupRevokeInvite(jid)\nconsole.log('New group code: ' + code)\n```\n\n### Join Using Invitation Code\n```javascript\nconst response = await sock.groupAcceptInvite(code)\nconsole.log('Joined to: ' + response)\n```\n\n### Get Group Info by Invite Code\n```javascript\nconst response = await sock.groupGetInviteInfo(code)\nconsole.log('Group information: ' + response)\n```\n\n### Query Metadata (participants, name, description...)\n```javascript\nconst metadata = await sock.groupMetadata(jid)\nconsole.log(metadata.id + ', title: ' + metadata.subject + ', description: ' + metadata.desc)\n```\n\n### Join using groupInviteMessage\n```javascript\nconst response = await sock.groupAcceptInviteV4(jid, groupInviteMessage)\nconsole.log('Joined to: ' + response)\n```\n\n### Get Request Join List\n```javascript\nconst response = await sock.groupRequestParticipantsList(jid)\nconsole.log(response)\n```\n\n### Approve/Reject Request Join\n```javascript\nconst response = await sock.groupRequestParticipantsUpdate(\n    jid,\n    ['6285134816783@s.whatsapp.net', '6281234567890@s.whatsapp.net'],\n    'approve'\n)\nconsole.log(response)\n```\n\n### Get All Participating Groups Metadata\n```javascript\nconst response = await sock.groupFetchAllParticipating()\nconsole.log(response)\n```\n\n### Toggle Ephemeral\n```javascript\nawait sock.groupToggleEphemeral(jid, 86400)\n```\n\n### Change Add Mode\n```javascript\nawait sock.groupMemberAddMode(\n    jid,\n    'all_member_add'\n)\n```\n\n## Privacy\n\n### Block/Unblock User\n```javascript\nawait sock.updateBlockStatus(jid, 'block')\nawait sock.updateBlockStatus(jid, 'unblock')\n```\n\n### Get Privacy Settings\n```javascript\nconst privacySettings = await sock.fetchPrivacySettings(true)\nconsole.log('Privacy settings: ' + privacySettings)\n```\n\n### Get BlockList\n```javascript\nconst response = await sock.fetchBlocklist()\nconsole.log(response)\n```\n\n### Update LastSeen Privacy\n```javascript\nawait sock.updateLastSeenPrivacy('contacts')\n```\n\n### Update Online Privacy\n```javascript\nawait sock.updateOnlinePrivacy('all')\n```\n\n### Update Profile Picture Privacy\n```javascript\nawait sock.updateProfilePicturePrivacy('contacts')\n```\n\n### Update Status Privacy\n```javascript\nawait sock.updateStatusPrivacy('contacts')\n```\n\n### Update Read Receipts Privacy\n```javascript\nawait sock.updateReadReceiptsPrivacy('all')\n```\n\n### Update Groups Add Privacy\n```javascript\nawait sock.updateGroupsAddPrivacy('contacts')\n```\n\n### Update Default Disappearing Mode\n```javascript\nawait sock.updateDefaultDisappearingMode(86400)\n```\n\n## Broadcast Lists & Stories\n\n### Send Broadcast & Stories\n```javascript\nawait sock.sendMessage(\n    jid,\n    {\n        image: { url: 'story.jpg' },\n        caption: 'Story from @yupra/baileys'\n    },\n    {\n        backgroundColor: '#FF6B6B',\n        font: 1,\n        statusJidList: ['6285134816783@s.whatsapp.net'],\n        broadcast: true\n    }\n)\n```\n\n### Query a Broadcast List's Recipients & Name\n```javascript\nconst bList = await sock.getBroadcastListInfo('1234567890@broadcast')\nconsole.log(`List name: ${bList.name}, recipients: ${bList.recipients}`)\n```\n\n## Writing Custom Functionality\n\n### Enabling Debug Level in Baileys Logs\n```javascript\nconst sock = makeWASocket({\n    logger: P({ level: 'debug' })\n})\n```\n\n### How WhatsApp Communicates With Us\n\n> [!TIP]\n> Study the Libsignal Protocol and Noise Protocol for WhatsApp communication details.\n\nExample for tracking battery percentage:\n\n```javascript\n{\n    \"level\": 10,\n    \"fromMe\": false,\n    \"frame\": {\n        \"tag\": \"ib\",\n        \"attrs\": { \"from\": \"@s.whatsapp.net\" },\n        \"content\": [\n            {\n                \"tag\": \"edge_routing\",\n                \"attrs\": {},\n                \"content\": [\n                    {\n                        \"tag\": \"routing_info\",\n                        \"attrs\": {},\n                        \"content\": { \"type\": \"Buffer\", \"data\": [8,2,8,5] }\n                    }\n                ]\n            }\n        ]\n    },\n    \"msg\": \"communication\"\n}\n```\n\n### Register a Callback for WebSocket Events\n```javascript\nsock.ws.on('CB:edge_routing', (node) => {})\nsock.ws.on('CB:edge_routing,id:abcd', (node) => {})\nsock.ws.on('CB:edge_routing,id:abcd,routing_info', (node) => {})\n```\n\n## Tips & Best Practices\n\n1. **Rate Limiting**\n```javascript\nconst delay = (ms) => new Promise(resolve => setTimeout(resolve, ms))\nfor (const contact of contacts) {\n    await sock.sendMessage(contact, { text: 'Broadcast message' })\n    await delay(2000)\n}\n```\n\n2. **Memory Management**\n```javascript\nconst fs = require('fs')\nawait sock.sendMessage('6285134816783@s.whatsapp.net', {\n    document: fs.createReadStream('./large-file.pdf'),\n    mimetype: 'application/pdf',\n    fileName: 'document.pdf'\n})\n```\n\n3. **Error Recovery**\n```javascript\nasync function sendWithRetry(jid, content, maxRetries = 3) {\n    for (let i = 0; i < maxRetries; i++) {\n        try {\n            return await sock.sendMessage(jid, content)\n        } catch (error) {\n            console.log(`Attempt ${i + 1} failed:`, error.message)\n            if (i === maxRetries - 1) throw error\n            await delay(1000 * (i + 1))\n        }\n    }\n}\n```\n\n## Troubleshooting\n\n1. **QR Code Not Appearing**\n```javascript\nconst sock = makeWASocket({\n    printQRInTerminal: true\n})\n```\n\n2. **Group @jid Not Working** ✅ FIXED\n```javascript\nconst groupId = '642108816399-1452992248@g.us'\n```\n\n3. **Session Lost**\n```javascript\nsock.ev.on('creds.update', saveCreds)\n```\n\n4. **Memory Leak**\n```javascript\nconst store = makeInMemoryStore({})\nstore.bind(sock.ev)\n```\n## License\n\nDistributed under the GPL-3.0 License. See `LICENSE` for more information.\n\n## Acknowledgments\n\n- [WhatsApp](https://chat.whatsapp.com/DUWddjCXWv4CCoeS8uP2lP) - For an amazing platform\n- [Baileys Community](https://chat.whatsapp.com/DUWddjCXWv4CCoeS8uP2lP) - For the base library\n- [YuPra Network](https://chat.whatsapp.com/DUWddjCXWv4CCoeS8uP2lP) - For maintenance & fixes\n\n---\n\n<div align='center'>\n\n**Made with ❤️ by [YuPra Network]**\n\n*@yupra/baileys - Modern WhatsApp Web API with Fixed @lid & @jid Issues*\n\n</div>","readmeFilename":"README.MD"}