@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.ja.md CHANGED
@@ -1,11 +1,11 @@
1
1
  # 🚀 Robiki プロキシ
2
2
 
3
- > WebSocket サポート、設定可能なルーティング、CORS、リクエスト検証を備えた高性能で柔軟な HTTP/2 リバースプロキシ。Node.js アプリケーションの npm パッケージとして、またはスタンドアロンの Docker コンテナとして使用できます。ローカル開発環境専用のドメインプロキシとしての使用を想定しています。
3
+ > WebSocket サポート、設定可能なルーティング、CORS、リクエスト検証を備えた高性能な HTTP/2 リバースプロキシ。npm パッケージまたは Docker コンテナとしてローカル開発環境で使用できます。
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
- ## 🌍 言語 / Languages / Sprachen / 语言 / Języki / Idiomas / Языки
8
+ ## 🌍 言語
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
  - **✅ リクエスト検証**:認証、レート制限などのカスタム検証ロジック
19
19
  - **🔄 URL リマッピング**:ターゲットサービスに転送する前に URL を変換
20
20
  - **📦 デュアル使用**:npm パッケージまたは Docker コンテナとして使用
21
+ - **⚙️ JavaScript & TypeScript 設定サポート**:Docker で関数を使用した `.js` または `.ts` 設定ファイルを使用
21
22
  - **🎯 マルチポートサポート**:複数のポートで同時にリッスン
22
23
  - **⚡ 高性能**:Node.js ネイティブ HTTP/2 実装に基づく
23
24
 
24
25
  ## 📦 インストール
25
26
 
26
- ### npm パッケージとして
27
+ ### npm パッケージ
27
28
 
28
29
  ```bash
29
30
  npm install @robiki/proxy
30
- ```
31
-
32
- ```bash
31
+ # または
33
32
  yarn add @robiki/proxy
34
33
  ```
35
34
 
36
- ### Docker コンテナとして
35
+ ### Docker
37
36
 
38
37
  ```bash
39
38
  docker pull robiki/proxy:latest
40
39
  ```
41
40
 
42
- ### 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
- ## 注意事項
62
-
63
- - ローカルで設定されたホストは、ローカルの `hosts` ファイルに追加する必要があります。
64
- - カスタム証明書を使用する場合は、証明書ファイルを `certs` ディレクトリに追加する必要があります。
65
-
66
41
  ## 🚀 クイックスタート
67
42
 
68
- ### npm パッケージとして使用
43
+ ### 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('プロキシサーバーが実行中です!');
93
66
  ```
94
67
 
95
- ### Docker で使用
68
+ ### Docker
96
69
 
97
- 1. `proxy.config.json` ファイルを作成:
70
+ `proxy.config.json` を作成:
98
71
 
99
72
  ```json
