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

waurik

v1.0.7

Published

Librería para crear chatbots de WhatsApp usando decoradores

Readme

Waurik

Waurik es una librería para crear chatbots de WhatsApp usando decoradores en TypeScript. Es fácil de usar, escalable y el código es muy entendible para que cualquier desarrollador pueda contribuir en ella.

Características

  • Soporte para múltiples proveedores (Baileys, WhatsApp Business API)
  • Sistema de flujos basado en decoradores
  • Manejo de estado para cada conversación
  • Soporte para archivos (imágenes, documentos, etc.)
  • Integración con APIs REST
  • Manejo de eventos
  • Funciones personalizadas

Instalación

npm install waurik

Uso básico

import { Waurik, BaileysProvider, Flow, Step } from 'waurik';

@Flow('saludo')
class SaludoFlow {
  @Step('¡Hola! ¿Cómo estás?')
  async saludar(context: any) {
    return context.message.body;
  }

  @Step('Me alegro de que estés {saludar}. ¿En qué puedo ayudarte?')
  async preguntar(context: any) {
    return null;
  }
}

async function main() {
  const provider = new BaileysProvider();
  const waurik = new Waurik(provider);

  waurik.registerFlow(SaludoFlow);
  await waurik.initialize();
}

main().catch(console.error);

Decoradores

@Flow

Inicia un nuevo flujo y define la palabra clave para activarlo.

@Flow('registro')
class RegistroFlow {
  // ...
}

@Step

Define un paso en el flujo que envía un mensaje y espera la respuesta del usuario.

@Step('Por favor, ingresa tu nombre:')
async nombre(context: any) {
  return context.message.body;
}

@Func

Define una función que puede realizar operaciones personalizadas.

@Func()
async validarEdad(context: any) {
  if (context.state.edad < 18) {
    return false;
  }
  return true;
}

@Event

Maneja eventos específicos del proveedor.

@Event('message')
async onMessage(context: any) {
  // Manejar el evento
}

@Files

Maneja la recepción de archivos.

@Files('./uploads')
async documento(context: any) {
  return context.state.documento;
}

@Api

Realiza llamadas a APIs REST.

@Api('POST', 'https://api.example.com/registro')
async guardarRegistro(context: any) {
  return context.state.data;
}

@Menu

Define un menú interactivo con opciones que pueden navegar a diferentes partes del flujo.

@Menu(
  '¿En qué puedo ayudarte?',
  [
    { option: "1 - Ver productos", goTo: "productos" },
    { option: "2 - Hacer pedido", goTo: "pedido" },
    { option: "3 - Contactar soporte", goTo: "soporte" }
  ]
)
async mainMenu(context: any) {
  // Lógica adicional del menú si es necesaria
}

@Info

Muestra un mensaje informativo sin esperar respuesta del usuario.

@Info('Tu pedido ha sido registrado correctamente.')
async confirmacion(context: any) {
  // Lógica adicional si es necesaria
}

Opciones adicionales para decoradores

Los decoradores @Step e @Info soportan opciones adicionales para el manejo del flujo:

// Permitir volver al menú principal con el comando '0'
@Step('¿Cuál es tu nombre?', { 
  backToMenu: true,
  menuCommand: '0' // opcional, por defecto es '0'
})
async pedirNombre(context: any) {
  return context.message.body;
}

// También funciona con @Info
@Info('Procesando tu pedido...', { 
  backToMenu: true,
  menuCommand: '#' // usando un comando personalizado
})
async procesando(context: any) {
  // Lógica adicional
}

Proveedores

BaileysProvider

Proveedor gratuito basado en Baileys.

const provider = new BaileysProvider();

MetaProvider

Proveedor oficial de WhatsApp Business API.

const provider = new MetaProvider(
  'tu-access-token',
  'tu-phone-number-id',
  'tu-verify-token'
);

CustomProvider

Proveedor personalizado de ejemplo.

const provider = new CustomProvider({
  // Tu configuración personalizada
});

Contribuir

¡Las contribuciones son bienvenidas! Aquí te explicamos cómo puedes contribuir al proyecto:

Requisitos previos

  • Node.js (versión 16 o superior)
  • npm o yarn
  • Git

Configuración del entorno de desarrollo

  1. Haz un fork del repositorio
  2. Clona tu fork:
git clone https://github.com/aurik3/waurik.git
cd waurik
  1. Instala las dependencias:
npm install
  1. Construye el proyecto:
npm run build

Estructura del proyecto

waurik/
├── src/                    # Código fuente
│   ├── core/              # Núcleo de la librería
│   ├── decorators/        # Implementación de decoradores
│   ├── providers/         # Proveedores de WhatsApp
│   └── types/             # Definiciones de tipos
├── examples/              # Ejemplos de uso
├── tests/                 # Tests unitarios y de integración
└── dist/                  # Código compilado (generado)

Guía de desarrollo

  1. Crear una nueva rama:
git checkout -b feature/nueva-caracteristica
  1. Desarrollo:

    • Sigue las convenciones de código existentes
    • Escribe tests para nuevas funcionalidades
    • Actualiza la documentación según sea necesario
  2. Tests:

npm test
  1. Linting:
npm run lint
  1. Commit:

    • Usa mensajes de commit descriptivos
    • Sigue el formato: tipo(alcance): descripción
    • Ejemplo: feat(provider): add new WhatsApp provider
  2. Pull Request:

    • Actualiza la documentación
    • Incluye ejemplos de uso
    • Describe los cambios y su propósito
    • Asegúrate que todos los tests pasen

Convenciones de código

  • Usa TypeScript para todo el código nuevo
  • Sigue el estilo de código existente
  • Documenta las funciones y clases públicas
  • Escribe tests unitarios para nueva funcionalidad
  • Mantén la compatibilidad con versiones anteriores

Proceso de revisión

  1. Todos los PRs serán revisados por los mantenedores
  2. Los cambios deben pasar todos los tests
  3. La documentación debe estar actualizada
  4. El código debe seguir las convenciones establecidas

Reportar bugs

Si encuentras un bug, por favor:

  1. Revisa si ya existe un issue reportado
  2. Crea un nuevo issue con:
    • Descripción del problema
    • Pasos para reproducir
    • Comportamiento esperado
    • Versión de la librería
    • Entorno (Node.js, npm, etc.)

Sugerencias de mejora

Las sugerencias son bienvenidas. Por favor:

  1. Describe la mejora propuesta
  2. Explica por qué sería útil
  3. Incluye ejemplos de uso si es posible

Licencia

MIT