fokan/vitest.config.ts
Gautier Stefanini cc54bc7ef3 L'outbox se taisait pour tout le foyer dès qu'un seul membre avait reçu
Audit de bout en bout du service mail (docs/audit-mail-2026-07-30.md) :
quatorze défauts relevés, dix corrigés ici. Trois changent le dessin de
D-013 plutôt que de réparer un écart, d'où D-039.

Le plus coûteux : la boucle d'envoi marquait « envoyé » dès qu'un membre
avait été servi. Sur un foyer à deux, la première adresse passe, la
seconde rebondit, la porte d'idempotence se referme — et le second membre
ne reçoit jamais ce rappel, ni le lendemain ni jamais. La clé de l'outbox
porte désormais le destinataire, et c'est le user_id qui est stocké,
jamais l'adresse.

Le plus discret : `metadata` de /sign-in/magic-link est un champ public
du corps de la requête. Sans compte ni session, un appel forgé faisait
partir depuis un domaine aligné SPF/DKIM/DMARC un « ton foyer est activé,
le paiement est passé ». Un sceau dérivé de BETTER_AUTH_SECRET distingue
l'appel interne ; tout écart retombe sur « connexion », le seul contexte
qui n'affirme rien.

Et une avance de rappel de 21 jours sur une fenêtre CatNat de 30 jours
consommait 30 % du délai légal tous les jours sans que rien ne le signale.

Aucun gabarit mail n'avait jamais pu être testé : vitest n'a pas le relais
JSX de Next, tout rendu échouait sur « React is not defined ».

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 12:02:56 +00:00

11 lines
509 B
TypeScript

import { defineConfig } from "vitest/config";
import path from "node:path";
export default defineConfig({
test: { environment: "node" },
// `tsconfig.json` laisse `jsx: "preserve"` — c'est Next.js qui transforme en production. Vitest
// n'a pas ce relais : sans cette ligne, esbuild retombe sur la transformation classique et tout
// rendu de gabarit mail échoue sur « React is not defined ».
esbuild: { jsx: "automatic" },
resolve: { alias: { "@": path.resolve(__dirname, "./src") } },
});