veilletech.fr
11 sept. Feed du jour
#05 PAYLOAD Article

Payload 3.89 : la collection des jobs se ferme

Une version mineure, une rupture : cherchez payload-jobs.

Payload 3.89.0, publiée le 10 septembre, backporte de v4 une rupture : l'accès CRUD générique à la collection interne payload-jobs est refusé par défaut en REST, GraphQL et Local API avec overrideAccess: false. La même version cesse de charger en mémoire les fichiers issus des client uploads, et signale les identifiants Postgres tronqués à 63 caractères.

2 min de lectureintermédiairevidéo 1:22
Partager
Sommaire3 sections
  1. Ce qui se passe
  2. Deux correctifs qui comptent
  3. À retenir

Ce qui se passe

Payload 3.89.0 est sortie le 10 septembre. Version mineure, mais les notes portent une section Breaking changes : la collection interne payload-jobs, où vit la file des tâches, refuse désormais par défaut tout accès CRUD générique (#17867, backport du #17768 déjà appliqué en v4).

Sont refusés : les requêtes REST et GraphQL sur payload-jobs, et les appels de la Local API avec overrideAccess: false. Les opérations dédiées payload.jobs.queue(), payload.jobs.run() et payload.jobs.cancel() ne changent pas, ni les appels Local API qui laissent l'override actif. Un projet qui inspecte ou administre les jobs par CRUD brut, ou qui rend la collection visible dans l'admin, doit déclarer ses règles via jobsCollectionOverrides, de préférence en lecture seule pour des administrateurs : un document de job peut contenir des données sensibles.

payload.config.tsTypeScript
jobs: {
  jobsCollectionOverrides: ({ defaultJobsCollection }) => ({
    ...defaultJobsCollection,
    access: {
      ...defaultJobsCollection.access,
      read: ({ req }) => Boolean(req.user?.roles?.includes('admin')),
    },
  }),
},

Deux correctifs qui comptent

Client uploads (#17872). Le navigateur envoie le fichier directement au stockage, mais le serveur le relisait ensuite en entier dans un seul buffer mémoire, sans limite, ne serait-ce que pour lire les dimensions d'une image. Depuis que l'adaptateur Azure accepte des fichiers de plus de 5 Go, un seul envoi pouvait dépasser la mémoire du serveur. Le serveur décide maintenant de ce qu'il lui faut : rien si les métadonnées client suffisent, une plage d'octets pour les dimensions, ou le fichier entier diffusé vers un fichier temporaire sur disque. Au passage : les collections sans disableLocalStorage explicite pouvaient prendre le chemin réduit et enregistrer un fichier tronqué, et un clone de requête cassait le signal d'annulation lu par les adaptateurs S3 et Azure.

Identifiants Postgres (#17650). Postgres tronque tout identifiant au-delà de 63 caractères. Payload concatène les chemins de champs imbriqués pour nommer colonnes, index et clés étrangères, d'où des noms qui dépassaient et un schéma désynchronisé, avec un push en dev bloqué sur la question « created or renamed ? ». Désormais : avertissement en dev quand un identifiant dépasse, erreur au démarrage quand deux identifiants se tronquent au même nom.

À retenir

Next passe en 16.3.3 dans le cœur et les templates, Banner gagne un type warning, et l'adaptateur Resend ne masque plus les erreurs de fetch. Avant de monter de version : chercher payload-jobs dans le code et dans les appels REST du front.

Source : Payload CMS v3.89.0