100
73
  {
@@ -108,20 +81,14 @@ console.log('プロキシサーバーが実行中です!');
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. `docker-compose.yml` を作成:
89
+ `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. サービスを起動:
105
+ 起動:
155
106
 
156
107
  ```bash
157
108
  docker-compose up -d
@@ -159,9 +110,9 @@ docker-compose up -d
159
110
 
160
111
  ## 📖 設定
161
112
 
162
- ### 設定ファイル
113
+ ### JSON 設定
163
114
 
164
- 次の構造で `proxy.config.json` ファイルを作成:
115
+ シンプルな宣言的設定:
165
116
 
166
117
  ```json
167
118
  {
@@ -169,24 +120,17 @@ docker-compose up -d
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 @@ docker-compose up -d
196
140
  }
197
141
  ```
198
142
 
199
- ### 環境変数
200
-
201
- 環境変数を使用してプロキシを設定することもできます:
202
-
203
- ```bash
204
- # 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
- # CORS 設定
211
- CORS_ORIGIN=*
212
- CORS_METHODS=GET,POST,PUT,DELETE,OPTIONS
213
- CORS_HEADERS=Content-Type,Authorization
214
- CORS_CREDENTIALS=true
215
-
216
- # デバッグモード
217
- DEBUG=true # プロキシ接続とエラーの詳細なログを有効にする
218
- ```
219
-
220
- ## 🎯 高度な使用法
221
-
222
- ### URL リマッピング
223
-
224
- ターゲットサービスに転送する前に URL を変換:
225
-
226
- ```javascript
227
- const config = {
228
- routes: {
229
- 'api.example.com': {
230
- target: 'backend:3000',
231
- ssl: true,
232
- remap: (url) => {
233
- // /api プレフィックスを削除
234
- return url.replace(/^\/api/, '');
235
- },
236
- },
237
- },
238
- };
239
- ```
240
-
241
- ### リクエスト検証
143
+ ### JavaScript 設定
242
144
 
243
- 認証、レート制限などのカスタム検証ロジックを追加:
145
+ URL リマッピングや検証などの高度な機能用:
244
146
 
245
147
  ```javascript
246
- const config = {
247
- // グローバル検証
248
- validate: async (info) => {
249
- if (!info.headers.authorization) {
250
- return {
251
- status: false,
252
- code: 401,
253
- message: '認証されていません',
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
+ // URL リマッピング
161
+ remap: (url) => url.replace(/^\/api/, ''),
162
+ // リクエスト検証
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: 'リクエストが多すぎます',
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
- ### カスタム CORS 設定
178
+ ### TypeScript 設定
281
179
 
282
- CORS をグローバルまたはルート別に設定:
180
+ 完全な IDE サポート付きの型安全な設定:
283
181
 
284
- ```javascript
285
- const config = {
286
- // グローバル 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(グローバルを上書き)
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
- ### カスタムハンドラー
208
+ export default config;
209
+ ```
309
210
 
310
- 高度なユースケース用のカスタムリクエストハンドラーを作成:
211
+ ### 環境変数
311
212
 
312
- ```javascript
313
- import { createCustomProxy } from '@robiki/proxy';
213
+ ```bash
214
+ # 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
- // デフォルトのプロキシ動作にフォールバック
321
- const { restAPIProxyHandler } = await import('@robiki/proxy/connections');
322
- return restAPIProxyHandler(req, res);
323
- };
219
+ # 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
+ # デバッグモード
225
+ DEBUG=true
330
226
  ```
331
227
 
332
228
  ## 🔧 API リファレンス
333
229
 
334
- ### `createProxy(config: ServerConfig): Promise<ProxyServer>`
335
-
336
- 指定された設定でプロキシサーバーを作成して起動します。
337
-
338
- **パラメータ:**
339
-
340
- - `config`:サーバー設定オブジェクト
341
-
342
- **戻り値:** `ProxyServer` インスタンスに解決される Promise
230
+ ### `createProxy(config: ServerConfig)`
343
231
 
344
- ### `ProxyServer`
232
+ プロキシサーバーを作成して起動します。
345
233
 
346
- **メソッド:**
347
-
348
- - `start()`:プロキシサーバーを起動
349
- - `stop()`:プロキシサーバーを停止
350
- - `getConfig()`:現在の設定を取得
351
-
352
- ### 設定タイプ
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
- ## 🐳 Docker の使用
409
-
410
- ### 別のプロジェクトで使用
263
+ ## 🐳 Docker 使用
411
264
 
412
- 1. `docker-compose.yml` にプロキシを追加:
265
+ 設定ファイル(JSON、.cjs、または .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. `proxy.config.json` でサービスを指すようにルートを設定
434
-
435
- 3. スタックを起動:
436
-
437
- ```bash
438
- docker-compose up -d
439
- ```
440
-
441
- ### カスタムイメージのビルド
442
-
443
- カスタム Dockerfile を作成:
444
-
445
- ```dockerfile
446
- FROM robiki/proxy:latest
447
-
448
- # 設定をコピー
449
- COPY proxy.config.json /app/proxy.config.json
450
- COPY certs /app/certs
451
-
452
- # 環境変数を設定
453
- ENV PROXY_CONFIG=/app/proxy.config.json
274
+ environment:
275
+ - PROXY_CONFIG=/app/proxy.config.cjs
454
276
  ```
455
277
 
456
- ## 📚
457
-
458
- より多くの使用例については、`examples/` ディレクトリを確認してください:
459
-
460
- - `basic-usage.js` - シンプルなプロキシ設定
461
- - `advanced-usage.js` - 高度な機能(検証、CORS、リマッピング)
462
- - `custom-handlers.js` - カスタムリクエストハンドラー
463
- - `docker-compose.example.yml` - 完全な Docker 設定
464
-
465
- ## 🔐 SSL/TLS 証明書
466
-
467
- ### 自己署名証明書の生成
278
+ ## 🔐 SSL 証明書
468
279
 
469
- 開発用:
280
+ ### 開発環境(自己署名)
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
- ### Let's Encrypt の使用
477
-
478
- 本番環境では、Let's Encrypt 証明書を使用:
287
+ ### 本番環境(Let's Encrypt
479
288
 
480
289
  ```bash
481
290
  certbot certonly --standalone -d example.com
482
291
  ```
483
292
 
484
- 次に、設定で参照:
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
- ## 🤝 貢献
496
-
497
- 貢献を歓迎します!お気軽にプルリクエストを送信してください。
498
-
499
- ## 📄 ライセンス
500
-
501
- MIT © Robiki sp. z o.o.
502
-
503
- ## 🔗 リンク
504
-
505
- - [GitHub リポジトリ](https://github.com/robiki-ai/robiki-proxy)
506
- - [npm パッケージ](https://www.npmjs.com/package/@robiki/proxy)
507
- - [イシュートラッカー](https://github.com/robiki-ai/robiki-proxy/issues)
508
-
509
- ## 💡 ユースケース
510
-
511
- - **マイクロサービスアーキテクチャ**:ドメイン/パスに基づいて異なるサービスにリクエストをルーティング
512
- - **開発環境**:複数のサービスをテストするためのローカルプロキシ
513
- - **API ゲートウェイ**:認証とレート制限を備えた集中エントリポイント
514
- - **SSL ターミネーション**:プロキシレベルで SSL/TLS を処理
515
- - **CORS 管理**:集中型 CORS 設定
516
- - **ロードバランシング**:複数のインスタンスにトラフィックを分散(カスタムハンドラーを使用)
517
-
518
293
  ## 🛠️ トラブルシューティング
519
294
 
520
295
  ### デバッグモード
521
296
 
522
- 接続の問題をトラブルシューティングするために詳細なログを有効にする:
297
+ 詳細なログを有効化:
523
298
 
524
299
  ```bash
525
- # デバッグモードを有効にする
526
- DEBUG=true node your-proxy-script.js
527
-
528
- # または Docker で
300
+ DEBUG=true node your-script.js
301
+ # または
529
302
  docker run -e DEBUG=true robiki/proxy:latest
530
-
531
- # または docker-compose.yml で
532
- services:
533
- proxy:
534
- image: robiki/proxy:latest
535
- environment:
536
- - DEBUG=true
537
303
  ```
538
304
 
539
- `DEBUG=true` の場合、プロキシは以下をログに記録します:
540
- - すべてのプロキシ接続試行(REST、WebSocket、HTTP/2 ストリーム)
541
- - リクエストとレスポンスの詳細
542
- - 接続エラーとタイムアウト
543
- - プロキシエラーとクライアントエラー
544
-
545
305
  ### ポートが既に使用中
546
306
 
547
- プロキシは、設定されたポートのプロセスを自動的に終了しようとします。失敗した場合は、手動でポートを解放:
548
-
549
307
  ```bash
550
308
  lsof -ti:443 | xargs kill -9
551
- lsof -ti:8080 | xargs kill -9
552
309
  ```
553
310
 
554
- ### SSL 証明書エラー
555
-
556
- 証明書ファイルが読み取り可能で、正しい形式(PEM)であることを確認してください。開発では、自己署名証明書を使用します。
557
-
558
- ### WebSocket 接続の問題
559
-
560
- WebSocket ルートが正しいプロトコル(ws/wss)で設定されており、ターゲットサービスが WebSocket 接続をサポートしていることを確認してください。
561
-
562
311
  ## 🧪 テスト
563
312
 
564
- Robiki Proxy には、ユニットテスト、統合テスト、高度なシナリオをカバーする包括的なテストスイートが含まれています。
565
-
566
- ### テストの実行
567
-
568
313
  ```bash
569
314
  # すべてのテストを実行
570
315
  yarn test
571
316
 
572
- # ウォッチモードでテストを実行
573
- yarn test:watch
574
-
575
- # カバレッジ付きでテストを実行
317
+ # カバレッジ付き
576
318
  yarn test:coverage
577
319
 
578
- # UI でテストを実行
579
- yarn test:ui
580
- ```
581
-
582
- ### テストカバレッジ
583
-
584
- テストスイートには以下が含まれます:
585
-
586
- - **ユニットテスト**:設定、ユーティリティ、ヘッダー変換、CORS 処理
587
- - **統合テスト**:HTTP プロキシ、ルート解決、検証、設定読み込み
588
- - **高度なテスト**:WebSocket プロキシ、HTTP/2 ストリーム、同時接続
589
- - **Docker テスト**:コンテナビルド、設定読み込み、ランタイム動作
590
-
591
- ### Docker テスト
592
-
593
- Docker 統合テストを実行:
594
-
595
- ```bash
596
- # 完全な Docker 統合テスト
320
+ # Docker テスト
597
321
  yarn test:docker
598
-
599
- # 設定読み込みを特にテスト
600
- yarn test:docker:config
601
-
602
- # すべてのテストを実行(ユニット + 統合 + Docker)
603
- yarn test:all
604
322
  ```
605
323
 
606
- または Make を使用:
607
-
608
- ```bash
609
- # クイック Docker ビルドテスト
610
- make test-docker
611
-
612
- # 完全な統合テストスイート
613
- make test-docker-full
614
-
615
- # 設定読み込みテスト
616
- make test-docker-config
324
+ ## 📚
617
325
 
618
- # Docker Compose テスト
619
- make test-docker-compose
620
- ```
326
+ `examples/` ディレクトリを参照:
621
327
 
622
- 詳細については、[Docker テスト README](tests/docker/README.md) を参照してください。
328
+ - `basic-usage.js` - シンプルなプロキシ設定
329
+ - `advanced-usage.js` - 検証、CORS、リマッピング
330
+ - `custom-handlers.js` - カスタムリクエストハンドラ
331
+ - `docker-compose.example.yml` - Docker 設定
623
332
 
624
- ## 📊 パフォーマンス
333
+ ## 🤝 貢献
625
334
 
626
- このプロキシは Node.js ネイティブ HTTP/2 実装に基づいており、高性能向けに設計されています:
335
+ 貢献を歓迎します!詳細は [CONTRIBUTING.md](CONTRIBUTING.md) を参照してください。
627
336
 
628
- - 効率的なストリーム処理
629
- - 最小限のオーバーヘッド
630
- - コネクションプーリング
631
- - 自動 HTTP/1.1 フォールバック
337
+ ## 📄 ライセンス
632
338
 
633
- 本番環境デプロイメントでは、以下を検討してください:
339
+ MIT © Robiki sp. z o.o.
634
340
 
635
- - プロセスマネージャーの使用(PM2、systemd)
636
- - マルチコアシステム用のクラスタリングの有効化
637
- - ヘルスチェックによる監視
638
- - 適切なログ記録の設定
341
+ ## 🔗 リンク
639
342
 
343
+ - [GitHub リポジトリ](https://github.com/robiki-ai/robiki-proxy)
344
+ - [npm パッケージ](https://www.npmjs.com/package/@robiki/proxy)
345
+ - [Issue トラッカー](https://github.com/robiki-ai/robiki-proxy/issues)