Baileys Redis Authentication State Handler

2.0.1 · active · verified Wed Apr 22

baileys-redis-auth is a specialized JavaScript/TypeScript library designed to provide robust Redis-based authentication state storage for Baileys, the popular WhatsApp Web API wrapper. Currently at version 2.0.1, this library primarily targets Baileys v7, with major releases typically coinciding with significant Baileys version updates, indicating a focused and stable release cadence. It differentiates itself by offering seamless session persistence, allowing Baileys applications to resume connections without repeated QR code scanning. Key features include flexible storage options, supporting both simple key-value pairs and the more efficient Redis Hashes (HSET) for optimized management of multiple Baileys sessions under distinct namespaces. This makes it particularly suitable for scalable applications requiring reliable session management, requiring Node.js 18+ and a running Redis server instance.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to initialize Baileys with Redis authentication state using `useRedisAuthStateWithHSet`, set up basic connection event handling, and persist credentials.

import { useRedisAuthStateWithHSet } from 'baileys-redis-auth'
import { RedisOptions } from 'ioredis'
import makeWASocket, { DisconnectReason } from 'baileys'
import { Boom } from '@hapi/boom'

// Define your Redis connection options
const redisOptions: RedisOptions = {
  host: 'localhost',
  port: 6379
  // password: process.env.REDIS_PASSWORD ?? '', // Uncomment if your Redis has a password
}

// Define a unique session identifier for this Baileys session
const sessionId = 'my_baileys_session_example'

async function initializeBaileysWithHSet() {
  const { state, saveCreds, redis: authRedisInstance } = await useRedisAuthStateWithHSet(
    redisOptions,
    sessionId,
    console.log // Optional: pass logger for Redis connection events
  )

  authRedisInstance.on('connect', () =>
    console.log(`Redis (from hook) connected for session: ${sessionId}`)
  )
  authRedisInstance.on('error', (err) =>
    console.error(`Redis (from hook) error for session ${sessionId}:`, err)
  )

  const sock = makeWASocket({
    auth: state,
    printQRInTerminal: true
  })

  sock.ev.on('creds.update', saveCreds)

  sock.ev.on('connection.update', (update) => {
    const { connection, lastDisconnect } = update
    if (connection === 'close') {
      const shouldReconnect = (lastDisconnect?.error as Boom)?.output?.statusCode !== DisconnectReason.loggedOut
      console.log('connection closed due to ', lastDisconnect?.error, ', reconnecting ', shouldReconnect)
      // reconnect if not logged out
      if (shouldReconnect) {
        initializeBaileysWithHSet()
      }
    } else if (connection === 'open') {
      console.log('opened connection')
    }
  })

  // You can now use 'sock' for Baileys operations
  console.log('Baileys initialized with Redis HSet state for session:', sessionId)
}

initializeBaileysWithHSet().catch(err => console.error('Failed to initialize Baileys:', err))

view raw JSON →