• Joined on 2026-08-12

@emergence/jobs (0.3.0)

Published 2026-09-05 20:55:31 +02:00 by neigel

Installation

@emergence:registry=
npm install @emergence/jobs@0.3.0
"@emergence/jobs": "0.3.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
Details
npm
2026-09-05 20:55:31 +02:00
1
UNLICENSED
latest
7.8 KiB
Assets (1)
jobs-0.3.0.tgz 7.8 KiB
Versions (3) View all
0.3.0 2026-09-05
0.2.0 2026-09-05
0.1.0 2026-09-01