jerkjs 2.2.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README_PT.md ADDED
@@ -0,0 +1,230 @@
1
+ # JERK Framework v2.3.0
2
+
3
+ ![JERK Framework Logo](jerk.jpg)
4
+
5
+ **Novo no JERK? Comece seu projeto rapidamente com nosso Kit Inicial**
6
+
7
+ Nosso Kit Inicial em `@standard/server.js` é a forma mais rápida de começar com o JERK. Ele vem com todas as funcionalidades do framework já configuradas, permitindo que você se concentre em desenvolver sua aplicação em vez de configurar infraestrutura.
8
+
9
+ **Recursos do Kit Inicial:**
10
+ - Configuração pronta para uso com todos os componentes principais
11
+ - Carregamento de rotas a partir de arquivo JSON (`routes.json`)
12
+ - Sistema de controladores pré-configurado
13
+ - Middlewares essenciais já integrados (autenticação, CORS, compressão, firewall, etc.)
14
+ - Sistema de logging e tratamento de erros implementado
15
+
16
+ **Como começar:**
17
+ 1. Edite o arquivo `routes.json` para definir suas rotas e associá-las aos seus controladores
18
+
19
+ Exemplo básico de `routes.json`:
20
+ ```json
21
+ [
22
+ {
23
+ "path": "/",
24
+ "method": "GET",
25
+ "controller": "HomeController",
26
+ "handler": "index",
27
+ "contentType": "text/html"
28
+ },
29
+ {
30
+ "path": "/api/users",
31
+ "method": "GET",
32
+ "controller": "UserController",
33
+ "handler": "getAllUsers",
34
+ "contentType": "application/json"
35
+ }
36
+ ]
37
+ ```
38
+
39
+ 2. Crie seus controladores de acordo com as rotas definidas
40
+
41
+ Por exemplo, para a rota principal "/", crie um arquivo `HomeController.js`:
42
+ ```javascript
43
+ class HomeController {
44
+ index(req, res) {
45
+ res.render('index.html', { data: 'Olá' });
46
+ }
47
+ }
48
+
49
+ module.exports = new HomeController();
50
+ ```
51
+
52
+ 3. Sua aplicação está pronta para usar!
53
+
54
+ O Kit Inicial inclui controladores de exemplo para que você possa ver como o sistema funciona.
55
+
56
+ Visite nosso site: https://jerk.page.gd/
57
+ Repositório oficial: https://gitlab.com/bytedogssyndicate1/jerk/
58
+
59
+ ## Recursos
60
+
61
+ - **Arquitetura Modular**: Componentes independentes para maior flexibilidade
62
+ - **Segurança Avançada**: Firewall integrado (WAF) com detecção de ataques
63
+ - **Sistema de Hooks**: Semelhante ao sistema do WordPress para extensibilidade
64
+ - **Autenticação Flexível**: Suporte para JWT, API Keys, Basic Auth, OAuth2, OpenID Connect
65
+ - **Armazenamento de Tokens**: Suporte para memória, JSON, SQLite e MariaDB
66
+ - **Roteamento Avançado**: Suporte para rotas parametrizadas e aninhadas
67
+ - **Suporte para Frontend**: Capacidade de servir conteúdo HTML e outros tipos de conteúdo
68
+ - **Configuração de Content-Type**: Especificação de cabeçalhos Content-Type em routes.json
69
+ - **Middlewares Integrados**: CORS, limitação de taxa, compressão, firewall, etc.
70
+ - **Gerenciamento de Controladores**: Carregamento dinâmico de controladores a partir de arquivos
71
+ - **Carregamento de Rotas**: Definição de rotas a partir de arquivos JSON
72
+ - **Sistema de Sessões**: Gerenciamento completo de sessões com suporte para autenticação
73
+ - **Mecanismo de Templates MVC**: Sistema profissional de visualização com suporte para filtros, helpers e hooks
74
+ - **Extensibilidade**: Sistema de hooks e filtros para personalização
75
+
76
+ ## Instalação
77
+
78
+ ```bash
79
+ npm install jerkjs
80
+ ```
81
+
82
+ ## Uso Básico
83
+
84
+ ```javascript
85
+ const { APIServer, Router, Logger } = require('jerkjs');
86
+
87
+ // Criar instância do servidor
88
+ const server = new APIServer({
89
+ port: 3000,
90
+ host: 'localhost'
91
+ });
92
+
93
+ // Criar instância do logger
94
+ const logger = new Logger({ level: 'info' });
95
+
96
+ // Definir rotas
97
+ server.addRoute('GET', '/', (req, res) => {
98
+ res.writeHead(200, { 'Content-Type': 'application/json' });
99
+ res.end(JSON.stringify({ message: 'Olá Mundo!' }));
100
+ });
101
+
102
+ // Iniciar o servidor
103
+ server.start();
104
+ ```
105
+
106
+ ## Componentes Principais
107
+
108
+ ### APIServer
109
+ Servidor HTTP/HTTPS básico com suporte para rotas parametrizadas, middlewares e configuração avançada.
110
+
111
+ ### Router
112
+ Sistema de roteamento avançado com suporte para rotas aninhadas e prefixos.
113
+
114
+ ### Authenticator
115
+ Middleware de autenticação com suporte para múltiplos métodos (JWT, API Keys, Basic Auth, OAuth2, OpenID Connect).
116
+
117
+ ### SecurityEnhancedServer
118
+ Servidor com recursos de segurança avançada (WAF) integrados.
119
+
120
+ ### RouteLoader
121
+ Carregamento de rotas a partir de arquivos JSON com suporte para autenticação, controladores e especificação de tipo de conteúdo.
122
+
123
+ ### TokenManager
124
+ Gerenciamento de tokens JWT com diferentes tipos de armazenamento (memória, JSON, SQLite, MariaDB).
125
+
126
+ ### Firewall
127
+ Middleware de firewall com detecção de padrões de ataque e listas brancas/negras.
128
+
129
+ ### Sistema de Hooks
130
+ Sistema de hooks e filtros semelhante ao WordPress para extensibilidade.
131
+
132
+ ### SessionManager
133
+ Sistema completo de gerenciamento de sessões com suporte para autenticação baseada em sessões.
134
+
135
+ ### ViewEngine
136
+ Mecanismo de templates profissional com suporte para filtros, helpers, condições, loops e hooks.
137
+
138
+ ### ControllerBase
139
+ Controlador base que facilita o desenvolvimento de controladores MVC com suporte para visualizações.
140
+
141
+ ## Segurança
142
+
143
+ O framework inclui múltiplas camadas de segurança:
144
+
145
+ - **Web Application Firewall (WAF)**: Detecção de injeção SQL, XSS, travessia de caminho, etc.
146
+ - **Limitação de Taxa**: Limitação de requisições por IP ou usuário
147
+ - **Firewall**: Bloqueio automático por tentativas falhas
148
+ - **Listas Brancas/Negras**: Controle de acesso por IP
149
+ - **Auditoria de Segurança**: Registro de eventos de segurança
150
+ - **Autenticação Robusta**: Suporte para múltiplos métodos de autenticação
151
+
152
+ ## Sistema de Hooks
153
+
154
+ O framework inclui um sistema de hooks e filtros semelhante ao WordPress:
155
+
156
+ ```javascript
157
+ const { hooks } = require('jerkjs');
158
+
159
+ // Registrar uma ação
160
+ hooks.addAction('firewall_request_blocked', (rule, clientIP, req, res) => {
161
+ console.log(`Solicitação bloqueada: ${rule.name} para IP: ${clientIP}`);
162
+ });
163
+
164
+ // Registrar um filtro
165
+ hooks.addFilter('session_create_data', (userData, req) => {
166
+ return {
167
+ ...userData,
168
+ ipAddress: req.headers['x-forwarded-for'] || req.connection.remoteAddress,
169
+ createdAt: new Date().toISOString()
170
+ };
171
+ });
172
+ ```
173
+
174
+ ## Mecanismo de Templates MVC
175
+
176
+ O framework inclui um mecanismo de templates profissional com suporte para:
177
+
178
+ - Variáveis: `{{variable}}`
179
+ - Condições: `{{if variable}}conteúdo{{endif}}`
180
+ - Loops: `{{foreach:array}}conteúdo{{endforeach}}`
181
+ - Inclusões: `{{include:header}}`
182
+ - Filtros: `{{variable|upper}}`
183
+ - Helpers personalizados
184
+
185
+ ## Gerenciamento de Sessões
186
+
187
+ O framework inclui um sistema completo de gerenciamento de sessões:
188
+
189
+ ```javascript
190
+ const { SessionManager } = require('jerkjs');
191
+
192
+ const sessionManager = new SessionManager({
193
+ secret: 'your-session-secret',
194
+ timeout: 3600000 // 1 hora
195
+ });
196
+
197
+ // Usar como middleware
198
+ server.use(sessionManager.middleware());
199
+ ```
200
+
201
+ ## Exemplos
202
+
203
+ O projeto inclui vários exemplos completos:
204
+
205
+ - **v2_json_auth**: Autenticação JWT com tokens armazenados em JSON
206
+ - **v2_mariadb_auth**: Autenticação JWT com tokens armazenados em MariaDB
207
+ - **v2_sqlite_auth**: Autenticação JWT com tokens armazenados em SQLite
208
+ - **public**: API pública de exemplo com CORS e limitação de taxa
209
+ - **frontend**: Exemplo de servidor que combina API e frontend com diferentes tipos de conteúdo
210
+ - **hooks**: Exemplo avançado de uso do sistema de hooks com logging e rastreamento de solicitações
211
+
212
+ Para ver os exemplos completos, visite os diretórios `v2examplle/` e `examples/`.
213
+
214
+ ## Documentação
215
+
216
+ Além da documentação no README, o projeto inclui documentação adicional:
217
+
218
+ - **Guia de início rápido**: `docs/guia_inicio_rapido_jerkjs.md` - Um guia completo para começar rapidamente com o JERKJS, incluindo formatos de arquivos, estrutura de controladores, mecanismo de templates e sistema de hooks.
219
+
220
+ ## Contribuições
221
+
222
+ As contribuições são bem-vindas. Por favor, abra uma issue ou envie um pull request no GitLab.
223
+
224
+ ## Licença
225
+
226
+ Apache 2.0
227
+
228
+ ## Documentação do Framework
229
+
230
+ Para uma descrição detalhada da arquitetura e componentes do framework, consulte o arquivo [JERK_FRAMEWORK_DOCUMENTATION.md](JERK_FRAMEWORK_DOCUMENTATION.md).
@@ -0,0 +1,186 @@
1
+ # Arquitectura del Sistema de Rutas en JERK Framework
2
+
3
+ ## Descripción General
4
+
5
+ El sistema de rutas en JERK Framework permite definir endpoints de API mediante dos métodos principales:
6
+ 1. Archivo JSON (`routes.json`) - Carga masiva de rutas
7
+ 2. Método `addRoute()` - Definición individual de rutas
8
+
9
+ ## Componentes Principales
10
+
11
+ ### 1. APIServer (lib/core/server.js)
12
+
13
+ Componente principal que gestiona las rutas y el ciclo de vida de la solicitud HTTP.
14
+
15
+ **Características:**
16
+ - Almacena rutas en el array `this.routes`
17
+ - Implementa el método `addRoute(method, path, handler)` para definir rutas individuales
18
+ - Maneja el enrutamiento en `findRoute(method, pathname)`
19
+ - Soporta rutas parametrizadas con conversión a expresiones regulares
20
+ - Mantiene un cache de expresiones regulares para rutas parametrizadas
21
+ - Ejecuta middlewares antes de los handlers de rutas
22
+ - Soporta rutas estáticas para servir archivos desde directorios locales
23
+
24
+ **Método `addRoute`:**
25
+ - Recibe: método HTTP, path y handler
26
+ - Soporta autenticación por ruta
27
+ - Soporta content-type por ruta
28
+ - Soporta rutas estáticas con propiedad `static`
29
+ - Carga controladores desde archivos externos
30
+ - Registra la ruta en el array
31
+
32
+ ### 2. RouteLoader (lib/loader/routeLoader.js)
33
+
34
+ Componente encargado de cargar rutas desde archivos JSON.
35
+
36
+ **Características:**
37
+ - Lee y parsea archivos JSON de rutas
38
+ - Valida la estructura del archivo de rutas
39
+ - Carga controladores desde archivos externos
40
+ - Aplica autenticación por ruta
41
+ - Aplica content-type por ruta
42
+ - Soporta rutas estáticas
43
+ - Dispara hooks antes y después de cargar rutas
44
+ - Soporta recarga automática de rutas
45
+
46
+ **Método `loadSingleRoute`:**
47
+ - Carga el módulo del controlador
48
+ - Obtiene el handler del controlador
49
+ - Aplica content-type si está especificado
50
+ - Aplica autenticación si está especificada
51
+ - Procesa rutas estáticas si están definidas
52
+ - Integra el handler procesado con el servidor usando `server.addRoute`
53
+
54
+ ## Funcionalidades Soportadas por routes.json
55
+
56
+ ### 1. Estructura Básica
57
+ ```json
58
+ [
59
+ {
60
+ "path": "/ruta/ejemplo",
61
+ "method": "GET",
62
+ "controller": "./controllers/EjemploController.js",
63
+ "handler": "metodoHandler"
64
+ }
65
+ ]
66
+ ```
67
+
68
+ ### 2. Content-Type por Ruta
69
+ ```json
70
+ {
71
+ "contentType": "application/json"
72
+ }
73
+ ```
74
+
75
+ ### 3. Autenticación por Ruta
76
+ ```json
77
+ {
78
+ "auth": "jwt",
79
+ "authOptions": {
80
+ "jwtSecret": "secreto-ejemplo"
81
+ }
82
+ }
83
+ ```
84
+
85
+ Tipos de autenticación soportados:
86
+ - `jwt` - Autenticación JWT
87
+ - `apiKey` - Autenticación por API Key
88
+ - `session` - Autenticación por sesión
89
+ - Otros tipos registrados en el authenticator
90
+
91
+ ### 4. Rutas Parametrizadas
92
+ Soporta rutas con parámetros como `/usuarios/:id` que se convierten a expresiones regulares.
93
+
94
+ ### 5. Rutas Estáticas
95
+ Soporta rutas para servir archivos estáticos desde directorios locales:
96
+
97
+ ```json
98
+ [
99
+ {
100
+ "path": "/static",
101
+ "method": "GET",
102
+ "static": {
103
+ "dir": "./public",
104
+ "index": ["index.html", "index.htm"],
105
+ "cacheControl": "public, max-age=3600"
106
+ }
107
+ }
108
+ ]
109
+ ```
110
+
111
+ ## Comparativa: routes.json vs addRoute()
112
+
113
+ | Característica | routes.json | addRoute() |
114
+ |---|---|---|
115
+ | Definición de rutas | Masiva (archivo JSON) | Individual |
116
+ | Carga de controladores | Automática desde archivos | Manual (función handler) |
117
+ | Autenticación por ruta | ✅ Soportada | ✅ Soportada |
118
+ | Content-Type por ruta | ✅ Soportado | ✅ Soportado |
119
+ | Opciones de autenticación | ✅ Soportadas | ✅ Soportadas |
120
+ | Rutas parametrizadas | ✅ Soportadas | ✅ Soportadas |
121
+ | Rutas estáticas | ✅ Soportadas | ✅ Soportadas |
122
+ | Integración con hooks | ✅ Soportada | ✅ Soportada |
123
+
124
+ ## Flujo de Procesamiento de Rutas
125
+
126
+ ### Para routes.json:
127
+ 1. `RouteLoader.loadRoutes()` lee el archivo JSON
128
+ 2. Valida la estructura del archivo
129
+ 3. Para cada ruta, `loadSingleRoute()`:
130
+ - Si es ruta estática, llama directamente a `server.addRoute()` con configuración estática
131
+ - Si es ruta dinámica, carga el módulo del controlador
132
+ - Obtiene el handler del controlador
133
+ - Aplica content-type si existe
134
+ - Aplica autenticación si existe
135
+ - Llama a `server.addRoute()` con el handler procesado
136
+ 4. El servidor procesa las solicitudes normalmente
137
+
138
+ ### Para addRoute():
139
+ 1. Cliente llama directamente `server.addRoute(method, path, handler)` o `server.addRoute(configObject)`
140
+ 2. La ruta se registra directamente en `this.routes`
141
+ 3. Si es una ruta estática (tiene propiedad `static`), se crea un handler especial para servir archivos
142
+ 4. El servidor procesa las solicitudes normalmente
143
+
144
+ ## Rutas Estáticas
145
+
146
+ ### Definición
147
+ Las rutas estáticas permiten servir archivos desde directorios locales. Se definen con la propiedad `static`:
148
+
149
+ ```json
150
+ {
151
+ "path": "/assets",
152
+ "method": "GET",
153
+ "static": {
154
+ "dir": "./public/assets",
155
+ "index": ["index.html"],
156
+ "cacheControl": "public, max-age=3600"
157
+ }
158
+ }
159
+ ```
160
+
161
+ ### Características
162
+ - Sirve cualquier archivo dentro del directorio especificado
163
+ - Detecta automáticamente el tipo MIME
164
+ - Soporta archivos índice para carpetas
165
+ - Permite configurar headers de caché
166
+ - Previene ataques de path traversal
167
+ - Compatible con el sistema de hooks del framework
168
+
169
+ ### Integración con Hooks
170
+ El sistema de rutas estáticas incluye integración con el sistema de hooks:
171
+
172
+ - `pre_static_file_serve`: Antes de procesar un archivo estático
173
+ - `static_file_served`: Después de servir un archivo estático
174
+ - `static_file_not_found`: Cuando no se encuentra un archivo estático
175
+ - `static_file_access_denied`: Cuando se niega el acceso a un archivo estático
176
+ - `serving_index_file`: Cuando se sirve un archivo índice
177
+ - `static_directory_no_index`: Cuando un directorio no tiene archivo índice
178
+ - `before_reading_static_file`: Antes de leer un archivo estático
179
+ - `static_file_error`: Cuando ocurre un error al servir un archivo estático
180
+
181
+ ## Problemas Resueltos
182
+
183
+ ### 1. Soporte para archivos estáticos
184
+ - Se ha añadido soporte nativo para servir archivos estáticos
185
+ - Ambos sistemas (routes.json y addRoute) soportan rutas estáticas
186
+ - Se mantiene la seguridad y funcionalidad existente