@ironflow/node 0.20.0 → 0.20.2
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 +181 -0
- package/package.json +8 -8
- package/dist/agent/agent.d.ts +0 -60
- package/dist/agent/agent.d.ts.map +0 -1
- package/dist/agent/agent.js +0 -133
- package/dist/agent/agent.js.map +0 -1
- package/dist/agent/approve.d.ts +0 -23
- package/dist/agent/approve.d.ts.map +0 -1
- package/dist/agent/approve.js +0 -42
- package/dist/agent/approve.js.map +0 -1
- package/dist/agent/dispatch.d.ts +0 -63
- package/dist/agent/dispatch.d.ts.map +0 -1
- package/dist/agent/dispatch.js +0 -130
- package/dist/agent/dispatch.js.map +0 -1
- package/dist/agent/errors.d.ts +0 -90
- package/dist/agent/errors.d.ts.map +0 -1
- package/dist/agent/errors.js +0 -136
- package/dist/agent/errors.js.map +0 -1
- package/dist/agent/index.d.ts +0 -30
- package/dist/agent/index.d.ts.map +0 -1
- package/dist/agent/index.js +0 -27
- package/dist/agent/index.js.map +0 -1
- package/dist/agent/internal-registry.d.ts +0 -27
- package/dist/agent/internal-registry.d.ts.map +0 -1
- package/dist/agent/internal-registry.js +0 -36
- package/dist/agent/internal-registry.js.map +0 -1
- package/dist/agent/internal.d.ts +0 -24
- package/dist/agent/internal.d.ts.map +0 -1
- package/dist/agent/internal.js +0 -29
- package/dist/agent/internal.js.map +0 -1
- package/dist/agent/llm.d.ts +0 -39
- package/dist/agent/llm.d.ts.map +0 -1
- package/dist/agent/llm.js +0 -59
- package/dist/agent/llm.js.map +0 -1
- package/dist/agent/mcp.d.ts +0 -51
- package/dist/agent/mcp.d.ts.map +0 -1
- package/dist/agent/mcp.js +0 -155
- package/dist/agent/mcp.js.map +0 -1
- package/dist/agent/memory.d.ts +0 -74
- package/dist/agent/memory.d.ts.map +0 -1
- package/dist/agent/memory.js +0 -130
- package/dist/agent/memory.js.map +0 -1
- package/dist/agent/spawn.d.ts +0 -20
- package/dist/agent/spawn.d.ts.map +0 -1
- package/dist/agent/spawn.js +0 -29
- package/dist/agent/spawn.js.map +0 -1
- package/dist/agent/tool.d.ts +0 -39
- package/dist/agent/tool.d.ts.map +0 -1
- package/dist/agent/tool.js +0 -103
- package/dist/agent/tool.js.map +0 -1
- package/dist/agent/types.d.ts +0 -363
- package/dist/agent/types.d.ts.map +0 -1
- package/dist/agent/types.js +0 -9
- package/dist/agent/types.js.map +0 -1
- package/dist/client.d.ts +0 -942
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -1557
- package/dist/client.js.map +0 -1
- package/dist/command-dedup.d.ts +0 -61
- package/dist/command-dedup.d.ts.map +0 -1
- package/dist/command-dedup.js +0 -129
- package/dist/command-dedup.js.map +0 -1
- package/dist/config-client.d.ts +0 -58
- package/dist/config-client.d.ts.map +0 -1
- package/dist/config-client.js +0 -171
- package/dist/config-client.js.map +0 -1
- package/dist/function.d.ts +0 -53
- package/dist/function.d.ts.map +0 -1
- package/dist/function.js +0 -72
- package/dist/function.js.map +0 -1
- package/dist/index.d.ts +0 -71
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -70
- package/dist/index.js.map +0 -1
- package/dist/internal/assert-defined.d.ts +0 -10
- package/dist/internal/assert-defined.d.ts.map +0 -1
- package/dist/internal/assert-defined.js +0 -15
- package/dist/internal/assert-defined.js.map +0 -1
- package/dist/internal/context.d.ts +0 -142
- package/dist/internal/context.d.ts.map +0 -1
- package/dist/internal/context.js +0 -306
- package/dist/internal/context.js.map +0 -1
- package/dist/internal/errors.d.ts +0 -66
- package/dist/internal/errors.d.ts.map +0 -1
- package/dist/internal/errors.js +0 -29
- package/dist/internal/errors.js.map +0 -1
- package/dist/internal/run-context.d.ts +0 -10
- package/dist/internal/run-context.d.ts.map +0 -1
- package/dist/internal/run-context.js +0 -23
- package/dist/internal/run-context.js.map +0 -1
- package/dist/kv.d.ts +0 -86
- package/dist/kv.d.ts.map +0 -1
- package/dist/kv.js +0 -261
- package/dist/kv.js.map +0 -1
- package/dist/projection-runner.d.ts +0 -83
- package/dist/projection-runner.d.ts.map +0 -1
- package/dist/projection-runner.js +0 -498
- package/dist/projection-runner.js.map +0 -1
- package/dist/projection.d.ts +0 -36
- package/dist/projection.d.ts.map +0 -1
- package/dist/projection.js +0 -55
- package/dist/projection.js.map +0 -1
- package/dist/secrets.d.ts +0 -6
- package/dist/secrets.d.ts.map +0 -1
- package/dist/secrets.js +0 -19
- package/dist/secrets.js.map +0 -1
- package/dist/serve.d.ts +0 -71
- package/dist/serve.d.ts.map +0 -1
- package/dist/serve.js +0 -460
- package/dist/serve.js.map +0 -1
- package/dist/step.d.ts +0 -18
- package/dist/step.d.ts.map +0 -1
- package/dist/step.js +0 -581
- package/dist/step.js.map +0 -1
- package/dist/subscribe.d.ts +0 -164
- package/dist/subscribe.d.ts.map +0 -1
- package/dist/subscribe.js +0 -487
- package/dist/subscribe.js.map +0 -1
- package/dist/test/index.d.ts +0 -22
- package/dist/test/index.d.ts.map +0 -1
- package/dist/test/index.js +0 -112
- package/dist/test/index.js.map +0 -1
- package/dist/test/test-step.d.ts +0 -21
- package/dist/test/test-step.d.ts.map +0 -1
- package/dist/test/test-step.js +0 -83
- package/dist/test/test-step.js.map +0 -1
- package/dist/types.d.ts +0 -108
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -5
- package/dist/types.js.map +0 -1
- package/dist/version.d.ts +0 -2
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js +0 -4
- package/dist/version.js.map +0 -1
- package/dist/webhook.d.ts +0 -22
- package/dist/webhook.d.ts.map +0 -1
- package/dist/webhook.js +0 -23
- package/dist/webhook.js.map +0 -1
- package/dist/worker-streaming.d.ts +0 -17
- package/dist/worker-streaming.d.ts.map +0 -1
- package/dist/worker-streaming.js +0 -510
- package/dist/worker-streaming.js.map +0 -1
- package/dist/worker.d.ts +0 -28
- package/dist/worker.d.ts.map +0 -1
- package/dist/worker.js +0 -559
- package/dist/worker.js.map +0 -1
package/dist/step.js
DELETED
|
@@ -1,581 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Step Execution Client
|
|
3
|
-
*
|
|
4
|
-
* Implements durable step primitives: run, sleep, sleepUntil, waitForEvent, parallel, map
|
|
5
|
-
*/
|
|
6
|
-
import { StepError, StepTimeoutError, isRetryable, parseDuration, InvokeError } from "@ironflow/core";
|
|
7
|
-
import { ExecutionContext, BranchContext } from "./internal/context.js";
|
|
8
|
-
import { YieldSignal, } from "./internal/errors.js";
|
|
9
|
-
/**
|
|
10
|
-
* Create a step client for the given execution context
|
|
11
|
-
*/
|
|
12
|
-
export function createStepClient(ctx) {
|
|
13
|
-
return createStepClientInternal(ctx);
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Internal step client creation that works with any StepContext
|
|
17
|
-
*/
|
|
18
|
-
function createStepClientInternal(ctx) {
|
|
19
|
-
return {
|
|
20
|
-
run: (name, fn, options) => executeStep(ctx, name, fn, options),
|
|
21
|
-
sleep: (name, duration) => executeSleep(ctx, name, duration),
|
|
22
|
-
sleepUntil: (name, until) => executeSleepUntil(ctx, name, until),
|
|
23
|
-
waitForEvent: (name, filter) => executeWaitForEvent(ctx, name, filter),
|
|
24
|
-
parallel: (name, branches, options) => executeParallel(ctx, name, branches, options),
|
|
25
|
-
map: (name, items, fn, options) => executeMap(ctx, name, items, fn, options),
|
|
26
|
-
compensate: (stepName, fn) => {
|
|
27
|
-
ctx.registerCompensation(stepName, fn);
|
|
28
|
-
},
|
|
29
|
-
invoke: (functionId, input, options) => executeInvoke(ctx, functionId, input, options),
|
|
30
|
-
invokeAsync: (functionId, input) => executeInvokeAsync(ctx, functionId, input),
|
|
31
|
-
publish: (topic, data) => executePublish(ctx, topic, data),
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Wrap a step function with a timeout.
|
|
36
|
-
* If the timeout fires before fn() resolves, throws StepTimeoutError.
|
|
37
|
-
*/
|
|
38
|
-
async function withStepTimeout(fn, stepName, timeout) {
|
|
39
|
-
const timeoutMs = parseDuration(timeout);
|
|
40
|
-
return new Promise((resolve, reject) => {
|
|
41
|
-
const timer = setTimeout(() => {
|
|
42
|
-
reject(new StepTimeoutError(stepName, timeout));
|
|
43
|
-
}, timeoutMs);
|
|
44
|
-
fn().then((result) => {
|
|
45
|
-
clearTimeout(timer);
|
|
46
|
-
resolve(result);
|
|
47
|
-
}, (error) => {
|
|
48
|
-
clearTimeout(timer);
|
|
49
|
-
reject(error);
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Execute a step with memoization
|
|
55
|
-
*
|
|
56
|
-
* WHY: Use step.run() for any non-idempotent operation (e.g., sending an email,
|
|
57
|
-
* charging a card, calling an external API). Ironflow memoizes the result
|
|
58
|
-
* of the first successful execution. If the workflow retries, this step will
|
|
59
|
-
* be skipped and the previously stored result will be returned.
|
|
60
|
-
*/
|
|
61
|
-
async function executeStep(ctx, name, fn, options) {
|
|
62
|
-
const stepId = ctx.generateStepId(name);
|
|
63
|
-
// Check if step is already completed (memoized)
|
|
64
|
-
if (ctx.shouldSkipStep(stepId)) {
|
|
65
|
-
ctx.logger.debug(`Step memoized: ${name}`, { stepId });
|
|
66
|
-
return ctx.getMemoizedOutput(stepId);
|
|
67
|
-
}
|
|
68
|
-
// Execute the step
|
|
69
|
-
const startedAt = new Date();
|
|
70
|
-
ctx.logger.debug(`Step starting: ${name}`, { stepId });
|
|
71
|
-
try {
|
|
72
|
-
const timeoutStr = options?.timeout ?? ctx.stepTimeout;
|
|
73
|
-
const output = timeoutStr
|
|
74
|
-
? await withStepTimeout(fn, name, timeoutStr)
|
|
75
|
-
: await fn();
|
|
76
|
-
const endedAt = new Date();
|
|
77
|
-
const durationMs = endedAt.getTime() - startedAt.getTime();
|
|
78
|
-
// Record successful step
|
|
79
|
-
const result = {
|
|
80
|
-
id: stepId,
|
|
81
|
-
name,
|
|
82
|
-
type: "invoke",
|
|
83
|
-
status: "completed",
|
|
84
|
-
started_at: startedAt.toISOString(),
|
|
85
|
-
ended_at: endedAt.toISOString(),
|
|
86
|
-
duration_ms: durationMs,
|
|
87
|
-
output,
|
|
88
|
-
};
|
|
89
|
-
ctx.recordStep(result);
|
|
90
|
-
ctx.logger.debug(`Step completed: ${name}`, { stepId, durationMs });
|
|
91
|
-
return output;
|
|
92
|
-
}
|
|
93
|
-
catch (error) {
|
|
94
|
-
const endedAt = new Date();
|
|
95
|
-
const durationMs = endedAt.getTime() - startedAt.getTime();
|
|
96
|
-
// Re-throw YieldSignal (it's not a real error)
|
|
97
|
-
if (error instanceof YieldSignal) {
|
|
98
|
-
throw error;
|
|
99
|
-
}
|
|
100
|
-
// Record failed step
|
|
101
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
102
|
-
const errorStack = error instanceof Error ? error.stack : undefined;
|
|
103
|
-
const result = {
|
|
104
|
-
id: stepId,
|
|
105
|
-
name,
|
|
106
|
-
type: "invoke",
|
|
107
|
-
status: "failed",
|
|
108
|
-
started_at: startedAt.toISOString(),
|
|
109
|
-
ended_at: endedAt.toISOString(),
|
|
110
|
-
duration_ms: durationMs,
|
|
111
|
-
error: {
|
|
112
|
-
message: errorMessage,
|
|
113
|
-
retryable: isRetryable(error),
|
|
114
|
-
stack: errorStack,
|
|
115
|
-
},
|
|
116
|
-
};
|
|
117
|
-
ctx.recordStep(result);
|
|
118
|
-
// Re-throw StepTimeoutError as-is (already has step context)
|
|
119
|
-
if (error instanceof StepTimeoutError) {
|
|
120
|
-
ctx.logger.error(`Step timed out: ${name}`, {
|
|
121
|
-
stepId,
|
|
122
|
-
error: errorMessage,
|
|
123
|
-
durationMs,
|
|
124
|
-
});
|
|
125
|
-
throw error;
|
|
126
|
-
}
|
|
127
|
-
ctx.logger.error(`Step failed: ${name}`, {
|
|
128
|
-
stepId,
|
|
129
|
-
error: errorMessage,
|
|
130
|
-
durationMs,
|
|
131
|
-
});
|
|
132
|
-
// Wrap in StepError for better context
|
|
133
|
-
throw new StepError(errorMessage, {
|
|
134
|
-
stepId,
|
|
135
|
-
stepName: name,
|
|
136
|
-
retryable: isRetryable(error),
|
|
137
|
-
cause: error instanceof Error ? error : undefined,
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Execute a durable sleep
|
|
143
|
-
*
|
|
144
|
-
* WHY: Use step.sleep() for long-running pauses (minutes, hours, or days).
|
|
145
|
-
* Unlike setTimeout, this is durable—the worker can restart or the server
|
|
146
|
-
* can be upgraded, and the workflow will resume exactly where it left off
|
|
147
|
-
* once the duration has elapsed.
|
|
148
|
-
*/
|
|
149
|
-
async function executeSleep(ctx, name, duration) {
|
|
150
|
-
const stepId = ctx.generateStepId(name);
|
|
151
|
-
// Check if resuming from this sleep
|
|
152
|
-
if (ctx.isResumingFrom(stepId, "sleep")) {
|
|
153
|
-
ctx.logger.debug(`Sleep resumed: ${name}`, { stepId });
|
|
154
|
-
ctx.markResumeProcessed();
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
// Check if step is already completed (memoized)
|
|
158
|
-
if (ctx.shouldSkipStep(stepId)) {
|
|
159
|
-
ctx.logger.debug(`Sleep memoized: ${name}`, { stepId });
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
// Calculate wake time. Reject non-positive durations explicitly: a negative
|
|
163
|
-
// or zero duration silently yielded to the server puts SleepUntil in the
|
|
164
|
-
// past, so the scheduler wakes the step on the next tick — which looks like
|
|
165
|
-
// a no-op sleep and is almost always a caller bug (inverted subtraction,
|
|
166
|
-
// unit mix-up, etc.).
|
|
167
|
-
const ms = parseDuration(duration);
|
|
168
|
-
if (!Number.isFinite(ms) || ms <= 0) {
|
|
169
|
-
throw new Error(`step.sleep(${JSON.stringify(name)}): duration must be a positive finite value, got ${JSON.stringify(duration)} (parsed to ${ms}ms)`);
|
|
170
|
-
}
|
|
171
|
-
const wakeAt = new Date(Date.now() + ms);
|
|
172
|
-
ctx.logger.debug(`Sleep yielding: ${name}`, {
|
|
173
|
-
stepId,
|
|
174
|
-
duration,
|
|
175
|
-
wakeAt: wakeAt.toISOString(),
|
|
176
|
-
});
|
|
177
|
-
// Throw yield signal to pause execution
|
|
178
|
-
const yieldInfo = {
|
|
179
|
-
step_id: stepId,
|
|
180
|
-
type: "sleep",
|
|
181
|
-
until: wakeAt.toISOString(),
|
|
182
|
-
};
|
|
183
|
-
throw new YieldSignal(yieldInfo);
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Execute a durable sleep until a specific time
|
|
187
|
-
*/
|
|
188
|
-
async function executeSleepUntil(ctx, name, until) {
|
|
189
|
-
const stepId = ctx.generateStepId(name);
|
|
190
|
-
// Check if resuming from this sleep
|
|
191
|
-
if (ctx.isResumingFrom(stepId, "sleep")) {
|
|
192
|
-
ctx.logger.debug(`SleepUntil resumed: ${name}`, { stepId });
|
|
193
|
-
ctx.markResumeProcessed();
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
// Check if step is already completed (memoized)
|
|
197
|
-
if (ctx.shouldSkipStep(stepId)) {
|
|
198
|
-
ctx.logger.debug(`SleepUntil memoized: ${name}`, { stepId });
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
// Parse the target time
|
|
202
|
-
const wakeAt = typeof until === "string" ? new Date(until) : until;
|
|
203
|
-
// Validate the date
|
|
204
|
-
if (isNaN(wakeAt.getTime())) {
|
|
205
|
-
throw new Error(`Invalid date for sleepUntil: ${until}`);
|
|
206
|
-
}
|
|
207
|
-
// A wake time in the past silently wakes on the next scheduler tick. That
|
|
208
|
-
// is almost always a caller bug (stale timestamp, timezone confusion) —
|
|
209
|
-
// fail fast so the error surfaces in the step output rather than producing
|
|
210
|
-
// an instant-complete sleep that looks correct.
|
|
211
|
-
if (wakeAt.getTime() <= Date.now()) {
|
|
212
|
-
throw new Error(`step.sleepUntil(${JSON.stringify(name)}): target time must be in the future, got ${wakeAt.toISOString()}`);
|
|
213
|
-
}
|
|
214
|
-
ctx.logger.debug(`SleepUntil yielding: ${name}`, {
|
|
215
|
-
stepId,
|
|
216
|
-
until: wakeAt.toISOString(),
|
|
217
|
-
});
|
|
218
|
-
// Throw yield signal to pause execution
|
|
219
|
-
const yieldInfo = {
|
|
220
|
-
step_id: stepId,
|
|
221
|
-
type: "sleep",
|
|
222
|
-
until: wakeAt.toISOString(),
|
|
223
|
-
};
|
|
224
|
-
throw new YieldSignal(yieldInfo);
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Execute a durable wait for event
|
|
228
|
-
*
|
|
229
|
-
* WHY: Use step.waitForEvent() to implement choreography-based orchestration.
|
|
230
|
-
* The workflow pauses durably until an external event arrives that matches
|
|
231
|
-
* the provided filter. This is the primary way to handle human-in-the-loop
|
|
232
|
-
* or asynchronous external callbacks.
|
|
233
|
-
*/
|
|
234
|
-
async function executeWaitForEvent(ctx, name, filter) {
|
|
235
|
-
const stepId = ctx.generateStepId(name);
|
|
236
|
-
// Check if resuming from this wait with the event data
|
|
237
|
-
if (ctx.isResumingFrom(stepId, "wait_for_event")) {
|
|
238
|
-
ctx.logger.debug(`WaitForEvent resumed: ${name}`, { stepId });
|
|
239
|
-
ctx.markResumeProcessed();
|
|
240
|
-
// The resume data contains the event that matched
|
|
241
|
-
const resumeData = ctx.getResumeData();
|
|
242
|
-
if (resumeData) {
|
|
243
|
-
return resumeData;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
// Check if step is already completed (memoized)
|
|
247
|
-
if (ctx.shouldSkipStep(stepId)) {
|
|
248
|
-
ctx.logger.debug(`WaitForEvent memoized: ${name}`, { stepId });
|
|
249
|
-
const output = ctx.getMemoizedOutput(stepId);
|
|
250
|
-
if (output) {
|
|
251
|
-
return output;
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
// Validate the event filter before yielding. An empty event name would
|
|
255
|
-
// produce a correlation that can never match — the step waits forever
|
|
256
|
-
// until it times out, which is impossible to debug from a running workflow.
|
|
257
|
-
if (!filter || typeof filter.event !== "string" || filter.event.trim() === "") {
|
|
258
|
-
throw new Error(`step.waitForEvent(${JSON.stringify(name)}): filter.event must be a non-empty string`);
|
|
259
|
-
}
|
|
260
|
-
// Use the trimmed event name for the correlation. Validating the trimmed
|
|
261
|
-
// form but sending the raw " approval.received " wouldn't match the event
|
|
262
|
-
// the producer publishes as "approval.received".
|
|
263
|
-
const eventName = filter.event.trim();
|
|
264
|
-
ctx.logger.debug(`WaitForEvent yielding: ${name}`, { stepId, filter });
|
|
265
|
-
// Convert duration to string. Validate numeric inputs — 0, negatives,
|
|
266
|
-
// NaN, and Infinity all serialize to bogus timeout strings that the
|
|
267
|
-
// server will treat as immediate/past deadlines or parse failures.
|
|
268
|
-
let timeout;
|
|
269
|
-
if (filter.timeout === undefined || filter.timeout === null) {
|
|
270
|
-
timeout = "7d";
|
|
271
|
-
}
|
|
272
|
-
else if (typeof filter.timeout === "number") {
|
|
273
|
-
if (!Number.isFinite(filter.timeout) || filter.timeout <= 0) {
|
|
274
|
-
throw new Error(`step.waitForEvent(${JSON.stringify(name)}): filter.timeout must be a positive finite value, got ${filter.timeout}`);
|
|
275
|
-
}
|
|
276
|
-
timeout = durationToString(filter.timeout);
|
|
277
|
-
}
|
|
278
|
-
else if (typeof filter.timeout === "string") {
|
|
279
|
-
if (filter.timeout.trim() === "") {
|
|
280
|
-
throw new Error(`step.waitForEvent(${JSON.stringify(name)}): filter.timeout must be a non-empty string`);
|
|
281
|
-
}
|
|
282
|
-
timeout = filter.timeout;
|
|
283
|
-
}
|
|
284
|
-
else {
|
|
285
|
-
throw new Error(`step.waitForEvent(${JSON.stringify(name)}): filter.timeout must be a string or positive number`);
|
|
286
|
-
}
|
|
287
|
-
// Throw yield signal to pause execution
|
|
288
|
-
const yieldInfo = {
|
|
289
|
-
step_id: stepId,
|
|
290
|
-
type: "wait_for_event",
|
|
291
|
-
event_filter: {
|
|
292
|
-
event: eventName,
|
|
293
|
-
match: filter.match,
|
|
294
|
-
timeout,
|
|
295
|
-
},
|
|
296
|
-
};
|
|
297
|
-
throw new YieldSignal(yieldInfo);
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Execute multiple branches in parallel
|
|
301
|
-
*/
|
|
302
|
-
async function executeParallel(ctx, name, branches, options = {}) {
|
|
303
|
-
const { concurrency, onError = "failFast" } = options;
|
|
304
|
-
ctx.logger.debug(`Starting parallel execution: ${name}`, {
|
|
305
|
-
branchCount: branches.length,
|
|
306
|
-
concurrency,
|
|
307
|
-
onError,
|
|
308
|
-
});
|
|
309
|
-
const results = new Array(branches.length);
|
|
310
|
-
let firstError = null;
|
|
311
|
-
let yieldSignal = null;
|
|
312
|
-
const cancelled = { value: false };
|
|
313
|
-
// Pre-create branch contexts and step clients for each branch
|
|
314
|
-
const branchStepClients = branches.map((_, index) => {
|
|
315
|
-
const branchCtx = ctx.createBranchContext(name, index);
|
|
316
|
-
return createStepClientInternal(branchCtx);
|
|
317
|
-
});
|
|
318
|
-
const executeBranch = async (index) => {
|
|
319
|
-
if (cancelled.value && onError === "failFast")
|
|
320
|
-
return;
|
|
321
|
-
try {
|
|
322
|
-
const scopedStep = branchStepClients[index];
|
|
323
|
-
const branchFn = branches[index];
|
|
324
|
-
const result = await branchFn(scopedStep);
|
|
325
|
-
results[index] = result;
|
|
326
|
-
}
|
|
327
|
-
catch (error) {
|
|
328
|
-
if (error instanceof YieldSignal) {
|
|
329
|
-
yieldSignal = error;
|
|
330
|
-
cancelled.value = true;
|
|
331
|
-
}
|
|
332
|
-
else {
|
|
333
|
-
const err = error instanceof Error ? error : new Error(String(error));
|
|
334
|
-
results[index] = err;
|
|
335
|
-
if (onError === "failFast" && !firstError) {
|
|
336
|
-
firstError = err;
|
|
337
|
-
cancelled.value = true;
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
};
|
|
342
|
-
// Execute with optional concurrency limit
|
|
343
|
-
if (concurrency && concurrency > 0) {
|
|
344
|
-
const pending = [];
|
|
345
|
-
for (let i = 0; i < branches.length; i++) {
|
|
346
|
-
if (cancelled.value && onError === "failFast")
|
|
347
|
-
break;
|
|
348
|
-
if (pending.length >= concurrency) {
|
|
349
|
-
await Promise.race(pending);
|
|
350
|
-
}
|
|
351
|
-
const promise = executeBranch(i).finally(() => {
|
|
352
|
-
const idx = pending.indexOf(promise);
|
|
353
|
-
if (idx !== -1)
|
|
354
|
-
pending.splice(idx, 1);
|
|
355
|
-
});
|
|
356
|
-
pending.push(promise);
|
|
357
|
-
}
|
|
358
|
-
await Promise.all(pending);
|
|
359
|
-
}
|
|
360
|
-
else {
|
|
361
|
-
await Promise.all(branches.map((_, i) => executeBranch(i)));
|
|
362
|
-
}
|
|
363
|
-
// Handle yield signal
|
|
364
|
-
if (yieldSignal) {
|
|
365
|
-
throw yieldSignal;
|
|
366
|
-
}
|
|
367
|
-
// Handle errors based on mode
|
|
368
|
-
if (onError === "failFast" && firstError) {
|
|
369
|
-
throw firstError;
|
|
370
|
-
}
|
|
371
|
-
if (onError !== "allSettled") {
|
|
372
|
-
const errorIndex = results.findIndex((r) => r instanceof Error);
|
|
373
|
-
if (errorIndex !== -1) {
|
|
374
|
-
throw results[errorIndex];
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
ctx.logger.debug(`Parallel execution completed: ${name}`, {
|
|
378
|
-
successCount: results.filter((r) => !(r instanceof Error)).length,
|
|
379
|
-
errorCount: results.filter((r) => r instanceof Error).length,
|
|
380
|
-
});
|
|
381
|
-
return results;
|
|
382
|
-
}
|
|
383
|
-
/**
|
|
384
|
-
* Map over items with parallel execution
|
|
385
|
-
*/
|
|
386
|
-
async function executeMap(ctx, name, items, fn, options = {}) {
|
|
387
|
-
ctx.logger.debug(`Starting map execution: ${name}`, {
|
|
388
|
-
itemCount: items.length,
|
|
389
|
-
options,
|
|
390
|
-
});
|
|
391
|
-
const branches = items.map((item, index) => {
|
|
392
|
-
return async (step) => {
|
|
393
|
-
return await fn(item, step, index);
|
|
394
|
-
};
|
|
395
|
-
});
|
|
396
|
-
return executeParallel(ctx, name, branches, options);
|
|
397
|
-
}
|
|
398
|
-
/**
|
|
399
|
-
* Execute registered compensations in reverse order.
|
|
400
|
-
* Each compensation is executed as a durable step (memoized).
|
|
401
|
-
* Compensation failures are recorded but don't stop remaining compensations.
|
|
402
|
-
*/
|
|
403
|
-
export async function executeCompensations(ctx) {
|
|
404
|
-
const compensations = ctx.getCompensationsInReverse();
|
|
405
|
-
for (const { stepName, fn } of compensations) {
|
|
406
|
-
const compStepName = `compensate:${stepName}`;
|
|
407
|
-
const stepId = ctx.generateStepId(compStepName);
|
|
408
|
-
// Check memoization - skip if already completed
|
|
409
|
-
if (ctx.shouldSkipStep(stepId)) {
|
|
410
|
-
ctx.logger.debug(`Compensation memoized: ${compStepName}`, { stepId });
|
|
411
|
-
continue;
|
|
412
|
-
}
|
|
413
|
-
const startedAt = new Date();
|
|
414
|
-
try {
|
|
415
|
-
await fn();
|
|
416
|
-
const endedAt = new Date();
|
|
417
|
-
const durationMs = endedAt.getTime() - startedAt.getTime();
|
|
418
|
-
const result = {
|
|
419
|
-
id: stepId,
|
|
420
|
-
name: compStepName,
|
|
421
|
-
type: "compensate",
|
|
422
|
-
status: "completed",
|
|
423
|
-
started_at: startedAt.toISOString(),
|
|
424
|
-
ended_at: endedAt.toISOString(),
|
|
425
|
-
duration_ms: durationMs,
|
|
426
|
-
compensation_for: stepName,
|
|
427
|
-
};
|
|
428
|
-
ctx.recordStep(result);
|
|
429
|
-
ctx.logger.debug(`Compensation completed: ${compStepName}`, { stepId, durationMs });
|
|
430
|
-
}
|
|
431
|
-
catch (error) {
|
|
432
|
-
const endedAt = new Date();
|
|
433
|
-
const durationMs = endedAt.getTime() - startedAt.getTime();
|
|
434
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
435
|
-
const errorStack = error instanceof Error ? error.stack : undefined;
|
|
436
|
-
const result = {
|
|
437
|
-
id: stepId,
|
|
438
|
-
name: compStepName,
|
|
439
|
-
type: "compensate",
|
|
440
|
-
status: "failed",
|
|
441
|
-
started_at: startedAt.toISOString(),
|
|
442
|
-
ended_at: endedAt.toISOString(),
|
|
443
|
-
duration_ms: durationMs,
|
|
444
|
-
compensation_for: stepName,
|
|
445
|
-
error: {
|
|
446
|
-
message: errorMessage,
|
|
447
|
-
retryable: false,
|
|
448
|
-
stack: errorStack,
|
|
449
|
-
},
|
|
450
|
-
};
|
|
451
|
-
ctx.recordStep(result);
|
|
452
|
-
ctx.logger.error(`Compensation failed: ${compStepName}`, {
|
|
453
|
-
stepId,
|
|
454
|
-
error: errorMessage,
|
|
455
|
-
durationMs,
|
|
456
|
-
});
|
|
457
|
-
// Don't throw - continue with remaining compensations
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
/**
|
|
462
|
-
* Execute a durable invoke (calls another function and waits for result)
|
|
463
|
-
*/
|
|
464
|
-
async function executeInvoke(ctx, functionId, input, options) {
|
|
465
|
-
const stepId = ctx.generateStepId(functionId);
|
|
466
|
-
// Check memoization — completed
|
|
467
|
-
if (ctx.shouldSkipStep(stepId)) {
|
|
468
|
-
ctx.logger.debug(`Invoke memoized: ${functionId}`, { stepId });
|
|
469
|
-
return ctx.getMemoizedOutput(stepId);
|
|
470
|
-
}
|
|
471
|
-
// Check for failed invoke step — surface as InvokeError
|
|
472
|
-
const failedStepError = ctx.getFailedStep?.(stepId);
|
|
473
|
-
if (failedStepError !== undefined) {
|
|
474
|
-
throw parseInvokeError(functionId, failedStepError);
|
|
475
|
-
}
|
|
476
|
-
// Check for timed out invoke step
|
|
477
|
-
if (ctx.isStepTimedOut?.(stepId)) {
|
|
478
|
-
throw new InvokeError(functionId, undefined, "invoke timed out");
|
|
479
|
-
}
|
|
480
|
-
// Calculate timeout
|
|
481
|
-
let timeoutMs = 30000;
|
|
482
|
-
if (options?.timeout) {
|
|
483
|
-
timeoutMs = parseDuration(options.timeout);
|
|
484
|
-
}
|
|
485
|
-
ctx.logger.debug(`Invoke yielding: ${functionId}`, { stepId, timeoutMs });
|
|
486
|
-
const yieldInfo = {
|
|
487
|
-
step_id: stepId,
|
|
488
|
-
type: "invoke_function",
|
|
489
|
-
function_id: functionId,
|
|
490
|
-
input,
|
|
491
|
-
invoke_timeout_ms: timeoutMs,
|
|
492
|
-
};
|
|
493
|
-
throw new YieldSignal(yieldInfo);
|
|
494
|
-
}
|
|
495
|
-
/**
|
|
496
|
-
* Execute a fire-and-forget invoke (calls another function without waiting)
|
|
497
|
-
*/
|
|
498
|
-
async function executeInvokeAsync(ctx, functionId, input) {
|
|
499
|
-
const stepId = ctx.generateStepId(functionId);
|
|
500
|
-
if (ctx.shouldSkipStep(stepId)) {
|
|
501
|
-
ctx.logger.debug(`InvokeAsync memoized: ${functionId}`, { stepId });
|
|
502
|
-
const output = ctx.getMemoizedOutput(stepId);
|
|
503
|
-
return { runId: output.run_id };
|
|
504
|
-
}
|
|
505
|
-
// Surface a previously failed async invoke step as an error to the caller.
|
|
506
|
-
const failedStepError = ctx.getFailedStep?.(stepId);
|
|
507
|
-
if (failedStepError !== undefined) {
|
|
508
|
-
throw parseInvokeError(functionId, failedStepError);
|
|
509
|
-
}
|
|
510
|
-
ctx.logger.debug(`InvokeAsync yielding: ${functionId}`, { stepId });
|
|
511
|
-
const yieldInfo = {
|
|
512
|
-
step_id: stepId,
|
|
513
|
-
type: "invoke_function_async",
|
|
514
|
-
function_id: functionId,
|
|
515
|
-
input,
|
|
516
|
-
};
|
|
517
|
-
throw new YieldSignal(yieldInfo);
|
|
518
|
-
}
|
|
519
|
-
/**
|
|
520
|
-
* Parse engine error data for a failed invoke step into an InvokeError.
|
|
521
|
-
*/
|
|
522
|
-
function parseInvokeError(functionId, errorData) {
|
|
523
|
-
if (typeof errorData === "object" && errorData !== null) {
|
|
524
|
-
const e = errorData;
|
|
525
|
-
return new InvokeError(e["function_id"] || functionId, e["child_run_id"] || undefined, e["cause"] || e["message"] || "unknown error");
|
|
526
|
-
}
|
|
527
|
-
return new InvokeError(functionId, undefined, String(errorData));
|
|
528
|
-
}
|
|
529
|
-
/**
|
|
530
|
-
* Execute a durable publish to a developer pub/sub topic.
|
|
531
|
-
* Wraps step.run() so the publish is memoized and retried like any other step.
|
|
532
|
-
*/
|
|
533
|
-
async function executePublish(ctx, topic, data) {
|
|
534
|
-
return executeStep(ctx, `publish:${topic}`, async () => {
|
|
535
|
-
const serverUrl = ctx.serverUrl;
|
|
536
|
-
if (!serverUrl) {
|
|
537
|
-
throw new Error("Server URL not configured for publish step");
|
|
538
|
-
}
|
|
539
|
-
const url = `${serverUrl}/ironflow.v1.PubSubService/Publish`;
|
|
540
|
-
const headers = {
|
|
541
|
-
"Content-Type": "application/json",
|
|
542
|
-
};
|
|
543
|
-
if (ctx.apiKey) {
|
|
544
|
-
headers["Authorization"] = `Bearer ${ctx.apiKey}`;
|
|
545
|
-
}
|
|
546
|
-
const response = await fetch(url, {
|
|
547
|
-
method: "POST",
|
|
548
|
-
headers,
|
|
549
|
-
body: JSON.stringify({ topic, data: data ?? {} }),
|
|
550
|
-
});
|
|
551
|
-
if (!response.ok) {
|
|
552
|
-
const body = await response.text();
|
|
553
|
-
throw new Error(body || `Publish failed: ${response.status}`);
|
|
554
|
-
}
|
|
555
|
-
const result = (await response.json());
|
|
556
|
-
return {
|
|
557
|
-
eventId: result.eventId,
|
|
558
|
-
sequence: parseInt(result.sequence, 10) || 0,
|
|
559
|
-
};
|
|
560
|
-
});
|
|
561
|
-
}
|
|
562
|
-
/**
|
|
563
|
-
* Convert a duration to a string representation
|
|
564
|
-
*/
|
|
565
|
-
function durationToString(duration) {
|
|
566
|
-
const ms = duration;
|
|
567
|
-
const seconds = Math.floor(ms / 1000);
|
|
568
|
-
const minutes = Math.floor(seconds / 60);
|
|
569
|
-
const hours = Math.floor(minutes / 60);
|
|
570
|
-
const days = Math.floor(hours / 24);
|
|
571
|
-
if (days > 0)
|
|
572
|
-
return `${days}d`;
|
|
573
|
-
if (hours > 0)
|
|
574
|
-
return `${hours}h`;
|
|
575
|
-
if (minutes > 0)
|
|
576
|
-
return `${minutes}m`;
|
|
577
|
-
if (seconds > 0)
|
|
578
|
-
return `${seconds}s`;
|
|
579
|
-
return `${ms}ms`;
|
|
580
|
-
}
|
|
581
|
-
//# sourceMappingURL=step.js.map
|
package/dist/step.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"step.js","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"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"}
|