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

@nivaldeir/chat-timereal-core

v1.0.2

Published

Biblioteca de chat em tempo real baseada em Socket.io

Readme

📚 Exemplos de Uso

Este diretório contém exemplos práticos de como usar as bibliotecas Client e Server do Chat em Tempo Real.

📋 Índice


🖥️ Cliente (Frontend)

O exemplo client-usage.ts demonstra como usar a biblioteca do cliente para se conectar ao servidor e interagir com o chat.

Funcionalidades Demonstradas

  • ✅ Conexão ao servidor Socket.IO
  • ✅ Escutar eventos de conexão
  • ✅ Enviar mensagens
  • ✅ Entrar em salas
  • ✅ Buscar mensagens
  • ✅ Receber mensagens em tempo real

Código de Exemplo

import { ChatClient } from '../src/client/index';

// Criar instância do cliente
const client = new ChatClient({
  url: 'http://localhost:3001',
  autoConnect: true,
});

// Escutar evento de conexão
client.on('connect', () => {
  console.log('Conectado!');
});

// Escutar novas mensagens
client.on('message', (message) => {
  console.log('Nova mensagem:', message);
});

// Enviar mensagem
client.sendMessage({
  userId: 'user-1',
  username: 'Alice',
  message: 'Olá!',
  roomId: 'room-1',
});

// Entrar em uma sala
client.joinRoom('room-1', 'Alice');

// Buscar mensagens
client.getMessages('room-1', 10);

// Escutar mensagens recebidas
client.on('messages', (messages) => {
  console.log('Mensagens recebidas:', messages);
});

Métodos Disponíveis

| Método | Descrição | |--------|-----------| | connect() | Conecta ao servidor | | disconnect() | Desconecta do servidor | | isConnected() | Verifica se está conectado | | sendMessage(data) | Envia uma mensagem | | joinRoom(roomId, username?) | Entra em uma sala | | leaveRoom(roomId) | Sai de uma sala | | createRoom(roomName, username?) | Cria uma nova sala | | getMessages(roomId?, limit?) | Busca mensagens | | saveMessage(messageId, save) | Marca mensagem como salva | | on(event, callback) | Escuta eventos | | off(event, callback?) | Remove listener de eventos |

Eventos Disponíveis

| Evento | Descrição | |--------|-----------| | connect | Quando conecta ao servidor | | disconnect | Quando desconecta | | message | Nova mensagem recebida | | messageSaved | Confirmação de mensagem salva | | messages | Lista de mensagens retornada | | userJoined | Usuário entrou na sala | | userLeft | Usuário saiu da sala | | roomCreated | Nova sala criada | | roomJoined | Entrou em uma sala | | roomLeft | Saiu de uma sala | | messageError | Erro ao processar mensagem |


🖥️ Servidor (Backend)

O exemplo server-usage.ts demonstra como configurar e inicializar o servidor Socket.IO com todas as funcionalidades.

Funcionalidades Demonstradas

  • ✅ Configuração do servidor Express
  • ✅ Inicialização do Socket.IO
  • ✅ Middleware de autenticação
  • ✅ Configuração do MessageService
  • ✅ Setup dos handlers de socket

Código de Exemplo

import express from 'express';
import { createServer } from 'http';
import {
  SocketConfig,
  setupSocketHandlers,
  MessageService,
  InMemoryMessageRepository,
  AuthenticatedSocket,
} from '../src/server/index';

const app = express();
const httpServer = createServer(app);

// Middleware de autenticação
function authenticateMiddleware(socket: any, next: any) {
  const userId = socket.handshake.auth?.userId || `user-${Date.now()}`;
  const username = socket.handshake.auth?.username || `user-${Date.now()}`;

  (socket as AuthenticatedSocket).userId = userId;
  (socket as AuthenticatedSocket).username = username;
  (socket as AuthenticatedSocket).socketId = socket.id;
  (socket as AuthenticatedSocket).joinedAt = Date.now();

  next();
}

// Configurar serviços
const messageRepository = new InMemoryMessageRepository();
const messageService = new MessageService(messageRepository);

// Inicializar Socket.IO
const io = SocketConfig.initialize(httpServer, authenticateMiddleware);
setupSocketHandlers(io, messageService);

// Iniciar servidor
httpServer.listen(3001, () => {
  console.log('Servidor rodando na porta 3001');
});

Componentes Principais

SocketConfig

Gerencia a configuração e instância do Socket.IO server.

const io = SocketConfig.initialize(httpServer, authenticateMiddleware);

MessageService

Serviço para gerenciar mensagens (salvar, buscar, deletar).

const messageRepository = new InMemoryMessageRepository();
const messageService = new MessageService(messageRepository);

setupSocketHandlers

Configura todos os handlers de eventos do Socket.IO.

setupSocketHandlers(io, messageService);

🚀 Executando os Exemplos

Pré-requisitos

npm install

Executar o Servidor

# Opção 1: Usar o servidor completo com API REST
npm run start

# Opção 2: Executar apenas o exemplo do servidor
npx tsx examples/server-usage.ts

Executar o Cliente

# Em outro terminal, execute o exemplo do cliente
npx tsx examples/client-usage.ts

Executar Ambos

  1. Terminal 1 - Inicie o servidor:

    npm run start
  2. Terminal 2 - Execute o cliente:

    npx tsx examples/client-usage.ts

📖 Exemplos Adicionais

Exemplo: Cliente Completo

import { ChatClient } from '../src/client/index';

const client = new ChatClient({
  url: 'http://localhost:3001',
  autoConnect: true,
  transports: ['websocket'],
  reconnection: true,
  reconnectionDelay: 1000,
  reconnectionAttempts: 5,
});

// Eventos de conexão
client.on('connect', () => {
  console.log('✅ Conectado!', client.getSocketId());
});

client.on('disconnect', (reason) => {
  console.log('❌ Desconectado:', reason);
});

// Eventos de mensagens
client.on('message', (message) => {
  console.log(`📨 [${message.username}]: ${message.message}`);
});

client.on('messageSaved', (data) => {
  console.log('💾 Mensagem salva:', data.messageId);
});

// Eventos de salas
client.on('userJoined', (user) => {
  console.log(`👤 ${user.username} entrou na sala`);
});

client.on('roomJoined', (data) => {
  console.log(`🚪 Entrou na sala: ${data.roomId}`);
});

// Enviar mensagem
client.sendMessage({
  userId: 'user-1',
  username: 'Alice',
  message: 'Olá, mundo!',
  roomId: 'room-1',
});

Exemplo: Servidor com API REST

Veja o arquivo server.ts na raiz do projeto para um exemplo completo de servidor com endpoints REST para testar via Postman.


🔗 Links Úteis


💡 Dicas

  1. Desenvolvimento: Use npm run dev para watch mode durante o desenvolvimento
  2. Build: Execute npm run build para gerar os arquivos compilados
  3. Testes: Use os endpoints REST do server.ts para testar via Postman
  4. Tipos: Todos os tipos estão disponíveis em src/shared/types.ts

📝 Notas

  • Os exemplos usam InMemoryMessageRepository que armazena mensagens apenas em memória
  • Para produção, implemente um repositório com banco de dados
  • O middleware de autenticação é básico; implemente autenticação real conforme necessário

Desenvolvido com ❤️ usando Socket.IO