npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

furina-baileys

v1.0.5-furina

Published

Baileys versi Furina untuk membuat bot WhatsApp dengan lebih banyak fitur dan lainnya

Readme

Furina-Baileys

💍 FURINA-BAILEYS

WhatsApp Web API library dengan stabilitas koneksi, kelengkapan button interaktif, CRM automation, broadcast anti-ban, dan message detection 96+ tipe. Built on top of WhiskeySockets/Baileys.

v1.0.5-furina · TypeScript · Dual CJS/ESM

[!CAUTION] Baileys 7.0.0 introduced breaking changes. Check the migration guide before upgrading.


✨ What Makes This Different

Most WhatsApp libraries give you raw socket access and leave the rest to you. Furina-Baileys adds production features that take weeks to build:

  • 🛰️ Stability layer — auto-reconnect tangguh, exponential backoff, stealth mode untuk reconnects
  • 🔘 Button set terlengkap — 17 tipe native + 4 modifier message-level, verified on-device (bukan klaim)
  • 🗂️ CRM system — track customers, conversations, activity, analytics
  • 📨 Broadcast automation — personal/group/channel dengan anti-ban delays (Gaussian, rate cap)
  • 🔍 Message detection — recognize 96+ message types termasuk view-once dan reactions
  • 🛡️ Anti-BAN protection — health monitor, auto-pause, stealth composing
  • 🆔 Custom pairing code — requestPairingCode(phone, customCode) tanpa error conflict ID
  • 🌐 Custom browser identity — Browsers.ubuntu/macOS/baileys/windows/android/appropriate

You still get full Baileys API access. This just handles the boring stuff so you can focus on your bot logic.


📦 Instalasi

npm install furina-baileys

🚀 Quick Start

Basic Connection

CommonJS:

const { makeWASocket, useMultiFileAuthState } = require('furina-baileys')

async function start() {
  const { state, saveCreds } = await useMultiFileAuthState('auth_info')
  const sock = makeWASocket({ auth: state })

  sock.ev.on('creds.update', saveCreds)
  sock.ev.on('connection.update', ({ connection }) => {
    if (connection === 'open') console.log('Connected to WhatsApp')
  })
}
start()

ESM:

import makeWASocket, { useMultiFileAuthState } from 'furina-baileys'
// struktur sama persis

Custom Pairing Code

Tidak mau scan QR? Pakai pairing code, bisa dengan kustomisasi kode:

const sock = makeWASocket({ auth: state })

sock.ev.on('connection.update', async ({ connection }) => {
  if (connection === 'open') return
  const code = await sock.requestPairingCode('6281234567890', 'FURINA')
  console.log('Masukkan kode ini di HP:', code)
})

Custom Browser Identity

Ubah identitas yang muncul di "Perangkat tertaut":

const { Browsers } = require('furina-baileys')

const sock = makeWASocket({
  auth: state,
  browser: Browsers.macOS('Chrome'), // ubuntu / macOS / baileys / windows / android / appropriate
})

🗂️ CRM & Broadcast Automation

const { CRMBroadcastManager, InMemoryStorage } = require('furina-baileys')

const storage = new InMemoryStorage()
await storage.init()

const bc = new CRMBroadcastManager(sock, storage)

// Personal broadcast ke segment VIP, spintax + personalization
await bc.send({ tags: ['vip'] }, '{Halo|Hai} {nama}! Ada promo baru nih 📡')

// Group broadcast dengan delay anti-ban
await bc.sendToGroups(['[email protected]'], '{Halo|Hai} semua!')

// Channel broadcast dengan role check
await bc.sendToChannels(['https://whatsapp.com/channel/XXX'], 'Update bot terbaru!')

🔍 Message Detection

Recognize 96+ message types termasuk view-once dan reactions — pakai detectMessageType dari CRM utils, semua ter-export di entrypoint utama.


🛰️ Stability Layer

Auto-reconnect dengan exponential backoff dan stealth mode aktif by default: penanganan reconnect otomatis yang tangguh, penyesuaian keep-alive ping, dan auto-recovery saat session terputus.


🛡️ Anti-BAN Protection

Gaussian delay (pola natural), rate cap per menit, dan health monitor dengan auto-pause. Warm up nomor baru bertahap 7 hari dan hormati trigger auto-pause.


