workflow 5.0.0-beta.5 → 5.0.0-beta.50
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/README.md +68 -23
- package/dist/api-workflow.d.ts +1 -1
- package/dist/api-workflow.d.ts.map +1 -1
- package/dist/api-workflow.js +1 -1
- package/dist/api.d.ts +3 -3
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +5 -7
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/internal/builtins.d.ts +20 -3
- package/dist/internal/builtins.d.ts.map +1 -1
- package/dist/internal/builtins.js +68 -4
- package/dist/internal/errors.d.ts +1 -1
- package/dist/internal/errors.d.ts.map +1 -1
- package/dist/internal/errors.js +2 -2
- package/dist/nest-builder.d.ts +2 -0
- package/dist/nest-builder.d.ts.map +1 -0
- package/dist/nest-builder.js +2 -0
- package/dist/nest-vercel-builder.d.ts +2 -0
- package/dist/nest-vercel-builder.d.ts.map +1 -0
- package/dist/nest-vercel-builder.js +2 -0
- package/dist/observability.d.ts +1 -1
- package/dist/observability.js +2 -2
- package/dist/runtime.d.ts +2 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +4 -1
- package/docs/ai/chat-session-modeling.mdx +29 -26
- package/docs/ai/defining-tools.mdx +6 -7
- package/docs/ai/human-in-the-loop.mdx +11 -11
- package/docs/ai/index.mdx +50 -45
- package/docs/ai/message-queueing.mdx +16 -16
- package/docs/ai/meta.json +1 -0
- package/docs/ai/resumable-streams.mdx +40 -28
- package/docs/ai/sleep-and-delays.mdx +10 -10
- package/docs/ai/streaming-updates-from-tools.mdx +6 -6
- package/docs/api-reference/index.mdx +24 -0
- package/docs/api-reference/meta.json +8 -0
- package/docs/api-reference/vitest/index.mdx +9 -15
- package/docs/api-reference/workflow/create-hook.mdx +89 -10
- package/docs/api-reference/workflow/create-webhook.mdx +16 -15
- package/docs/api-reference/workflow/define-hook.mdx +35 -33
- package/docs/api-reference/workflow/fatal-error.mdx +30 -8
- package/docs/api-reference/workflow/fetch.mdx +14 -10
- package/docs/api-reference/workflow/get-step-metadata.mdx +2 -2
- package/docs/api-reference/workflow/get-workflow-metadata.mdx +3 -3
- package/docs/api-reference/workflow/get-writable.mdx +7 -7
- package/docs/api-reference/workflow/index.mdx +4 -1
- package/docs/api-reference/workflow/retryable-error.mdx +1 -1
- package/docs/api-reference/workflow/set-attributes.mdx +61 -0
- package/docs/api-reference/workflow/sleep.mdx +4 -4
- package/docs/api-reference/workflow-ai/durable-agent.mdx +48 -86
- package/docs/api-reference/workflow-ai/index.mdx +3 -3
- package/docs/api-reference/workflow-ai/workflow-chat-transport.mdx +67 -24
- package/docs/api-reference/workflow-api/get-hook-by-token.mdx +26 -12
- package/docs/api-reference/workflow-api/get-run.mdx +43 -8
- package/docs/api-reference/workflow-api/index.mdx +6 -10
- package/docs/api-reference/workflow-api/resume-hook.mdx +73 -12
- package/docs/api-reference/workflow-api/resume-webhook.mdx +11 -9
- package/docs/api-reference/workflow-api/start.mdx +60 -13
- package/docs/api-reference/workflow-astro/index.mdx +18 -0
- package/docs/api-reference/workflow-astro/meta.json +4 -0
- package/docs/api-reference/workflow-astro/workflow.mdx +45 -0
- package/docs/api-reference/workflow-errors/entity-conflict-error.mdx +4 -4
- package/docs/api-reference/workflow-errors/hook-conflict-error.mdx +60 -0
- package/docs/api-reference/workflow-errors/hook-not-found-error.mdx +8 -8
- package/docs/api-reference/workflow-errors/index.mdx +88 -0
- package/docs/api-reference/workflow-errors/meta.json +6 -0
- package/docs/api-reference/workflow-errors/precondition-failed-error.mdx +68 -0
- package/docs/api-reference/workflow-errors/run-expired-error.mdx +2 -2
- package/docs/api-reference/workflow-errors/run-not-supported-error.mdx +58 -0
- package/docs/api-reference/workflow-errors/step-not-registered-error.mdx +5 -5
- package/docs/api-reference/workflow-errors/throttle-error.mdx +2 -2
- package/docs/api-reference/workflow-errors/too-early-error.mdx +2 -2
- package/docs/api-reference/workflow-errors/workflow-error.mdx +52 -0
- package/docs/api-reference/workflow-errors/workflow-not-registered-error.mdx +5 -6
- package/docs/api-reference/workflow-errors/workflow-run-cancelled-error.mdx +6 -6
- package/docs/api-reference/workflow-errors/workflow-run-failed-error.mdx +5 -5
- package/docs/api-reference/workflow-errors/workflow-run-not-completed-error.mdx +58 -0
- package/docs/api-reference/workflow-errors/workflow-run-not-found-error.mdx +4 -4
- package/docs/api-reference/workflow-errors/workflow-runtime-error.mdx +58 -0
- package/docs/api-reference/workflow-errors/workflow-world-error.mdx +8 -8
- package/docs/api-reference/workflow-globals.mdx +14 -10
- package/docs/api-reference/workflow-nest/configure-workflow-controller.mdx +33 -0
- package/docs/api-reference/workflow-nest/index.mdx +31 -0
- package/docs/api-reference/workflow-nest/meta.json +9 -0
- package/docs/api-reference/workflow-nest/nest-local-builder.mdx +64 -0
- package/docs/api-reference/workflow-nest/workflow-controller.mdx +40 -0
- package/docs/api-reference/workflow-nest/workflow-module.mdx +74 -0
- package/docs/api-reference/workflow-next/with-workflow.mdx +39 -17
- package/docs/api-reference/workflow-nitro/index.mdx +60 -0
- package/docs/api-reference/workflow-nuxt/index.mdx +48 -0
- package/docs/api-reference/workflow-observability/hydrate-data.mdx +35 -0
- package/docs/api-reference/workflow-observability/hydrate-resource-io.mdx +62 -0
- package/docs/api-reference/workflow-observability/index.mdx +62 -0
- package/docs/api-reference/workflow-observability/meta.json +11 -0
- package/docs/api-reference/workflow-observability/observability-revivers.mdx +50 -0
- package/docs/api-reference/workflow-observability/parse-class-name.mdx +41 -0
- package/docs/api-reference/workflow-observability/parse-step-name.mdx +40 -0
- package/docs/api-reference/workflow-observability/parse-workflow-name.mdx +55 -0
- package/docs/api-reference/workflow-runtime/create-world.mdx +39 -0
- package/docs/api-reference/workflow-runtime/get-world-handlers.mdx +44 -0
- package/docs/api-reference/{workflow-api → workflow-runtime}/get-world.mdx +11 -14
- package/docs/api-reference/workflow-runtime/health-check.mdx +50 -0
- package/docs/api-reference/workflow-runtime/index.mdx +41 -0
- package/docs/api-reference/workflow-runtime/meta.json +12 -0
- package/docs/api-reference/workflow-runtime/set-world.mdx +51 -0
- package/docs/api-reference/workflow-runtime/workflow-entrypoint.mdx +43 -0
- package/docs/api-reference/workflow-runtime/world/analytics.mdx +315 -0
- package/docs/api-reference/workflow-runtime/world/index.mdx +60 -0
- package/docs/api-reference/workflow-runtime/world/meta.json +4 -0
- package/docs/api-reference/workflow-runtime/world/queue.mdx +88 -0
- package/docs/api-reference/{workflow-api → workflow-runtime}/world/storage.mdx +98 -34
- package/docs/api-reference/{workflow-api → workflow-runtime}/world/streams.mdx +8 -8
- package/docs/api-reference/workflow-serde/index.mdx +1 -2
- package/docs/api-reference/workflow-serde/workflow-deserialize.mdx +3 -4
- package/docs/api-reference/workflow-serde/workflow-serialize.mdx +8 -8
- package/docs/api-reference/workflow-sveltekit/index.mdx +18 -0
- package/docs/api-reference/workflow-sveltekit/meta.json +4 -0
- package/docs/api-reference/workflow-sveltekit/workflow-plugin.mdx +42 -0
- package/docs/api-reference/workflow-vite/index.mdx +18 -0
- package/docs/api-reference/workflow-vite/meta.json +4 -0
- package/docs/api-reference/workflow-vite/workflow.mdx +48 -0
- package/docs/changelog/attributes-mvp.mdx +380 -0
- package/docs/changelog/batched-event-writes.mdx +79 -0
- package/docs/changelog/eager-processing.mdx +110 -436
- package/docs/changelog/index.mdx +4 -2
- package/docs/changelog/lazy-event-creation.md +127 -0
- package/docs/changelog/lazy-hook-resume.mdx +78 -0
- package/docs/changelog/meta.json +11 -1
- package/docs/changelog/resilient-resume.mdx +32 -0
- package/docs/changelog/resilient-start.mdx +33 -285
- package/docs/changelog/step-message-ownership.mdx +360 -0
- package/docs/changelog/turbo-mode.md +87 -0
- package/docs/comparisons/index.mdx +66 -0
- package/docs/comparisons/meta.json +11 -0
- package/docs/comparisons/workflow-sdk-vs-aws-agentcore.mdx +55 -0
- package/docs/comparisons/workflow-sdk-vs-aws-step-functions.mdx +111 -0
- package/docs/comparisons/workflow-sdk-vs-cloudflare-workflows.mdx +71 -0
- package/docs/comparisons/workflow-sdk-vs-inngest.mdx +102 -0
- package/docs/comparisons/workflow-sdk-vs-temporal.mdx +123 -0
- package/docs/comparisons/workflow-sdk-vs-trigger-dev.mdx +104 -0
- package/docs/configuration/build-and-diagnostics.mdx +70 -0
- package/docs/configuration/cli-and-web-ui.mdx +241 -0
- package/docs/configuration/framework-options.mdx +165 -0
- package/docs/configuration/index.mdx +32 -0
- package/docs/configuration/meta.json +12 -0
- package/docs/configuration/runtime-tuning.mdx +376 -0
- package/docs/configuration/worlds.mdx +313 -0
- package/docs/cookbook/advanced/child-workflows.mdx +211 -264
- package/docs/cookbook/advanced/meta.json +6 -1
- package/docs/cookbook/advanced/publishing-libraries.mdx +65 -56
- package/docs/cookbook/advanced/serializable-steps.mdx +28 -20
- package/docs/cookbook/advanced/upgrading-workflows.mdx +199 -0
- package/docs/cookbook/agent-patterns/agent-cancellation.mdx +27 -19
- package/docs/cookbook/agent-patterns/durable-agent.mdx +14 -142
- package/docs/cookbook/agent-patterns/human-in-the-loop.mdx +30 -22
- package/docs/cookbook/common-patterns/batching.mdx +18 -14
- package/docs/cookbook/common-patterns/idempotency.mdx +41 -53
- package/docs/cookbook/common-patterns/rate-limiting.mdx +8 -4
- package/docs/cookbook/common-patterns/saga.mdx +23 -19
- package/docs/cookbook/common-patterns/scheduling.mdx +34 -22
- package/docs/cookbook/common-patterns/sequential-and-parallel.mdx +29 -25
- package/docs/cookbook/common-patterns/timeouts.mdx +26 -21
- package/docs/cookbook/common-patterns/webhooks.mdx +10 -6
- package/docs/cookbook/common-patterns/workflow-composition.mdx +30 -27
- package/docs/cookbook/index.mdx +22 -21
- package/docs/cookbook/integrations/ai-sdk.mdx +85 -47
- package/docs/cookbook/integrations/chat-sdk.mdx +50 -33
- package/docs/cookbook/integrations/sandbox.mdx +62 -45
- package/docs/deploying.mdx +95 -0
- package/docs/errors/abort-signal-timeout-in-workflow.mdx +16 -12
- package/docs/errors/corrupted-event-log.mdx +29 -18
- package/docs/errors/deployment-mismatch.mdx +71 -0
- package/docs/errors/fetch-in-workflow.mdx +11 -7
- package/docs/errors/hook-conflict.mdx +69 -13
- package/docs/errors/index.mdx +2 -36
- package/docs/errors/node-js-module-in-workflow.mdx +9 -5
- package/docs/errors/replay-divergence.mdx +27 -0
- package/docs/errors/run-expired.mdx +85 -0
- package/docs/errors/runtime-decryption-failed.mdx +77 -0
- package/docs/errors/serialization-failed.mdx +44 -12
- package/docs/errors/start-invalid-workflow-function.mdx +9 -5
- package/docs/errors/step-executed-multiple-times.mdx +23 -0
- package/docs/errors/step-not-registered.mdx +6 -6
- package/docs/errors/timeout-in-workflow.mdx +12 -8
- package/docs/errors/webhook-invalid-respond-with-value.mdx +18 -18
- package/docs/errors/webhook-response-not-sent.mdx +20 -16
- package/docs/errors/workflow-not-registered.mdx +5 -5
- package/docs/foundations/cancellation.mdx +31 -32
- package/docs/foundations/errors-and-retries.mdx +42 -11
- package/docs/foundations/hooks.mdx +64 -35
- package/docs/foundations/idempotency.mdx +244 -12
- package/docs/foundations/index.mdx +1 -23
- package/docs/foundations/meta.json +2 -1
- package/docs/foundations/serialization.mdx +21 -22
- package/docs/foundations/starting-workflows.mdx +106 -30
- package/docs/foundations/streaming.mdx +107 -59
- package/docs/foundations/versioning.mdx +263 -0
- package/docs/foundations/workflows-and-steps.mdx +9 -9
- package/docs/getting-started/astro.mdx +22 -18
- package/docs/getting-started/express.mdx +15 -11
- package/docs/getting-started/fastify.mdx +15 -11
- package/docs/getting-started/hono.mdx +15 -11
- package/docs/getting-started/index.mdx +10 -3
- package/docs/getting-started/meta.json +3 -1
- package/docs/getting-started/nestjs.mdx +87 -20
- package/docs/getting-started/next.mdx +22 -16
- package/docs/getting-started/nitro.mdx +22 -18
- package/docs/getting-started/nuxt.mdx +15 -11
- package/docs/getting-started/python.mdx +135 -40
- package/docs/getting-started/react-router/index.mdx +33 -0
- package/docs/getting-started/react-router/meta.json +5 -0
- package/docs/getting-started/react-router/v7.mdx +237 -0
- package/docs/getting-started/react-router/v8.mdx +232 -0
- package/docs/getting-started/sveltekit.mdx +20 -16
- package/docs/getting-started/tanstack-start.mdx +17 -13
- package/docs/getting-started/vite.mdx +15 -11
- package/docs/how-it-works/cancellation.mdx +63 -63
- package/docs/how-it-works/code-transform.mdx +83 -67
- package/docs/how-it-works/encryption.mdx +30 -26
- package/docs/how-it-works/event-sourcing.mdx +98 -34
- package/docs/how-it-works/framework-integrations.mdx +96 -337
- package/docs/how-it-works/understanding-directives.mdx +22 -22
- package/docs/internal/index.mdx +6 -4
- package/docs/internal/meta.json +6 -1
- package/docs/internal/nitro-native-build.mdx +38 -0
- package/docs/internal/nitro-web-ui.mdx +24 -0
- package/docs/internal/serializable-abort-controller.mdx +7 -7
- package/docs/meta.json +3 -2
- package/docs/observability/attributes.mdx +134 -0
- package/docs/observability/index.mdx +32 -10
- package/docs/observability/meta.json +1 -1
- package/docs/observability/retention.mdx +93 -0
- package/docs/observability/tracing.mdx +124 -0
- package/docs/testing/index.mdx +36 -36
- package/docs/testing/server-based.mdx +10 -10
- package/docs/whats-new.mdx +186 -0
- package/package.json +17 -14
- package/docs/api-reference/workflow-api/world/index.mdx +0 -58
- package/docs/api-reference/workflow-api/world/meta.json +0 -4
- package/docs/api-reference/workflow-api/world/observability.mdx +0 -164
- package/docs/api-reference/workflow-api/world/queue.mdx +0 -86
- package/docs/deploying/building-a-world.mdx +0 -251
- package/docs/deploying/index.mdx +0 -95
- package/docs/deploying/meta.json +0 -4
- package/docs/deploying/world/local-world.mdx +0 -84
- package/docs/deploying/world/meta.json +0 -4
- package/docs/deploying/world/postgres-world.mdx +0 -224
- package/docs/deploying/world/vercel-world.mdx +0 -179
- package/docs/migration-guides/index.mdx +0 -34
- package/docs/migration-guides/meta.json +0 -9
- package/docs/migration-guides/migrating-from-aws-step-functions.mdx +0 -363
- package/docs/migration-guides/migrating-from-inngest.mdx +0 -314
- package/docs/migration-guides/migrating-from-temporal.mdx +0 -318
- package/docs/migration-guides/migrating-from-trigger-dev.mdx +0 -337
|
@@ -12,7 +12,7 @@ related:
|
|
|
12
12
|
|
|
13
13
|
`WorkflowWorldError` is the base error class for failures originating from a workflow world (storage backend). World implementations (local, Postgres, Vercel) throw subclasses of this error when storage operations fail.
|
|
14
14
|
|
|
15
|
-
You can use `instanceof WorkflowWorldError` to catch any
|
|
15
|
+
You can use `instanceof WorkflowWorldError` to catch any World-related error regardless of the specific type. The static `.is()` method only matches errors constructed directly as `WorkflowWorldError`. Use the subclass-specific `.is()` methods (for example, `EntityConflictError.is()`) to match specific error types.
|
|
16
16
|
|
|
17
17
|
<Callout>
|
|
18
18
|
Most world errors are handled automatically by the Workflow runtime. You will typically only encounter these errors when interacting with world storage APIs directly or when there are infrastructure-level issues.
|
|
@@ -33,7 +33,7 @@ try {
|
|
|
33
33
|
}
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
## API
|
|
36
|
+
## API signature
|
|
37
37
|
|
|
38
38
|
### Properties
|
|
39
39
|
|
|
@@ -54,11 +54,11 @@ interface WorkflowWorldError {
|
|
|
54
54
|
export default WorkflowWorldError;`}
|
|
55
55
|
/>
|
|
56
56
|
|
|
57
|
-
### Static
|
|
57
|
+
### Static methods
|
|
58
58
|
|
|
59
59
|
#### `WorkflowWorldError.is(value)`
|
|
60
60
|
|
|
61
|
-
Type-safe check that matches only errors constructed directly as `WorkflowWorldError`. Does not match subclasses like `EntityConflictError
|
|
61
|
+
Type-safe check that matches only errors constructed directly as `WorkflowWorldError`. Does not match subclasses like `EntityConflictError`. Use `instanceof` to catch all world errors, or the subclass-specific `.is()` methods.
|
|
62
62
|
|
|
63
63
|
```typescript
|
|
64
64
|
import { WorkflowWorldError } from "workflow/errors"
|
|
@@ -73,7 +73,7 @@ if (WorkflowWorldError.is(error)) {
|
|
|
73
73
|
|
|
74
74
|
The following error types extend `WorkflowWorldError`:
|
|
75
75
|
|
|
76
|
-
- [`EntityConflictError`](/docs/api-reference/workflow-errors/entity-conflict-error)
|
|
77
|
-
- [`RunExpiredError`](/docs/api-reference/workflow-errors/run-expired-error)
|
|
78
|
-
- [`TooEarlyError`](/docs/api-reference/workflow-errors/too-early-error)
|
|
79
|
-
- [`ThrottleError`](/docs/api-reference/workflow-errors/throttle-error)
|
|
76
|
+
- [`EntityConflictError`](/docs/api-reference/workflow-errors/entity-conflict-error): operation conflicts with entity state
|
|
77
|
+
- [`RunExpiredError`](/docs/api-reference/workflow-errors/run-expired-error): run has expired
|
|
78
|
+
- [`TooEarlyError`](/docs/api-reference/workflow-errors/too-early-error): request made before system is ready
|
|
79
|
+
- [`ThrottleError`](/docs/api-reference/workflow-errors/throttle-error): request was rate-limited
|
|
@@ -22,29 +22,30 @@ These APIs are available but are **seeded or fixed** to ensure deterministic beh
|
|
|
22
22
|
|
|
23
23
|
| API | Behavior |
|
|
24
24
|
|-----|----------|
|
|
25
|
-
| [`Math.random()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random) | Seeded random number generator
|
|
25
|
+
| [`Math.random()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random) | Seeded random number generator: same seed produces the same sequence every replay |
|
|
26
26
|
| [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) / `Date.now()` / `new Date()` | Returns a fixed timestamp that advances with the workflow's logical clock |
|
|
27
|
-
| [`crypto.getRandomValues()`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues) | Seeded
|
|
28
|
-
| [`crypto.randomUUID()`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID) | Seeded
|
|
29
|
-
| [`crypto.subtle.digest()`](https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest) |
|
|
27
|
+
| [`crypto.getRandomValues()`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues) | Seeded: produces deterministic output for a given workflow run |
|
|
28
|
+
| [`crypto.randomUUID()`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID) | Seeded: produces deterministic UUIDs for a given workflow run |
|
|
29
|
+
| [`crypto.subtle.digest()`](https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest) | Computed synchronously via `node:crypto` (values are byte-identical to WebCrypto), so the promise settles at a deterministic point during replay |
|
|
30
30
|
|
|
31
31
|
<Callout type="info">
|
|
32
32
|
You can safely use `Math.random()`, `Date.now()`, and `crypto.randomUUID()` in workflow functions. The framework ensures these return the same values across replays.
|
|
33
33
|
</Callout>
|
|
34
34
|
|
|
35
|
-
## Web
|
|
35
|
+
## Web platform APIs
|
|
36
36
|
|
|
37
37
|
These standard Web APIs are available in workflow functions:
|
|
38
38
|
|
|
39
39
|
- [`Headers`](https://developer.mozilla.org/en-US/docs/Web/API/Headers)
|
|
40
40
|
- [`TextEncoder`](https://developer.mozilla.org/en-US/docs/Web/API/TextEncoder) / [`TextDecoder`](https://developer.mozilla.org/en-US/docs/Web/API/TextDecoder)
|
|
41
41
|
- [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) / [`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams)
|
|
42
|
-
- [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request) / [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response)
|
|
42
|
+
- [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request) / [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response): custom implementations with [special behavior in the workflow context](/docs/foundations/serialization#request--response). Body methods like `.json()` and `.text()` are automatically treated as step invocations.
|
|
43
43
|
- [`console`](https://developer.mozilla.org/en-US/docs/Web/API/console)
|
|
44
44
|
- [`structuredClone`](https://developer.mozilla.org/en-US/docs/Web/API/Window/structuredClone)
|
|
45
45
|
- [`atob`](https://developer.mozilla.org/en-US/docs/Web/API/Window/atob) / [`btoa`](https://developer.mozilla.org/en-US/docs/Web/API/Window/btoa)
|
|
46
|
+
- [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) / [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal): A durable, serializable implementation whose abort state survives replay and can be passed into steps to cancel in-flight work. See [Cancellation](/docs/foundations/cancellation).
|
|
46
47
|
|
|
47
|
-
## Environment
|
|
48
|
+
## Environment variables
|
|
48
49
|
|
|
49
50
|
`process.env` is available as a **read-only, frozen** snapshot of the environment variables at the time the workflow was started. You cannot modify it.
|
|
50
51
|
|
|
@@ -53,11 +54,11 @@ export async function myWorkflow() {
|
|
|
53
54
|
"use workflow";
|
|
54
55
|
|
|
55
56
|
const apiKey = process.env.API_KEY; // works
|
|
56
|
-
process.env.FOO = "bar"; // throws
|
|
57
|
+
process.env.FOO = "bar"; // throws: process.env is frozen
|
|
57
58
|
}
|
|
58
59
|
```
|
|
59
60
|
|
|
60
|
-
## Binary
|
|
61
|
+
## Binary data
|
|
61
62
|
|
|
62
63
|
Standard JavaScript typed arrays (`Uint8Array`, `Int32Array`, `Float64Array`, etc.) are available in workflow functions.
|
|
63
64
|
|
|
@@ -92,7 +93,7 @@ target.setFromHex("48656c6c6f"); // { read: 10, written: 5 }
|
|
|
92
93
|
These methods are polyfilled in the workflow environment. When the JavaScript runtime ships native support, the polyfill is automatically bypassed.
|
|
93
94
|
</Callout>
|
|
94
95
|
|
|
95
|
-
## Not
|
|
96
|
+
## Not available
|
|
96
97
|
|
|
97
98
|
The following are **not available** in workflow functions. Move this logic to [step functions](/docs/foundations/workflows-and-steps#step-functions) instead.
|
|
98
99
|
|
|
@@ -100,3 +101,6 @@ The following are **not available** in workflow functions. Move this logic to [s
|
|
|
100
101
|
- **Global `fetch`**: Use [`import { fetch } from "workflow"`](/docs/api-reference/workflow/fetch) instead. See [fetch-in-workflow](/docs/errors/fetch-in-workflow).
|
|
101
102
|
- **Timers**: `setTimeout`, `setInterval`, `setImmediate`, and their `clear*` counterparts. Use [`sleep()`](/docs/api-reference/workflow/sleep) instead. See [timeout-in-workflow](/docs/errors/timeout-in-workflow).
|
|
102
103
|
- **`Buffer`**: Node.js-specific API. Use `Uint8Array` with `toBase64()` / `fromBase64()` / `toHex()` / `fromHex()` for binary data encoding, or `atob()` / `btoa()` for string-based base64.
|
|
104
|
+
- **`WeakRef` and `FinalizationRegistry`**: Garbage collection timing is not deterministic, so observing it would make workflow code impossible to replay. (`WeakMap` and `WeakSet` remain available since they do not expose garbage collection state.)
|
|
105
|
+
- **`Atomics.waitAsync`**: a wall-clock timer, which cannot be replayed. Use [`sleep()`](/docs/api-reference/workflow/sleep) instead.
|
|
106
|
+
- **Async `WebAssembly` compilation**: The `compile`, `instantiate`, `compileStreaming`, and `instantiateStreaming` methods resolve on compile-thread timing. The synchronous `new WebAssembly.Module()` and `new WebAssembly.Instance()` constructors remain available.
|
|
@@ -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/builder"; // [!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()` through `createRequire`, avoiding ECMAScript module (ESM) and CommonJS (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'` (dev) / `false` (prod) | Controls source maps on generated workflow bundles. Accepts the same values as esbuild's `sourcemap` option. Defaults to `'inline'` in development and `false` in production. 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. |
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: WorkflowModule
|
|
3
|
+
description: NestJS module that builds workflow bundles and registers the workflow controller.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: Import WorkflowModule.forRoot() in your AppModule to enable workflows in a NestJS app.
|
|
6
|
+
prerequisites:
|
|
7
|
+
- /docs/getting-started/nestjs
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
NestJS module that provides workflow functionality. It builds the workflow bundles on module initialization (`onModuleInit`) and registers the [`WorkflowController`](/docs/api-reference/workflow-nest/workflow-controller) that serves the workflow runtime routes.
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
Add `WorkflowModule.forRoot()` to the `imports` array of your root module.
|
|
15
|
+
|
|
16
|
+
```typescript title="src/app.module.ts" lineNumbers
|
|
17
|
+
import { Module } from "@nestjs/common";
|
|
18
|
+
import { WorkflowModule } from "workflow/nest"; // [!code highlight]
|
|
19
|
+
|
|
20
|
+
@Module({
|
|
21
|
+
imports: [WorkflowModule.forRoot()], // [!code highlight]
|
|
22
|
+
})
|
|
23
|
+
export class AppModule {}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
If your NestJS project compiles to CommonJS via SWC, pass `moduleType` and `distDir` so the builder can rewrite imports in the generated bundles:
|
|
27
|
+
|
|
28
|
+
```typescript title="src/app.module.ts" lineNumbers
|
|
29
|
+
import { Module } from "@nestjs/common";
|
|
30
|
+
import { WorkflowModule } from "workflow/nest";
|
|
31
|
+
|
|
32
|
+
@Module({
|
|
33
|
+
imports: [
|
|
34
|
+
WorkflowModule.forRoot({
|
|
35
|
+
moduleType: "commonjs", // [!code highlight]
|
|
36
|
+
distDir: "dist", // [!code highlight]
|
|
37
|
+
}),
|
|
38
|
+
],
|
|
39
|
+
})
|
|
40
|
+
export class AppModule {}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## API signature
|
|
44
|
+
|
|
45
|
+
### Static methods
|
|
46
|
+
|
|
47
|
+
#### `forRoot(options?)`
|
|
48
|
+
|
|
49
|
+
Configures the module and returns a NestJS `DynamicModule` registered as `global`. It calls [`configureWorkflowController`](/docs/api-reference/workflow-nest/configure-workflow-controller) with the resolved output directory, and (unless `skipBuild` is set) creates a [`NestLocalBuilder`](/docs/api-reference/workflow-nest/nest-local-builder) that builds the workflow bundles when the module initializes.
|
|
50
|
+
|
|
51
|
+
### Parameters
|
|
52
|
+
|
|
53
|
+
| Parameter | Type | Description |
|
|
54
|
+
| --- | --- | --- |
|
|
55
|
+
| `options` | `WorkflowModuleOptions` | Optional. Configures the workflow build. |
|
|
56
|
+
|
|
57
|
+
#### WorkflowModuleOptions
|
|
58
|
+
|
|
59
|
+
Extends [`NestBuilderOptions`](/docs/api-reference/workflow-nest/nest-local-builder#nestbuilderoptions): all builder options are accepted, plus `skipBuild`:
|
|
60
|
+
|
|
61
|
+
| Option | Type | Default | Description |
|
|
62
|
+
| --- | --- | --- | --- |
|
|
63
|
+
| `skipBuild` | `boolean` | `false` | Skip building workflow bundles on startup. Useful in production when the bundles are pre-built. |
|
|
64
|
+
| `workingDir` | `string` | `process.cwd()` | Working directory for the NestJS application. |
|
|
65
|
+
| `dirs` | `string[]` | `['src']` | Directories to scan for workflow files. |
|
|
66
|
+
| `outDir` | `string` | `'.nestjs/workflow'` (relative to `workingDir`) | Output directory for generated workflow bundles. |
|
|
67
|
+
| `watch` | `boolean` | `false` | Enable watch mode for development. |
|
|
68
|
+
| `moduleType` | `'es6' \| 'commonjs'` | `'es6'` | SWC module compilation type. Set to `'commonjs'` if your NestJS project compiles to CommonJS (CJS) through SWC. |
|
|
69
|
+
| `distDir` | `string` | `'dist'` | Directory where NestJS compiles `.ts` source files to `.js` (relative to `workingDir`). Used when `moduleType` is `'commonjs'`. Should match the `outDir` in your `tsconfig.json`. |
|
|
70
|
+
| `sourcemap` | `boolean \| 'inline' \| 'linked' \| 'external' \| 'both'` | `'inline'` (dev) / `false` (prod) | Controls source maps on generated workflow bundles. Defaults to `'inline'` in development and `false` in production. Can also be set via the `WORKFLOW_SOURCEMAP` environment variable. |
|
|
71
|
+
|
|
72
|
+
### Returns
|
|
73
|
+
|
|
74
|
+
`forRoot()` returns a `DynamicModule` to include in the `imports` array of your root module.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: withWorkflow
|
|
3
|
-
description: Configure webpack
|
|
3
|
+
description: Configure webpack and Turbopack to transform workflow directives in Next.js.
|
|
4
4
|
type: reference
|
|
5
5
|
summary: Wrap your Next.js config with withWorkflow to enable workflow directive transformation.
|
|
6
6
|
prerequisites:
|
|
7
7
|
- /docs/getting-started/next
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
Configures webpack
|
|
10
|
+
Configures webpack and Turbopack loaders to transform workflow code (`"use step"` and `"use workflow"` directives).
|
|
11
11
|
|
|
12
12
|
## Usage
|
|
13
13
|
|
|
@@ -16,13 +16,13 @@ To enable `"use step"` and `"use workflow"` directives while developing locally
|
|
|
16
16
|
```typescript title="next.config.ts" lineNumbers
|
|
17
17
|
import { withWorkflow } from "workflow/next"; // [!code highlight]
|
|
18
18
|
import type { NextConfig } from "next";
|
|
19
|
-
|
|
19
|
+
|
|
20
20
|
const nextConfig: NextConfig = {
|
|
21
21
|
// … rest of your Next.js config
|
|
22
22
|
};
|
|
23
23
|
|
|
24
24
|
// not required but allows configuring workflow options
|
|
25
|
-
const workflowConfig = {}
|
|
25
|
+
const workflowConfig = {};
|
|
26
26
|
|
|
27
27
|
export default withWorkflow(nextConfig, workflowConfig); // [!code highlight]
|
|
28
28
|
```
|
|
@@ -31,12 +31,36 @@ export default withWorkflow(nextConfig, workflowConfig); // [!code highlight]
|
|
|
31
31
|
If a package in `serverExternalPackages` contains workflow code (`"use step"`,
|
|
32
32
|
`"use workflow"`, or serialization classes), `withWorkflow()` automatically
|
|
33
33
|
removes it from `serverExternalPackages` for the current build and prints a
|
|
34
|
-
warning.
|
|
35
|
-
|
|
34
|
+
warning. Workflow still compiles the package so its directives are transformed.
|
|
35
|
+
Remove that package from `serverExternalPackages` in your
|
|
36
36
|
`next.config` to silence the warning.
|
|
37
37
|
</Callout>
|
|
38
38
|
|
|
39
|
-
###
|
|
39
|
+
### Workflow discovery in Next.js
|
|
40
|
+
|
|
41
|
+
`withWorkflow()` discovers workflows by scanning your Next.js entrypoints (App
|
|
42
|
+
Router `route`, `page`, and `layout` files under `app/` or `src/app/`, and any
|
|
43
|
+
file under `pages/` or `src/pages/`) for `start()` calls imported from
|
|
44
|
+
`workflow/api`. The workflow and step files themselves can live anywhere (for
|
|
45
|
+
example `src/workflows/`); they are discovered transitively through imports, as
|
|
46
|
+
long as a `start()` call in an entrypoint statically reaches them.
|
|
47
|
+
|
|
48
|
+
<Callout type="info">
|
|
49
|
+
Call `start()` from server-side entrypoints, including Route Handlers and Server
|
|
50
|
+
Actions. Don't call workflow functions directly, which bypasses the workflow
|
|
51
|
+
runtime.
|
|
52
|
+
</Callout>
|
|
53
|
+
|
|
54
|
+
### Next.js server actions and `"use server"`
|
|
55
|
+
|
|
56
|
+
Don't put a top-level `"use server"` directive in modules imported by workflow
|
|
57
|
+
or step functions. Workflow transformation wraps imported modules in synchronous
|
|
58
|
+
initializers, and Next.js rejects a `"use server"` directive inside that wrapper
|
|
59
|
+
with errors like `Server Actions must be async functions`. Keep `"use server"`
|
|
60
|
+
on the files that define your Server Actions, and move shared logic into
|
|
61
|
+
separate modules that don't carry the directive.
|
|
62
|
+
|
|
63
|
+
### Monorepos and workspace imports
|
|
40
64
|
|
|
41
65
|
By default, Next.js detects the correct workspace root automatically. If your Next.js app lives in a subdirectory such as `apps/web` and workspace resolution is not working correctly, you can set `outputFileTracingRoot` as a workaround:
|
|
42
66
|
|
|
@@ -68,7 +92,6 @@ const nextConfig: NextConfig = {};
|
|
|
68
92
|
|
|
69
93
|
export default withWorkflow(nextConfig, {
|
|
70
94
|
workflows: {
|
|
71
|
-
lazyDiscovery: true,
|
|
72
95
|
local: {
|
|
73
96
|
port: 4000,
|
|
74
97
|
},
|
|
@@ -79,35 +102,34 @@ export default withWorkflow(nextConfig, {
|
|
|
79
102
|
|
|
80
103
|
| Option | Type | Default | Description |
|
|
81
104
|
| --- | --- | --- | --- |
|
|
82
|
-
| `workflows.lazyDiscovery` | `boolean` | `false` | When `true`, defers workflow discovery until files are requested instead of scanning eagerly at startup. Useful for large projects where startup time matters. |
|
|
83
105
|
| `workflows.local.port` | `number` | — | Overrides the `PORT` environment variable for local development. Has no effect when deployed to Vercel. |
|
|
84
|
-
| `workflows.sourcemap` | `boolean \| 'inline' \| 'linked' \| 'external' \| 'both'` | `'inline'` | Controls source maps on generated workflow bundles. See [Source maps](#source-maps) below. |
|
|
106
|
+
| `workflows.sourcemap` | `boolean \| 'inline' \| 'linked' \| 'external' \| 'both'` | `'inline'` (dev) / `false` (prod) | Controls source maps on generated workflow bundles. See [Source maps](#source-maps) below. |
|
|
85
107
|
|
|
86
108
|
### Source maps
|
|
87
109
|
|
|
88
|
-
The step bundle and intermediate workflow bundle default to `'inline'` source maps so
|
|
110
|
+
The step bundle and intermediate workflow bundle default to `'inline'` source maps **in development** (so stack traces from step errors and workflow virtual machine (VM) errors point at your source files) and to **`false` in production**, so function bundles stay small. The `sourcemap` option lets you change that:
|
|
89
111
|
|
|
90
112
|
| Value | Behavior |
|
|
91
113
|
| --- | --- |
|
|
92
|
-
| `true` / `'inline'` | Base64-encode the source map and append it to the bundle (default). |
|
|
114
|
+
| `true` / `'inline'` | Base64-encode the source map and append it to the bundle (default in development). |
|
|
93
115
|
| `'linked'` | Write a separate `.map` file and add a `sourceMappingURL` comment. |
|
|
94
116
|
| `'external'` | Write a separate `.map` file without the comment. |
|
|
95
117
|
| `'both'` | Emit both inline and external source maps. |
|
|
96
118
|
| `false` | Omit source maps entirely. |
|
|
97
119
|
|
|
98
|
-
|
|
120
|
+
In production, source maps are already off by default. Setting `sourcemap: false` explicitly also turns them off in development, and it drops the inline source map from every bundle while skipping the source-map-support runtime shim on the Vercel step function (the same behavior production gets by default), the main lever for staying under the Vercel 250 MB function size limit. The tradeoff is that workflow VM stack traces will reference generated code (for example, `evalmachine.<anonymous>`) rather than your source files.
|
|
99
121
|
|
|
100
122
|
<Callout type="info">
|
|
101
|
-
Setting `sourcemap` explicitly affects **all** generated bundles (steps, workflows, webhook). The legacy `WORKFLOW_EMIT_SOURCEMAPS_FOR_DEBUGGING=1` environment variable is narrower
|
|
123
|
+
Setting `sourcemap` explicitly affects **all** generated bundles (steps, workflows, webhook). The legacy `WORKFLOW_EMIT_SOURCEMAPS_FOR_DEBUGGING=1` environment variable is narrower: it only toggles source maps on the final workflow wrapper and webhook bundle (which default to off). It continues to work, but new code should use the `sourcemap` option or the `WORKFLOW_SOURCEMAP` environment variable instead.
|
|
102
124
|
</Callout>
|
|
103
125
|
|
|
104
|
-
The option can also be set via the `WORKFLOW_SOURCEMAP` environment variable, which accepts the same values plus `'0'` / `'1'` as aliases for `false` / `true`. Precedence is: explicit config > `WORKFLOW_SOURCEMAP` >
|
|
126
|
+
The option can also be set via the `WORKFLOW_SOURCEMAP` environment variable, which accepts the same values plus `'0'` / `'1'` as aliases for `false` / `true`. Precedence is: explicit config > `WORKFLOW_SOURCEMAP` > the environment-aware default (`'inline'` in development, `false` in production). Development is detected from `next dev` / `NODE_ENV=development`, so the config option and the env var both let you force either behavior in either environment.
|
|
105
127
|
|
|
106
128
|
<Callout type="info">
|
|
107
129
|
The `workflows.local` options only affect local development. When deployed to Vercel, the runtime ignores `local` settings and uses the Vercel world automatically.
|
|
108
130
|
</Callout>
|
|
109
131
|
|
|
110
|
-
## Exporting a
|
|
132
|
+
## Exporting a function
|
|
111
133
|
|
|
112
134
|
|
|
113
135
|
If you are exporting a function in your `next.config` you will need to ensure you call the function returned from `withWorkflow`.
|
|
@@ -136,4 +158,4 @@ export default async function config(
|
|
|
136
158
|
}
|
|
137
159
|
return nextConfig;
|
|
138
160
|
}
|
|
139
|
-
```
|
|
161
|
+
```
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "workflow/nitro"
|
|
3
|
+
description: Nitro module for automatic workflow bundling and route registration.
|
|
4
|
+
type: overview
|
|
5
|
+
summary: Explore the Nitro module that enables workflow directive transformation in Nitro apps.
|
|
6
|
+
related:
|
|
7
|
+
- /docs/getting-started/nitro
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Nitro integration for Workflow SDK. The `workflow/nitro` entry point's default export is a [Nitro module](https://v3.nitro.build/guide/modules): it has no callable API. You enable it by adding it to the `modules` array of your Nitro config and configure it via the `workflow` key.
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
```typescript title="nitro.config.ts" lineNumbers
|
|
15
|
+
import { defineConfig } from "nitro";
|
|
16
|
+
|
|
17
|
+
export default defineConfig({
|
|
18
|
+
serverDir: "./server",
|
|
19
|
+
modules: ["workflow/nitro"], // [!code highlight]
|
|
20
|
+
});
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
When enabled, the module:
|
|
24
|
+
|
|
25
|
+
- Transforms `"use workflow"` and `"use step"` directives during bundling.
|
|
26
|
+
- Builds the workflow, step, and webhook bundles, and rebuilds them on file changes in development.
|
|
27
|
+
- Registers the workflow runtime routes under `/.well-known/workflow/v1/`.
|
|
28
|
+
- Serves a redirect to the local observability dashboard at `/_workflow` in development.
|
|
29
|
+
- Configures function rules for Vercel Functions (queue triggers and `maxDuration`) on the workflow routes when deploying to Vercel.
|
|
30
|
+
- Uses Nitro's `workspaceDir` as the workflow project root so monorepo apps can import sibling workspace packages without extra workflow config.
|
|
31
|
+
|
|
32
|
+
## Module options
|
|
33
|
+
|
|
34
|
+
Options are read from the `workflow` key of your Nitro config. The option type is exported as `ModuleOptions`:
|
|
35
|
+
|
|
36
|
+
```typescript title="nitro.config.ts" lineNumbers
|
|
37
|
+
import { defineConfig } from "nitro";
|
|
38
|
+
import type { ModuleOptions } from "workflow/nitro"; // [!code highlight]
|
|
39
|
+
|
|
40
|
+
const workflow: ModuleOptions = {
|
|
41
|
+
runtime: "nodejs22.x",
|
|
42
|
+
sourcemap: "inline",
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export default defineConfig({
|
|
46
|
+
modules: ["workflow/nitro"],
|
|
47
|
+
workflow, // [!code highlight]
|
|
48
|
+
});
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
| Option | Type | Default | Description |
|
|
52
|
+
| --- | --- | --- | --- |
|
|
53
|
+
| `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. |
|
|
54
|
+
| `typescriptPlugin` | `boolean` | `false` | Adds the `workflow` TypeScript plugin to the generated `tsconfig.json` for integrated development environment (IDE) IntelliSense. |
|
|
55
|
+
| `runtime` | `string` | — | Node.js runtime version for Vercel Functions (for example, `'nodejs22.x'` or `'nodejs24.x'`). Only applies when deploying to Vercel. |
|
|
56
|
+
| `sourcemap` | `boolean \| 'inline' \| 'linked' \| 'external' \| 'both'` | `'inline'` (dev) / `false` (prod) | Controls source maps on generated workflow bundles. Accepts the same values as esbuild's `sourcemap` option. Defaults to `'inline'` in development and `false` in production (smaller function bundles, which helps stay under the Vercel 250 MB function size limit). Set it explicitly, or use the `WORKFLOW_SOURCEMAP` environment variable, to override in either environment. |
|
|
57
|
+
|
|
58
|
+
## Vite-based Nitro
|
|
59
|
+
|
|
60
|
+
If you use Nitro through its Vite plugin (`nitro/vite`) instead of a standalone `nitro.config.ts`, use the [`workflow/vite`](/docs/api-reference/workflow-vite) entry point, which wraps this module as a Vite plugin and accepts the same `ModuleOptions`.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "workflow/nuxt"
|
|
3
|
+
description: Nuxt module for automatic workflow bundling and runtime configuration.
|
|
4
|
+
type: overview
|
|
5
|
+
summary: Explore the Nuxt module that enables workflow directive transformation in Nuxt apps.
|
|
6
|
+
related:
|
|
7
|
+
- /docs/getting-started/nuxt
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Nuxt integration for Workflow SDK. The `workflow/nuxt` entry point's default export is a Nuxt module: it has no callable API. You enable it by adding it to the `modules` array of your Nuxt config and configure it via the `workflow` key.
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
```typescript title="nuxt.config.ts" lineNumbers
|
|
15
|
+
import { defineNuxtConfig } from "nuxt/config";
|
|
16
|
+
|
|
17
|
+
export default defineNuxtConfig({
|
|
18
|
+
modules: ["workflow/nuxt"], // [!code highlight]
|
|
19
|
+
compatibilityDate: "latest",
|
|
20
|
+
});
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
When enabled, the module:
|
|
24
|
+
|
|
25
|
+
- Registers the [`workflow/nitro`](/docs/api-reference/workflow-nitro) module on Nuxt's Nitro server, which transforms `"use workflow"` and `"use step"` directives, builds the workflow bundles, and registers the workflow runtime routes under `/.well-known/workflow/v1/`.
|
|
26
|
+
- Configures Vite to bundle (rather than externalize) the Workflow SDK packages in server-side rendering (SSR) mode so workflow code is transformed correctly.
|
|
27
|
+
- Enables the `workflow` TypeScript plugin by default for integrated development environment (IDE) IntelliSense.
|
|
28
|
+
- Uses Nuxt/Nitro's detected `workspaceDir` so monorepo apps can import sibling workspace packages without extra workflow config.
|
|
29
|
+
|
|
30
|
+
## Module options
|
|
31
|
+
|
|
32
|
+
Options are read from the `workflow` key of your Nuxt config. The option type is exported as `ModuleOptions`:
|
|
33
|
+
|
|
34
|
+
```typescript title="nuxt.config.ts" lineNumbers
|
|
35
|
+
import { defineNuxtConfig } from "nuxt/config";
|
|
36
|
+
|
|
37
|
+
export default defineNuxtConfig({
|
|
38
|
+
modules: ["workflow/nuxt"],
|
|
39
|
+
workflow: {
|
|
40
|
+
typescriptPlugin: false, // [!code highlight]
|
|
41
|
+
},
|
|
42
|
+
compatibilityDate: "latest",
|
|
43
|
+
});
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
| Option | Type | Default | Description |
|
|
47
|
+
| --- | --- | --- | --- |
|
|
48
|
+
| `typescriptPlugin` | `boolean` | `true` | Adds the `workflow` TypeScript plugin to the generated `tsconfig.json` for IDE IntelliSense. Set to `false` to disable it. |
|