@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.pl.md CHANGED
@@ -1,11 +1,11 @@
1
1
  # 🚀 Robiki Proxy
2
2
 
3
- > Wydajny, elastyczny reverse proxy HTTP/2 z obsługą WebSocket, konfigurowalnym routingiem, CORS i walidacją żądań. Używaj go jako pakiet npm w aplikacji Node.js lub jako samodzielny kontener Docker. Przeznaczony wyłącznie do użytku jako proxy domenowe w lokalnych środowiskach deweloperskich.
3
+ > Wydajny reverse proxy HTTP/2 z obsługą WebSocket, konfigurowalnym routingiem, CORS i walidacją żądań. Używaj jako pakiet npm lub kontener Docker w lokalnych środowiskach deweloperskich.
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/@robiki/proxy.svg)](https://www.npmjs.com/package/@robiki/proxy)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
7
 
8
- ## 🌍 Języki / Languages / Sprachen / 语言 / 言語 / Idiomas / Языки
8
+ ## 🌍 Języki
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
  - **✅ Walidacja żądań**: Niestandardowa logika walidacji dla uwierzytelniania, limitowania żądań itp.
19
19
  - **🔄 Przekierowywanie URL**: Transformacja URL przed przekazaniem do usług docelowych
20
20
  - **📦 Podwójne użycie**: Użyj jako pakiet npm lub kontener Docker
21
+ - **⚙️ Obsługa konfiguracji JavaScript i TypeScript**: Użyj plików konfiguracyjnych `.js` lub `.ts` z funkcjami w Docker
21
22
  - **🎯 Obsługa wielu portów**: Nasłuchiwanie na wielu portach jednocześnie
22
23
  - **⚡ Wysoka wydajność**: Zbudowany na natywnej implementacji HTTP/2 w Node.js
23
24
 
24
25
  ## 📦 Instalacja
25
26
 
26
- ### Jako pakiet npm
27
+ ### Pakiet npm
27
28
 
28
29
  ```bash
29
30
  npm install @robiki/proxy
30
- ```
31
-
32
- ```bash
31
+ # lub
33
32
  yarn add @robiki/proxy
34
33
  ```
35
34
 
36
- ### Jako kontener Docker
35
+ ### Docker
37
36
 
38
37
  ```bash
39
38
  docker pull robiki/proxy:latest
40
39
  ```
41
40
 
42
- ### Jako usługa 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
- ## Uwagi
62
-
63
- - Hosty skonfigurowane lokalnie powinny zostać dodane do lokalnego pliku `hosts`.
64
- - Jeśli używasz niestandardowych certyfikatów, musisz dodać pliki certyfikatów do katalogu `certs`.
65
-
66
41
  ## 🚀 Szybki start
67
42
 
68
- ### Użycie jako pakiet npm
43
+ ### Pakiet 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('Serwer proxy działa!');
93
66
  ```
94
67
 
95
- ### Użycie z Docker
68
+ ### Docker
96
69
 
97
- 1. Utwórz plik `proxy.config.json`:
70
+ Utwórz `proxy.config.json`:
98
71
 
99
72
  ```json
100
73
  {
@@ -108,20 +81,14 @@ console.log('Serwer proxy działa!');
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
- 2. Utwórz `docker-compose.yml`:
89
+ Utwórz `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
- 3. Uruchom usługi:
105
+ Uruchom:
155
106
 
156
107
  ```bash
157
108
  docker-compose up -d
@@ -159,9 +110,9 @@ docker-compose up -d
159
110
 
160
111
  ## 📖 Konfiguracja
161
112
 
162
- ### Plik konfiguracyjny
113
+ ### Konfiguracja JSON
163
114
 
164
- Utwórz plik `proxy.config.json` o następującej strukturze:
115
+ Prosta deklaratywna konfiguracja:
165
116
 
166
117
  ```json
167
118
  {
@@ -169,24 +120,17 @@ Utwórz plik `proxy.config.json` o następującej strukturze:
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", "OPTIONS"],
178
- "allowedHeaders": ["Content-Type", "Authorization"],
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-service:3000",
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 @@ Utwórz plik `proxy.config.json` o następującej strukturze:
196
140
  }
197
141
  ```
198
142
 
199
- ### Zmienne środowiskowe
200
-
201
- Możesz również skonfigurować proxy za pomocą zmiennych środowiskowych:
202
-
203
- ```bash
204
- # Konfiguracja 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
- # Konfiguracja CORS
211
- CORS_ORIGIN=*
212
- CORS_METHODS=GET,POST,PUT,DELETE,OPTIONS
213
- CORS_HEADERS=Content-Type,Authorization
214
- CORS_CREDENTIALS=true
215
-
216
- # Tryb debugowania
217
- DEBUG=true # Włącz szczegółowe logowanie dla połączeń proxy i błędów
218
- ```
219
-
220
- ## 🎯 Zaawansowane użycie
143
+ ### Konfiguracja JavaScript
221
144
 
222
- ### Przekierowywanie URL
223
-
224
- Transformuj URL przed przekazaniem do usług docelowych:
145
+ Dla zaawansowanych funkcji jak przekierowywanie URL i walidacja:
225
146
 
226
147
  ```javascript
227
- const config = {
228
- routes: {
229
- 'api.example.com': {
230
- target: 'backend:3000',
231
- ssl: true,
232
- remap: (url) => {
233
- // Usuń prefiks /api
234
- return url.replace(/^\/api/, '');
235
- },
236
- },
237
- },
238
- };
239
- ```
240
-
241
- ### Walidacja żądań
242
-
243
- Dodaj niestandardową logikę walidacji dla uwierzytelniania, limitowania żądań itp.:
244
-
245
- ```javascript
246
- const config = {
247
- // Walidacja globalna
248
- validate: async (info) => {
249
- if (!info.headers.authorization) {
250
- return {
251
- status: false,
252
- code: 401,
253
- message: 'Nieautoryzowany',
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
- // Walidacja specyficzna dla trasy
160
+ // Przekierowywanie URL
161
+ remap: (url) => url.replace(/^\/api/, ''),
162
+ // Walidacja żądań
264
163
  validate: async (info) => {
265
- const rateLimit = await checkRateLimit(info.remoteAddress);
266
- if (!rateLimit.allowed) {
164
+ if (!info.headers.authorization) {
267
165
  return {
268
166
  status: false,
269
- code: 429,
270
- message: 'Zbyt wiele żądań',
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
- ### Niestandardowa konfiguracja CORS
178
+ ### Konfiguracja TypeScript
281
179
 
282
- Skonfiguruj CORS globalnie lub per-trasa:
180
+ Konfiguracja z pełnym wsparciem typów i IDE:
283
181
 
284
- ```javascript
285
- const config = {
286
- // Globalny CORS
287
- cors: {
288
- origin: ['https://example.com', 'https://www.example.com'],
289
- methods: ['GET', 'POST', 'PUT', 'DELETE'],
290
- allowedHeaders: ['Content-Type', 'Authorization'],
291
- credentials: true,
292
- maxAge: 86400,
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
- // CORS specyficzny dla trasy (nadpisuje globalny)
299
- cors: {
300
- origin: '*',
301
- credentials: false,
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
- ### Niestandardowe handlery
208
+ export default config;
209
+ ```
309
210
 
310
- Utwórz niestandardowe handlery żądań dla zaawansowanych przypadków użycia:
211
+ ### Zmienne środowiskowe
311
212
 
312
- ```javascript
313
- import { createCustomProxy } from '@robiki/proxy';
213
+ ```bash
214
+ # Konfiguracja SSL
215
+ SSL_KEY=/app/certs/key.pem
216
+ SSL_CERT=/app/certs/cert.pem
217
+ SSL_ALLOW_HTTP1=true
314
218
 
315
- const customRestHandler = async (req, res) => {
316
- if (req.url === '/health') {
317
- res.writeHead(200, { 'content-type': 'application/json' });
318
- return res.end(JSON.stringify({ status: 'ok' }));
319
- }
320
- // Powrót do domyślnego zachowania proxy
321
- const { restAPIProxyHandler } = await import('@robiki/proxy/connections');
322
- return restAPIProxyHandler(req, res);
323
- };
219
+ # Konfiguracja CORS
220
+ CORS_ORIGIN=*
221
+ CORS_METHODS=GET,POST,PUT,DELETE
222
+ CORS_CREDENTIALS=true
324
223
 
325
- const proxy = await createCustomProxy(config, {
326
- rest: customRestHandler,
327
- websocket: customWebSocketHandler,
328
- stream: customStreamHandler,
329
- });
224
+ # Tryb debugowania
225
+ DEBUG=true
330
226
  ```
331
227
 
332
228
  ## 🔧 Dokumentacja API
333
229
 
334
- ### `createProxy(config: ServerConfig): Promise<ProxyServer>`
335
-
336
- Tworzy i uruchamia serwer proxy z podaną konfiguracją.
337
-
338
- **Parametry:**
339
-
340
- - `config`: Obiekt konfiguracji serwera
341
-
342
- **Zwraca:** Promise, który rozwiązuje się do instancji `ProxyServer`
343
-
344
- ### `ProxyServer`
230
+ ### `createProxy(config: ServerConfig)`
345
231
 
346
- **Metody:**
232
+ Tworzy i uruchamia serwer proxy.
347
233
 
348
- - `start()`: Uruchom serwer proxy
349
- - `stop()`: Zatrzymaj serwer proxy
350
- - `getConfig()`: Pobierz aktualną konfigurację
351
-
352
- ### Typy konfiguracji
353
-
354
- #### `ServerConfig`
234
+ **ServerConfig:**
355
235
 
356
236
  ```typescript
357
237
  interface ServerConfig {
358
238
  ports?: number[];
359
- ssl?: CertificateConfig;
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
- #### `RouteConfig`
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
  ## 🐳 Użycie Docker
409
264
 
410
- ### Użycie w innym projekcie
411
-
412
- 1. Dodaj proxy do swojego `docker-compose.yml`:
265
+ Zamontuj plik konfiguracyjny (JSON, .cjs lub .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.json:/app/proxy.config.json:ro
272
+ - ./proxy.config.cjs:/app/proxy.config.cjs:ro
423
273
  - ./certs:/app/certs:ro
424
- networks:
425
- - your-network
426
-
427
- your-service:
428
- image: your-service-image
429
- networks:
430
- - your-network
431
- ```
432
-
433
- 2. Skonfiguruj trasy w `proxy.config.json`, aby wskazywały na twoje usługi
434
-
435
- 3. Uruchom swój stack:
436
-
437
- ```bash
438
- docker-compose up -d
439
- ```
440
-
441
- ### Budowanie niestandardowego obrazu
442
-
443
- Utwórz niestandardowy Dockerfile:
444
-
445
- ```dockerfile
446
- FROM robiki/proxy:latest
447
-
448
- # Skopiuj swoją konfigurację
449
- COPY proxy.config.json /app/proxy.config.json
450
- COPY certs /app/certs
451
-
452
- # Ustaw zmienne środowiskowe
453
- ENV PROXY_CONFIG=/app/proxy.config.json
274
+ environment:
275
+ - PROXY_CONFIG=/app/proxy.config.cjs
454
276
  ```
455
277
 
456
- ## 📚 Przykłady
457
-
458
- Sprawdź katalog `examples/` dla więcej przykładów użycia:
459
-
460
- - `basic-usage.js` - Prosta konfiguracja proxy
461
- - `advanced-usage.js` - Zaawansowane funkcje (walidacja, CORS, przekierowywanie)
462
- - `custom-handlers.js` - Niestandardowe handlery żądań
463
- - `docker-compose.example.yml` - Pełna konfiguracja Docker
464
-
465
- ## 🔐 Certyfikaty SSL/TLS
466
-
467
- ### Generowanie certyfikatów self-signed
278
+ ## 🔐 Certyfikaty SSL
468
279
 
469
- Do rozwoju:
280
+ ### Środowisko deweloperskie (self-signed)
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
- ### Użycie Let's Encrypt
477
-
478
- Do produkcji, użyj certyfikatów Let's Encrypt:
287
+ ### Produkcja (Let's Encrypt)
479
288
 
480
289
  ```bash
481
290
  certbot certonly --standalone -d example.com
482
291
  ```
483
292
 
484
- Następnie odwołaj się do nich w konfiguracji:
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
- ## 🤝 Współpraca
496
-
497
- Wkłady są mile widziane! Prosimy o przesyłanie Pull Requestów.
498
-
499
- ## 📄 Licencja
500
-
501
- MIT © Robiki sp. z o.o.
502
-
503
- ## 🔗 Linki
504
-
505
- - [Repozytorium GitHub](https://github.com/robiki-ai/robiki-proxy)
506
- - [Pakiet npm](https://www.npmjs.com/package/@robiki/proxy)
507
- - [Tracker problemów](https://github.com/robiki-ai/robiki-proxy/issues)
508
-
509
- ## 💡 Przypadki użycia
510
-
511
- - **Architektura mikroserwisów**: Kierowanie żądań do różnych usług na podstawie domeny/ścieżki
512
- - **Środowisko deweloperskie**: Lokalny proxy do testowania wielu usług
513
- - **Brama API**: Scentralizowany punkt wejścia z uwierzytelnianiem i limitowaniem żądań
514
- - **Terminacja SSL**: Obsługa SSL/TLS na poziomie proxy
515
- - **Zarządzanie CORS**: Scentralizowana konfiguracja CORS
516
- - **Równoważenie obciążenia**: Dystrybucja ruchu między wieloma instancjami (z niestandardowymi handlerami)
517
-
518
293
  ## 🛠️ Rozwiązywanie problemów
519
294
 
520
295
  ### Tryb debugowania
521
296
 
522
- Włącz szczegółowe logowanie, aby rozwiązać problemy z połączeniem:
297
+ Włącz szczegółowe logowanie:
523
298
 
524
299
  ```bash
525
- # Włącz tryb debugowania
526
- DEBUG=true node your-proxy-script.js
527
-
528
- # Lub z Docker
300
+ DEBUG=true node your-script.js
301
+ # lub
529
302
  docker run -e DEBUG=true robiki/proxy:latest
530
-
531
- # Lub w docker-compose.yml
532
- services:
533
- proxy:
534
- image: robiki/proxy:latest
535
- environment:
536
- - DEBUG=true
537
303
  ```
538
304
 
539
- Gdy `DEBUG=true`, proxy będzie logować:
540
- - Wszystkie próby połączenia proxy (REST, WebSocket, strumienie HTTP/2)
541
- - Szczegóły żądań i odpowiedzi
542
- - Błędy połączenia i przekroczenia czasu
543
- - Błędy proxy i błędy klienta
544
-
545
305
  ### Port już w użyciu
546
306
 
547
- Proxy automatycznie spróbuje zabić procesy na skonfigurowanych portach. Jeśli to się nie powiedzie, ręcznie zwolnij porty:
548
-
549
307
  ```bash
550
308
  lsof -ti:443 | xargs kill -9
551
- lsof -ti:8080 | xargs kill -9
552
309
  ```
553
310
 
554
- ### Błędy certyfikatu SSL
555
-
556
- Upewnij się, że pliki certyfikatów są czytelne i w poprawnym formacie (PEM). Do rozwoju użyj certyfikatów self-signed.
557
-
558
- ### Problemy z połączeniem WebSocket
559
-
560
- Upewnij się, że trasy WebSocket są skonfigurowane z poprawnym protokołem (ws/wss) i że usługa docelowa obsługuje połączenia WebSocket.
561
-
562
- ## 🧪 Testowanie
563
-
564
- Robiki Proxy zawiera kompleksowy zestaw testów obejmujący testy jednostkowe, testy integracyjne i zaawansowane scenariusze.
565
-
566
- ### Uruchamianie testów
311
+ ## 🧪 Testy
567
312
 
568
313
  ```bash
569
314
  # Uruchom wszystkie testy
570
315
  yarn test
571
316
 
572
- # Uruchom testy w trybie watch
573
- yarn test:watch
574
-
575
- # Uruchom testy z pokryciem
317
+ # Z pokryciem
576
318
  yarn test:coverage
577
319
 
578
- # Uruchom testy z UI
579
- yarn test:ui
580
- ```
581
-
582
- ### Pokrycie testów
583
-
584
- Zestaw testów obejmuje:
585
-
586
- - **Testy jednostkowe**: Konfiguracja, narzędzia, konwersja nagłówków, obsługa CORS
587
- - **Testy integracyjne**: Proxy HTTP, rozwiązywanie tras, walidacja, ładowanie konfiguracji
588
- - **Testy zaawansowane**: Proxy WebSocket, strumienie HTTP/2, równoczesne połączenia
589
- - **Testy Docker**: Budowanie kontenerów, ładowanie konfiguracji, zachowanie w czasie wykonywania
590
-
591
- ### Testy Docker
592
-
593
- Uruchom testy integracyjne Docker:
594
-
595
- ```bash
596
- # Pełny test integracyjny Docker
320
+ # Testy Docker
597
321
  yarn test:docker
598
-
599
- # Test specyficzny dla ładowania konfiguracji
600
- yarn test:docker:config
601
-
602
- # Uruchom wszystkie testy (jednostkowe + integracyjne + Docker)
603
- yarn test:all
604
322
  ```
605
323
 
606
- Lub używając Make:
607
-
608
- ```bash
609
- # Szybki test budowania Docker
610
- make test-docker
611
-
612
- # Pełny zestaw testów integracyjnych
613
- make test-docker-full
614
-
615
- # Test ładowania konfiguracji
616
- make test-docker-config
324
+ ## 📚 Przykłady
617
325
 
618
- # Test Docker Compose
619
- make test-docker-compose
620
- ```
326
+ Zobacz katalog `examples/`:
621
327
 
622
- Zobacz [Docker Tests README](tests/docker/README.md) dla więcej szczegółów.
328
+ - `basic-usage.js` - Prosta konfiguracja proxy
329
+ - `advanced-usage.js` - Walidacja, CORS, przekierowania
330
+ - `custom-handlers.js` - Niestandardowe handlery żądań
331
+ - `docker-compose.example.yml` - Konfiguracja Docker
623
332
 
624
- ## 📊 Wydajność
333
+ ## 🤝 Współpraca
625
334
 
626
- Proxy jest zbudowany na natywnej implementacji HTTP/2 w Node.js i zaprojektowany z myślą o wysokiej wydajności:
335
+ Wkład mile widziany! Zobacz [CONTRIBUTING.md](CONTRIBUTING.md) po szczegóły.
627
336
 
628
- - Efektywna obsługa strumieni
629
- - Minimalny narzut
630
- - Pooling połączeń
631
- - Automatyczny powrót do HTTP/1.1
337
+ ## 📄 Licencja
632
338
 
633
- Dla wdrożeń produkcyjnych rozważ:
339
+ MIT © Robiki sp. z o.o.
634
340
 
635
- - Użycie menedżera procesów (PM2, systemd)
636
- - Włączenie klastrowania dla systemów wielordzeniowych
637
- - Monitorowanie za pomocą health checks
638
- - Skonfigurowanie odpowiedniego logowania
341
+ ## 🔗 Linki
639
342
 
343
+ - [Repozytorium GitHub](https://github.com/robiki-ai/robiki-proxy)
344
+ - [Pakiet npm](https://www.npmjs.com/package/@robiki/proxy)
345
+ - [Issue Tracker](https://github.com/robiki-ai/robiki-proxy/issues)