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
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: hydrateData
|
|
3
|
+
description: Hydrate a single serialized value from workflow storage into a plain JavaScript value.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: Use hydrateData to deserialize a single value when hydrateResourceIO's field mapping doesn't apply.
|
|
6
|
+
related:
|
|
7
|
+
- /docs/api-reference/workflow-observability/hydrate-resource-io
|
|
8
|
+
- /docs/api-reference/workflow-observability/observability-revivers
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
Hydrates (deserializes) a single value that was stored by the workflow runtime. This is the lower-level building block behind [`hydrateResourceIO()`](/docs/api-reference/workflow-observability/hydrate-resource-io). Use it when you have a raw serialized value rather than a whole resource, such as a single field from an event payload.
|
|
12
|
+
|
|
13
|
+
```typescript lineNumbers
|
|
14
|
+
import { hydrateData, observabilityRevivers } from "workflow/observability"; // [!code highlight]
|
|
15
|
+
declare const serialized: unknown; // @setup
|
|
16
|
+
|
|
17
|
+
const value = hydrateData(serialized, observabilityRevivers); // [!code highlight]
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## API signature
|
|
21
|
+
|
|
22
|
+
### Parameters
|
|
23
|
+
|
|
24
|
+
| Parameter | Type | Description |
|
|
25
|
+
|-----------|------|-------------|
|
|
26
|
+
| `value` | `unknown` | The serialized value from workflow storage |
|
|
27
|
+
| `revivers` | `Revivers` | Reviver functions for deserialization. Use [`observabilityRevivers`](/docs/api-reference/workflow-observability/observability-revivers) for standard use. |
|
|
28
|
+
|
|
29
|
+
### Returns
|
|
30
|
+
|
|
31
|
+
The hydrated plain JavaScript value. The input is handled by shape:
|
|
32
|
+
|
|
33
|
+
- Format-prefixed binary data (`Uint8Array`) is decoded and parsed from the [devalue](https://github.com/Rich-Harris/devalue) format.
|
|
34
|
+
- Encrypted data is returned as-is (a raw `Uint8Array`). See [Encrypted data](/docs/api-reference/workflow-observability#encrypted-data).
|
|
35
|
+
- Already-plain values (numbers, strings, and `null`) are returned unchanged.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: hydrateResourceIO
|
|
3
|
+
description: Hydrate the serialized data fields of a run, step, hook, or event for display.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: Use hydrateResourceIO with observabilityRevivers to deserialize step input/output for display in observability tools.
|
|
6
|
+
prerequisites:
|
|
7
|
+
- /docs/api-reference/workflow-runtime/get-world
|
|
8
|
+
related:
|
|
9
|
+
- /docs/api-reference/workflow-observability/observability-revivers
|
|
10
|
+
- /docs/api-reference/workflow-runtime/world/storage
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
Hydrates (deserializes) the data fields of a resource returned by the [World SDK](/docs/api-reference/workflow-runtime/world): a workflow run, step, hook, or event. Workflow data is serialized using the [devalue](https://github.com/Rich-Harris/devalue) format, so this is required before displaying step input/output in a user interface.
|
|
14
|
+
|
|
15
|
+
The function dispatches on the resource shape: steps get `input`/`output` hydrated, hooks get `metadata`, events get `eventData`, and runs get `input`/`output`.
|
|
16
|
+
|
|
17
|
+
```typescript lineNumbers
|
|
18
|
+
import { getWorld } from "workflow/runtime";
|
|
19
|
+
import { hydrateResourceIO, observabilityRevivers } from "workflow/observability"; // [!code highlight]
|
|
20
|
+
declare const runId: string; // @setup
|
|
21
|
+
declare const stepId: string; // @setup
|
|
22
|
+
|
|
23
|
+
const world = await getWorld();
|
|
24
|
+
const step = await world.steps.get(runId, stepId);
|
|
25
|
+
const hydrated = hydrateResourceIO(step, observabilityRevivers); // [!code highlight]
|
|
26
|
+
console.log(hydrated.input, hydrated.output);
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## API signature
|
|
30
|
+
|
|
31
|
+
### Parameters
|
|
32
|
+
|
|
33
|
+
| Parameter | Type | Description |
|
|
34
|
+
|-----------|------|-------------|
|
|
35
|
+
| `resource` | `WorkflowRun \| Step \| Hook \| Event` | The resource with serialized data fields |
|
|
36
|
+
| `revivers` | `Revivers` | Reviver functions for deserialization. Use [`observabilityRevivers`](/docs/api-reference/workflow-observability/observability-revivers) for standard use. |
|
|
37
|
+
|
|
38
|
+
### Returns
|
|
39
|
+
|
|
40
|
+
The same resource with its data fields hydrated into plain JavaScript values.
|
|
41
|
+
|
|
42
|
+
<Callout type="info">
|
|
43
|
+
Encrypted data fields pass through as raw `Uint8Array` values rather than being decrypted. See [Encrypted Data](/docs/api-reference/workflow-observability#encrypted-data).
|
|
44
|
+
</Callout>
|
|
45
|
+
|
|
46
|
+
## Examples
|
|
47
|
+
|
|
48
|
+
### Display a run's steps with hydrated I/O
|
|
49
|
+
|
|
50
|
+
```typescript lineNumbers
|
|
51
|
+
import { getWorld } from "workflow/runtime";
|
|
52
|
+
import { hydrateResourceIO, observabilityRevivers } from "workflow/observability"; // [!code highlight]
|
|
53
|
+
declare const runId: string; // @setup
|
|
54
|
+
|
|
55
|
+
const world = await getWorld();
|
|
56
|
+
const steps = await world.steps.list({ runId, resolveData: "all" });
|
|
57
|
+
|
|
58
|
+
for (const step of steps.data) {
|
|
59
|
+
const hydrated = hydrateResourceIO(step, observabilityRevivers); // [!code highlight]
|
|
60
|
+
console.log(step.stepName, hydrated.input, hydrated.output);
|
|
61
|
+
}
|
|
62
|
+
```
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "workflow/observability"
|
|
3
|
+
description: Utilities to hydrate serialized step input/output (I/O) and parse machine-readable workflow names for display.
|
|
4
|
+
type: overview
|
|
5
|
+
summary: Explore utilities for hydrating serialized workflow data and parsing display names in observability tools.
|
|
6
|
+
keywords:
|
|
7
|
+
- workflow/observability
|
|
8
|
+
- hydrateResourceIO
|
|
9
|
+
- observabilityRevivers
|
|
10
|
+
- hydrateData
|
|
11
|
+
- parseStepName
|
|
12
|
+
- parseWorkflowName
|
|
13
|
+
- parseClassName
|
|
14
|
+
- data hydration
|
|
15
|
+
- devalue deserialization
|
|
16
|
+
- display name parsing
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
The `workflow/observability` package provides utilities for observability and debugging tools. Use it to hydrate serialized step input/output (I/O) for display and parse machine-readable names into display-friendly formats.
|
|
20
|
+
|
|
21
|
+
```typescript lineNumbers
|
|
22
|
+
import { // [!code highlight]
|
|
23
|
+
hydrateResourceIO, // [!code highlight]
|
|
24
|
+
observabilityRevivers, // [!code highlight]
|
|
25
|
+
hydrateData, // [!code highlight]
|
|
26
|
+
parseStepName, // [!code highlight]
|
|
27
|
+
parseWorkflowName, // [!code highlight]
|
|
28
|
+
parseClassName, // [!code highlight]
|
|
29
|
+
} from "workflow/observability"; // [!code highlight]
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Data hydration
|
|
33
|
+
|
|
34
|
+
<Cards>
|
|
35
|
+
<Card href="/docs/api-reference/workflow-observability/hydrate-resource-io" title="hydrateResourceIO()">
|
|
36
|
+
Hydrate the serialized data fields of a run, step, hook, or event for display.
|
|
37
|
+
</Card>
|
|
38
|
+
<Card href="/docs/api-reference/workflow-observability/observability-revivers" title="observabilityRevivers">
|
|
39
|
+
Standard revivers for deserializing workflow data types (Date, Map, Set, streams, etc.).
|
|
40
|
+
</Card>
|
|
41
|
+
<Card href="/docs/api-reference/workflow-observability/hydrate-data" title="hydrateData()">
|
|
42
|
+
Hydrate a single serialized value (lower-level than hydrateResourceIO).
|
|
43
|
+
</Card>
|
|
44
|
+
</Cards>
|
|
45
|
+
|
|
46
|
+
## Name parsing
|
|
47
|
+
|
|
48
|
+
<Cards>
|
|
49
|
+
<Card href="/docs/api-reference/workflow-observability/parse-step-name" title="parseStepName()">
|
|
50
|
+
Parse a machine-readable step name into display-friendly components.
|
|
51
|
+
</Card>
|
|
52
|
+
<Card href="/docs/api-reference/workflow-observability/parse-workflow-name" title="parseWorkflowName()">
|
|
53
|
+
Parse a machine-readable workflow name into display-friendly components.
|
|
54
|
+
</Card>
|
|
55
|
+
<Card href="/docs/api-reference/workflow-observability/parse-class-name" title="parseClassName()">
|
|
56
|
+
Parse a machine-readable class ID into display-friendly components.
|
|
57
|
+
</Card>
|
|
58
|
+
</Cards>
|
|
59
|
+
|
|
60
|
+
## Encrypted data
|
|
61
|
+
|
|
62
|
+
When a [World](/docs/api-reference/workflow-runtime/world) stores encrypted data, the hydration utilities intentionally leave encrypted values untouched: [`hydrateData()`](/docs/api-reference/workflow-observability/hydrate-data) and [`hydrateResourceIO()`](/docs/api-reference/workflow-observability/hydrate-resource-io) return encrypted fields as raw `Uint8Array` values so observability tools can detect them and decide how to render them (for example, the Workflow CLI shows an "Encrypted" placeholder). Decryption is handled by the runtime and the World implementation. See [Encryption](/docs/how-it-works/encryption) for how keys are managed.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: observabilityRevivers
|
|
3
|
+
description: Standard reviver functions for deserializing workflow data types in observability tools.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: Pass observabilityRevivers to hydrateResourceIO or hydrateData to deserialize standard workflow data types.
|
|
6
|
+
related:
|
|
7
|
+
- /docs/api-reference/workflow-observability/hydrate-resource-io
|
|
8
|
+
- /docs/api-reference/workflow-observability/hydrate-data
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
A set of reviver functions that handle the workflow serialization format's workflow-specific types (streams, step/workflow function references, class instances, `AbortController`/`AbortSignal`, and `DOMException`), reviving them as display-friendly marker objects or strings. Built-in JavaScript types (`Date`, `Map`, `Set`, `RegExp`, etc.) are handled by the devalue format itself and need no revivers.
|
|
12
|
+
|
|
13
|
+
Pass it as the `revivers` argument to [`hydrateResourceIO()`](/docs/api-reference/workflow-observability/hydrate-resource-io) or [`hydrateData()`](/docs/api-reference/workflow-observability/hydrate-data).
|
|
14
|
+
|
|
15
|
+
```typescript lineNumbers
|
|
16
|
+
import { hydrateResourceIO, observabilityRevivers } from "workflow/observability"; // [!code highlight]
|
|
17
|
+
import type { Step } from "@workflow/world";
|
|
18
|
+
declare const step: Step; // @setup
|
|
19
|
+
|
|
20
|
+
const hydrated = hydrateResourceIO(step, observabilityRevivers); // [!code highlight]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## API signature
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import type { Revivers } from "workflow/observability";
|
|
27
|
+
|
|
28
|
+
declare const observabilityRevivers: Revivers;
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Where `Revivers` is:
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
type Revivers = Record<string, (value: any) => any>;
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Each key is a serialized type tag, and each function revives a serialized value of that type. You can spread `observabilityRevivers` into a custom reviver map to override how specific types are displayed:
|
|
38
|
+
|
|
39
|
+
```typescript lineNumbers
|
|
40
|
+
import { hydrateData, observabilityRevivers } from "workflow/observability";
|
|
41
|
+
declare const value: unknown; // @setup
|
|
42
|
+
|
|
43
|
+
const customRevivers = {
|
|
44
|
+
...observabilityRevivers,
|
|
45
|
+
// Render stream references as plain strings instead of marker objects
|
|
46
|
+
ReadableStream: () => "<stream>",
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const hydrated = hydrateData(value, customRevivers);
|
|
50
|
+
```
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: parseClassName
|
|
3
|
+
description: Parse a machine-readable class ID into display-friendly components.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: Use parseClassName to extract a display-friendly class name from a serialized class instance identifier.
|
|
6
|
+
related:
|
|
7
|
+
- /docs/api-reference/workflow-observability/parse-step-name
|
|
8
|
+
- /docs/api-reference/workflow-observability/parse-workflow-name
|
|
9
|
+
- /docs/api-reference/workflow-serde
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
Serialized class instances reference their class with machine-readable IDs like `class//./src/models//User`. This function parses them into components suitable for display in a user interface.
|
|
13
|
+
|
|
14
|
+
```typescript lineNumbers
|
|
15
|
+
import { parseClassName } from "workflow/observability"; // [!code highlight]
|
|
16
|
+
|
|
17
|
+
const parsed = parseClassName("class//./src/models//User"); // [!code highlight]
|
|
18
|
+
// parsed?.shortName → "User"
|
|
19
|
+
// parsed?.moduleSpecifier → "./src/models"
|
|
20
|
+
// parsed?.functionName → "User"
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## API signature
|
|
24
|
+
|
|
25
|
+
### Parameters
|
|
26
|
+
|
|
27
|
+
| Parameter | Type | Description |
|
|
28
|
+
|-----------|------|-------------|
|
|
29
|
+
| `name` | `string` | The machine-readable class ID |
|
|
30
|
+
|
|
31
|
+
### Returns
|
|
32
|
+
|
|
33
|
+
`{ shortName: string; moduleSpecifier: string; functionName: string } | null`
|
|
34
|
+
|
|
35
|
+
| Property | Description |
|
|
36
|
+
|----------|-------------|
|
|
37
|
+
| `shortName` | The display name of the class (e.g. `"User"`). |
|
|
38
|
+
| `moduleSpecifier` | The module the class is defined in: a relative path (`./src/models`) or a package specifier (`point@0.0.1`). |
|
|
39
|
+
| `functionName` | The class name as recorded by the compiler. |
|
|
40
|
+
|
|
41
|
+
Returns `null` when the input is not a valid class ID.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: parseStepName
|
|
3
|
+
description: Parse a machine-readable step name into display-friendly components.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: Use parseStepName to extract a display-friendly short name from a step's machine-readable identifier.
|
|
6
|
+
related:
|
|
7
|
+
- /docs/api-reference/workflow-observability/parse-workflow-name
|
|
8
|
+
- /docs/api-reference/workflow-observability/parse-class-name
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
Step names are stored as machine-readable identifiers like `step//./src/workflows/order//processPayment`. This function parses them into components suitable for display in a user interface.
|
|
12
|
+
|
|
13
|
+
```typescript lineNumbers
|
|
14
|
+
import { parseStepName } from "workflow/observability"; // [!code highlight]
|
|
15
|
+
|
|
16
|
+
const parsed = parseStepName("step//./src/workflows/order//processPayment"); // [!code highlight]
|
|
17
|
+
// parsed?.shortName → "processPayment"
|
|
18
|
+
// parsed?.moduleSpecifier → "./src/workflows/order"
|
|
19
|
+
// parsed?.functionName → "processPayment"
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## API signature
|
|
23
|
+
|
|
24
|
+
### Parameters
|
|
25
|
+
|
|
26
|
+
| Parameter | Type | Description |
|
|
27
|
+
|-----------|------|-------------|
|
|
28
|
+
| `name` | `string` | The machine-readable step name (e.g. from `step.stepName`) |
|
|
29
|
+
|
|
30
|
+
### Returns
|
|
31
|
+
|
|
32
|
+
`{ shortName: string; moduleSpecifier: string; functionName: string } | null`
|
|
33
|
+
|
|
34
|
+
| Property | Description |
|
|
35
|
+
|----------|-------------|
|
|
36
|
+
| `shortName` | The display name: the last segment of the function name. For nested steps like `processOrder/chargeCard`, this is `"chargeCard"`. |
|
|
37
|
+
| `moduleSpecifier` | The module the step is defined in: a relative path (`./src/workflows/order`) or a package specifier (`@myorg/tasks@2.0.0`). |
|
|
38
|
+
| `functionName` | The full function name including nesting (e.g. `processOrder/chargeCard`). |
|
|
39
|
+
|
|
40
|
+
Returns `null` when the input is not a valid step name.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: parseWorkflowName
|
|
3
|
+
description: Parse a machine-readable workflow name into display-friendly components.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: Use parseWorkflowName to extract a display-friendly short name from a run's workflowName identifier.
|
|
6
|
+
related:
|
|
7
|
+
- /docs/api-reference/workflow-observability/parse-step-name
|
|
8
|
+
- /docs/api-reference/workflow-observability/parse-class-name
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
Workflow names are stored as machine-readable identifiers like `workflow//./src/workflows/order//processOrder`. This function parses them into components suitable for display in a user interface, for example when listing runs from the [World SDK](/docs/api-reference/workflow-runtime/world/storage), where `run.workflowName` holds the machine-readable form.
|
|
12
|
+
|
|
13
|
+
```typescript lineNumbers
|
|
14
|
+
import { parseWorkflowName } from "workflow/observability"; // [!code highlight]
|
|
15
|
+
|
|
16
|
+
const parsed = parseWorkflowName("workflow//./src/workflows/order//processOrder"); // [!code highlight]
|
|
17
|
+
// parsed?.shortName → "processOrder"
|
|
18
|
+
// parsed?.moduleSpecifier → "./src/workflows/order"
|
|
19
|
+
// parsed?.functionName → "processOrder"
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## API signature
|
|
23
|
+
|
|
24
|
+
### Parameters
|
|
25
|
+
|
|
26
|
+
| Parameter | Type | Description |
|
|
27
|
+
|-----------|------|-------------|
|
|
28
|
+
| `name` | `string` | The machine-readable workflow name (e.g. from `run.workflowName`) |
|
|
29
|
+
|
|
30
|
+
### Returns
|
|
31
|
+
|
|
32
|
+
`{ shortName: string; moduleSpecifier: string; functionName: string } | null`
|
|
33
|
+
|
|
34
|
+
| Property | Description |
|
|
35
|
+
|----------|-------------|
|
|
36
|
+
| `shortName` | The display name. For default exports, falls back to the module's short name (e.g. `"order"` for `./src/workflows/order`). |
|
|
37
|
+
| `moduleSpecifier` | The module the workflow is defined in: a relative path (`./src/workflows/order`) or a package specifier (`@myorg/flows@1.0.0`). |
|
|
38
|
+
| `functionName` | The full exported function name. |
|
|
39
|
+
|
|
40
|
+
Returns `null` when the input is not a valid workflow name.
|
|
41
|
+
|
|
42
|
+
## Example: list runs with display names
|
|
43
|
+
|
|
44
|
+
```typescript lineNumbers
|
|
45
|
+
import { getWorld } from "workflow/runtime";
|
|
46
|
+
import { parseWorkflowName } from "workflow/observability"; // [!code highlight]
|
|
47
|
+
|
|
48
|
+
const world = await getWorld();
|
|
49
|
+
const runs = await world.runs.list({ resolveData: "none" });
|
|
50
|
+
|
|
51
|
+
for (const run of runs.data) {
|
|
52
|
+
const parsed = parseWorkflowName(run.workflowName); // [!code highlight]
|
|
53
|
+
console.log(`${parsed?.shortName ?? run.workflowName}: ${run.status}`);
|
|
54
|
+
}
|
|
55
|
+
```
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: createWorld
|
|
3
|
+
description: Create a new World instance from environment configuration.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: Use createWorld to construct a fresh instance of the build-injected World, bypassing the cached instance.
|
|
6
|
+
prerequisites:
|
|
7
|
+
- /docs/api-reference/workflow-runtime/get-world
|
|
8
|
+
related:
|
|
9
|
+
- /docs/api-reference/workflow-runtime/set-world
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
Creates a new [World](/docs/api-reference/workflow-runtime/world) instance by invoking the World factory that was statically injected into the bundle at build time. The `WORKFLOW_TARGET_WORLD` environment variable selects the implementation, such as the local development World or the Vercel production World, when the app is built. Changing the variable at runtime has no effect.
|
|
13
|
+
|
|
14
|
+
Unlike [`getWorld()`](/docs/api-reference/workflow-runtime/get-world), which caches a singleton instance, `createWorld()` constructs a fresh instance on every call. Application code should almost always use `getWorld()`. `createWorld()` is for infrastructure code that manages World lifecycles itself.
|
|
15
|
+
|
|
16
|
+
```typescript lineNumbers
|
|
17
|
+
import { createWorld } from "workflow/runtime";
|
|
18
|
+
|
|
19
|
+
const world = await createWorld(); // [!code highlight]
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## API signature
|
|
23
|
+
|
|
24
|
+
### Parameters
|
|
25
|
+
|
|
26
|
+
This function does not accept any parameters. Configuration comes from the World that was injected at build time (World implementations typically read their own settings from environment variables when constructed).
|
|
27
|
+
|
|
28
|
+
### Returns
|
|
29
|
+
|
|
30
|
+
Returns a `Promise<World>` with a newly constructed World instance.
|
|
31
|
+
|
|
32
|
+
<Callout type="info">
|
|
33
|
+
Tooling that needs to construct a World with explicit (non-environment) configuration should instantiate the specific World implementation directly and register it with [`setWorld()`](/docs/api-reference/workflow-runtime/set-world).
|
|
34
|
+
</Callout>
|
|
35
|
+
|
|
36
|
+
## Related functions
|
|
37
|
+
|
|
38
|
+
- [`getWorld()`](/docs/api-reference/workflow-runtime/get-world): Resolve the cached World instance (preferred in application code).
|
|
39
|
+
- [`setWorld()`](/docs/api-reference/workflow-runtime/set-world): Override the cached World instance.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: getWorldHandlers
|
|
3
|
+
description: Build-time-safe access to the World's queue handlers without binding to runtime environment variables.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: Use getWorldHandlers at build time to access queue handler creation without caching an environment-bound World.
|
|
6
|
+
prerequisites:
|
|
7
|
+
- /docs/api-reference/workflow-runtime/get-world
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Returns a restricted view of the [World](/docs/api-reference/workflow-runtime/world) exposing only the members that are safe to use at build time: `createQueueHandler` and `specVersion`. Framework adapters use it while generating workflow route handlers, before the deployment's runtime environment variables exist.
|
|
11
|
+
|
|
12
|
+
Unlike [`getWorld()`](/docs/api-reference/workflow-runtime/get-world), this function does not cache a fully configured World instance: caching at build time would lock in incomplete environment configuration.
|
|
13
|
+
|
|
14
|
+
```typescript lineNumbers
|
|
15
|
+
import { getWorldHandlers } from "workflow/runtime";
|
|
16
|
+
|
|
17
|
+
const handlers = await getWorldHandlers(); // [!code highlight]
|
|
18
|
+
console.log(handlers.specVersion);
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## API signature
|
|
22
|
+
|
|
23
|
+
### Parameters
|
|
24
|
+
|
|
25
|
+
This function does not accept any parameters.
|
|
26
|
+
|
|
27
|
+
### Returns
|
|
28
|
+
|
|
29
|
+
Returns a `Promise<WorldHandlers>`, where:
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import type { World } from "@workflow/world";
|
|
33
|
+
|
|
34
|
+
type WorldHandlers = Pick<World, "createQueueHandler" | "specVersion">;
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
<Callout type="warn">
|
|
38
|
+
This is SDK infrastructure used by framework adapters at build time. Runtime routes and application code should use [`getWorld()`](/docs/api-reference/workflow-runtime/get-world) instead.
|
|
39
|
+
</Callout>
|
|
40
|
+
|
|
41
|
+
## Related functions
|
|
42
|
+
|
|
43
|
+
- [`getWorld()`](/docs/api-reference/workflow-runtime/get-world): Resolve the full World instance at runtime.
|
|
44
|
+
- [`workflowEntrypoint()`](/docs/api-reference/workflow-runtime/workflow-entrypoint): Create the runtime route handler that shares the full World instance.
|
|
@@ -17,7 +17,7 @@ import { getWorld } from "workflow/runtime";
|
|
|
17
17
|
const world = await getWorld(); // [!code highlight]
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
## API
|
|
20
|
+
## API signature
|
|
21
21
|
|
|
22
22
|
### Parameters
|
|
23
23
|
|
|
@@ -36,24 +36,21 @@ showSections={["returns"]}
|
|
|
36
36
|
|
|
37
37
|
## World SDK
|
|
38
38
|
|
|
39
|
-
The World object provides access to several entity interfaces. See the [World SDK](/docs/api-reference/workflow-
|
|
39
|
+
The World object provides access to several entity interfaces. See the [World SDK](/docs/api-reference/workflow-runtime/world) reference for complete documentation:
|
|
40
40
|
|
|
41
41
|
<Cards>
|
|
42
|
-
<Card href="/docs/api-reference/workflow-
|
|
42
|
+
<Card href="/docs/api-reference/workflow-runtime/world/storage" title="Storage">
|
|
43
43
|
Query runs, steps, hooks, and the underlying event log.
|
|
44
44
|
</Card>
|
|
45
|
-
<Card href="/docs/api-reference/workflow-
|
|
45
|
+
<Card href="/docs/api-reference/workflow-runtime/world/streams" title="Streams">
|
|
46
46
|
Read, write, and manage data streams.
|
|
47
47
|
</Card>
|
|
48
|
-
<Card href="/docs/api-reference/workflow-
|
|
48
|
+
<Card href="/docs/api-reference/workflow-runtime/world/queue" title="Queue">
|
|
49
49
|
Low-level queue dispatch (internal SDK infrastructure).
|
|
50
50
|
</Card>
|
|
51
|
-
<Card href="/docs/api-reference/workflow-api/world/observability" title="Observability">
|
|
52
|
-
Hydrate step I/O, parse display names, decrypt data.
|
|
53
|
-
</Card>
|
|
54
51
|
</Cards>
|
|
55
52
|
|
|
56
|
-
## Data
|
|
53
|
+
## Data hydration
|
|
57
54
|
|
|
58
55
|
Step and run data is serialized using the [devalue](https://github.com/Rich-Harris/devalue) format. Use `workflow/observability` to hydrate it for display:
|
|
59
56
|
|
|
@@ -64,15 +61,15 @@ const step = await world.steps.get(runId, stepId);
|
|
|
64
61
|
const hydrated = hydrateResourceIO(step, observabilityRevivers); // [!code highlight]
|
|
65
62
|
```
|
|
66
63
|
|
|
67
|
-
See [
|
|
64
|
+
See [`workflow/observability`](/docs/api-reference/workflow-observability) for the full hydration and parsing API.
|
|
68
65
|
|
|
69
|
-
### List
|
|
66
|
+
### List workflow runs (display names)
|
|
70
67
|
|
|
71
68
|
List workflow runs and derive human-readable names from the `workflowName` field:
|
|
72
69
|
|
|
73
70
|
```typescript lineNumbers
|
|
74
71
|
import { getWorld } from "workflow/runtime";
|
|
75
|
-
import { parseWorkflowName } from "
|
|
72
|
+
import { parseWorkflowName } from "workflow/observability"; // [!code highlight]
|
|
76
73
|
|
|
77
74
|
export async function GET(req: Request) {
|
|
78
75
|
const url = new URL(req.url);
|
|
@@ -113,11 +110,11 @@ export async function GET(req: Request) {
|
|
|
113
110
|
|
|
114
111
|
<Callout type="info">
|
|
115
112
|
The `workflowName` field contains a machine-readable identifier like `workflow//./src/workflows/order//processOrder`.
|
|
116
|
-
Use `parseWorkflowName()`
|
|
113
|
+
Use [`parseWorkflowName()`](/docs/api-reference/workflow-observability/parse-workflow-name) to extract the `shortName` (e.g., `"processOrder"`)
|
|
117
114
|
and `moduleSpecifier` for display in your UI.
|
|
118
115
|
</Callout>
|
|
119
116
|
|
|
120
|
-
## Related
|
|
117
|
+
## Related functions
|
|
121
118
|
|
|
122
119
|
- [`getRun()`](/docs/api-reference/workflow-api/get-run) - Higher-level API for working with individual runs by ID.
|
|
123
120
|
- [`start()`](/docs/api-reference/workflow-api/start) - Start a new workflow run.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: healthCheck
|
|
3
|
+
description: Verify a deployment's workflow infrastructure by sending a message through the queue pipeline.
|
|
4
|
+
type: reference
|
|
5
|
+
summary: Use healthCheck to verify the workflow endpoint of a deployment processes queue messages end-to-end.
|
|
6
|
+
prerequisites:
|
|
7
|
+
- /docs/api-reference/workflow-runtime/get-world
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Performs an end-to-end health check of a deployment's workflow infrastructure by sending a message through the queue pipeline and verifying it is processed by the workflow endpoint. Because it goes through the queue rather than direct HTTP, it works even when the deployment is behind Deployment Protection on Vercel.
|
|
11
|
+
|
|
12
|
+
```typescript lineNumbers
|
|
13
|
+
import { getWorld, healthCheck } from "workflow/runtime";
|
|
14
|
+
|
|
15
|
+
const world = await getWorld();
|
|
16
|
+
const result = await healthCheck(world); // [!code highlight]
|
|
17
|
+
|
|
18
|
+
if (!result.healthy) {
|
|
19
|
+
console.error("Workflow infrastructure unhealthy:", result.error);
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## API signature
|
|
24
|
+
|
|
25
|
+
### Parameters
|
|
26
|
+
|
|
27
|
+
| Parameter | Type | Description |
|
|
28
|
+
|-----------|------|-------------|
|
|
29
|
+
| `world` | `World` | The World instance to send the health check through |
|
|
30
|
+
| `options` | `HealthCheckOptions` | Optional configuration |
|
|
31
|
+
|
|
32
|
+
Where `HealthCheckOptions` is:
|
|
33
|
+
|
|
34
|
+
| Option | Type | Description |
|
|
35
|
+
|--------|------|-------------|
|
|
36
|
+
| `timeout` | `number` | Milliseconds to wait for the health check response. Default: `30000`. |
|
|
37
|
+
| `deploymentId` | `string` | Deployment to target. Falls back to `process.env.VERCEL_DEPLOYMENT_ID`. |
|
|
38
|
+
| `namespace` | `string` | Queue namespace of the target deployment. Falls back to `WORKFLOW_QUEUE_NAMESPACE`. |
|
|
39
|
+
|
|
40
|
+
### Returns
|
|
41
|
+
|
|
42
|
+
Returns a `Promise<HealthCheckResult>`:
|
|
43
|
+
|
|
44
|
+
| Property | Type | Description |
|
|
45
|
+
|----------|------|-------------|
|
|
46
|
+
| `healthy` | `boolean` | Whether the combined workflow endpoint processed the health check message |
|
|
47
|
+
| `error` | `string \| undefined` | Error message when the check failed |
|
|
48
|
+
| `latencyMs` | `number \| undefined` | Round-trip latency when the check succeeded |
|
|
49
|
+
| `specVersion` | `number \| undefined` | Workflow spec version of the responding deployment |
|
|
50
|
+
| `workflowCoreVersion` | `string \| undefined` | `@workflow/core` version of the responding deployment |
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "workflow/runtime"
|
|
3
|
+
description: Runtime functions for accessing the World instance and wiring up workflow infrastructure.
|
|
4
|
+
type: overview
|
|
5
|
+
summary: Explore runtime functions for resolving the World instance and configuring workflow infrastructure.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
The `workflow/runtime` package provides low-level access to the workflow runtime. Use it to resolve the [World](/docs/api-reference/workflow-runtime/world) instance that backs storage, queuing, and streaming or to wire up workflow infrastructure in custom server environments.
|
|
9
|
+
|
|
10
|
+
## Functions
|
|
11
|
+
|
|
12
|
+
<Cards>
|
|
13
|
+
<Card href="/docs/api-reference/workflow-runtime/get-world" title="getWorld()">
|
|
14
|
+
Async: resolve the World instance for storage, queuing, and streaming backends.
|
|
15
|
+
</Card>
|
|
16
|
+
<Card href="/docs/api-reference/workflow-runtime/world" title="World SDK">
|
|
17
|
+
Low-level API for inspecting runs, steps, events, hooks, streams, and queues, plus metadata-only analytics with attribute search.
|
|
18
|
+
</Card>
|
|
19
|
+
</Cards>
|
|
20
|
+
|
|
21
|
+
## Infrastructure functions
|
|
22
|
+
|
|
23
|
+
These functions are primarily used by framework adapters and custom world setups, and are rarely needed in application code:
|
|
24
|
+
|
|
25
|
+
<Cards>
|
|
26
|
+
<Card href="/docs/api-reference/workflow-runtime/create-world" title="createWorld()">
|
|
27
|
+
Create a World instance from environment configuration.
|
|
28
|
+
</Card>
|
|
29
|
+
<Card href="/docs/api-reference/workflow-runtime/set-world" title="setWorld()">
|
|
30
|
+
Override the cached World instance with a custom World.
|
|
31
|
+
</Card>
|
|
32
|
+
<Card href="/docs/api-reference/workflow-runtime/get-world-handlers" title="getWorldHandlers()">
|
|
33
|
+
Build-time-safe access to the World's queue handlers.
|
|
34
|
+
</Card>
|
|
35
|
+
<Card href="/docs/api-reference/workflow-runtime/workflow-entrypoint" title="workflowEntrypoint()">
|
|
36
|
+
Create the HTTP route handler that executes workflow runs.
|
|
37
|
+
</Card>
|
|
38
|
+
<Card href="/docs/api-reference/workflow-runtime/health-check" title="healthCheck()">
|
|
39
|
+
Check the health of a deployment's workflow infrastructure.
|
|
40
|
+
</Card>
|
|
41
|
+
</Cards>
|