import { createCsrfMiddleware, createStart } from "@tanstack/react-start" // Sous-chemin `/server` : il porte `ioredis`, à tenir hors du graphe navigateur. import { createCacheControlMiddleware, createHtmlCacheMiddleware, } from "@wp-reactor/headless-core/server" import { htmlCacheStore } from "@/server/htmlCache" // Définir un startInstance REMPLACE le defaultCsrfMiddleware injecté par le // framework. On le ré-ajoute, sinon les serverFns ne sont plus protégés cross-site. // Réf : .reference/namaki/apps/webapp/src/start.ts const csrfMiddleware = createCsrfMiddleware({ filter: (ctx) => ctx.handlerType === "serverFn", }) // Edge-cache du HTML SSR — factory du kernel, paramétrée par l'env de la coque. const cacheControlMiddleware = createCacheControlMiddleware({ sharedMaxAge: Number(process.env.HTML_EDGE_MAX_AGE ?? 600), staleWhileRevalidate: Number(process.env.HTML_EDGE_SWR ?? 86_400), }) // Dernier de la chaîne : sur un HIT Redis il n'y a plus de rendu SSR, mais les // en-têtes de cache des middlewares extérieurs s'appliquent quand même à la // réponse servie depuis le cache. C'est lui aussi qui sert le HTML périmé quand // le rendu échoue (WordPress qui redémarre) — sans CDN devant, c'est le seul // filet contre une 502. const htmlCacheMiddleware = createHtmlCacheMiddleware({ store: htmlCacheStore }) export const startInstance = createStart(() => ({ requestMiddleware: [ csrfMiddleware, cacheControlMiddleware, htmlCacheMiddleware, ], }))