- Interrupter decices how to run a workflow, like `promiseHandler` will
await until reach `stopEvent`,
- Middleware is the wrapper of the `workflow`, will change the behavior
of the whole workflow, like `extends class`, but it more like the idea
from [zustand](https://github.com/pmndrs/zustand)
- Util is smaller piece of the functions, like `zodEvent` only check
event with zod schema, `pRetryHandler` will retry a single handler