@mug-lab/cookie-auth-proxy 0.1.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 mug-lab contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,642 @@
1
+ # Cookie Auth Proxy
2
+
3
+ ## 注意 / Notice
4
+
5
+ このツールはローカル開発支援用です。公開サーバとして動かすことは想定していません。
6
+ 認証済み Cookie を扱えるため、実 Cookie 値を設定ファイル、スタブ、README、Issue、ログなどに残さないでください。
7
+ 保守は best effort です。
8
+
9
+ This is a local development helper. It is not intended to be exposed as a public server.
10
+ Because it can handle authenticated cookies, do not store real cookie values in config files, stubs, README files, issues, logs, or other shared artifacts.
11
+ Maintenance is provided on a best-effort basis.
12
+
13
+ ## 概要 / Overview
14
+
15
+ Cookie でセッションIDや認証状態を渡すタイプの Web アプリを、ローカル開発しやすくするためのプロキシです。
16
+
17
+ Cookie Auth Proxy is a local development proxy for web applications that use cookies to pass session IDs or authentication state to the server.
18
+
19
+ ブラウザは `http://localhost:4300` のプロキシにアクセスします。プロキシはパスベースで、ローカルの client dev server とリモート API にリクエストを振り分けます。API に送るリクエストだけに認証済み Cookie を注入できるため、フロントエンドはローカルで動かしつつ、API は既存の検証環境やテスト用デプロイを使えます。
20
+
21
+ The browser accesses the proxy at `http://localhost:4300`. The proxy routes requests by path to either a local client dev server or a remote API origin. It can inject an authenticated cookie only into API requests, so you can run the frontend locally while using an existing validation environment or test API deployment.
22
+
23
+ 特定のフロントエンドフレームワークには依存しません。Cookie 認証の Web アプリであれば、フレームワークを問わず利用できます。
24
+
25
+ This tool is frontend-framework agnostic. It can be used with any web app that relies on cookie-based authentication.
26
+
27
+ ## アーキテクチャ / Architecture
28
+
29
+ ```mermaid
30
+ flowchart LR
31
+ Browser["Browser"]
32
+ Proxy["Cookie Auth Proxy<br/>localhost:4300"]
33
+ Admin["Admin UI<br/>localhost:4301"]
34
+ Client["Client dev server<br/>localhost:8080"]
35
+ API["Remote API origin"]
36
+ Rules["Runtime settings<br/>Cookie / Origin / Stubs / Overrides"]
37
+ Files["Startup import files<br/>stubs / overrides"]
38
+
39
+ Browser -->|"App access"| Proxy
40
+ Admin -->|"Update settings<br/>inspect history"| Rules
41
+ Files -->|"Load on startup"| Rules
42
+ Rules --> Proxy
43
+ Proxy -->|"Non API paths"| Client
44
+ Proxy -->|"API paths + injected Cookie"| API
45
+ API -->|"Response headers/body rewrite<br/>history capture"| Proxy
46
+ Proxy --> Browser
47
+ ```
48
+
49
+ 通常の画面アクセスは `localhost:4300` のプロキシを経由します。プロキシはパス設定に従って、client dev server または remote API origin に振り分けます。API リクエストには管理画面または設定ファイルで指定した Cookie を注入し、レスポンスは必要に応じて localhost 向けに書き換えます。
50
+
51
+ Application traffic goes through the proxy at `localhost:4300`. The proxy routes each request to either the client dev server or the remote API origin based on path settings. API requests can receive an injected Cookie from the admin UI or config file, and responses are rewritten for localhost when needed.
52
+
53
+ ## 主な機能 / Features
54
+
55
+ - パスベースで client dev server と API server に振り分け / Route requests by path to a client dev server or API server
56
+ - API origin、client origin、API Cookie を管理画面から実行時変更 / Change API origin, client origin, and API Cookie at runtime from the admin UI
57
+ - API 通信履歴の確認、フィルタ、レスポンスコピー / Inspect, filter, and copy API history and responses
58
+ - 履歴からスタブ、JSON Override を作成 / Create stubs and JSON Overrides from captured history
59
+ - スタブのインポート、エクスポート、起動時自動読み込み / Import, export, and auto-load stubs at startup
60
+ - JSON Override のインポート、エクスポート、起動時自動読み込み / Import, export, and auto-load JSON Overrides at startup
61
+ - API origin のホワイトリスト制限 / Restrict API origins with an allowlist
62
+ - 管理画面への注意文言表示 / Show team notices in the admin UI
63
+ - npm package として導入、または clone/zip で単体利用 / Use as an npm package, or run standalone from a clone or zip
64
+
65
+ ## クイックスタート
66
+
67
+ client app のプロジェクトに devDependency として追加します。
68
+
69
+ ```console
70
+ npm install -D @mug-lab/cookie-auth-proxy
71
+ ```
72
+
73
+ プロジェクトルートで初期設定を作成します。
74
+
75
+ ```console
76
+ npx cookie-auth-proxy init
77
+ ```
78
+
79
+ 未インストールの状態で直接実行する場合は `npx @mug-lab/cookie-auth-proxy init` を使います。devDependencyとして追加した後は、bin名の `cookie-auth-proxy` で実行できます。
80
+
81
+ `init` は次のファイルを作成します。
82
+
83
+ ```text
84
+ <client-project-root>/
85
+ cookie-auth-proxy.config.json
86
+ cookie-auth-proxy/
87
+ cookie-auth-proxy.schema.json
88
+ stubs/
89
+ README.md
90
+ overrides/
91
+ README.md
92
+ ```
93
+
94
+ `cookie-auth-proxy.config.json` の `clientOrigin` と `apiOrigin` を環境に合わせて変更します。
95
+ configには `$schema` が設定されるため、VS Codeなどのエディタで設定項目の補完や型チェックを利用できます。
96
+
97
+ ```json
98
+ {
99
+ "clientOrigin": "http://localhost:8080",
100
+ "apiOrigin": "https://api.invalid"
101
+ }
102
+ ```
103
+
104
+ client app 側の `package.json` に script を追加します。
105
+
106
+ ```json
107
+ {
108
+ "scripts": {
109
+ "cookie-auth-proxy:init": "cookie-auth-proxy init",
110
+ "cookie-auth-proxy": "cookie-auth-proxy --config cookie-auth-proxy.config.json"
111
+ }
112
+ }
113
+ ```
114
+
115
+ client dev server を別ターミナルで起動したうえで、プロキシを起動します。
116
+
117
+ ```console
118
+ npm run cookie-auth-proxy
119
+ ```
120
+
121
+ 起動後は次の URL を開きます。
122
+
123
+ - 管理画面: `http://localhost:4301`
124
+ - プロキシ経由のアプリ: `http://localhost:4300`
125
+
126
+ 設定ファイルを作らずに起動し、管理画面から `Client Origin` と `API Origin` を入力することもできます。
127
+
128
+ ## サポートフォルダの変更
129
+
130
+ スタブや Override の置き場を変えたい場合は、`init` 時に `--support-dir` を指定します。パスはプロジェクトルートからの相対パスです。
131
+
132
+ ```console
133
+ npx cookie-auth-proxy init --support-dir tools/cookie-auth-proxy
134
+ ```
135
+
136
+ この場合、次のように作成されます。
137
+
138
+ ```text
139
+ <client-project-root>/
140
+ cookie-auth-proxy.config.json
141
+ tools/
142
+ cookie-auth-proxy/
143
+ cookie-auth-proxy.schema.json
144
+ stubs/
145
+ README.md
146
+ overrides/
147
+ README.md
148
+ ```
149
+
150
+ 同時に `cookie-auth-proxy.config.json` の `startupStubImportDir` と `startupOverrideImportDir` も更新されます。
151
+
152
+ 既存ファイルを上書きしたい場合は `--force` を付けます。
153
+
154
+ ```console
155
+ npx cookie-auth-proxy init --force
156
+ ```
157
+
158
+ ## スタンドアロン利用
159
+
160
+ このリポジトリを clone したり、zip で展開してそのまま使う場合は、同梱の `config.json` を読みます。
161
+
162
+ ```console
163
+ npm install
164
+ npm start
165
+ ```
166
+
167
+ スタンドアロン用の `config.json` は、リポジトリ直下の `stubs` と `overrides` を起動時インポート先として使います。
168
+
169
+ ## 設定ファイル
170
+
171
+ npm package として client app に導入する場合は、通常 `cookie-auth-proxy.config.json` を使います。スタンドアロン利用では `config.json` を使います。
172
+
173
+ 基本形は次のような設定です。
174
+
175
+ ```json
176
+ {
177
+ "listenHost": "localhost",
178
+ "listenPort": 4300,
179
+ "clientOrigin": "http://localhost:8080",
180
+ "apiOrigin": "https://api.invalid",
181
+ "apiPathPatterns": ["^/api(?:/|$)"],
182
+ "apiPathExcludes": [
183
+ "^/$",
184
+ "^/favicon\\.ico$",
185
+ "^/(?:assets|static)(?:/|$)",
186
+ "^/sockjs-node(?:/|$)"
187
+ ],
188
+ "apiCookie": "sessionId=; authState=",
189
+ "startupStubImportDir": "cookie-auth-proxy/stubs",
190
+ "startupOverrideImportDir": "cookie-auth-proxy/overrides",
191
+ "serverAppPath": "/",
192
+ "adminHost": "localhost",
193
+ "adminPort": 4301,
194
+ "historyLimit": 200,
195
+ "maxAdminBodyBytes": 1048576,
196
+ "maxRequestBodyInspectionBytes": 10485760,
197
+ "maxResponseBodyRewriteBytes": 52428800,
198
+ "maxHistoryBodyBytes": 524288,
199
+ "allowRemoteAccess": false
200
+ }
201
+ ```
202
+
203
+ `apiOrigin` は空文字でも起動できます。その場合、管理画面から API origin を設定するまで API リクエストは 502 になります。
204
+
205
+ `apiCookie` は Cookie 名だけを設定しておくこともできます。
206
+
207
+ ```json
208
+ {
209
+ "apiCookie": "sessionId=; authState="
210
+ }
211
+ ```
212
+
213
+ 実際の Cookie 値は認証情報です。共有リポジトリにコミットしない運用をおすすめします。
214
+
215
+ ## 起動オプション
216
+
217
+ ```console
218
+ cookie-auth-proxy [apiOrigin] [options]
219
+ ```
220
+
221
+ 主なオプションです。
222
+
223
+ - `--config <path>`: 設定ファイルを指定
224
+ - `--api <origin>`: API origin を指定
225
+ - `--client <origin>`: client dev server の origin を指定
226
+ - `--cookie <cookie>`: API に注入する Cookie を指定
227
+ - `--host <host>`: プロキシの listen host を指定
228
+ - `--port <port>`: プロキシの listen port を指定
229
+ - `--admin-host <host>`: 管理画面の listen host を指定
230
+ - `--admin-port <port>`: 管理画面の listen port を指定
231
+ - `--allow-remote-access`: `localhost` 以外の host でlistenすることを明示許可
232
+ - `--dry-run`: 起動せずに設定と起動時Importを検証
233
+ - `--startup-stub-import-dir <path>`: 起動時に読み込むスタブフォルダを指定
234
+ - `--startup-override-import-dir <path>`: 起動時に読み込む Override フォルダを指定
235
+ - `--server-app-path <path>`: 管理画面の `Open Server App` ボタンで開くパスを指定
236
+ - `--logLevel <silent|error|info|debug>`: ログレベルを指定
237
+ - `--version`, `-v`: バージョンを表示
238
+ - `--help`, `-h`: ヘルプを表示
239
+
240
+ 一時的に API origin を変える場合は、位置引数または `--api` を使います。
241
+
242
+ ```console
243
+ npm run cookie-auth-proxy -- https://test-api.invalid
244
+ ```
245
+
246
+ ```console
247
+ npm run cookie-auth-proxy -- --api https://test-api.invalid
248
+ ```
249
+
250
+ 設定値の優先順位は次の順です。
251
+
252
+ ```text
253
+ CLI arguments > environment variables > config file > defaults
254
+ ```
255
+
256
+ 設定とローカル環境をまとめて確認する場合は `doctor` を使います。
257
+
258
+ ```console
259
+ cookie-auth-proxy doctor --config cookie-auth-proxy.config.json
260
+ ```
261
+
262
+ `doctor` は config、起動時Importフォルダ、port空き、API origin allowlist などを確認します。設定だけを検証して終了したい場合は `--dry-run` を使います。
263
+
264
+ ```console
265
+ cookie-auth-proxy --config cookie-auth-proxy.config.json --dry-run
266
+ ```
267
+
268
+ ## 環境変数
269
+
270
+ 次の環境変数でも指定できます。
271
+
272
+ - `API_ORIGIN`
273
+ - `API_COOKIE`
274
+ - `CLIENT_ORIGIN`
275
+ - `PROXY_HOST`
276
+ - `PROXY_PORT`
277
+ - `STARTUP_STUB_IMPORT_DIR`
278
+ - `STARTUP_OVERRIDE_IMPORT_DIR`
279
+ - `SERVER_APP_PATH`
280
+ - `ADMIN_HOST`
281
+ - `ADMIN_PORT`
282
+ - `ALLOW_REMOTE_ACCESS`
283
+ - `LOG_LEVEL`
284
+
285
+ cmd.exe:
286
+
287
+ ```bat
288
+ set API_ORIGIN=https://test-api.invalid
289
+ npm run cookie-auth-proxy
290
+ ```
291
+
292
+ PowerShell:
293
+
294
+ ```powershell
295
+ $env:API_ORIGIN = "https://test-api.invalid"
296
+ npm run cookie-auth-proxy
297
+ ```
298
+
299
+ bash / ksh:
300
+
301
+ ```sh
302
+ API_ORIGIN=https://test-api.invalid npm run cookie-auth-proxy
303
+ ```
304
+
305
+ ## 認証 Cookie
306
+
307
+ 事前に本物の API origin でログイン済み Cookie を取得できている場合、その Cookie を API 向けリクエストに注入できます。Cookie は API にだけ付与され、client dev server に転送されるリクエストには付与されません。
308
+
309
+ 管理画面の `API Cookie` で Cookie 名と値を項目ごとに編集できます。値はマスク表示できます。
310
+
311
+ 起動時に直接指定することもできます。
312
+
313
+ cmd.exe:
314
+
315
+ ```bat
316
+ npm run cookie-auth-proxy -- --cookie "sessionId=xxxxx; authState=yyyyy"
317
+ ```
318
+
319
+ PowerShell:
320
+
321
+ ```powershell
322
+ npm run cookie-auth-proxy -- --cookie "sessionId=xxxxx; authState=yyyyy"
323
+ ```
324
+
325
+ bash / ksh:
326
+
327
+ ```sh
328
+ npm run cookie-auth-proxy -- --cookie 'sessionId=xxxxx; authState=yyyyy'
329
+ ```
330
+
331
+ Shell や VSCode の入力履歴に残る可能性があるため、共有端末では注意してください。
332
+
333
+ ## パス振り分け
334
+
335
+ `apiPathPatterns` に一致するパスは API server へ転送します。初期値は `/api` 配下です。
336
+
337
+ ```json
338
+ {
339
+ "apiPathPatterns": [
340
+ "^/api(?:/|$)"
341
+ ]
342
+ }
343
+ ```
344
+
345
+ 一致しないパスは client dev server へ転送します。`/graphql` や `/v1` なども API にしたい場合は追加してください。
346
+
347
+ ```json
348
+ {
349
+ "apiPathPatterns": [
350
+ "^/api(?:/|$)",
351
+ "^/graphql$",
352
+ "^/v1(?:/|$)"
353
+ ]
354
+ }
355
+ ```
356
+
357
+ `apiPathExcludes` に一致するパスは API 判定から除外します。アセットや dev server 用の WebSocket 系パスを client 側へ逃がしたい場合に使います。
358
+
359
+ ## Origin 制限
360
+
361
+ 誤って本番環境などに向けないように、API origin をホワイトリスト制限できます。空配列の場合は制限なしです。
362
+
363
+ ```json
364
+ {
365
+ "apiOriginAllowedPatterns": [
366
+ "^https://(?:api|test-api)\\.invalid$"
367
+ ]
368
+ }
369
+ ```
370
+
371
+ 制限に一致しない `apiOrigin` は、起動時も管理画面からの変更時もエラーになります。管理画面では入力欄の下にエラーメッセージが表示されます。
372
+
373
+ ## 管理画面
374
+
375
+ プロキシ起動中は `http://localhost:4301` で管理画面を開けます。
376
+
377
+ できること:
378
+
379
+ - `Client Origin` と `API Origin` の変更
380
+ - `API Cookie` の項目別編集
381
+ - API 通信履歴の確認
382
+ - 履歴からスタブを作成
383
+ - 履歴から JSON Override を作成
384
+ - スタブの追加、編集、コピー、削除、並び替え、インポート、エクスポート
385
+ - JSON Override の追加、編集、コピー、削除、並び替え、インポート、エクスポート
386
+ - スタブと JSON Override の名前、Method、Path Pattern フィルタ
387
+ - プロキシ経由のアプリを別タブで開く
388
+ - API origin 側のサーバアプリを別タブで開く
389
+
390
+ 管理画面で変更した値は実行中のプロキシプロセスにだけ反映されます。設定ファイルには書き戻しません。
391
+
392
+ 管理画面にメンバー向けの注意文言を表示したい場合は `adminNotice` を設定します。
393
+
394
+ ```json
395
+ {
396
+ "adminNotice": "テスト期間中のため、更新リクエストは禁止です。"
397
+ }
398
+ ```
399
+
400
+ 改行もそのまま表示されます。
401
+
402
+ ## 通信履歴
403
+
404
+ 履歴タブでは API server との通信を確認できます。
405
+
406
+ - 新しい履歴ほど上に表示
407
+ - ステータス系統で色分け
408
+ - ステータスフィルタ
409
+ - パスの正規表現フィルタ
410
+ - レスポンスヘッダーとレスポンス Body の確認
411
+ - JSON Body の整形表示
412
+ - レスポンス Body のコピー
413
+ - 展開時のStub/JSON Override適用情報の確認
414
+ - 履歴からスタブまたは JSON Override を追加
415
+
416
+ 履歴件数は `historyLimit` で制限できます。画面表示しない古い履歴は切り捨てます。
417
+
418
+ ```json
419
+ {
420
+ "historyLimit": 200,
421
+ "maxHistoryBodyBytes": 524288
422
+ }
423
+ ```
424
+
425
+ レスポンス Body が `maxHistoryBodyBytes` を超えた場合、履歴には新しい側の一部だけを保存します。画面上にはサイズ上限で切り捨てられたことを表示します。
426
+
427
+ ## スタブ
428
+
429
+ スタブは、条件に一致した API リクエストへ固定レスポンスを返す機能です。複数マッチした場合は、上にあるスタブが優先されます。
430
+
431
+ 主な条件:
432
+
433
+ - `method`
434
+ - `pathPattern`
435
+ - `queryParams`
436
+ - `requestBody`
437
+
438
+ `pathPattern` は query string より前のパス部分に対して判定します。query string や POST Body などの一部項目だけを条件にしたい場合は `queryParams` と `requestBody` を使います。値は正規表現として判定されます。
439
+
440
+ ```json
441
+ {
442
+ "method": "POST",
443
+ "pathPattern": "^/api/users$",
444
+ "queryParams": {
445
+ "role": "^admin$"
446
+ },
447
+ "requestBody": {
448
+ "status": "^(active|pending)$"
449
+ }
450
+ }
451
+ ```
452
+
453
+ スタブは管理画面で作成、編集、コピー、削除、並び替えできます。全体トグルと行単位トグルがあります。全体トグルが OFF の場合、行単位トグルが ON でもスタブは適用されません。
454
+
455
+ 起動時に `startupStubImportDir` 配下の JSON ファイルをすべて読み込みます。
456
+
457
+ ```json
458
+ {
459
+ "startupStubImportDir": "cookie-auth-proxy/stubs"
460
+ }
461
+ ```
462
+
463
+ エクスポートしたスタブ JSON はチーム共有用にコミットできます。レスポンス Body が JSON の場合、エクスポートファイルでは文字列ではなく JSON 値として出力します。既存のローカルレスポンス JSON 資産からコピーしやすい形式です。
464
+
465
+ ## JSON Override
466
+
467
+ JSON Override は、API server から返ってきた JSON レスポンスの一部プロパティを上書きまたは追加する機能です。スタブと違い、API server への通信は実行されます。
468
+
469
+ 用途例:
470
+
471
+ - ユーザー属性だけ切り替える
472
+ - 権限フラグだけ変更する
473
+ - レスポンス全体は実 API を使い、一部だけテスト値にする
474
+
475
+ 条件はスタブと同じく、`method`、`pathPattern`、`queryParams`、`requestBody` を使えます。複数マッチした場合は、上にある Override から順に適用されます。
476
+
477
+ Override JSON に書いたプロパティは、同じプロパティがあれば上書きし、なければ追加します。
478
+
479
+ ```json
480
+ {
481
+ "role": "admin",
482
+ "featureFlags": {
483
+ "newDashboard": true
484
+ }
485
+ }
486
+ ```
487
+
488
+ JSON Override も管理画面で追加、編集、コピー、削除、並び替え、インポート、エクスポートできます。全体トグルが OFF の場合、行単位トグルが ON でも適用されません。
489
+
490
+ 起動時に `startupOverrideImportDir` 配下の JSON ファイルをすべて読み込みます。
491
+
492
+ ```json
493
+ {
494
+ "startupOverrideImportDir": "cookie-auth-proxy/overrides"
495
+ }
496
+ ```
497
+
498
+ ## レスポンス書き換え
499
+
500
+ API へ送るリクエストでは、`Host` と `Origin` を API origin に合わせます。
501
+
502
+ API から返ってきたレスポンスでは、ローカルプロキシで扱いやすいように次の値を書き換えます。
503
+
504
+ - `Set-Cookie` の `Domain`
505
+ - HTTP ローカル実行時の `Secure`
506
+ - HTTP ローカル実行時の `SameSite=None`
507
+ - `Location`
508
+ - `Content-Location`
509
+ - `Refresh`
510
+ - テキスト系レスポンス Body 内の API origin
511
+
512
+ 外部認証サービスなど、`Location` を API origin から localhost へ通常書き換えしたくないパスでは `preserveLocationHeaderPatterns` を使います。
513
+
514
+ ```json
515
+ {
516
+ "preserveLocationHeaderPatterns": [
517
+ "^/auth(?:/|$)"
518
+ ]
519
+ }
520
+ ```
521
+
522
+ さらに、そのまま維持した `Location` ヘッダ内のクエリパラメータだけを書き換えたい場合は `locationHeaderQueryOverrides` を使います。認証ミドルウェアやアプリ実装によって必要なパラメータ名は変わるため、プロジェクト側の仕様に合わせて設定してください。
523
+
524
+ ```json
525
+ {
526
+ "preserveLocationHeaderPatterns": [
527
+ "^/auth(?:/|$)"
528
+ ],
529
+ "locationHeaderQueryOverrides": [
530
+ {
531
+ "pathPattern": "^/auth(?:/|$)",
532
+ "locationPattern": "^https://login\\.invalid/",
533
+ "queryParams": {
534
+ "redirect_uri": "{publicOrigin}/auth/callback"
535
+ }
536
+ }
537
+ ]
538
+ }
539
+ ```
540
+
541
+ 使えるテンプレート変数は `{publicOrigin}`、`{apiOrigin}`、`{clientOrigin}` です。
542
+
543
+ ## Open Server App
544
+
545
+ 管理画面の `Open Server App` ボタンは、現在の `API Origin` と `serverAppPath` を組み合わせて別タブで開きます。
546
+
547
+ ```json
548
+ {
549
+ "serverAppPath": "/dashboard"
550
+ }
551
+ ```
552
+
553
+ `serverAppPath` は CLI や環境変数でも上書きできます。
554
+
555
+ ```console
556
+ cookie-auth-proxy --server-app-path /dashboard
557
+ ```
558
+
559
+ ## VSCode
560
+
561
+ VSCode の task や launch から起動する場合は、client app のプロジェクトルートに `.vscode/tasks.json` と `.vscode/launch.json` を置く構成を想定しています。
562
+
563
+ npm package として導入している場合、プロキシ起動 task は次のような形にできます。
564
+
565
+ ```json
566
+ {
567
+ "label": "cookie-auth-proxy: start",
568
+ "type": "npm",
569
+ "script": "cookie-auth-proxy",
570
+ "isBackground": true,
571
+ "problemMatcher": []
572
+ }
573
+ ```
574
+
575
+ Chrome デバッグ構成では `url` を管理画面にしておくと、起動後に `Open App` からプロキシ経由のアプリを開けます。
576
+
577
+ ```json
578
+ {
579
+ "name": "Debug Cookie Auth Proxy Admin",
580
+ "type": "chrome",
581
+ "request": "launch",
582
+ "url": "http://localhost:4301",
583
+ "webRoot": "${workspaceFolder}",
584
+ "preLaunchTask": "cookie-auth-proxy: start"
585
+ }
586
+ ```
587
+
588
+ client app 側のブレークポイントを使う場合は、client dev server の起動 task と組み合わせてください。
589
+
590
+ ## セキュリティメモ
591
+
592
+ このツールはローカル開発用です。公開サーバとして使うことは想定していません。
593
+
594
+ おすすめ:
595
+
596
+ - `adminHost` と `listenHost` は基本的に `localhost` のまま使う
597
+ - 管理APIはCORSを許可しない。ブラウザのcross-site管理リクエストも拒否する
598
+ - 管理APIは起動プロセスごとのCSRFトークンを要求する
599
+ - API向けリクエストも、ブラウザのcross-siteリクエストらしいものは拒否する
600
+ - 実 API Cookie を設定ファイルや共有リポジトリにコミットしない
601
+ - 履歴表示や履歴からのStub作成では、認証系ヘッダをマスクまたは除外する
602
+ - `apiOriginAllowedPatterns` で誤接続先を制限する
603
+ - テスト期間中の注意事項は `adminNotice` に表示する
604
+ - スタブと Override は更新系 API を誤って実行しないための退避策としても使う
605
+ - サンプルの origin には `.invalid` など実在しない予約用途の値を使う
606
+ - スタブ、Override、設定ファイル内の正規表現は信頼できるものだけ使う
607
+
608
+ Cookie のセッション期限が短い場合でも、Cookie 自体は認証情報です。取り扱いはアクセストークンに近いものとして考えてください。
609
+
610
+ 履歴詳細では `sensitiveHeaderNames` に一致するヘッダ値を `***` として表示します。履歴からStubを作る場合、同じヘッダはStubレスポンスヘッダから除外します。必要に応じてプロジェクト固有のヘッダ名を追加してください。
611
+
612
+ ```json
613
+ {
614
+ "sensitiveHeaderNames": [
615
+ "authorization",
616
+ "cookie",
617
+ "set-cookie",
618
+ "x-api-key"
619
+ ],
620
+ "sensitiveCookieNames": [
621
+ "sessionId"
622
+ ]
623
+ }
624
+ ```
625
+
626
+ 正規表現には、明らかに危険なネスト量指定子やバックリファレンスを拒否する軽量ガードを入れています。ただし完全な ReDoS 防止ではありません。チーム共有の import ファイルはコードと同じようにレビューしてください。
627
+
628
+ 管理APIにはメモリ保護用のBody上限があります。APIリクエストBodyは `Content-Length` が無い場合、または `maxRequestBodyInspectionBytes` を超える場合、Stub/Override条件判定用のBody解析だけをスキップし、リクエスト自体はAPIへ転送します。
629
+
630
+ レスポンスBodyのOrigin書き換えとJSON Overrideは `maxResponseBodyRewriteBytes` 以下の場合だけ実行します。上限を超えた場合、ヘッダ書き換えは維持しつつBodyは未加工のままストリーミングします。履歴には `body passthrough` や `override skipped` として表示します。
631
+
632
+ 履歴に保存するレスポンスBodyにも表示用の上限があります。必要に応じて `maxAdminBodyBytes`、`maxRequestBodyInspectionBytes`、`maxResponseBodyRewriteBytes`、`maxHistoryBodyBytes` を調整してください。
633
+
634
+ ## 開発メモ / Development Note
635
+
636
+ このプロジェクトは AI コーディング支援ツールを利用して開発されています。変更内容はメンテナが確認し、保守します。
637
+
638
+ This project is developed with assistance from AI coding tools. Changes are reviewed and maintained by the project maintainer.
639
+
640
+ ## License
641
+
642
+ MIT
package/SECURITY.md ADDED
@@ -0,0 +1,9 @@
1
+ # Security Policy
2
+
3
+ This project is a local development helper for cookie-authenticated web apps.
4
+
5
+ Please do not open a public issue with exploit details for a suspected security vulnerability. If private vulnerability reporting is enabled on GitHub, use that channel. If it is not available, open a public issue with a minimal description and ask for a private contact channel.
6
+
7
+ Do not include real cookies, access tokens, session IDs, recovery codes, or other secrets in issues, pull requests, examples, logs, or screenshots.
8
+
9
+ Security updates are handled on a best-effort basis.