{"_id":"yonzofficial","_rev":"4-9e29a1de35058d1bbc31cfa1af91a4c8","name":"yonzofficial","dist-tags":{"latest":"2.1.3"},"versions":{"2.1.0":{"name":"yonzofficial","version":"2.1.0","keywords":["levvleys","baileys","whatsapp","whatsapp-api","whatsapp-web","whatsapp-bot","automation","multi-device"],"author":{"name":"LevviCode"},"license":"MIT","_id":"yonzofficial@2.1.0","maintainers":[{"name":"dikaaofficial","email":"budetzzzs560@gmail.com"}],"homepage":"https://github.com/budetzz/mazzbudetzz","bugs":{"url":"https://github.com/budetzz/budetzz/issues"},"dist":{"shasum":"b3a74f55000afcfa85f6e75760c4a4fc7c722d15","tarball":"https://registry.npmjs.org/yonzofficial/-/yonzofficial-2.1.0.tgz","fileCount":100,"integrity":"sha512-Zw0NTrUbTPQ9H9zBpCHizmRbBwn1S5AYvtncInd3e/U2uuUSWTgynBeFaqRWf8A2q6hGdelc7U66cR5x0VCZwA==","signatures":[{"sig":"MEQCIBaw124ZiQO/wrvSjXLbGMeCwZKFu9ZMWqp+fl4OBmucAiANCIGbAc2bhvQKKxdw4647gsrPxJZMFNTVIZL8CY5pLA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7459095},"main":"lib/index.js","types":"lib/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"lint":"node -e \"const { execSync } = require('child_process'); execSync('find lib/ -name \\\"*.js\\\" | xargs -I{} node --check {}'); console.log('LINT_OK');\"","test":"jest","example":"node --inspect -r ts-node/register Example/example.ts","prepack":"echo 'levvleys WhatsApp Library'","prepare":"echo 'levvleys WhatsApp Library'","release":"release-it","lint:fix":"eslint lib --fix --ext .js","build:all":"tsc && typedoc","build:tsc":"tsc","build:docs":"typedoc","preinstall":"node ./engine-requirements.js","gen:protobuf":"sh WAProto/GenerateStatics.sh","changelog:last":"conventional-changelog -p angular -r 2","changelog:update":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","changelog:preview":"conventional-changelog -p angular -u"},"_npmUser":{"name":"dikaaofficial","email":"budetzzzs560@gmail.com"},"repository":{"url":"git+https://github.com/budetzz/budetzz.git","type":"git"},"_npmVersion":"11.17.0","description":"WhatsApp Web API Library","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ws":"^8.13.0","pino":"^9.6","uuid":"^10.0.0","axios":"^1.6.0","chalk":"^4.1.2","lodash":"^4.17.21","cheerio":"^1.0.0-rc.10","p-queue":"^9.0.0","libsignal":"npm:@yonzofficial/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:@yonzofficial/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/yonzofficial_2.1.0_1790079154003_0.976441554212496","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"yonzofficial","version":"2.1.1","keywords":["levvleys","baileys","whatsapp","whatsapp-api","whatsapp-web","whatsapp-bot","automation","multi-device"],"author":{"name":"LevviCode"},"license":"MIT","_id":"yonzofficial@2.1.1","maintainers":[{"name":"dikaaofficial","email":"budetzzzs560@gmail.com"}],"homepage":"https://github.com/budetzz/mazzbudetzz","bugs":{"url":"https://github.com/budetzz/budetzz/issues"},"dist":{"shasum":"0275ca2c9567a9d52484be6140b4d6c230c46e6a","tarball":"https://registry.npmjs.org/yonzofficial/-/yonzofficial-2.1.1.tgz","fileCount":100,"integrity":"sha512-8Eof9uhxMRPpXBVtcU39gh0iiu1SxhWd0J5A246z2KpWzoWUforUVK7RvZ1HZnYJPY62miY9icfjR8k3pM6xkg==","signatures":[{"sig":"MEUCIQDL1efkYvvw3olapdeZzTf9oRNZcXp09BpMZSevAd6P3wIgHbtriitBvr+uF1LuGe+vkaV5vwQK53VE5ZLIfd4lQqw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCXuZdxa2HLnVggjXwumjKLD67ANVe7Gu6vHytHj954GgIgWwX8R3+j07omt9T0ck3aO+nECLj8VVv3hAMOIWPsqQU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7459097},"main":"lib/index.js","types":"lib/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"lint":"node -e \"const { execSync } = require('child_process'); execSync('find lib/ -name \\\"*.js\\\" | xargs -I{} node --check {}'); console.log('LINT_OK');\"","test":"jest","example":"node --inspect -r ts-node/register Example/example.ts","prepack":"echo 'levvleys WhatsApp Library'","prepare":"echo 'levvleys WhatsApp Library'","release":"release-it","lint:fix":"eslint lib --fix --ext .js","build:all":"tsc && typedoc","build:tsc":"tsc","build:docs":"typedoc","preinstall":"node ./engine-requirements.js","gen:protobuf":"sh WAProto/GenerateStatics.sh","changelog:last":"conventional-changelog -p angular -r 2","changelog:update":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","changelog:preview":"conventional-changelog -p angular -u"},"_npmUser":{"name":"dikaaofficial","email":"budetzzzs560@gmail.com"},"repository":{"url":"git+https://github.com/budetzz/budetzz.git","type":"git"},"_npmVersion":"11.17.0","description":"WhatsApp Web API Library","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ws":"^8.13.0","pino":"^9.6","uuid":"^10.0.0","axios":"^1.6.0","chalk":"^4.1.2","lodash":"^4.17.21","cheerio":"^1.0.0-rc.10","p-queue":"^9.0.0","libsignal":"npm:@dikaaofficial/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:@dikaaofficial/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/yonzofficial_2.1.1_1790081023324_0.9052370158210359","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"yonzofficial","version":"2.1.2","keywords":["levvleys","baileys","whatsapp","whatsapp-api","whatsapp-web","whatsapp-bot","automation","multi-device"],"author":{"name":"MazzBudetzz"},"license":"MIT","_id":"yonzofficial@2.1.2","maintainers":[{"name":"dikaaofficial","email":"budetzzzs560@gmail.com"}],"homepage":"https://github.com/budetzz/mazzbudetzz","bugs":{"url":"https://github.com/budetzz/budetzz/issues"},"dist":{"shasum":"318e0834d6ebc7ceaaca74cb4e2855ae61c6f272","tarball":"https://registry.npmjs.org/yonzofficial/-/yonzofficial-2.1.2.tgz","fileCount":100,"integrity":"sha512-D8iaD9Oe/rjYHr551pv77oGYRnaMkGwjDdvbRpK8n7M/U1FWvuJCDdncxdu254VnMcAduHxJiaaWh0mAfQXuGw==","signatures":[{"sig":"MEQCIBelLQEZJlfNg1tqKoFuqu8Y6YS+Tu7siWwyQUyPx7wcAiAxnKz9Bgm3N1TS4TyMVcGmJj3FFMYuuEqIsTtPt/IwZg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDQxgz9ho9mG4ACASXqHJ/oZ5g+DylRazOabCTQiVjFXQIhAP/wXCW+ovVjk11JIVzPEimpTKJWaCdHJz5dmlqciWk0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7459099},"main":"lib/index.js","types":"lib/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"lint":"node -e \"const { execSync } = require('child_process'); execSync('find lib/ -name \\\"*.js\\\" | xargs -I{} node --check {}'); console.log('LINT_OK');\"","test":"jest","example":"node --inspect -r ts-node/register Example/example.ts","prepack":"echo 'levvleys WhatsApp Library'","prepare":"echo 'levvleys WhatsApp Library'","release":"release-it","lint:fix":"eslint lib --fix --ext .js","build:all":"tsc && typedoc","build:tsc":"tsc","build:docs":"typedoc","preinstall":"node ./engine-requirements.js","gen:protobuf":"sh WAProto/GenerateStatics.sh","changelog:last":"conventional-changelog -p angular -r 2","changelog:update":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","changelog:preview":"conventional-changelog -p angular -u"},"_npmUser":{"name":"dikaaofficial","email":"budetzzzs560@gmail.com"},"repository":{"url":"git+https://github.com/budetzz/budetzz.git","type":"git"},"_npmVersion":"11.17.0","description":"WhatsApp Web API Library","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ws":"^8.13.0","pino":"^9.6","uuid":"^10.0.0","axios":"^1.6.0","chalk":"^4.1.2","lodash":"^4.17.21","cheerio":"^1.0.0-rc.10","p-queue":"^9.0.0","libsignal":"npm:@dikaaofficial/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:@dikaaofficial/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/yonzofficial_2.1.2_1790081691398_0.9828538430444591","host":"s3://npm-registry-packages-npm-production"}},"2.1.3":{"_id":"yonzofficial@2.1.3","bugs":{"url":"https://github.com/budetzz/budetzz/issues"},"dist":{"shasum":"7d025f37f002908c8b81d43520c32a7a3a842e6e","tarball":"https://registry.npmjs.org/yonzofficial/-/yonzofficial-2.1.3.tgz","fileCount":100,"integrity":"sha512-fXNvZTA+lWKY6kRBUfmMkZYHnYXnAVRu33IifS05m7VwWU+J4gRO0sV8tIvUU9p9fBsldUwxtgBHbXNkdBgaMA==","signatures":[{"sig":"MEYCIQCPZhmdQgg0sm7vctWJoYrDKLddwd96XIUnMhEpRnVRoQIhAMwKfMpz36HlMLtnABQJPVPieCY2DZdBl/4qMgzSa/V4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBtdcUe6K1OJ5QAUsX0jzjhgZNdb+kBf6MfeJICjrqz4AiAIs5zfWG2A71bOuHWjcAqdio2D25XqK4HsuRx9xWGkTw=="}],"unpackedSize":7459099},"main":"lib/index.js","name":"yonzofficial","types":"lib/index.d.ts","author":{"name":"MazzBudetzz"},"engines":{"node":">=20.0.0"},"license":"MIT","scripts":{"lint":"node -e \"const { execSync } = require('child_process'); execSync('find lib/ -name \\\"*.js\\\" | xargs -I{} node --check {}'); console.log('LINT_OK');\"","test":"jest","example":"node --inspect -r ts-node/register Example/example.ts","prepack":"echo 'levvleys WhatsApp Library'","prepare":"echo 'levvleys WhatsApp Library'","release":"release-it","lint:fix":"eslint lib --fix --ext .js","build:all":"tsc && typedoc","build:tsc":"tsc","build:docs":"typedoc","preinstall":"node ./engine-requirements.js","gen:protobuf":"sh WAProto/GenerateStatics.sh","changelog:last":"conventional-changelog -p angular -r 2","changelog:update":"conventional-changelog -p angular -i CHANGELOG.md -s -r 0","changelog:preview":"conventional-changelog -p angular -u"},"version":"2.1.3","_npmUser":{"name":"dikaaofficial","email":"budetzzzs560@gmail.com"},"homepage":"https://github.com/budetzz/mazzbudetzz","keywords":["levvleys","baileys","whatsapp","whatsapp-api","whatsapp-web","whatsapp-bot","automation","multi-device"],"repository":{"url":"git+https://github.com/budetzz/budetzz.git","type":"git"},"_npmVersion":"11.17.0","description":"WhatsApp Web API Library","directories":{},"maintainers":[{"name":"dikaaofficial","email":"budetzzzs560@gmail.com"}],"_nodeVersion":"24.17.0","dependencies":{"ws":"^8.13.0","pino":"^9.6","uuid":"^10.0.0","axios":"^1.6.0","chalk":"^4.1.2","lodash":"^4.17.21","cheerio":"^1.0.0-rc.10","p-queue":"^9.0.0","libsignal":"npm:@dikaaofficial/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:@dikaaofficial/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/yonzofficial_2.1.3_1790083385790_0.8484563494354329"}}},"time":{"created":"2026-09-22T12:12:33.800Z","modified":"2026-09-22T13:23:06.111Z","2.1.0":"2026-09-22T12:12:34.143Z","2.1.1":"2026-09-22T12:43:43.429Z","2.1.2":"2026-09-22T12:54:51.510Z","2.1.3":"2026-09-22T13:23:05.943Z"},"bugs":{"url":"https://github.com/budetzz/budetzz/issues"},"author":{"name":"MazzBudetzz"},"license":"MIT","homepage":"https://github.com/budetzz/mazzbudetzz","keywords":["levvleys","baileys","whatsapp","whatsapp-api","whatsapp-web","whatsapp-bot","automation","multi-device"],"repository":{"url":"git+https://github.com/budetzz/budetzz.git","type":"git"},"description":"WhatsApp Web API Library","maintainers":[{"name":"dikaaofficial","email":"budetzzzs560@gmail.com"}],"readme":"# <div align='center'>MazzBudetzz</div>\n\n<div align='center'>\n\n[![npm version](https://img.shields.io/npm/v/yonzofficial.svg)](https://www.npmjs.com/package/yonzofficial)\n[![License](https://img.shields.io/badge/license-GPL%203-blue.svg)](LICENSE)\n[![Downloads](https://img.shields.io/npm/dm/yonzofficial.svg)](https://www.npmjs.com/package/yonzofficial)\n\n</div>\n\n<div align=\"center\">\n  <strong>yonzofficial</strong> — WhatsApp API Multi‑Device Modern untuk bot dan aplikasi berbasis Node.js.\n</div>\n\n---\n\n## 💝 Donasi\n\nDukung pengembangan proyek ini melalui:\n\n- **Saweria**: [https://saweria.co/mazzbudetzz](https://saweria.co/mazzbudetzz\n\n---\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 yonzofficial\n```\n\nVersi Terbaru (Edge)\n\n```bash\nnpm install yonzofficial@latest\n# atau dengan yarn\nyarn add yonzofficial@latest\n```\n\nCara Impor\n\n```javascript\n// CommonJS\nconst { default: makeWASocket } = require(\"yonzofficial\")\n\n// ES6 Module\nimport makeWASocket from \"yonzofficial\"\n```\n\n---\n\n🚀 Mulai Cepat\n\nContoh Dasar (dengan QR Code)\n\n```javascript\nconst { default: makeWASocket, DisconnectReason, useMultiFileAuthState } = require('yonzofficial')\nconst { Boom } = require('@hapi/boom')\n\nasync function connectToWhatsApp() {\n    // Simpan kredensial di folder 'auth_info_yonzofficial'\n    const { state, saveCreds } = await useMultiFileAuthState('auth_info_yonzofficial')\n    \n    const sock = makeWASocket({\n        auth: state,\n        printQRInTerminal: true,\n        browser: ['LevviCode', '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 yonzofficial 🤖' \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 yonzofficial terautentikasi sebagai klien WhatsApp sekunder melalui QR code atau pairing code.\n\nHubungkan dengan QR Code\n\n```javascript\nconst { default: makeWASocket, Browsers } = require(\"yonzofficial\")\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(\"yonzofficial\")\n\nconst sock = makeWASocket({\n    printQRInTerminal: false\n})\n\n// Pairing normal\nif (!sock.authState.creds.registered) {\n    const number = '6285134816783' // 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 = \"LEVVCODE\"\n    const number = '6285134816783'\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(\"yonzofficial\")\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(\"yonzofficial\")\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(\"yonzofficial\")\n\nasync function connect() {\n    const { state, saveCreds } = await useMultiFileAuthState('auth_info_yonzofficial')\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\nyonzofficial tidak menyertakan penyimpanan default untuk obrolan, kontak, atau pesan. Namun, implementasi in‑memory sederhana disediakan.\n\n```javascript\nconst { default: makeWASocket, makeInMemoryStore } = require(\"yonzofficial\")\n\nconst store = makeInMemoryStore({ })\n\nstore.readFromFile('./yonzofficial_store.json')\n\nsetInterval(() => {\n    store.writeToFile('./yonzofficial_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/yonzofficial'\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 'yonzofficial'\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('yonzofficial')\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>MazzBudetzz</strong> — yonzofficial<br>\n  WhatsApp API Modern dengan Perbaikan @lid Ke @pn\n</div>\n","readmeFilename":"README.MD"}