feat(auth): aumenta sessão web pra 12h (pedido do usuário: call center, agente não pode cair no meio do turno)

Access token JWT (packages/auth/src/tokens.ts) e o teto absoluto do cookie
de sessão (duplicado em login/post-login/select-tenant/middleware) subiram
de 15min/8h pra 12h. O refresh silencioso do middleware continua existindo
e deslizando a sessão pra frente a cada requisição — 12h agora é só o teto
de segurança pra quando esse refresh falhar (aba parada, logout em outro
lugar), não o intervalo real de renovação.

Verificado com login real: token decodificado mostra exp-iat = 12h exatas.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BFaBaBSQGhyXGEgtTYZGV8
This commit is contained in:
2026-08-31 12:48:33 -03:00
parent 2134fa0aa4
commit 5c23b105b3
6 changed files with 17 additions and 7 deletions

View File

@@ -29,7 +29,12 @@ export async function POST(request: Request) {
sameSite: "lax",
secure: process.env.NODE_ENV === "production",
path: "/",
maxAge: 60 * 60 * 8,
// Call center: turno de agente pode passar de 8h — 12h é o teto
// absoluto do cookie mesmo com o refresh silencioso do middleware
// deslizando ele pra frente a cada requisição (o mesmo valor está
// duplicado em post-login/route.ts, select-tenant/actions.ts e
// middleware.ts — os 4 precisam ficar em sincronia).
maxAge: 60 * 60 * 12,
});
return response;
}

View File

@@ -46,7 +46,7 @@ export async function POST() {
sameSite: "lax",
secure: process.env.NODE_ENV === "production",
path: "/",
maxAge: 60 * 60 * 8,
maxAge: 60 * 60 * 12,
});
return response;
}

View File

@@ -26,7 +26,7 @@ export async function chooseTenant(tenantId: string): Promise<{ error: string }
sameSite: "lax",
secure: process.env.NODE_ENV === "production",
path: "/",
maxAge: 60 * 60 * 8,
maxAge: 60 * 60 * 12,
});
redirect("/app");

View File

@@ -68,7 +68,7 @@ export async function middleware(request: NextRequest) {
sameSite: "lax",
secure: process.env.NODE_ENV === "production",
path: "/",
maxAge: 60 * 60 * 8,
maxAge: 60 * 60 * 12,
});
return response;
} catch {