/**
* 相関IDの発行(`proxy.ts` から★最初に★呼ぶ)。
*
* ★認証より先に走らせること★(`docs/logging-design.md` §9 の申し送り)。
* IP拒否・認証失敗で弾いたリクエストのログにも相関IDが付くようにするため。
* 順序を逆にすると、いちばん追跡したい「弾かれたリクエスト」だけ ID が欠ける。
*
* ★`proxy.ts` は別バンドルになりうるので、重いモジュールを import しないこと★。
* ここが読むのは `lib/logger/context.ts`(`node:async_hooks` だけに依存する軽い
* モジュール)のヘッダ名定数のみで、pino には触れない。
*/
import { REQUEST_ID_HEADER } from "@/lib/logger/context";
export { REQUEST_ID_HEADER };
/**
* 相関IDを発行して後段へ渡すリクエストヘッダを組み立てる。
*
* ★クライアントが送ってきた `x-request-id` は信頼せず、常に上書き生成する★
* (`docs/logging-design.md` §7)。外から与えられた ID を通すと、
* 別リクエストのログに同じ ID を混ぜ込まれて相関が壊せる。
*
* `lib/logger/context.ts` の `withRequestId()` は「ヘッダがあればそれを使う」作りだが、
* ここで必ず上書きするので、ルート側は常に proxy が発行した ID を受け取る。
* ★`withRequestId()` は変更不要★(そのまま動く)。
*/
export function issueRequestHeaders(source: Headers): {
requestId: string;
headers: Headers;
} {
const requestId = crypto.randomUUID();
const headers = new Headers(source);
headers.set(REQUEST_ID_HEADER, requestId);
return { requestId, headers };
}