onilib
v1.0.2
Published
A modular Node.js library for real-time online integration in games and web applications
Downloads
19
Maintainers
Readme
ONILib (Online Integration Library)
🚀 Uma biblioteca Node.js completa para integração online em tempo real para jogos e aplicações web.
A ONILib é uma solução modular e escalável que fornece todos os recursos necessários para criar aplicações online em tempo real, incluindo autenticação, comunicação WebSocket, matchmaking, P2P WebRTC, armazenamento persistente e ferramentas de administração.
✨ Características Principais
- 🔐 Autenticação Robusta: Suporte a JWT e API Keys com estratégias customizáveis
- 🔄 Comunicação em Tempo Real: Servidor WebSocket com salas e middlewares
- 🎮 Sistema de Matchmaking: Filas inteligentes com critérios de pareamento
- 🔗 Suporte P2P: WebRTC signaling com fallback relay opcional
- 💾 Armazenamento Flexível: Adaptadores para Memory, SQLite, PostgreSQL e Cloudflare D1/KV
- 📊 Painel Administrativo: API REST para métricas, sessões e gerenciamento
- 🧪 Ferramentas de Teste: Harness completo para testes P2P, latência e throughput
- 🛠️ CLI Integrada: Comandos para scaffolding, desenvolvimento e deploy
🚀 Instalação Rápida
# Instalar globalmente
npm install -g onilib
# Criar novo projeto
onilib init meu-jogo-online
cd meu-jogo-online
# Instalar dependências
npm install
# Iniciar servidor de desenvolvimento
onilib start --dev📋 Comandos CLI
| Comando | Descrição |
|---------|----------|
| onilib init [nome] | Cria scaffolding inicial do projeto |
| onilib start [--dev] | Inicia servidor (--dev para hot reload) |
| onilib test | Executa suíte de testes |
| onilib test p2p --nodes=N --duration=Xs | Teste de stress P2P |
| onilib build | Prepara projeto para produção |
🏗️ Arquitetura Modular
Core Modules
const { NodeOnlineIntegration } = require('onilib');
const noi = new NodeOnlineIntegration({
// Configuração dos módulos
auth: { /* configurações de autenticação */ },
realtime: { /* configurações WebSocket */ },
storage: { /* configurações de armazenamento */ },
matchmaking: { /* configurações de matchmaking */ },
p2p: { /* configurações WebRTC */ },
admin: { /* configurações do painel admin */ }
});
await noi.start();Módulos Disponíveis
core: Gerenciamento de ciclo de vida e configuraçãoauth: Autenticação JWT e API Keyrealtime: Servidor WebSocket com salasstorage: Adaptadores de armazenamentomatchmaking: Sistema de filas e pareamentop2p: Signaling WebRTCadmin: API REST para administração
💡 Exemplo Básico
Servidor
const { NodeOnlineIntegration } = require('onilib');
const config = {
name: 'meu-jogo',
port: 3000,
auth: {
jwtSecret: 'seu-secret-jwt',
apiKeys: ['sua-api-key']
},
realtime: {
port: 8080,
authRequired: true
},
storage: {
type: 'sqlite',
path: './data/game.db'
},
matchmaking: {
maxPlayersPerMatch: 2,
enableSkillMatching: true
}
};
async function main() {
const noi = new NodeOnlineIntegration(config);
await noi.start();
// Obter referências dos módulos
const realtime = noi.getModule('realtime');
const matchmaking = noi.getModule('matchmaking');
// Registrar handlers customizados
realtime.registerHandler('game_action', (client, message) => {
console.log('Ação do jogo:', message.data);
// Broadcast para outros jogadores na sala
realtime.broadcastToRoom(client.currentRoom, {
type: 'player_action',
data: message.data
}, client.id);
});
// Eventos de matchmaking
matchmaking.on('match:started', (match) => {
console.log('Partida iniciada:', match.id);
// Criar sala dedicada para a partida
const roomId = `match_${match.id}`;
for (const player of match.players) {
realtime.joinRoom(player.client, roomId);
realtime.sendToClient(player.client, {
type: 'game_start',
data: { matchId: match.id, roomId }
});
}
});
}
main().catch(console.error);🔧 Configuração
Edit noi.config.js to customize your application settings:
- Authentication: Configure JWT secrets and API keys
- WebSocket: Set ports and connection limits
- Storage: Choose between memory, SQLite, or PostgreSQL
- Matchmaking: Configure queue settings and match criteria
- P2P: Set up WebRTC STUN/TURN servers
📡 API WebSocket
Mensagens de Autenticação
// Autenticação com API Key
{
type: 'auth',
data: {
strategy: 'apikey',
credentials: { apiKey: 'sua-api-key' }
}
}
// Autenticação com JWT
{
type: 'auth',
data: {
strategy: 'jwt',
credentials: { token: 'seu-jwt-token' }
}
}Mensagens de Salas
// Entrar em sala
{
type: 'join_room',
data: { roomId: 'lobby' }
}
// Sair de sala
{
type: 'leave_room',
data: { roomId: 'lobby' }
}Mensagens de Matchmaking
// Entrar na fila
{
type: 'join_queue',
data: {
queueType: 'ranked',
criteria: { skill: 1200, region: 'BR' }
}
}
// Aceitar partida
{
type: 'accept_match',
data: { matchId: 'match-123' }
}Admin REST API
Access the admin panel at http://localhost:3001:
GET /health- Health checkGET /api/system/stats- System statisticsGET /api/realtime/clients- Connected clientsGET /api/matchmaking/queues- Active queuesGET /api/p2p/rooms- P2P rooms
🧪 Testes
Executar Testes
# Todos os testes
npm test
# Testes específicos
npm test -- --testNamePattern="Auth Module"
# Testes P2P com múltiplos nós
onilib test p2p --nodes=10 --duration=60s
# Teste de carga
onilib test load --connections=100 --duration=30s🚀 Deploy
Railway/Render
# Preparar para deploy
onilib build
# Variáveis de ambiente necessárias
export NODE_ENV=production
export JWT_SECRET=seu-secret-super-seguro
export API_KEY=sua-api-key-producao
export STORAGE_TYPE=postgres
export DATABASE_URL=sua-connection-stringEnvironment Variables
NODE_ENV- Environment (development/production)PORT- HTTP server portWS_PORT- WebSocket server portJWT_SECRET- JWT signing secretAPI_KEY- Default API keySTORAGE_TYPE- Storage adapter (memory/sqlite/postgres)STORAGE_PATH- Database file path (for SQLite)
License
MIT
