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 🙏

© 2025 – Pkg Stats / Ryan Hefner

clean-nodejs-utilities

v2.0.4

Published

Modular utility library for Node.js applications with WebSocket, authentication, and more

Readme

🚀 Clean Node.js Utilities

Una librería modular de utilidades para aplicaciones Node.js, comenzando con comunicación en tiempo real vía Socket.IO. Arquitectura extensible preparada para módulos adicionales como autenticación, pagos y más.

🎯 Características

Módulos Disponibles

  • Sockets Module: Comunicación en tiempo real con Socket.IO

    • Configuración automática con CORS
    • Handlers preconstruidos para chat y notificaciones
    • Arquitectura modular con gestión de handlers y repositorios
  • Auth Module: Autenticación con JWT y refresh tokens

    • Arquitectura limpia con inyección de dependencias
    • Middlewares Express integrados
    • Control de roles y blacklist de tokens
  • Server Module: Gestión de servidor Express con middlewares

    • MiddlewareServiceManager para gestión centralizada
    • Inicialización automática de middlewares
    • Soporte para middlewares personalizados

Características Generales

  • Arquitectura modular preparada para múltiples utilidades
  • Integración opcional de persistencia mediante Patrón Repository
  • No acoplamiento a base de datos específica (Null Object Pattern)
  • TypeScript con tipos completos y interfaces claras
  • Utilidades compartidas entre módulos
  • Tree shaking compatible para optimización de bundles
  • Listo para integrarse en cualquier backend con Express

🧩 Arquitectura

Arquitectura General

clean-nodejs-utilities/
├── src/
│   ├── shared/           # Utilidades compartidas
│   │   ├── utils/        # Logger, helpers comunes
│   │   ├── core/         # Patrones base reutilizables
│   │   ├── types/        # Tipos compartidos
│   │   └── errors/       # Sistema de errores unificado
│   ├── sockets/          # Módulo de WebSockets
│   ├── auth/             # Módulo de autenticación
│   ├── server/           # Módulo de servidor Express
│   │   ├── core/         # Lógica core del servidor
│   │   ├── interfaces/   # Interfaces del módulo
│   │   ├── types/        # Tipos específicos
│   │   └── index.ts      # Exportaciones del módulo
│   ├── payments/         # Futuro: Módulo de pagos
│   └── index.ts          # Exportaciones principales

📦 Instalación

npm install clean-nodejs-utilities

🚀 Uso Básico

Módulo Sockets

const express = require('express');
const http = require('http');
const { initSocketCore } = require('clean-nodejs-utilities');

const app = express();
const server = http.createServer(app);

// Inicialización simple del módulo sockets
const io = initSocketCore(server, {
  cors: {
    origin: "http://localhost:3000",
    credentials: true
  }
});

app.get('/', (req, res) => {
  res.send('Servidor funcionando!');
});

server.listen(3000, () => {
  console.log('Servidor corriendo en puerto 3000');
});

Uso con ES Modules (Auth Module)

import express from 'express';
import http from 'http';
import { initSocketCore } from 'clean-nodejs-utilities';

const app = express();
const server = http.createServer(app);

// Inicialización simple del módulo sockets
const io = initSocketCore(server, {
  cors: {
    origin: "http://localhost:3000",
    credentials: true
  }
});

app.get('/', (req, res) => {
  res.send('Servidor funcionando!');
});

server.listen(3000, () => {
  console.log('Servidor corriendo en puerto 3000');
});

Módulo Auth

const express = require('express');
const { initAuthCore } = require('clean-nodejs-utilities');

const app = express();
app.use(express.json());

// Inicializar el módulo de autenticación
const authCore = initAuthCore({
  config: {
    jwtSecret: 'tu_jwt_secret',
    jwtExpiresIn: '15m',
    refreshSecret: 'tu_refresh_secret',
    refreshExpiresIn: '7d',
    bcryptRounds: 10,
  },
});

// Inicializar el módulo
authCore.initialize().then(() => {
  console.log('Auth module initialized');
});

// Rutas de autenticación
app.post('/auth/login', async (req, res) => {
  try {
    const tokens = await authCore.signIn(req.body);
    res.json(tokens);
  } catch (error) {
    res.status(401).json({ error: 'Credenciales inválidas' });
  }
});

// Ruta protegida
app.get('/protected', authCore.getAuthMiddleware(), (req, res) => {
  res.json({ message: 'Acceso autorizado', user: req.user });
});

Módulo Server

import express from 'express';
import { initServerCore } from 'clean-nodejs-utilities';
import helmet from 'helmet';
import cors from 'cors';

const app = express();

// Inicializar el servidor con middlewares
const serverCore = initServerCore({
  config: {
    port: 3000,
    env: 'production'
  },
  middlewares: {
    helmet: helmet(),
    cors: cors({
      origin: 'http://localhost:3000',
      credentials: true
    })
  }
});

// Iniciar servidor (middlewares se aplican automáticamente)
const httpServer = await serverCore.start();

// Acceder al manager de middlewares
const middlewareManager = serverCore.middlewareManager;

// Registrar middleware adicional en runtime
middlewareManager.registerMiddleware('custom', (req, res, next) => {
  console.log('Custom middleware');
  next();
});

// Aplicar cambios
await middlewareManager.initializeAll();

Uso con ES Modules (Sockets Module)

