@robiki/proxy 1.0.2 → 1.0.3
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 +99 -394
- package/README.ja.md +100 -395
- package/README.md +100 -394
- package/README.pl.md +100 -395
- package/README.ru.md +99 -394
- package/README.zh.md +99 -394
- package/dist/{config-CeJ1tf8T.d.ts → config-CCOdQL7F.d.ts} +5 -11
- package/dist/index.d.ts +3 -2
- package/dist/index.js +51 -72
- package/dist/utils/config.d.ts +1 -1
- package/dist/utils/config.js +37 -20
- package/package.json +2 -5
- package/dist/config-CQ7zIaQt.d.ts +0 -172
- package/dist/config-_6LOsppp.d.ts +0 -180
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
|
|
|
@@ -23,49 +23,23 @@
|
|
|
23
23
|
|
|
24
24
|
## 📦 Instalación
|
|
25
25
|
|
|
26
|
-
###
|
|
26
|
+
### Paquete npm
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
29
|
npm install @robiki/proxy
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
```bash
|
|
30
|
+
# o
|
|
33
31
|
yarn add @robiki/proxy
|
|
34
32
|
```
|
|
35
33
|
|
|
36
|
-
###
|
|
34
|
+
### Docker
|
|
37
35
|
|
|
38
36
|
```bash
|
|
39
37
|
docker pull robiki/proxy:latest
|
|
40
38
|
```
|
|
41
39
|
|
|
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
40
|
## 🚀 Inicio rápido
|
|
67
41
|
|
|
68
|
-
###
|
|
42
|
+
### Paquete npm
|
|
69
43
|
|
|
70
44
|
```javascript
|
|
71
45
|
import { createProxy } from '@robiki/proxy';
|
|
@@ -88,13 +62,11 @@ const proxy = await createProxy({
|
|
|
88
62
|
},
|
|
89
63
|
},
|
|
90
64
|
});
|
|
91
|
-
|
|
92
|
-
console.log('¡El servidor proxy está funcionando!');
|
|
93
65
|
```
|
|
94
66
|
|
|
95
|
-
###
|
|
67
|
+
### Docker
|
|
96
68
|
|
|
97
|
-
|
|
69
|
+
Crea `proxy.config.json`:
|
|
98
70
|
|
|
99
71
|
```json
|
|
100
72
|
{
|
|
@@ -108,20 +80,14 @@ console.log('¡El servidor proxy está funcionando!');
|
|
|
108
80
|
"api.example.com": {
|
|
109
81
|
"target": "backend-service:3000",
|
|
110
82
|
"ssl": true
|
|
111
|
-
},
|
|
112
|
-
"example.com": {
|
|
113
|
-
"target": "frontend-service:8080",
|
|
114
|
-
"ssl": false
|
|
115
83
|
}
|
|
116
84
|
}
|
|
117
85
|
}
|
|
118
86
|
```
|
|
119
87
|
|
|
120
|
-
|
|
88
|
+
Crea `docker-compose.yml`:
|
|
121
89
|
|
|
122
90
|
```yaml
|
|
123
|
-
version: '3.8'
|
|
124
|
-
|
|
125
91
|
services:
|
|
126
92
|
proxy:
|
|
127
93
|
image: robiki/proxy:latest
|
|
@@ -133,25 +99,9 @@ services:
|
|
|
133
99
|
- ./certs:/app/certs:ro
|
|
134
100
|
environment:
|
|
135
101
|
- 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
102
|
```
|
|
153
103
|
|
|
154
|
-
|
|
104
|
+
Inicia:
|
|
155
105
|
|
|
156
106
|
```bash
|
|
157
107
|
docker-compose up -d
|
|
@@ -159,9 +109,9 @@ docker-compose up -d
|
|
|
159
109
|
|
|
160
110
|
## 📖 Configuración
|
|
161
111
|
|
|
162
|
-
###
|
|
112
|
+
### Configuración JSON
|
|
163
113
|
|
|
164
|
-
|
|
114
|
+
Configuración declarativa simple:
|
|
165
115
|
|
|
166
116
|
```json
|
|
167
117
|
{
|
|
@@ -169,24 +119,17 @@ Crea un archivo `proxy.config.json` con la siguiente estructura:
|
|
|
169
119
|
"ssl": {
|
|
170
120
|
"key": "./certs/key.pem",
|
|
171
121
|
"cert": "./certs/cert.pem",
|
|
172
|
-
"ca": "./certs/ca.pem",
|
|
173
122
|
"allowHTTP1": true
|
|
174
123
|
},
|
|
175
124
|
"cors": {
|
|
176
125
|
"origin": "*",
|
|
177
|
-
"methods": ["GET", "POST", "PUT", "DELETE"
|
|
178
|
-
"
|
|
179
|
-
"credentials": true,
|
|
180
|
-
"maxAge": 86400
|
|
126
|
+
"methods": ["GET", "POST", "PUT", "DELETE"],
|
|
127
|
+
"credentials": true
|
|
181
128
|
},
|
|
182
129
|
"routes": {
|
|
183
130
|
"api.example.com": {
|
|
184
|
-
"target": "backend
|
|
185
|
-
"ssl": true
|
|
186
|
-
"cors": {
|
|
187
|
-
"origin": ["https://example.com"],
|
|
188
|
-
"credentials": true
|
|
189
|
-
}
|
|
131
|
+
"target": "backend:3000",
|
|
132
|
+
"ssl": true
|
|
190
133
|
},
|
|
191
134
|
"*.example.com": {
|
|
192
135
|
"target": "wildcard-service:4000",
|
|
@@ -196,78 +139,32 @@ Crea un archivo `proxy.config.json` con la siguiente estructura:
|
|
|
196
139
|
}
|
|
197
140
|
```
|
|
198
141
|
|
|
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
|
|
142
|
+
### Configuración JavaScript
|
|
242
143
|
|
|
243
|
-
|
|
144
|
+
Para características avanzadas como remapeo de URL y validación:
|
|
244
145
|
|
|
245
146
|
```javascript
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
message: 'No autorizado',
|
|
254
|
-
headers: { 'www-authenticate': 'Bearer' },
|
|
255
|
-
};
|
|
256
|
-
}
|
|
257
|
-
return { status: true };
|
|
147
|
+
// proxy.config.cjs
|
|
148
|
+
module.exports = {
|
|
149
|
+
ports: [443, 8080],
|
|
150
|
+
ssl: {
|
|
151
|
+
key: './certs/key.pem',
|
|
152
|
+
cert: './certs/cert.pem',
|
|
153
|
+
allowHTTP1: true,
|
|
258
154
|
},
|
|
259
155
|
routes: {
|
|
260
156
|
'api.example.com': {
|
|
261
157
|
target: 'backend:3000',
|
|
262
158
|
ssl: true,
|
|
263
|
-
//
|
|
159
|
+
// Remapeo de URL
|
|
160
|
+
remap: (url) => url.replace(/^\/api/, ''),
|
|
161
|
+
// Validación de solicitudes
|
|
264
162
|
validate: async (info) => {
|
|
265
|
-
|
|
266
|
-
if (!rateLimit.allowed) {
|
|
163
|
+
if (!info.headers.authorization) {
|
|
267
164
|
return {
|
|
268
165
|
status: false,
|
|
269
|
-
code:
|
|
270
|
-
message: '
|
|
166
|
+
code: 401,
|
|
167
|
+
message: 'Unauthorized',
|
|
271
168
|
};
|
|
272
169
|
}
|
|
273
170
|
return { status: true };
|
|
@@ -277,93 +174,80 @@ const config = {
|
|
|
277
174
|
};
|
|
278
175
|
```
|
|
279
176
|
|
|
280
|
-
### Configuración
|
|
177
|
+
### Configuración TypeScript
|
|
281
178
|
|
|
282
|
-
|
|
179
|
+
Configuración con tipos seguros y soporte completo de IDE:
|
|
283
180
|
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
181
|
+
```typescript
|
|
182
|
+
// proxy.config.ts
|
|
183
|
+
import type { ServerConfig, ConnectionInfo } from '@robiki/proxy';
|
|
184
|
+
|
|
185
|
+
const config: ServerConfig = {
|
|
186
|
+
ports: [443, 8080],
|
|
187
|
+
ssl: {
|
|
188
|
+
key: './certs/key.pem',
|
|
189
|
+
cert: './certs/cert.pem',
|
|
190
|
+
allowHTTP1: true,
|
|
293
191
|
},
|
|
294
192
|
routes: {
|
|
295
193
|
'api.example.com': {
|
|
296
194
|
target: 'backend:3000',
|
|
297
195
|
ssl: true,
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
196
|
+
remap: (url: string) => url.replace(/^\/api/, ''),
|
|
197
|
+
validate: async (info: ConnectionInfo) => {
|
|
198
|
+
if (!info.headers['x-api-key']) {
|
|
199
|
+
return { status: false, code: 401, message: 'API Key Required' };
|
|
200
|
+
}
|
|
201
|
+
return { status: true };
|
|
302
202
|
},
|
|
303
203
|
},
|
|
304
204
|
},
|
|
305
205
|
};
|
|
306
|
-
```
|
|
307
206
|
|
|
308
|
-
|
|
207
|
+
export default config;
|
|
208
|
+
```
|
|
309
209
|
|
|
310
|
-
|
|
210
|
+
### Variables de entorno
|
|
311
211
|
|
|
312
|
-
```
|
|
313
|
-
|
|
212
|
+
```bash
|
|
213
|
+
# Configuración SSL
|
|
214
|
+
SSL_KEY=/app/certs/key.pem
|
|
215
|
+
SSL_CERT=/app/certs/cert.pem
|
|
216
|
+
SSL_ALLOW_HTTP1=true
|
|
314
217
|
|
|
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
|
-
};
|
|
218
|
+
# Configuración CORS
|
|
219
|
+
CORS_ORIGIN=*
|
|
220
|
+
CORS_METHODS=GET,POST,PUT,DELETE
|
|
221
|
+
CORS_CREDENTIALS=true
|
|
324
222
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
websocket: customWebSocketHandler,
|
|
328
|
-
stream: customStreamHandler,
|
|
329
|
-
});
|
|
223
|
+
# Modo de depuración
|
|
224
|
+
DEBUG=true
|
|
330
225
|
```
|
|
331
226
|
|
|
332
227
|
## 🔧 Referencia de API
|
|
333
228
|
|
|
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`
|
|
229
|
+
### `createProxy(config: ServerConfig)`
|
|
345
230
|
|
|
346
|
-
|
|
231
|
+
Crea e inicia un servidor proxy.
|
|
347
232
|
|
|
348
|
-
|
|
349
|
-
- `stop()`: Detener el servidor proxy
|
|
350
|
-
- `getConfig()`: Obtener la configuración actual
|
|
351
|
-
|
|
352
|
-
### Tipos de configuración
|
|
353
|
-
|
|
354
|
-
#### `ServerConfig`
|
|
233
|
+
**ServerConfig:**
|
|
355
234
|
|
|
356
235
|
```typescript
|
|
357
236
|
interface ServerConfig {
|
|
358
237
|
ports?: number[];
|
|
359
|
-
ssl?:
|
|
238
|
+
ssl?: {
|
|
239
|
+
key: string;
|
|
240
|
+
cert: string;
|
|
241
|
+
ca?: string;
|
|
242
|
+
allowHTTP1?: boolean;
|
|
243
|
+
};
|
|
360
244
|
routes: Record<string, RouteConfig>;
|
|
361
245
|
cors?: CorsConfig;
|
|
362
246
|
validate?: (info: ConnectionInfo) => Promise<ForwardValidationResult>;
|
|
363
247
|
}
|
|
364
248
|
```
|
|
365
249
|
|
|
366
|
-
|
|
250
|
+
**RouteConfig:**
|
|
367
251
|
|
|
368
252
|
```typescript
|
|
369
253
|
interface RouteConfig {
|
|
@@ -375,265 +259,86 @@ interface RouteConfig {
|
|
|
375
259
|
}
|
|
376
260
|
```
|
|
377
261
|
|
|
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
262
|
## 🐳 Uso de Docker
|
|
409
263
|
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
1. Agrega el proxy a tu `docker-compose.yml`:
|
|
264
|
+
Monta tu archivo de configuración (JSON, .cjs o .ts):
|
|
413
265
|
|
|
414
266
|
```yaml
|
|
415
267
|
services:
|
|
416
268
|
proxy:
|
|
417
269
|
image: robiki/proxy:latest
|
|
418
|
-
ports:
|
|
419
|
-
- '443:443'
|
|
420
|
-
- '8080:8080'
|
|
421
270
|
volumes:
|
|
422
|
-
- ./proxy.config.
|
|
271
|
+
- ./proxy.config.cjs:/app/proxy.config.cjs:ro
|
|
423
272
|
- ./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
|
|
273
|
+
environment:
|
|
274
|
+
- PROXY_CONFIG=/app/proxy.config.cjs
|
|
454
275
|
```
|
|
455
276
|
|
|
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
|
|
277
|
+
## 🔐 Certificados SSL
|
|
468
278
|
|
|
469
|
-
|
|
279
|
+
### Desarrollo (autofirmados)
|
|
470
280
|
|
|
471
281
|
```bash
|
|
472
282
|
mkdir -p certs
|
|
473
283
|
openssl req -x509 -newkey rsa:4096 -keyout certs/key.pem -out certs/cert.pem -days 365 -nodes
|
|
474
284
|
```
|
|
475
285
|
|
|
476
|
-
###
|
|
477
|
-
|
|
478
|
-
Para producción, usa certificados Let's Encrypt:
|
|
286
|
+
### Producción (Let's Encrypt)
|
|
479
287
|
|
|
480
288
|
```bash
|
|
481
289
|
certbot certonly --standalone -d example.com
|
|
482
290
|
```
|
|
483
291
|
|
|
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
292
|
## 🛠️ Solución de problemas
|
|
519
293
|
|
|
520
294
|
### Modo de depuración
|
|
521
295
|
|
|
522
|
-
Habilita el registro detallado
|
|
296
|
+
Habilita el registro detallado:
|
|
523
297
|
|
|
524
298
|
```bash
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
# O con Docker
|
|
299
|
+
DEBUG=true node your-script.js
|
|
300
|
+
# o
|
|
529
301
|
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
302
|
```
|
|
538
303
|
|
|
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
304
|
### Puerto ya en uso
|
|
546
305
|
|
|
547
|
-
El proxy intentará automáticamente matar procesos en los puertos configurados. Si esto falla, libera los puertos manualmente:
|
|
548
|
-
|
|
549
306
|
```bash
|
|
550
307
|
lsof -ti:443 | xargs kill -9
|
|
551
|
-
lsof -ti:8080 | xargs kill -9
|
|
552
308
|
```
|
|
553
309
|
|
|
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
310
|
## 🧪 Pruebas
|
|
563
311
|
|
|
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
312
|
```bash
|
|
569
313
|
# Ejecutar todas las pruebas
|
|
570
314
|
yarn test
|
|
571
315
|
|
|
572
|
-
#
|
|
573
|
-
yarn test:watch
|
|
574
|
-
|
|
575
|
-
# Ejecutar pruebas con cobertura
|
|
316
|
+
# Con cobertura
|
|
576
317
|
yarn test:coverage
|
|
577
318
|
|
|
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
|
|
319
|
+
# Pruebas Docker
|
|
597
320
|
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
321
|
```
|
|
605
322
|
|
|
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
|
|
323
|
+
## 📚 Ejemplos
|
|
617
324
|
|
|
618
|
-
|
|
619
|
-
make test-docker-compose
|
|
620
|
-
```
|
|
325
|
+
Consulta el directorio `examples/`:
|
|
621
326
|
|
|
622
|
-
|
|
327
|
+
- `basic-usage.js` - Configuración simple de proxy
|
|
328
|
+
- `advanced-usage.js` - Validación, CORS, remapeo
|
|
329
|
+
- `custom-handlers.js` - Manejadores de solicitudes personalizados
|
|
330
|
+
- `docker-compose.example.yml` - Configuración Docker
|
|
623
331
|
|
|
624
|
-
##
|
|
332
|
+
## 🤝 Contribuir
|
|
625
333
|
|
|
626
|
-
|
|
334
|
+
¡Las contribuciones son bienvenidas! Consulta [CONTRIBUTING.md](CONTRIBUTING.md) para más detalles.
|
|
627
335
|
|
|
628
|
-
|
|
629
|
-
- Sobrecarga mínima
|
|
630
|
-
- Agrupación de conexiones
|
|
631
|
-
- Respaldo automático a HTTP/1.1
|
|
336
|
+
## 📄 Licencia
|
|
632
337
|
|
|
633
|
-
|
|
338
|
+
MIT © Robiki sp. z o.o.
|
|
634
339
|
|
|
635
|
-
|
|
636
|
-
- Habilitar clustering para sistemas multi-núcleo
|
|
637
|
-
- Monitoreo con health checks
|
|
638
|
-
- Configurar registro adecuado
|
|
340
|
+
## 🔗 Enlaces
|
|
639
341
|
|
|
342
|
+
- [Repositorio GitHub](https://github.com/robiki-ai/robiki-proxy)
|
|
343
|
+
- [Paquete npm](https://www.npmjs.com/package/@robiki/proxy)
|
|
344
|
+
- [Rastreador de problemas](https://github.com/robiki-ai/robiki-proxy/issues)
|