/** * Configuration des plugins — source de vérité unique, tous environnements. * * ⚠️ Il n'existe volontairement PAS de `config/env/production/plugins.ts` : * Strapi fusionne les surcharges d'environnement en profondeur, et cette * fusion avait produit une configuration hybride (endpoint R2 de ce fichier + * identifiants MinIO de la surcharge, lus en priorité par le provider via * `s3Options.credentials`). Tous les uploads échouaient depuis mai 2026 sur * « Credential access key has length 5, should be 32 ». Toute différence * entre environnements passe désormais par les variables d'environnement. */ export default ({ env }) => ({ email: { config: { provider: "nodemailer", providerOptions: { host: env("SMTP_HOST", "smtp.zeptomail.eu"), port: env.int("SMTP_PORT", 587), auth: { user: env("SMTP_USERNAME", "emailapikey"), pass: env("SMTP_PASSWORD"), }, debug: env.bool("SMTP_DEBUG", false), logger: env.bool("SMTP_DEBUG", false), }, settings: { defaultFrom: env( "SMTP_DEFAULT_FROM", "ChoralSync ", ), defaultReplyTo: env("SMTP_DEFAULT_REPLY_TO", "contact@choralsync.com"), }, }, }, upload: { config: { provider: "aws-s3", providerOptions: { // URL publique servant les médias (domaine personnalisé du bucket). baseUrl: env("R2_PUBLIC_URL"), // Le provider 5.x attend les options S3 sous `s3Options` ; à plat, // elles ne sont acceptées qu'au prix d'un avertissement de dépréciation // — et une surcharge partielle produit une config incohérente. s3Options: { credentials: { accessKeyId: env("R2_ACCESS_KEY_ID"), secretAccessKey: env("R2_SECRET_ACCESS_KEY"), }, endpoint: env("R2_ENDPOINT"), region: env("R2_REGION", "auto"), forcePathStyle: true, params: { Bucket: env("R2_BUCKET"), }, }, }, }, }, "strapi-v5-plugin-populate-deep": { config: { defaultDepth: 3, skipCreatorFields: false, }, }, });