🆔 Furina Resolver

Complete WhatsApp identity resolver (LID mapping + USync queries + legacy helpers):

const { getFurinaResolver, isGroup, isLID, isNewsletter } = require('furina-baileys')

const resolver = getFurinaResolver(sock)

const lid = await resolver.resolveLID('[email protected]')
const pn  = await resolver.resolvePN('54435237613621@lid')
const jid = await resolver.resolveTarget('@username') // smart auto-detect

console.log(isGroup('[email protected]'))        // true
console.log(isLID('54435237613621@lid'))      // true
console.log(isNewsletter('xxx@newsletter'))   // true

🔘 Button Interaktif — Matriks Tested-On-Device

Personal (jalan di WA ORI biasa)

| Tipe | Native name | Callback ke bot | |---|---|---| | reply | quick_reply | ✅ | | list | single_select | ✅ | | url (+webview) | cta_url | ❌ (buka link) | | call | cta_call | ❌ (telepon) | | copy | cta_copy | ❌ (clipboard) | | reminder | cta_reminder | ❌ | | cancel-reminder | cta_cancel_reminder | ❌ | | location | send_location | ✅ | | address | address_message | ✅ |

Business (butuh akun WhatsApp Business — gratis, convert nomor via app)

| Tipe | Native name | Callback | |---|---|---| | catalog | cta_catalog | ❌ (buka katalog) | | call-permission | call_permission_request | ✅ |

Modifier message-level

| Fitur | Efek | |---|---| | bottomSheet | Button >N di-collapse jadi sheet "Lihat X opsi" | | limitedTimeOffer | Banner countdown flash sale + kode promo | | has_multiple_buttons | Otomatis di-inject kalau tipe button di-mix | | header (gambar/video) | Banner media di atas button | | sendCarousel | 1–10 kartu geser dengan media |

Contoh pakai

const { sendButton, parseButtonResponse } = require('furina-baileys')

await sendButton(sock, jid, {
  text: 'Mau order? Pilih jalur 👇',
  footer: 'toko lo',
  limitedTimeOffer: { text: 'Promo berakhir dalam', copyCode: 'FLASH50', expiresAtMs: Date.now() + 3600000 },
  bottomSheet: { buttonsLimit: 2, listTitle: 'Semua opsi', buttonTitle: 'Lihat semua' },
  buttons: [
    { type: 'reply', id: '#order', text: '📝 Order Manual' },
    { type: 'copy', text: '💳 Copy QRIS', code: 'NOMOR-REKENING' },
    { type: 'url', text: '🌐 Katalog Web', url: 'https://link.lo', webview: true },
  ],
})

// nangkep tap user
sock.ev.on('messages.upsert', ({ messages }) => {
  for (const m of messages) {
    const btn = parseButtonResponse(m)
    if (btn) console.log('tap:', btn.kind, btn.id, btn.displayText)
  }
})

Aturan validasi jumlah (button, row, kartu) ada di FURINA_BUTTON_RULES & FURINA_CAROUSEL_RULES — melanggar = throw eksplisit biar salahnya ketahuan sebelum dikirim, bukan silent-drop di HP penerima.


⚠️ Button Region & Asset-Gated — BACA DULU

Empat tipe button di bawah sudah ada di library ini dan payload-nya sudah benar, tetapi WhatsApp tidak akan merendernya kecuali syarat platform terpenuhi. Validasi terjadi server-side di Meta — bukan bug library, dan tidak bisa diakali lewat payload/node:

| Tipe | Syarat platform | Realita di Indonesia | |---|---|---| | pix (payment_info) | Rekening/CPF Brasil, divalidasi bank sentral BR | ❌ tidak akan pernah render | | order (review_and_pay) | Payments live penuh hanya India & Brasil + onboarding payment provider | ❌ limited testing | | flow | flow_id wajib published via WABA/Cloud API (nomor Cloud API tidak bisa bareng sesi Web) | ❌ tidak bisa dimiliki dari Baileys | | product-list | productId wajib asli dari katalog yang commerce-ready (produk draft/review tidak terbaca API) | ⚠️ bisa kalau produk sudah approved |

Workaround yang disediakan library ini (pola seller Indo):

