@robiki/proxy 1.0.2 → 1.0.4
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.de.md +101 -395
- package/README.es.md +100 -394
- package/README.ja.md +101 -395
- package/README.md +101 -395
- package/README.pl.md +101 -395
- package/README.ru.md +100 -394
- package/README.zh.md +100 -394
- package/dist/{config-CeJ1tf8T.d.ts → config-Bmt0asXb.d.ts} +5 -11
- package/dist/config-C-0wrirG.js +315 -0
- package/dist/{config-CQ7zIaQt.d.ts → config-CCOdQL7F.d.ts} +7 -11
- package/dist/{config-_6LOsppp.d.ts → config-DtfpOtWI.d.ts} +30 -73
- package/dist/index.d.ts +14 -2
- package/dist/index.js +30 -58
- package/dist/utils/config.d.ts +1 -1
- package/dist/utils/config.js +3 -215
- package/package.json +2 -5
package/README.es.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# 🚀 Robiki Proxy
|
|
2
2
|
|
|
3
|
-
> Un proxy inverso HTTP/2 de alto rendimiento
|
|
3
|
+
> Un proxy inverso HTTP/2 de alto rendimiento con soporte WebSocket, enrutamiento configurable, CORS y validación de solicitudes. Úsalo como paquete npm o contenedor Docker para entornos de desarrollo local.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@robiki/proxy)
|
|
6
6
|
[](https://opensource.org/licenses/MIT)
|
|
7
7
|
|
|
8
|
-
## 🌍 Idiomas
|
|
8
|
+
## 🌍 Idiomas
|
|
9
9
|
|
|
10
10
|
[English](README.md) | [Deutsch](README.de.md) | [中文](README.zh.md) | [日本語](README.ja.md) | [Polski](README.pl.md) | [Español](README.es.md) | [Русский](README.ru.md)
|
|
11
11
|
|
|
@@ -18,54 +18,29 @@
|
|
|
18
18
|
- **✅ Validación de solicitudes**: Lógica de validación personalizada para autenticación, limitación de velocidad, etc.
|
|
19
19
|
- **🔄 Remapeo de URL**: Transforma URLs antes de reenviarlas a servicios de destino
|
|
20
20
|
- **📦 Uso dual**: Usa como paquete npm o contenedor Docker
|
|
21
|
+
- **⚙️ Soporte de configuración JavaScript y TypeScript**: Usa archivos de configuración `.js` o `.ts` con funciones en Docker
|
|
21
22
|
- **🎯 Soporte multi-puerto**: Escucha en múltiples puertos simultáneamente
|
|
22
23
|
- **⚡ Alto rendimiento**: Construido sobre la implementación nativa HTTP/2 de Node.js
|
|
23
24
|
|
|
24
25
|
## 📦 Instalación
|
|
25
26
|
|
|
26
|
-
###
|
|
27
|
+
### Paquete npm
|
|
27
28
|
|
|
28
29
|
```bash
|
|
29
30
|
npm install @robiki/proxy
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
```bash
|
|
31
|
+
# o
|
|
33
32
|
yarn add @robiki/proxy
|
|
34
33
|
```
|
|
35
34
|
|
|
36
|
-
###
|
|
35
|
+
### Docker
|
|
37
36
|
|
|
38
37
|
```bash
|
|
39
38
|
docker pull robiki/proxy:latest
|
|
40
39
|
```
|
|
41
40
|
|
|
42
|
-
### Como servicio Docker Compose
|
|
43
|
-
|
|
44
|
-
```yaml
|
|
45
|
-
services:
|
|
46
|
-
proxy:
|
|
47
|
-
image: robiki/proxy:latest
|
|
48
|
-
container_name: robiki-proxy
|
|
49
|
-
restart: unless-stopped
|
|
50
|
-
ports:
|
|
51
|
-
- '443:443'
|
|
52
|
-
- '8080:8080'
|
|
53
|
-
- '9229:9229'
|
|
54
|
-
volumes:
|
|
55
|
-
- ./proxy.config.json:/app/proxy.config.json:ro
|
|
56
|
-
- ./certs:/app/certs:ro
|
|
57
|
-
networks:
|
|
58
|
-
- app-network
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
## Notas
|
|
62
|
-
|
|
63
|
-
- Los hosts configurados localmente deben agregarse a su archivo `hosts` local.
|
|
64
|
-
- Si está utilizando certificados personalizados, debe agregar los archivos de certificado al directorio `certs`.
|
|
65
|
-
|
|
66
41
|
## 🚀 Inicio rápido
|
|
67
42
|
|
|
68
|
-
###
|
|
43
|
+
### Paquete npm
|
|
69
44
|
|
|
70
45
|
```javascript
|
|
71
46
|
import { createProxy } from '@robiki/proxy';
|
|
@@ -88,13 +63,11 @@ const proxy = await createProxy({
|
|
|
88
63
|
},
|
|
89
64
|
},
|
|
90
65
|
});
|
|
91
|
-
|
|
92
|
-
console.log('¡El servidor proxy está funcionando!');
|
|
93
66
|
```
|
|
94
67
|
|
|
95
|
-
###
|
|
68
|
+
### Docker
|
|
96
69
|
|
|
97
|
-
|
|
70
|
+
Crea `proxy.config.json`:
|
|
98
71
|
|
|
99
72
|
```json
|
|
100
73
|
{
|
|
@@ -108,20 +81,14 @@ console.log('¡El servidor proxy está funcionando!');
|
|
|
108
81
|
"api.example.com": {
|
|
109
82
|
"target": "backend-service:3000",
|
|
110
83
|
"ssl": true
|
|
111
|
-
},
|
|
112
|
-
"example.com": {
|
|
113
|
-
"target": "frontend-service:8080",
|
|
114
|
-
"ssl": false
|
|
115
84
|
}
|
|
116
85
|
}
|
|
117
86
|
}
|
|
118
87
|
```
|
|
119
88
|
|
|
120
|
-
|
|
89
|
+
Crea `docker-compose.yml`:
|
|
121
90
|
|
|
122
91
|
```yaml
|
|
123
|
-
version: '3.8'
|
|
124
|
-
|
|
125
92
|
services:
|
|
126
93
|
proxy:
|
|
127
94
|
image: robiki/proxy:latest
|
|
@@ -133,25 +100,9 @@ services:
|
|
|
133
100
|
- ./certs:/app/certs:ro
|
|
134
101
|
environment:
|
|
135
102
|
- PROXY_CONFIG=/app/proxy.config.json
|
|
136
|
-
networks:
|
|
137
|
-
- app-network
|
|
138
|
-
|
|
139
|
-
backend-service:
|
|
140
|
-
image: your-backend-image
|
|
141
|
-
networks:
|
|
142
|
-
- app-network
|
|
143
|
-
|
|
144
|
-
frontend-service:
|
|
145
|
-
image: your-frontend-image
|
|
146
|
-
networks:
|
|
147
|
-
- app-network
|
|
148
|
-
|
|
149
|
-
networks:
|
|
150
|
-
app-network:
|
|
151
|
-
driver: bridge
|
|
152
103
|
```
|
|
153
104
|
|
|
154
|
-
|
|
105
|
+
Inicia:
|
|
155
106
|
|
|
156
107
|
```bash
|
|
157
108
|
docker-compose up -d
|
|
@@ -159,9 +110,9 @@ docker-compose up -d
|
|
|
159
110
|
|
|
160
111
|
## 📖 Configuración
|
|
161
112
|
|
|
162
|
-
###
|
|
113
|
+
### Configuración JSON
|
|
163
114
|
|
|
164
|
-
|
|
115
|
+
Configuración declarativa simple:
|
|
165
116
|
|
|
166
117
|
```json
|
|
167
118
|
{
|
|
@@ -169,24 +120,17 @@ Crea un archivo `proxy.config.json` con la siguiente estructura:
|
|
|
169
120
|
"ssl": {
|
|
170
121
|
"key": "./certs/key.pem",
|
|
171
122
|
"cert": "./certs/cert.pem",
|
|
172
|
-
"ca": "./certs/ca.pem",
|
|
173
123
|
"allowHTTP1": true
|
|
174
124
|
},
|
|
175
125
|
"cors": {
|
|
176
126
|
"origin": "*",
|
|
177
|
-
"methods": ["GET", "POST", "PUT", "DELETE"
|
|
178
|
-
"
|
|
179
|
-
"credentials": true,
|
|
180
|
-
"maxAge": 86400
|
|
127
|
+
"methods": ["GET", "POST", "PUT", "DELETE"],
|
|
128
|
+
"credentials": true
|
|
181
129
|
},
|
|
182
130
|
"routes": {
|
|
183
131
|
"api.example.com": {
|
|
184
|
-
"target": "backend
|
|
185
|
-
"ssl": true
|
|
186
|
-
"cors": {
|
|
187
|
-
"origin": ["https://example.com"],
|
|
188
|
-
"credentials": true
|
|
189
|
-
}
|
|
132
|
+
"target": "backend:3000",
|
|
133
|
+
"ssl": true
|
|
190
134
|
},
|
|
191
135
|
"*.example.com": {
|
|
192
136
|
"target": "wildcard-service:4000",
|
|
@@ -196,78 +140,32 @@ Crea un archivo `proxy.config.json` con la siguiente estructura:
|
|
|
196
140
|
}
|
|
197
141
|
```
|
|
198
142
|
|
|
199
|
-
###
|
|
200
|
-
|
|
201
|
-
También puedes configurar el proxy usando variables de entorno:
|
|
202
|
-
|
|
203
|
-
```bash
|
|
204
|
-
# Configuración SSL
|
|
205
|
-
SSL_KEY=/app/certs/key.pem
|
|
206
|
-
SSL_CERT=/app/certs/cert.pem
|
|
207
|
-
SSL_CA=/app/certs/ca.pem
|
|
208
|
-
SSL_ALLOW_HTTP1=true
|
|
209
|
-
|
|
210
|
-
# Configuración CORS
|
|
211
|
-
CORS_ORIGIN=*
|
|
212
|
-
CORS_METHODS=GET,POST,PUT,DELETE,OPTIONS
|
|
213
|
-
CORS_HEADERS=Content-Type,Authorization
|
|
214
|
-
CORS_CREDENTIALS=true
|
|
215
|
-
|
|
216
|
-
# Modo de depuración
|
|
217
|
-
DEBUG=true # Habilita el registro detallado para conexiones proxy y errores
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
## 🎯 Uso avanzado
|
|
221
|
-
|
|
222
|
-
### Remapeo de URL
|
|
223
|
-
|
|
224
|
-
Transforma URLs antes de reenviarlas a servicios de destino:
|
|
225
|
-
|
|
226
|
-
```javascript
|
|
227
|
-
const config = {
|
|
228
|
-
routes: {
|
|
229
|
-
'api.example.com': {
|
|
230
|
-
target: 'backend:3000',
|
|
231
|
-
ssl: true,
|
|
232
|
-
remap: (url) => {
|
|
233
|
-
// Eliminar prefijo /api
|
|
234
|
-
return url.replace(/^\/api/, '');
|
|
235
|
-
},
|
|
236
|
-
},
|
|
237
|
-
},
|
|
238
|
-
};
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
### Validación de solicitudes
|
|
143
|
+
### Configuración JavaScript
|
|
242
144
|
|
|
243
|
-
|
|
145
|
+
Para características avanzadas como remapeo de URL y validación:
|
|
244
146
|
|
|
245
147
|
```javascript
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
message: 'No autorizado',
|
|
254
|
-
headers: { 'www-authenticate': 'Bearer' },
|
|
255
|
-
};
|
|
256
|
-
}
|
|
257
|
-
return { status: true };
|
|
148
|
+
// proxy.config.js
|
|
149
|
+
export default {
|
|
150
|
+
ports: [443, 8080],
|
|
151
|
+
ssl: {
|
|
152
|
+
key: './certs/key.pem',
|
|
153
|
+
cert: './certs/cert.pem',
|
|
154
|
+
allowHTTP1: true,
|
|
258
155
|
},
|
|
259
156
|
routes: {
|
|
260
157
|
'api.example.com': {
|
|
261
158
|
target: 'backend:3000',
|
|
262
159
|
ssl: true,
|
|
263
|
-
//
|
|
160
|
+
// Remapeo de URL
|
|
161
|
+
remap: (url) => url.replace(/^\/api/, ''),
|
|
162
|
+
// Validación de solicitudes
|
|
264
163
|
validate: async (info) => {
|
|
265
|
-
|
|
266
|
-
if (!rateLimit.allowed) {
|
|
164
|
+
if (!info.headers.authorization) {
|
|
267
165
|
return {
|
|
268
166
|
status: false,
|
|
269
|
-
code:
|
|
270
|
-
message: '
|
|
167
|
+
code: 401,
|
|
168
|
+
message: 'Unauthorized',
|
|
271
169
|
};
|
|
272
170
|
}
|
|
273
171
|
return { status: true };
|
|
@@ -277,93 +175,80 @@ const config = {
|
|
|
277
175
|
};
|
|
278
176
|
```
|
|
279
177
|
|
|
280
|
-
### Configuración
|
|
178
|
+
### Configuración TypeScript
|
|
281
179
|
|
|
282
|
-
|
|
180
|
+
Configuración con tipos seguros y soporte completo de IDE:
|
|
283
181
|
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
182
|
+
```typescript
|
|
183
|
+
// proxy.config.ts
|
|
184
|
+
import type { ServerConfig, ConnectionInfo } from '@robiki/proxy';
|
|
185
|
+
|
|
186
|
+
const config: ServerConfig = {
|
|
187
|
+
ports: [443, 8080],
|
|
188
|
+
ssl: {
|
|
189
|
+
key: './certs/key.pem',
|
|
190
|
+
cert: './certs/cert.pem',
|
|
191
|
+
allowHTTP1: true,
|
|
293
192
|
},
|
|
294
193
|
routes: {
|
|
295
194
|
'api.example.com': {
|
|
296
195
|
target: 'backend:3000',
|
|
297
196
|
ssl: true,
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
197
|
+
remap: (url: string) => url.replace(/^\/api/, ''),
|
|
198
|
+
validate: async (info: ConnectionInfo) => {
|
|
199
|
+
if (!info.headers['x-api-key']) {
|
|
200
|
+
return { status: false, code: 401, message: 'API Key Required' };
|
|
201
|
+
}
|
|
202
|
+
return { status: true };
|
|
302
203
|
},
|
|
303
204
|
},
|
|
304
205
|
},
|
|
305
206
|
};
|
|
306
|
-
```
|
|
307
207
|
|
|
308
|
-
|
|
208
|
+
export default config;
|
|
209
|
+
```
|
|
309
210
|
|
|
310
|
-
|
|
211
|
+
### Variables de entorno
|
|
311
212
|
|
|
312
|
-
```
|
|
313
|
-
|
|
213
|
+
```bash
|
|
214
|
+
# Configuración SSL
|
|
215
|
+
SSL_KEY=/app/certs/key.pem
|
|
216
|
+
SSL_CERT=/app/certs/cert.pem
|
|
217
|
+
SSL_ALLOW_HTTP1=true
|
|
314
218
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
}
|
|
320
|
-
// Volver al comportamiento de proxy predeterminado
|
|
321
|
-
const { restAPIProxyHandler } = await import('@robiki/proxy/connections');
|
|
322
|
-
return restAPIProxyHandler(req, res);
|
|
323
|
-
};
|
|
219
|
+
# Configuración CORS
|
|
220
|
+
CORS_ORIGIN=*
|
|
221
|
+
CORS_METHODS=GET,POST,PUT,DELETE
|
|
222
|
+
CORS_CREDENTIALS=true
|
|
324
223
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
websocket: customWebSocketHandler,
|
|
328
|
-
stream: customStreamHandler,
|
|
329
|
-
});
|
|
224
|
+
# Modo de depuración
|
|
225
|
+
DEBUG=true
|
|
330
226
|
```
|
|
331
227
|
|
|
332
228
|
## 🔧 Referencia de API
|
|
333
229
|
|
|
334
|
-
### `createProxy(config: ServerConfig)
|
|
335
|
-
|
|
336
|
-
Crea e inicia un servidor proxy con la configuración dada.
|
|
337
|
-
|
|
338
|
-
**Parámetros:**
|
|
339
|
-
|
|
340
|
-
- `config`: Objeto de configuración del servidor
|
|
341
|
-
|
|
342
|
-
**Retorna:** Promise que se resuelve en una instancia de `ProxyServer`
|
|
343
|
-
|
|
344
|
-
### `ProxyServer`
|
|
230
|
+
### `createProxy(config: ServerConfig)`
|
|
345
231
|
|
|
346
|
-
|
|
232
|
+
Crea e inicia un servidor proxy.
|
|
347
233
|
|
|
348
|
-
|
|
349
|
-
- `stop()`: Detener el servidor proxy
|
|
350
|
-
- `getConfig()`: Obtener la configuración actual
|
|
351
|
-
|
|
352
|
-
### Tipos de configuración
|
|
353
|
-
|
|
354
|
-
#### `ServerConfig`
|
|
234
|
+
**ServerConfig:**
|
|
355
235
|
|
|
356
236
|
```typescript
|
|
357
237
|
interface ServerConfig {
|
|
358
238
|
ports?: number[];
|
|
359
|
-
ssl?:
|
|
239
|
+
ssl?: {
|
|
240
|
+
key: string;
|
|
241
|
+
cert: string;
|
|
242
|
+
ca?: string;
|
|
243
|
+
allowHTTP1?: boolean;
|
|
244
|
+
};
|
|
360
245
|
routes: Record<string, RouteConfig>;
|
|
361
246
|
cors?: CorsConfig;
|
|
362
247
|
validate?: (info: ConnectionInfo) => Promise<ForwardValidationResult>;
|
|
363
248
|
}
|
|
364
249
|
```
|
|
365
250
|
|
|
366
|
-
|
|
251
|
+
**RouteConfig:**
|
|
367
252
|
|
|
368
253
|
```typescript
|
|
369
254
|
interface RouteConfig {
|
|
@@ -375,265 +260,86 @@ interface RouteConfig {
|
|
|
375
260
|
}
|
|
376
261
|
```
|
|
377
262
|
|
|
378
|
-
#### `CorsConfig`
|
|
379
|
-
|
|
380
|
-
```typescript
|
|
381
|
-
interface CorsConfig {
|
|
382
|
-
origin?: string | string[];
|
|
383
|
-
methods?: string[];
|
|
384
|
-
allowedHeaders?: string[];
|
|
385
|
-
exposedHeaders?: string[];
|
|
386
|
-
credentials?: boolean;
|
|
387
|
-
maxAge?: number;
|
|
388
|
-
}
|
|
389
|
-
```
|
|
390
|
-
|
|
391
|
-
#### `ConnectionInfo`
|
|
392
|
-
|
|
393
|
-
```typescript
|
|
394
|
-
interface ConnectionInfo {
|
|
395
|
-
id: number;
|
|
396
|
-
method: string;
|
|
397
|
-
path: string;
|
|
398
|
-
remoteAddress: string;
|
|
399
|
-
scheme: string;
|
|
400
|
-
authority: string;
|
|
401
|
-
origin: string;
|
|
402
|
-
headers: IncomingHttpHeaders;
|
|
403
|
-
query: URLSearchParams;
|
|
404
|
-
type: RequestType;
|
|
405
|
-
}
|
|
406
|
-
```
|
|
407
|
-
|
|
408
263
|
## 🐳 Uso de Docker
|
|
409
264
|
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
1. Agrega el proxy a tu `docker-compose.yml`:
|
|
265
|
+
Monta tu archivo de configuración (JSON, .cjs o .ts):
|
|
413
266
|
|
|
414
267
|
```yaml
|
|
415
268
|
services:
|
|
416
269
|
proxy:
|
|
417
270
|
image: robiki/proxy:latest
|
|
418
|
-
ports:
|
|
419
|
-
- '443:443'
|
|
420
|
-
- '8080:8080'
|
|
421
271
|
volumes:
|
|
422
|
-
- ./proxy.config.
|
|
272
|
+
- ./proxy.config.cjs:/app/proxy.config.cjs:ro
|
|
423
273
|
- ./certs:/app/certs:ro
|
|
424
|
-
|
|
425
|
-
-
|
|
426
|
-
|
|
427
|
-
your-service:
|
|
428
|
-
image: your-service-image
|
|
429
|
-
networks:
|
|
430
|
-
- your-network
|
|
431
|
-
```
|
|
432
|
-
|
|
433
|
-
2. Configura rutas en `proxy.config.json` para apuntar a tus servicios
|
|
434
|
-
|
|
435
|
-
3. Inicia tu stack:
|
|
436
|
-
|
|
437
|
-
```bash
|
|
438
|
-
docker-compose up -d
|
|
439
|
-
```
|
|
440
|
-
|
|
441
|
-
### Construir imagen personalizada
|
|
442
|
-
|
|
443
|
-
Crea un Dockerfile personalizado:
|
|
444
|
-
|
|
445
|
-
```dockerfile
|
|
446
|
-
FROM robiki/proxy:latest
|
|
447
|
-
|
|
448
|
-
# Copia tu configuración
|
|
449
|
-
COPY proxy.config.json /app/proxy.config.json
|
|
450
|
-
COPY certs /app/certs
|
|
451
|
-
|
|
452
|
-
# Establece variables de entorno
|
|
453
|
-
ENV PROXY_CONFIG=/app/proxy.config.json
|
|
274
|
+
environment:
|
|
275
|
+
- PROXY_CONFIG=/app/proxy.config.cjs
|
|
454
276
|
```
|
|
455
277
|
|
|
456
|
-
##
|
|
457
|
-
|
|
458
|
-
Consulta el directorio `examples/` para más ejemplos de uso:
|
|
459
|
-
|
|
460
|
-
- `basic-usage.js` - Configuración simple de proxy
|
|
461
|
-
- `advanced-usage.js` - Características avanzadas (validación, CORS, remapeo)
|
|
462
|
-
- `custom-handlers.js` - Manejadores de solicitudes personalizados
|
|
463
|
-
- `docker-compose.example.yml` - Configuración completa de Docker
|
|
464
|
-
|
|
465
|
-
## 🔐 Certificados SSL/TLS
|
|
466
|
-
|
|
467
|
-
### Generar certificados autofirmados
|
|
278
|
+
## 🔐 Certificados SSL
|
|
468
279
|
|
|
469
|
-
|
|
280
|
+
### Desarrollo (autofirmados)
|
|
470
281
|
|
|
471
282
|
```bash
|
|
472
283
|
mkdir -p certs
|
|
473
284
|
openssl req -x509 -newkey rsa:4096 -keyout certs/key.pem -out certs/cert.pem -days 365 -nodes
|
|
474
285
|
```
|
|
475
286
|
|
|
476
|
-
###
|
|
477
|
-
|
|
478
|
-
Para producción, usa certificados Let's Encrypt:
|
|
287
|
+
### Producción (Let's Encrypt)
|
|
479
288
|
|
|
480
289
|
```bash
|
|
481
290
|
certbot certonly --standalone -d example.com
|
|
482
291
|
```
|
|
483
292
|
|
|
484
|
-
Luego refiérelos en tu configuración:
|
|
485
|
-
|
|
486
|
-
```json
|
|
487
|
-
{
|
|
488
|
-
"ssl": {
|
|
489
|
-
"key": "/etc/letsencrypt/live/example.com/privkey.pem",
|
|
490
|
-
"cert": "/etc/letsencrypt/live/example.com/fullchain.pem"
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
```
|
|
494
|
-
|
|
495
|
-
## 🤝 Contribuir
|
|
496
|
-
|
|
497
|
-
¡Las contribuciones son bienvenidas! No dudes en enviar un Pull Request.
|
|
498
|
-
|
|
499
|
-
## 📄 Licencia
|
|
500
|
-
|
|
501
|
-
MIT © Robiki sp. z o.o.
|
|
502
|
-
|
|
503
|
-
## 🔗 Enlaces
|
|
504
|
-
|
|
505
|
-
- [Repositorio GitHub](https://github.com/robiki-ai/robiki-proxy)
|
|
506
|
-
- [Paquete npm](https://www.npmjs.com/package/@robiki/proxy)
|
|
507
|
-
- [Rastreador de problemas](https://github.com/robiki-ai/robiki-proxy/issues)
|
|
508
|
-
|
|
509
|
-
## 💡 Casos de uso
|
|
510
|
-
|
|
511
|
-
- **Arquitectura de microservicios**: Enrutar solicitudes a diferentes servicios según dominio/ruta
|
|
512
|
-
- **Entorno de desarrollo**: Proxy local para probar múltiples servicios
|
|
513
|
-
- **API Gateway**: Punto de entrada centralizado con autenticación y limitación de velocidad
|
|
514
|
-
- **Terminación SSL**: Manejar SSL/TLS a nivel de proxy
|
|
515
|
-
- **Gestión CORS**: Configuración CORS centralizada
|
|
516
|
-
- **Balanceo de carga**: Distribuir tráfico entre múltiples instancias (con manejadores personalizados)
|
|
517
|
-
|
|
518
293
|
## 🛠️ Solución de problemas
|
|
519
294
|
|
|
520
295
|
### Modo de depuración
|
|
521
296
|
|
|
522
|
-
Habilita el registro detallado
|
|
297
|
+
Habilita el registro detallado:
|
|
523
298
|
|
|
524
299
|
```bash
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
# O con Docker
|
|
300
|
+
DEBUG=true node your-script.js
|
|
301
|
+
# o
|
|
529
302
|
docker run -e DEBUG=true robiki/proxy:latest
|
|
530
|
-
|
|
531
|
-
# O en docker-compose.yml
|
|
532
|
-
services:
|
|
533
|
-
proxy:
|
|
534
|
-
image: robiki/proxy:latest
|
|
535
|
-
environment:
|
|
536
|
-
- DEBUG=true
|
|
537
303
|
```
|
|
538
304
|
|
|
539
|
-
Cuando `DEBUG=true`, el proxy registrará:
|
|
540
|
-
- Todos los intentos de conexión proxy (REST, WebSocket, flujos HTTP/2)
|
|
541
|
-
- Detalles de solicitudes y respuestas
|
|
542
|
-
- Errores de conexión y tiempos de espera
|
|
543
|
-
- Errores de proxy y errores de cliente
|
|
544
|
-
|
|
545
305
|
### Puerto ya en uso
|
|
546
306
|
|
|
547
|
-
El proxy intentará automáticamente matar procesos en los puertos configurados. Si esto falla, libera los puertos manualmente:
|
|
548
|
-
|
|
549
307
|
```bash
|
|
550
308
|
lsof -ti:443 | xargs kill -9
|
|
551
|
-
lsof -ti:8080 | xargs kill -9
|
|
552
309
|
```
|
|
553
310
|
|
|
554
|
-
### Errores de certificado SSL
|
|
555
|
-
|
|
556
|
-
Asegúrate de que tus archivos de certificado sean legibles y estén en el formato correcto (PEM). Para desarrollo, usa certificados autofirmados.
|
|
557
|
-
|
|
558
|
-
### Problemas de conexión WebSocket
|
|
559
|
-
|
|
560
|
-
Asegúrate de que tus rutas WebSocket estén configuradas con el protocolo correcto (ws/wss) y que el servicio de destino admita conexiones WebSocket.
|
|
561
|
-
|
|
562
311
|
## 🧪 Pruebas
|
|
563
312
|
|
|
564
|
-
Robiki Proxy incluye un conjunto completo de pruebas que cubre pruebas unitarias, pruebas de integración y escenarios avanzados.
|
|
565
|
-
|
|
566
|
-
### Ejecutar pruebas
|
|
567
|
-
|
|
568
313
|
```bash
|
|
569
314
|
# Ejecutar todas las pruebas
|
|
570
315
|
yarn test
|
|
571
316
|
|
|
572
|
-
#
|
|
573
|
-
yarn test:watch
|
|
574
|
-
|
|
575
|
-
# Ejecutar pruebas con cobertura
|
|
317
|
+
# Con cobertura
|
|
576
318
|
yarn test:coverage
|
|
577
319
|
|
|
578
|
-
#
|
|
579
|
-
yarn test:ui
|
|
580
|
-
```
|
|
581
|
-
|
|
582
|
-
### Cobertura de pruebas
|
|
583
|
-
|
|
584
|
-
El conjunto de pruebas incluye:
|
|
585
|
-
|
|
586
|
-
- **Pruebas unitarias**: Configuración, utilidades, conversión de encabezados, manejo CORS
|
|
587
|
-
- **Pruebas de integración**: Proxy HTTP, resolución de rutas, validación, carga de configuración
|
|
588
|
-
- **Pruebas avanzadas**: Proxy WebSocket, flujos HTTP/2, conexiones concurrentes
|
|
589
|
-
- **Pruebas Docker**: Construcción de contenedores, carga de configuración, comportamiento en tiempo de ejecución
|
|
590
|
-
|
|
591
|
-
### Pruebas Docker
|
|
592
|
-
|
|
593
|
-
Ejecutar pruebas de integración Docker:
|
|
594
|
-
|
|
595
|
-
```bash
|
|
596
|
-
# Prueba completa de integración Docker
|
|
320
|
+
# Pruebas Docker
|
|
597
321
|
yarn test:docker
|
|
598
|
-
|
|
599
|
-
# Probar carga de configuración específicamente
|
|
600
|
-
yarn test:docker:config
|
|
601
|
-
|
|
602
|
-
# Ejecutar todas las pruebas (unitarias + integración + Docker)
|
|
603
|
-
yarn test:all
|
|
604
322
|
```
|
|
605
323
|
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
```bash
|
|
609
|
-
# Prueba rápida de construcción Docker
|
|
610
|
-
make test-docker
|
|
611
|
-
|
|
612
|
-
# Suite completa de pruebas de integración
|
|
613
|
-
make test-docker-full
|
|
614
|
-
|
|
615
|
-
# Prueba de carga de configuración
|
|
616
|
-
make test-docker-config
|
|
324
|
+
## 📚 Ejemplos
|
|
617
325
|
|
|
618
|
-
|
|
619
|
-
make test-docker-compose
|
|
620
|
-
```
|
|
326
|
+
Consulta el directorio `examples/`:
|
|
621
327
|
|
|
622
|
-
|
|
328
|
+
- `basic-usage.js` - Configuración simple de proxy
|
|
329
|
+
- `advanced-usage.js` - Validación, CORS, remapeo
|
|
330
|
+
- `custom-handlers.js` - Manejadores de solicitudes personalizados
|
|
331
|
+
- `docker-compose.example.yml` - Configuración Docker
|
|
623
332
|
|
|
624
|
-
##
|
|
333
|
+
## 🤝 Contribuir
|
|
625
334
|
|
|
626
|
-
|
|
335
|
+
¡Las contribuciones son bienvenidas! Consulta [CONTRIBUTING.md](CONTRIBUTING.md) para más detalles.
|
|
627
336
|
|
|
628
|
-
|
|
629
|
-
- Sobrecarga mínima
|
|
630
|
-
- Agrupación de conexiones
|
|
631
|
-
- Respaldo automático a HTTP/1.1
|
|
337
|
+
## 📄 Licencia
|
|
632
338
|
|
|
633
|
-
|
|
339
|
+
MIT © Robiki sp. z o.o.
|
|
634
340
|
|
|
635
|
-
|
|
636
|
-
- Habilitar clustering para sistemas multi-núcleo
|
|
637
|
-
- Monitoreo con health checks
|
|
638
|
-
- Configurar registro adecuado
|
|
341
|
+
## 🔗 Enlaces
|
|
639
342
|
|
|
343
|
+
- [Repositorio GitHub](https://github.com/robiki-ai/robiki-proxy)
|
|
344
|
+
- [Paquete npm](https://www.npmjs.com/package/@robiki/proxy)
|
|
345
|
+
- [Rastreador de problemas](https://github.com/robiki-ai/robiki-proxy/issues)
|