@emergence/jobs (0.2.0)
Installation
@emergence:registry=npm install @emergence/jobs@0.2.0"@emergence/jobs": "0.2.0"About this package
@emergence/jobs
Le client du service Automation de Synvectis : soumettre un travail différé, et vérifier le rappel par lequel le service vous demande de l'exécuter.
Pourquoi ce paquet est compilé
⚠ IL ROMPT AVEC LA CONVENTION DES AUTRES @emergence/*, ET C'EST DÉLIBÉRÉ.
@emergence/theme, ui-core et auth publient du TypeScript brut : ils
sont consommés par des applications Next, dont le transpilePackages les
compile à la volée. Celui-ci est consommé par des backends — Express en
TypeScript pour Index, CommonJS pour Nexus — où aucun transpileur n'intervient.
Publier du .ts le rendrait inutilisable par ses deux premiers clients.
Il publie donc du JavaScript, en ESM et en CJS, avec ses déclarations de
types. Il n'a aucune dépendance : fetch et node:crypto suffisent.
Soumettre
import { ClientAutomation } from '@emergence/jobs'
const jobs = new ClientAutomation({
url: process.env.AUTOMATION_URL!, // http://automation-api:3009
cle: process.env.AUTOMATION_KEY!, // la clé de VOTRE application
})
await jobs.soumettre({
type: 'index.cr.deposer', // ⚠ préfixé par le code de votre application
sujet: { tenant: orgId, actor: externalId, scope: projetId },
charge: { reunionId }, // ⚠ une référence, jamais un contenu ni un secret
cleUnicite: `cr:${reunionId}`, // tant qu'un travail de même clé est actif, on le rejoint
})
⚠ UN ÉCHEC DE SOUMISSION NE DOIT PAS FAIRE ÉCHOUER VOTRE GESTE MÉTIER. Le
client lève une ErreurAutomation portant le statut ; à vous de décider. Le
plus souvent, on journalise et on continue : diffuser un compte rendu n'a pas à
dépendre d'un service tiers.
Recevoir le rappel
import { rappelAuthentique, EN_TETE_SIGNATURE } from '@emergence/jobs'
// ⚠ SUR LE CORPS BRUT, AVANT TOUTE ANALYSE JSON. Re-sérialiser un objet ne
// redonne pas les mêmes octets — l'ordre des clés et les espaces changent.
app.post('/api/travaux', express.raw({ type: 'application/json' }), (req, res) => {
if (!rappelAuthentique(process.env.AUTOMATION_KEY!, req.body.toString(), req.get(EN_TETE_SIGNATURE))) {
return res.status(401).json({ error: 'signature invalide' })
}
const rappel = JSON.parse(req.body.toString())
// `Idempotency-Key` est stable d'une tentative à l'autre : reconnaissez un
// rejeu plutôt que d'agir deux fois.
})
Le code de réponse dit au service quoi faire :
| Vous répondez | Le service comprend |
|---|---|
2xx |
c'est fait |
4xx (sauf 408 et 429) |
ça ne marchera pas mieux plus tard — il n'insiste pas |
408, 429, 5xx, silence |
c'est passager — il rejoue, avec un recul croissant |
Publier
Version incrémentée à chaque fois (Gitea refuse d'écraser), jeton dans
~/.npmrc et jamais en variable d'environnement :
cd packages/jobs && npm publish
Dependencies
Development Dependencies
| ID | Version |
|---|---|
| @types/node | ^24.0.0 |
| typescript | ^5.8.3 |