meta {
  name: Auth
  seq: 1
}

docs {
  ## Auth — public (pas d'auth Bearer requise sur signup/login/refresh)

  Pattern hybride :
  - **Access token** : Bearer 30min, transporté en header `Authorization`,
    stocké en mémoire SPA.
  - **Refresh token** : 30 jours, cookie httpOnly `rubis_refresh` scope
    `path=/api/v1/auth`, sameSite strict. Rotation à chaque refresh.

  Endpoints :
  - **01 Signup** — crée org + 4 plans pré-fournis + user dans une tx,
    émet AuthSession (token JSON + cookie).
  - **02 Login** — émet AuthSession.
  - **03 Logout** — révoque l'access token + le refresh + clear le cookie.
  - **04 Refresh** — échange le cookie contre une AuthSession fraîche
    (rotation). Le SPA l'appelle au boot et après chaque 401.

  La réponse `AuthSession` est : `{ data: { accessToken, expiresAt, user } }`.

  Le script post-réponse capture `token`, `userId`, `organizationId`
  dans l'env Bruno actif. Le cookie refresh est géré automatiquement
  par la cookie jar de Bruno.
}
