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.

src/app/examples/jobs/page.tsxTSX
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