{"_id":"rafael-bails","_rev":"11-b24a0ad4bb6b3913940d9198a0fdfc40","name":"rafael-bails","dist-tags":{"latest":"1.1.3"},"versions":{"1.0.0":{"name":"rafael-bails","version":"1.0.0","keywords":["baileys","whatsapp","whatsapp-api","whatsapp-bot","ourin-md","multi-device","bot","automation","interactive-messages"],"license":"MIT","_id":"rafael-bails@1.0.0","maintainers":[{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"}],"dist":{"shasum":"446b3921ae3a74a43d9cb2d96cb1d7d8911b6ba9","tarball":"https://registry.npmjs.org/rafael-bails/-/rafael-bails-1.0.0.tgz","fileCount":403,"integrity":"sha512-61Iijtvufzs8BwuhXnZbZzf8FAXKWPLxTjVa4ipp+4jocbo1KFHPgjL1bsPc8ewsRVXManaz40Ha8grNBYHQYg==","signatures":[{"sig":"MEYCIQD/zIA8tgRU/IrtBV2CqJ/x5VfX6RfCCbGXeik4pgZENQIhAMmY5byz29X+CuES41QHB/ZOriqsWt967AEHvz2jXt+G","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9986425},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"build":"node -e \"const{execSync:e}=require('child_process');try{e('npx tsc -P tsconfig.build.json',{stdio:'inherit'})}catch(x){};e('npx tsc-esm-fix --tsconfig=tsconfig.build.json --ext=.js',{stdio:'inherit'})\""},"_npmUser":{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"},"_npmVersion":"11.13.0","description":"Modded Baileys v7 with interactive message, album, and newsletter support","directories":{},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.13.0","pino":"^9.6","fflate":"^0.8.0","p-queue":"^9.0.0","libsignal":"^6.0.0","lru-cache":"^11.1.0","@hapi/boom":"^9.1.3","protobufjs":"^7.2.4","async-mutex":"^0.5.0","music-metadata":"^11.7.0","whatsapp-rust-bridge":"0.5.2","@cacheable/node-cache":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.0.0","typescript":"^5.8.2","@types/node":"^20.9.0","tsc-esm-fix":"^3.1.2","protobufjs-cli":"^2.0.1","link-preview-js":"^3.0.0","javascript-obfuscator":"^5.4.1"},"peerDependencies":{"jimp":"^1.6.0","sharp":"*","audio-decode":"^2.1.3","link-preview-js":"^3.0.0"},"peerDependenciesMeta":{"jimp":{"optional":true},"audio-decode":{"optional":true},"link-preview-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rafael-bails_1.0.0_1784181517517_0.13256917346286223","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"rafael-bails","version":"1.0.1","keywords":["baileys","whatsapp","whatsapp-api","whatsapp-bot","RafaelCode-md","multi-device","bot","automation","interactive-messages"],"license":"MIT","_id":"rafael-bails@1.0.1","maintainers":[{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"}],"dist":{"shasum":"49d3cceb2f9bb1f6cd754b20df1c886d7c1d55a7","tarball":"https://registry.npmjs.org/rafael-bails/-/rafael-bails-1.0.1.tgz","fileCount":403,"integrity":"sha512-bZNsXZkj+ZGdeUX2cpRaBglg55wIFos9AiCFsajoiEuGOaFtMWSKxOArKSJLHfwiYbgWIg79rM1Y7g+x7N1xOA==","signatures":[{"sig":"MEUCIBa7DoES7CR0PqbDwqxnkOominuvikwZLCSV33kpvw1zAiEApvdtgQffJptRF2MmCnfK0qODAYO1SUGsAvw9qhIJCWw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9986783},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"build":"node -e \"const{execSync:e}=require('child_process');try{e('npx tsc -P tsconfig.build.json',{stdio:'inherit'})}catch(x){};e('npx tsc-esm-fix --tsconfig=tsconfig.build.json --ext=.js',{stdio:'inherit'})\""},"_npmUser":{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"},"_npmVersion":"11.13.0","description":"Modded Baileys v7 with interactive message, album, and newsletter support","directories":{},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.13.0","pino":"^9.6","fflate":"^0.8.0","p-queue":"^9.0.0","libsignal":"^6.0.0","lru-cache":"^11.1.0","@hapi/boom":"^9.1.3","protobufjs":"^7.2.4","async-mutex":"^0.5.0","music-metadata":"^11.7.0","whatsapp-rust-bridge":"0.5.2","@cacheable/node-cache":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.0.0","typescript":"^5.8.2","@types/node":"^20.9.0","tsc-esm-fix":"^3.1.2","protobufjs-cli":"^2.0.1","link-preview-js":"^3.0.0","javascript-obfuscator":"^5.4.1"},"peerDependencies":{"jimp":"^1.6.0","sharp":"*","audio-decode":"^2.1.3","link-preview-js":"^3.0.0"},"peerDependenciesMeta":{"jimp":{"optional":true},"audio-decode":{"optional":true},"link-preview-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rafael-bails_1.0.1_1784467816594_0.441362227794301","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"rafael-bails","version":"1.0.2","keywords":["baileys","whatsapp","whatsapp-api","whatsapp-bot","RafaelCode-md","multi-device","bot","automation","interactive-messages"],"license":"MIT","_id":"rafael-bails@1.0.2","maintainers":[{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"}],"dist":{"shasum":"24ccd0953d384c166beae835b99d6ff491875c33","tarball":"https://registry.npmjs.org/rafael-bails/-/rafael-bails-1.0.2.tgz","fileCount":403,"integrity":"sha512-KSIjwiab9uBisd4IKqzkQT5vvcEMCXXRsq08lGSEfcB8GRm3aBMSBbdS2GAGxpEWkE9jGA4eZOBtFFgsfJgQCQ==","signatures":[{"sig":"MEUCIQDIW7BFdEwoefcLz7eee3wJyhkbMSvvV5gxjVm4kD6CxgIgaGmEPfSIgSm79kvPgp+FbskeIoPcihNJUPdHc6dLggo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9986752},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"build":"node -e \"const{execSync:e}=require('child_process');try{e('npx tsc -P tsconfig.build.json',{stdio:'inherit'})}catch(x){};e('npx tsc-esm-fix --tsconfig=tsconfig.build.json --ext=.js',{stdio:'inherit'})\""},"_npmUser":{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"},"_npmVersion":"11.13.0","description":"A WhatsApp multi-device library for NodeJS","directories":{},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.13.0","pino":"^9.6","fflate":"^0.8.0","p-queue":"^9.0.0","libsignal":"^6.0.0","lru-cache":"^11.1.0","@hapi/boom":"^9.1.3","protobufjs":"^7.2.4","async-mutex":"^0.5.0","music-metadata":"^11.7.0","whatsapp-rust-bridge":"0.5.2","@cacheable/node-cache":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.0.0","typescript":"^5.8.2","@types/node":"^20.9.0","tsc-esm-fix":"^3.1.2","protobufjs-cli":"^2.0.1","link-preview-js":"^3.0.0","javascript-obfuscator":"^5.4.1"},"peerDependencies":{"jimp":"^1.6.0","sharp":"*","audio-decode":"^2.1.3","link-preview-js":"^3.0.0"},"peerDependenciesMeta":{"jimp":{"optional":true},"audio-decode":{"optional":true},"link-preview-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rafael-bails_1.0.2_1785395893223_0.5160083460786873","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"rafael-bails","version":"1.0.3","keywords":["baileys","whatsapp","whatsapp-api","whatsapp-bot","rafael-bails","multi-device","bot","automation","interactive-messages"],"license":"MIT","_id":"rafael-bails@1.0.3","maintainers":[{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"}],"dist":{"shasum":"acba9d97954e49006f4d050fc199d4a8c8e3cae8","tarball":"https://registry.npmjs.org/rafael-bails/-/rafael-bails-1.0.3.tgz","fileCount":403,"integrity":"sha512-2eJlkERv9sUX9EOojW0VQiO5/E9s6UIgAOevnesgje0yTOcDTYqg498O056kuQC4owy3ug/SxxpV3xMpMlWnUg==","signatures":[{"sig":"MEQCIBuMGKnqxLZyUxQxmG8S12C6i3c89zhUAxlsXNffIXAkAiAZgEBD7QyXz2sv1ZdTiPtJ+MagbfbZ8sqyThj+Q5vigA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9986451},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"build":"node -e \"const{execSync:e}=require('child_process');try{e('npx tsc -P tsconfig.build.json',{stdio:'inherit'})}catch(x){};e('npx tsc-esm-fix --tsconfig=tsconfig.build.json --ext=.js',{stdio:'inherit'})\""},"_npmUser":{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"},"_npmVersion":"11.13.0","description":"Modded Baileys v7 with interactive message, album, and newsletter support","directories":{},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.13.0","pino":"^9.6","fflate":"^0.8.0","p-queue":"^9.0.0","libsignal":"^6.0.0","lru-cache":"^11.1.0","@hapi/boom":"^9.1.3","protobufjs":"^7.2.4","async-mutex":"^0.5.0","music-metadata":"^11.7.0","whatsapp-rust-bridge":"0.5.2","@cacheable/node-cache":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.0.0","typescript":"^5.8.2","@types/node":"^20.9.0","tsc-esm-fix":"^3.1.2","protobufjs-cli":"^2.0.1","link-preview-js":"^3.0.0","javascript-obfuscator":"^5.4.1"},"peerDependencies":{"jimp":"^1.6.0","sharp":"*","audio-decode":"^2.1.3","link-preview-js":"^3.0.0"},"peerDependenciesMeta":{"jimp":{"optional":true},"audio-decode":{"optional":true},"link-preview-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rafael-bails_1.0.3_1785397810303_0.3433001616251816","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"rafael-bails","version":"1.0.4","keywords":["baileys","whatsapp","whatsapp-api","whatsapp-bot","rafael-bails","multi-device","bot","automation","interactive-messages"],"license":"MIT","_id":"rafael-bails@1.0.4","maintainers":[{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"}],"dist":{"shasum":"7786c9fa36c85b24a8c94c7e8c70bce745fe1701","tarball":"https://registry.npmjs.org/rafael-bails/-/rafael-bails-1.0.4.tgz","fileCount":403,"integrity":"sha512-QW71fpboZ1rV6Lnw7pYy/sG2cAczYMV3KFq+RLKpo2GOAcDzJRl0UDtwUQYNMcIFQ5vfYlpq2qdlNeRr6l6itw==","signatures":[{"sig":"MEUCIQC5pwbj/0gt9kKKf7o3+Yax1Th6/C8jqKpa6tDe/dU3AAIgKSWDdo4oMrMOuleAUDXHGRPE4UWVp8b7YDo3Gn1WSvY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9986451},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"build":"node -e \"const{execSync:e}=require('child_process');try{e('npx tsc -P tsconfig.build.json',{stdio:'inherit'})}catch(x){};e('npx tsc-esm-fix --tsconfig=tsconfig.build.json --ext=.js',{stdio:'inherit'})\""},"_npmUser":{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"},"_npmVersion":"11.13.0","description":"Baileys is a WhatsApp Web API library for NodeJS that allows you to connect to WhatsApp and send/receive messages, media, and more.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.13.0","pino":"^9.6","fflate":"^0.8.0","p-queue":"^9.0.0","libsignal":"^6.0.0","lru-cache":"^11.1.0","@hapi/boom":"^9.1.3","protobufjs":"^7.2.4","async-mutex":"^0.5.0","music-metadata":"^11.7.0","whatsapp-rust-bridge":"0.5.2","@cacheable/node-cache":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.0.0","typescript":"^5.8.2","@types/node":"^20.9.0","tsc-esm-fix":"^3.1.2","protobufjs-cli":"^2.0.1","link-preview-js":"^3.0.0","javascript-obfuscator":"^5.4.1"},"peerDependencies":{"jimp":"^1.6.0","sharp":"*","audio-decode":"^2.1.3","link-preview-js":"^3.0.0"},"peerDependenciesMeta":{"jimp":{"optional":true},"audio-decode":{"optional":true},"link-preview-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rafael-bails_1.0.4_1785398582733_0.841544438653568","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"rafael-bails","version":"1.0.5","keywords":["baileys","whatsapp","whatsapp-api","whatsapp-bot","rafael-bails","multi-device","bot","automation","interactive-messages"],"license":"MIT","_id":"rafael-bails@1.0.5","maintainers":[{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"}],"dist":{"shasum":"89deac55f700b94661d00bd3a9ba3d2f6dc9188d","tarball":"https://registry.npmjs.org/rafael-bails/-/rafael-bails-1.0.5.tgz","fileCount":403,"integrity":"sha512-UIw9bjcGCX70Tk1AwhowpPiE8+W0lyWsG7g7ObVSeygdYsM3T6AfIJHA6mJJUi1pkOKuBy75Bh9OAUx1ta9vcw==","signatures":[{"sig":"MEYCIQCOJtDQuxykSese5Eq7Ow462Kj6csAmWr07JSElHaqa4AIhAM6X7nFc7YLglA5DKbeRclwbY/A4fXaKL6nXpACW//P+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9986509},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"build":"node -e \"const{execSync:e}=require('child_process');try{e('npx tsc -P tsconfig.build.json',{stdio:'inherit'})}catch(x){};e('npx tsc-esm-fix --tsconfig=tsconfig.build.json --ext=.js',{stdio:'inherit'})\""},"_npmUser":{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"},"_npmVersion":"11.13.0","description":"Baileys is a WhatsApp Web API library for NodeJS that allows you to connect to WhatsApp and send/receive messages, media, and more.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.13.0","pino":"^9.6","fflate":"^0.8.0","p-queue":"^9.0.0","libsignal":"^6.0.0","lru-cache":"^11.1.0","@hapi/boom":"^9.1.3","protobufjs":"^7.2.4","async-mutex":"^0.5.0","music-metadata":"^11.7.0","whatsapp-rust-bridge":"0.5.2","@cacheable/node-cache":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.0.0","typescript":"^5.8.2","@types/node":"^20.9.0","tsc-esm-fix":"^3.1.2","protobufjs-cli":"^2.0.1","link-preview-js":"^3.0.0","javascript-obfuscator":"^5.4.1"},"peerDependencies":{"jimp":"^1.6.0","sharp":"*","audio-decode":"^2.1.3","link-preview-js":"^3.0.0"},"peerDependenciesMeta":{"jimp":{"optional":true},"audio-decode":{"optional":true},"link-preview-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rafael-bails_1.0.5_1786000689682_0.07417511077322492","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"rafael-bails","version":"1.0.6","keywords":["baileys","whatsapp","whatsapp-api","whatsapp-bot","rafael-md","multi-device","bot","automation","interactive-messages","voip","voice-call"],"license":"MIT","_id":"rafael-bails@1.0.6","maintainers":[{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"}],"dist":{"shasum":"2b3ad5913aec74166a27bec3e60f7ff0e5f14efb","tarball":"https://registry.npmjs.org/rafael-bails/-/rafael-bails-1.0.6.tgz","fileCount":417,"integrity":"sha512-FWdwlex1poEpGudpBRWvNiQ5PFJH6ldH97CmTCJlSSa0VkcH/sdFdJPfdDqsHPPZGtPJyi3rKoPHESrnIzp/Aw==","signatures":[{"sig":"MEYCIQD3TzzOcNIE4B/XxYuMhoeDOSmodCbRM/mWTAGra6/upQIhAOHffsYQAgEb91h72WIQpnTXGeJvzF9LoEUT1cJgdzLj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20944739},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"build":"node -e \"const{execSync:e}=require('child_process');try{e('npx tsc -P tsconfig.build.json',{stdio:'inherit'})}catch(x){};e('npx tsc-esm-fix --tsconfig=tsconfig.build.json --ext=.js',{stdio:'inherit'})\""},"_npmUser":{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"},"_npmVersion":"11.13.0","description":"Baileys is a WhatsApp Web API library for NodeJS that allows you to connect to WhatsApp and send/receive messages, media, and more.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.13.0","pino":"^9.6","fflate":"^0.8.0","p-queue":"^9.0.0","libsignal":"^6.0.0","lru-cache":"^11.1.0","@hapi/boom":"^9.1.3","protobufjs":"^7.2.4","async-mutex":"^0.5.0","music-metadata":"^11.7.0","whatsapp-rust-bridge":"0.5.2","@cacheable/node-cache":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.0.0","typescript":"^5.8.2","@types/node":"^20.9.0","tsc-esm-fix":"^3.1.2","protobufjs-cli":"^2.0.1","link-preview-js":"^3.0.0","javascript-obfuscator":"^5.4.1"},"peerDependencies":{"jimp":"^1.6.0","sharp":"*","@roamhq/wrtc":"*","audio-decode":"^2.1.3","link-preview-js":"^3.0.0"},"peerDependenciesMeta":{"jimp":{"optional":true},"@roamhq/wrtc":{"optional":true},"audio-decode":{"optional":true},"link-preview-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rafael-bails_1.0.6_1786682039804_0.5567959818275359","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"rafael-bails","version":"1.1.0","keywords":["baileys","whatsapp","whatsapp-api","whatsapp-bot","rafael-md","multi-device","bot","automation","interactive-messages","voip","voice-call"],"license":"MIT","_id":"rafael-bails@1.1.0","maintainers":[{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"}],"dist":{"shasum":"f6c90f534c4d251eace4aaf7ad9a850567b94416","tarball":"https://registry.npmjs.org/rafael-bails/-/rafael-bails-1.1.0.tgz","fileCount":417,"integrity":"sha512-yQy5dvCXS8+ZKdJNIlEW7sM/sknlV+sEGIYkqv8fG7i2YCFrWXsHJJ+g+ArymUHdC2DfkJH8aXfhef8IN2o5eA==","signatures":[{"sig":"MEUCIQCjpjmRys/vVS32Fl1xL48AjHfTq/JtluFRPOtz8f0VrAIgSO6AqPhw70nWldhvrhgMuO5U3FuEkFeGLLc//ZS9FkU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20944739},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"build":"node -e \"const{execSync:e}=require('child_process');try{e('npx tsc -P tsconfig.build.json',{stdio:'inherit'})}catch(x){};e('npx tsc-esm-fix --tsconfig=tsconfig.build.json --ext=.js',{stdio:'inherit'})\""},"_npmUser":{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"},"_npmVersion":"11.13.0","description":"Baileys is a WhatsApp Web API library for NodeJS that allows you to connect to WhatsApp and send/receive messages, media, and more.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.13.0","pino":"^9.6","fflate":"^0.8.0","p-queue":"^9.0.0","libsignal":"^6.0.0","lru-cache":"^11.1.0","@hapi/boom":"^9.1.3","protobufjs":"^7.2.4","async-mutex":"^0.5.0","music-metadata":"^11.7.0","whatsapp-rust-bridge":"0.5.2","@cacheable/node-cache":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.0.0","typescript":"^5.8.2","@types/node":"^20.9.0","tsc-esm-fix":"^3.1.2","protobufjs-cli":"^2.0.1","link-preview-js":"^3.0.0","javascript-obfuscator":"^5.4.1"},"peerDependencies":{"jimp":"^1.6.0","sharp":"*","@roamhq/wrtc":"*","audio-decode":"^2.1.3","link-preview-js":"^3.0.0"},"peerDependenciesMeta":{"jimp":{"optional":true},"@roamhq/wrtc":{"optional":true},"audio-decode":{"optional":true},"link-preview-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rafael-bails_1.1.0_1786682264344_0.42963040633369043","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"rafael-bails","version":"1.1.1","keywords":["baileys","whatsapp","whatsapp-api","whatsapp-bot","rafael-md","multi-device","bot","automation","interactive-messages","voip","voice-call"],"license":"MIT","_id":"rafael-bails@1.1.1","maintainers":[{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"}],"dist":{"shasum":"282d9e5b8b1b2742c5faee41e82e70844e1f4866","tarball":"https://registry.npmjs.org/rafael-bails/-/rafael-bails-1.1.1.tgz","fileCount":417,"integrity":"sha512-Kt9IGNq71xeuJ6gWBF/7VWfv4M7HrBFYpqJVexGd7uUwPAhnc0kSHSVpuqdgjboORuyHbGWWJwU8z1psBNCu1A==","signatures":[{"sig":"MEUCIQCPYDFcGotxd+xvFq70iJZVMVmMeSXO+S/9VVFVfyBVvgIgFnycrrrpu4hRQYaxnkRlLH0oSLDXLsrL7XHaWde8dVw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20944798},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"build":"node -e \"const{execSync:e}=require('child_process');try{e('npx tsc -P tsconfig.build.json',{stdio:'inherit'})}catch(x){};e('npx tsc-esm-fix --tsconfig=tsconfig.build.json --ext=.js',{stdio:'inherit'})\""},"_npmUser":{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"},"_npmVersion":"11.13.0","description":"Modded Baileys v7 with interactive message, album, newsletter, and VoIP support","directories":{},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.13.0","pino":"^9.6","fflate":"^0.8.0","p-queue":"^9.0.0","libsignal":"^6.0.0","lru-cache":"^11.1.0","@hapi/boom":"^9.1.3","protobufjs":"^7.2.4","async-mutex":"^0.5.0","music-metadata":"^11.7.0","whatsapp-rust-bridge":"0.5.2","@cacheable/node-cache":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.0.0","typescript":"^5.8.2","@types/node":"^20.9.0","tsc-esm-fix":"^3.1.2","protobufjs-cli":"^2.0.1","link-preview-js":"^3.0.0","javascript-obfuscator":"^5.4.1"},"peerDependencies":{"jimp":"^1.6.0","sharp":"*","@roamhq/wrtc":"*","audio-decode":"^2.1.3","link-preview-js":"^3.0.0"},"peerDependenciesMeta":{"jimp":{"optional":true},"@roamhq/wrtc":{"optional":true},"audio-decode":{"optional":true},"link-preview-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rafael-bails_1.1.1_1788486598466_0.7349860630746936","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"rafael-bails","version":"1.1.2","keywords":["baileys","whatsapp","whatsapp-api","whatsapp-bot","rafael-md","multi-device","bot","automation","interactive-messages","voip","voice-call"],"license":"MIT","_id":"rafael-bails@1.1.2","maintainers":[{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"}],"dist":{"shasum":"3488531be7d5b26a81bce89c8410009f12128462","tarball":"https://registry.npmjs.org/rafael-bails/-/rafael-bails-1.1.2.tgz","fileCount":417,"integrity":"sha512-vak7d2niFwHlD/SaT42lt6KvknM7Yy/glZeHszmKVCs3ZOGcTkwljBR7zypH7fsX3MeFp7pAmxmlxg47MjZVLg==","signatures":[{"sig":"MEUCIQCBHLxLl9M9jXyDe6mgrD1MSGp7kM/knK7N1WEnCZ6+LwIgSx04LuArox3W1TKbs9jXeCV4RQBJyzwkbvCGXFZq824=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20945329},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"build":"node -e \"const{execSync:e}=require('child_process');try{e('npx tsc -P tsconfig.build.json',{stdio:'inherit'})}catch(x){};e('npx tsc-esm-fix --tsconfig=tsconfig.build.json --ext=.js',{stdio:'inherit'})\""},"_npmUser":{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"},"_npmVersion":"11.13.0","description":"Modded Baileys v7 with interactive message, album, newsletter, and VoIP support","directories":{},"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.13.0","pino":"^9.6","fflate":"^0.8.0","p-queue":"^9.0.0","libsignal":"^6.0.0","lru-cache":"^11.1.0","@hapi/boom":"^9.1.3","protobufjs":"^7.2.4","async-mutex":"^0.5.0","music-metadata":"^11.7.0","whatsapp-rust-bridge":"0.5.2","@cacheable/node-cache":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.0.0","typescript":"^5.8.2","@types/node":"^20.9.0","tsc-esm-fix":"^3.1.2","protobufjs-cli":"^2.0.1","link-preview-js":"^3.0.0","javascript-obfuscator":"^5.4.1"},"peerDependencies":{"jimp":"^1.6.0","sharp":"*","@roamhq/wrtc":"*","audio-decode":"^2.1.3","link-preview-js":"^3.0.0"},"peerDependenciesMeta":{"jimp":{"optional":true},"@roamhq/wrtc":{"optional":true},"audio-decode":{"optional":true},"link-preview-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rafael-bails_1.1.2_1788502950093_0.30271963296754945","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"_id":"rafael-bails@1.1.3","dist":{"shasum":"991fa6ccbe133f8c591cbd80309fb3ded43eed2f","tarball":"https://registry.npmjs.org/rafael-bails/-/rafael-bails-1.1.3.tgz","fileCount":417,"integrity":"sha512-iIB1R5fF9CTyuTzaTNCNIUyOqPzC9jQuw+nypF9IloLuyjWMibHb4rMiE4DIR2FZ62OE1YZBpKmCEJ8DdMsERg==","signatures":[{"sig":"MEUCIHZeRL16nXToYQ2Qj3OUVaeKWzYjT4k5GGcZexycPMRrAiEAv+7E+GtY2LljpmrAtzgGZ2D9wBor3OKXlntrAy8Gb9M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBt5jLmrnX4e/oBBpvNOjwIQoZwizr4p8Idm3nvyboEMAiEAp8SNx+LovhqIg1qLBJYRigBKx8R65hoNgI9P89441gI="}],"unpackedSize":20945329},"main":"lib/index.js","name":"rafael-bails","type":"module","types":"lib/index.d.ts","engines":{"node":">=20.0.0"},"license":"MIT","scripts":{"build":"node -e \"const{execSync:e}=require('child_process');try{e('npx tsc -P tsconfig.build.json',{stdio:'inherit'})}catch(x){};e('npx tsc-esm-fix --tsconfig=tsconfig.build.json --ext=.js',{stdio:'inherit'})\""},"version":"1.1.3","_npmUser":{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"},"keywords":["baileys","whatsapp","whatsapp-api","whatsapp-bot","rafael-md","multi-device","bot","automation","interactive-messages","voip","voice-call"],"_npmVersion":"11.13.0","description":"Modded Baileys v7 with interactive message, album, newsletter, and VoIP support","directories":{},"maintainers":[{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"}],"_nodeVersion":"24.16.0","dependencies":{"ws":"^8.13.0","pino":"^9.6","fflate":"^0.8.0","p-queue":"^9.0.0","libsignal":"^6.0.0","lru-cache":"^11.1.0","@hapi/boom":"^9.1.3","protobufjs":"^7.2.4","async-mutex":"^0.5.0","music-metadata":"^11.7.0","whatsapp-rust-bridge":"0.5.2","@cacheable/node-cache":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.0.0","typescript":"^5.8.2","@types/node":"^20.9.0","tsc-esm-fix":"^3.1.2","protobufjs-cli":"^2.0.1","link-preview-js":"^3.0.0","javascript-obfuscator":"^5.4.1"},"peerDependencies":{"jimp":"^1.6.0","sharp":"*","@roamhq/wrtc":"*","audio-decode":"^2.1.3","link-preview-js":"^3.0.0"},"peerDependenciesMeta":{"jimp":{"optional":true},"@roamhq/wrtc":{"optional":true},"audio-decode":{"optional":true},"link-preview-js":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/rafael-bails_1.1.3_1789847519904_0.6177486635506819"}}},"time":{"created":"2026-07-16T05:58:37.475Z","modified":"2026-09-19T19:52:00.260Z","1.0.0":"2026-07-16T05:58:37.683Z","1.0.1":"2026-07-19T13:30:16.824Z","1.0.2":"2026-07-30T07:18:13.457Z","1.0.3":"2026-07-30T07:50:10.553Z","1.0.4":"2026-07-30T08:03:02.958Z","1.0.5":"2026-08-06T07:18:09.872Z","1.0.6":"2026-08-14T04:34:00.018Z","1.1.0":"2026-08-14T04:37:44.586Z","1.1.1":"2026-09-04T01:49:58.684Z","1.1.2":"2026-09-04T06:22:30.377Z","1.1.3":"2026-09-19T19:52:00.074Z"},"license":"MIT","keywords":["baileys","whatsapp","whatsapp-api","whatsapp-bot","rafael-md","multi-device","bot","automation","interactive-messages","voip","voice-call"],"description":"Modded Baileys v7 with interactive message, album, newsletter, and VoIP support","maintainers":[{"name":"rafaellxd","email":"rafaelputrasitinjak76@gmail.com"}],"readme":"<div align=\"center\">\n\n<img src=\"https://rafaelxd.my.id/raw/1tapn3e4\" alt=\"rafael-bails banner\" width=\"100%\" />\n\n### Modded Baileys — Interactive Messages, AI Rich Responses, Albums & More\n\n[![npm version](https://img.shields.io/npm/v/rafael-bails?color=CB3837&logo=npm&logoColor=white&style=for-the-badge)](https://www.npmjs.com/package/rafael-bails)\n[![npm downloads](https://img.shields.io/npm/dm/rafael-bails?color=CB3837&logo=npm&logoColor=white&style=for-the-badge)](https://www.npmjs.com/package/rafael-bails)\n[![License](https://img.shields.io/badge/license-MIT-blue?style=for-the-badge)](LICENSE)\n[![Node](https://img.shields.io/badge/node-%3E%3D20.0.0-339933?logo=node.js&logoColor=white&style=for-the-badge)](https://nodejs.org)\n[![ESM](https://img.shields.io/badge/ESM-only-F7DF1E?logo=javascript&logoColor=black&style=for-the-badge)](#)\n\n---\n\n**A modded build of [WhiskeySockets/Baileys](https://github.com/WhiskeySockets/Baileys)**\nwith native support for interactive messages, album messages, unified rich responses, newsletter helpers, status mentions, and additional business/community utilities.\n\nThis repository is a **distribution/build repo** for `rafael-bails`.\nIt ships compiled runtime files in `lib/` and protobuf artifacts in `WAProto/`, and is intended to be consumed directly from npm or as a vendored dependency inside the **Rafael-MD** ecosystem.\n\n</div>\n\n---\n\n## 🆕 Changelog / Updates (v1.1.1)\n\n**1. Fix `additionalNodes` Conflict (v1.1.1)**\n\n- Fixed an issue where supplying a custom `<biz>` node in `additionalNodes` alongside interactive messages caused duplicate `<biz>` nodes in the stanza, which led to the message being silently rejected by WhatsApp.\n\n**2. Built-in VoIP (Voice Call) Engine (v9.0.0)**\n\n- Full integration of the WebRTC and WASM engines to enable native WhatsApp voice calling, eliminating the need for a separate package.\n\n**2. Fix View Once Error (Anti-Crash)**\n\n- WhatsApp (Meta) Web API no longer receives media content for View Once messages, which previously caused the socket to crash. We've added robust parsing (`viewOnceMessageV3` & `ptvMessage`) to gracefully handle these empty stubs without crashing your bot.\n\n**2. Decryption Retry Fix (Private Chats)**\n\n- Fixed an issue in `messages-recv.js` where \"Bad MAC\" / decryption errors would close the connection. Combined with a proper `getMessage` hook in your main connection setup, the bot now seamlessly retries failed decryptions.\n- Browser parameter spoofing upgraded to MacOS to prevent Error 405 (Method Not Allowed) during pairing.\n\n**3. AI Rich Implementation (`ORich`)**\n\n- Added the `ORich` class (an extension of `AIRich` from `message_builder.js`) to generate stunning AI response layouts easily.\n- **Example Usage:**\n\n  ```javascript\n  import { ORich } from 'rafael-bails';\n\n  const rafael = new ORich(sock)\n    .addText('Hello from ORich AI!')\n    .addSuggest(['Tell me more', 'Next']);\n  \n  await rafael.send(jid);\n  ```\n\n---\n\n## Table of Contents\n\n- [rafael-bails](#rafael-bails)\n  - [Modded Baileys v7 — Interactive Messages, AI Rich Responses, Albums & More](#modded-baileys-v7--interactive-messages-ai-rich-responses-albums--more)\n  - [Table of Contents](#table-of-contents)\n  - [✨ Features](#-features)\n  - [✅ Requirements](#-requirements)\n  - [🗂️ What’s Inside This Repo](#-whats-inside-this-repo)\n  - [📦 Installation](#-installation)\n    - [From NPM](#from-npm)\n    - [Using Alias (Recommended for Rafael-MD Bots)](#using-alias-recommended-for-rafael-md-bots)\n  - [🛠️ Quick Start](#️-quick-start)\n    - [1. Project Setup](#1-project-setup)\n    - [2. Install Dependencies](#2-install-dependencies)\n    - [3. Create `index.js`](#3-create-indexjs)\n    - [4. Run](#4-run)\n    - [5. Pairing Code Example](#5-pairing-code-example)\n  - [🏗️ Architecture](#️-architecture)\n    - [Socket Layer Chain](#socket-layer-chain)\n    - [Key Modules](#key-modules)\n    - [Build Repo Layout](#build-repo-layout)\n    - [Connection Flow](#connection-flow)\n  - [📡 Socket API Reference](#-socket-api-reference)\n    - [Connection \\& Authentication](#connection--authentication)\n    - [VoIP (Voice Calls)](#voip-voice-calls)\n    - [Message Sending](#message-sending)\n    - [Interactive Messages](#interactive-messages)\n    - [Album Messages](#album-messages)\n    - [AI Rich Response Messages](#ai-rich-response-messages)\n    - [Code Block V2 (Unified Response)](#code-block-v2-unified-response)\n    - [Other Message Types](#other-message-types)\n    - [Newsletter Methods](#newsletter-methods)\n    - [Group Methods](#group-methods)\n    - [Community Methods](#community-methods)\n    - [Business Methods](#business-methods)\n    - [Chat \\& Profile Methods](#chat--profile-methods)\n    - [Privacy Settings](#privacy-settings)\n  - [📡 Event Reference](#-event-reference)\n  - [🔧 Utility Exports](#-utility-exports)\n  - [🏗️ Building This Package](#️-building-this-package)\n  - [🔀 Differences from Official Baileys](#-differences-from-official-baileys)\n  - [🤝 Contributing](#-contributing)\n  - [📄 License](#-license)\n\n---\n\n## ✨ Features\n\n| Feature                     | Description                                                                            | Status |\n| --------------------------- | -------------------------------------------------------------------------------------- | ------ |\n| **VoIP Voice Calls**        | Native VoIP engine (WASM/WebRTC) via `VoipClient`, single shared socket                | ✅     |\n| **Interactive Messages**    | Native flow buttons, list/select menus, button wrappers, carousel support via `Dugong` | ✅     |\n| **Album Messages**          | Multi-image/video album relay with count metadata and grouped delivery                 | ✅     |\n| **Rich Response Helpers**   | `sendTable`, `sendList`, `sendCodeBlock`, `sendRichMessage`, `sendUnifiedResponse`     | ✅     |\n| **Unified Response V2**     | `sendTableV2`, `sendCodeBlockV2`, `sendLinkV2` with Meta-AI-style unified sections     | ✅     |\n| **Link Messages**           | Rich inline links with citations, proofs, and forwarded bot context                    | ✅     |\n| **Latex Rendering Hooks**   | `sendLatex`, `sendLatexImage`, `sendLatexInlineImage` helper APIs                      | ✅     |\n| **Payment Messages**        | Request payment messages with note/sticker support                                     | ✅     |\n| **Product / Catalog**       | Business product messages, catalog fetch/create/update/delete, cover photo helpers     | ✅     |\n| **Event / Poll Result**     | Event message builders and poll result snapshots                                       | ✅     |\n| **Newsletter Extras**       | URL resolve, metadata fetch, create/update, bulk follow, admin utilities, live updates | ✅     |\n| **Communities & Groups**    | Community CRUD, linked groups, invite workflows, join approval, labels                 | ✅     |\n| **Status Mention**          | `sendStatusMention()` helper to mention users/groups in status flows                   | ✅     |\n| **LID & Session Handling**  | LID↔PN mapping, session migration, retry/session recreation helpers                    | ✅     |\n| **Build Output Ready**      | Published runtime in `lib/` and protobuf artifacts in `WAProto/`                       | ✅     |\n| **TypeScript Declarations** | Included `.d.ts` files for exported APIs and socket methods                            | ✅     |\n\n---\n\n## ✅ Requirements\n\n- **Node.js** `>= 20.0.0`\n- **ESM project** (`\"type\": \"module\"` in your `package.json`)\n- A persistent auth store implementation for production use\n- Optional helpers depending on your use case:\n  - `pino` for logging\n  - `qrcode-terminal` if you want to render QR codes in the terminal yourself\n  - `sharp`, `jimp`, `audio-decode`, `link-preview-js` for optional media/rich utilities\n\n> [!IMPORTANT]\n> `rafael-bails` is **ESM-only**. CommonJS projects will need migration or dynamic import wrappers.\n\n---\n\n## 📁 What’s Inside This Repo\n\nThis package is not the TypeScript source workspace. It contains the compiled distributable files you actually publish/use.\n\n| Path                  | Purpose                                                |\n| --------------------- | ------------------------------------------------------ |\n| `lib/`                | Main compiled runtime, types, socket layers, utilities |\n| `WAProto/`            | Generated protobuf runtime and typings                 |\n| `package.json`        | Published package metadata, dependencies, build script |\n| `tsconfig.json`       | TypeScript config used for authoring/build pipeline    |\n| `tsconfig.build.json` | Build-specific TS emit config targeting `lib/`         |\n| `proto-extract/`      | Protobuf-related extraction/build assets               |\n\nIf you are documenting or integrating this project, treat `lib/index.js` and `lib/index.d.ts` as the primary public surface.\n\n---\n\n## 📦 Installation\n\n### From NPM\n\n```bash\nnpm install rafael-bails\n```\n\nRecommended companion packages for examples in this README:\n\n```bash\nnpm install pino qrcode-terminal\n```\n\n### Using Alias (Recommended for Rafael-MD Bots)\n\nAdd to `package.json`:\n\n```json\n{\n  \"dependencies\": {\n    \"rafael\": \"npm:rafael-bails@latest\"\n  }\n}\n```\n\nThen run:\n\n```bash\nnpm install\n```\n\n> [!TIP]\n> Using the alias `rafael` allows you to `import rafael from 'rafael'` without changing existing code.\n\n> [!NOTE]\n> Peer dependencies such as `sharp`, `jimp`, `audio-decode`, and `link-preview-js` are optional. Install only what your bot features need.\n\n---\n\n## 🛠️ Quick Start\n\n### 1. Project Setup\n\n```bash\nmkdir my-bot && cd my-bot\nnpm init -y\n```\n\nEnsure `package.json` has `\"type\": \"module\"`:\n\n```json\n{\n  \"name\": \"my-bot\",\n  \"type\": \"module\",\n  \"dependencies\": {\n    \"rafael\": \"npm:rafael-bails@latest\"\n  }\n}\n```\n\n> [!IMPORTANT]\n> **Required**: `\"type\": \"module\"` — rafael-bails is ESM-only. Without this, imports will fail.\n\n### 2. Install Dependencies\n\n```bash\nnpm install rafael-bails pino qrcode-terminal\n```\n\n### 3. Create `index.js`\n\n```js\nimport makeWASocket, {\n  useMultiFileAuthState,\n  DisconnectReason,\n  Browsers,\n} from \"rafael-bails\";\nimport pino from \"pino\";\nimport qrcode from \"qrcode-terminal\";\n\nconst logger = pino({ level: \"silent\" });\n\nasync function startBot() {\n  const { state, saveCreds } = await useMultiFileAuthState(\"./session\");\n\n  const sock = makeWASocket({\n    auth: state,\n    logger,\n    browser: Browsers.ubuntu(\"Chrome\"),\n    syncFullHistory: false,\n  });\n\n  sock.ev.on(\"creds.update\", saveCreds);\n\n  sock.ev.on(\"connection.update\", ({ connection, lastDisconnect, qr }) => {\n    if (qr) {\n      qrcode.generate(qr, { small: true });\n    }\n\n    if (connection === \"close\") {\n      const shouldReconnect =\n        lastDisconnect?.error?.output?.statusCode !==\n        DisconnectReason.loggedOut;\n      if (shouldReconnect) startBot();\n    }\n    if (connection === \"open\") console.log(\"Connected!\");\n  });\n\n  sock.ev.on(\"messages.upsert\", async ({ messages }) => {\n    const msg = messages[0];\n    if (!msg?.message || msg.key.fromMe) return;\n\n    const text =\n      msg.message.conversation || msg.message.extendedTextMessage?.text || \"\";\n\n    if (text === \".ping\") {\n      await sock.sendMessage(msg.key.remoteJid, { text: \"Pong!\" });\n    }\n  });\n}\n\nstartBot();\n```\n\n### 4. Run\n\n```bash\nnode index.js\n```\n\nScan the QR code, wait until the socket reaches `connection: \"open\"`, then send `.ping` to test.\n\n### 5. Pairing Code Example\n\nIf you prefer pairing code over QR:\n\n```js\nconst sock = makeWASocket({\n  auth: state,\n  logger,\n  browser: Browsers.windows(\"Chrome\"),\n});\n\nsock.ev.on(\"connection.update\", async ({ connection }) => {\n  if (connection === \"connecting\") {\n    const code = await sock.requestPairingCode(\"6281234567890\");\n    console.log(\"Pairing code:\", code);\n  }\n});\n```\n\nYou can also provide your own custom pairing code:\n\n```js\nconst code = await sock.requestPairingCode(\"6281234567890\", \"A1B2C3D4\");\nconsole.log(\"Custom pairing code:\", code);\n```\n\nCustom pairing codes must be exactly `8` characters.\n\n> [!WARNING]\n> `printQRInTerminal` still exists in the type surface for compatibility, but it is **deprecated** in the current build. Prefer handling the `qr` value from `connection.update` yourself.\n\n---\n\n## 🏗️ Architecture\n\n### Socket Layer Chain\n\nEach socket layer extends the previous via composition, adding functionality from bottom to top:\n\n```\nmakeSocket          → WebSocket + Noise protocol + pre-key management\n  makeChatsSocket   → App state sync + chat modifications + profile\n    makeGroupsSocket → Group CRUD + participant management\n      makeMessagesSendSocket → Message sending + rich messages + relay\n        makeMessagesRecvSocket → Message receiving + decryption + notifications\n          makeBusinessSocket   → Product catalog + business profile\n            makeCommunitiesSocket → Community CRUD + sub-groups\n              makeNewsletterSocket → Newsletter follow/unfollow/metadata\n                makeWASocket      ← TOP LEVEL EXPORT\n```\n\n### Key Modules\n\n| Module       | Path            | Description                                                      |\n| ------------ | --------------- | ---------------------------------------------------------------- |\n| **Socket**   | `lib/Socket/`   | Connection, messaging, groups, newsletter, business, communities |\n| **Signal**   | `lib/Signal/`   | Signal protocol: 1:1 encryption, group SenderKey, LID mapping    |\n| **WABinary** | `lib/WABinary/` | Binary node encoding/decoding, JID utilities                     |\n| **Utils**    | `lib/Utils/`    | Crypto, auth state, noise handler, rich messages, media          |\n| **WAProto**  | `WAProto/`      | Compiled protobuf encode/decode                                  |\n| **WAUSync**  | `lib/WAUSync/`  | User sync protocol (contact, device, LID)                        |\n| **WAM**      | `lib/WAM/`      | WhatsApp analytics binary encoding                               |\n| **Types**    | `lib/Types/`    | Full TypeScript type definitions                                 |\n\n### Build Repo Layout\n\nThis repository does **not** currently expose a `src/` directory in the checked-in package tree.\n\nThat means:\n\n- Documentation should reference **`lib/` as the public implementation**\n- API discovery is best done through:\n  - `lib/index.js`\n  - `lib/index.d.ts`\n  - `lib/Socket/*.d.ts`\n  - `lib/Utils/*.d.ts`\n- Consumers should treat this repo as a **ready-to-install runtime artifact**, not the authoring source tree\n\n### Connection Flow\n\n1. WebSocket connect → Noise XX handshake (Curve25519 + AES-256-GCM)\n2. QR code or Pairing Code authentication\n3. `CB:success` → upload pre-keys → send passive IQ → emit `connection: 'open'`\n4. Store own LID↔PN mapping, migrate own session\n5. Buffer events → process offline notifications → flush → `receivedPendingNotifications: true`\n\n---\n\n## 📡 Socket API Reference\n\n### Connection & Authentication\n\n```js\nconst sock = makeWASocket({\n  auth: state, // AuthenticationState from useMultiFileAuthState\n  logger, // pino logger instance\n  browser: Browsers.ubuntu(\"Chrome\"), // Browser identity\n  version: [2, 3000, 1035194821], // WA version\n  connectTimeoutMs: 20_000, // Connection timeout\n  defaultQueryTimeoutMs: 60_000, // Query timeout\n  retryRequestDelayMs: 250, // Retry delay\n  maxMsgRetryCount: 5, // Max message retry count\n  enableRecentMessageCache: true, // Enable message retry manager\n  enableAutoSessionRecreation: true,\n  syncFullHistory: false, // Sync full chat history\n  shouldIgnoreJid: (jid) => false, // Filter specific JIDs\n  qrTimeout: 60_000,\n  generateHighQualityLinkPreview: false,\n});\n```\n\n**Pairing Code Authentication:**\n\n```js\nconst sock = makeWASocket({\n  auth: state,\n  logger,\n  browser: Browsers.windows(\"Chrome\"),\n});\n\nsock.ev.on(\"connection.update\", async ({ connection, qr, isNewLogin }) => {\n  if (qr) {\n    // QR code available (fallback)\n  }\n});\n\n// Request pairing code\nconst code = await sock.requestPairingCode(\"6281234567890\");\nconsole.log(\"Pairing code:\", code); // e.g. \"A1B2-C3D4\"\n```\n\n**Authentication State:**\n\n```js\nimport { useMultiFileAuthState } from \"rafael-bails\";\n\nconst { state, saveCreds } = await useMultiFileAuthState(\"./session\");\n// state.creds → credentials (me, platform, noise keys, etc.)\n// state.keys → SignalKeyStore (pre-keys, sessions, identity keys, etc.)\n// saveCreds() → persist credentials to disk\n```\n\n**Custom Data Store / Memory Store Pattern:**\n\n```js\nimport {\n  BufferJSON,\n  initAuthCreds,\n  makeCacheableSignalKeyStore,\n} from \"rafael-bails\";\n\nconst credsStore = new Map();\nconst keyStoreData = new Map();\n\nconst creds = credsStore.get(\"creds\") || initAuthCreds();\n\nconst keys = makeCacheableSignalKeyStore({\n  get: async (type, ids) => {\n    const data = {};\n    for (const id of ids) {\n      data[id] = keyStoreData.get(`${type}:${id}`);\n    }\n    return data;\n  },\n  set: async (data) => {\n    for (const category in data) {\n      for (const id in data[category]) {\n        const value = data[category][id];\n        const key = `${category}:${id}`;\n        if (value == null) keyStoreData.delete(key);\n        else keyStoreData.set(key, value);\n      }\n    }\n  },\n});\n\nconst state = { creds, keys };\n\nconst saveCreds = async () => {\n  credsStore.set(\n    \"creds\",\n    JSON.parse(\n      JSON.stringify(state.creds, BufferJSON.replacer),\n      BufferJSON.reviver,\n    ),\n  );\n};\n```\n\nThis package does **not** currently ship a built-in `makeInMemoryStore()` helper.\n\nUse these patterns instead:\n\n- `useMultiFileAuthState()` for bot/local usage\n- `initAuthCreds()` + custom `SignalKeyStore` for DB/Redis/in-memory persistence\n- `makeCacheableSignalKeyStore()` when you want faster repeated key access with caching\n\n> [!WARNING]\n> `useMultiFileAuthState()` is convenient for bots and local testing, but the package itself warns against using it as your long-term production persistence layer. For production, write your own SQL/NoSQL-backed auth store.\n\n**Useful companion helpers:**\n\n```js\nimport {\n  Browsers,\n  DisconnectReason,\n  fetchLatestBaileysVersion,\n  makeCacheableSignalKeyStore,\n} from \"rafael-bails\";\n\nconst { version, isLatest } = await fetchLatestBaileysVersion();\nconsole.log(version, isLatest);\n```\n\n---\n\n### VoIP (Voice Calls)\n\nModul VoIP kini terintegrasi langsung di `rafael-bails` menggunakan `VoipClient` dan memanfaatkan *shared socket* (tanpa double pairing). Aset WebAssembly sudah built-in.\n\n**Inisiasi VoIP Client:**\n\n```js\nimport { VoipClient, CallState } from \"rafael-bails\";\n\n// Lakukan ini SETELAH connection === \"open\"\nif (!global.voipClient) {\n  global.voipClient = new VoipClient();\n  await global.voipClient.connectWithSocket(sock);\n  console.log(\"VoIP engine aktif!\");\n}\n```\n\n**Melakukan Panggilan:**\n\n```js\ntry {\n  // Panggil nomor target (PN) - harus terhubung\n  const call = await global.voipClient.call(\"6281234567890\", {\n    durationMs: 60000, // Timeout dalam ms\n    audioSource: \"silence\", // Atau \"mic\" / \"file\" (butuh audio-feeder & ffmpeg)\n  });\n\n  call.on(\"ringing\", () => console.log(\"Berdering...\"));\n  call.on(\"connected\", () => console.log(\"Terhubung!\"));\n  call.on(\"ended\", (reason) => console.log(\"Panggilan berakhir:\", reason));\n\n  // Menunggu hingga panggilan selesai\n  await call.waitForEnd();\n} catch (e) {\n  console.error(\"Gagal menelpon:\", e);\n}\n```\n\n---\n\n### Message Sending\n\n```js\n// Text\nawait sock.sendMessage(jid, { text: \"Hello!\" });\n\n// Text with mention\nawait sock.sendMessage(jid, {\n  text: \"Hello @628xxx!\",\n  mentions: [\"628xxx@s.whatsapp.net\"],\n});\n\n// Image\nawait sock.sendMessage(jid, {\n  image: { url: \"./photo.jpg\" },\n  caption: \"A photo\",\n});\n\n// Video\nawait sock.sendMessage(jid, {\n  video: { url: \"./video.mp4\" },\n  caption: \"A video\",\n  gifPlayback: false,\n});\n\n// Audio\nawait sock.sendMessage(jid, {\n  audio: { url: \"./audio.ogg\" },\n  mimetype: \"audio/ogg; codecs=opus\",\n  ptt: true, // voice note\n});\n\n// Sticker\nawait sock.sendMessage(jid, {\n  sticker: { url: \"./sticker.webp\" },\n});\n\n// Sticker pack\nawait sock.sendMessage(\n  jid,\n  makeStickerPack({\n    name: \"Rafael Starter Pack\",\n    publisher: \"Rafael\",\n    description: \"Starter sticker pack\",\n    stickers: [\n      { url: \"./stickers/1.webp\", emojis: [\"🔥\"] },\n      { url: \"./stickers/2.webp\", emojis: [\"😎\"] },\n    ],\n    cover: { url: \"./stickers/cover.webp\" },\n  }),\n);\n\n// Document\nawait sock.sendMessage(jid, {\n  document: { url: \"./file.pdf\" },\n  fileName: \"document.pdf\",\n  mimetype: \"application/pdf\",\n});\n\n// Reaction\nawait sock.sendMessage(jid, {\n  react: { key: msg.key, text: \"👍\" },\n});\n\n// Location\nawait sock.sendMessage(jid, {\n  location: {\n    degreesLatitude: -6.2,\n    degreesLongitude: 106.8,\n    name: \"Jakarta\",\n  },\n});\n\n// Contact\nawait sock.sendMessage(jid, {\n  contacts: {\n    displayName: \"Contacts\",\n    contacts: [\n      { vcard: \"BEGIN:VCARD\\nVERSION:3.0\\nFN:John\\nTEL:+628xxx\\nEND:VCARD\" },\n    ],\n  },\n});\n\n// Poll\nawait sock.sendMessage(jid, {\n  poll: {\n    name: \"Vote!\",\n    values: [\"Option A\", \"Option B\", \"Option C\"],\n    selectableCount: 1,\n  },\n});\n\n// Forward message\nawait sock.sendMessage(jid, {\n  forward: msg,\n  forwardingScore: 1,\n  isForwarded: true,\n});\n\n// Delete message\nawait sock.sendMessage(jid, { delete: msg.key });\n\n// Edit message\nawait sock.sendMessage(jid, {\n  text: \"Edited text\",\n  edit: msg.key,\n});\n```\n\n---\n\n### Interactive Messages\n\n**Native Flow Buttons:**\n\n```js\nawait sock.sendMessage(jid, {\n  interactiveMessage: {\n    title: \"Welcome!\",\n    footer: \"Powered by Rafael\",\n    buttons: [\n      {\n        name: \"quick_reply\",\n        buttonParamsJson: JSON.stringify({\n          display_text: \"Menu\",\n          id: \"menu\",\n        }),\n      },\n      {\n        name: \"cta_url\",\n        buttonParamsJson: JSON.stringify({\n          display_text: \"Website\",\n          url: \"https://example.com\",\n        }),\n      },\n      {\n        name: \"cta_copy\",\n        buttonParamsJson: JSON.stringify({\n          display_text: \"Copy Code\",\n          copy_code: \"RAFAEL2024\",\n        }),\n      },\n    ],\n    header: \"Choose an option\",\n    image: { url: \"https://example.com/banner.jpg\" },\n  },\n});\n```\n\n**List Menu (single_select):**\n\n```js\nawait sock.sendMessage(jid, {\n  interactiveMessage: {\n    title: \"Select Category\",\n    footer: \"Powered by Rafael\",\n    buttons: [\n      {\n        name: \"single_select\",\n        buttonParamsJson: JSON.stringify({\n          title: \"Menu\",\n          sections: [\n            {\n              title: \"Games\",\n              rows: [\n                { title: \"Quiz\", id: \".quiz\" },\n                { title: \"Tebak Gambar\", id: \".tebakgambar\" },\n              ],\n            },\n            {\n              title: \"Tools\",\n              rows: [\n                { title: \"Sticker\", id: \".sticker\" },\n                { title: \"TTS\", id: \".tts\" },\n              ],\n            },\n          ],\n        }),\n      },\n    ],\n    header: \"Bot Menu\",\n  },\n});\n```\n\n---\n\n### Album Messages\n\n```js\nawait sock.sendMessage(jid, {\n  albumMessage: [\n    { image: { url: \"./photo1.jpg\" }, caption: \"First\" },\n    { image: { url: \"./photo2.jpg\" }, caption: \"Second\" },\n    { video: { url: \"./clip.mp4\" }, caption: \"Video\" },\n  ],\n});\n```\n\n> [!NOTE]\n> Albums automatically set `expectedImageCount` and `expectedVideoCount` based on array content.\n\n---\n\n### AI Rich Response Messages\n\nSend messages styled like Meta AI — tables, code blocks, and rich text. All rendered via `botForwardedMessage` > `richResponseMessage`.\n\n**Table (with heading):**\n\n```js\nawait sock.sendTable(\n  jid,\n  \"Java vs JavaScript\",\n  [\"Feature\", \"Java\", \"JavaScript\"],\n  [\n    [\"Type\", \"Compiled\", \"Interpreted\"],\n    [\"Typing\", \"Static\", \"Dynamic\"],\n    [\"Main Use\", \"Enterprise\", \"Web, Full-stack\"],\n  ],\n  quoted,\n  {\n    headerText: \"Comparison:\",\n    footer: \"Hope this helps!\",\n  },\n);\n```\n\n**List (without heading):**\n\n```js\nawait sock.sendList(\n  jid,\n  \"Bot Info\",\n  [\n    [\"Name\", \"Rafael AI\"],\n    [\"Version\", \"2.4.0\"],\n    [\"Developer\", \"Zann\"],\n  ],\n  quoted,\n  { footer: \"© Rafael AI\" },\n);\n```\n\n**Code Block V1 (basic syntax highlighting):**\n\n```js\nawait sock.sendCodeBlock(\n  jid,\n  `const greeting = \"Hello World\"\nfunction sayHello(name) {\n    return greeting + \" \" + name\n}\nsayHello(\"Rafael\")`,\n  quoted,\n  {\n    language: \"javascript\",\n    title: \"Example Code\",\n    footer: \"Powered by Rafael\",\n  },\n);\n```\n\n**Supported V1 languages:** `javascript`, `typescript`, `python`\n\n**Table V2 (Unified Response):**\n\nThe V2 table uses the **unified response** format with `GenATableUXPrimitive` typename and base64-encoded data, matching the Meta AI rich response protocol.\n\n**Features over V1:**\n\n- String-based table input with flexible delimiters (`|` or `,` for columns, `;;` for rows)\n- Unified response sections with `GenATableUXPrimitive` / `GenAIMarkdownTextUXPrimitive` typenames\n- Dual output: `rows` (for submessages) + `unified_rows` (for sections)\n- Enhanced `contextInfo` with `botMessageSharingInfo`\n\n```js\nawait sock.sendTableV2(\n  jid,\n  [\n    \"Java vs JavaScript\", // title\n    \"Feature | Java | JavaScript\", // header (pipe-delimited)\n    \"Type | Compiled | Interpreted;;Typing | Static | Dynamic;;Main Use | Enterprise | Web, Full-stack\", // rows (;; separated, | or , delimited)\n  ],\n  quoted,\n  {\n    headerText: \"Comparison:\",\n    text: \"Here is a comparison table:\",\n    footer: \"Hope this helps!\",\n  },\n);\n```\n\n**Input format:**\n\n- `table[0]` — title string\n- `table[1]` — header row (columns separated by `|` or `,`)\n- `table[2+]` — data rows (rows separated by `;;`, columns by `|` or `,`)\n\n**V2 Options:**\n\n| Option       | Type     | Default | Description                                          |\n| ------------ | -------- | ------- | ---------------------------------------------------- |\n| `title`      | `string` | —       | Title (used if `headerText` not set)                 |\n| `headerText` | `string` | —       | Text shown before the table                          |\n| `text`       | `string` | —       | Markdown text section (GenAIMarkdownTextUXPrimitive) |\n| `footer`     | `string` | —       | Text shown after the table                           |\n\n---\n\n### Code Block V2 (Unified Response)\n\nThe V2 code block uses the **unified response** format with `sections/view_model/primitive` structure and base64-encoded data, matching the Meta AI rich response protocol exactly.\n\n**Features over V1:**\n\n- 6 language families with keyword detection\n- `/* */` block comment support\n- `#` comment support for python/bash/lua\n- Hex/binary/octal number literals\n- Dual token output: numeric `codeBlock` + string-typed `unified_codeBlock`\n- Unified response sections with `GenAICodeUXPrimitive` / `GenAIMarkdownTextUXPrimitive` typenames\n- Enhanced `contextInfo` with `botMessageSharingInfo`\n\n```js\nawait sock.sendCodeBlockV2(\n  jid,\n  `package main\n\nimport \"fmt\"\n\nfunc main() {\n    fmt.Println(\"Hello, World!\")\n}`,\n  quoted,\n  {\n    language: \"go\",\n    title: \"Go Example\",\n    text: \"Here is a Go code snippet:\",\n    footer: \"Powered by Rafael\",\n  },\n);\n```\n\n**Supported V2 languages:**\n\n| Language Key | Aliases                  |\n| ------------ | ------------------------ |\n| `javascript` | `js`, `typescript`, `ts` |\n| `python`     | `py`                     |\n| `go`         | `golang`                 |\n| `lua`        | —                        |\n| `bash`       | `sh`, `shell`            |\n\n**V2 Options:**\n\n| Option     | Type     | Default        | Description                                          |\n| ---------- | -------- | -------------- | ---------------------------------------------------- |\n| `language` | `string` | `'javascript'` | Programming language for syntax highlighting         |\n| `title`    | `string` | —              | Title text shown before the code block               |\n| `text`     | `string` | —              | Markdown text section (GenAIMarkdownTextUXPrimitive) |\n| `footer`   | `string` | —              | Footer text shown after the code block               |\n\n**V2 Token Types:**\n\n| Code | V1 Name   | V2 Name   | Description                                        |\n| ---- | --------- | --------- | -------------------------------------------------- |\n| 0    | `DEFAULT` | `DEFAULT` | Normal text, whitespace, operators                 |\n| 1    | `KEYWORD` | `KEYWORD` | Language keywords (`const`, `func`, `if`, etc.)    |\n| 2    | `METHOD`  | `METHOD`  | Function/method calls (identifier followed by `(`) |\n| 3    | `STRING`  | `STR`     | String literals (`\"...\"`, `'...'`, `` `...` ``)    |\n| 4    | `NUMBER`  | `NUMBER`  | Numeric values (int, float, hex, binary, octal)    |\n| 5    | `COMMENT` | `COMMENT` | Comments (`//`, `/* */`, `#`)                      |\n\n---\n\n### Link Message (Inline Embeds)\n\nSend rich text with inline clickable links using `{{IE_N}}display_text{{/IE_N}}` placeholders, with optional citation metadata and verification proofs.\n\n```js\nawait sock.sendLink(\n  jid,\n  \"Upload results:\\n✅ Freeimage\\n🔗 Klik: {{IE_0}}link disini{{/IE_0}}\\n✅ Yardsansh\\n🔗 Klik: {{IE_1}}link disini{{/IE_1}}\",\n  [\"https://example.com/upload1\", \"https://example.com/upload2\"],\n  quoted,\n  {\n    headerText: \"📁 Media Uploader V3\",\n    footer: \"✨ Selesai!\",\n    botJid: \"867051314767696@bot\",\n    forwardingScore: 3,\n    citations: [\n      {\n        sourceTitle: \"Freeimage\",\n        citationNumber: 1,\n        faviconCdnUrl: \"https://cdn.example.com/favicon.ico\",\n      },\n      { sourceTitle: \"Yardsansh\", citationNumber: 2 },\n    ],\n    proofs: [\n      {\n        version: 1,\n        useCase: 1,\n        signature: \"base64signature==\",\n        certificateChain: [\"base64cert1\", \"base64cert2\"],\n      },\n    ],\n  },\n);\n```\n\n**Link Options:**\n\n| Option            | Type         | Default                 | Description                           |\n| ----------------- | ------------ | ----------------------- | ------------------------------------- |\n| `headerText`      | `string`     | —                       | Text shown before the link content    |\n| `footer`          | `string`     | —                       | Text shown after the link content     |\n| `botJid`          | `string`     | `'867051314767696@bot'` | Bot JID for forwardedAiBotMessageInfo |\n| `forwardingScore` | `number`     | `3`                     | Forward score for context info        |\n| `citations`       | `Citation[]` | `[]`                    | Citation metadata entries             |\n| `proofs`          | `Proof[]`    | `[]`                    | Verification proof entries            |\n\n**Citation object:**\n\n| Field            | Type     | Description                                  |\n| ---------------- | -------- | -------------------------------------------- |\n| `sourceQuery`    | `string` | Source query text                            |\n| `faviconCdnUrl`  | `string` | CDN URL for favicon                          |\n| `citationNumber` | `number` | Citation index (auto-incremented if omitted) |\n| `sourceTitle`    | `string` | Title of the source                          |\n\n**Proof object:**\n\n| Field              | Type       | Description              |\n| ------------------ | ---------- | ------------------------ |\n| `version`          | `number`   | Proof version            |\n| `useCase`          | `number`   | Use case identifier      |\n| `signature`        | `string`   | Base64 signature         |\n| `certificateChain` | `string[]` | Base64 certificate chain |\n\n**Link V2 (search-result style):**\n\n```js\nawait sock.sendLinkV2(\n  jid,\n  \"Search results:\\n- {{IE_0}}Official docs{{/IE_0}}\\n- {{IE_1}}GitHub repo{{/IE_1}}\",\n  [\n    {\n      url: \"https://www.npmjs.com/package/rafael-bails\",\n      displayName: \"Official docs\",\n      sourceDisplayName: \"npm\",\n      sourceSubtitle: \"package registry\",\n    },\n    {\n      url: \"https://github.com/LuckyArch/rafael-bails\",\n      displayName: \"GitHub repo\",\n      sourceDisplayName: \"github\",\n      sourceSubtitle: \"source hosting\",\n    },\n  ],\n  quoted,\n  {\n    headerText: \"rafael-bails\",\n    footer: \"Reference links\",\n    searchEngine: \"MAME\",\n  },\n);\n```\n\n---\n\n### Other Message Types\n\n**Payment Request:**\n\n```js\nawait sock.sendMessage(jid, {\n  requestPaymentMessage: {\n    amount: 50000,\n    currency: \"IDR\",\n    note: \"Payment for order #123\",\n    from: \"628xxx@s.whatsapp.net\",\n  },\n});\n```\n\n**Event:**\n\n```js\nawait sock.sendMessage(jid, {\n  eventMessage: {\n    name: \"Community Meetup\",\n    description: \"Join us for the monthly meetup!\",\n    startTime: Date.now() + 86400000,\n    endTime: Date.now() + 90000000,\n    location: {\n      name: \"Jakarta\",\n      degreesLatitude: -6.2,\n      degreesLongitude: 106.8,\n    },\n  },\n});\n```\n\n**Poll Result:**\n\n```js\nawait sock.sendMessage(jid, {\n  pollResultMessage: {\n    name: \"Favorite Color?\",\n    pollVotes: [\n      { optionName: \"Red\", optionVoteCount: 42 },\n      { optionName: \"Blue\", optionVoteCount: 38 },\n      { optionName: \"Green\", optionVoteCount: 25 },\n    ],\n  },\n});\n```\n\n**Status with Mentions:**\n\n```js\nawait sock.sendStatusMention({ text: \"Big update coming!\" }, [\n  \"628xxx@s.whatsapp.net\",\n  \"groupid@g.us\",\n]);\n```\n\n**Product Message:**\n\n```js\nawait sock.sendMessage(jid, {\n  productMessage: {\n    title: \"Wireless Headphones\",\n    description: \"High quality bluetooth headphones\",\n    productId: \"WH-001\",\n    retailerId: \"rafael-shop\",\n    url: \"https://example.com/product\",\n    priceAmount1000: 299000,\n    currencyCode: \"IDR\",\n    thumbnail: { url: \"https://example.com/product.jpg\" },\n    body: \"Check out this product!\",\n    footer: \"Rafael Shop\",\n    buttons: [\n      {\n        name: \"quick_reply\",\n        buttonParamsJson: JSON.stringify({\n          display_text: \"Buy Now\",\n          id: \"buy_wh001\",\n        }),\n      },\n    ],\n  },\n});\n```\n\n**Mixed Rich Message (custom submessages):**\n\n```js\nawait sock.sendRichMessage(\n  jid,\n  [\n    { messageType: 2, messageText: \"Here is some info:\" },\n    {\n      messageType: 4,\n      tableMetadata: {\n        title: \"Stats\",\n        rows: [\n          { items: [\"Metric\", \"Value\"], isHeading: true },\n          { items: [\"Users\", \"1000\"] },\n          { items: [\"Uptime\", \"99.9%\"] },\n        ],\n      },\n    },\n    { messageType: 2, messageText: \"And some code:\" },\n    {\n      messageType: 5,\n      codeMetadata: {\n        codeLanguage: \"javascript\",\n        codeBlocks: [{ highlightType: 0, codeContent: 'console.log(\"OK\")' }],\n      },\n    },\n  ],\n  quoted,\n);\n```\n\n**SubMessage Types:**\n\n| messageType | Name          | Payload Field          |\n| ----------- | ------------- | ---------------------- |\n| 0           | UNKNOWN       | —                      |\n| 1           | GRID_IMAGE    | `gridImageMetadata`    |\n| 2           | TEXT          | `messageText`          |\n| 3           | INLINE_IMAGE  | `imageMetadata`        |\n| 4           | TABLE         | `tableMetadata`        |\n| 5           | CODE          | `codeMetadata`         |\n| 6           | DYNAMIC       | `dynamicMetadata`      |\n| 7           | MAP           | `mapMetadata`          |\n| 8           | LATEX         | `latexMetadata`        |\n| 9           | CONTENT_ITEMS | `contentItemsMetadata` |\n\n---\n\n### Newsletter Methods\n\n```js\n// Resolve channel URL to metadata\nconst info = await sock.cekIDSaluran(\"https://whatsapp.com/channel/xxxxx\");\nconsole.log(info.name, info.subscribers);\n\n// Bulk follow multiple channels\nawait sock.newsletterMultipleFollow(\"id1@newsletter id2@newsletter\");\n\n// Fetch all subscribed channels\nconst channels = await sock.newsletterFetchAllSubscribe();\n\n// Generic action (follow/unfollow/mute/unmute)\nawait sock.newsletterAction(\"id@newsletter\", \"follow\");\n\n// Create newsletter\nconst nl = await sock.newsletterCreate(\"My Channel\", \"Description\");\n\n// Update newsletter\nawait sock.newsletterUpdate(\"id@newsletter\", { name: \"New Name\" });\n\n// Get subscriber count\nconst { subscribers } = await sock.newsletterSubscribers(\"id@newsletter\");\n\n// Get metadata\nconst meta = await sock.newsletterMetadata(\"jid\", \"id@newsletter\");\n\n// Follow / Unfollow\nawait sock.newsletterFollow(\"id@newsletter\");\nawait sock.newsletterUnfollow(\"id@newsletter\");\n\n// Mute / Unmute\nawait sock.newsletterMute(\"id@newsletter\");\nawait sock.newsletterUnmute(\"id@newsletter\");\n\n// Update name / description / picture\nawait sock.newsletterUpdateName(\"id@newsletter\", \"New Name\");\nawait sock.newsletterUpdateDescription(\"id@newsletter\", \"New Desc\");\nawait sock.newsletterUpdatePicture(\"id@newsletter\", mediaUpload);\nawait sock.newsletterRemovePicture(\"id@newsletter\");\n\n// React to message\nawait sock.newsletterReactMessage(\"id@newsletter\", serverId, \"👍\");\n\n// Fetch messages\nconst msgs = await sock.newsletterFetchMessages(\"id@newsletter\", 50, 0, 0);\n\n// Admin operations\nconst count = await sock.newsletterAdminCount(\"id@newsletter\");\nawait sock.newsletterChangeOwner(\"id@newsletter\", newOwnerJid);\nawait sock.newsletterDemote(\"id@newsletter\", userJid);\nawait sock.newsletterDelete(\"id@newsletter\");\n```\n\n---\n\n### Group Methods\n\n```js\n// Fetch group metadata\nconst meta = await sock.groupMetadata(\"id@g.us\");\n\n// Create group\nconst group = await sock.groupCreate(\"My Group\", [\"628xxx@s.whatsapp.net\"]);\n\n// Leave group\nawait sock.groupLeave(\"id@g.us\");\n\n// Update subject / description\nawait sock.groupUpdateSubject(\"id@g.us\", \"New Subject\");\nawait sock.groupUpdateDescription(\"id@g.us\", \"New Description\");\n\n// Participant actions: add, remove, promote, demote\nconst result = await sock.groupParticipantsUpdate(\n  \"id@g.us\",\n  [\"628xxx@s.whatsapp.net\"],\n  \"add\", // 'remove' | 'promote' | 'demote'\n);\n\n// Handle join requests\nconst requests = await sock.groupRequestParticipantsList(\"id@g.us\");\nawait sock.groupRequestParticipantsUpdate(\n  \"id@g.us\",\n  [\"628xxx@s.whatsapp.net\"],\n  \"approve\",\n);\n\n// Invite code\nconst code = await sock.groupInviteCode(\"id@g.us\");\nawait sock.groupRevokeInvite(\"id@g.us\");\nawait sock.groupAcceptInvite(\"ABCDE12345\");\nconst info = await sock.groupGetInviteInfo(\"ABCDE12345\");\n\n// Settings: announcement, not_announcement, locked, unlocked\nawait sock.groupSettingUpdate(\"id@g.us\", \"announcement\");\nawait sock.groupSettingUpdate(\"id@g.us\", \"locked\");\n\n// Member add mode / Join approval\nawait sock.groupMemberAddMode(\"id@g.us\", \"admin_add\");\nawait sock.groupJoinApprovalMode(\"id@g.us\", \"on\");\n\n// Toggle disappearing messages\nawait sock.groupToggleEphemeral(\"id@g.us\", 86400); // 24h\n\n// Fetch all participating groups\nconst groups = await sock.groupFetchAllParticipating();\n\n// Update member label\nawait sock.updateMemberLabel(\"id@g.us\", \"VIP\");\n```\n\n---\n\n### Community Methods\n\n```js\n// Fetch community metadata\nconst meta = await sock.communityMetadata(\"communityid@g.us\");\n\n// Create community\nconst community = await sock.communityCreate(\n  \"Our Community\",\n  \"Community description\",\n);\n\n// Create a subgroup under a community\nconst subgroup = await sock.communityCreateGroup(\n  \"Announcements\",\n  [\"628xxx@s.whatsapp.net\"],\n  \"communityid@g.us\",\n);\n\n// Link / unlink an existing group\nawait sock.communityLinkGroup(\"groupid@g.us\", \"communityid@g.us\");\nawait sock.communityUnlinkGroup(\"groupid@g.us\", \"communityid@g.us\");\n\n// Fetch linked groups\nconst linked = await sock.communityFetchLinkedGroups(\"communityid@g.us\");\n\n// Invite handling\nconst code = await sock.communityInviteCode(\"communityid@g.us\");\nawait sock.communityRevokeInvite(\"communityid@g.us\");\nawait sock.communityAcceptInvite(code);\nconst inviteInfo = await sock.communityGetInviteInfo(code);\n\n// Requests / participants\nconst requests =\n  await sock.communityRequestParticipantsList(\"communityid@g.us\");\nawait sock.communityRequestParticipantsUpdate(\n  \"communityid@g.us\",\n  [\"628xxx@s.whatsapp.net\"],\n  \"approve\",\n);\nawait sock.communityParticipantsUpdate(\n  \"communityid@g.us\",\n  [\"628xxx@s.whatsapp.net\"],\n  \"add\",\n);\n\n// Settings\nawait sock.communityUpdateSubject(\"communityid@g.us\", \"New Subject\");\nawait sock.communityUpdateDescription(\"communityid@g.us\", \"New Description\");\nawait sock.communityToggleEphemeral(\"communityid@g.us\", 86400);\nawait sock.communitySettingUpdate(\"communityid@g.us\", \"announcement\");\nawait sock.communityMemberAddMode(\"communityid@g.us\", \"admin_add\");\nawait sock.communityJoinApprovalMode(\"communityid@g.us\", \"on\");\n\n// Leave / list all\nawait sock.communityLeave(\"communityid@g.us\");\nconst communities = await sock.communityFetchAllParticipating();\n```\n\n---\n\n### Business Methods\n\n```js\n// Catalog\nconst { products, nextPageCursor } = await sock.getCatalog({\n  jid: \"628xxx@s.whatsapp.net\",\n  limit: 10,\n});\n\nconst { collections } = await sock.getCollections(\"628xxx@s.whatsapp.net\", 10);\n\n// Orders\nconst order = await sock.getOrderDetails(orderId, tokenBase64);\n\n// Product CRUD\nconst product = await sock.productCreate({\n  name: \"Premium Package\",\n  description: \"Official premium plan\",\n  price: 150000,\n  currency: \"IDR\",\n  originCountryCode: \"ID\",\n  images: [mediaUpload],\n});\n\nawait sock.productUpdate(product.id, {\n  name: \"Premium Package Plus\",\n  description: \"Official premium plan plus\",\n  price: 175000,\n  currency: \"IDR\",\n  images: [mediaUpload],\n});\n\nawait sock.productDelete([product.id]);\n\n// Business profile\nawait sock.updateBusinessProfile({\n  address: \"Jakarta, Indonesia\",\n  description: \"Official store\",\n  websites: [\"https://example.com\"],\n  email: \"hello@example.com\",\n  hours: {\n    timezone: \"Asia/Jakarta\",\n    days: [{ day: \"mon\", mode: \"open_24h\" }],\n  },\n});\n\n// Legacy alias is still available for backward compatibility\nawait sock.updateBussinesProfile({\n  description: \"Legacy alias still works\",\n});\n\nawait sock.updateCoverPhoto(mediaUpload);\nawait sock.removeCoverPhoto(coverId);\n\n// Quick replies\nawait sock.addOrEditQuickReply({\n  shortcut: \"hello\",\n  message: \"Hello from business account\",\n});\n\nawait sock.removeQuickReply(timestamp);\n```\n\n---\n\n### Chat & Profile Methods\n\n```js\n// Profile picture\nconst url = await sock.profilePictureUrl(jid, \"image\");\nawait sock.updateProfilePicture(jid, mediaUpload);\nawait sock.removeProfilePicture(jid);\n\n// Profile name / status\nawait sock.updateProfileName(\"My Name\");\nawait sock.updateProfileStatus(\"Available\");\n\n// Presence\nawait sock.sendPresenceUpdate(\"available\", jid);\nawait sock.presenceSubscribe(jid);\n\n// Read receipts\nawait sock.readMessages([msg.key]);\nawait sock.sendReceipt(jid, participant, [msgId], \"read\");\n\n// Block / Unblock\nawait sock.updateBlockStatus(jid, \"block\");\nawait sock.updateBlockStatus(jid, \"unblock\");\n\n// Fetch blocklist\nconst list = await sock.fetchBlocklist();\n\n// Chat modifications\nawait sock.chatModify(\n  {\n    archive: true,\n    lastMessageOrig: msg,\n    lastMessage: msg,\n  },\n  jid,\n);\n\n// Star messages\nawait sock.star(jid, [{ id: msgId, fromMe: true }], true);\n\n// Contact management\nawait sock.addOrEditContact(jid, { displayName: \"Name\" });\nawait sock.removeContact(jid);\n\n// Labels\nawait sock.addChatLabel(jid, labelId);\nawait sock.removeChatLabel(jid, labelId);\nawait sock.addMessageLabel(jid, messageId, labelId);\n\n// App state sync\nawait sock.resyncAppState([\"regular\", \"critical_block\"], true);\n\n// Business profile\nconst biz = await sock.getBusinessProfile(jid);\n```\n\n---\n\n### Privacy Settings\n\n```js\nawait sock.updateLastSeenPrivacy(\"all\"); // 'all' | 'contacts' | 'contact_blacklist' | 'nobody'\nawait sock.updateOnlinePrivacy(\"all\"); // 'all' | 'match_last_seen'\nawait sock.updateProfilePicturePrivacy(\"contacts\");\nawait sock.updateStatusPrivacy(\"contacts\");\nawait sock.updateReadReceiptsPrivacy(\"all\"); // 'all' | 'none'\nawait sock.updateGroupsAddPrivacy(\"all\"); // 'all' | 'contacts'\nawait sock.updateMessagesPrivacy(\"all\"); // 'all' | 'contacts' | 'nobody'\nawait sock.updateCallPrivacy(\"everyone\");\nawait sock.updateDefaultDisappearingMode(86400);\nawait sock.updateDisableLinkPreviewsPrivacy(true);\n```\n\n---\n\n## 📡 Event Reference\n\n```js\nsock.ev.on('connection.update', ({ connection, lastDisconnect, qr, isNewLogin, receivedPendingNotifications, isOnline }) => {})\nsock.ev.on('creds.update', (update) => {})\nsock.ev.on('messaging-history.set', ({ chats, contacts, messages, isLatest }) => {})\nsock.ev.on('chats.upsert', (chats) => {})\nsock.ev.on('chats.update', (updates) => {})\nsock.ev.on('chats.delete', (jids) => {})\nsock.ev.on('contacts.upsert', (contacts) => {})\nsock.ev.on('contacts.update', (updates) => {})\nsock.ev.on('messages.upsert', ({ messages, type }) => {})\nsock.ev.on('messages.update', (updates) => {})\nsock.ev.on('messages.delete', (keys) => {})\nsock.ev.on('messages.reaction', (reactions) => {})\nsock.ev.on('message-receipt.update', (updates) => {})\nsock.ev.on('groups.update', (updates) => {})\nsock.ev.on('group-participants.update', (update) => {})\nsock.ev.on('group.join-request', (update) => {})\nsock.ev.on('call', (calls) => {})\nsock.ev.on('labels.edit', (label) => {})\nsock.ev.on('labels.associations', ({ associated, label, type }) => {})\nsock.ev.on('newsletter.update', (updates) => {})\nsock.ev.on('newsletter.follow', (jid) => {})\nsock.ev.on('newsletter.unfollow', (jid) => {})\nsock.ev.on('settings.update', ({ isAutoEmojiEnabled, isReadReceiptsEnabled, ... }) => {})\n```\n\n---\n\n## 🔧 Utility Exports\n\n```js\nimport {\n  // Auth\n  useMultiFileAuthState,\n  makeCacheableSignalKeyStore,\n  initAuthCreds,\n  BufferJSON,\n  fetchLatestBaileysVersion,\n\n  // Code tokenization\n  tokenizeCode,\n  tokenizeCodeV2,\n  CodeHighlightType,\n  RichSubMessageType,\n\n  // Rich message generators\n  generateTableContent,\n  generateTableContentV2,\n  toTableMetadataV2,\n  generateListContent,\n  generateCodeBlockContent,\n  generateCodeBlockContentV2,\n  generateLinkContent,\n  generateLinkContentV2,\n  generateRichMessageContent,\n  generateLatexContent,\n  generateLatexImageContent,\n  generateLatexInlineImageContent,\n  generateUnifiedResponseContent,\n  captureUnifiedResponse,\n\n  // Rich message builders\n  buildRichContextInfo,\n  buildBotForwardedMessage,\n\n  // Sticker pack helper\n  makeStickerPack,\n\n  // Language keyword sets\n  JS_KEYWORDS,\n  PYTHON_KEYWORDS,\n  GO_KEYWORDS,\n  LUA_KEYWORDS,\n  BASH_KEYWORDS,\n  LANGUAGE_KEYWORDS,\n\n  // Crypto\n  Curve,\n  signedKeyPair,\n  aesEncryptGCM,\n  aesDecryptGCM,\n\n  // JID utilities\n  jidEncode,\n  jidDecode,\n  jidNormalizedUser,\n  areJidsSameUser,\n  isJidGroup,\n  isJidNewsletter,\n  isLidUser,\n  isPnUser,\n  isJidBot,\n  isJidMetaAI,\n  isJidBroadcast,\n  isJidStatusBroadcast,\n\n  // Connection\n  DisconnectReason,\n  Browsers,\n\n  // Dugong (advanced message types)\n  Dugong,\n\n  // Types\n  WASocket,\n} from \"rafael-bails\";\n```\n\n> [!NOTE]\n> In this build, some advanced helper typings may appear first in `lib/Socket/messages-send.d.ts` before they are reflected everywhere else in aggregated socket declarations. If your editor autocomplete lags behind runtime behavior, inspect `lib/Socket/messages-send.js` and `lib/Utils/rich-messages.d.ts` for the most complete helper surface.\n\n---\n\n## 🏗️ Building This Package\n\nThis repository ships compiled files, but it still includes the build script used to emit/update `lib/`.\n\n```bash\nnpm install\nnpm run build\n```\n\nWhat the build does:\n\n- runs TypeScript with `tsconfig.build.json`\n- emits JavaScript and declaration files into `lib/`\n- runs `tsc-esm-fix` so generated ESM imports resolve cleanly\n\nImportant build notes:\n\n- `tsconfig.json` is authoring-oriented and uses `noEmit: true`\n- `tsconfig.build.json` flips emit back on and excludes test files\n- published package files are limited to `lib/**/*` and `WAProto/**/*`\n\n---\n\n## 🔀 Differences from Official Baileys\n\n| Area                 | Official Baileys v7 | rafael-bails                            |\n| -------------------- | ------------------- | ---------------------------------------- |\n| Interactive messages | No native support   | Full support via Dugong                  |\n| Album messages       | Not supported       | Multi-media albums                       |\n| AI Rich Response     | Not available       | Table, code block, rich text             |\n| Table V1             | Not available       | Basic table with headers                 |\n| Table V2             | Not available       | Unified response + GenATableUXPrimitive  |\n| Code Block V1        | Not available       | Syntax highlighting (JS/TS/Python)       |\n| Code Block V2        | Not available       | Unified response + 6 languages           |\n| Link Message         | Not available       | Inline embeds + citations + verification |\n| Business nodes       | Manual injection    | Auto-inject on relay                     |\n| Newsletter extras    | Basic only          | Auto-follow, bulk follow, URL resolve    |\n| Button detection     | Not available       | `getButtonType()` auto-detect            |\n| Payment messages     | Not supported       | Full support                             |\n| Event messages       | Basic               | Enhanced all fields                      |\n| Status mentions      | Not available       | `sendStatusMention()`                    |\n| Product messages     | Not supported       | Catalog + buttons                        |\n| LID support          | Basic               | Full LID↔PN mapping + session migration  |\n| Identity changes     | No handling         | Debounced session refresh                |\n| Message retry        | Basic               | `MessageRetryManager` with cache         |\n\n---\n\n## 🤝 Contributing\n\n1. Fork this repo\n2. Create a branch (`git checkout -b feature/name`)\n3. Commit changes (`git commit -m 'feat: add feature'`)\n4. Push to branch (`git push origin feature/name`)\n5. Open a Pull Request\n\n---\n\n## 📄 License\n\nMIT © [LuckyArch](https://github.com/LuckyArch)\n\n> [!CAUTION]\n> This library is for **educational purposes**. Ensure compliance with WhatsApp Terms of Service.\n\n---\n\n<div align=\"center\">\n\n**Made with 💚 by Zann**\n\n[⭐ Star this repo](https://github.com/LuckyArch/rafael-bails) · [🐛 Report Bug](https://github.com/LuckyArch/rafael-bails/issues) · [💡 Request Feature](https://github.com/LuckyArch/rafael-bails/issues)\n\n</div>\n","readmeFilename":"README.md"}