@ironflow/node 0.1.0-test.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/dist/step.js ADDED
@@ -0,0 +1,325 @@
1
+ /**
2
+ * Step Execution Client
3
+ *
4
+ * Implements durable step primitives: run, sleep, sleepUntil, waitForEvent, parallel, map
5
+ */
6
+ import { StepError, isRetryable, parseDuration } from "@ironflow/core";
7
+ import { 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) => executeStep(ctx, name, fn),
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
+ };
27
+ }
28
+ /**
29
+ * Execute a step with memoization
30
+ */
31
+ async function executeStep(ctx, name, fn) {
32
+ const stepId = ctx.generateStepId(name);
33
+ // Check if step is already completed (memoized)
34
+ if (ctx.shouldSkipStep(stepId)) {
35
+ ctx.logger.debug(`Step memoized: ${name}`, { stepId });
36
+ return ctx.getMemoizedOutput(stepId);
37
+ }
38
+ // Execute the step
39
+ const startedAt = new Date();
40
+ ctx.logger.debug(`Step starting: ${name}`, { stepId });
41
+ try {
42
+ const output = await fn();
43
+ const endedAt = new Date();
44
+ const durationMs = endedAt.getTime() - startedAt.getTime();
45
+ // Record successful step
46
+ const result = {
47
+ id: stepId,
48
+ name,
49
+ type: "invoke",
50
+ status: "completed",
51
+ started_at: startedAt.toISOString(),
52
+ ended_at: endedAt.toISOString(),
53
+ duration_ms: durationMs,
54
+ output,
55
+ };
56
+ ctx.recordStep(result);
57
+ ctx.logger.debug(`Step completed: ${name}`, { stepId, durationMs });
58
+ return output;
59
+ }
60
+ catch (error) {
61
+ const endedAt = new Date();
62
+ const durationMs = endedAt.getTime() - startedAt.getTime();
63
+ // Re-throw YieldSignal (it's not a real error)
64
+ if (error instanceof YieldSignal) {
65
+ throw error;
66
+ }
67
+ // Record failed step
68
+ const errorMessage = error instanceof Error ? error.message : String(error);
69
+ const errorStack = error instanceof Error ? error.stack : undefined;
70
+ const result = {
71
+ id: stepId,
72
+ name,
73
+ type: "invoke",
74
+ status: "failed",
75
+ started_at: startedAt.toISOString(),
76
+ ended_at: endedAt.toISOString(),
77
+ duration_ms: durationMs,
78
+ error: {
79
+ message: errorMessage,
80
+ retryable: isRetryable(error),
81
+ stack: errorStack,
82
+ },
83
+ };
84
+ ctx.recordStep(result);
85
+ ctx.logger.error(`Step failed: ${name}`, {
86
+ stepId,
87
+ error: errorMessage,
88
+ durationMs,
89
+ });
90
+ // Wrap in StepError for better context
91
+ throw new StepError(errorMessage, {
92
+ stepId,
93
+ stepName: name,
94
+ retryable: isRetryable(error),
95
+ cause: error instanceof Error ? error : undefined,
96
+ });
97
+ }
98
+ }
99
+ /**
100
+ * Execute a durable sleep
101
+ */
102
+ async function executeSleep(ctx, name, duration) {
103
+ const stepId = ctx.generateStepId(name);
104
+ // Check if resuming from this sleep
105
+ if (ctx.isResumingFrom(stepId, "sleep")) {
106
+ ctx.logger.debug(`Sleep resumed: ${name}`, { stepId });
107
+ ctx.markResumeProcessed();
108
+ return;
109
+ }
110
+ // Check if step is already completed (memoized)
111
+ if (ctx.shouldSkipStep(stepId)) {
112
+ ctx.logger.debug(`Sleep memoized: ${name}`, { stepId });
113
+ return;
114
+ }
115
+ // Calculate wake time
116
+ const ms = parseDuration(duration);
117
+ const wakeAt = new Date(Date.now() + ms);
118
+ ctx.logger.debug(`Sleep yielding: ${name}`, {
119
+ stepId,
120
+ duration,
121
+ wakeAt: wakeAt.toISOString(),
122
+ });
123
+ // Throw yield signal to pause execution
124
+ const yieldInfo = {
125
+ step_id: stepId,
126
+ type: "sleep",
127
+ until: wakeAt.toISOString(),
128
+ };
129
+ throw new YieldSignal(yieldInfo);
130
+ }
131
+ /**
132
+ * Execute a durable sleep until a specific time
133
+ */
134
+ async function executeSleepUntil(ctx, name, until) {
135
+ const stepId = ctx.generateStepId(name);
136
+ // Check if resuming from this sleep
137
+ if (ctx.isResumingFrom(stepId, "sleep")) {
138
+ ctx.logger.debug(`SleepUntil resumed: ${name}`, { stepId });
139
+ ctx.markResumeProcessed();
140
+ return;
141
+ }
142
+ // Check if step is already completed (memoized)
143
+ if (ctx.shouldSkipStep(stepId)) {
144
+ ctx.logger.debug(`SleepUntil memoized: ${name}`, { stepId });
145
+ return;
146
+ }
147
+ // Parse the target time
148
+ const wakeAt = typeof until === "string" ? new Date(until) : until;
149
+ // Validate the date
150
+ if (isNaN(wakeAt.getTime())) {
151
+ throw new Error(`Invalid date for sleepUntil: ${until}`);
152
+ }
153
+ ctx.logger.debug(`SleepUntil yielding: ${name}`, {
154
+ stepId,
155
+ until: wakeAt.toISOString(),
156
+ });
157
+ // Throw yield signal to pause execution
158
+ const yieldInfo = {
159
+ step_id: stepId,
160
+ type: "sleep",
161
+ until: wakeAt.toISOString(),
162
+ };
163
+ throw new YieldSignal(yieldInfo);
164
+ }
165
+ /**
166
+ * Execute a durable wait for event
167
+ */
168
+ async function executeWaitForEvent(ctx, name, filter) {
169
+ const stepId = ctx.generateStepId(name);
170
+ // Check if resuming from this wait with the event data
171
+ if (ctx.isResumingFrom(stepId, "wait_for_event")) {
172
+ ctx.logger.debug(`WaitForEvent resumed: ${name}`, { stepId });
173
+ ctx.markResumeProcessed();
174
+ // The resume data contains the event that matched
175
+ const resumeData = ctx.getResumeData();
176
+ if (resumeData) {
177
+ return resumeData;
178
+ }
179
+ }
180
+ // Check if step is already completed (memoized)
181
+ if (ctx.shouldSkipStep(stepId)) {
182
+ ctx.logger.debug(`WaitForEvent memoized: ${name}`, { stepId });
183
+ const output = ctx.getMemoizedOutput(stepId);
184
+ if (output) {
185
+ return output;
186
+ }
187
+ }
188
+ ctx.logger.debug(`WaitForEvent yielding: ${name}`, { stepId, filter });
189
+ // Convert duration to string
190
+ const timeout = filter.timeout
191
+ ? typeof filter.timeout === "string"
192
+ ? filter.timeout
193
+ : durationToString(filter.timeout)
194
+ : "7d";
195
+ // Throw yield signal to pause execution
196
+ const yieldInfo = {
197
+ step_id: stepId,
198
+ type: "wait_for_event",
199
+ event_filter: {
200
+ event: filter.event,
201
+ match: filter.match,
202
+ timeout,
203
+ },
204
+ };
205
+ throw new YieldSignal(yieldInfo);
206
+ }
207
+ /**
208
+ * Execute multiple branches in parallel
209
+ */
210
+ async function executeParallel(ctx, name, branches, options = {}) {
211
+ const { concurrency, onError = "failFast" } = options;
212
+ ctx.logger.debug(`Starting parallel execution: ${name}`, {
213
+ branchCount: branches.length,
214
+ concurrency,
215
+ onError,
216
+ });
217
+ const results = new Array(branches.length);
218
+ let firstError = null;
219
+ let yieldSignal = null;
220
+ const cancelled = { value: false };
221
+ // Pre-create branch contexts and step clients for each branch
222
+ const branchStepClients = branches.map((_, index) => {
223
+ const branchCtx = ctx.createBranchContext(name, index);
224
+ return createStepClientInternal(branchCtx);
225
+ });
226
+ const executeBranch = async (index) => {
227
+ if (cancelled.value && onError === "failFast")
228
+ return;
229
+ try {
230
+ const scopedStep = branchStepClients[index];
231
+ const branchFn = branches[index];
232
+ const result = await branchFn(scopedStep);
233
+ results[index] = result;
234
+ }
235
+ catch (error) {
236
+ if (error instanceof YieldSignal) {
237
+ yieldSignal = error;
238
+ cancelled.value = true;
239
+ }
240
+ else {
241
+ const err = error instanceof Error ? error : new Error(String(error));
242
+ results[index] = err;
243
+ if (onError === "failFast" && !firstError) {
244
+ firstError = err;
245
+ cancelled.value = true;
246
+ }
247
+ }
248
+ }
249
+ };
250
+ // Execute with optional concurrency limit
251
+ if (concurrency && concurrency > 0) {
252
+ const pending = [];
253
+ for (let i = 0; i < branches.length; i++) {
254
+ if (cancelled.value && onError === "failFast")
255
+ break;
256
+ if (pending.length >= concurrency) {
257
+ await Promise.race(pending);
258
+ }
259
+ const promise = executeBranch(i).finally(() => {
260
+ const idx = pending.indexOf(promise);
261
+ if (idx !== -1)
262
+ pending.splice(idx, 1);
263
+ });
264
+ pending.push(promise);
265
+ }
266
+ await Promise.all(pending);
267
+ }
268
+ else {
269
+ await Promise.all(branches.map((_, i) => executeBranch(i)));
270
+ }
271
+ // Handle yield signal
272
+ if (yieldSignal) {
273
+ throw yieldSignal;
274
+ }
275
+ // Handle errors based on mode
276
+ if (onError === "failFast" && firstError) {
277
+ throw firstError;
278
+ }
279
+ if (onError !== "allSettled") {
280
+ const errorIndex = results.findIndex((r) => r instanceof Error);
281
+ if (errorIndex !== -1) {
282
+ throw results[errorIndex];
283
+ }
284
+ }
285
+ ctx.logger.debug(`Parallel execution completed: ${name}`, {
286
+ successCount: results.filter((r) => !(r instanceof Error)).length,
287
+ errorCount: results.filter((r) => r instanceof Error).length,
288
+ });
289
+ return results;
290
+ }
291
+ /**
292
+ * Map over items with parallel execution
293
+ */
294
+ async function executeMap(ctx, name, items, fn, options = {}) {
295
+ ctx.logger.debug(`Starting map execution: ${name}`, {
296
+ itemCount: items.length,
297
+ options,
298
+ });
299
+ const branches = items.map((item, index) => {
300
+ return async (step) => {
301
+ return await fn(item, step, index);
302
+ };
303
+ });
304
+ return executeParallel(ctx, name, branches, options);
305
+ }
306
+ /**
307
+ * Convert a duration to a string representation
308
+ */
309
+ function durationToString(duration) {
310
+ const ms = duration;
311
+ const seconds = Math.floor(ms / 1000);
312
+ const minutes = Math.floor(seconds / 60);
313
+ const hours = Math.floor(minutes / 60);
314
+ const days = Math.floor(hours / 24);
315
+ if (days > 0)
316
+ return `${days}d`;
317
+ if (hours > 0)
318
+ return `${hours}h`;
319
+ if (minutes > 0)
320
+ return `${minutes}m`;
321
+ if (seconds > 0)
322
+ return `${seconds}s`;
323
+ return `${ms}ms`;
324
+ }
325
+ //# sourceMappingURL=step.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step.js","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Node.js-specific type definitions
3
+ */
4
+ import type { IronflowFunction, Logger, FunctionConfig } from "@ironflow/core";
5
+ /**
6
+ * Configuration for the serve handler
7
+ */
8
+ export interface ServeConfig {
9
+ /** Functions to serve */
10
+ functions: IronflowFunction[];
11
+ /** Signing key for webhook verification */
12
+ signingKey?: string;
13
+ /** Skip signature verification (dev only) */
14
+ skipVerification?: boolean;
15
+ /** Logger instance (or false to disable) */
16
+ logger?: Logger | false;
17
+ }
18
+ /**
19
+ * Handler options for incoming requests
20
+ */
21
+ export interface HandlerOptions {
22
+ /** Override signing key per-request */
23
+ signingKey?: string;
24
+ }
25
+ /**
26
+ * Context available in the handler
27
+ */
28
+ export interface HandlerContext {
29
+ /** Raw request body */
30
+ rawBody: string;
31
+ /** Signature from headers */
32
+ signature?: string;
33
+ }
34
+ /**
35
+ * Configuration for pull mode worker
36
+ */
37
+ export interface WorkerConfig {
38
+ /** Ironflow server URL */
39
+ serverUrl?: string;
40
+ /** Functions this worker handles */
41
+ functions: IronflowFunction[];
42
+ /** Maximum concurrent jobs (default: 10) */
43
+ maxConcurrentJobs?: number;
44
+ /** Heartbeat interval in ms (default: 30000) */
45
+ heartbeatInterval?: number;
46
+ /** Reconnect delay in ms (default: 5000) */
47
+ reconnectDelay?: number;
48
+ /** Worker labels for routing */
49
+ labels?: Record<string, string>;
50
+ /** Transport type: "polling" or "streaming" */
51
+ transport?: "polling" | "streaming";
52
+ /** Logger instance (or false to disable) */
53
+ logger?: Logger | false;
54
+ }
55
+ /**
56
+ * Worker instance interface
57
+ */
58
+ export interface Worker {
59
+ /** Start the worker (blocks until stopped) */
60
+ start(): Promise<void>;
61
+ /** Gracefully drain and stop */
62
+ drain(): Promise<void>;
63
+ /** Force stop immediately */
64
+ stop(): void;
65
+ }
66
+ /**
67
+ * Create function configuration helper
68
+ */
69
+ export interface CreateFunctionConfig<TEvent = unknown> extends Omit<FunctionConfig<import("zod").ZodType>, 'schema'> {
70
+ /** Schema for event validation */
71
+ schema?: import("zod").ZodType<TEvent>;
72
+ }
73
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAM/E;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,4CAA4C;IAC5C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gDAAgD;IAChD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4CAA4C;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,+CAA+C;IAC/C,SAAS,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;IACpC,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,8CAA8C;IAC9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,gCAAgC;IAChC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,6BAA6B;IAC7B,IAAI,IAAI,IAAI,CAAC;CACd;AAMD;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,MAAM,GAAG,OAAO,CAAE,SAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnH,kCAAkC;IAClC,MAAM,CAAC,EAAE,OAAO,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CACxC"}
package/dist/types.js ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Node.js-specific type definitions
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Ironflow Streaming Worker
3
+ *
4
+ * ConnectRPC bidirectional streaming worker for low-latency pull mode.
5
+ */
6
+ import type { WorkerConfig, Worker } from "./types.js";
7
+ /**
8
+ * Create a streaming worker for Pull mode execution using ConnectRPC
9
+ *
10
+ * Uses bidirectional gRPC streaming for efficient job dispatch.
11
+ *
12
+ * @param config - Worker configuration
13
+ * @returns Worker instance
14
+ */
15
+ export declare function createStreamingWorker(config: WorkerConfig): Worker;
16
+ export default createStreamingWorker;
17
+ //# sourceMappingURL=worker-streaming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-streaming.d.ts","sourceRoot":"","sources":["../src/worker-streaming.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8BH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AA8BvD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAElE;AA2gBD,eAAe,qBAAqB,CAAC"}