@visulima/notification/workflow turns the send primitive into durable, code-first workflows: a sequence of channel
sends with delays and conditional logic that survives process restarts. It is a thin layer over
@visulima/workflow — createNotificationWorkflow returns a plain WorkflowDefinition, so
it plugs straight into a workflow runtime.
@visulima/workflow is an optional peer; install it alongside:
Resolve a channel payload and deliver it through the bound facade exactly once; returns the Receipt.
step.delay(id, duration)
Durably pause (ms, { amount, unit }, or { cron }).
step.custom(id, fn)
Escape hatch to a raw engine step for non-send side effects.
Each channel step takes (id, resolve, options?). resolve returns the channel payload (it receives { payload });
options.skip conditionally skips the send. Because sends go through the engine's step, they are recorded and not
re-sent on replay.
Delivery failures don't throw by default. The facade returns a FailureReceipt (it doesn't throw), so a failed
send is recorded as a completed step and not retried — check receipt.successful, or pass
{ throwOnFailure: true } to turn a failure into a thrown error that fails the run and re-runs the step on the next
resume/sweep:
Replay safety: only work inside step.* runs exactly once. Bare side effects in the run body re-execute on every
replay — see the workflow durability docs.
Community is the heart of open source. The success of our packages wouldn't be possible without the incredible contributions of users, testers, and developers who collaborate with us every day.Want to get involved? Here are some tips on how you can make a meaningful impact on our open source projects.
Ready to help us out?
Be sure to check out the package's contribution guidelines first. They'll walk you through the process on how to properly submit an issue or pull request to our repositories.
Submit a pull request
Found something to improve? Fork the repo, make your changes, and open a PR. We review every contribution and provide feedback to help you get merged.
Good first issues
Simple issues suited for people new to open source development, and often a good place to start working on a package.