Construindo uma biblioteca que facilita de criação de workflows
Contexto
Estamos vendo uma tendencia em workflows dentro de SaaS, poderia citar como Stripe Workflows. Imagino que isso se deve a soluções como o n8n e Zapier. Como um criador de SaaS, precisei implementar algo parecido, não consegui achar nenhuma biblioteca viabiliza a criação de workflows de forma simples, foi aí que tive uma ideia de criar essa biblioteca.
o Sig
O sig, tem como objetivo principal facilitar o máximo possível a criação de workflows, com retries, delays, criações de nós, que irá funcionar tanto em serverless e serverful. Aqui está um exemplo:
import { WorkflowEngine, databaseAdapter, WorkflowDefinition } from '@sigworkflow/sig';
import { postgres } from '@sigworkflow/postgres-adapter';
import { bullmq } from '@sigworkflow/bullmq-adapter';
const engine = new WorkflowEngine({
db: databaseAdapter(postgres(pool)),
mq: mqAdapter(bullmq(connection)),
nodes: [new AI(), new Approval(), new IfNode(), new Blog()]
});
// create new workflow
const workflow = await engine.spawn(
new WorkflowDefinition("blog-workflow")
.step("create-blog-post", {
name: "Create Blog Post",
execute: new AI().execute({ model: "claude-sonnet-4-5", input: "write a blog post about AI" })
})
.step("approve-blog-post", {
name: "Wait for Approval",
execute: new Approval().execute({ approver: "manager" })
})
.step("publish-blog-post", {
name: "Publish Blog Post",
execute: new IfNode().execute({
field: "$approve-blog-post.approved",
condition: "equals",
value: true,
then: "post-blog",
else: "reject-blog"
})
})
.step("post-blog", {
name: "Post Blog",
execute: new Blog().execute({
create: {
title: "$create-blog-post.title", content: "$create-blog-post.content"
}
})
})
);
// create execution
const execution = await workflow.spawn({
userId: "user-123",
});
await execution.start();
Criação de Nós
export class BlogPost<V extends BasicTypes> extends Node<
BlogPostParams<V>,
BlogPostOutput
> {
async run() {
const blogSlug = this.evaluate(this.params.blogSlug);
const createdBlog = blog.post({ ... })
return this.next({ blogId: createdBlog.id });
}
}
Não se confunda!
Sig não é como o Vercel Workflow ou UpStash Workflow, por mais que são muito parecidos, o Sig permite criações de workflows dinâmicos em runtime!
Notas finais
Bem, o Sig está longe de ter o seu primeiro release (na verdade ainda o projeto foi recém-criado), o meu objetivo aqui é ver a aceitação de vocês e se faz sentido tudo isso XD.
Tenho um objetivo de adicionar integrações com outros messages queue como QStash e frameworks web como Next.js