A Wiredia API é uma API RESTful desenvolvida em Node.js/Express que fornece serviços utilitários para processamento de dados, conversões, validações e integrações com serviços externos. O sistema inclui autenticação baseada em JWT, gerenciamento de API keys, painel administrativo e sistema completo de logging.
URL Base: https://api.wiredia.dev
Porta: 3000
Ambiente: Produção (Ubuntu Server)
Registro de Usuário
POST /auth/register/registrarLogin de Usuário
POST /auth/login/loginVerificação de Sessão
verifyUser para rotas protegidasControle de Acesso Admin
ADMIN_EMAILS)verifyAdmin para rotas administrativas/admin após login/panel ao tentar acessar /adminGeração de API Keys
POST /keys/generate-keyVisualização de API Keys
GET /keys/statsValidação de API Key
verifyApiKey para rotas da APIx-api-keyHash de Texto
GET /hash?text={texto}&algorithm={algoritmo}{ algorithm: string, hash: string }Comparação de Hash
POST /compare{ text: string, hash: string, algorithm?: string }Codificação/Decodificação Base64
POST /base64/encode, POST /base64/decodeValidação e Formatação de CPF
XXX.XXX.XXX-XXPOST /cpfValidação de CEP
XXXXX-XXXPOST /cepCodificação/Decodificação Hexadecimal
POST /hex/encode, POST /hex/decodeConversão de Timestamp
GET /timestamp?ts={timestamp}Integração Last.fm
GET /lastfm/:usernameConversão de Moedas
GET /valor/:moedaPágina de Registro (/registrar)
public/register.htmlPágina de Login (/login)
public/login.htmlPainel do Usuário (/panel)
public/panel.htmlPainel Administrativo (/admin)
public/admin.htmlRedirecionamento de Raiz
GET / redireciona para /registrarSistema de Logging
logs/YYYY-MM-DD.logEstatísticas de Uso
usageGET /keys/statsVisualização de Logs (Admin)
GET /admin/logs?limit={numero}Visualização de Usuários (Admin)
GET /admin/usersRate Limiting
Validação de Entrada
Criptografia de Senhas
Proteção de Rotas Admin
Performance
Segurança
Confiabilidade
Manutenibilidade
Usabilidade
Stack Tecnológico
Backend:
Frontend:
Ferramentas:
Estrutura de Diretórios
wiredia/
├── main.ts # Servidor Express principal
├── auth.ts # Rotas de autenticação
├── apikey.ts # Gerenciamento de API keys
├── database.ts # Configuração do SQLite
├── package.json
├── tsconfig.json
├── .env # Variáveis de ambiente
├── .env.example
├── utils/ # Utilitários
│ ├── hash.ts
│ ├── compare.ts
│ ├── base64.ts
│ ├── hex.ts
│ ├── cpf.ts
│ ├── cep.ts
│ ├── time.ts
│ ├── valor.ts
│ └── lastfm.ts
├── public/ # Arquivos estáticos
│ ├── login.html
│ ├── register.html
│ ├── panel.html
│ └── admin.html
├── logs/ # Logs diários
├── dist/ # Código compilado
└── app.db # Banco de dados SQLite
Fluxo de Requisição
Tecnologia e Configuração
app.db (localizado na raiz do projeto)Diagrama Entidade Relacionamento
erDiagram
USERS {
INTEGER id PK "Chave Primária - Identificador único"
TEXT email UK "Email único - Usado para login"
TEXT password "Senha criptografada com bcrypt"
TEXT ip_registro "IP de origem do registro"
}
API_KEYS {
INTEGER id PK "Chave Primária - Identificador único"
INTEGER user_id FK "Chave Estrangeira -> users.id"
TEXT key UK "Chave de API única (48 caracteres hex)"
INTEGER created_at "Timestamp Unix da criação"
}
USAGE {
INTEGER id PK "Chave Primária - Identificador único"
INTEGER user_id FK "Chave Estrangeira -> users.id"
INTEGER count "Contador de requisições (padrão: 0)"
}
USERS ||--o{ API_KEYS : "Um usuário pode ter várias API keys"
USERS ||--o| USAGE : "Um usuário tem um contador de uso"
Estrutura das Tabelas
Tabela users
Armazena informações dos usuários cadastrados no sistema.
id (INTEGER PRIMARY KEY AUTOINCREMENT) - Identificador único do usuárioemail (TEXT UNIQUE) - Email do usuário (único, usado para login)password (TEXT) - Hash da senha criptografada com bcryptip_registro (TEXT) - IP de origem do registroTabela api_keys
Armazena as chaves de API geradas pelos usuários.
id (INTEGER PRIMARY KEY AUTOINCREMENT) - Identificador único da chaveuser_id (INTEGER, FOREIGN KEY -> users.id) - Referência ao usuário proprietáriokey (TEXT UNIQUE) - Chave de API (48 caracteres hexadecimais, única)created_at (INTEGER) - Timestamp Unix da criação da chaveTabela usage
Armazena o contador de requisições por usuário.
id (INTEGER PRIMARY KEY AUTOINCREMENT) - Identificador único do registrouser_id (INTEGER, FOREIGN KEY -> users.id) - Referência ao usuáriocount (INTEGER DEFAULT 0) - Contador de requisições realizadasRelacionamentos
users) pode possuir múltiplas API keys (api_keys) - Relação 1:Nusers) possui um único contador de uso (usage) - Relação 1:1Arquivo .env na raiz do projeto:
JWT_SECRET=<chave_aleatória_forte>
LASTFM_API_KEY=<sua_chave_lastfm>
ADMIN_EMAILS=seuemaildeadmin@wiredia.dev
.env não deve ser versionado.env.example deve ser versionado como templateRotas Públicas (Sem Autenticação)
/ → Redireciona para /registrar/login → Serve página de login/registrar → Serve página de registro/panel → Serve painel do usuário/admin → Serve painel administrativo/auth/register → Registro de novo usuário/auth/login → Login de usuárioRotas Protegidas (JWT)
/keys/generate-key → Gerar nova API key (Usuário autenticado)/keys/stats → Estatísticas do usuário (Usuário autenticado)/admin/users → Listar usuários (Admin)/admin/logs → Listar logs (Admin)Rotas da API (API Key)
/hash → Calcular hash/compare → Comparar hash/base64/encode → Codificar Base64/base64/decode → Decodificar Base64/cpf → Validar CPF/cep → Validar CEP/hex/encode → Codificar hexadecimal/hex/decode → Decodificar hexadecimal/timestamp → Converter timestamp/lastfm/:username → Última música Last.fm/valor/:moeda → Converter moedaTodas as rotas da API requerem header x-api-key.
.envCompilação
npm run build
Execução
npm run build # Compila TypeScript
npm start # Executa em produção
PM2
pm2 start dist/main.js --name wiredia-api ## em realidade de producao eu to rodando isso com uma screen, o pm2 so funciona quando quer
pm2 logs wiredia-api
pm2 restart wiredia-api