@workflow/core 4.0.1-beta.4 → 4.0.1-beta.40
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/LICENSE.md +201 -21
- package/dist/builtins.js +1 -1
- package/dist/class-serialization.d.ts +26 -0
- package/dist/class-serialization.d.ts.map +1 -0
- package/dist/class-serialization.js +66 -0
- package/dist/create-hook.js +1 -1
- package/dist/define-hook.d.ts +40 -25
- package/dist/define-hook.d.ts.map +1 -1
- package/dist/define-hook.js +22 -27
- package/dist/events-consumer.js +1 -1
- package/dist/flushable-stream.d.ts +82 -0
- package/dist/flushable-stream.d.ts.map +1 -0
- package/dist/flushable-stream.js +214 -0
- package/dist/global.d.ts +12 -2
- package/dist/global.d.ts.map +1 -1
- package/dist/global.js +32 -8
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/logger.js +1 -1
- package/dist/observability.d.ts +60 -0
- package/dist/observability.d.ts.map +1 -1
- package/dist/observability.js +175 -19
- package/dist/parse-name.d.ts +12 -0
- package/dist/parse-name.d.ts.map +1 -1
- package/dist/parse-name.js +28 -3
- package/dist/private.d.ts +10 -1
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +6 -1
- package/dist/runtime/helpers.d.ts +64 -0
- package/dist/runtime/helpers.d.ts.map +1 -0
- package/dist/runtime/helpers.js +243 -0
- package/dist/runtime/resume-hook.d.ts +16 -11
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +76 -64
- package/dist/runtime/start.d.ts +10 -0
- package/dist/runtime/start.d.ts.map +1 -1
- package/dist/runtime/start.js +56 -45
- package/dist/runtime/step-handler.d.ts +7 -0
- package/dist/runtime/step-handler.d.ts.map +1 -0
- package/dist/runtime/step-handler.js +353 -0
- package/dist/runtime/suspension-handler.d.ts +20 -0
- package/dist/runtime/suspension-handler.d.ts.map +1 -0
- package/dist/runtime/suspension-handler.js +179 -0
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +22 -21
- package/dist/runtime.d.ts +3 -7
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +76 -334
- package/dist/schemas.d.ts +1 -15
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +2 -15
- package/dist/serialization.d.ts +74 -10
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +295 -56
- package/dist/sleep.d.ts +33 -0
- package/dist/sleep.d.ts.map +1 -0
- package/dist/sleep.js +10 -0
- package/dist/source-map.d.ts +10 -0
- package/dist/source-map.d.ts.map +1 -0
- package/dist/source-map.js +56 -0
- package/dist/step/context-storage.d.ts +2 -0
- package/dist/step/context-storage.d.ts.map +1 -1
- package/dist/step/context-storage.js +1 -1
- package/dist/step/get-closure-vars.d.ts +9 -0
- package/dist/step/get-closure-vars.d.ts.map +1 -0
- package/dist/step/get-closure-vars.js +16 -0
- package/dist/step/get-step-metadata.js +1 -1
- package/dist/step/get-workflow-metadata.js +1 -1
- package/dist/step/writable-stream.d.ts +14 -0
- package/dist/step/writable-stream.d.ts.map +1 -0
- package/dist/step/writable-stream.js +30 -0
- package/dist/step.d.ts +1 -1
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +51 -11
- package/dist/symbols.d.ts +7 -0
- package/dist/symbols.d.ts.map +1 -1
- package/dist/symbols.js +8 -1
- package/dist/telemetry/semantic-conventions.d.ts +66 -38
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +16 -3
- package/dist/telemetry.d.ts +8 -4
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +39 -6
- package/dist/types.d.ts +0 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -26
- package/dist/util.d.ts +9 -27
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +37 -44
- package/dist/vm/index.js +2 -2
- package/dist/vm/uuid.js +1 -1
- package/dist/workflow/create-hook.js +1 -1
- package/dist/workflow/define-hook.d.ts +3 -3
- package/dist/workflow/define-hook.d.ts.map +1 -1
- package/dist/workflow/define-hook.js +1 -1
- package/dist/workflow/get-workflow-metadata.js +1 -1
- package/dist/workflow/hook.d.ts.map +1 -1
- package/dist/workflow/hook.js +6 -9
- package/dist/workflow/index.d.ts +1 -0
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +2 -1
- package/dist/workflow/sleep.d.ts +4 -0
- package/dist/workflow/sleep.d.ts.map +1 -0
- package/dist/workflow/sleep.js +54 -0
- package/dist/workflow/writable-stream.js +1 -1
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +60 -9
- package/dist/writable-stream.d.ts +5 -4
- package/dist/writable-stream.d.ts.map +1 -1
- package/dist/writable-stream.js +7 -6
- package/package.json +23 -18
- package/dist/builtins.js.map +0 -1
- package/dist/create-hook.js.map +0 -1
- package/dist/define-hook.js.map +0 -1
- package/dist/events-consumer.js.map +0 -1
- package/dist/global.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/logger.js.map +0 -1
- package/dist/observability.js.map +0 -1
- package/dist/parse-name.js.map +0 -1
- package/dist/private.js.map +0 -1
- package/dist/runtime/resume-hook.js.map +0 -1
- package/dist/runtime/start.js.map +0 -1
- package/dist/runtime/world.js.map +0 -1
- package/dist/runtime.js.map +0 -1
- package/dist/schemas.js.map +0 -1
- package/dist/serialization.js.map +0 -1
- package/dist/step/context-storage.js.map +0 -1
- package/dist/step/get-step-metadata.js.map +0 -1
- package/dist/step/get-workflow-metadata.js.map +0 -1
- package/dist/step.js.map +0 -1
- package/dist/symbols.js.map +0 -1
- package/dist/telemetry/semantic-conventions.js.map +0 -1
- package/dist/telemetry.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/util.js.map +0 -1
- package/dist/vm/index.js.map +0 -1
- package/dist/vm/uuid.js.map +0 -1
- package/dist/workflow/create-hook.js.map +0 -1
- package/dist/workflow/define-hook.js.map +0 -1
- package/dist/workflow/get-workflow-metadata.js.map +0 -1
- package/dist/workflow/hook.js.map +0 -1
- package/dist/workflow/index.js.map +0 -1
- package/dist/workflow/writable-stream.js.map +0 -1
- package/dist/workflow.js.map +0 -1
- package/dist/writable-stream.js.map +0 -1
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { WorkflowAPIError } from '@workflow/errors';
|
|
2
|
+
import { dehydrateStepArguments } from '../serialization.js';
|
|
3
|
+
import * as Attribute from '../telemetry/semantic-conventions.js';
|
|
4
|
+
import { serializeTraceCarrier } from '../telemetry.js';
|
|
5
|
+
import { queueMessage } from './helpers.js';
|
|
6
|
+
/**
|
|
7
|
+
* Processes a single hook by creating it in the database and event log.
|
|
8
|
+
*/
|
|
9
|
+
async function processHook({ queueItem, world, runId, global, }) {
|
|
10
|
+
try {
|
|
11
|
+
// Create hook in database
|
|
12
|
+
const hookMetadata = typeof queueItem.metadata === 'undefined'
|
|
13
|
+
? undefined
|
|
14
|
+
: dehydrateStepArguments(queueItem.metadata, global);
|
|
15
|
+
await world.hooks.create(runId, {
|
|
16
|
+
hookId: queueItem.correlationId,
|
|
17
|
+
token: queueItem.token,
|
|
18
|
+
metadata: hookMetadata,
|
|
19
|
+
});
|
|
20
|
+
// Create hook_created event in event log
|
|
21
|
+
await world.events.create(runId, {
|
|
22
|
+
eventType: 'hook_created',
|
|
23
|
+
correlationId: queueItem.correlationId,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
if (WorkflowAPIError.is(err)) {
|
|
28
|
+
if (err.status === 409) {
|
|
29
|
+
// Hook already exists (duplicate hook_id constraint), so we can skip it
|
|
30
|
+
console.warn(`Hook with correlation ID "${queueItem.correlationId}" already exists, skipping: ${err.message}`);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
else if (err.status === 410) {
|
|
34
|
+
// Workflow has already completed, so no-op
|
|
35
|
+
console.warn(`Workflow run "${runId}" has already completed, skipping hook "${queueItem.correlationId}": ${err.message}`);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
throw err;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Processes a single step by creating it in the database and queueing execution.
|
|
44
|
+
*
|
|
45
|
+
* IMPORTANT: The queue write MUST always happen, even if the step already exists.
|
|
46
|
+
* This handles the case where:
|
|
47
|
+
* 1. Step is written to workflow database
|
|
48
|
+
* 2. Process crashes, times out, or fails before queue write completes
|
|
49
|
+
* 3. Upstream retry occurs
|
|
50
|
+
* 4. Step already exists in database (409 conflict)
|
|
51
|
+
*
|
|
52
|
+
* If we skipped the queue write on 409, the step would sit "pending" forever
|
|
53
|
+
* with 0 attempts. The queue write uses an idempotency key (correlation ID),
|
|
54
|
+
* so duplicate queue writes are safely deduplicated by the queue service.
|
|
55
|
+
*/
|
|
56
|
+
async function processStep({ queueItem, world, runId, workflowName, workflowStartedAt, global, }) {
|
|
57
|
+
const dehydratedInput = dehydrateStepArguments({
|
|
58
|
+
args: queueItem.args,
|
|
59
|
+
closureVars: queueItem.closureVars,
|
|
60
|
+
thisVal: queueItem.thisVal,
|
|
61
|
+
}, global);
|
|
62
|
+
// The stepId to use for the queue message. This will be the correlation ID
|
|
63
|
+
// regardless of whether we created a new step or the step already existed.
|
|
64
|
+
const stepId = queueItem.correlationId;
|
|
65
|
+
try {
|
|
66
|
+
await world.steps.create(runId, {
|
|
67
|
+
stepId: queueItem.correlationId,
|
|
68
|
+
stepName: queueItem.stepName,
|
|
69
|
+
input: dehydratedInput,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
if (WorkflowAPIError.is(err) && err.status === 409) {
|
|
74
|
+
// Step already exists - this is expected on retries. We still need to
|
|
75
|
+
// proceed with the queue write below to ensure the step gets executed.
|
|
76
|
+
// See function comment above for details on why this is critical.
|
|
77
|
+
console.warn(`Step "${queueItem.stepName}" with correlation ID "${queueItem.correlationId}" already exists, proceeding with queue write`);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
throw err;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Always write to queue, even if step already existed. The idempotency key
|
|
84
|
+
// ensures duplicate queue writes are safely deduplicated by the queue service.
|
|
85
|
+
await queueMessage(world, `__wkf_step_${queueItem.stepName}`, {
|
|
86
|
+
workflowName,
|
|
87
|
+
workflowRunId: runId,
|
|
88
|
+
workflowStartedAt,
|
|
89
|
+
stepId,
|
|
90
|
+
traceCarrier: await serializeTraceCarrier(),
|
|
91
|
+
requestedAt: new Date(),
|
|
92
|
+
}, {
|
|
93
|
+
idempotencyKey: queueItem.correlationId,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Processes a single wait by creating the event and calculating timeout.
|
|
98
|
+
* @returns The timeout in seconds, or null if the wait already exists.
|
|
99
|
+
*/
|
|
100
|
+
async function processWait({ queueItem, world, runId, }) {
|
|
101
|
+
try {
|
|
102
|
+
// Only create wait_created event if it hasn't been created yet
|
|
103
|
+
if (!queueItem.hasCreatedEvent) {
|
|
104
|
+
await world.events.create(runId, {
|
|
105
|
+
eventType: 'wait_created',
|
|
106
|
+
correlationId: queueItem.correlationId,
|
|
107
|
+
eventData: {
|
|
108
|
+
resumeAt: queueItem.resumeAt,
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
// Calculate how long to wait before resuming
|
|
113
|
+
const now = Date.now();
|
|
114
|
+
const resumeAtMs = queueItem.resumeAt.getTime();
|
|
115
|
+
const delayMs = Math.max(1000, resumeAtMs - now);
|
|
116
|
+
return Math.ceil(delayMs / 1000);
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
if (WorkflowAPIError.is(err) && err.status === 409) {
|
|
120
|
+
// Wait already exists, so we can skip it
|
|
121
|
+
console.warn(`Wait with correlation ID "${queueItem.correlationId}" already exists, skipping: ${err.message}`);
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
throw err;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Handles a workflow suspension by processing all pending operations (hooks, steps, waits).
|
|
129
|
+
* Hooks are processed first to prevent race conditions, then steps and waits in parallel.
|
|
130
|
+
*/
|
|
131
|
+
export async function handleSuspension({ suspension, world, runId, workflowName, workflowStartedAt, span, }) {
|
|
132
|
+
// Separate queue items by type for parallel processing
|
|
133
|
+
const stepItems = suspension.steps.filter((item) => item.type === 'step');
|
|
134
|
+
const hookItems = suspension.steps.filter((item) => item.type === 'hook');
|
|
135
|
+
const waitItems = suspension.steps.filter((item) => item.type === 'wait');
|
|
136
|
+
// Process all hooks first to prevent race conditions
|
|
137
|
+
await Promise.all(hookItems.map((queueItem) => processHook({
|
|
138
|
+
queueItem,
|
|
139
|
+
world,
|
|
140
|
+
runId,
|
|
141
|
+
global: suspension.globalThis,
|
|
142
|
+
})));
|
|
143
|
+
// Then process steps and waits in parallel
|
|
144
|
+
const [, waitTimeouts] = await Promise.all([
|
|
145
|
+
Promise.all(stepItems.map((queueItem) => processStep({
|
|
146
|
+
queueItem,
|
|
147
|
+
world,
|
|
148
|
+
runId,
|
|
149
|
+
workflowName,
|
|
150
|
+
workflowStartedAt,
|
|
151
|
+
global: suspension.globalThis,
|
|
152
|
+
}))),
|
|
153
|
+
Promise.all(waitItems.map((queueItem) => processWait({
|
|
154
|
+
queueItem,
|
|
155
|
+
world,
|
|
156
|
+
runId,
|
|
157
|
+
}))),
|
|
158
|
+
]);
|
|
159
|
+
// Find minimum timeout from waits
|
|
160
|
+
const minTimeoutSeconds = waitTimeouts.reduce((min, timeout) => {
|
|
161
|
+
if (timeout === null)
|
|
162
|
+
return min;
|
|
163
|
+
if (min === null)
|
|
164
|
+
return timeout;
|
|
165
|
+
return Math.min(min, timeout);
|
|
166
|
+
}, null);
|
|
167
|
+
span?.setAttributes({
|
|
168
|
+
...Attribute.WorkflowRunStatus('workflow_suspended'),
|
|
169
|
+
...Attribute.WorkflowStepsCreated(stepItems.length),
|
|
170
|
+
...Attribute.WorkflowHooksCreated(hookItems.length),
|
|
171
|
+
...Attribute.WorkflowWaitsCreated(waitItems.length),
|
|
172
|
+
});
|
|
173
|
+
// If we encountered any waits, return the minimum timeout
|
|
174
|
+
if (minTimeoutSeconds !== null) {
|
|
175
|
+
return { timeoutSeconds: minTimeoutSeconds };
|
|
176
|
+
}
|
|
177
|
+
return {};
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VzcGVuc2lvbi1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvc3VzcGVuc2lvbi1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBU3BELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sS0FBSyxTQUFTLE1BQU0sc0NBQXNDLENBQUM7QUFDbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQXNCNUM7O0dBRUc7QUFDSCxLQUFLLFVBQVUsV0FBVyxDQUFDLEVBQ3pCLFNBQVMsRUFDVCxLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sR0FDWTtJQUNsQixJQUFJLENBQUM7UUFDSCwwQkFBMEI7UUFDMUIsTUFBTSxZQUFZLEdBQ2hCLE9BQU8sU0FBUyxDQUFDLFFBQVEsS0FBSyxXQUFXO1lBQ3ZDLENBQUMsQ0FBQyxTQUFTO1lBQ1gsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDekQsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDOUIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxhQUFhO1lBQy9CLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSztZQUN0QixRQUFRLEVBQUUsWUFBWTtTQUN2QixDQUFDLENBQUM7UUFFSCx5Q0FBeUM7UUFDekMsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDL0IsU0FBUyxFQUFFLGNBQWM7WUFDekIsYUFBYSxFQUFFLFNBQVMsQ0FBQyxhQUFhO1NBQ3ZDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFBQyxPQUFPLEdB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../../src/runtime/world.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../../src/runtime/world.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAsB7C;;;;GAIG;AACH,eAAO,MAAM,WAAW,QAAO,KAkC9B,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,QAAO,IAAI,CAAC,KAAK,EAAE,oBAAoB,CASnE,CAAC;AAEF,eAAO,MAAM,QAAQ,QAAO,KAM3B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,KAAK,GAAG,SAAS,KAAG,IAGnD,CAAC"}
|
package/dist/runtime/world.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { createLocalWorld } from '@workflow/world-local';
|
|
4
4
|
import { createVercelWorld } from '@workflow/world-vercel';
|
|
5
|
-
const require = createRequire(
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
const require = createRequire(join(process.cwd(), 'index.js'));
|
|
6
|
+
const WorldCache = Symbol.for('@workflow/world//cache');
|
|
7
|
+
const StubbedWorldCache = Symbol.for('@workflow/world//stubbedCache');
|
|
8
|
+
const globalSymbols = globalThis;
|
|
8
9
|
function defaultWorld() {
|
|
9
10
|
if (process.env.VERCEL_DEPLOYMENT_ID) {
|
|
10
11
|
return 'vercel';
|
|
11
12
|
}
|
|
12
|
-
return '
|
|
13
|
+
return 'local';
|
|
13
14
|
}
|
|
14
15
|
/**
|
|
15
16
|
* Create a new world instance based on environment variables.
|
|
@@ -20,7 +21,8 @@ export const createWorld = () => {
|
|
|
20
21
|
const targetWorld = process.env.WORKFLOW_TARGET_WORLD || defaultWorld();
|
|
21
22
|
if (targetWorld === 'vercel') {
|
|
22
23
|
return createVercelWorld({
|
|
23
|
-
baseUrl: process.env.
|
|
24
|
+
baseUrl: process.env.WORKFLOW_VERCEL_BACKEND_URL,
|
|
25
|
+
skipProxy: process.env.WORKFLOW_VERCEL_SKIP_PROXY === 'true',
|
|
24
26
|
token: process.env.WORKFLOW_VERCEL_AUTH_TOKEN,
|
|
25
27
|
projectConfig: {
|
|
26
28
|
environment: process.env.WORKFLOW_VERCEL_ENV,
|
|
@@ -29,10 +31,9 @@ export const createWorld = () => {
|
|
|
29
31
|
},
|
|
30
32
|
});
|
|
31
33
|
}
|
|
32
|
-
if (targetWorld === '
|
|
33
|
-
return
|
|
34
|
-
dataDir: process.env.
|
|
35
|
-
port: process.env.PORT ? Number(process.env.PORT) : undefined,
|
|
34
|
+
if (targetWorld === 'local') {
|
|
35
|
+
return createLocalWorld({
|
|
36
|
+
dataDir: process.env.WORKFLOW_LOCAL_DATA_DIR,
|
|
36
37
|
});
|
|
37
38
|
}
|
|
38
39
|
const mod = require(targetWorld);
|
|
@@ -57,28 +58,28 @@ export const createWorld = () => {
|
|
|
57
58
|
* be able to re-combine getWorld and getWorldHandlers into one singleton.
|
|
58
59
|
*/
|
|
59
60
|
export const getWorldHandlers = () => {
|
|
60
|
-
if (
|
|
61
|
-
return
|
|
61
|
+
if (globalSymbols[StubbedWorldCache]) {
|
|
62
|
+
return globalSymbols[StubbedWorldCache];
|
|
62
63
|
}
|
|
63
64
|
const _world = createWorld();
|
|
64
|
-
|
|
65
|
+
globalSymbols[StubbedWorldCache] = _world;
|
|
65
66
|
return {
|
|
66
67
|
createQueueHandler: _world.createQueueHandler,
|
|
67
68
|
};
|
|
68
69
|
};
|
|
69
70
|
export const getWorld = () => {
|
|
70
|
-
if (
|
|
71
|
-
return
|
|
71
|
+
if (globalSymbols[WorldCache]) {
|
|
72
|
+
return globalSymbols[WorldCache];
|
|
72
73
|
}
|
|
73
|
-
|
|
74
|
-
return
|
|
74
|
+
globalSymbols[WorldCache] = createWorld();
|
|
75
|
+
return globalSymbols[WorldCache];
|
|
75
76
|
};
|
|
76
77
|
/**
|
|
77
78
|
* Reset the cached world instance. This should be called when environment
|
|
78
79
|
* variables change and you need to reinitialize the world with new config.
|
|
79
80
|
*/
|
|
80
81
|
export const setWorld = (world) => {
|
|
81
|
-
|
|
82
|
-
|
|
82
|
+
globalSymbols[WorldCache] = world;
|
|
83
|
+
globalSymbols[StubbedWorldCache] = world;
|
|
83
84
|
};
|
|
84
|
-
//# sourceMappingURL=
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ybGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS93b3JsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFakMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0QsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUUvRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFDeEQsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDLENBQUM7QUFFdEUsTUFBTSxhQUFhLEdBR2YsVUFBVSxDQUFDO0FBRWYsU0FBUyxZQUFZO0lBQ25CLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxHQUFVLEVBQUU7SUFDckMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUV4RSxJQUFJLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3QixPQUFPLGlCQUFpQixDQUFDO1lBQ3ZCLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQjtZQUNoRCxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsS0FBSyxNQUFNO1lBQzVELEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQjtZQUM3QyxhQUFhLEVBQUU7Z0JBQ2IsV0FBVyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CO2dCQUM1QyxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUI7Z0JBQzlDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQjthQUN6QztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLFdBQVcsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUM1QixPQUFPLGdCQUFnQixDQUFDO1lBQ3RCLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QjtTQUM3QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pDLElBQUksT0FBTyxHQUFHLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDOUIsT0FBTyxHQUFHLEVBQVcsQ0FBQztJQUN4QixDQUFDO1NBQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDN0MsT0FBTyxHQUFHLENBQUMsT0FBTyxFQUFXLENBQUM7SUFDaEMsQ0FBQztTQUFNLElBQUksT0FBTyxHQUFHLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ2pELE9BQU8sR0FBRyxDQUFDLFdBQVcsRUFBVyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUNiLGdDQUFnQyxXQUFXLHlGQUF5RixDQUNySSxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFzQyxFQUFFO0lBQ3RFLElBQUksYUFBYSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztRQUNyQyxPQUFPLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxXQUFXLEVBQUUsQ0FBQztJQUM3QixhQUFhLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDMUMsT0FBTztRQUNMLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxrQkFBa0I7S0FDOUMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxHQUFVLEVBQUU7SUFDbEMsSUFBSSxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUM5QixPQUFPLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBQzFDLE9BQU8sYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQXdCLEVBQVEsRUFBRTtJQUN6RCxhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ2xDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMzQyxDQUFDLENBQUMifQ==
|
package/dist/runtime.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Event, type WorkflowRun, type WorkflowRunStatus } from '@workflow/world';
|
|
2
2
|
export type { Event, WorkflowRun };
|
|
3
3
|
export { WorkflowSuspension } from './global.js';
|
|
4
|
+
export { type HealthCheckEndpoint, type HealthCheckOptions, type HealthCheckResult, healthCheck, } from './runtime/helpers.js';
|
|
4
5
|
export { getHookByToken, resumeHook, resumeWebhook, } from './runtime/resume-hook.js';
|
|
5
6
|
export { type StartOptions, start } from './runtime/start.js';
|
|
7
|
+
export { stepEntrypoint } from './runtime/step-handler.js';
|
|
6
8
|
export { createWorld, getWorld, getWorldHandlers, setWorld, } from './runtime/world.js';
|
|
7
9
|
/**
|
|
8
10
|
* Options for configuring a workflow's readable stream.
|
|
@@ -111,11 +113,5 @@ export declare function getRun<TResult>(runId: string): Run<TResult>;
|
|
|
111
113
|
* @returns A function that can be used as a Vercel API route.
|
|
112
114
|
*/
|
|
113
115
|
export declare function workflowEntrypoint(workflowCode: string): (req: Request) => Promise<Response>;
|
|
114
|
-
/**
|
|
115
|
-
* A single route that handles any step execution request and routes to the
|
|
116
|
-
* appropriate step function. We may eventually want to create different bundles
|
|
117
|
-
* for each step, this is temporary.
|
|
118
|
-
*/
|
|
119
|
-
export declare const stepEntrypoint: (req: Request) => Promise<Response>;
|
|
120
116
|
export declare function runStep(): void;
|
|
121
117
|
//# sourceMappingURL=runtime.d.ts.map
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,KAAK,EAEV,KAAK,WAAW,EAChB,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;AA4BzB,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,UAAU,EACV,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EACL,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,QAAQ,GACT,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,GAAG,CAAC,OAAO;IACtB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,OAAO,CAAC,KAAK,CAAQ;gBAET,KAAK,EAAE,MAAM;IAKzB;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAEvC;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAElC;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAElC;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAE7B;IAED;;;OAGG;IACH,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAEzC;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAE3C;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAED;;;;;;OAMG;IACH,WAAW,CAAC,CAAC,GAAG,GAAG,EACjB,OAAO,GAAE,6BAAkC,GAC1C,cAAc,CAAC,CAAC,CAAC;IASpB;;;;OAIG;YACW,eAAe;CA2B9B;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAE3D;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,GACnB,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAiMrC;AAID,wBAAgB,OAAO,SAAK"}
|