workflow 4.4.0 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/ai/resumable-streams.mdx +4 -0
- package/docs/api-reference/index.mdx +24 -0
- package/docs/api-reference/meta.json +8 -0
- package/docs/api-reference/vitest/index.mdx +0 -6
- package/docs/api-reference/workflow/create-hook.mdx +32 -0
- package/docs/api-reference/workflow/create-webhook.mdx +1 -0
- package/docs/api-reference/workflow-ai/workflow-chat-transport.mdx +39 -0
- package/docs/api-reference/workflow-api/index.mdx +6 -8
- package/docs/api-reference/workflow-api/start.mdx +2 -0
- package/docs/api-reference/workflow-errors/meta.json +5 -0
- package/docs/api-reference/workflow-next/with-workflow.mdx +26 -4
- package/docs/api-reference/workflow-serde/index.mdx +0 -1
- package/docs/api-reference/workflow-serde/workflow-deserialize.mdx +1 -2
- package/docs/api-reference/workflow-serde/workflow-serialize.mdx +1 -2
- package/docs/deploying/world/postgres-world.mdx +33 -1
- package/docs/deploying/world/vercel-world.mdx +2 -0
- package/docs/errors/index.mdx +3 -0
- package/docs/foundations/hooks.mdx +29 -0
- package/docs/foundations/streaming.mdx +7 -1
- package/docs/foundations/versioning.mdx +1 -1
- package/docs/how-it-works/encryption.mdx +2 -2
- package/docs/how-it-works/event-sourcing.mdx +2 -2
- package/docs/observability/index.mdx +13 -0
- package/docs/v4/api-reference/workflow-astro/index.mdx +18 -0
- package/docs/v4/api-reference/workflow-astro/meta.json +4 -0
- package/docs/v4/api-reference/workflow-astro/workflow.mdx +37 -0
- package/docs/v4/api-reference/workflow-errors/hook-conflict-error.mdx +60 -0
- package/docs/v4/api-reference/workflow-errors/run-not-supported-error.mdx +58 -0
- package/docs/v4/api-reference/workflow-errors/workflow-error.mdx +52 -0
- package/docs/v4/api-reference/workflow-errors/workflow-run-not-completed-error.mdx +58 -0
- package/docs/v4/api-reference/workflow-errors/workflow-runtime-error.mdx +58 -0
- package/docs/v4/api-reference/workflow-nest/configure-workflow-controller.mdx +33 -0
- package/docs/v4/api-reference/workflow-nest/index.mdx +31 -0
- package/docs/v4/api-reference/workflow-nest/meta.json +9 -0
- package/docs/v4/api-reference/workflow-nest/nest-local-builder.mdx +63 -0
- package/docs/v4/api-reference/workflow-nest/workflow-controller.mdx +40 -0
- package/docs/v4/api-reference/workflow-nest/workflow-module.mdx +73 -0
- package/docs/v4/api-reference/workflow-nitro/index.mdx +58 -0
- package/docs/v4/api-reference/workflow-nuxt/index.mdx +48 -0
- package/docs/v4/api-reference/workflow-observability/hydrate-data.mdx +35 -0
- package/docs/v4/api-reference/workflow-observability/hydrate-resource-io.mdx +62 -0
- package/docs/v4/api-reference/workflow-observability/index.mdx +64 -0
- package/docs/v4/api-reference/workflow-observability/meta.json +11 -0
- package/docs/v4/api-reference/workflow-observability/observability-revivers.mdx +50 -0
- package/docs/v4/api-reference/workflow-observability/parse-class-name.mdx +41 -0
- package/docs/v4/api-reference/workflow-observability/parse-step-name.mdx +40 -0
- package/docs/v4/api-reference/workflow-observability/parse-workflow-name.mdx +55 -0
- package/docs/v4/api-reference/workflow-runtime/create-world.mdx +43 -0
- package/docs/v4/api-reference/workflow-runtime/get-world-handlers.mdx +44 -0
- package/docs/v4/api-reference/workflow-runtime/get-world.mdx +124 -0
- package/docs/v4/api-reference/workflow-runtime/health-check.mdx +50 -0
- package/docs/v4/api-reference/workflow-runtime/index.mdx +46 -0
- package/docs/v4/api-reference/workflow-runtime/meta.json +13 -0
- package/docs/v4/api-reference/workflow-runtime/set-world.mdx +49 -0
- package/docs/v4/api-reference/workflow-runtime/step-entrypoint.mdx +39 -0
- package/docs/v4/api-reference/workflow-runtime/workflow-entrypoint.mdx +42 -0
- package/docs/{api-reference/workflow-api → v4/api-reference/workflow-runtime}/world/index.mdx +5 -8
- package/docs/v4/api-reference/workflow-runtime/world/meta.json +4 -0
- package/docs/v4/api-reference/workflow-runtime/world/queue.mdx +86 -0
- package/docs/{api-reference/workflow-api → v4/api-reference/workflow-runtime}/world/storage.mdx +4 -4
- package/docs/v4/api-reference/workflow-runtime/world/streams.mdx +216 -0
- package/docs/v4/api-reference/workflow-sveltekit/index.mdx +18 -0
- package/docs/v4/api-reference/workflow-sveltekit/meta.json +4 -0
- package/docs/v4/api-reference/workflow-sveltekit/workflow-plugin.mdx +34 -0
- package/docs/v4/api-reference/workflow-vite/index.mdx +18 -0
- package/docs/v4/api-reference/workflow-vite/meta.json +4 -0
- package/docs/v4/api-reference/workflow-vite/workflow.mdx +47 -0
- package/docs/v4/errors/step-executed-multiple-times.mdx +23 -0
- package/docs/v5/api-reference/workflow-astro/index.mdx +18 -0
- package/docs/v5/api-reference/workflow-astro/meta.json +4 -0
- package/docs/v5/api-reference/workflow-astro/workflow.mdx +45 -0
- package/docs/v5/api-reference/workflow-errors/hook-conflict-error.mdx +60 -0
- package/docs/v5/api-reference/workflow-errors/run-not-supported-error.mdx +58 -0
- package/docs/v5/api-reference/workflow-errors/workflow-error.mdx +52 -0
- package/docs/v5/api-reference/workflow-errors/workflow-run-not-completed-error.mdx +58 -0
- package/docs/v5/api-reference/workflow-errors/workflow-runtime-error.mdx +58 -0
- package/docs/v5/api-reference/workflow-nest/configure-workflow-controller.mdx +33 -0
- package/docs/v5/api-reference/workflow-nest/index.mdx +31 -0
- package/docs/v5/api-reference/workflow-nest/meta.json +9 -0
- package/docs/v5/api-reference/workflow-nest/nest-local-builder.mdx +64 -0
- package/docs/v5/api-reference/workflow-nest/workflow-controller.mdx +40 -0
- package/docs/v5/api-reference/workflow-nest/workflow-module.mdx +74 -0
- package/docs/v5/api-reference/workflow-nitro/index.mdx +60 -0
- package/docs/v5/api-reference/workflow-nuxt/index.mdx +48 -0
- package/docs/v5/api-reference/workflow-observability/hydrate-data.mdx +35 -0
- package/docs/v5/api-reference/workflow-observability/hydrate-resource-io.mdx +62 -0
- package/docs/v5/api-reference/workflow-observability/index.mdx +64 -0
- package/docs/v5/api-reference/workflow-observability/meta.json +11 -0
- package/docs/v5/api-reference/workflow-observability/observability-revivers.mdx +50 -0
- package/docs/v5/api-reference/workflow-observability/parse-class-name.mdx +41 -0
- package/docs/v5/api-reference/workflow-observability/parse-step-name.mdx +40 -0
- package/docs/v5/api-reference/workflow-observability/parse-workflow-name.mdx +55 -0
- package/docs/v5/api-reference/workflow-runtime/create-world.mdx +39 -0
- package/docs/v5/api-reference/workflow-runtime/get-world-handlers.mdx +44 -0
- package/docs/{api-reference/workflow-api → v5/api-reference/workflow-runtime}/get-world.mdx +7 -10
- package/docs/v5/api-reference/workflow-runtime/health-check.mdx +50 -0
- package/docs/v5/api-reference/workflow-runtime/index.mdx +43 -0
- package/docs/v5/api-reference/workflow-runtime/meta.json +12 -0
- package/docs/v5/api-reference/workflow-runtime/set-world.mdx +49 -0
- package/docs/v5/api-reference/workflow-runtime/workflow-entrypoint.mdx +42 -0
- package/docs/v5/api-reference/workflow-runtime/world/index.mdx +55 -0
- package/docs/v5/api-reference/workflow-runtime/world/meta.json +4 -0
- package/docs/{api-reference/workflow-api → v5/api-reference/workflow-runtime}/world/queue.mdx +2 -2
- package/docs/v5/api-reference/workflow-runtime/world/storage.mdx +409 -0
- package/docs/{api-reference/workflow-api → v5/api-reference/workflow-runtime}/world/streams.mdx +2 -2
- package/docs/v5/api-reference/workflow-sveltekit/index.mdx +18 -0
- package/docs/v5/api-reference/workflow-sveltekit/meta.json +4 -0
- package/docs/v5/api-reference/workflow-sveltekit/workflow-plugin.mdx +42 -0
- package/docs/v5/api-reference/workflow-vite/index.mdx +18 -0
- package/docs/v5/api-reference/workflow-vite/meta.json +4 -0
- package/docs/v5/api-reference/workflow-vite/workflow.mdx +48 -0
- package/docs/v5/errors/index.mdx +3 -0
- package/docs/v5/errors/step-executed-multiple-times.mdx +23 -0
- package/package.json +10 -10
- package/docs/api-reference/workflow-api/world/meta.json +0 -4
- package/docs/api-reference/workflow-api/world/observability.mdx +0 -164
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: workflow
|
|
3
|
+
description: Configure Vite and Nitro to transform workflow directives.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: Add the workflow plugin to your Vite config to enable workflow directive transformation in Vite + Nitro apps.
|
|
6
|
+
prerequisites:
|
|
7
|
+
- /docs/getting-started/vite
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Returns the Vite plugins that transform workflow code (`"use step"`/`"use workflow"` directives) and configure the [`workflow/nitro`](/docs/api-reference/workflow-nitro) module on the Nitro server. It is designed to be used alongside `nitro()` from `nitro/vite`, which provides the server framework for API routes and deployment.
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
To enable `"use step"` and `"use workflow"` directives while developing locally or deploying to production, add `workflow()` to the `plugins` array of your Vite config, together with `nitro()`.
|
|
15
|
+
|
|
16
|
+
```typescript title="vite.config.ts" lineNumbers
|
|
17
|
+
import { nitro } from "nitro/vite";
|
|
18
|
+
import { defineConfig } from "vite";
|
|
19
|
+
import { workflow } from "workflow/vite"; // [!code highlight]
|
|
20
|
+
|
|
21
|
+
export default defineConfig({
|
|
22
|
+
plugins: [nitro(), workflow()], // [!code highlight]
|
|
23
|
+
nitro: {
|
|
24
|
+
serverDir: "./",
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## API Signature
|
|
30
|
+
|
|
31
|
+
### Parameters
|
|
32
|
+
|
|
33
|
+
| Parameter | Type | Description |
|
|
34
|
+
| --- | --- | --- |
|
|
35
|
+
| `options` | `ModuleOptions` | Optional. Forwarded to the `workflow/nitro` module as its module options. |
|
|
36
|
+
|
|
37
|
+
#### ModuleOptions
|
|
38
|
+
|
|
39
|
+
| Option | Type | Default | Description |
|
|
40
|
+
| --- | --- | --- | --- |
|
|
41
|
+
| `dirs` | `string[]` | — | Directories to scan for workflows and steps. By default, the `workflows/` directory is scanned from the project root and all layer source directories. |
|
|
42
|
+
| `typescriptPlugin` | `boolean` | `false` | Adds the `workflow` TypeScript plugin to the generated `tsconfig.json` for IDE IntelliSense. |
|
|
43
|
+
| `runtime` | `string` | — | Node.js runtime version for Vercel Functions (e.g. `'nodejs22.x'`, `'nodejs24.x'`). Only applies when deploying to Vercel. |
|
|
44
|
+
|
|
45
|
+
### Returns
|
|
46
|
+
|
|
47
|
+
Returns an array of Vite `Plugin` objects. Spread or pass the array directly to the `plugins` option of your Vite config — Vite flattens nested plugin arrays automatically.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Step executed multiple times
|
|
3
|
+
description: A step ran more than once because its function invocation crashed before it could report a result.
|
|
4
|
+
type: troubleshooting
|
|
5
|
+
summary: Diagnose duplicate step_started events caused by function timeouts, OOMs, or network issues.
|
|
6
|
+
prerequisites:
|
|
7
|
+
- /docs/foundations/workflows-and-steps
|
|
8
|
+
related:
|
|
9
|
+
- /docs/observability
|
|
10
|
+
- /docs/foundations/errors-and-retries
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
There may be cases where you see multiple `step_started` events for the same step in a workflow run. This happens if the function invocation executing the step crashes unexpectedly, and the step can not report the error. The step will be re-tried according to your retry policy in this case, but no error will be visible in the [Observability UI](/docs/observability).
|
|
14
|
+
|
|
15
|
+
## Common Causes
|
|
16
|
+
|
|
17
|
+
- **Function timeouts**: if your step code runs longer than the configured maximum function duration, it will be killed. Compare the gap between the `step_started` events to your configured function duration to be sure.
|
|
18
|
+
- **Out of memory (OOM)**: if your step code loads enough data into memory, especially if the step is invoked concurrently, the function invocation might run out of memory. You can see your function's peak memory use by going to the [Observability Query page](https://vercel.com/docs/observability) and showing the **Function Invocation Peak Memory** metric, then filtering down the **Route** to `/.well-known/workflow` endpoints.
|
|
19
|
+
- **Network issues**: persistent firewall, network stability, and related issues might prevent your function from reporting results or errors. This should be temporary.
|
|
20
|
+
|
|
21
|
+
## Getting Help
|
|
22
|
+
|
|
23
|
+
If you consistently see multiple `step_started` events and have ruled out function timeouts, OOMs, and firewall issues, please [contact support](https://vercel.com/help).
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "workflow/astro"
|
|
3
|
+
description: Astro integration for automatic workflow bundling and route registration.
|
|
4
|
+
type: overview
|
|
5
|
+
summary: Explore the Astro integration for automatic workflow bundling and runtime support.
|
|
6
|
+
related:
|
|
7
|
+
- /docs/getting-started/astro
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Astro integration for Workflow SDK that transforms workflow code and builds the workflow bundles.
|
|
11
|
+
|
|
12
|
+
## Functions
|
|
13
|
+
|
|
14
|
+
<Cards>
|
|
15
|
+
<Card title="workflow()" href="/docs/api-reference/workflow-astro/workflow">
|
|
16
|
+
Astro integration that transforms workflow code (`"use step"`/`"use workflow"` directives)
|
|
17
|
+
</Card>
|
|
18
|
+
</Cards>
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: workflow
|
|
3
|
+
description: Configure Astro to transform workflow directives.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: Add the workflow integration to your Astro config to enable workflow directive transformation.
|
|
6
|
+
prerequisites:
|
|
7
|
+
- /docs/getting-started/astro
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Returns an Astro integration that transforms workflow code (`"use step"`/`"use workflow"` directives) and builds the workflow bundles.
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
To enable `"use step"` and `"use workflow"` directives while developing locally or deploying to production, add `workflow()` to the `integrations` array of your Astro config.
|
|
15
|
+
|
|
16
|
+
```typescript title="astro.config.mjs" lineNumbers
|
|
17
|
+
// @ts-check
|
|
18
|
+
import { defineConfig } from "astro/config";
|
|
19
|
+
import { workflow } from "workflow/astro"; // [!code highlight]
|
|
20
|
+
|
|
21
|
+
// https://astro.build/config
|
|
22
|
+
export default defineConfig({
|
|
23
|
+
integrations: [workflow()], // [!code highlight]
|
|
24
|
+
});
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The integration registers the workflow Vite transform plugins during `astro:config:setup` and builds the workflow bundles — locally during config setup, or via the Vercel builder after `astro:build:done` when deploying to Vercel.
|
|
28
|
+
|
|
29
|
+
## API Signature
|
|
30
|
+
|
|
31
|
+
### Parameters
|
|
32
|
+
|
|
33
|
+
| Parameter | Type | Description |
|
|
34
|
+
| --- | --- | --- |
|
|
35
|
+
| `options` | `WorkflowPluginOptions` | Optional. Configures the workflow build. |
|
|
36
|
+
|
|
37
|
+
#### WorkflowPluginOptions
|
|
38
|
+
|
|
39
|
+
| Option | Type | Default | Description |
|
|
40
|
+
| --- | --- | --- | --- |
|
|
41
|
+
| `sourcemap` | `boolean \| 'inline' \| 'linked' \| 'external' \| 'both'` | `'inline'` | Controls source maps on generated workflow bundles. Accepts the same values as esbuild's `sourcemap` option. Set to `false` for smaller function bundles (useful for staying under the Vercel 250MB function size limit) at the cost of stack traces pointing at generated code. Can also be set via the `WORKFLOW_SOURCEMAP` environment variable. |
|
|
42
|
+
|
|
43
|
+
### Returns
|
|
44
|
+
|
|
45
|
+
Returns an `AstroIntegration` object to include in the `integrations` array of your Astro config.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: HookConflictError
|
|
3
|
+
description: Thrown when creating a hook with a token that is already in use by another workflow run.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: Catch HookConflictError when a hook token is already claimed by another active workflow run.
|
|
6
|
+
related:
|
|
7
|
+
- /docs/api-reference/workflow/create-hook
|
|
8
|
+
- /docs/foundations/hooks
|
|
9
|
+
- /docs/errors/hook-conflict
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
`HookConflictError` is thrown when creating a hook with a token that is already in use by another active workflow run. Hook tokens must be unique across all running workflows — see the [hook-conflict](/docs/errors/hook-conflict) error guide for resolution strategies.
|
|
13
|
+
|
|
14
|
+
```typescript lineNumbers
|
|
15
|
+
import { HookConflictError } from "workflow/errors"
|
|
16
|
+
declare function startApprovalWorkflow(token: string): Promise<void>; // @setup
|
|
17
|
+
declare const token: string; // @setup
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
await startApprovalWorkflow(token);
|
|
21
|
+
} catch (error) {
|
|
22
|
+
if (HookConflictError.is(error)) { // [!code highlight]
|
|
23
|
+
console.error(
|
|
24
|
+
`Token "${error.token}" already in use by run ${error.conflictingRunId}`
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## API Signature
|
|
31
|
+
|
|
32
|
+
### Properties
|
|
33
|
+
|
|
34
|
+
<TSDoc
|
|
35
|
+
definition={`
|
|
36
|
+
interface HookConflictError {
|
|
37
|
+
/** The hook token that conflicted. */
|
|
38
|
+
token: string;
|
|
39
|
+
/** The run ID of the workflow currently holding the token, when known. */
|
|
40
|
+
conflictingRunId?: string;
|
|
41
|
+
/** The error message. */
|
|
42
|
+
message: string;
|
|
43
|
+
}
|
|
44
|
+
export default HookConflictError;`}
|
|
45
|
+
/>
|
|
46
|
+
|
|
47
|
+
### Static Methods
|
|
48
|
+
|
|
49
|
+
#### `HookConflictError.is(value)`
|
|
50
|
+
|
|
51
|
+
Type-safe check for `HookConflictError` instances. Preferred over `instanceof` because it works across module boundaries and VM contexts.
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
import { HookConflictError } from "workflow/errors"
|
|
55
|
+
declare const error: unknown; // @setup
|
|
56
|
+
|
|
57
|
+
if (HookConflictError.is(error)) {
|
|
58
|
+
// error is typed as HookConflictError
|
|
59
|
+
}
|
|
60
|
+
```
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: RunNotSupportedError
|
|
3
|
+
description: Thrown when a workflow run requires a newer workflow spec version than the installed SDK supports.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: Catch RunNotSupportedError when stored run data requires a newer workflow package version.
|
|
6
|
+
related:
|
|
7
|
+
- /docs/foundations/versioning
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
`RunNotSupportedError` is thrown when reading a workflow run whose data was written with a newer workflow spec version than the running SDK supports. This typically means the run was created by a newer version of the `workflow` package — upgrade the package to process it.
|
|
11
|
+
|
|
12
|
+
```typescript lineNumbers
|
|
13
|
+
import { RunNotSupportedError } from "workflow/errors"
|
|
14
|
+
declare function readRun(runId: string): Promise<unknown>; // @setup
|
|
15
|
+
declare const runId: string; // @setup
|
|
16
|
+
|
|
17
|
+
try {
|
|
18
|
+
await readRun(runId);
|
|
19
|
+
} catch (error) {
|
|
20
|
+
if (RunNotSupportedError.is(error)) { // [!code highlight]
|
|
21
|
+
console.error(
|
|
22
|
+
`Run requires spec v${error.runSpecVersion}, world supports v${error.worldSpecVersion}`
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## API Signature
|
|
29
|
+
|
|
30
|
+
### Properties
|
|
31
|
+
|
|
32
|
+
<TSDoc
|
|
33
|
+
definition={`
|
|
34
|
+
interface RunNotSupportedError {
|
|
35
|
+
/** The spec version the run's stored data requires. */
|
|
36
|
+
runSpecVersion: number;
|
|
37
|
+
/** The spec version the current World supports. */
|
|
38
|
+
worldSpecVersion: number;
|
|
39
|
+
/** The error message. */
|
|
40
|
+
message: string;
|
|
41
|
+
}
|
|
42
|
+
export default RunNotSupportedError;`}
|
|
43
|
+
/>
|
|
44
|
+
|
|
45
|
+
### Static Methods
|
|
46
|
+
|
|
47
|
+
#### `RunNotSupportedError.is(value)`
|
|
48
|
+
|
|
49
|
+
Type-safe check for `RunNotSupportedError` instances. Preferred over `instanceof` because it works across module boundaries and VM contexts.
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
import { RunNotSupportedError } from "workflow/errors"
|
|
53
|
+
declare const error: unknown; // @setup
|
|
54
|
+
|
|
55
|
+
if (RunNotSupportedError.is(error)) {
|
|
56
|
+
// error is typed as RunNotSupportedError
|
|
57
|
+
}
|
|
58
|
+
```
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: WorkflowError
|
|
3
|
+
description: Base class for all workflow error types.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: All errors thrown by the Workflow SDK extend WorkflowError.
|
|
6
|
+
related:
|
|
7
|
+
- /docs/foundations/errors-and-retries
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
`WorkflowError` is the base class that all Workflow SDK error types extend, such as [`WorkflowRunFailedError`](/docs/api-reference/workflow-errors/workflow-run-failed-error) and [`HookNotFoundError`](/docs/api-reference/workflow-errors/hook-not-found-error). It extends `Error` with an optional `cause` and, for some subclasses, a link to the relevant error documentation appended to the message.
|
|
11
|
+
|
|
12
|
+
```typescript lineNumbers
|
|
13
|
+
import { WorkflowError } from "workflow/errors"
|
|
14
|
+
|
|
15
|
+
const error = new WorkflowError("something went wrong", {
|
|
16
|
+
cause: new Error("underlying cause"),
|
|
17
|
+
});
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## API Signature
|
|
21
|
+
|
|
22
|
+
### Properties
|
|
23
|
+
|
|
24
|
+
<TSDoc
|
|
25
|
+
definition={`
|
|
26
|
+
interface WorkflowError {
|
|
27
|
+
/** The error message. */
|
|
28
|
+
message: string;
|
|
29
|
+
/** The underlying cause, when provided. */
|
|
30
|
+
cause?: unknown;
|
|
31
|
+
}
|
|
32
|
+
export default WorkflowError;`}
|
|
33
|
+
/>
|
|
34
|
+
|
|
35
|
+
### Static Methods
|
|
36
|
+
|
|
37
|
+
#### `WorkflowError.is(value)`
|
|
38
|
+
|
|
39
|
+
Type-safe check for `WorkflowError` instances. Preferred over `instanceof` because it works across module boundaries and VM contexts.
|
|
40
|
+
|
|
41
|
+
<Callout type="warn">
|
|
42
|
+
`WorkflowError.is()` matches only direct `WorkflowError` instances — not subclasses, which override the error name it checks. To handle a specific error type, use that subclass's own `.is()` method (e.g. `WorkflowRunFailedError.is(error)`).
|
|
43
|
+
</Callout>
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
import { WorkflowError } from "workflow/errors"
|
|
47
|
+
declare const error: unknown; // @setup
|
|
48
|
+
|
|
49
|
+
if (WorkflowError.is(error)) {
|
|
50
|
+
// error is typed as WorkflowError
|
|
51
|
+
}
|
|
52
|
+
```
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: WorkflowRunNotCompletedError
|
|
3
|
+
description: Thrown when requesting the result of a workflow run that has not completed yet.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: Catch WorkflowRunNotCompletedError when reading the return value of a run that is still pending or running.
|
|
6
|
+
related:
|
|
7
|
+
- /docs/api-reference/workflow-api/get-run
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
`WorkflowRunNotCompletedError` is thrown when requesting the result of a workflow run that has not completed yet. The run's current status (for example `pending` or `running`) is available on the error.
|
|
11
|
+
|
|
12
|
+
[`run.returnValue()`](/docs/api-reference/workflow-api/get-run) handles this error internally — it polls until the run completes — so you will mainly encounter it when building custom polling logic on lower-level APIs.
|
|
13
|
+
|
|
14
|
+
```typescript lineNumbers
|
|
15
|
+
import { WorkflowRunNotCompletedError } from "workflow/errors"
|
|
16
|
+
declare function readRunResult(runId: string): Promise<unknown>; // @setup
|
|
17
|
+
declare const runId: string; // @setup
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
const result = await readRunResult(runId);
|
|
21
|
+
} catch (error) {
|
|
22
|
+
if (WorkflowRunNotCompletedError.is(error)) { // [!code highlight]
|
|
23
|
+
console.log(`Run ${error.runId} is still ${error.status}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## API Signature
|
|
29
|
+
|
|
30
|
+
### Properties
|
|
31
|
+
|
|
32
|
+
<TSDoc
|
|
33
|
+
definition={`
|
|
34
|
+
interface WorkflowRunNotCompletedError {
|
|
35
|
+
/** The workflow run ID. */
|
|
36
|
+
runId: string;
|
|
37
|
+
/** The run's status at the time of the error (e.g. "pending", "running"). */
|
|
38
|
+
status: string;
|
|
39
|
+
/** The error message. */
|
|
40
|
+
message: string;
|
|
41
|
+
}
|
|
42
|
+
export default WorkflowRunNotCompletedError;`}
|
|
43
|
+
/>
|
|
44
|
+
|
|
45
|
+
### Static Methods
|
|
46
|
+
|
|
47
|
+
#### `WorkflowRunNotCompletedError.is(value)`
|
|
48
|
+
|
|
49
|
+
Type-safe check for `WorkflowRunNotCompletedError` instances. Preferred over `instanceof` because it works across module boundaries and VM contexts.
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
import { WorkflowRunNotCompletedError } from "workflow/errors"
|
|
53
|
+
declare const error: unknown; // @setup
|
|
54
|
+
|
|
55
|
+
if (WorkflowRunNotCompletedError.is(error)) {
|
|
56
|
+
// error is typed as WorkflowRunNotCompletedError
|
|
57
|
+
}
|
|
58
|
+
```
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: WorkflowRuntimeError
|
|
3
|
+
description: Thrown when the workflow runtime encounters an execution error, such as serialization failures or timeouts.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: Catch WorkflowRuntimeError for runtime-level failures like unserializable values or workflow timeouts.
|
|
6
|
+
related:
|
|
7
|
+
- /docs/foundations/serialization
|
|
8
|
+
- /docs/foundations/errors-and-retries
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
`WorkflowRuntimeError` is thrown when the workflow runtime encounters an error executing a workflow. Common causes include:
|
|
12
|
+
|
|
13
|
+
- Values crossing the workflow/step boundary that cannot be serialized
|
|
14
|
+
- Workflow execution timeouts
|
|
15
|
+
- Invalid runtime state, such as misconfigured streams
|
|
16
|
+
|
|
17
|
+
```typescript lineNumbers
|
|
18
|
+
import { WorkflowRuntimeError } from "workflow/errors"
|
|
19
|
+
declare function runWorkflowOperation(): Promise<void>; // @setup
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
await runWorkflowOperation();
|
|
23
|
+
} catch (error) {
|
|
24
|
+
if (WorkflowRuntimeError.is(error)) { // [!code highlight]
|
|
25
|
+
console.error("Workflow runtime error:", error.message);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## API Signature
|
|
31
|
+
|
|
32
|
+
### Properties
|
|
33
|
+
|
|
34
|
+
<TSDoc
|
|
35
|
+
definition={`
|
|
36
|
+
interface WorkflowRuntimeError {
|
|
37
|
+
/** The error message. */
|
|
38
|
+
message: string;
|
|
39
|
+
/** The underlying cause, when provided. */
|
|
40
|
+
cause?: unknown;
|
|
41
|
+
}
|
|
42
|
+
export default WorkflowRuntimeError;`}
|
|
43
|
+
/>
|
|
44
|
+
|
|
45
|
+
### Static Methods
|
|
46
|
+
|
|
47
|
+
#### `WorkflowRuntimeError.is(value)`
|
|
48
|
+
|
|
49
|
+
Type-safe check for `WorkflowRuntimeError` instances. Preferred over `instanceof` because it works across module boundaries and VM contexts.
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
import { WorkflowRuntimeError } from "workflow/errors"
|
|
53
|
+
declare const error: unknown; // @setup
|
|
54
|
+
|
|
55
|
+
if (WorkflowRuntimeError.is(error)) {
|
|
56
|
+
// error is typed as WorkflowRuntimeError
|
|
57
|
+
}
|
|
58
|
+
```
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: configureWorkflowController
|
|
3
|
+
description: Point WorkflowController at the generated workflow bundles.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: Configure the directory WorkflowController loads workflow bundles from.
|
|
6
|
+
prerequisites:
|
|
7
|
+
- /docs/getting-started/nestjs
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Configures the output directory that [`WorkflowController`](/docs/api-reference/workflow-nest/workflow-controller) loads the generated workflow bundles (`steps.mjs`, `workflows.mjs`, `webhook.mjs`, `manifest.json`) from.
|
|
11
|
+
|
|
12
|
+
[`WorkflowModule.forRoot()`](/docs/api-reference/workflow-nest/workflow-module) calls this for you with its resolved `outDir` — call it yourself only when registering `WorkflowController` manually. The controller's route handlers throw if no directory has been configured.
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
```typescript title="src/app.module.ts" lineNumbers
|
|
17
|
+
import { join } from "node:path";
|
|
18
|
+
import { configureWorkflowController } from "workflow/nest"; // [!code highlight]
|
|
19
|
+
|
|
20
|
+
configureWorkflowController(join(process.cwd(), ".nestjs/workflow")); // [!code highlight]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## API Signature
|
|
24
|
+
|
|
25
|
+
### Parameters
|
|
26
|
+
|
|
27
|
+
| Parameter | Type | Description |
|
|
28
|
+
| --- | --- | --- |
|
|
29
|
+
| `outDir` | `string` | Directory containing the generated workflow bundles. Should match the `outDir` used by the builder (default: `.nestjs/workflow` in the working directory). |
|
|
30
|
+
|
|
31
|
+
### Returns
|
|
32
|
+
|
|
33
|
+
Returns `void`.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "workflow/nest"
|
|
3
|
+
description: NestJS integration for workflow bundling and HTTP routing.
|
|
4
|
+
type: overview
|
|
5
|
+
summary: Explore the NestJS integration for workflow bundle building and runtime routing.
|
|
6
|
+
related:
|
|
7
|
+
- /docs/getting-started/nestjs
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
NestJS integration for Workflow SDK. The `WorkflowModule` builds the workflow bundles on application startup and registers the controller that serves the workflow runtime routes.
|
|
11
|
+
|
|
12
|
+
<Callout>
|
|
13
|
+
NestJS integration is experimental and not yet supported for deployment to Vercel. The same exports are also available from the `@workflow/nest` package.
|
|
14
|
+
</Callout>
|
|
15
|
+
|
|
16
|
+
## Exports
|
|
17
|
+
|
|
18
|
+
<Cards>
|
|
19
|
+
<Card title="WorkflowModule" href="/docs/api-reference/workflow-nest/workflow-module">
|
|
20
|
+
NestJS module that builds workflow bundles on startup and registers the workflow controller
|
|
21
|
+
</Card>
|
|
22
|
+
<Card title="NestLocalBuilder" href="/docs/api-reference/workflow-nest/nest-local-builder">
|
|
23
|
+
Builder that compiles workflow files into step, workflow, and webhook bundles
|
|
24
|
+
</Card>
|
|
25
|
+
<Card title="WorkflowController" href="/docs/api-reference/workflow-nest/workflow-controller">
|
|
26
|
+
Controller that serves the workflow runtime routes under `.well-known/workflow/v1`
|
|
27
|
+
</Card>
|
|
28
|
+
<Card title="configureWorkflowController()" href="/docs/api-reference/workflow-nest/configure-workflow-controller">
|
|
29
|
+
Points `WorkflowController` at the directory containing the generated workflow bundles
|
|
30
|
+
</Card>
|
|
31
|
+
</Cards>
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: NestLocalBuilder
|
|
3
|
+
description: Builder that compiles workflow files into bundles for NestJS apps.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: Use NestLocalBuilder to build workflow bundles programmatically in a NestJS project.
|
|
6
|
+
prerequisites:
|
|
7
|
+
- /docs/getting-started/nestjs
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Builder that scans a NestJS project for workflow files and compiles them into the step, workflow, and webhook bundles plus a manifest. [`WorkflowModule.forRoot()`](/docs/api-reference/workflow-nest/workflow-module) creates and runs one automatically on startup — instantiate it yourself only when you need to build bundles outside the module lifecycle (e.g. a custom build script for production with `skipBuild`).
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
```typescript title="scripts/build-workflows.ts" lineNumbers
|
|
15
|
+
import { NestLocalBuilder } from "workflow/nest"; // [!code highlight]
|
|
16
|
+
|
|
17
|
+
const builder = new NestLocalBuilder({
|
|
18
|
+
dirs: ["src"],
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
await builder.build(); // [!code highlight]
|
|
22
|
+
|
|
23
|
+
console.log(`Workflow bundles written to ${builder.outDir}`);
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## API Signature
|
|
27
|
+
|
|
28
|
+
### Constructor
|
|
29
|
+
|
|
30
|
+
`new NestLocalBuilder(options?)` creates a builder for the given options.
|
|
31
|
+
|
|
32
|
+
### Parameters
|
|
33
|
+
|
|
34
|
+
| Parameter | Type | Description |
|
|
35
|
+
| --- | --- | --- |
|
|
36
|
+
| `options` | `NestBuilderOptions` | Optional. Configures the workflow build. |
|
|
37
|
+
|
|
38
|
+
#### NestBuilderOptions
|
|
39
|
+
|
|
40
|
+
| Option | Type | Default | Description |
|
|
41
|
+
| --- | --- | --- | --- |
|
|
42
|
+
| `workingDir` | `string` | `process.cwd()` | Working directory for the NestJS application. |
|
|
43
|
+
| `dirs` | `string[]` | `['src']` | Directories to scan for workflow files. |
|
|
44
|
+
| `outDir` | `string` | `'.nestjs/workflow'` (relative to `workingDir`) | Output directory for generated workflow bundles. |
|
|
45
|
+
| `watch` | `boolean` | `false` | Enable watch mode for development. |
|
|
46
|
+
| `moduleType` | `'es6' \| 'commonjs'` | `'es6'` | SWC module compilation type. When `'commonjs'`, the builder rewrites externalized imports in the steps bundle to use `require()` via `createRequire`, avoiding ESM/CJS named-export interop issues with SWC's output. |
|
|
47
|
+
| `distDir` | `string` | `'dist'` | Directory where NestJS compiles `.ts` source files to `.js` (relative to `workingDir`). Used when `moduleType` is `'commonjs'` to resolve compiled file paths. Should match the `outDir` in your `tsconfig.json`. |
|
|
48
|
+
| `sourcemap` | `boolean \| 'inline' \| 'linked' \| 'external' \| 'both'` | `'inline'` | Controls source maps on generated workflow bundles. Accepts the same values as esbuild's `sourcemap` option. Can also be set via the `WORKFLOW_SOURCEMAP` environment variable. |
|
|
49
|
+
|
|
50
|
+
### Methods
|
|
51
|
+
|
|
52
|
+
#### `build()`
|
|
53
|
+
|
|
54
|
+
Builds the workflow bundles. Writes `steps.mjs`, `workflows.mjs`, `webhook.mjs`, and `manifest.json` to the output directory (plus a `.gitignore` covering the generated files when not deploying to Vercel). Returns `Promise<void>`.
|
|
55
|
+
|
|
56
|
+
### Properties
|
|
57
|
+
|
|
58
|
+
#### `outDir`
|
|
59
|
+
|
|
60
|
+
Read-only getter that returns the output directory for generated workflow bundles — the `outDir` option as passed, or the default `.nestjs/workflow` resolved against `workingDir`.
|
|
61
|
+
|
|
62
|
+
### Returns
|
|
63
|
+
|
|
64
|
+
The constructor returns a `NestLocalBuilder` instance.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: WorkflowController
|
|
3
|
+
description: NestJS controller that serves the workflow runtime routes.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: WorkflowController handles the well-known workflow endpoints in a NestJS app.
|
|
6
|
+
prerequisites:
|
|
7
|
+
- /docs/getting-started/nestjs
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
NestJS controller that handles the well-known workflow endpoints under `.well-known/workflow/v1`. It dynamically imports the generated workflow bundles and converts between Express/Fastify requests and the Web API `Request`/`Response` objects the workflow runtime expects. Both the Express and Fastify HTTP adapters are supported.
|
|
11
|
+
|
|
12
|
+
[`WorkflowModule.forRoot()`](/docs/api-reference/workflow-nest/workflow-module) registers this controller automatically — you only register it yourself if you are not using `WorkflowModule`.
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
When registering the controller manually, call [`configureWorkflowController`](/docs/api-reference/workflow-nest/configure-workflow-controller) first so it can locate the generated bundles; its route handlers throw otherwise.
|
|
17
|
+
|
|
18
|
+
```typescript title="src/app.module.ts" lineNumbers
|
|
19
|
+
import { join } from "node:path";
|
|
20
|
+
import { Module } from "@nestjs/common";
|
|
21
|
+
import {
|
|
22
|
+
configureWorkflowController, // [!code highlight]
|
|
23
|
+
WorkflowController, // [!code highlight]
|
|
24
|
+
} from "workflow/nest";
|
|
25
|
+
|
|
26
|
+
configureWorkflowController(join(process.cwd(), ".nestjs/workflow")); // [!code highlight]
|
|
27
|
+
|
|
28
|
+
@Module({
|
|
29
|
+
controllers: [WorkflowController], // [!code highlight]
|
|
30
|
+
})
|
|
31
|
+
export class AppModule {}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Routes
|
|
35
|
+
|
|
36
|
+
| Route | Method | Description |
|
|
37
|
+
| --- | --- | --- |
|
|
38
|
+
| `/.well-known/workflow/v1/flow` | `POST` | Executes workflow and step work items via the combined handler in `workflows.mjs` (step registrations are imported from `steps.mjs` first). |
|
|
39
|
+
| `/.well-known/workflow/v1/webhook/:token` | Any | Forwards webhook requests to the handler in `webhook.mjs`. |
|
|
40
|
+
| `/.well-known/workflow/v1/manifest.json` | `GET` | Serves the workflow manifest. Responds with `404` unless the `WORKFLOW_PUBLIC_MANIFEST=1` environment variable is set. |
|