{"_id":"@c4bal/baileys","_rev":"4-40a29c50654739cfa17fe73cb2bcb9f2","name":"@c4bal/baileys","dist-tags":{"latest":"1.12.2"},"versions":{"0.1.15":{"name":"@c4bal/baileys","version":"0.1.15","keywords":["automation","baileys","baileys-fork","baileys-mod","js-whatsapp","multi-device","whatsapp","whatsapp-api","whatsapp-bot","whatsapp-chat","whatsapp-group","whatsapp-web"],"author":{"name":"WhiskeySockets"},"license":"MIT","_id":"@c4bal/baileys@0.1.15","maintainers":[{"name":"c4bal","email":"founder@cabal.web.id"}],"homepage":"https://github.com/c4bal/baileys#readme","bugs":{"url":"https://github.com/c4bal/baileys/issues"},"dist":{"shasum":"ac2a23d2390c7c2506bf74a196726050f132f19c","tarball":"https://registry.npmjs.org/@c4bal/baileys/-/baileys-0.1.15.tgz","fileCount":106,"integrity":"sha512-9cf0kjW+rFI7pa6JxOOehKohpa+NGbJ0F9m11gX2q3pbS92RUCOfqnMtzGiJ6FwHQVcx258m4C0wCtfkctwV7A==","signatures":[{"sig":"MEUCIQDa+9aXDHtctCVervkj2uf8RPE76eAj6hBnsg8CTfEOYwIgI2OTBEglXDDSO20oD1EKW/gF7Sfb8xzXuCt7g2WBMkY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6288112},"main":"lib/index.js","type":"module","engines":{"node":">=20.0.0"},"scripts":{"preinstall":"node ./engine-requirements.js"},"_npmUser":{"name":"c4bal","email":"founder@cabal.web.id"},"repository":{"url":"git+https://github.com/c4bal/baileys.git","type":"git"},"_npmVersion":"11.12.0","description":"A simple fork of Baileys for WhatsApp automation","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ws":"^8.19.0","pino":"^9.6.0","fflate":"^0.8.2","p-queue":"^9.1.0","libsignal":"github:WhiskeySockets/libsignal-wasm#master","lru-cache":"^11.2.6","@hapi/boom":"^9.1.3","protobufjs":"^7.5.4","async-mutex":"^0.5.0","music-metadata":"^11.7.0","whatsapp-rust-bridge":"0.5.3","@adiwajshing/keyed-db":"^0.2.4","@cacheable/node-cache":"^1.4.0"},"_hasShrinkwrap":false,"packageManager":"yarn@4.9.2","peerDependencies":{"jimp":"^1.6.0","sharp":"*","audio-decode":"^2.2.3","@napi-rs/image":"~1.12.0","link-preview-js":"^3.0.0"},"peerDependenciesMeta":{"jimp":{"optional":true},"audio-decode":{"optional":true},"@napi-rs/image":{"optional":true},"link-preview-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/baileys_0.1.15_1774610688374_0.16776445416526786","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"@c4bal/baileys","version":"0.1.16","keywords":["automation","baileys","baileys-fork","baileys-mod","js-whatsapp","multi-device","whatsapp","whatsapp-api","whatsapp-bot","whatsapp-chat","whatsapp-group","whatsapp-web"],"author":{"name":"WhiskeySockets"},"license":"MIT","_id":"@c4bal/baileys@0.1.16","maintainers":[{"name":"c4bal","email":"founder@cabal.web.id"}],"homepage":"https://github.com/c4bal/baileys#readme","bugs":{"url":"https://github.com/c4bal/baileys/issues"},"dist":{"shasum":"594528b47bb281ea124e564e3b27608086228a69","tarball":"https://registry.npmjs.org/@c4bal/baileys/-/baileys-0.1.16.tgz","fileCount":106,"integrity":"sha512-+9C/lxNcR0EMPo4u+MXRKX2igCh8/sIKcppJP+rX7CDXcdkknrVj7DX087lR7BYwOskWK1ZinnYBPYtfyFSgQQ==","signatures":[{"sig":"MEYCIQCu5bssk6aGT1T6pdoHpiUu8KYDVX9pfmT/8xXVRUNrEgIhAJbPeM6o8LnCADFS53V6k8NWcQ8eEEVx6W/RmDTZH27p","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6288112},"main":"lib/index.js","type":"module","engines":{"node":">=20.0.0"},"gitHead":"15f88395bc4c08477e892dd8ba34635097b3217e","scripts":{"preinstall":"node ./engine-requirements.js"},"_npmUser":{"name":"c4bal","email":"founder@cabal.web.id"},"repository":{"url":"git+https://github.com/c4bal/baileys.git","type":"git"},"_npmVersion":"10.9.4","description":"A simple fork of Baileys for WhatsApp automation","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ws":"^8.19.0","pino":"^9.6.0","fflate":"^0.8.2","p-queue":"^9.1.0","libsignal":"github:WhiskeySockets/libsignal-wasm#master","lru-cache":"^11.2.6","@hapi/boom":"^9.1.3","protobufjs":"^7.5.4","async-mutex":"^0.5.0","music-metadata":"^11.7.0","whatsapp-rust-bridge":"0.5.3","@adiwajshing/keyed-db":"^0.2.4","@cacheable/node-cache":"^1.4.0"},"_hasShrinkwrap":false,"packageManager":"yarn@4.9.2","peerDependencies":{"jimp":"^1.6.0","sharp":"*","audio-decode":"^2.2.3","@napi-rs/image":"~1.12.0","link-preview-js":"^3.0.0"},"peerDependenciesMeta":{"jimp":{"optional":true},"audio-decode":{"optional":true},"@napi-rs/image":{"optional":true},"link-preview-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/baileys_0.1.16_1774612467377_0.31254753471338814","host":"s3://npm-registry-packages-npm-production"}},"1.12.1":{"name":"@c4bal/baileys","version":"1.12.1","keywords":["automation","baileys","baileys-fork","baileys-mod","js-whatsapp","multi-device","whatsapp","whatsapp-api","whatsapp-bot","whatsapp-chat","whatsapp-group","whatsapp-web"],"author":{"name":"WhiskeySockets"},"license":"MIT","_id":"@c4bal/baileys@1.12.1","maintainers":[{"name":"c4bal","email":"founder@cabal.web.id"}],"homepage":"https://github.com/c4bal/baileys#readme","bugs":{"url":"https://github.com/c4bal/baileys/issues"},"dist":{"shasum":"e55637b27c381654031007cfb7997939331939cd","tarball":"https://registry.npmjs.org/@c4bal/baileys/-/baileys-1.12.1.tgz","fileCount":106,"integrity":"sha512-5+w3jKhEtfD12PHHqb1ZlVQ/gOUXMtZ0CSwj+b7OlirH9BfgZ0tndrO6CSAToz9UhdRb4o3kDaDWMkn+6JFeGg==","signatures":[{"sig":"MEUCIQCUjYQeJdfpOF7iO9o2r9Xn1WbK822JKPvfCh+QJTqWdgIgWg7MoqJ0Bl+LLFbdyR42WhS6wIzpssw+pH/Vkz0z5b4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6288112},"main":"lib/index.js","type":"module","engines":{"node":">=20.0.0"},"gitHead":"2e4ab16a5634722993e7134c76cdb9418323c8fd","scripts":{"preinstall":"node ./engine-requirements.js"},"_npmUser":{"name":"c4bal","email":"founder@cabal.web.id"},"repository":{"url":"git+https://github.com/c4bal/baileys.git","type":"git"},"_npmVersion":"10.9.4","description":"A simple fork of Baileys for WhatsApp automation","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ws":"^8.19.0","pino":"^9.6.0","fflate":"^0.8.2","p-queue":"^9.1.0","libsignal":"github:WhiskeySockets/libsignal-wasm#master","lru-cache":"^11.2.6","@hapi/boom":"^9.1.3","protobufjs":"^7.5.4","async-mutex":"^0.5.0","music-metadata":"^11.7.0","whatsapp-rust-bridge":"0.5.3","@adiwajshing/keyed-db":"^0.2.4","@cacheable/node-cache":"^1.4.0"},"_hasShrinkwrap":false,"packageManager":"yarn@4.9.2","peerDependencies":{"jimp":"^1.6.0","sharp":"*","audio-decode":"^2.2.3","@napi-rs/image":"~1.12.0","link-preview-js":"^3.0.0"},"peerDependenciesMeta":{"jimp":{"optional":true},"audio-decode":{"optional":true},"@napi-rs/image":{"optional":true},"link-preview-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/baileys_1.12.1_1774613050910_0.7118276629420648","host":"s3://npm-registry-packages-npm-production"}},"1.12.2":{"name":"@c4bal/baileys","version":"1.12.2","description":"A simple fork of Baileys for WhatsApp automation","main":"lib/index.js","type":"module","scripts":{"preinstall":"node ./engine-requirements.js"},"engines":{"node":">=20.0.0"},"repository":{"type":"git","url":"git+https://github.com/c4bal/baileys.git"},"keywords":["automation","baileys","baileys-fork","baileys-mod","js-whatsapp","multi-device","whatsapp","whatsapp-api","whatsapp-bot","whatsapp-chat","whatsapp-group","whatsapp-web"],"homepage":"https://github.com/c4bal/baileys#readme","author":{"name":"WhiskeySockets"},"license":"MIT","dependencies":{"@adiwajshing/keyed-db":"^0.2.4","@cacheable/node-cache":"^1.4.0","@hapi/boom":"^9.1.3","async-mutex":"^0.5.0","fflate":"^0.8.2","libsignal":"github:WhiskeySockets/libsignal-wasm#master","lru-cache":"^11.2.6","music-metadata":"^11.7.0","p-queue":"^9.1.0","pino":"^9.6.0","protobufjs":"^7.5.4","whatsapp-rust-bridge":"0.5.3","ws":"^8.19.0"},"peerDependencies":{"@napi-rs/image":"~1.12.0","audio-decode":"^2.2.3","jimp":"^1.6.0","link-preview-js":"^3.0.0","sharp":"*"},"peerDependenciesMeta":{"@napi-rs/image":{"optional":true},"audio-decode":{"optional":true},"jimp":{"optional":true},"link-preview-js":{"optional":true}},"packageManager":"yarn@4.9.2","_id":"@c4bal/baileys@1.12.2","gitHead":"96e9da8d0d05f9e45cd709b0648f4386bc10b9c1","bugs":{"url":"https://github.com/c4bal/baileys/issues"},"_nodeVersion":"22.22.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-9lQCG9x9AC36+P2Ij2FXcWjGizEjEPGGEOVZztX2hRGtcE8Ciac7kiQB5Cgktym8/u3WdiFgSDngglgD/fQbYQ==","shasum":"7f0e67659873c399f34b6c31948b6db051d91715","tarball":"https://registry.npmjs.org/@c4bal/baileys/-/baileys-1.12.2.tgz","fileCount":106,"unpackedSize":6288280,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDmnfPL4DCuFyfXSGRiVUUPynJ3iAVr1TwANaq/KjXzSwIhAMXOc9aHNAq3N6CSqHsgescrjF0hJPiB728udVrUXlRh"}]},"_npmUser":{"name":"c4bal","email":"founder@cabal.web.id"},"directories":{},"maintainers":[{"name":"c4bal","email":"founder@cabal.web.id"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/baileys_1.12.2_1774619650659_0.7610593892473552"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-27T11:24:48.279Z","modified":"2026-03-27T13:54:11.021Z","0.1.15":"2026-03-27T11:24:48.555Z","0.1.16":"2026-03-27T11:54:27.550Z","1.12.1":"2026-03-27T12:04:11.133Z","1.12.2":"2026-03-27T13:54:10.909Z"},"bugs":{"url":"https://github.com/c4bal/baileys/issues"},"author":{"name":"WhiskeySockets"},"license":"MIT","homepage":"https://github.com/c4bal/baileys#readme","keywords":["automation","baileys","baileys-fork","baileys-mod","js-whatsapp","multi-device","whatsapp","whatsapp-api","whatsapp-bot","whatsapp-chat","whatsapp-group","whatsapp-web"],"repository":{"type":"git","url":"git+https://github.com/c4bal/baileys.git"},"description":"A simple fork of Baileys for WhatsApp automation","maintainers":[{"name":"c4bal","email":"founder@cabal.web.id"}],"readme":"# @c4bal/baileys\n\n![Logo](https://files.catbox.moe/c5tam9.jpg)\n\nA lightweight fork of Baileys with a few fixes and a small adjustment.\n\n### Changes\n\n#### Internal Adjustments\n- Fixed an issue where media could not be sent to newsletters due to an upstream issue.\n- Reintroduced [`makeInMemoryStore`](#%EF%B8%8F-implementing-a-data-store) with a minimal ESM adaptation and small adjustments for Baileys v7.\n- Switched FFmpeg execution from `exec` to `spawn` for safer process handling.\n- Added `@napi-rs/image` as a supported image processing backend in `getImageProcessingLibrary()`, offering a balance between performance and compatibility.\n\n#### Message Handling & Compatibility\n- Added support for sending [interactive message](#-sending-interactive-messages) types (button, list, interactive, template, carousel).\n- Added support for [album messages](#%EF%B8%8F-album-image--video), [group status messages](#4%EF%B8%8F⃣-group-status), [status mention messages](#%EF%B8%8F-status-mention), [sticker pack messages](#-sticker-pack), and several [payment-related messages](#-sending-payment-messages) (request payment, payment invite, order, invoice).\n- Simplified sending messages with ad thumbnails via [`externalAdReply`](#3%EF%B8%8F⃣-external-ad-reply) without requiring manual `contextInfo`.\n\n#### Additional Message Options\n- Added optional boolean flags for message handling:  \n   - [`ai`](#1%EF%B8%8F⃣-ai-label) - AI label on message\n   - [`mentionAll`](#-mention) - Mentions all group participants without requiring their JIDs in `mentions` or `mentionedJid`\n   - [`ephemeral`](#2%EF%B8%8F⃣-ephemeral), [`groupStatus`](#4%EF%B8%8F⃣-group-status), [`viewOnceV2`](#7%EF%B8%8F⃣-view-once-v2), [`viewOnceV2Extension`](#8%EF%B8%8F⃣-view-once-v2-extension), [`interactiveAsTemplate`](#3%EF%B8%8F⃣-interactive) - Message wrappers\n   - [`raw`](#5%EF%B8%8F⃣-raw) - Build your message manually **(DO NOT USE FOR EXPLOITATION)**\n\n> [!NOTE]\nThis project is maintained with limited scope and is not intended to replace upstream Baileys.\n>\n\n\n###  Installation\n\n- Via `package.json`\n\n```json\n# NPM\n\"dependencies\": {\n   \"@c4bal/baileys\": \"latest\"\n}\n\n# GitHub\n\"dependencies\": {\n   \"@c4bal/baileys\": \"github:c4bal/baileys\"\n}\n```\n\n- Via terminal\n\n```bash\n# NPM\nnpm i @c4bal/baileys@latest\n\n# GitHub\nnpm i github:c4bal/baileys\n```\n\n### Git dep preparation error?\n```json\n# GitHub\n\"dependencies\": {\n   \"@c4bal/baileys\": \"https://github.com/c4bal/baileys/releases/download/baileys/main.tar.gz\"\n}\n```\n\n#### Import (ESM & CJS)\n\n```javascript\n// --- ESM\nimport { makeWASocket } from '@c4bal/baileys'\n\n// --- CJS (tested and working on Node.js 24)\nconst { makeWASocket } = require('@c4bal/baileys')\n```\n\n### Usage\n\n#### Connect to WhatsApp (Quick Step)\n\n```javascript\nimport { makeWASocket, delay, DisconnectReason, useMultiFileAuthState } from '@c4bal/baileys'\nimport { Boom } from '@hapi/boom'\nimport pino from 'pino'\n\n// --- Connect with pairing code\nconst myPhoneNumber = '6288888888888'\n\nconst logger = pino({ level: 'silent' })\n\nconst connectToWhatsApp = async () => {\n   const { state, saveCreds } = await useMultiFileAuthState('session')\n    \n   const sock = makeWASocket({\n      logger,\n      auth: state\n   })\n\n   sock.ev.on('creds.update', saveCreds)\n\n   sock.ev.on('connection.update', (update) => {\n      const { connection, lastDisconnect } = update\n      if (connection === 'connecting' && !sock.authState.creds.registered) {\n         await delay(1500)\n         const code = await sock.requestPairingCode(myPhoneNumber)\n         console.log('Pairing code', ':', code)\n      }\n      else if (connection === 'close') {\n         const shouldReconnect = new Boom(connection?.lastDisconnect?.error)?.output?.statusCode !== DisconnectReason.loggedOut\n         console.log('Connection closed because', lastDisconnect.error, ', reconnecting ', shouldReconnect)\n         if (shouldReconnect) {\n            connectToWhatsApp()\n         }\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 message of messages) {\n         if (!message.message) continue\n\n         console.log('Got new message', ':', message)\n         await sock.sendMessage(message.key.remoteJid, {\n            text: 'Hello world'\n         })\n      }\n   })\n}\n\nconnectToWhatsApp()\n```\n\n#### Implementing a Data Store\n\n> [!CAUTION]\nI highly recommend building your own data store, as keeping an entire chat history in memory can lead to excessive RAM usage.\n\n```javascript\nimport { makeWASocket, makeInMemoryStore, delay, DisconnectReason, useMultiFileAuthState } from '@c4bal/baileys'\nimport { Boom } from '@hapi/boom'\nimport pino from 'pino'\n\nconst myPhoneNumber = '6288888888888'\n\n// --- Create your store path\nconst storePath = './store.json'\n\nconst logger = pino({ level: 'silent' })\n\nconst connectToWhatsApp = async () => {\n   const { state, saveCreds } = await useMultiFileAuthState('session')\n    \n   const sock = makeWASocket({\n      logger,\n      auth: state\n   })\n\n   const store = makeInMemoryStore({\n      logger,\n      socket: sock\n   })\n\n   store.bind(sock.ev)\n\n   sock.ev.on('creds.update', saveCreds)\n\n   sock.ev.on('connection.update', (update) => {\n      const { connection, lastDisconnect } = update\n      if (connection === 'connecting' && !sock.authState.creds.registered) {\n         await delay(1500)\n         const code = await sock.requestPairingCode(myPhoneNumber)\n         console.log('🔗 Pairing code', ':', code)\n      }\n      else if (connection === 'close') {\n         const shouldReconnect = new Boom(connection?.lastDisconnect?.error)?.output?.statusCode !== DisconnectReason.loggedOut\n         console.log('⚠️ Connection closed because', lastDisconnect.error, ', reconnecting ', shouldReconnect)\n         if (shouldReconnect) {\n            connectToWhatsApp()\n         }\n      }\n      else if (connection === 'open') {\n         console.log('✅ Successfully connected to WhatsApp')\n      }\n   })\n\n   sock.ev.on('chats.upsert', () => {\n      console.log('✉️ Got chats', store.chats.all())\n   })\n\n   sock.ev.on('contacts.upsert', () => {\n      console.log('👥 Got contacts', Object.values(store.contacts))\n   })\n\n   // --- Read store from file\n   store.readFromFile(storePath)\n\n   // --- Save store every 3 minutes\n   setInterval(() => {\n      store.writeToFile(storePath)\n   }, 180000)\n}\n\nconnectToWhatsApp()\n```\n\n#### WhatsApp IDs Explain\n\n`id` is the WhatsApp ID, called `jid` and `lid` too, of the person or group you're sending the message to.\n- It must be in the format `[country code][phone number]@s.whatsapp.net`\n   - Example for people: `19999999999@s.whatsapp.net` and `12699999999@lid`.\n   - For groups, it must be in the format `123456789-123345@g.us`.\n- For Meta AI, it's `11111111111@bot`.\n- For broadcast lists, it's `[timestamp of creation]@broadcast`.\n- For stories, the ID is `status@broadcast`.\n\n#### Sending Messages\n\n> [!NOTE]\nYou can get the `jid` from `message.key.remoteJid` in the first example.\n\n##### Text\n\n```javascript\nsock.sendMessage(jid, {\n   text: 'Hello'\n}, {\n   quoted: message\n})\n```\n\n##### Mention\n\n```javascript\n// --- Regular mention\nsock.sendMessage(jid, {\n   text: 'Hello @628123456789',\n   mentions: ['628123456789@s.whatsapp.net']\n}, {\n   quoted: message\n})\n\n// --- Mention all\nsock.sendMessage(jid, {\n   text: 'Hello @all',\n   mentionAll: true\n}, {\n   quoted: message\n})\n```\n\n##### Reaction\n\n```javascript\nsock.sendMessage(jid, {\n   react: {\n      key: message.key,\n      text: '✨'\n   }\n}, {\n   quoted: message\n})\n```\n\n##### Pin Message\n\n```javascript\nsock.sendMessage(jid, {\n   pin: message.key,\n   time: 86400, // --- Set the value in seconds: 86400 (1d), 604800 (7d), or 2592000 (30d)\n   type: 1 // --- Or 0 to remove\n}, {\n   quoted: message\n})\n```\n\n##### Contact\n\n```javascript\nconst vcard = 'BEGIN:VCARD\\n'\n            + 'VERSION:3.0\\n'\n            + 'FN:John Doe\\n'\n            + 'ORG:Waitress;\\n'\n            + 'TEL;type=CELL;type=VOICE;waid=628123456789:+62 8123 4567 89\\n'\n            + 'END:VCARD'\n\nsock.sendMessage(jid, {\n   contacts: {\n      displayName: 'John',\n      contacts: [\n         { vcard }\n      ]\n   }\n}, {\n   quoted: message\n})\n```\n\n##### Location\n\n```javascript\nsock.sendMessage(jid, {\n   location: {\n      degreesLatitude: 24.121231,\n      degreesLongitude: 55.1121221,\n      name: '👋🏻 I am here'\n   }\n}, {\n   quoted: message\n})\n```\n\n##### Poll\n\n```javascript\n// --- Regular poll message\nsock.sendMessage(jid, {\n   poll: {\n      name: '🔥 Voting time',\n      values: ['Yes', 'No'],\n      selectableCount: 1,\n      toAnnouncementGroup: false\n   }\n}, {\n   quoted: message\n})\n\n// --- Quiz (only for newsletter)\nsock.sendMessage('1211111111111@newsletter', {\n   poll: {\n      name: '🔥 Quiz',\n      values: ['Yes', 'No'],\n      correctAnswer: 'Yes',\n      pollType: 1\n   }\n}, {\n   quoted: message\n})\n\n// --- Poll result\nsock.sendMessage(jid, {\n   pollResult: {\n      name: '📝 Poll Result',\n      votes: [{\n         name: 'Nice',\n         voteCount: 10\n      }, {\n         name: 'Nah',\n         voteCount: 2\n      }],\n      pollType: 0 // Or 1 for quiz\n   }\n}, {\n   quoted: message\n})\n\n// --- Poll update\nsock.sendMessage(jid, {\n   pollUpdate: {\n      metadata: {},\n      key: message.key,\n      vote: {\n         enclv: /* <Buffer> */,\n         encPayload: /* <Buffer> */\n      }\n   }\n}, {\n   quoted: message\n})\n```\n\n##### 🎞️ Status Mention\n\n```javascript\nsock.sendMessage([jidA, jidB, jidC], {\n   text: 'Hello! 👋🏻'\n})\n```\n\n#### 📁 Sending Media Messages\n\n> [!NOTE]\nFor media messages, you can pass a `Buffer` directly, or an object with either `{ stream: Readable }` or `{ url: string }` (local file path or HTTP/HTTPS URL).\n\n##### 🖼️ Image\n\n```javascript\nsock.sendMessage(jid, {\n   image: {\n      url: './path/to/image.jpg'\n   },\n   caption: '🔥 Superb'\n}, {\n   quoted: message\n})\n```\n\n##### 🎥 Video\n\n```javascript\nsock.sendMessage(jid, {\n   video: {\n      url: './path/to/video.mp4'\n   },\n   gifPlayback: false, // --- Set true if you want to send video as GIF\n   ptv: false,  // --- Set true if you want to send video as PTV\n   caption: '🔥 Superb'\n}, {\n   quoted: message\n})\n```\n\n##### 📃 Sticker\n\n```javascript\nsock.sendMessage(jid, {\n   sticker: {\n      url: './path/to/sticker.webp'\n   }\n}, {\n   quoted: message\n})\n```\n\n##### 💽 Audio\n\n```javascript\nsock.sendMessage(jid, {\n   audio: {\n      url: './path/to/audio.mp3'\n   },\n   ptt: false, // --- Set true if you want to send audio as Voice Note\n}, {\n   quoted: message\n})\n```\n\n##### 🖼️ Album (Image & Video)\n\n```javascript\nsock.sendMessage(jid, {\n   album: [{\n      image: {\n         url: './path/to/image.jpg'\n      },\n      caption: '1st image'\n   }, {\n      video: {\n         url: './path/to/video.mp4'\n      },\n      caption: '1st video'\n   }, {\n      image: {\n         url: './path/to/image.jpg'\n      },\n      caption: '2nd image'\n   }, {\n      video: {\n         url: './path/to/video.mp4'\n      },\n      caption: '2nd video'\n   }]\n}, {\n   quoted: message\n})\n```\n\n##### 📦 Sticker Pack\n\n> [!IMPORTANT]\nIf `sharp` or `@napi-rs/image` is not installed, the `cover` and `stickers` must already be in WebP format.\n\n```javascript\nsock.sendMessage(jid, {\n   cover: {\n      url: './path/to/image.webp'\n   },\n   stickers: [{\n      data: {\n         url: './path/to/image.webp'\n      }\n   }, {\n      data: {\n         url: './path/to/image.webp'\n      }\n   }, {\n      data: {\n         url: './path/to/image.webp'\n      }\n   }],\n   name: '📦 My Sticker Pack',\n   publisher: '🌟 John Doe',\n   description: '@c4bal/baileys'\n}, {\n   quoted: message\n})\n```\n\n#### 👉🏻 Sending Interactive Messages\n\n##### 1️⃣ Buttons\n\n```javascript\n// --- Regular buttons message\nsock.sendMessage(jid, {\n   text: '👆🏻 Buttons!',\n   footer: '@c4bal/baileys',\n   buttons: [{\n      text: '👋🏻 SignUp',\n      id: '#SignUp'\n   }]\n}, {\n   quoted: message\n})\n\n// --- Buttons with Media & Native Flow\nsock.sendMessage(jid, {\n   image: {\n      url: './path/to/image.jpg'\n   },\n   caption: '👆🏻 Buttons and Native Flow!',\n   footer: '@c4bal/baileys',\n   buttons: [{\n      text: '👋🏻 Rating',\n      id: '#Rating'\n   }, {\n      text: '📋 Select',\n      sections: [{\n         title: '✨ Section 1',\n         rows: [{\n            header: '',\n            title: '💭 Secret Ingredient',\n            description: '',\n            id: '#SecretIngredient'\n         }]\n      }, {\n         title: '✨ Section 2',\n         highlight_label: '🔥 Popular',\n         rows: [{\n            header: '',\n            title: '🏷️ Coupon',\n            description: '',\n            id: '#CouponCode'\n         }]\n      }]\n   }]\n}, {\n   quoted: message\n})\n```\n\n##### 2️⃣ List\n\n> [!NOTE]\nIt only works in private chat (`@s.whatsapp.net`).\n\n```javascript\nsock.sendMessage(jid, {\n   text: '📋 List!',\n   footer: '@c4bal/baileys',\n   buttonText: '📋 Select',\n   title: '👋🏻 Hello',\n   sections: [{\n      title: '🚀 Menu 1',\n      rows: [{\n         title: '✨ AI',\n         description: '',\n         rowId: '#AI'\n      }]\n   }, {\n      title: '🌱 Menu 2',\n      rows: [{\n         title: '🔍 Search',\n         description: '',\n         rowId: '#Search'\n      }]\n   }]\n}, {\n   quoted: message\n})\n```\n\n##### 3️⃣ Interactive\n\n```javascript\n// --- Native Flow\nsock.sendMessage(jid, {\n   image: {\n      url: './path/to/image.jpg'\n   },\n   caption: '🗄️ Interactive!',\n   footer: '@c4bal/baileys',\n   optionText: '👉🏻 Select Options', // --- Optional, wrap all native flow into a single list\n   optionTitle: '📄 Select Options', // --- Optional\n   couponText: '🏷️ Newest Coupon!', // --- Optional, add coupon into message\n   couponCode: '@c4bal/baileys', // --- Optional\n   nativeFlow: [{\n      text: '👋🏻 Greeting',\n      id: '#Greeting'\n   }, {\n      text: '📞 Call',\n      call: '628123456789'\n   }, {\n      text: '📋 Copy',\n      copy: '@c4bal/baileys'\n   }, {\n      text: '🌐 Source',\n      url: 'https://www.npmjs.com/package/baileys'\n   }, {\n      text: '📋 Select',\n      sections: [{\n         title: '✨ Section 1',\n         rows: [{\n            header: '',\n            title: '🏷️ Coupon',\n            description: '',\n            id: '#CouponCode'\n         }]\n      }, {\n         title: '✨ Section 2',\n         highlight_label: '🔥 Popular',\n         rows: [{\n            header: '',\n            title: '💭 Secret Ingredient',\n            description: '',\n            id: '#SecretIngredient'\n         }]\n      }]\n   }],\n   interactiveAsTemplate: false, // --- Optional, wrap the interactive message into a template\n}, {\n   quoted: message\n})\n\n// --- Carousel & Native Flow\nsock.sendMessage(jid, {\n   text: '🗂️ Interactive with Carousel!',\n   footer: '@c4bal/baileys',\n   cards: [{\n      image: {\n         url: './path/to/image.jpg'\n      },\n      caption: '🖼️ Image 1',\n      footer: '🏷️️ Pinterest',\n      nativeFlow: [{\n         text: '🌐 Source',\n         url: 'https://www.npmjs.com/package/baileys'\n      }]\n   }, {\n      image: {\n         url: './path/to/image.jpg'\n      },\n      caption: '🖼️ Image 2',\n      footer: '🏷️ Pinterest',\n      couponText: '🏷️ New Coupon!',\n      couponCode: '@c4bal/baileys',\n      nativeFlow: [{\n         text: '🌐 Source',\n         url: 'https://www.npmjs.com/package/baileys'\n      }]\n   }, {\n      image: {\n         url: './path/to/image.jpg'\n      },\n      caption: '🖼️ Image 3',\n      footer: '🏷️ Pinterest',\n      optionText: '👉🏻 Select Options',\n      optionTitle: '📄 Select Options',\n      couponText: '🏷️ New Coupon!',\n      couponCode: '@c4bal/baileys',\n      nativeFlow: [{\n         text: '🛒 Product',\n         id: '#Product'\n      }, {\n         text: '🌐 Source',\n         url: 'https://www.npmjs.com/package/baileys'\n      }]\n   }]\n}, {\n   quoted: message\n})\n```\n\n##### 4️⃣ Hydrated Template\n\n```javascript\nsock.sendMessage(jid, {\n   title: '👋🏻 Hello',\n   image: {\n      url: './path/to/image.jpg'\n   },\n   caption: '🫙 Template!',\n   footer: '@c4bal/baileys',\n   templateButtons: [{\n      text: '👉🏻 Tap Here',\n      id: '#Order'\n   }, {\n      text: '🌐 Source',\n      url: 'https://www.npmjs.com/package/baileys'\n   }, {\n      text: '📞 Call',\n      call: '628123456789'\n   }]\n}, {\n   quoted: message\n})\n```\n\n#### 💳 Sending Payment Messages\n\n##### 1️⃣ Invite Payment\n\n```javascript\nsock.sendMessage(jid, {\n   paymentInviteServiceType: 3 // 1, 2, or 3\n})\n```\n\n##### 2️⃣ Invoice\n\n> [!NOTE]\nInvoice message are not supported yet.\n\n```javascript\nsock.sendMessage(jid, {\n   image: {\n      url: './path/to/image.jpg'\n   },\n   invoiceNote: '🏷️ Invoice'\n})\n```\n\n##### 3️⃣ Order\n\n```javascript\nsock.sendMessage(chat, {\n   orderText: '🛍️ Order',\n   thumbnail: fs.readFileSync('./path/to/image.jpg') // --- Must in buffer format\n}, {\n   quoted: message\n})\n```\n\n##### 4️⃣ Product\n\n```javascript\nsock.sendMessage(jid, {\n   image: {\n      url: './path/to/image.jpg'\n   },\n   product: {\n      title: '🛒 My Product'\n   },\n   businessOwnerJid: '0@s.whatsapp.net' // --- Must included\n}, {\n   quoted: message\n})\n```\n\n##### 5️⃣ Request Payment\n\n```javascript\nsock.sendMessage(jid, {\n   text: '💳 Request Payment',\n   requestPaymentFrom: '0@s.whatsapp.net'\n})\n```\n\n#### 👁️ Other Message Options\n\n##### 1️⃣ AI Label\n\n> [!NOTE]\nIt only works in private chat (`@s.whatsapp.net`).\n\n```javascript\nsock.sendMessage(jid, {\n   image: {\n      url: './path/to/image.jpg'\n   },\n   caption: '🤖 AI Labeled!',\n   ai: true\n}, {\n   quoted: message\n})\n```\n\n##### 2️⃣ Ephemeral\n\n> [!NOTE]\nWrap message into `ephemeralMessage`\n\n```javascript\nsock.sendMessage(jid, {\n   image: {\n      url: './path/to/image.jpg'\n   },\n   caption: '👁️ Ephemeral',\n   ephemeral: true\n})\n```\n\n##### 3️⃣ External Ad Reply\n\n> [!NOTE]\nAdd an ad thumbnail to messages (may not be displayed on some WhatsApp versions).\n\n```javascript\nsock.sendMessage(jid, {\n   text: '📰 External Ad Reply',\n   externalAdReply: {\n      title: '📝 Did you know?',\n      body: '❓ I dont know',\n      thumbnail: fs.readFileSync('./path/to/image.jpg'), // --- Must in buffer format\n      largeThumbnail: false, // --- Or true for bigger thumbnail\n      url: 'https://www.npmjs.com/package/baileys' // --- Optional, used for WhatsApp internal thumbnail caching and direct URL\n   }\n}, {\n   quoted: message\n})\n```\n\n##### 4️⃣ Group Status\n\n> [!NOTE]\nIt only works in group chat (`@g.us`)\n\n```javascript\nsock.sendMessage(jid, {\n   image: {\n      url: './path/to/image.jpg'\n   },\n   caption: '👥 Group Status!',\n   groupStatus: true\n})\n```\n\n##### 5️⃣ Raw\n\n```javascript\nsock.sendMessage(jid, {\n   extendedTextMessage: {\n      text: '📃 Built manually from scratch using the raw WhatsApp proto structure',\n      contextInfo: {\n         externalAdReply: {\n            title: '@c4bal/baileys',\n            thumbnail: fs.readFileSync('./path/to/image.jpg'),\n            sourceApp: 'whatsapp',\n            showAdAttribution: true,\n            mediaType: 1\n         }\n      }\n   },\n   raw: true\n}, {\n   quoted: message\n})\n```\n\n##### 6️⃣ View Once\n\n> [!NOTE]\nWrap message into `viewOnceMessage`\n\n```javascript\nsock.sendMessage(jid, {\n   image: {\n      url: './path/to/image.jpg'\n   },\n   caption: '👁️ View Once',\n   viewOnce: true\n})\n```\n\n##### 7️⃣ View Once V2\n\n> [!NOTE]\nWrap message into `viewOnceMessageV2`\n\n```javascript\nsock.sendMessage(jid, {\n   image: {\n      url: './path/to/image.jpg'\n   },\n   caption: '👁️ View Once V2',\n   viewOnceV2: true\n})\n```\n\n##### 8️⃣ View Once V2 Extension\n\n> [!NOTE]\nWrap message into `viewOnceMessageV2Extension`\n\n```javascript\nsock.sendMessage(jid, {\n   image: {\n      url: './path/to/image.jpg'\n   },\n   caption: '👁️ View Once V2 Extension',\n   viewOnceV2Extension: true\n})\n```\n\n#### 🧰 Additional Contents\n\n##### 🏷️ Find User ID (JID|PN/LID)\n\n> [!NOTE]\nThe ID must contain numbers only (no +, (), or -) and must include the country code with WhatsApp ID format.\n\n```javascript\n// --- PN (Phone Number)\nconst phoneNumber = '6281111111111@s.whatsapp.net'\n\nconst ids = await sock.findUserId(phoneNumber)\n\nconsole.log('🏷️ Got user ID', ':', ids)\n\n// --- LID (Local Identifier)\nconst lid = '43411111111111@lid'\n\nconst ids = await sock.findUserId(lid)\n\nconsole.log('🏷️ Got user ID', ':', ids)\n\n// --- Output\n// {\n//    phoneNumber: '6281111111111@s.whatsapp.net',\n//    lid: '43411111111111@lid'\n// }\n// --- Output when failed\n// {\n//    phoneNumber: '6281111111111@s.whatsapp.net',\n//    lid: 'id-not-found'\n// }\n// --- Same output shape regardless of input type\n```\n\n##### 🔑 Request Custom Pairing Code\n\n> [!NOTE]\nThe phone number must contain numbers only (no +, (), or -) and must include the country code.\n\n```javascript\nconst phoneNumber = '6281111111111'\nconst customPairingCode = 'STARFALL'\n\nawait sock.requestPairingCode(phoneNumber, customPairingCode)\n\nconsole.log('🔗 Pairing code', ':', customPairingCode)\n```\n\n##### 📣 Newsletter Management\n\n```javascript\n// --- Create a new one\nsock.newsletterCreate('@c4bal/baileys')\n\n// --- Get info\nsock.newsletterMetadata('1231111111111@newsletter')\n\n// --- Demote admin\nsock.newsletterDemote('1231111111111@newsletter', '6281111111111@s.whatsapp.net')\n\n// --- Change owner\nsock.newsletterChangeOwner('1231111111111@newsletter', '6281111111111@s.whatsapp.net')\n\n// --- Change name\nsock.newsletterUpdateName('1231111111111@newsletter', '📦 @c4bal/baileys')\n\n// --- Change description\nsock.newsletterUpdateDescription('1231111111111@newsletter', '📣 Fresh updates weekly')\n\n// --- Change photo\nsock.newsletterUpdatePicture('1231111111111@newsletter', {\n   url: 'path/to/image.jpg'\n})\n\n// --- Remove photo\nsock.newsletterRemovePicture('1231111111111@newsletter')\n\n// --- React to a message\nsock.newsletterReactMessage('1231111111111@newsletter', '100', '💛')\n\n// --- Get all subscribed newsletters\nconst newsletters = await sock.newsletterSubscribed()\n\nconsole.dir(newsletters, { depth: null })\n```\n\n##### 👥 Group Management\n\n```javascript\n// --- Create a new one and add participants using their JIDs\nsock.groupCreate('@c4bal/baileys', ['628123456789@s.whatsapp.net'])\n\n// --- Get info\nsock.groupMetadata(jid)\n\n// --- Get invite code\nsock.groupInviteCode(jid)\n\n// --- Revoke invite link\nsock.groupRevokeInvite(jid)\n\n// --- Leave group\nsock.groupLeave(jid)\n\n// --- Add participants\nsock.groupParticipantsUpdate(jid, ['628123456789@s.whatsapp.net'], 'add')\n\n// --- Remove participants\nsock.groupParticipantsUpdate(jid, ['628123456789@s.whatsapp.net'], 'remove')\n\n// --- Promote to admin\nsock.groupParticipantsUpdate(jid, ['628123456789@s.whatsapp.net'], 'promote')\n\n// --- Demote from admin\nsock.groupParticipantsUpdate(jid, ['628123456789@s.whatsapp.net'], 'demote')\n\n// --- Change name\nsock.groupUpdateSubject(jid, '📦 @c4bal/baileys')\n\n// --- Change description\nsock.groupUpdateDescription(jid, 'Updated description')\n\n// --- Change photo\nsock.updateProfilePicture(jid, {\n   url: 'path/to/image.jpg'\n})\n\n// --- Remove photo\nsock.removeProfilePicture(jid)\n\n// --- Set group as admin only for chatting\nsock.groupSettingUpdate(jid, 'announcement')\n\n// --- Set group as open to all for chatting\nsock.groupSettingUpdate(jid, 'not_announcement')\n\n// --- Set admin only can edit group info\nsock.groupSettingUpdate(jid, 'locked')\n\n// --- Set all participants can edit group info\nsock.groupSettingUpdate(jid, 'unlocked')\n\n// --- Set admin only can add participants\nsock.groupMemberAddMode(jid, 'admin_add')\n\n// --- Set all participants can add participants\nsock.groupMemberAddMode(jid, 'all_member_add')\n\n// --- Enable or disable temporary messages with seconds format\nsock.groupToggleEphemeral(jid, 86400)\n\n// --- Disable temporary messages\nsock.groupToggleEphemeral(jid, 0)\n\n// --- Enable or disable membership approval mode\nsock.groupJoinApprovalMode(jid, 'on')\nsock.groupJoinApprovalMode(jid, 'off')\n\n// --- Get all groups metadata\nconst groups = await sock.groupFetchAllParticipating()\n\nconsole.dir(groups, { depth: null })\n\n// --- Get pending invites\nconst invites = await sock.groupGetInviteInfo(code)\n\nconsole.dir(invites, { depth: null })\n\n// --- Accept group invite\nsock.groupAcceptInvite(code)\n\n// --- Get group info from link\nconst group = await sock.groupGetInviteInfo('https://chat.whatsapp.com/ABC123')\n\nconsole.log('👥 Got group info from link', ':', group)\n```\n\n## 📦 Fork Base\n> [!NOTE]\nThis fork is based on [Baileys (GitHub)](https://github.com/WhiskeySockets/Baileys)\n\n## 📣 Credits\n> [!IMPORTANT]\nThis fork uses Protocol Buffer definitions maintained by [WPP Connect](https://github.com/wppconnect-team) via [`wa-proto`](https://github.com/wppconnect-team/wa-proto)\n> \n> All rights belong to the original Baileys maintainers and contributors:\n> - [WhiskeySockets/Baileys](https://github.com/WhiskeySockets/Baileys)\n> - [purpshell](https://github.com/purpshell)\n> - [jlucaso1](https://github.com/jlucaso1)\n> - [adiwajshing](https://github.com/adiwajshing)\n","readmeFilename":"README.md"}