// Pembayaran manual ala QRIS (pengganti PIX/review_and_pay)
await sendButton(sock, jid, {
  text: '💳 Pembayaran INV-2026-001',
  limitedTimeOffer: { text: 'Bayar dalam', copyCode: 'INV-2026-001', expiresAtMs: Date.now() + 3600000 },
  buttons: [
    { type: 'copy', text: '💠 Copy Kode QRIS', code: 'QRIS-LO' },
    { type: 'url', text: '🔗 Payment Link', url: 'https://payment.link/lo', webview: true },
    { type: 'reply', id: '#paid', text: '✅ Udah Bayar' },
  ],
})

// Form via webview in-app (pengganti flow — UX mirip, server milik lo)
await sendButton(sock, jid, {
  text: '📝 Form order (buka in-app):',
  buttons: [{ type: 'url', text: '📝 Isi Form', url: 'https://form.lo/order', webview: true }],
})

Untuk product-list, helper productCreate + getCatalog tersedia; pastikan status produk Aktif/approved di app WA Business dulu.


🏪 Catatan Akun Business

Status business menempel ke nomor, bukan app: convert nomor lewat app WA Business (gratis), link device via pairing code dari library ini, app-nya boleh di-uninstall setelahnya. Di akun personal, button business (catalog, call-permission, commerce) akan di-silent-ignore oleh WhatsApp.


📖 Dokumentasi

Semua fitur Furina terdokumentasi lengkap di README ini (satu pintu, nggak pecah ke file lain). Untuk referensi API upstream Baileys (messages, groups, chats, media, dll): https://baileys.wiki


📄 Responsible Usage

This library is for legitimate automation. Misuse (spam, scams, bulk messaging without consent) is the user's responsibility, not the developer's.

Guidelines:

  1. Send only to opt-in lists (people who gave permission)
  2. Respect opt-out requests (STOP, BERHENTI, unsubscribe)
  3. Warm up new numbers gradually over 7 days
  4. Monitor health score and respect auto-pause triggers
  5. Avoid blasting to cold/unknown contact lists

The upstream Baileys maintainers don't condone usage that violates WhatsApp ToS. Use responsibly — your number is your responsibility.


🎭 Credits

  • Furina (Genshin Impact character) — inspiration for project name and visual identity
  • Art & demo content — created by Avandy
  • Upstream foundation — WhiskeySockets/Baileys

📜 License & Attribution

English

Licensed under Apache License 2.0 with attribution requirements.

Copyright:

  • WhiskeySockets/Baileys (2025) — original project
  • Avandy (2026) — modifications and additional features

Attribution Requirement:

If you use, modify, or distribute this library, you must credit:

  • Original creators: WhiskeySockets
  • Modifications: Avandy
  • Repository: https://github.com/reivalavandy06-oss/furina-baileys

How to credit:

Built with [Furina-Baileys](https://github.com/reivalavandy06-oss/furina-baileys)
Based on [WhiskeySockets/Baileys](https://github.com/WhiskeySockets/Baileys)
Modifications by Avandy

Forking policy: Forks must maintain proper attribution. Removing credits without permission may result in DMCA takedown notices.


Bahasa Indonesia

Dilisensikan di bawah Apache License 2.0 dengan syarat atribusi.

Hak Cipta:

  • WhiskeySockets/Baileys (2025) — proyek asli
  • Avandy (2026) — modifikasi dan fitur tambahan

Syarat Atribusi:

Jika Anda menggunakan, memodifikasi, atau mendistribusikan library ini, Anda wajib memberikan kredit kepada:

  • Pembuat asli: WhiskeySockets
  • Modifikasi: Avandy
  • Repository: https://github.com/reivalavandy06-oss/furina-baileys

Cara memberikan kredit:

Dibuat dengan [Furina-Baileys](https://github.com/reivalavandy06-oss/furina-baileys)
Berdasarkan [WhiskeySockets/Baileys](https://github.com/WhiskeySockets/Baileys)
Modifikasi oleh Avandy

Kebijakan forking: Fork wajib mempertahankan atribusi yang tepat. Menghapus kredit tanpa izin dapat dikenakan DMCA takedown notice.

Disclaimer: Library ini untuk automation yang legitim. Penyalahgunaan (spam, scam, blast tanpa izin) adalah tanggung jawab user, bukan developer.