{"_id":"baileys-xbats","_rev":"4-7cc6cf313548b37262d5c1a118ba52a0","name":"baileys-xbats","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.0":{"name":"baileys-xbats","version":"1.0.0","keywords":["noxXza","noxleyss","latest","last","baileys","whatsapp","whatsapp-api","whatsapp-web","whatsapp-bot","automation","multi-device"],"author":{"name":"XbatsOffc"},"license":"MIT","_id":"baileys-xbats@1.0.0","maintainers":[{"name":"xbattss","email":"merialqiano@gmail.com"}],"dist":{"shasum":"f11846be25b3cfbbd69b20d03ea6d43e0d1d929b","tarball":"https://registry.npmjs.org/baileys-xbats/-/baileys-xbats-1.0.0.tgz","fileCount":99,"integrity":"sha512-zIBft6f+aTaHEmrjS+Lbc/vWm4sWXJ2zSHMVSi4a6kLLUi7qecP/V1Ceb1wQILFWCkg/yimIg93dlRh3i/vwpA==","signatures":[{"sig":"MEUCIQCEy0TTS74sFjJjZTSq8sbWejZtTMF0vELvwg6IiiZIsAIgH9//CCDX136VM8XEsoeYHe+tSPw7WzbLfnmKERbyGdM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7446310},"main":"lib/index.js","types":"lib/index.d.ts","engines":{"node":">=20.0.0"},"_npmUser":{"name":"xbattss","email":"merialqiano@gmail.com"},"_npmVersion":"10.8.2","description":"WhatsApp Web API Library","directories":{},"_nodeVersion":"20.20.2","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","p-queue":"^9.0.0","libsignal":"npm:@noxzaid/libsignal-node","lru-cache":"^11.1.0","@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,"devDependencies":{"jest":"^27.0.6","jimp":"^0.22.12","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":"npm:@noxzaid/eslint-config","conventional-changelog-cli":"^2.2.2"},"peerDependencies":{"jimp":"^0.22.12","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/baileys-xbats_1.0.0_1789817418214_0.39445610292211075","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"baileys-xbats","version":"1.0.1","keywords":["noxXza","noxleyss","latest","last","baileys","whatsapp","whatsapp-api","whatsapp-web","whatsapp-bot","automation","multi-device"],"author":{"name":"XbatsOffc"},"license":"MIT","_id":"baileys-xbats@1.0.1","maintainers":[{"name":"xbattss","email":"merialqiano@gmail.com"}],"dist":{"shasum":"f53b859b64d105f57a1bd2265efa37386f222a81","tarball":"https://registry.npmjs.org/baileys-xbats/-/baileys-xbats-1.0.1.tgz","fileCount":99,"integrity":"sha512-MbjKLeg+EzwoSmpxe2MfB7nyKrEh6l1TL58c0NE8mjvk0c3tEK7lUoo0gwREZ1ZtbB0LoBV2HjOrwvQI8lXyVw==","signatures":[{"sig":"MEUCIBXxOPdX8n3FAoSragZsqECuzslpa0/hf7gcCA8RDGviAiEA4LnFU6mkcU8gbR4ONY1xQvc+xBC+NCGwFwMjYQvLJvw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD2C1n8tRQOElI3kH2+QRVG6NnmeGFeI9WjRJXRDtB8oQIhAOa8LZeudCbX/n1Bu/a/EUpxb3geDIBm2qjq+c+6B5hG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7445437},"main":"lib/index.js","types":"lib/index.d.ts","engines":{"node":">=20.0.0"},"_npmUser":{"name":"xbattss","email":"merialqiano@gmail.com"},"_npmVersion":"10.8.2","description":"WhatsApp Web API Library","directories":{},"_nodeVersion":"20.20.2","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","p-queue":"^9.0.0","libsignal":"npm:@noxzaid/libsignal-node","lru-cache":"^11.1.0","@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,"devDependencies":{"jest":"^27.0.6","jimp":"^0.22.12","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":"npm:@noxzaid/eslint-config","conventional-changelog-cli":"^2.2.2"},"peerDependencies":{"jimp":"^0.22.12","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/baileys-xbats_1.0.1_1789823744224_0.9760082087457322","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"baileys-xbats","version":"1.0.2","keywords":["noxXza","noxleyss","latest","last","baileys","whatsapp","whatsapp-api","whatsapp-web","whatsapp-bot","automation","multi-device"],"author":{"name":"XbatsOffc"},"license":"MIT","_id":"baileys-xbats@1.0.2","maintainers":[{"name":"xbattss","email":"merialqiano@gmail.com"}],"dist":{"shasum":"f085d051b23c10eb0c6852b08cb3cccd5b22c5e2","tarball":"https://registry.npmjs.org/baileys-xbats/-/baileys-xbats-1.0.2.tgz","fileCount":99,"integrity":"sha512-6D6YNYHYbVp4rcSVWtKMSZAU6+7mefEHZXLCvTqSg6CzUMxHeoGTl1026pJSWnCgMwPMFJc/qNKHmcbpswZC3w==","signatures":[{"sig":"MEUCIQCP3kW7DwpTYrAh8nOj4k5D8khdAnU9d9bBwdjFRLr02gIgbnT3xzCKMYofrJCfdPMF2vGZwlssREnEHOeGBg0Iny4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHdF0c55BpDKdkalMcyllUCd9eGfBP+05wxdxg1cSCgIAiApLsjOuVTP2+Hrku1OQvecqwzMuRFtr+MPKG02PBloqg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7445921},"main":"lib/index.js","types":"lib/index.d.ts","engines":{"node":">=20.0.0"},"_npmUser":{"name":"xbattss","email":"merialqiano@gmail.com"},"_npmVersion":"10.8.2","description":"WhatsApp Web API Library","directories":{},"_nodeVersion":"20.20.2","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","p-queue":"^9.0.0","libsignal":"npm:@noxzaid/libsignal-node","lru-cache":"^11.1.0","@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,"devDependencies":{"jest":"^27.0.6","jimp":"^0.22.12","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":"npm:@noxzaid/eslint-config","conventional-changelog-cli":"^2.2.2"},"peerDependencies":{"jimp":"^0.22.12","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/baileys-xbats_1.0.2_1789826997836_0.5037518204180307","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"_id":"baileys-xbats@1.0.3","dist":{"shasum":"25c2646def2cafbaf7b1f7c12a0bab8471d9fb5b","tarball":"https://registry.npmjs.org/baileys-xbats/-/baileys-xbats-1.0.3.tgz","fileCount":99,"integrity":"sha512-wn+wReomrOOh3D9dnTcThFBfgKAMoJi61y0BoSIjSxhalk8d7rMMYhZISQWvJiiRCpGHvw+zzdVYZhk/PIjlag==","signatures":[{"sig":"MEUCIQDzNBn0r2Qn2RHLQJ19tvgK3pRn3Wob0THSpWcTiArQMwIgFgaRTDqGbNqxPR8NtkxELhYmf7Mei7Xh4LO+4cLw31o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD5ewMZKhaQvbjerN3kVJQqzwP43g6uzj8bizXrA/CNxgIgGECLmFk0BUExj1VqajmpiORNFJaR4RbdNzSzupA8sq0="}],"unpackedSize":7444644},"main":"lib/index.js","name":"baileys-xbats","types":"lib/index.d.ts","author":{"name":"XbatsOffc"},"engines":{"node":">=20.0.0"},"license":"MIT","version":"1.0.3","_npmUser":{"name":"xbattss","email":"merialqiano@gmail.com"},"keywords":["noxXza","noxleyss","latest","last","baileys","whatsapp","whatsapp-api","whatsapp-web","whatsapp-bot","automation","multi-device"],"_npmVersion":"10.8.2","description":"WhatsApp Web API Library","directories":{},"maintainers":[{"name":"xbattss","email":"merialqiano@gmail.com"}],"_nodeVersion":"20.20.2","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","p-queue":"^9.0.0","libsignal":"npm:@noxzaid/libsignal-node","lru-cache":"^11.1.0","@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,"devDependencies":{"jest":"^27.0.6","jimp":"^0.22.12","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":"npm:@noxzaid/eslint-config","conventional-changelog-cli":"^2.2.2"},"peerDependencies":{"jimp":"^0.22.12","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":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/baileys-xbats_1.0.3_1789831691168_0.575204308783889"}}},"time":{"created":"2026-09-19T11:30:17.998Z","modified":"2026-09-19T15:28:11.509Z","1.0.0":"2026-09-19T11:30:18.388Z","1.0.1":"2026-09-19T13:15:44.358Z","1.0.2":"2026-09-19T14:09:57.945Z","1.0.3":"2026-09-19T15:28:11.301Z"},"author":{"name":"XbatsOffc"},"license":"MIT","keywords":["noxXza","noxleyss","latest","last","baileys","whatsapp","whatsapp-api","whatsapp-web","whatsapp-bot","automation","multi-device"],"description":"WhatsApp Web API Library","maintainers":[{"name":"xbattss","email":"merialqiano@gmail.com"}],"readme":"# <div align='center'>noxleyss</div>\n\n<div align='center'>\n\n[![npm version](https://img.shields.io/npm/v/noxleyss.svg)](https://www.npmjs.com/package/noxleyss)\n[![License](https://img.shields.io/badge/license-GPL%203-blue.svg)](LICENSE)\n[![Downloads](https://img.shields.io/npm/dm/noxleyss.svg)](https://www.npmjs.com/package/noxleyss)\n\n</div>\n\n<div align=\"center\">\n  <strong>noxleyss</strong> — WhatsApp API Multi‑Device Modern untuk bot dan aplikasi berbasis Node.js.\n</div>\n\n## ✨ Fitur Utama\n\n- 🚀 **Modern & Cepat** – Dibangun dengan TypeScript dan teknologi terkini.\n- 🔧 **Perbaikan @lid & @jid** – Mengatasi masalah ID lokal ke ID ponsel di grup WhatsApp.\n- 📱 **Dukungan Multi‑Device** – Koneksi penuh ke WhatsApp Multi‑Device.\n- 🔐 **Enkripsi End‑to‑End** – Semua pesan terenkripsi.\n- 📨 **Semua Jenis Pesan** – Teks, media (gambar, video, audio), polling, stiker, lokasi, kontak, dan lainnya.\n- 🧩 **Ringan & Optimal** – Performa stabil dengan dukungan streaming media.\n- 📂 **Manajemen Autentikasi** – Simpan kredensial di file atau database.\n\n---\n\n## ⚠️ Peringatan\n\nProyek ini **tidak berafiliasi, didukung, atau terhubung secara resmi** dengan WhatsApp atau anak perusahaannya. Situs resmi WhatsApp: [whatsapp.com](https://whatsapp.com).\n\nPengguna bertanggung jawab penuh atas penggunaan aplikasi ini. Hindari spam dan otomatisasi berlebihan yang melanggar Ketentuan Layanan WhatsApp.\n\n---\n\n## 📦 Instalasi\n\n### Versi Stabil (Direkomendasikan)\n\n```bash\nnpm install noxleyss\n```\n\nVersi Terbaru (Edge)\n\n```bash\nnpm install noxleyss@latest\n# atau dengan yarn\nyarn add noxleyss@latest\n```\n\nCara Impor\n\n```javascript\n// CommonJS\nconst { default: makeWASocket } = require(\"noxleyss\")\n\n// ES6 Module\nimport makeWASocket from \"noxleyss\"\n```\n\n---\n\n🚀 Mulai Cepat\n\nContoh Dasar (dengan QR Code)\n\n```javascript\nconst { default: makeWASocket, DisconnectReason, useMultiFileAuthState } = require('noxleyss')\nconst { Boom } = require('@hapi/boom')\n\nasync function connectToWhatsApp() {\n    // Simpan kredensial di folder 'auth_info_noxleyss'\n    const { state, saveCreds } = await useMultiFileAuthState('auth_info_noxleyss')\n    \n    const sock = makeWASocket({\n        auth: state,\n        printQRInTerminal: true,\n        browser: ['noxleyss', 'Desktop', '3.0']\n    })\n\n    // Event koneksi\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('Koneksi tertutup, reconnecting:', shouldReconnect)\n            if (shouldReconnect) connectToWhatsApp()\n        } else if (connection === 'open') {\n            console.log('✅ Berhasil terhubung ke WhatsApp!')\n        }\n    })\n\n    // Event pesan masuk\n    sock.ev.on('messages.upsert', async ({ messages }) => {\n        for (const m of messages) {\n            if (!m.message) continue\n            console.log('📱 Pesan baru:', JSON.stringify(m, undefined, 2))\n            \n            // Balas otomatis\n            await sock.sendMessage(m.key.remoteJid!, { \n                text: 'Halo! Saya bot WhatsApp menggunakan noxleyss 🤖' \n            })\n        }\n    })\n\n    // Simpan kredensial saat diperbarui\n    sock.ev.on('creds.update', saveCreds)\n}\n\nconnectToWhatsApp()\n```\n\n---\n\n🔌 Koneksi Akun\n\nWhatsApp menyediakan API multi‑device yang memungkinkan noxleyss terautentikasi sebagai klien WhatsApp sekunder melalui QR code atau pairing code.\n\nHubungkan dengan QR Code\n\n```javascript\nconst { default: makeWASocket, Browsers } = require(\"noxleyss\")\n\nconst sock = makeWASocket({\n    browser: Browsers.ubuntu('My App'),\n    printQRInTerminal: true\n})\n```\n\nSetelah koneksi berhasil, QR code akan muncul di terminal. Pindai dengan WhatsApp di ponsel Anda untuk login.\n\nHubungkan dengan Pairing Code\n\nPenting: Pairing code memungkinkan koneksi tanpa QR code. Nomor telepon harus tanpa +, (), atau -, dan sertakan kode negara.\n\n```javascript\nconst { default: makeWASocket } = require(\"noxleyss\")\n\nconst sock = makeWASocket({\n    printQRInTerminal: false\n})\n\n// Pairing normal\nif (!sock.authState.creds.registered) {\n    const number = '6283134600805' // ganti dengan nomor Anda\n    const code = await sock.requestPairingCode(number)\n    console.log('🔑 Kode Pairing:', code)\n}\n\n// Pairing dengan kode kustom (8 karakter)\nif (!sock.authState.creds.registered) {\n    const pair = \"noxleyss\"\n    const number = '6283134600805'\n    const code = await sock.requestPairingCode(number, pair)\n    console.log('🔑 Kode Pairing Kustom:', code)\n}\n```\n\nTerima Riwayat Lengkap\n\nUntuk menerima riwayat pesan lengkap, setel syncFullHistory ke true.\n\n```javascript\nconst { default: makeWASocket, Browsers } = require(\"noxleyss\")\n\nconst sock = makeWASocket({\n    browser: Browsers.macOS('Desktop'),\n    syncFullHistory: true\n})\n```\n\n---\n\n⚙️ Catatan Penting Konfigurasi Socket\n\nCaching Metadata Grup (Direkomendasikan)\n\nUntuk penggunaan grup, implementasikan caching metadata grup:\n\n```javascript\nconst { default: makeWASocket } = require(\"noxleyss\")\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\nPerbaiki Sistem Retry & Dekripsi Vote Poll\n\nTingkatkan pengiriman pesan dan dekripsi vote poll dengan store:\n\n```javascript\nconst sock = makeWASocket({\n    getMessage: async (key) => await getMessageFromStore(key)\n})\n```\n\nTerima Notifikasi di Aplikasi WhatsApp\n\nNonaktifkan status online untuk menerima notifikasi:\n\n```javascript\nconst sock = makeWASocket({\n    markOnlineOnConnect: false\n})\n```\n\n---\n\n💾 Simpan Info Auth\n\nHindari pemindaian QR code berulang dengan menyimpan kredensial:\n\n```javascript\nconst { default: makeWASocket, useMultiFileAuthState } = require(\"noxleyss\")\n\nasync function connect() {\n    const { state, saveCreds } = await useMultiFileAuthState('auth_info_noxleyss')\n    const sock = makeWASocket({ auth: state })\n    sock.ev.on('creds.update', saveCreds)\n}\n\nconnect()\n```\n\nPenting: useMultiFileAuthState menyimpan status auth di folder. Untuk produksi, gunakan database SQL/No‑SQL dan kelola update kunci dengan hati‑hati.\n\n---\n\n🗄️ Implementasi Data Store\n\nnoxleyss tidak menyertakan penyimpanan default untuk obrolan, kontak, atau pesan. Namun, implementasi in‑memory sederhana disediakan.\n\n```javascript\nconst { default: makeWASocket, makeInMemoryStore } = require(\"noxleyss\")\n\nconst store = makeInMemoryStore({ })\n\nstore.readFromFile('./noxleyss_store.json')\n\nsetInterval(() => {\n    store.writeToFile('./noxleyss_store.json')\n}, 10_000)\n\nconst sock = makeWASocket({ })\nstore.bind(sock.ev)\n\nsock.ev.on('chats.upsert', () => {\n    console.log('dapat obrolan', store.chats.all())\n})\n\nsock.ev.on('contacts.upsert', () => {\n    console.log('dapat kontak', Object.values(store.contacts))\n})\n```\n\n---\n\n🆔 Penjelasan ID WhatsApp\n\nid adalah ID WhatsApp, disebut juga jid, untuk orang atau grup tujuan pesan.\n\n· Orang: [kode negara][nomor telepon]@s.whatsapp.net\n    Contoh: +19999999999@s.whatsapp.net\n· Grup: 123456789-123345@g.us\n· Daftar siaran: [timestamp pembuatan]@broadcast\n· Cerita: status@broadcast\n\n---\n\n🔧 Fungsi Utilitas\n\n· getContentType – Mengembalikan tipe konten pesan\n· getDevice – Mengembalikan perangkat dari pesan\n· makeCacheableSignalKeyStore – Mempercepat store auth\n· downloadContentFromMessage – Unduh konten dari pesan\n\n---\n\n📤 Kirim Pesan\n\nKirim semua jenis pesan dengan satu fungsi.\n\n```javascript\nsock.sendMessage(jid, content, options)\n```\n\nPesan Non‑Media\n\nPesan Teks\n\n```javascript\nawait sock.sendMessage(jid, { text: 'halo dunia' })\n```\n\nPesan Kutipan (bekerja dengan semua tipe)\n\n```javascript\nawait sock.sendMessage(jid, { text: 'halo dunia' }, { quoted: message })\n```\n\nSebut Pengguna\n\n```javascript\nawait sock.sendMessage(\n    jid,\n    {\n        text: '@12345678901',\n        mentions: ['12345678901@s.whatsapp.net']\n    }\n)\n```\n\nTeruskan Pesan\n\n```javascript\nconst msg = getMessageFromStore() // implementasikan sendiri\nawait sock.sendMessage(jid, { forward: msg })\n```\n\nPesan Lokasi\n\n```javascript\nawait sock.sendMessage(\n    jid, \n    {\n        location: {\n            degreesLatitude: 24.121231,\n            degreesLongitude: 55.1121221\n        }\n    }\n)\n```\n\nPesan Kontak (vCard)\n\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=911234567890:+91 12345 67890\\n' \n            + 'END:VCARD'\n\nawait sock.sendMessage(\n    id,\n    { \n        contacts: { \n            displayName: 'Jeff', \n            contacts: [{ vcard }] \n        }\n    }\n)\n```\n\nPesan Reaksi\n\n```javascript\nawait sock.sendMessage(\n    jid,\n    {\n        react: {\n            text: '💖', // kosongkan untuk hapus reaksi\n            key: message.key\n        }\n    }\n)\n```\n\nPin Pesan\n\n```javascript\nawait sock.sendMessage(\n    jid,\n    {\n        pin: {\n            type: 1, // 0 untuk hapus\n            time: 86400, // 24 jam dalam detik\n            key: message.key\n        }\n    }\n)\n```\n\nPesan Poll\n\n```javascript\nawait sock.sendMessage(\n    jid,\n    {\n        poll: {\n            name: 'Poll Saya',\n            values: ['Opsi 1', 'Opsi 2', 'Opsi 3'],\n            selectableCount: 1,\n            toAnnouncementGroup: false\n        }\n    }\n)\n```\n\nKirim dengan Pratinjau Tautan\n\nInstal link-preview-js:\n\n```bash\nnpm install link-preview-js\n```\n\n```javascript\nawait sock.sendMessage(\n    jid,\n    {\n        text: 'Halo, ini dikirim menggunakan https://npmjs.com/noxleyss'\n    }\n)\n```\n\nPesan Media\n\nCatatan: Di pesan media, bisa gunakan { stream: Stream }, { url: Url }, atau Buffer langsung.\n\nKirim Gambar\n\n```javascript\nawait sock.sendMessage(\n    id, \n    { \n        image: {\n            url: './Media/ma_img.png'\n        },\n        caption: 'halo dunia'\n    }\n)\n```\n\nKirim Video\n\n```javascript\nawait sock.sendMessage(\n    id, \n    { \n        video: {\n            url: './Media/ma_video.mp4'\n        },\n        caption: 'halo dunia',\n        ptv: false // true untuk video note\n    }\n)\n```\n\nKirim GIF\n\n```javascript\nawait sock.sendMessage(\n    jid, \n    { \n        video: fs.readFileSync('Media/ma_gif.mp4'),\n        caption: 'halo dunia',\n        gifPlayback: true\n    }\n)\n```\n\nKirim Audio\n\n```javascript\nawait sock.sendMessage(\n    jid, \n    {\n        audio: {\n            url: './Media/audio.mp3'\n        },\n        mimetype: 'audio/mp4'\n    }\n)\n```\n\nView Once\n\n```javascript\nawait sock.sendMessage(\n    id, \n    { \n        image: {\n            url: './Media/ma_img.png'\n        },\n        viewOnce: true,\n        caption: 'halo dunia'\n    }\n)\n```\n\n---\n\n✏️ Ubah Pesan\n\nHapus Pesan (untuk semua)\n\n```javascript\nconst msg = await sock.sendMessage(jid, { text: 'halo dunia' })\nawait sock.sendMessage(jid, { delete: msg.key })\n```\n\nEdit Pesan\n\n```javascript\nawait sock.sendMessage(jid, {\n    text: 'teks terupdate di sini',\n    edit: response.key,\n})\n```\n\n---\n\n🖼️ Manipulasi Pesan Media\n\nUnduh Pesan Media\n\n```javascript\nimport { createWriteStream } from 'fs'\nimport { downloadMediaMessage, getContentType } from 'noxleyss'\n\nsock.ev.on('messages.upsert', async ({ messages: [m] }) => {\n    if (!m.message) return\n    const messageType = getContentType(m)\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---\n\n📞 Tolak Panggilan\n\n```javascript\nawait sock.rejectCall(callId, callFrom)\n```\n\n---\n\n💬 Status Kirim di Obrolan\n\nBaca Pesan\n\n```javascript\nawait sock.readMessages([key]) // bisa multiple kunci\n```\n\nUpdate Kehadiran\n\n```javascript\nawait sock.sendPresenceUpdate('available', jid) \nawait sock.sendPresenceUpdate('composing', jid)\n```\n\n---\n\n📁 Ubah Obrolan\n\nArsipkan Obrolan\n\n```javascript\nconst lastMsgInChat = await getLastMessageInChat(jid) // implementasikan sendiri\nawait sock.chatModify({ archive: true, lastMessages: [lastMsgInChat] }, jid)\n```\n\nBisukan/Buka Bisukan Obrolan\n\n```javascript\n// Bisukan 8 jam\nawait sock.chatModify({ mute: 8 * 60 * 60 * 1000 }, jid)\n// Buka bisukan\nawait sock.chatModify({ mute: null }, jid)\n```\n\nTandai Obrolan Dibaca/Tidak Dibaca\n\n```javascript\nconst lastMsgInChat = await getLastMessageInChat(jid)\nawait sock.chatModify({ markRead: false, lastMessages: [lastMsgInChat] }, jid)\n```\n\nHapus Pesan untuk Saya\n\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\nHapus Obrolan\n\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\nPin/Hapus Pin Obrolan\n\n```javascript\nawait sock.chatModify({ pin: true }, jid)   // pin\nawait sock.chatModify({ pin: false }, jid) // hapus pin\n```\n\nBintangi/Hapus Bintang Pesan\n\n```javascript\nawait sock.chatModify({\n    star: {\n        messages: [\n            {\n                id: 'messageID',\n                fromMe: true\n            }\n        ],\n        star: true // atau false untuk hapus bintang\n    }\n}, jid)\n```\n\nPesan Menghilang\n\n```javascript\n// Nyalakan pesan menghilang (7 hari default)\nawait sock.sendMessage(\n    jid, \n    { disappearingMessagesInChat: 604800 } // 7 hari dalam detik\n)\n\n// Kirim sebagai pesan menghilang\nawait sock.sendMessage(jid, { text: 'halo' }, { ephemeralExpiration: 604800 })\n\n// Matikan\nawait sock.sendMessage(\n    jid, \n    { disappearingMessagesInChat: false }\n)\n```\n\n---\n\n👤 Query Pengguna\n\nPeriksa ID Ada di WhatsApp\n\n```javascript\nconst [result] = await sock.onWhatsApp(jid)\nif (result.exists) console.log(`${jid} ada di WhatsApp, sebagai jid: ${result.jid}`)\n```\n\nQuery Riwayat Obrolan\n\n```javascript\nconst msg = await getOldestMessageInChat(jid) // implementasikan sendiri\nawait sock.fetchMessageHistory(\n    50, // jumlah (max: 50 per query)\n    msg.key,\n    msg.messageTimestamp\n)\n```\n\nAmbil Status\n\n```javascript\nconst status = await sock.fetchStatus(jid)\nconsole.log('status: ' + status)\n```\n\nAmbil Foto Profil (grup juga)\n\n```javascript\n// resolusi rendah\nconst ppUrl = await sock.profilePictureUrl(jid)\nconsole.log(ppUrl)\n\n// resolusi tinggi\nconst ppUrlHigh = await sock.profilePictureUrl(jid, 'image')\n```\n\nAmbil Profil Bisnis\n\n```javascript\nconst profile = await sock.getBusinessProfile(jid)\nconsole.log('deskripsi: ' + profile.description + ', kategori: ' + profile.category)\n```\n\nAmbil Kehadiran Seseorang\n\n```javascript\nsock.ev.on('presence.update', console.log)\nawait sock.presenceSubscribe(jid) \n```\n\n---\n\n🔄 Ubah Profil\n\nUbah Status Profil\n\n```javascript\nawait sock.updateProfileStatus('Halo Dunia!')\n```\n\nUbah Nama Profil\n\n```javascript\nawait sock.updateProfileName('Nama Saya')\n```\n\nUbah Foto Tampilan (grup juga)\n\n```javascript\nawait sock.updateProfilePicture(jid, { url: './new-profile-picture.jpeg' })\n```\n\nHapus Foto Tampilan (grup juga)\n\n```javascript\nawait sock.removeProfilePicture(jid)\n```\n\n---\n\n👥 Grup\n\nBuat Grup\n\n```javascript\nconst group = await sock.groupCreate('Grup Saya', ['1234@s.whatsapp.net', '4564@s.whatsapp.net'])\nconsole.log('grup dibuat dengan id: ' + group.gid)\n```\n\nTambah/Hapus atau Turunkan/Naikkan\n\n```javascript\nawait sock.groupParticipantsUpdate(\n    jid, \n    ['abcd@s.whatsapp.net', 'efgh@s.whatsapp.net'],\n    'add' // 'remove', 'demote', atau 'promote'\n)\n```\n\nUbah Subjek (nama)\n\n```javascript\nawait sock.groupUpdateSubject(jid, 'Subjek Baru!')\n```\n\nUbah Deskripsi\n\n```javascript\nawait sock.groupUpdateDescription(jid, 'Deskripsi Baru!')\n```\n\nUbah Pengaturan\n\n```javascript\n// Hanya admin kirim pesan\nawait sock.groupSettingUpdate(jid, 'announcement')\n// Semua bisa kirim\nawait sock.groupSettingUpdate(jid, 'not_announcement')\n// Semua bisa ubah pengaturan grup\nawait sock.groupSettingUpdate(jid, 'unlocked')\n// Hanya admin ubah pengaturan\nawait sock.groupSettingUpdate(jid, 'locked')\n```\n\nKeluar Grup\n\n```javascript\nawait sock.groupLeave(jid)\n```\n\nAmbil Kode Undangan\n\n```javascript\nconst code = await sock.groupInviteCode(jid)\nconsole.log('https://chat.whatsapp.com/' + code)\n```\n\nCabut Kode Undangan\n\n```javascript\nconst code = await sock.groupRevokeInvite(jid)\nconsole.log('Kode grup baru: ' + code)\n```\n\nGabung Menggunakan Kode Undangan\n\n```javascript\nconst response = await sock.groupAcceptInvite(code)\nconsole.log('bergabung ke: ' + response)\n```\n\nAmbil Info Grup dari Kode Undangan\n\n```javascript\nconst response = await sock.groupGetInviteInfo(code)\nconsole.log('info grup: ' + response)\n```\n\nQuery Metadata\n\n```javascript\nconst metadata = await sock.groupMetadata(jid) \nconsole.log(metadata.id + ', judul: ' + metadata.subject + ', deskripsi: ' + metadata.desc)\n```\n\nAmbil Semua Metadata Grup yang Diikuti\n\n```javascript\nconst response = await sock.groupFetchAllParticipating()\nconsole.log(response)\n```\n\nToggle Ephemeral\n\n```javascript\nawait sock.groupToggleEphemeral(jid, 86400) // 24 jam\n```\n\nUbah Mode Tambah\n\n```javascript\nawait sock.groupMemberAddMode(\n    jid,\n    'all_member_add' // atau 'admin_add'\n)\n```\n\n---\n\n🔒 Privasi\n\nBlokir/Buka Blokir Pengguna\n\n```javascript\nawait sock.updateBlockStatus(jid, 'block')\nawait sock.updateBlockStatus(jid, 'unblock')\n```\n\nAmbil Pengaturan Privasi\n\n```javascript\nconst privacySettings = await sock.fetchPrivacySettings(true)\nconsole.log(privacySettings)\n```\n\nAmbil Daftar Blokir\n\n```javascript\nconst blocklist = await sock.fetchBlocklist()\nconsole.log(blocklist)\n```\n\nUpdate Privasi\n\n```javascript\nawait sock.updateLastSeenPrivacy('contacts')\nawait sock.updateOnlinePrivacy('all')\nawait sock.updateProfilePicturePrivacy('contacts')\nawait sock.updateStatusPrivacy('none')\nawait sock.updateReadReceiptsPrivacy('all')\nawait sock.updateGroupsAddPrivacy('contacts')\nawait sock.updateDefaultDisappearingMode(86400) // 24 jam\n```\n\n---\n\n📢 Daftar Siaran & Cerita\n\nKirim Siaran & Cerita\n\n```javascript\nawait sock.sendMessage(\n    jid,\n    {\n        image: {\n            url: url\n        },\n        caption: caption\n    },\n    {\n        backgroundColor: backgroundColor,\n        font: font,\n        statusJidList: statusJidList,\n        broadcast: true\n    }\n)\n```\n\nQuery Penerima & Nama Daftar Siaran\n\n```javascript\nconst bList = await sock.getBroadcastListInfo('1234@broadcast')\nconsole.log(`nama daftar: ${bList.name}, penerima: ${bList.recipients}`)\n```\n\n---\n\n🛠️ Fungsi Kustom\n\nAktifkan Level Debug\n\n```javascript\nconst { P } = require('noxleyss')\n\nconst sock = makeWASocket({\n    logger: P({ level: 'debug' }),\n})\n```\n\nDaftarkan Callback untuk Event Websocket\n\n```javascript\n// Untuk tag 'edge_routing'\nsock.ws.on('CB:edge_routing', (node) => { })\n\n// Dengan id 'abcd'\nsock.ws.on('CB:edge_routing,id:abcd', (node) => { })\n\n// Dengan node routing_info\nsock.ws.on('CB:edge_routing,id:abcd,routing_info', (node) => { })\n```\n\n---\n\n💡 Tips & Praktik Terbaik\n\n· Gunakan Caching – Cache metadata grup untuk performa lebih baik.\n· Tangani Rekoneksi – Implementasikan auto‑reconnect untuk kestabilan.\n· Kelola Store – Gunakan database (MongoDB, PostgreSQL) untuk produksi.\n· Penanganan Error – Bungkus panggilan socket dengan try‑catch.\n· Batas Rate – Hormati batas WhatsApp untuk hindari ban.\n· Keamanan – Jangan bagikan kredensial auth; gunakan variabel lingkungan.\n\n---\n\n📄 Lisensi\n\nDidistribusikan di bawah Lisensi GPL‑3.0. Lihat file LICENSE untuk informasi lebih lanjut.\n\n---\n<div align=\"center\">\n  <strong>noxleyss</strong> — noxleyss<br>\n  WhatsApp API Modern dengan Perbaikan @lid Ke @pn\n</div>\n","readmeFilename":"README.MD"}