/** * Surcharge production : uniquement la politique CSP (les médias sont servis * par un domaine externe). Le reste de la pile reprend `config/middlewares.ts` * à l'identique — y compris `includeUnparsed`, indispensable au webhook * Stripe, que la fusion d'environnement écraserait si on laissait ici un * simple `"strapi::body"`. */ const mediaHost = process.env.R2_PUBLIC_URL ? new URL(process.env.R2_PUBLIC_URL).host : "container.choralsync.com"; const mediaSources = ["'self'", "data:", "blob:", "market-assets.strapi.io", mediaHost]; export default [ "strapi::logger", "strapi::errors", { name: "strapi::security", config: { contentSecurityPolicy: { useDefaults: true, directives: { "connect-src": ["'self'", "https:"], "img-src": mediaSources, "media-src": mediaSources, upgradeInsecureRequests: null, }, }, }, }, "strapi::cors", "strapi::poweredBy", "strapi::query", { name: "strapi::body", config: { includeUnparsed: true, // INDISPENSABLE pour les webhooks }, }, "strapi::session", "strapi::favicon", "strapi::public", ];