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. }