DOUBLE SLASH

Présentation de Workflow SDK, la librairie Vercel pour orchestrer simplement des tâches asynchrones en JavaScript/TypeScript, avec retries, pauses, webhooks, actions humaines et observabilité, en partageant son retour d’expérience et des cas concrets.

Workflow SDK : orchestrer simplement sans réinventer les queues

Comment enchaîner des étapes métier fiables : retry, pause, webhook, reprise après erreur. Sans monter une usine Kafka/Redis à la main ?

Dans cet épisode, Alex partage son retour d’expérience sur Workflow (initié par Vercel, utilisable hors Vercel) : séquençage de tâches avec "useWorkflow" / "useStep", sleeps en langage humain, observabilité, et le World qui abstrait runtime, queues et persistance. via Self-host ou le dashboard Vercel, des cas concrets (autorépondeurs, paniers abandonnés, agents).

Workflow SDK

Workflow SDK permet de transformer de simples fonctions TypeScript en processus fiables capables de durer dans le temps. Il gère automatiquement les interruptions, les reprises, les nouvelles tentatives en cas d’erreur, la conservation de l’état et le suivi de chaque étape. Cela facilite notamment la création d’automatisations, de traitements asynchrones et d’agents IA, sans avoir à mettre en place soi-même des files d’attente ou une infrastructure complexe.

Code exemple

On ajoute "use workflow" dans une fonction async

import { sleep } from "workflow";
export async function handleUserSignup(email: string) {
  "use workflow";
  const user = await createUser(email);
  await sendWelcomeEmail(user);
  await sleep("5s"); // Pause for 5s - doesn't consume any resources
  await sendOnboardingEmail(user);
  return { userId: user.id, status: "onboarded" };
}

Dans les fonctions qui font partie du workflow, on ajoute « use step » pour les rendre gérables par le workflow.

import { FatalError } from "workflow"
// Our workflow function defined earlier
async function createUser(email: string) {
  "use step";
  console.log(`Creating user with email: ${email}`);
  // Full Node.js access - database calls, APIs, etc.
  return { id: crypto.randomUUID(), email };
}
async function sendWelcomeEmail(user: { id: string; email: string; }) {
  "use step";
  console.log(`Sending welcome email to user: ${user.id}`);
  if (Math.random() < 0.3) {
  // By default, steps will be retried for unhandled errors
   throw new Error("Retryable!");
  }
}
async function sendOnboardingEmail(user: { id: string; email: string}) {
  "use step";
  if (!user.email.includes("@")) {
    // To skip retrying, throw a FatalError instead
    throw new FatalError("Invalid Email");
  }
  console.log(`Sending onboarding email to user: ${user.id}`);
}

Bonne écoute !

70% vers l'objectif de 70$ par mois

L'ensemble des charges seront couvertes. Service de stockage et abonnement aux services utilisés.

Abonnez-vous sur votre plateforme de podcast préférée