{"_id":"@cabalcorp/baileys","name":"@cabalcorp/baileys","dist-tags":{"latest":"0.1.15"},"versions":{"0.1.15":{"name":"@cabalcorp/baileys","version":"0.1.15","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/cabalcorp/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/cabalcorp/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":"@cabalcorp/baileys@0.1.15","bugs":{"url":"https://github.com/cabalcorp/baileys/issues"},"_nodeVersion":"25.8.1","_npmVersion":"11.12.0","dist":{"integrity":"sha512-zuHi0ovvtHmVgDr4yrRKhXjPxIMJ1G2wT4VGW64FxMqxx6VEB4PQaLn3yHzY8lw7TQxxlLgVkWHrDDLD5MExeg==","shasum":"089fbfa7a995f4fc1dbc382d60a430752bdb861c","tarball":"https://registry.npmjs.org/@cabalcorp/baileys/-/baileys-0.1.15.tgz","fileCount":106,"unpackedSize":6288558,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGnNJ4AbUCqLhlQJSxom7wEjepth08xazcYIGPMho8eGAiBw7UUMu/7gfZE3pfEs9sdUZW6Jym795UUhDYUIJ+DfyA=="}]},"_npmUser":{"name":"cabalcorp","email":"ceo@cabal.web.id"},"directories":{},"maintainers":[{"name":"cabalcorp","email":"ceo@cabal.web.id"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/baileys_0.1.15_1774608001827_0.10136718064612249"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-27T10:40:01.712Z","0.1.15":"2026-03-27T10:40:02.043Z","modified":"2026-03-27T10:40:02.293Z"},"maintainers":[{"name":"cabalcorp","email":"ceo@cabal.web.id"}],"description":"A simple fork of Baileys for WhatsApp automation","homepage":"https://github.com/cabalcorp/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/cabalcorp/baileys.git"},"author":{"name":"WhiskeySockets"},"bugs":{"url":"https://github.com/cabalcorp/baileys/issues"},"license":"MIT","readme":"# 🌱 @cabalcorp/baileys\n\n![Logo](https://files.catbox.moe/c5s9g0.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]\n📄 This project is maintained with limited scope and is not intended to replace upstream Baileys.\n>\n> 😞 And, really sorry for my bad english.\n\n### 📥 Installation\n\n- 📄 Via `package.json`\n\n```json\n# NPM\n\"dependencies\": {\n   \"@cabalcorp/baileys\": \"latest\"\n}\n\n# GitHub\n\"dependencies\": {\n   \"@cabalcorp/baileys\": \"github:cabalcorp/baileys\"\n}\n```\n\n- ⌨️ Via terminal\n\n```bash\n# NPM\nnpm i @cabalcorp/baileys@latest\n\n# GitHub\nnpm i github:cabalcorp/baileys\n```\n\n#### 🧩 Import (ESM & CJS)\n\n```javascript\n// --- ESM\nimport { makeWASocket } from '@cabalcorp/baileys'\n\n// --- CJS (tested and working on Node.js 24 ✅)\nconst { makeWASocket } = require('@cabalcorp/baileys')\n```\n\n### 🔧 Usage\n\n#### 🌐 Connect to WhatsApp (Quick Step)\n\n```javascript\nimport { makeWASocket, delay, DisconnectReason, useMultiFileAuthState } from '@cabalcorp/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 '@cabalcorp/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:Lia Wynn\\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: 'Lia',\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: '🌟 Lia Wynn',\n   description: '@cabalcorp/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: '@cabalcorp/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: '@cabalcorp/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: '@cabalcorp/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: '@cabalcorp/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: '@cabalcorp/baileys', // --- Optional\n   nativeFlow: [{\n      text: '👋🏻 Greeting',\n      id: '#Greeting'\n   }, {\n      text: '📞 Call',\n      call: '628123456789'\n   }, {\n      text: '📋 Copy',\n      copy: '@cabalcorp/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: '@cabalcorp/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: '@cabalcorp/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: '@cabalcorp/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: '@cabalcorp/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: '@cabalcorp/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('@cabalcorp/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', '📦 @cabalcorp/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('@cabalcorp/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, '📦 @cabalcorp/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)","readmeFilename":"README.md","_rev":"1-1b352ba47b8c9836197b8c0192fc1ba8"}