workflow 4.3.1 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/deploying/building-a-world.mdx +1 -1
- package/docs/errors/hook-conflict.mdx +56 -4
- package/docs/errors/index.mdx +3 -0
- package/docs/how-it-works/event-sourcing.mdx +2 -2
- package/docs/v4/errors/runtime-decryption-failed.mdx +77 -0
- package/docs/v5/errors/index.mdx +56 -0
- package/docs/v5/errors/runtime-decryption-failed.mdx +77 -0
- package/package.json +13 -13
|
@@ -93,7 +93,7 @@ interface Storage {
|
|
|
93
93
|
|
|
94
94
|
**Run Creation:** For `run_created` events, the `runId` parameter may be a client-provided string or `null`. When `null`, your World generates and returns a new `runId`.
|
|
95
95
|
|
|
96
|
-
**Hook Tokens:** Hook tokens must be unique. If a `hook_created` event conflicts with an existing token, return a `hook_conflict` event instead.
|
|
96
|
+
**Hook Tokens:** Hook tokens must be unique. If a `hook_created` event conflicts with an existing token, return a `hook_conflict` event instead and include the active hook owner's run ID as `eventData.conflictingRunId`.
|
|
97
97
|
|
|
98
98
|
**Automatic Hook Disposal:** When a workflow reaches a terminal state (`completed`, `failed`, or `cancelled`), automatically dispose of all associated hooks to release tokens for reuse.
|
|
99
99
|
|
|
@@ -73,9 +73,9 @@ export async function processPayment() {
|
|
|
73
73
|
}
|
|
74
74
|
```
|
|
75
75
|
|
|
76
|
-
## Handling Hook Conflicts
|
|
76
|
+
## Handling Hook Conflicts
|
|
77
77
|
|
|
78
|
-
When a hook conflict occurs, awaiting the hook will throw a `HookConflictError`.
|
|
78
|
+
When a hook conflict occurs, awaiting the hook will throw a `HookConflictError`. The error exposes the token that conflicted and, for current worlds, the run ID that currently owns it. `conflictingRunId` remains optional for compatibility with older persisted events and world implementations, so guard it before delegating:
|
|
79
79
|
|
|
80
80
|
```typescript lineNumbers
|
|
81
81
|
import { createHook } from "workflow";
|
|
@@ -93,14 +93,64 @@ export async function processPayment(orderId: string) {
|
|
|
93
93
|
if (HookConflictError.is(error)) { // [!code highlight]
|
|
94
94
|
// Another workflow is already processing this order
|
|
95
95
|
console.log(`Conflicting token: ${error.token}`);
|
|
96
|
-
|
|
96
|
+
if (error.conflictingRunId) {
|
|
97
|
+
console.log(`Active run: ${error.conflictingRunId}`);
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
success: false,
|
|
101
|
+
reason: "duplicate-processing",
|
|
102
|
+
token: error.token,
|
|
103
|
+
runId: error.conflictingRunId
|
|
104
|
+
};
|
|
97
105
|
}
|
|
98
106
|
throw error; // Re-throw other errors
|
|
99
107
|
}
|
|
100
108
|
}
|
|
101
109
|
```
|
|
102
110
|
|
|
103
|
-
This pattern is useful when you want to detect
|
|
111
|
+
This pattern is useful when you want to detect duplicate processing inside the workflow. Runtime APIs such as `resumeHook()` and `getRun()` must be called outside workflow functions, for example from an API route or in a step.
|
|
112
|
+
|
|
113
|
+
### Delegate to the Active Run
|
|
114
|
+
|
|
115
|
+
In idempotency flows, a conflict means another active run already owns the hook token. You can return the duplicate-processing payload from the workflow, resume the active hook to deliver the payload to the existing run, then use `getRun(result.runId)` to wait for, stream, or cancel the active run:
|
|
116
|
+
|
|
117
|
+
```typescript lineNumbers
|
|
118
|
+
import { getRun, resumeHook, start } from "workflow/api";
|
|
119
|
+
import { processPayment } from "@/workflows/process-payment";
|
|
120
|
+
|
|
121
|
+
type ProcessPaymentResult =
|
|
122
|
+
| { success: true; payment: unknown }
|
|
123
|
+
| {
|
|
124
|
+
success: false;
|
|
125
|
+
reason: "duplicate-processing";
|
|
126
|
+
token: string;
|
|
127
|
+
runId?: string;
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
export async function POST(request: Request) {
|
|
131
|
+
const { orderId, payment } = await request.json();
|
|
132
|
+
const run = await start(processPayment, [orderId]);
|
|
133
|
+
const result = (await run.returnValue) as ProcessPaymentResult;
|
|
134
|
+
|
|
135
|
+
if (
|
|
136
|
+
result.success === false &&
|
|
137
|
+
result.reason === "duplicate-processing" &&
|
|
138
|
+
result.runId
|
|
139
|
+
) {
|
|
140
|
+
await resumeHook(result.token, payment); // [!code highlight]
|
|
141
|
+
const activeRun = getRun(result.runId); // [!code highlight]
|
|
142
|
+
|
|
143
|
+
return Response.json({
|
|
144
|
+
delegatedToRunId: activeRun.runId,
|
|
145
|
+
result: await activeRun.returnValue
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return Response.json(result);
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
If the caller needs live output instead of the final result, return `activeRun.getReadable()` from the same branch. If the duplicate request should replace the active work, call `await activeRun.cancel()` after inspecting the run.
|
|
104
154
|
|
|
105
155
|
## When Hook Tokens Are Released
|
|
106
156
|
|
|
@@ -122,4 +172,6 @@ After a workflow completes, its hook tokens become available for reuse by other
|
|
|
122
172
|
## Related
|
|
123
173
|
|
|
124
174
|
- [Hooks](/docs/foundations/hooks) - Learn more about using hooks in workflows
|
|
175
|
+
- [getRun](/docs/api-reference/workflow-api/get-run) - Retrieve or control the active run
|
|
176
|
+
- [resumeHook](/docs/api-reference/workflow-api/resume-hook) - Deliver data to the active hook
|
|
125
177
|
- [createWebhook](/docs/api-reference/workflow/create-webhook) - Alternative for fixed webhook URLs
|
package/docs/errors/index.mdx
CHANGED
|
@@ -46,6 +46,9 @@ Fix common mistakes when creating and executing workflows in the **Workflow SDK*
|
|
|
46
46
|
<Card href="/docs/errors/workflow-not-registered" title="workflow-not-registered">
|
|
47
47
|
Resolve workflow not registered errors caused by deployment mismatches.
|
|
48
48
|
</Card>
|
|
49
|
+
<Card href="/docs/errors/runtime-decryption-failed" title="runtime-decryption-failed">
|
|
50
|
+
Resolve runtime decryption failures from the SDK's encryption layer.
|
|
51
|
+
</Card>
|
|
49
52
|
</Cards>
|
|
50
53
|
|
|
51
54
|
## Learn More
|
|
@@ -127,7 +127,7 @@ flowchart TD
|
|
|
127
127
|
|
|
128
128
|
Unlike other entities, hooks don't have a `status` field—the states above are conceptual. An "active" hook is one that exists in storage, while "disposed" means the hook has been deleted. When a `hook_disposed` event is created, the hook record is removed rather than updated.
|
|
129
129
|
|
|
130
|
-
While a hook is active, its token is reserved and cannot be used by other workflows. If a workflow attempts to create a hook with a token that is already in use by another active hook, a `hook_conflict` event is recorded instead of `hook_created`. This causes the hook's promise to reject with a `HookConflictError`, which you can detect with `HookConflictError.is(error)`. See the [hook-conflict error](/docs/errors/hook-conflict) documentation for more details.
|
|
130
|
+
While a hook is active, its token is reserved and cannot be used by other workflows. If a workflow attempts to create a hook with a token that is already in use by another active hook, a `hook_conflict` event is recorded instead of `hook_created`. Current worlds include the token and the run ID that currently owns it, though older persisted events or world implementations may only include the token. This causes the hook's promise to reject with a `HookConflictError`, which you can detect with `HookConflictError.is(error)`. See the [hook-conflict error](/docs/errors/hook-conflict) documentation for more details.
|
|
131
131
|
|
|
132
132
|
When a hook is disposed (either explicitly or when its workflow completes), the token is released and can be claimed by future workflows. Hooks are automatically disposed when a workflow reaches a terminal state (`completed`, `failed`, or `cancelled`). The `hook_disposed` event is only needed for explicit disposal before workflow completion.
|
|
133
133
|
|
|
@@ -188,7 +188,7 @@ Events are categorized by the entity type they affect. Each event contains metad
|
|
|
188
188
|
| Event | Description |
|
|
189
189
|
|-------|-------------|
|
|
190
190
|
| `hook_created` | Creates a new hook in `active` state. Contains the hook token and optional metadata. |
|
|
191
|
-
| `hook_conflict` | Records that hook creation failed because the token is already in use by another active hook. The hook is not created, and awaiting the hook will reject with a `HookConflictError`. |
|
|
191
|
+
| `hook_conflict` | Records that hook creation failed because the token is already in use by another active hook. Contains the token and, for current worlds, the active hook owner's run ID. The hook is not created, and awaiting the hook will reject with a `HookConflictError`. |
|
|
192
192
|
| `hook_received` | Records that a payload was delivered to the hook. The hook remains `active` and can receive more payloads. |
|
|
193
193
|
| `hook_disposed` | Deletes the hook from storage (conceptually transitioning to `disposed` state). The token is released for reuse by future workflows. |
|
|
194
194
|
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: runtime-decryption-failed
|
|
3
|
+
description: The SDK's built-in AES-GCM encryption layer failed to encrypt or decrypt a workflow payload.
|
|
4
|
+
type: troubleshooting
|
|
5
|
+
summary: Resolve runtime decryption failures caused by ciphertext corruption, key mismatch, or malformed envelopes.
|
|
6
|
+
prerequisites:
|
|
7
|
+
- /docs/foundations/workflows-and-steps
|
|
8
|
+
related:
|
|
9
|
+
- /docs/foundations/errors-and-retries
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
This error occurs when the Workflow SDK's built-in AES-GCM encryption layer fails while encrypting or decrypting a workflow payload. The SDK encrypts step inputs, step outputs, hook payloads, and other event-log data with a per-run AES-256 key whenever encryption is configured for the deployment.
|
|
13
|
+
|
|
14
|
+
This is an **internal SDK failure** — your workflow code never invokes the encryption primitives directly. When this surfaces, it means the ciphertext, nonce, or auth tag the SDK tried to verify is not the bytes that were originally produced. The run is failed with the `RUNTIME_ERROR` classification.
|
|
15
|
+
|
|
16
|
+
## Error Message
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
AES-256-GCM decryption failed: The operation failed for an operation-specific reason
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The underlying cause is a native Web Crypto [`OperationError`](https://developer.mozilla.org/en-US/docs/Web/API/DOMException#operationerror) — most commonly raised by `AESCipherJob.onDone` in Node's `node:internal/crypto/util` module when the GCM authentication tag does not verify.
|
|
23
|
+
|
|
24
|
+
The thrown `RuntimeDecryptionError` carries a small `context` object with diagnostic fields to help triangulate the source:
|
|
25
|
+
|
|
26
|
+
- `operation` — `'encrypt'` or `'decrypt'`
|
|
27
|
+
- `byteLength` — total byte length of the payload at the failure site
|
|
28
|
+
- `formatPrefix` — the first 4 bytes of the input (`'encr'` for a well-formed encrypted envelope, otherwise a hex dump)
|
|
29
|
+
|
|
30
|
+
## Why This Happens
|
|
31
|
+
|
|
32
|
+
Common causes, in rough order of likelihood:
|
|
33
|
+
|
|
34
|
+
1. **Ciphertext mutation or truncation in transit.** The encrypted payload reached the SDK with bytes that differ from what storage holds. Possible sources include a truncated HTTP response from a workflow-server ref endpoint, an edge-cache miss returning a partial 200, or a proxy drop during streaming. A truncated body whose first 4 bytes happen to still spell `encr` produces the exact "auth tag mismatch" symptom.
|
|
35
|
+
2. **Key resolution mismatch.** The key used to decrypt is not the key that was used to encrypt — e.g. the run's `deploymentId` was not threaded through key resolution and the SDK fell back to the wrong deployment's key material.
|
|
36
|
+
3. **Malformed encrypted envelope.** The envelope is too short to contain the GCM nonce (12 bytes) and auth tag (16 bytes), so decryption is rejected before it begins.
|
|
37
|
+
|
|
38
|
+
## What To Do
|
|
39
|
+
|
|
40
|
+
This error indicates an SDK or infrastructure problem — not a bug in your workflow code. Your workflow code does not need to change.
|
|
41
|
+
|
|
42
|
+
### 1. Upgrade to the latest `workflow` package
|
|
43
|
+
|
|
44
|
+
The underlying issue may have already been identified and fixed:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npm install workflow@latest
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 2. Retry the failed run
|
|
51
|
+
|
|
52
|
+
Since this is a fatal error, the run is automatically marked as `failed`. You can re-run it using the **Re-run** button in the Workflow Dashboard.
|
|
53
|
+
|
|
54
|
+
### 3. Report the issue
|
|
55
|
+
|
|
56
|
+
If the error persists after upgrading, please [open an issue on GitHub](https://github.com/vercel/workflow/issues/new) so we can investigate. Include:
|
|
57
|
+
|
|
58
|
+
- The version of the `workflow` package you are using
|
|
59
|
+
- The run ID(s) of the affected workflow run(s)
|
|
60
|
+
- The full error message, including the `context` fields (`operation`, `byteLength`, `formatPrefix`)
|
|
61
|
+
- Whether the affected workflows make heavy use of large step inputs/outputs (which may indicate the failure is on the lazy-loaded ref read path)
|
|
62
|
+
|
|
63
|
+
## This Error Cannot Be Caught
|
|
64
|
+
|
|
65
|
+
Like other `WorkflowRuntimeError` subclasses, a runtime decryption failure is **not catchable** inside your workflow function. The runtime cannot safely continue executing user code when an event-log payload can't be verified, so the entire run fails immediately and is marked as `failed`.
|
|
66
|
+
|
|
67
|
+
To handle this programmatically from outside the workflow, check the run status:
|
|
68
|
+
|
|
69
|
+
```typescript lineNumbers
|
|
70
|
+
import { getRun } from "workflow/api";
|
|
71
|
+
|
|
72
|
+
const run = getRun("wrun_abc123");
|
|
73
|
+
const status = await run.status;
|
|
74
|
+
if (status === "failed") {
|
|
75
|
+
console.error("Run failed");
|
|
76
|
+
}
|
|
77
|
+
```
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Errors
|
|
3
|
+
description: Fix common mistakes when creating and executing workflows.
|
|
4
|
+
type: overview
|
|
5
|
+
summary: Browse and resolve common workflow errors.
|
|
6
|
+
related:
|
|
7
|
+
- /docs/foundations/errors-and-retries
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Fix common mistakes when creating and executing workflows in the **Workflow SDK**.
|
|
11
|
+
|
|
12
|
+
<Cards>
|
|
13
|
+
<Card href="/docs/errors/fetch-in-workflow" title="fetch-in-workflow">
|
|
14
|
+
Learn how to use fetch in workflow functions.
|
|
15
|
+
</Card>
|
|
16
|
+
<Card href="/docs/errors/hook-conflict" title="hook-conflict">
|
|
17
|
+
Learn how to handle hook token conflicts between workflows.
|
|
18
|
+
</Card>
|
|
19
|
+
<Card href="/docs/errors/node-js-module-in-workflow" title="node-js-module-in-workflow">
|
|
20
|
+
Learn how to use Node.js modules in workflows.
|
|
21
|
+
</Card>
|
|
22
|
+
<Card href="/docs/errors/serialization-failed" title="serialization-failed">
|
|
23
|
+
Learn how to handle serialization failures in workflows.
|
|
24
|
+
</Card>
|
|
25
|
+
<Card href="/docs/errors/start-invalid-workflow-function" title="start-invalid-workflow-function">
|
|
26
|
+
Learn how to start an invalid workflow function.
|
|
27
|
+
</Card>
|
|
28
|
+
<Card href="/docs/errors/timeout-in-workflow" title="timeout-in-workflow">
|
|
29
|
+
Learn how to handle timing delays in workflow functions.
|
|
30
|
+
</Card>
|
|
31
|
+
<Card href="/docs/errors/webhook-invalid-respond-with-value" title="webhook-invalid-respond-with-value">
|
|
32
|
+
Learn how to use the correct `respondWith` values for webhooks.
|
|
33
|
+
</Card>
|
|
34
|
+
<Card href="/docs/errors/webhook-response-not-sent" title="webhook-response-not-sent">
|
|
35
|
+
Learn how to send responses when using manual webhook response mode.
|
|
36
|
+
</Card>
|
|
37
|
+
<Card href="/docs/errors/corrupted-event-log" title="corrupted-event-log">
|
|
38
|
+
Learn how to handle corrupted or invalid event logs.
|
|
39
|
+
</Card>
|
|
40
|
+
<Card href="/docs/errors/step-not-registered" title="step-not-registered">
|
|
41
|
+
Resolve step not registered errors caused by deployment mismatches.
|
|
42
|
+
</Card>
|
|
43
|
+
<Card href="/docs/errors/workflow-not-registered" title="workflow-not-registered">
|
|
44
|
+
Resolve workflow not registered errors caused by deployment mismatches.
|
|
45
|
+
</Card>
|
|
46
|
+
<Card href="/docs/errors/runtime-decryption-failed" title="runtime-decryption-failed">
|
|
47
|
+
Resolve runtime decryption failures from the SDK's encryption layer.
|
|
48
|
+
</Card>
|
|
49
|
+
</Cards>
|
|
50
|
+
|
|
51
|
+
## Learn More
|
|
52
|
+
|
|
53
|
+
* [API Reference](/docs/api-reference) - Complete API documentation
|
|
54
|
+
* [Foundations](/docs/foundations) - Architecture and core concepts
|
|
55
|
+
* [Examples](https://github.com/vercel/workflow) - Sample implementations
|
|
56
|
+
* [GitHub Issues](https://github.com/vercel/workflow/issues) - Report bugs and request features
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: runtime-decryption-failed
|
|
3
|
+
description: The SDK's built-in AES-GCM encryption layer failed to encrypt or decrypt a workflow payload.
|
|
4
|
+
type: troubleshooting
|
|
5
|
+
summary: Resolve runtime decryption failures caused by ciphertext corruption, key mismatch, or malformed envelopes.
|
|
6
|
+
prerequisites:
|
|
7
|
+
- /docs/foundations/workflows-and-steps
|
|
8
|
+
related:
|
|
9
|
+
- /docs/foundations/errors-and-retries
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
This error occurs when the Workflow SDK's built-in AES-GCM encryption layer fails while encrypting or decrypting a workflow payload. The SDK encrypts step inputs, step outputs, hook payloads, and other event-log data with a per-run AES-256 key whenever encryption is configured for the deployment.
|
|
13
|
+
|
|
14
|
+
This is an **internal SDK failure** — your workflow code never invokes the encryption primitives directly. When this surfaces, it means the ciphertext, nonce, or auth tag the SDK tried to verify is not the bytes that were originally produced. The run is failed with the `RUNTIME_ERROR` classification.
|
|
15
|
+
|
|
16
|
+
## Error Message
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
AES-256-GCM decryption failed: The operation failed for an operation-specific reason
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The underlying cause is a native Web Crypto [`OperationError`](https://developer.mozilla.org/en-US/docs/Web/API/DOMException#operationerror) — most commonly raised by `AESCipherJob.onDone` in Node's `node:internal/crypto/util` module when the GCM authentication tag does not verify.
|
|
23
|
+
|
|
24
|
+
The thrown `RuntimeDecryptionError` carries a small `context` object with diagnostic fields to help triangulate the source:
|
|
25
|
+
|
|
26
|
+
- `operation` — `'encrypt'` or `'decrypt'`
|
|
27
|
+
- `byteLength` — total byte length of the payload at the failure site
|
|
28
|
+
- `formatPrefix` — the first 4 bytes of the input (`'encr'` for a well-formed encrypted envelope, otherwise a hex dump)
|
|
29
|
+
|
|
30
|
+
## Why This Happens
|
|
31
|
+
|
|
32
|
+
Common causes, in rough order of likelihood:
|
|
33
|
+
|
|
34
|
+
1. **Ciphertext mutation or truncation in transit.** The encrypted payload reached the SDK with bytes that differ from what storage holds. Possible sources include a truncated HTTP response from a workflow-server ref endpoint, an edge-cache miss returning a partial 200, or a proxy drop during streaming. A truncated body whose first 4 bytes happen to still spell `encr` produces the exact "auth tag mismatch" symptom.
|
|
35
|
+
2. **Key resolution mismatch.** The key used to decrypt is not the key that was used to encrypt — e.g. the run's `deploymentId` was not threaded through key resolution and the SDK fell back to the wrong deployment's key material.
|
|
36
|
+
3. **Malformed encrypted envelope.** The envelope is too short to contain the GCM nonce (12 bytes) and auth tag (16 bytes), so decryption is rejected before it begins.
|
|
37
|
+
|
|
38
|
+
## What To Do
|
|
39
|
+
|
|
40
|
+
This error indicates an SDK or infrastructure problem — not a bug in your workflow code. Your workflow code does not need to change.
|
|
41
|
+
|
|
42
|
+
### 1. Upgrade to the latest `workflow` package
|
|
43
|
+
|
|
44
|
+
The underlying issue may have already been identified and fixed:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npm install workflow@latest
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 2. Retry the failed run
|
|
51
|
+
|
|
52
|
+
Since this is a fatal error, the run is automatically marked as `failed`. You can re-run it using the **Re-run** button in the Workflow Dashboard.
|
|
53
|
+
|
|
54
|
+
### 3. Report the issue
|
|
55
|
+
|
|
56
|
+
If the error persists after upgrading, please [open an issue on GitHub](https://github.com/vercel/workflow/issues/new) so we can investigate. Include:
|
|
57
|
+
|
|
58
|
+
- The version of the `workflow` package you are using
|
|
59
|
+
- The run ID(s) of the affected workflow run(s)
|
|
60
|
+
- The full error message, including the `context` fields (`operation`, `byteLength`, `formatPrefix`)
|
|
61
|
+
- Whether the affected workflows make heavy use of large step inputs/outputs (which may indicate the failure is on the lazy-loaded ref read path)
|
|
62
|
+
|
|
63
|
+
## This Error Cannot Be Caught
|
|
64
|
+
|
|
65
|
+
Like other `WorkflowRuntimeError` subclasses, a runtime decryption failure is **not catchable** inside your workflow function. The runtime cannot safely continue executing user code when an event-log payload can't be verified, so the entire run fails immediately and is marked as `failed`.
|
|
66
|
+
|
|
67
|
+
To handle this programmatically from outside the workflow, check the run status:
|
|
68
|
+
|
|
69
|
+
```typescript lineNumbers
|
|
70
|
+
import { getRun } from "workflow/api";
|
|
71
|
+
|
|
72
|
+
const run = getRun("wrun_abc123");
|
|
73
|
+
const status = await run.status;
|
|
74
|
+
if (status === "failed") {
|
|
75
|
+
console.error("Run failed");
|
|
76
|
+
}
|
|
77
|
+
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "workflow",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.4.0",
|
|
4
4
|
"description": "Workflow SDK - Build durable, resilient, and observable workflows",
|
|
5
5
|
"main": "dist/typescript-plugin.cjs",
|
|
6
6
|
"type": "module",
|
|
@@ -57,18 +57,18 @@
|
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
59
|
"ms": "2.1.3",
|
|
60
|
-
"@workflow/astro": "4.0.
|
|
61
|
-
"@workflow/cli": "4.2.
|
|
62
|
-
"@workflow/core": "4.
|
|
63
|
-
"@workflow/errors": "4.1.
|
|
64
|
-
"@workflow/typescript-plugin": "4.0.
|
|
65
|
-
"@workflow/utils": "4.1.
|
|
66
|
-
"@workflow/next": "4.0.
|
|
67
|
-
"@workflow/nest": "0.0.
|
|
68
|
-
"@workflow/nitro": "4.0
|
|
69
|
-
"@workflow/nuxt": "4.0.
|
|
70
|
-
"@workflow/sveltekit": "4.0.
|
|
71
|
-
"@workflow/rollup": "4.0.
|
|
60
|
+
"@workflow/astro": "4.0.9",
|
|
61
|
+
"@workflow/cli": "4.2.9",
|
|
62
|
+
"@workflow/core": "4.4.0",
|
|
63
|
+
"@workflow/errors": "4.1.4",
|
|
64
|
+
"@workflow/typescript-plugin": "4.0.3",
|
|
65
|
+
"@workflow/utils": "4.1.3",
|
|
66
|
+
"@workflow/next": "4.0.10",
|
|
67
|
+
"@workflow/nest": "0.0.9",
|
|
68
|
+
"@workflow/nitro": "4.1.0",
|
|
69
|
+
"@workflow/nuxt": "4.0.10",
|
|
70
|
+
"@workflow/sveltekit": "4.0.9",
|
|
71
|
+
"@workflow/rollup": "4.0.9"
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
74
|
"@types/ms": "2.1.0",
|