@vite-hub/workflow 0.0.1 → 0.0.3
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 +56 -6
- package/dist/{cloudflare-env-BVUMOgFK.d.ts → cloudflare-env-CIjdFTv6.d.ts} +2 -1
- package/dist/{cloudflare-env-g0Rf3ClH.js → cloudflare-env-mFp2Uj6Z.js} +7 -3
- package/dist/{cloudflare-vite-DcM5YVTP.js → cloudflare-vite-B0zel2Do.js} +4 -5
- package/dist/{config-DkgsQuXz.js → config-BDqB6I4E.js} +43 -5
- package/dist/index.d.ts +43 -18
- package/dist/index.js +99 -111
- package/dist/provider-operation-CWIV4k42.js +62 -0
- package/dist/runtime/cloudflare-runner.d.ts +2 -2
- package/dist/runtime/cloudflare-runner.js +15 -14
- package/dist/runtime/cloudflare-shared.d.ts +2 -2
- package/dist/runtime/cloudflare-shared.js +2 -2
- package/dist/runtime/cloudflare-vite.d.ts +3 -3
- package/dist/runtime/cloudflare-vite.js +1 -1
- package/dist/runtime/execute.d.ts +1 -1
- package/dist/runtime/openworkflow-worker.d.ts +4 -2
- package/dist/runtime/openworkflow-worker.js +63 -6
- package/dist/runtime/openworkflow.d.ts +22 -1
- package/dist/runtime/openworkflow.js +110 -37
- package/dist/runtime/state.d.ts +1 -1
- package/dist/runtime/vercel-vite.d.ts +58 -3
- package/dist/runtime/vercel-vite.js +3 -2
- package/dist/{types-ThDitg7Z.d.ts → types-BUlYBZwH.d.ts} +48 -6
- package/dist/vercel-D2_J5D_Y.js +217 -0
- package/dist/vite.d.ts +2 -5
- package/dist/vite.js +1753 -143
- package/package.json +45 -48
- package/dist/module-UYEnVfxy.js +0 -1546
- package/dist/nitro.d.ts +0 -19
- package/dist/nitro.js +0 -2
- package/dist/openworkflow-amN7IkGO.d.ts +0 -24
- package/dist/runtime/nitro-plugin.d.ts +0 -6
- package/dist/runtime/nitro-plugin.js +0 -14
- /package/dist/{_app-BVWpnNHo.d.ts → _app-DgwN4ulW.d.ts} +0 -0
- /package/dist/{app-BE3EYOWn.js → app-BZpq2cwC.js} +0 -0
- /package/dist/{cloudflare-CeHVSHoN.js → cloudflare-Cds1VIWa.js} +0 -0
- /package/dist/{cloudflare-shared-BIeY2kak.d.ts → cloudflare-shared-BVVgDSdq.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
|
|
10
10
|
`@vite-hub/workflow` defines long-running work once and starts it through one `runWorkflow()` API.
|
|
11
11
|
|
|
12
|
+
Vercel definitions can register a native entry for durable execution. Definitions without one remain source-compatible, but execute inline and do not survive a function restart.
|
|
13
|
+
|
|
12
14
|
## Install
|
|
13
15
|
|
|
14
16
|
```sh
|
|
@@ -16,6 +18,7 @@ pnpm add @vite-hub/workflow
|
|
|
16
18
|
```
|
|
17
19
|
|
|
18
20
|
Add the provider dependency for the workflow provider you configure.
|
|
21
|
+
OpenWorkflow worker lifecycle helpers live at `@vite-hub/workflow/runtime/openworkflow-worker`, so importing the provider-agnostic package root does not require OpenWorkflow's types.
|
|
19
22
|
|
|
20
23
|
## Minimal API
|
|
21
24
|
|
|
@@ -32,6 +35,30 @@ export default defineWorkflow<{ email: string }>(async ({ id, payload, step }) =
|
|
|
32
35
|
})
|
|
33
36
|
```
|
|
34
37
|
|
|
38
|
+
For a durable Vercel run, keep the same context-shaped interface and register a native entry containing the Workflow DevKit directive:
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
import { defineWorkflow, type WorkflowExecutionContext } from "@vite-hub/workflow"
|
|
42
|
+
|
|
43
|
+
interface WelcomePayload {
|
|
44
|
+
email: string
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async function durableWelcome({ payload }: WorkflowExecutionContext<WelcomePayload>) {
|
|
48
|
+
"use workflow"
|
|
49
|
+
|
|
50
|
+
return { sentTo: payload.email }
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async function inlineWelcome({ payload }: WorkflowExecutionContext<WelcomePayload>) {
|
|
54
|
+
return { sentTo: payload.email }
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export default defineWorkflow(inlineWelcome, { native: durableWelcome })
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
ViteHub transforms the native entry with Workflow DevKit when it generates Vercel provider output.
|
|
61
|
+
|
|
35
62
|
```ts
|
|
36
63
|
// server/api/welcome.post.ts
|
|
37
64
|
import { getWorkflowRun, runWorkflow } from "@vite-hub/workflow"
|
|
@@ -43,19 +70,42 @@ export default defineEventHandler(async (event) => {
|
|
|
43
70
|
})
|
|
44
71
|
```
|
|
45
72
|
|
|
73
|
+
`getWorkflowRun()` normalizes provider run and step state, including timestamps, attempts, and failures. `cancelWorkflow()` cancels a durable run, and `resumeWorkflowSignal()` forwards an opaque signal token created inside the native workflow. Providers that cannot perform an operation fail explicitly instead of simulating it.
|
|
74
|
+
|
|
75
|
+
Throw `ViteHubError` when app callers need a stable, inspectable Workflow failure instead of parsing log output or provider-specific messages. ViteHub-owned failures use the package's fixed `WorkflowErrorCode` vocabulary.
|
|
76
|
+
|
|
77
|
+
```ts
|
|
78
|
+
import { ViteHubError } from "@vite-hub/runtime"
|
|
79
|
+
|
|
80
|
+
async function transcribe(recordingId: string) {
|
|
81
|
+
try {
|
|
82
|
+
return await transcribeRecording(recordingId)
|
|
83
|
+
}
|
|
84
|
+
catch (cause) {
|
|
85
|
+
throw new ViteHubError("TRANSCRIPTION_FAILED", "Transcription failed.", {
|
|
86
|
+
cause,
|
|
87
|
+
details: { recordingId },
|
|
88
|
+
})
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
`code` and `message` remain available through `error.toJSON()`. Keep `details` JSON-safe and free of secrets; `toJSON()` omits `cause`, which remains available only on the in-memory error. ViteHub's built-in codes are typed as `WorkflowErrorCode` and use code-derived messages and code-specific details. Workflow Step retry behavior belongs in the Step's retry options rather than the error.
|
|
94
|
+
|
|
46
95
|
```ts
|
|
47
|
-
//
|
|
48
|
-
import {
|
|
96
|
+
// vite.config.ts
|
|
97
|
+
import { hubWorkflow } from "@vite-hub/workflow/vite"
|
|
98
|
+
import { defineConfig } from "vite"
|
|
49
99
|
|
|
50
|
-
export default
|
|
51
|
-
|
|
100
|
+
export default defineConfig({
|
|
101
|
+
plugins: [hubWorkflow()],
|
|
52
102
|
workflow: { provider: "openworkflow" },
|
|
53
103
|
})
|
|
54
104
|
```
|
|
55
105
|
|
|
56
|
-
## Vite
|
|
106
|
+
## Vite Integration
|
|
57
107
|
|
|
58
|
-
|
|
108
|
+
Use `hubWorkflow()` in Vite to discover `server/workflows/<name>.ts`, folder workflows such as `server/workflows/welcome/index.ts` with numbered step files, and `src/<name>.workflow.ts`.
|
|
59
109
|
|
|
60
110
|
Providers map to [OpenWorkflow](https://openworkflow.dev/docs/overview), [Cloudflare Workflows](https://developers.cloudflare.com/workflows/), or [Vercel Workflow](https://vercel.com/docs/workflow).
|
|
61
111
|
|
|
@@ -4,6 +4,7 @@ interface CloudflareWorkerExecutionContext {
|
|
|
4
4
|
waitUntil?: (promise: Promise<unknown>) => void;
|
|
5
5
|
}
|
|
6
6
|
declare function setActiveCloudflareEnv(env: CloudflareWorkerEnv | undefined): void;
|
|
7
|
+
declare function runWithActiveCloudflareEnv<T>(env: CloudflareWorkerEnv | undefined, callback: () => T): T;
|
|
7
8
|
type WaitUntilFn = (promise: Promise<unknown>) => void;
|
|
8
9
|
interface CloudflareRuntimeEvent {
|
|
9
10
|
context: {
|
|
@@ -18,4 +19,4 @@ interface CloudflareRuntimeEvent {
|
|
|
18
19
|
}
|
|
19
20
|
declare function createCloudflareRuntimeEvent(env: CloudflareWorkerEnv, context: CloudflareWorkerExecutionContext | undefined): CloudflareRuntimeEvent;
|
|
20
21
|
//#endregion
|
|
21
|
-
export { setActiveCloudflareEnv as i, CloudflareWorkerExecutionContext as n, createCloudflareRuntimeEvent as r, CloudflareWorkerEnv as t };
|
|
22
|
+
export { setActiveCloudflareEnv as a, runWithActiveCloudflareEnv as i, CloudflareWorkerExecutionContext as n, createCloudflareRuntimeEvent as r, CloudflareWorkerEnv as t };
|
|
@@ -6,11 +6,15 @@ function setActiveCloudflareEnv(env) {
|
|
|
6
6
|
activeEnv = env;
|
|
7
7
|
globalThis.__env__ = env;
|
|
8
8
|
try {
|
|
9
|
-
activeEnvStorage.enterWith(env);
|
|
9
|
+
activeEnvStorage.enterWith({ env });
|
|
10
10
|
} catch {}
|
|
11
11
|
}
|
|
12
|
+
function runWithActiveCloudflareEnv(env, callback) {
|
|
13
|
+
return activeEnvStorage.run({ env }, callback);
|
|
14
|
+
}
|
|
12
15
|
function getActiveCloudflareEnv() {
|
|
13
|
-
|
|
16
|
+
const scoped = activeEnvStorage.getStore();
|
|
17
|
+
return scoped ? scoped.env : activeEnv ?? globalThis.__env__;
|
|
14
18
|
}
|
|
15
19
|
function getCloudflareEnv(event) {
|
|
16
20
|
const target = event;
|
|
@@ -46,4 +50,4 @@ function createCloudflareRuntimeEvent(env, context) {
|
|
|
46
50
|
};
|
|
47
51
|
}
|
|
48
52
|
//#endregion
|
|
49
|
-
export { setActiveCloudflareEnv as i, getCloudflareEnv as n, resolveWaitUntil as r, createCloudflareRuntimeEvent as t };
|
|
53
|
+
export { setActiveCloudflareEnv as a, runWithActiveCloudflareEnv as i, getCloudflareEnv as n, resolveWaitUntil as r, createCloudflareRuntimeEvent as t };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { t as normalizeWorkflowOptions } from "./config-
|
|
2
|
-
import { i as
|
|
1
|
+
import { t as normalizeWorkflowOptions } from "./config-BDqB6I4E.js";
|
|
2
|
+
import { i as runWithActiveCloudflareEnv, t as createCloudflareRuntimeEvent } from "./cloudflare-env-mFp2Uj6Z.js";
|
|
3
3
|
import { runWithWorkflowRuntimeEvent, setWorkflowRuntimeConfig, setWorkflowRuntimeRegistry } from "./runtime/state.js";
|
|
4
|
-
import { t as resolveAppFetch } from "./app-
|
|
4
|
+
import { t as resolveAppFetch } from "./app-BZpq2cwC.js";
|
|
5
5
|
import { H3, toWebHandler } from "h3/cloudflare";
|
|
6
6
|
//#region ../internal/src/runtime/cloudflare-hosted.ts
|
|
7
7
|
function createWebRequestHandler(appHandler) {
|
|
@@ -30,9 +30,8 @@ function createWorkflowCloudflareWorker(options = {}) {
|
|
|
30
30
|
async onRequest({ env, executionContext, handle }) {
|
|
31
31
|
setWorkflowRuntimeConfig(workflowConfig);
|
|
32
32
|
setWorkflowRuntimeRegistry(options.registry);
|
|
33
|
-
setActiveCloudflareEnv(env);
|
|
34
33
|
const runtimeEvent = createCloudflareRuntimeEvent(env, executionContext);
|
|
35
|
-
return await runWithWorkflowRuntimeEvent(runtimeEvent, () => handle(runtimeEvent.context));
|
|
34
|
+
return await runWithActiveCloudflareEnv(env, () => runWithWorkflowRuntimeEvent(runtimeEvent, () => handle(runtimeEvent.context)));
|
|
36
35
|
}
|
|
37
36
|
});
|
|
38
37
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defu } from "defu";
|
|
2
|
-
//#region ../internal/src/
|
|
2
|
+
//#region ../internal/src/hosting.ts
|
|
3
3
|
function normalizeHosting(hosting) {
|
|
4
4
|
const normalized = hosting?.trim().toLowerCase().replaceAll("_", "-") || "";
|
|
5
5
|
if (normalized === "cloudflare") return "cloudflare-module";
|
|
@@ -22,11 +22,26 @@ function readString(value, label) {
|
|
|
22
22
|
if (typeof value !== "string" || !value.trim()) throw new TypeError(`\`${label}\` must be a non-empty string when provided.`);
|
|
23
23
|
return value.trim();
|
|
24
24
|
}
|
|
25
|
+
function readRuntimeConfigValue(value, label) {
|
|
26
|
+
if (typeof value === "undefined") return;
|
|
27
|
+
if (typeof value === "string") return readString(value, label);
|
|
28
|
+
if (!isRuntimeEnvDeclaration(value)) throw new TypeError(`\`${label}\` must be a string or runtime env declaration.`);
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
25
31
|
function readBoolean(value, label) {
|
|
26
32
|
if (typeof value === "undefined") return;
|
|
27
33
|
if (typeof value !== "boolean") throw new TypeError(`\`${label}\` must be a boolean when provided.`);
|
|
28
34
|
return value;
|
|
29
35
|
}
|
|
36
|
+
function isRuntimeEnvDeclaration(value) {
|
|
37
|
+
return isPlainObject(value) && value.kind === "env-variable" && (!("source" in value) || isRuntimeEnvSource(value.source));
|
|
38
|
+
}
|
|
39
|
+
function isRuntimeEnvSource(value) {
|
|
40
|
+
return isPlainObject(value) && value.kind === "env" && typeof value.name === "string" && (!("names" in value) || Array.isArray(value.names) && value.names.every((name) => typeof name === "string"));
|
|
41
|
+
}
|
|
42
|
+
function readDatabaseName(value) {
|
|
43
|
+
return readString(value, "workflow.database");
|
|
44
|
+
}
|
|
30
45
|
function readPositiveInteger(value, label) {
|
|
31
46
|
if (typeof value === "undefined") return;
|
|
32
47
|
if (!Number.isInteger(value) || value <= 0) throw new TypeError(`\`${label}\` must be a positive integer when provided.`);
|
|
@@ -38,7 +53,7 @@ function normalizeOpenWorkflowPostgresOptions(value) {
|
|
|
38
53
|
const namespaceId = readString(value.namespaceId, "workflow.postgres.namespaceId");
|
|
39
54
|
const runMigrations = readBoolean(value.runMigrations, "workflow.postgres.runMigrations");
|
|
40
55
|
const schema = readString(value.schema, "workflow.postgres.schema");
|
|
41
|
-
const url =
|
|
56
|
+
const url = readRuntimeConfigValue(value.url, "workflow.postgres.url");
|
|
42
57
|
return {
|
|
43
58
|
...namespaceId ? { namespaceId } : {},
|
|
44
59
|
...typeof runMigrations === "boolean" ? { runMigrations } : {},
|
|
@@ -46,22 +61,38 @@ function normalizeOpenWorkflowPostgresOptions(value) {
|
|
|
46
61
|
...url ? { url } : {}
|
|
47
62
|
};
|
|
48
63
|
}
|
|
64
|
+
function normalizeOpenWorkflowSqliteOptions(value) {
|
|
65
|
+
if (typeof value === "undefined") return;
|
|
66
|
+
if (!isPlainObject(value)) throw new TypeError("`workflow.sqlite` must be a plain object.");
|
|
67
|
+
const namespaceId = readString(value.namespaceId, "workflow.sqlite.namespaceId");
|
|
68
|
+
const path = readRuntimeConfigValue(value.path, "workflow.sqlite.path");
|
|
69
|
+
const runMigrations = readBoolean(value.runMigrations, "workflow.sqlite.runMigrations");
|
|
70
|
+
return {
|
|
71
|
+
...namespaceId ? { namespaceId } : {},
|
|
72
|
+
...path ? { path } : {},
|
|
73
|
+
...typeof runMigrations === "boolean" ? { runMigrations } : {}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
49
76
|
function normalizeOpenWorkflowWorkerOptions(value) {
|
|
50
77
|
if (typeof value === "undefined") return;
|
|
51
78
|
if (!isPlainObject(value)) throw new TypeError("`workflow.worker` must be a plain object.");
|
|
52
79
|
const concurrency = readPositiveInteger(value.concurrency, "workflow.worker.concurrency");
|
|
53
80
|
return typeof concurrency === "number" ? { concurrency } : {};
|
|
54
81
|
}
|
|
55
|
-
function
|
|
56
|
-
return isPlainObject(options.postgres) &&
|
|
82
|
+
function hasOpenWorkflowStorageConfig(options) {
|
|
83
|
+
return typeof options.database === "string" && !!options.database.trim() || isPlainObject(options.postgres) && isDefinedRuntimeConfigValue(options.postgres.url) || isPlainObject(options.sqlite) && isDefinedRuntimeConfigValue(options.sqlite.path);
|
|
84
|
+
}
|
|
85
|
+
function isDefinedRuntimeConfigValue(value) {
|
|
86
|
+
return typeof value === "string" && !!value.trim() || isRuntimeEnvDeclaration(value);
|
|
57
87
|
}
|
|
58
88
|
function inferProvider(provider, hosting) {
|
|
59
89
|
if (provider === "cloudflare" || provider === "openworkflow" || provider === "vercel") return provider;
|
|
90
|
+
if (hosting.includes("netlify")) throw new TypeError("`workflow.provider` cannot be inferred for Netlify hosting. Set `workflow.provider` explicitly or disable `workflow`.");
|
|
60
91
|
if (hosting.includes("cloudflare")) return "cloudflare";
|
|
61
92
|
return "vercel";
|
|
62
93
|
}
|
|
63
94
|
function inferProviderFromOptions(options, hosting) {
|
|
64
|
-
if (typeof options.provider === "undefined" && (hosting.includes("node") || hosting.includes("docker")) &&
|
|
95
|
+
if (typeof options.provider === "undefined" && (hosting.includes("node") || hosting.includes("docker")) && hasOpenWorkflowStorageConfig(options)) return "openworkflow";
|
|
65
96
|
return inferProvider(options.provider, hosting);
|
|
66
97
|
}
|
|
67
98
|
function resolveProvider(options, hosting) {
|
|
@@ -74,10 +105,17 @@ function resolveProvider(options, hosting) {
|
|
|
74
105
|
const resolved = inferProviderFromOptions(options, hosting);
|
|
75
106
|
if (resolved === "cloudflare") return defu(shared, { provider: "cloudflare" });
|
|
76
107
|
if (resolved === "openworkflow") {
|
|
108
|
+
const database = readDatabaseName(options.database);
|
|
77
109
|
const postgres = normalizeOpenWorkflowPostgresOptions(options.postgres);
|
|
110
|
+
const sqlite = normalizeOpenWorkflowSqliteOptions(options.sqlite);
|
|
78
111
|
const worker = normalizeOpenWorkflowWorkerOptions(options.worker);
|
|
112
|
+
if (database && postgres?.url) throw new TypeError("`workflow.database` and `workflow.postgres.url` cannot both configure OpenWorkflow storage.");
|
|
113
|
+
if (database && sqlite?.path) throw new TypeError("`workflow.database` and `workflow.sqlite.path` cannot both configure OpenWorkflow storage.");
|
|
114
|
+
if (postgres?.url && sqlite?.path) throw new TypeError("`workflow.postgres.url` and `workflow.sqlite.path` cannot both configure OpenWorkflow storage.");
|
|
79
115
|
return defu({
|
|
116
|
+
...database ? { database } : {},
|
|
80
117
|
...postgres ? { postgres } : {},
|
|
118
|
+
...sqlite ? { sqlite } : {},
|
|
81
119
|
...worker ? { worker } : {}
|
|
82
120
|
}, shared, { provider: "openworkflow" });
|
|
83
121
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { A as
|
|
1
|
+
import { A as WorkflowStepFunction, C as WorkflowProviderStep, D as WorkflowSharedOptions, E as WorkflowRunStep, M as WorkflowStepRunner, O as WorkflowSignalResult, S as WorkflowProviderOptions, T as WorkflowRunStatus, _ as WorkflowHandle, a as InferredWorkflowProviderOptions, b as WorkflowModuleProviderOptions, c as OpenWorkflowWorkerOptions, d as WorkflowCreateOptions, f as WorkflowDeferOptions, g as WorkflowExecutionContext, h as WorkflowDefinitionRegistry, i as DiscoveredWorkflowDefinition, j as WorkflowStepOptions, k as WorkflowStartOptions, l as ResolvedWorkflowOptions, m as WorkflowDefinitionOptions, n as CloudflareWorkflowInstance, o as OpenWorkflowPostgresOptions, p as WorkflowDefinition, r as CloudflareWorkflowProviderOptions, s as OpenWorkflowProviderOptions, t as CloudflareWorkflowBinding, u as VercelWorkflowProviderOptions, v as WorkflowHandler, w as WorkflowRun, x as WorkflowProvider, y as WorkflowModuleOptions } from "./types-BUlYBZwH.js";
|
|
2
2
|
import { createWorkflowCloudflareWorker } from "./runtime/cloudflare-vite.js";
|
|
3
|
-
import {
|
|
3
|
+
import { ViteHubError } from "@vite-hub/runtime";
|
|
4
4
|
|
|
5
5
|
//#region src/config.d.ts
|
|
6
6
|
interface WorkflowResolutionInput {
|
|
@@ -9,23 +9,46 @@ interface WorkflowResolutionInput {
|
|
|
9
9
|
declare function normalizeWorkflowOptions(options: WorkflowModuleOptions | undefined, input?: WorkflowResolutionInput): ResolvedWorkflowOptions | undefined;
|
|
10
10
|
//#endregion
|
|
11
11
|
//#region src/definition.d.ts
|
|
12
|
-
declare function defineWorkflow<TPayload = unknown, TResult = unknown>(handler: WorkflowHandler<TPayload, TResult>, options?: WorkflowDefinitionOptions): WorkflowDefinition<TPayload, TResult>;
|
|
12
|
+
declare function defineWorkflow<TPayload = unknown, TResult = unknown>(handler: WorkflowHandler<TPayload, TResult>, options?: WorkflowDefinitionOptions<TPayload, TResult>): WorkflowDefinition<TPayload, TResult>;
|
|
13
13
|
//#endregion
|
|
14
14
|
//#region src/errors.d.ts
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
readonly
|
|
24
|
-
readonly
|
|
25
|
-
readonly
|
|
26
|
-
readonly
|
|
27
|
-
|
|
28
|
-
|
|
15
|
+
declare const workflowErrorMessages: {
|
|
16
|
+
readonly OPENWORKFLOW_BACKEND_CLOSE_FAILED: "OpenWorkflow backend cleanup failed.";
|
|
17
|
+
readonly OPENWORKFLOW_RUNTIME_RESET: "OpenWorkflow runtime was reset while it was being acquired.";
|
|
18
|
+
readonly OPENWORKFLOW_WORKER_STOP_FAILED: "OpenWorkflow worker stop failed.";
|
|
19
|
+
readonly VERCEL_WORKFLOW_SDK_LOAD_FAILED: "Vercel Workflow DevKit load failed. Install the optional workflow peer dependency.";
|
|
20
|
+
readonly WORKFLOW_DEFINITION_NOT_FOUND: "Workflow definition was not found.";
|
|
21
|
+
readonly WORKFLOW_DISABLED: "Workflow is disabled.";
|
|
22
|
+
readonly WORKFLOW_NATIVE_ENTRY_INVALID: "Workflow has no transformed native Vercel entry.";
|
|
23
|
+
readonly WORKFLOW_NATIVE_ENTRY_REQUIRED: "Workflow has no native durable entry for Vercel.";
|
|
24
|
+
readonly WORKFLOW_OPERATION_UNSUPPORTED: "Workflow provider operation is unsupported.";
|
|
25
|
+
readonly WORKFLOW_PROVIDER_OPERATION_FAILED: "Workflow provider operation failed.";
|
|
26
|
+
readonly WORKFLOW_RUN_ID_UNSUPPORTED: "Native Vercel workflows assign their own run IDs.";
|
|
27
|
+
};
|
|
28
|
+
declare const workflowProviderNames: readonly ["cloudflare", "openworkflow", "vercel"];
|
|
29
|
+
declare const workflowOperationNames: readonly ["cancel", "cancellation", "connect", "create", "get", "get-run", "import", "list-steps", "resume-signal", "run", "signals", "start", "status"];
|
|
30
|
+
type WorkflowErrorCode = keyof typeof workflowErrorMessages;
|
|
31
|
+
type WorkflowOperationName = typeof workflowOperationNames[number];
|
|
32
|
+
type WorkflowProviderName = typeof workflowProviderNames[number];
|
|
33
|
+
type WorkflowNameDetails = {
|
|
34
|
+
name?: string;
|
|
35
|
+
};
|
|
36
|
+
type VercelWorkflowDetails = {
|
|
37
|
+
name?: string;
|
|
38
|
+
provider: "vercel";
|
|
39
|
+
};
|
|
40
|
+
type WorkflowOperationDetails = {
|
|
41
|
+
operation: WorkflowOperationName;
|
|
42
|
+
provider: WorkflowProviderName;
|
|
43
|
+
};
|
|
44
|
+
type WorkflowProviderOperationDetails = WorkflowOperationDetails & {
|
|
45
|
+
status?: number;
|
|
46
|
+
};
|
|
47
|
+
type WorkflowErrorDetails<TCode extends WorkflowErrorCode = WorkflowErrorCode> = TCode extends "OPENWORKFLOW_BACKEND_CLOSE_FAILED" | "OPENWORKFLOW_RUNTIME_RESET" | "OPENWORKFLOW_WORKER_STOP_FAILED" ? {
|
|
48
|
+
provider: "openworkflow";
|
|
49
|
+
} : TCode extends "VERCEL_WORKFLOW_SDK_LOAD_FAILED" ? {
|
|
50
|
+
provider: "vercel";
|
|
51
|
+
} : TCode extends "WORKFLOW_DEFINITION_NOT_FOUND" ? WorkflowNameDetails : TCode extends "WORKFLOW_DISABLED" ? Record<string, never> : TCode extends "WORKFLOW_NATIVE_ENTRY_INVALID" | "WORKFLOW_NATIVE_ENTRY_REQUIRED" | "WORKFLOW_RUN_ID_UNSUPPORTED" ? VercelWorkflowDetails : TCode extends "WORKFLOW_OPERATION_UNSUPPORTED" ? WorkflowOperationDetails : TCode extends "WORKFLOW_PROVIDER_OPERATION_FAILED" ? WorkflowProviderOperationDetails : never;
|
|
29
52
|
//#endregion
|
|
30
53
|
//#region src/integrations/cloudflare.d.ts
|
|
31
54
|
declare function getCloudflareWorkflowBindingName(name: string): string;
|
|
@@ -44,6 +67,8 @@ declare function createWorkflow<TPayload = unknown, TResult = unknown>(name: str
|
|
|
44
67
|
declare function createWorkflow<TPayload = unknown, TResult = unknown>(name: string, handler: WorkflowHandler<TPayload, TResult>, options?: WorkflowCreateOptions<TPayload, TResult>): WorkflowHandle<TPayload, TResult>;
|
|
45
68
|
declare function runWorkflow<TPayload = unknown, TResult = unknown>(name: string, payload?: TPayload, options?: WorkflowDeferOptions): Promise<WorkflowRun<TPayload, TResult>>;
|
|
46
69
|
declare function getWorkflowRun<TPayload = unknown, TResult = unknown>(name: string, id: string): Promise<WorkflowRun<TPayload, TResult>>;
|
|
70
|
+
declare function cancelWorkflow<TPayload = unknown, TResult = unknown>(name: string, id: string): Promise<WorkflowRun<TPayload, TResult>>;
|
|
71
|
+
declare function resumeWorkflowSignal<TPayload = unknown>(token: string, payload: TPayload): Promise<WorkflowSignalResult>;
|
|
47
72
|
declare function deferWorkflow<TPayload = unknown>(name: string, payload?: TPayload, options?: WorkflowStartOptions): Promise<WorkflowRun<TPayload>>;
|
|
48
73
|
//#endregion
|
|
49
74
|
//#region src/runtime/payload.d.ts
|
|
@@ -62,4 +87,4 @@ declare function readRequestPayload<T = unknown>(request: Request): Promise<T>;
|
|
|
62
87
|
declare function validatePayload<T>(payload: unknown, schema: PayloadValidator<T>): Promise<T>;
|
|
63
88
|
declare function readValidatedPayload<T>(request: Request, schema: PayloadValidator<T>): Promise<T>;
|
|
64
89
|
//#endregion
|
|
65
|
-
export { type CloudflareWorkflowBinding, type CloudflareWorkflowInstance, type CloudflareWorkflowProviderOptions, type DiscoveredWorkflowDefinition, type InferredWorkflowProviderOptions, type OpenWorkflowPostgresOptions, type OpenWorkflowProviderOptions, type OpenWorkflowWorkerOptions, type ResolvedWorkflowOptions, type VercelWorkflowProviderOptions, type WorkflowCreateOptions, type WorkflowDeferOptions, type WorkflowDefinition, type WorkflowDefinitionOptions, type WorkflowDefinitionRegistry,
|
|
90
|
+
export { type CloudflareWorkflowBinding, type CloudflareWorkflowInstance, type CloudflareWorkflowProviderOptions, type DiscoveredWorkflowDefinition, type InferredWorkflowProviderOptions, type OpenWorkflowPostgresOptions, type OpenWorkflowProviderOptions, type OpenWorkflowWorkerOptions, type ResolvedWorkflowOptions, type VercelWorkflowProviderOptions, type WorkflowCreateOptions, type WorkflowDeferOptions, type WorkflowDefinition, type WorkflowDefinitionOptions, type WorkflowDefinitionRegistry, type WorkflowErrorCode, type WorkflowErrorDetails, type WorkflowExecutionContext, type WorkflowHandle, type WorkflowHandler, type WorkflowModuleOptions, type WorkflowModuleProviderOptions, type WorkflowOperationName, type WorkflowProvider, type WorkflowProviderName, type WorkflowProviderOptions, type WorkflowProviderStep, type WorkflowRun, type WorkflowRunStatus, type WorkflowRunStep, type WorkflowSharedOptions, type WorkflowSignalResult, type WorkflowStartOptions, type WorkflowStepFunction, type WorkflowStepOptions, type WorkflowStepRunner, cancelWorkflow, createWorkflow, createWorkflowCloudflareWorker, deferWorkflow, defineWorkflow, getCloudflareWorkflowBindingName, getCloudflareWorkflowClassName, getCloudflareWorkflowName, getVercelWorkflowName, getWorkflowRun, normalizeWorkflowOptions, readRequestPayload, readValidatedPayload, resumeWorkflowSignal, runWorkflow, validatePayload };
|