workflow 5.0.0-beta.40 → 5.0.0-beta.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/api-reference/workflow-errors/precondition-failed-error.mdx +2 -2
- package/docs/api-reference/workflow-runtime/world/analytics.mdx +4 -0
- package/docs/api-reference/workflow-runtime/world/storage.mdx +18 -3
- package/docs/configuration/runtime-tuning.mdx +33 -22
- package/docs/configuration/worlds.mdx +8 -0
- package/docs/errors/corrupted-event-log.mdx +7 -4
- package/docs/how-it-works/event-sourcing.mdx +11 -3
- package/package.json +11 -11
|
@@ -8,9 +8,9 @@ related:
|
|
|
8
8
|
- /docs/api-reference/workflow-errors/entity-conflict-error
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
`PreconditionFailedError` is thrown by world implementations when an event creation is rejected because the client's event-log snapshot is stale
|
|
11
|
+
`PreconditionFailedError` is thrown by world implementations when an event creation is rejected because the client's event-log snapshot is stale: the log already held more events than the position the creation named. It corresponds to HTTP 412 Precondition Failed semantics.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
No world in this repository throws it. A stale replay does not need to be refused: its log is a prefix rather than a prefix with a hole in it, replay is deterministic on a prefix, and the write it makes next comes back carrying the events it was pushed past (see [Stale reads](/docs/configuration/runtime-tuning#stale-reads-and-why-nothing-has-to-be-rejected)). The error and the runtime's handling of it remain for a world that would rather refuse than report — one that allocates positions somewhere other than the commit, and so cannot report a gap reliably. Event creations that carry no position are never rejected with it.
|
|
14
14
|
|
|
15
15
|
A world rejects only on evidence and accepts the creation whenever it cannot decide, so this error always means the snapshot really was stale — but not receiving it does not prove the snapshot was current.
|
|
16
16
|
|
|
@@ -22,6 +22,10 @@ keywords:
|
|
|
22
22
|
|
|
23
23
|
`world.analytics` is an optional, read-only namespace for observability surfaces — dashboards, CLIs, and admin tools that list large numbers of runs without touching payload data.
|
|
24
24
|
|
|
25
|
+
For observability and inspection listings, prefer this namespace over
|
|
26
|
+
[`world.runs.list()`](/docs/api-reference/workflow-runtime/world/storage#runslist).
|
|
27
|
+
The storage API remains available for operational and payload-bearing reads.
|
|
28
|
+
|
|
25
29
|
It differs from [Storage](/docs/api-reference/workflow-runtime/world/storage) in two ways:
|
|
26
30
|
|
|
27
31
|
- **Metadata only.** Results never include run input/output, step data, or hook tokens. There is no `resolveData` option.
|
|
@@ -81,7 +81,8 @@ const event = await world.events.get(runId, eventId); // [!code highlight]
|
|
|
81
81
|
|
|
82
82
|
### events.list()
|
|
83
83
|
|
|
84
|
-
List events for a run
|
|
84
|
+
List events for a run. Omit `pagination.limit` to return every remaining event,
|
|
85
|
+
or set it to return one bounded page.
|
|
85
86
|
|
|
86
87
|
```typescript lineNumbers
|
|
87
88
|
const result = await world.events.list({ runId, pagination: { cursor } }); // [!code highlight]
|
|
@@ -91,8 +92,11 @@ const result = await world.events.list({ runId, pagination: { cursor } }); // [!
|
|
|
91
92
|
|-----------|------|-------------|
|
|
92
93
|
| `params.runId` | `string` | Filter events by run ID |
|
|
93
94
|
| `params.pagination.cursor` | `string` | Cursor for the next page |
|
|
95
|
+
| `params.pagination.limit` | `number` | Maximum events to return. When omitted, returns every remaining event up to the World's event ceiling. |
|
|
96
|
+
| `params.pagination.sortOrder` | `"asc" \| "desc"` | Event order |
|
|
97
|
+
| `params.resolveData` | `"all" \| "none"` | Include or omit event payload data |
|
|
94
98
|
|
|
95
|
-
**Returns:** `{ data: Event[], cursor
|
|
99
|
+
**Returns:** `{ data: Event[], cursor: string | null, hasMore: boolean }`
|
|
96
100
|
|
|
97
101
|
### events.listByCorrelationId()
|
|
98
102
|
|
|
@@ -129,7 +133,10 @@ const result = await world.events.listByCorrelationId({ // [!code highlight]
|
|
|
129
133
|
|
|
130
134
|
## world.runs
|
|
131
135
|
|
|
132
|
-
Materialized from run events. Use it
|
|
136
|
+
Materialized from run events. Use it for canonical operational reads, including
|
|
137
|
+
reads that require workflow input or output data. For observability dashboards,
|
|
138
|
+
inspection tools, and historical listings, use
|
|
139
|
+
[`world.analytics.runs.list()`](/docs/api-reference/workflow-runtime/world/analytics#runslist).
|
|
133
140
|
|
|
134
141
|
### runs.get()
|
|
135
142
|
|
|
@@ -159,6 +166,14 @@ const result = await world.runs.list({ // [!code highlight]
|
|
|
159
166
|
|
|
160
167
|
**Returns:** `{ data: WorkflowRun[], cursor?: string }`
|
|
161
168
|
|
|
169
|
+
<Callout type="warn">
|
|
170
|
+
Observability and inspection usage of `world.runs.list()` is deprecated. Use
|
|
171
|
+
[`world.analytics.runs.list()`](/docs/api-reference/workflow-runtime/world/analytics#runslist)
|
|
172
|
+
for metadata-only, plan-aware queries backed by the observability pipeline.
|
|
173
|
+
`world.runs.list()` remains supported for operational and payload-bearing
|
|
174
|
+
reads.
|
|
175
|
+
</Callout>
|
|
176
|
+
|
|
162
177
|
### Cancelling Runs
|
|
163
178
|
|
|
164
179
|
To cancel a run, create a `run_cancelled` event via `world.events.create()` (see [world.events](#worldevents) above), or use the CLI or Web UI helpers.
|
|
@@ -43,6 +43,14 @@ For example, a workflow can run a 10-minute inline step even with `WORKFLOW_REPL
|
|
|
43
43
|
- Delivery attempts before a run or step is failed gracefully.
|
|
44
44
|
- Can only be lowered. The default is calibrated so Workflow can record failure before the queue expires the message.
|
|
45
45
|
|
|
46
|
+
### `WORKFLOW_MAX_EVENTS`
|
|
47
|
+
|
|
48
|
+
- Default: `25000`
|
|
49
|
+
- Positive-integer event limit reported by the Local World and enforced by the runtime as `MAX_EVENTS_EXCEEDED`.
|
|
50
|
+
- The Local and Postgres Worlds also use it as the maximum number of events returned when `events.list()` is called without a limit. If more events exist, the response includes `hasMore: true` and a continuation cursor.
|
|
51
|
+
- The Vercel World receives its event limit from the service; this environment variable does not override that service-owned value.
|
|
52
|
+
- Invalid or non-positive values fall back to the default.
|
|
53
|
+
|
|
46
54
|
### `WORKFLOW_REPLAY_DIVERGENCE_MAX_RETRIES`
|
|
47
55
|
|
|
48
56
|
- Default: `3`
|
|
@@ -63,22 +71,36 @@ For example, a workflow can run a 10-minute inline step even with `WORKFLOW_REPL
|
|
|
63
71
|
- Only applies to Worlds with atomic, immutable deployments (the Vercel World). A run whose pinned deployment cannot be reached at all fails immediately regardless of this value.
|
|
64
72
|
- Transient or unknown queue publishing failures use normal queue redelivery and do not consume this budget.
|
|
65
73
|
|
|
66
|
-
### `
|
|
74
|
+
### `WORKFLOW_RESILIENT_STEP_DISPATCH`
|
|
75
|
+
|
|
76
|
+
- Default: disabled
|
|
77
|
+
- When a suspension hands newly created steps to the queue, the runtime publishes each step's execution message in parallel with its `step_created` event write instead of sequencing them, cutting a round trip per dispatched step. The message also carries the serialized step input (`stepInput`), so a transient `step_created` write failure (429 / 5xx / transport) still executes the step — the queue consumer idempotently re-ensures the event before running it, converging with the producer's write on the step's correlation ID. This mirrors resilient start (`runInput`) and the lazy hook resume (`hookInput`).
|
|
78
|
+
- It is off by default because the publish races the create's verdict, and a create can come back refused: as a duplicate this replay should stop pursuing, or as a [stale write](#stale-reads-and-why-nothing-has-to-be-rejected) on a World that refuses rather than reports. Either way the message carrying the payload is already out, so the consumer can materialize a step whose create was refused, and nothing orders the verdict before the consumer's redelivery re-ensure. The sequential path is the only one that gives the message a happens-after edge over it.
|
|
79
|
+
- Even when enabled, the runtime falls back to the sequential create-then-publish dispatch when the step input is too large to inline on the queue message, or when the run's queue transport cannot carry binary payloads (pre-CBOR spec versions).
|
|
80
|
+
- Producer-side recoveries are reported on the suspension span as `workflow.step.resilient_dispatch_recovered`; a consumer that materialized the event reports `workflow.step.resilient_dispatch_materialized`.
|
|
81
|
+
- Set `1` to enable it.
|
|
82
|
+
|
|
83
|
+
### Stale reads, and why nothing has to be rejected
|
|
84
|
+
|
|
85
|
+
- Not a variable: this is how a replay working from an out-of-date event log stays correct, and why no World needs a precondition guard to make it so.
|
|
86
|
+
- Three properties do it together. A reader's log is always a **prefix** of the run's log, never a prefix with a hole in it — positions are allocated by the World at commit, so nothing lands behind a position a reader has already passed. Replay is **deterministic on a prefix**: the same prefix always yields the same decisions, so a shorter log does not mean a different run, only a run that has not caught up. And every write **reports what it missed**: a creation names the position it replayed from (`eventCount`), and the World returns the events occupying the positions it was pushed past. The replay merges those and continues, correcting itself on the write rather than on a read.
|
|
87
|
+
- So a stale replay costs a merge, not a rejection. None of the shipped Worlds refuses a write for being stale.
|
|
88
|
+
- A World *may* refuse instead, with 412 ([`PreconditionFailedError`](/docs/api-reference/workflow-errors/precondition-failed-error)) — appropriate when it allocates positions somewhere other than the commit and cannot report a gap reliably. The runtime handles that: it restarts the replay in the same invocation from a corrected event log, and falls back to a re-invocation with a fresh replay once the restart budget is spent. The rejected write is never retried as-is, because a replay working from a corrected log derives different events.
|
|
89
|
+
- A World that does refuse should only ever do so on evidence, and accept the write in every other case. A rejection then always means the position really was stale, while the absence of one proves nothing about currency.
|
|
90
|
+
- Two runtime behaviors follow from the properties above rather than from any fence. The per-step event-log delta optimization (consuming the delta returned by a step's terminal write instead of issuing an extra `events.list` per step) stays active while the run has an open hook: a `hook_received` missed by the delta window is observed one iteration later, and the next write brings it back. And while a hook is open, inline steps take the await-then-run path even when optimistic inline start is enabled — several invocations race for one step's claim there, and awaiting it means the body runs only for the writer that won.
|
|
91
|
+
|
|
92
|
+
### `WORKFLOW_SLOT_GAP_CHECK`
|
|
67
93
|
|
|
68
94
|
- Default: enabled
|
|
69
|
-
-
|
|
70
|
-
-
|
|
71
|
-
-
|
|
72
|
-
-
|
|
73
|
-
- Backends that do not support the guard ignore the snapshot; they must not declare the capability, so guard-dependent optimizations stay off against them even when the flag is set.
|
|
74
|
-
- The guard only ever rejects on evidence, and it fails open in every other case: a backend that cannot decide — because its record of recent events is incomplete, has expired, or covers only part of the run's history — must accept the write. A rejection therefore always means the snapshot really was incomplete, but the absence of one does not prove it was complete. Busy runs (wide step fan-outs, high hook volume) are the most likely to skip the check.
|
|
75
|
-
- As a result, 412 volume describes a workload rather than the health of a deployment, and a run that never sees one is not evidence the guard is inactive.
|
|
76
|
-
- Set `0` to disable.
|
|
95
|
+
- A replay checks that the [event log](/docs/how-it-works/event-sourcing#event-ids) it loaded is dense before it runs, and fails the run with [`CORRUPTED_EVENT_LOG`](/docs/errors/corrupted-event-log) when a position below the log's highest holds no event. A log missing only its first position, meaning a run whose `run_created` is still being written, is left alone.
|
|
96
|
+
- A position can be briefly empty while the write that occupies it is still committing, so the check re-reads the log a few times before it decides, and the replay continues from whichever log it settled on.
|
|
97
|
+
- The check trades one failure for another. Most holes stand for an event that never happened, and replaying past those is correct. A hole standing for an event that did happen looks identical, and replaying past that one produces a run whose result is silently wrong. Failing is the recoverable side of that trade.
|
|
98
|
+
- Set `0` to replay across holes instead.
|
|
77
99
|
|
|
78
100
|
### `WORKFLOW_PRECONDITION_MAX_INPROCESS_RESTARTS`
|
|
79
101
|
|
|
80
102
|
- Default: `3`
|
|
81
|
-
- How many times a single invocation restarts its replay in-process after
|
|
103
|
+
- How many times a single invocation restarts its replay in-process after an event creation is [rejected as stale](#stale-reads-and-why-nothing-has-to-be-rejected) before it falls back to a re-invocation. No shipped World rejects one, so this budget is reserved for a World that chooses to.
|
|
82
104
|
- A restart reloads the event log and rebuilds the workflow from scratch, so it costs a replay but no queue round trip. A World may attach the missing events to its rejection, in which case the first restart needs no event-log request at all.
|
|
83
105
|
|
|
84
106
|
### `WORKFLOW_PRECONDITION_MAX_REINVOCATIONS`
|
|
@@ -93,17 +115,6 @@ For example, a workflow can run a 10-minute inline step even with `WORKFLOW_REPL
|
|
|
93
115
|
- Delay before a re-invocation caused by a rejected event creation.
|
|
94
116
|
- Unlike an in-process restart, which re-reads immediately, a re-invocation only happens once the in-process budget failed to catch up — so the delay gives the other writers a moment to quiesce.
|
|
95
117
|
|
|
96
|
-
### `WORKFLOW_PER_KIND_CORRELATION_IDS`
|
|
97
|
-
|
|
98
|
-
- Default: disabled
|
|
99
|
-
- Experimental. Gives each kind of entity a workflow creates — steps, waits, hooks, attribute writes, abort controllers, stream IDs — its own sequence of correlation IDs.
|
|
100
|
-
- With one sequence shared by every kind, an ID is an ordinal over the whole run, so a single extra draw of any kind shifts every ID after it. Two concurrent replays of the same run that disagree about one `sleep()` then assign different IDs to every step that follows, and each writes events the other can neither match nor consume, which fails the run with `CORRUPTED_EVENT_LOG`. Per-kind sequences confine that to the kind that actually differs.
|
|
101
|
-
- IDs remain ordered within a kind, so hooks created by your workflow are still listed in creation order. A hook the runtime creates for you, such as the one backing an abort controller, draws from its own kind and so is listed at an arbitrary position relative to your hooks rather than at its creation position.
|
|
102
|
-
- A run must replay under the scheme that minted its IDs. A replay that switches schemes mid-run assigns IDs its own earlier events do not carry, so it can consume none of them and the run fails.
|
|
103
|
-
- On Vercel, a run keeps replaying on the deployment it started on, so it only ever sees the value baked into that deployment. Changing the setting affects new runs only.
|
|
104
|
-
- Elsewhere — `@workflow/world-postgres`, `@workflow/world-local`, any self-hosted process — nothing pins a run to the code that started it. Turn the setting on during a quiet window with no runs in flight, and roll the new value out to your whole fleet at once: a rolling deploy that leaves both values live replays one run under two schemes concurrently, which is the failure the setting exists to reduce.
|
|
105
|
-
- Set `1` to enable.
|
|
106
|
-
|
|
107
118
|
## Inline execution
|
|
108
119
|
|
|
109
120
|
### `WORKFLOW_V2_TIMEOUT_MS`
|
|
@@ -202,7 +213,7 @@ For example, a workflow can run a 10-minute inline step even with `WORKFLOW_REPL
|
|
|
202
213
|
|
|
203
214
|
- Default: enabled
|
|
204
215
|
- On the Vercel World, lets concurrent event-log requests share one HTTP/2 connection instead of one connection per in-flight request.
|
|
205
|
-
- Set `0` to
|
|
216
|
+
- Set `0` to take the event-log requests off HTTP/2 entirely, back to one request per HTTP/1.1 connection. Use this as the kill switch if HTTP/2 turns out to be at fault for event delivery problems.
|
|
206
217
|
|
|
207
218
|
## Queue namespace
|
|
208
219
|
|
|
@@ -273,3 +273,11 @@ Platform-provided values such as `VERCEL_DEPLOYMENT_ID`, `VERCEL_PROJECT_ID`, an
|
|
|
273
273
|
- CLI flag: none
|
|
274
274
|
- Default: `1000`
|
|
275
275
|
- Maximum stream chunks written in one Vercel World request. Larger batches are split.
|
|
276
|
+
|
|
277
|
+
### `WORKFLOW_EVENTS_TRANSPORT`
|
|
278
|
+
|
|
279
|
+
- Factory option: none
|
|
280
|
+
- CLI flag: none
|
|
281
|
+
- Default: `http`
|
|
282
|
+
- Experimental. Set to `ws` to ship workflow run events to the Vercel World over a WebSocket instead of one HTTP request each.
|
|
283
|
+
- Ignored when the World is configured with `projectConfig` and routes through the `api-workflow` proxy — that endpoint is an HTTP-only REST gateway and does not forward a WebSocket upgrade, so events stay on HTTP.
|
|
@@ -21,15 +21,18 @@ Workflow replay diverged <divergenceCount> times after <maxRecoveryReplays> reco
|
|
|
21
21
|
|
|
22
22
|
## Why This Happens
|
|
23
23
|
|
|
24
|
-
Workflows persist their progress as an ordered event log. During replay, the runtime processes each event in sequence — every event must be consumed by a matching callback (e.g., a step or sleep waiting for its result).
|
|
24
|
+
Workflows persist their progress as an ordered event log. During replay, the runtime processes each event in sequence — every event must be consumed by a matching callback (e.g., a step or sleep waiting for its result). An event no callback ever claims is one the runtime would have to drop to finish the run, so it fails the run instead of returning a result that silently ignored it.
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
A delivery written from outside the replay, such as a hook firing or a step completing on another invocation, can land ahead of the events the replay is writing itself. That is ordinary concurrency rather than corruption, so the runtime holds such an event and offers it to each consumer the replay registers afterwards. The failure comes only when the workflow function returns while an event is still held, at which point no consumer can ever appear. A replay that suspends still holding one reports it on the span (`workflow.events.parked.count`, `.event_id`, `.event_type`) and leaves the decision to the replay that follows.
|
|
27
|
+
|
|
28
|
+
Before failing, the runtime retries a divergent replay and surfaces this terminal error only if replay still cannot recover.
|
|
27
29
|
|
|
28
30
|
Common scenarios that produce this error:
|
|
29
31
|
|
|
30
|
-
1. **Duplicate completion events** — Two `wait_completed` events for a single `wait_created`, or two `step_completed` events for the same step. The first is consumed normally,
|
|
31
|
-
2. **Orphaned events** — A `step_completed` or `wait_completed` event whose `correlationId` doesn't match any step or sleep in the workflow code.
|
|
32
|
+
1. **Duplicate completion events** — Two `wait_completed` events for a single `wait_created`, or two `step_completed` events for the same step. The first is consumed normally, and the second resolves something already resolved, so no later consumer can claim it.
|
|
33
|
+
2. **Orphaned events** — A `step_completed` or `wait_completed` event whose `correlationId` doesn't match any step or sleep in the workflow code, so the replay reaches its end still holding it.
|
|
32
34
|
3. **Events after terminal state** — An event that arrives after its corresponding step or wait has already reached a terminal state (e.g., `step_retrying` after `step_completed`).
|
|
35
|
+
4. **A hole in the log** — Events are numbered by their position in the run's log, and those positions are dense, so a position below the log's highest that holds no event means the log the replay loaded is incomplete. The runtime cannot tell a position no write ever occupied from one whose event it failed to read, so it refuses to replay rather than produce a result that may be silently wrong. See [`WORKFLOW_SLOT_GAP_CHECK`](/docs/configuration/runtime-tuning#workflow_slot_gap_check).
|
|
33
36
|
|
|
34
37
|
## What To Do
|
|
35
38
|
|
|
@@ -260,7 +260,7 @@ On Vercel, `requestId` is the platform request ID when available. Other worlds a
|
|
|
260
260
|
|
|
261
261
|
## Entity IDs
|
|
262
262
|
|
|
263
|
-
All entities in the Workflow SDK use a consistent ID format: a 4-character prefix followed by an underscore and a [ULID](https://github.com/ulid/spec) (Universally Unique Lexicographically Sortable Identifier).
|
|
263
|
+
All entities in the Workflow SDK use a consistent ID format: a 4-character prefix followed by an underscore and a fixed-width body. For every entity except events, that body is a [ULID](https://github.com/ulid/spec) (Universally Unique Lexicographically Sortable Identifier). An event's body is its slot number, described below.
|
|
264
264
|
|
|
265
265
|
| Entity | Prefix | Example |
|
|
266
266
|
|--------|--------|---------|
|
|
@@ -268,11 +268,19 @@ All entities in the Workflow SDK use a consistent ID format: a 4-character prefi
|
|
|
268
268
|
| Step | `step_` | `step_01HXYZ123ABC456DEF789GHJ` |
|
|
269
269
|
| Hook | `hook_` | `hook_01HXYZ123ABC456DEF789GHJ` |
|
|
270
270
|
| Wait | `wait_` | `wait_01HXYZ123ABC456DEF789GHJ` |
|
|
271
|
-
| Event | `evnt_` | `
|
|
271
|
+
| Event | `evnt_` | `evnt_00000000000000000000000042` (slot 42) |
|
|
272
272
|
| Stream | `strm_` | `strm_01HXYZ123ABC456DEF789GHJ` |
|
|
273
273
|
|
|
274
274
|
**Why this format?**
|
|
275
275
|
|
|
276
276
|
- **Prefixes enable introspection**: Given any ID, you can immediately identify what type of entity it refers to. This makes debugging, logging, and cross-referencing entities across the system straightforward.
|
|
277
277
|
|
|
278
|
-
- **
|
|
278
|
+
- **Fixed-width bodies enable ordering**: Unlike UUIDs, these bodies sort lexicographically in creation order, so the event log is stored and retrieved in the correct order by sorting IDs alone. Slot numbers get that from counting at a fixed width, which makes string order the same as numeric order. ULIDs get it from the timestamp in their first 48 bits, which also makes a ULID's creation time recoverable from the ID itself.
|
|
279
|
+
|
|
280
|
+
### Event IDs
|
|
281
|
+
|
|
282
|
+
An event ID is a **slot number**: the event's 1-based position in the run's event log, zero-padded to the same width as a ULID. The world assigns it when the event is published, so two writers racing to append never claim the same position and a rejected write leaves no gap behind. Slots are dense, and unique only within a run, so an event ID identifies an event only when paired with its `runId`.
|
|
283
|
+
|
|
284
|
+
Density is what lets a reader tell a complete log from an incomplete one by its length alone. A replay that loads a log with a position missing below the highest one it can see cannot tell an event that was never written from one it failed to read, so it fails the run with [`CORRUPTED_EVENT_LOG`](/docs/errors/corrupted-event-log) rather than replay across the hole. See [`WORKFLOW_SLOT_GAP_CHECK`](/docs/configuration/runtime-tuning#workflow_slot_gap_check).
|
|
285
|
+
|
|
286
|
+
A slot ID carries no timestamp. Zero-padded decimal digits are a subset of the ULID alphabet, so a slot ID passes ULID validation and sorts correctly, but decoding its first 48 bits yields the Unix epoch instead of a creation time. Read `createdAt` on the event when you need to know when it was written, and don't decode the time from an `evnt_` ID you get back from an API, a log line, or a cursor.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "workflow",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.42",
|
|
4
4
|
"description": "Workflow SDK - Build durable, resilient, and observable workflows",
|
|
5
5
|
"main": "dist/typescript-plugin.cjs",
|
|
6
6
|
"type": "module",
|
|
@@ -59,18 +59,18 @@
|
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
61
|
"ms": "2.1.3",
|
|
62
|
-
"@workflow/astro": "5.0.0-beta.
|
|
63
|
-
"@workflow/cli": "5.0.0-beta.
|
|
64
|
-
"@workflow/core": "5.0.0-beta.
|
|
65
|
-
"@workflow/errors": "5.0.0-beta.
|
|
62
|
+
"@workflow/astro": "5.0.0-beta.42",
|
|
63
|
+
"@workflow/cli": "5.0.0-beta.42",
|
|
64
|
+
"@workflow/core": "5.0.0-beta.42",
|
|
65
|
+
"@workflow/errors": "5.0.0-beta.17",
|
|
66
66
|
"@workflow/typescript-plugin": "5.0.0-beta.5",
|
|
67
67
|
"@workflow/utils": "5.0.0-beta.8",
|
|
68
|
-
"@workflow/next": "5.0.0-beta.
|
|
69
|
-
"@workflow/nest": "5.0.0-beta.
|
|
70
|
-
"@workflow/nitro": "5.0.0-beta.
|
|
71
|
-
"@workflow/nuxt": "5.0.0-beta.
|
|
72
|
-
"@workflow/sveltekit": "5.0.0-beta.
|
|
73
|
-
"@workflow/rollup": "5.0.0-beta.
|
|
68
|
+
"@workflow/next": "5.0.0-beta.42",
|
|
69
|
+
"@workflow/nest": "5.0.0-beta.42",
|
|
70
|
+
"@workflow/nitro": "5.0.0-beta.42",
|
|
71
|
+
"@workflow/nuxt": "5.0.0-beta.42",
|
|
72
|
+
"@workflow/sveltekit": "5.0.0-beta.42",
|
|
73
|
+
"@workflow/rollup": "5.0.0-beta.42"
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|
|
76
76
|
"@types/ms": "2.1.0",
|