import express from 'express';
import { initAuthCore } from 'clean-nodejs-utilities';

const app = express();
app.use(express.json());

// Inicializar el módulo de autenticación
const authCore = initAuthCore({
  config: {
    jwtSecret: 'tu_jwt_secret',
    jwtExpiresIn: '15m',
    refreshSecret: 'tu_refresh_secret',
    refreshExpiresIn: '7d',
    bcryptRounds: 10,
  },
});

// Inicializar el módulo
await authCore.initialize();
console.log('Auth module initialized');

// Rutas de autenticación
app.post('/auth/login', async (req, res) => {
  try {
    const tokens = await authCore.signIn(req.body);
    res.json(tokens);
  } catch (error) {
    res.status(401).json({ error: 'Credenciales inválidas' });
  }
});

// Ruta protegida
app.get('/protected', authCore.getAuthMiddleware(), (req, res) => {
  res.json({ message: 'Acceso autorizado', user: req.user });
});

📁 Estructura del Proyecto

clean-nodejs-utilities/
├── src/
│   ├── shared/                # Utilidades compartidas
│   │   ├── utils/             # Logger y utilidades comunes
│   │   ├── errors/            # Sistema de errores unificado
│   │   └── index.ts           # Exportaciones compartidas
│   ├── sockets/               # Módulo de WebSockets
│   │   ├── core/              # Lógica core de sockets
│   │   ├── handlers/          # Handlers preconstruidos
│   │   ├── interfaces/        # Interfaces y contratos
│   │   ├── types/             # Tipos específicos
│   │   └── index.ts           # Exportaciones del módulo
│   ├── auth/                  # Módulo de autenticación
│   │   ├── core/              # Núcleo del módulo
│   │   ├── services/          # Servicios de negocio
│   │   ├── interfaces/        # Contratos y abstracciones
│   │   ├── types/             # Definiciones TypeScript
│   │   ├── utils/             # Utilidades
│   │   ├── middlewares/       # Middlewares Express
│   │   ├── examples/          # Ejemplos de uso
│   │   ├── tests/             # Tests del módulo
│   │   └── index.ts           # Punto de entrada
│   ├── server/                # Módulo de servidor Express
│   │   ├── core/              # Lógica core del servidor
│   │   ├── interfaces/        # Interfaces del módulo
│   │   ├── types/             # Tipos específicos
│   │   └── index.ts           # Exportaciones del módulo
│   └── index.ts               # Exportaciones principales
├── examples/                  # Ejemplos de uso
│   ├── basic-usage.js         # Uso básico de sockets
│   ├── custom-handler.js      # Handlers personalizados
│   ├── with-repositories.js   # Integración con repositorios
│   └── auth-integration/      # Ejemplos de autenticación
├── docs/                      # Documentación adicional
├── legacy/                    # Código legacy (v1.x)
└── dist/                      # Archivos compilados

Estado de los Módulos

  • Sockets: Comunicación en tiempo real con Socket.IO
    • Handlers para chat y notificaciones
    • Arquitectura modular con repositorios
    • Integración opcional con persistencia
  • Auth: Autenticación con JWT y refresh tokens
    • Middlewares Express integrados
    • Control de roles y permisos
    • Blacklist de tokens
    • Soporte para múltiples bases de datos
  • Server: Gestión de servidor Express con middlewares
    • MiddlewareServiceManager para gestión centralizada
    • Inicialización automática de middlewares
    • Soporte para middlewares personalizados
  • 🔄 Payments: Futuro - Integración con pasarelas de pago
  • 🔄 Cache: Futuro - Sistema de cache distribuido

👨‍💻 Autor

Luisma Suarez - GitHub - LinkedIn

📋 Migración desde v1.x

Cambios Importantes en v2.0.0

Breaking Changes:

  • 📦 Nombre del paquete: clean-nodejs-socketsclean-nodejs-utilities
  • 🏗️ Reestructuración interna: Código reorganizado en módulos
  • 🔗 Rutas de importación: Cambios en rutas de módulos internos

Migración:

// Antes (v1.x)
const { initSocketCore } = require('clean-nodejs-sockets');

// Después (v2.0)
const { initSocketCore } = require('clean-nodejs-utilities');
// O para tree shaking:
const { initSocketCore } = require('clean-nodejs-utilities');

Backward Compatibility:

  • ✅ API pública del módulo sockets se mantiene igual
  • ✅ Funcionalidad existente funciona sin cambios
  • ✅ Solo cambia el nombre del paquete

Cambios en v2.0.1

Correcciones:

  • 📝 Documentación actualizada: Todas las referencias al nombre del paquete corregidas
  • 🔧 Importaciones corregidas: Ejemplos de código ahora usan el nombre correcto del paquete
  • 📦 Consistencia: Documentación sincronizada con la estructura actual del proyecto

Cambios en v2.0.3

Nuevas funcionalidades:

  • 🏗️ Server Module: Nuevo módulo para gestión de servidor Express
    • MiddlewareServiceManager para gestión centralizada de middlewares
    • Inicialización automática de middlewares con initializeAll()
    • Soporte para registro de middlewares personalizados
    • Métodos getAll(), remove(), clearAll(), y disposeAll()
  • 🔧 Mejoras en arquitectura: Mejor separación de responsabilidades
  • 📚 Documentación actualizada: Incluye ejemplos del nuevo módulo Server