Jobs & file d'attente
Déclarez des jobs typés (nom → payload + handler), puis dispatch("nom", payload) depuis n'importe où. Un worker appelle process(envelope) : routage vers le bon handler, avec ré-essais automatiques en cas d'échec. Ici, trois jobs sont dispatchés puis traités — « charge-card » échoue une fois puis réussit.
Astuce
En production, passez appId et les jobs sont poussés sur la file SDK ; un task worker Bun appelle jobs.process(). Ici un dispatcher en mémoire dispatch ET traite dans la même requête, pour une démo autonome. maxAttempts contrôle les ré-essais (par défaut 1).
Dispatchez les jobs pour voir la file les traiter.
import { createJobs } from "@bext-stack/framework/jobs";
const jobs = createJobs({
appId: "my-site", // dispatches to the bext SDK queue
jobs: {
sendInvoice: { handler: async (p: { orderId: string }) => { /* … */ } },
chargeCard: { maxAttempts: 3, handler: async (p) => { /* may throw → retried */ } },
},
});
// enqueue from a render / action (typed payload):
await jobs.dispatch("sendInvoice", { orderId: "o1" });
// in a task worker, for each pulled envelope:
const result = await jobs.process(envelope); // routes + retries on failure