Newer
Older
client_dwatch / lib / auth / cookie.ts
/**
 * `dwatch_session` cookie の属性(D-072 / 指示書I 段階3-1)。
 *
 * ★1箇所に閉じ込めること★ — 発行(login)と削除(logout)と判定(proxy)で
 * 名前や属性がズレると、消したつもりの cookie が残るなどの事故になる。
 */

/**
 * cookie 名。★`lib/logger/redact.ts` のマスキング対象と同じ文字列であること★
 * (`lib/proxy/authenticate.ts` の `SESSION_COOKIE_NAME` もこれを再輸出している)
 */
export const SESSION_COOKIE_NAME = "dwatch_session";

/**
 * 発行時の属性。
 *
 * | 項目 | 値 | 理由 |
 * |---|---|---|
 * | `httpOnly` | true | クライアントの JS から読めなくする |
 * | `secure` | true | ブラウザ〜LB 間は HTTPS。アプリが HTTP で応答してもブラウザは受け入れる |
 * | `sameSite` | lax | D-072 |
 * | `path` | / | 全ルートで送られるように |
 *
 * ★`expires` / `maxAge` を付けないこと★
 *   `CLAUDE.md` §7「トークン期限/残日数の実装」は**禁止**。
 *   公式例には載っているが、ここでは入れない(= セッション cookie になる)。
 */
export const SESSION_COOKIE_OPTIONS = {
  httpOnly: true,
  secure: true,
  sameSite: "lax",
  path: "/",
} as const;