@ironflow/node 0.19.3 → 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.
Files changed (91) hide show
  1. package/LICENSE +181 -0
  2. package/README.md +5 -2
  3. package/package.json +20 -14
  4. package/dist/client.d.ts +0 -924
  5. package/dist/client.d.ts.map +0 -1
  6. package/dist/client.js +0 -1526
  7. package/dist/client.js.map +0 -1
  8. package/dist/command-dedup.d.ts +0 -61
  9. package/dist/command-dedup.d.ts.map +0 -1
  10. package/dist/command-dedup.js +0 -129
  11. package/dist/command-dedup.js.map +0 -1
  12. package/dist/config-client.d.ts +0 -58
  13. package/dist/config-client.d.ts.map +0 -1
  14. package/dist/config-client.js +0 -171
  15. package/dist/config-client.js.map +0 -1
  16. package/dist/function.d.ts +0 -53
  17. package/dist/function.d.ts.map +0 -1
  18. package/dist/function.js +0 -56
  19. package/dist/function.js.map +0 -1
  20. package/dist/index.d.ts +0 -71
  21. package/dist/index.d.ts.map +0 -1
  22. package/dist/index.js +0 -70
  23. package/dist/index.js.map +0 -1
  24. package/dist/internal/context.d.ts +0 -142
  25. package/dist/internal/context.d.ts.map +0 -1
  26. package/dist/internal/context.js +0 -306
  27. package/dist/internal/context.js.map +0 -1
  28. package/dist/internal/errors.d.ts +0 -66
  29. package/dist/internal/errors.d.ts.map +0 -1
  30. package/dist/internal/errors.js +0 -29
  31. package/dist/internal/errors.js.map +0 -1
  32. package/dist/internal/run-context.d.ts +0 -10
  33. package/dist/internal/run-context.d.ts.map +0 -1
  34. package/dist/internal/run-context.js +0 -23
  35. package/dist/internal/run-context.js.map +0 -1
  36. package/dist/kv.d.ts +0 -86
  37. package/dist/kv.d.ts.map +0 -1
  38. package/dist/kv.js +0 -261
  39. package/dist/kv.js.map +0 -1
  40. package/dist/projection-runner.d.ts +0 -83
  41. package/dist/projection-runner.d.ts.map +0 -1
  42. package/dist/projection-runner.js +0 -470
  43. package/dist/projection-runner.js.map +0 -1
  44. package/dist/projection.d.ts +0 -36
  45. package/dist/projection.d.ts.map +0 -1
  46. package/dist/projection.js +0 -55
  47. package/dist/projection.js.map +0 -1
  48. package/dist/secrets.d.ts +0 -6
  49. package/dist/secrets.d.ts.map +0 -1
  50. package/dist/secrets.js +0 -19
  51. package/dist/secrets.js.map +0 -1
  52. package/dist/serve.d.ts +0 -71
  53. package/dist/serve.d.ts.map +0 -1
  54. package/dist/serve.js +0 -434
  55. package/dist/serve.js.map +0 -1
  56. package/dist/step.d.ts +0 -18
  57. package/dist/step.d.ts.map +0 -1
  58. package/dist/step.js +0 -581
  59. package/dist/step.js.map +0 -1
  60. package/dist/subscribe.d.ts +0 -164
  61. package/dist/subscribe.d.ts.map +0 -1
  62. package/dist/subscribe.js +0 -487
  63. package/dist/subscribe.js.map +0 -1
  64. package/dist/test/index.d.ts +0 -22
  65. package/dist/test/index.d.ts.map +0 -1
  66. package/dist/test/index.js +0 -112
  67. package/dist/test/index.js.map +0 -1
  68. package/dist/test/test-step.d.ts +0 -21
  69. package/dist/test/test-step.d.ts.map +0 -1
  70. package/dist/test/test-step.js +0 -83
  71. package/dist/test/test-step.js.map +0 -1
  72. package/dist/types.d.ts +0 -108
  73. package/dist/types.d.ts.map +0 -1
  74. package/dist/types.js +0 -5
  75. package/dist/types.js.map +0 -1
  76. package/dist/version.d.ts +0 -2
  77. package/dist/version.d.ts.map +0 -1
  78. package/dist/version.js +0 -4
  79. package/dist/version.js.map +0 -1
  80. package/dist/webhook.d.ts +0 -22
  81. package/dist/webhook.d.ts.map +0 -1
  82. package/dist/webhook.js +0 -23
  83. package/dist/webhook.js.map +0 -1
  84. package/dist/worker-streaming.d.ts +0 -17
  85. package/dist/worker-streaming.d.ts.map +0 -1
  86. package/dist/worker-streaming.js +0 -510
  87. package/dist/worker-streaming.js.map +0 -1
  88. package/dist/worker.d.ts +0 -28
  89. package/dist/worker.d.ts.map +0 -1
  90. package/dist/worker.js +0 -540
  91. package/dist/worker.js.map +0 -1
package/dist/worker.js DELETED
@@ -1,540 +0,0 @@
1
- /**
2
- * Ironflow Worker Client
3
- *
4
- * Pull mode worker that polls the Ironflow server for jobs.
5
- */
6
- import { IronflowError, JobAssignmentSchema, createLogger, createNoopLogger, DEFAULT_SERVER_URL, DEFAULT_WORKER, HEADERS, DEFAULT_ENVIRONMENT, } from "@ironflow/core";
7
- import { ExecutionContext } from "./internal/context.js";
8
- import { createStepClient, executeCompensations } from "./step.js";
9
- import { isYieldSignal } from "./internal/errors.js";
10
- import { createProjectionRunner, StreamingUnsupportedError } from "./projection-runner.js";
11
- import { createSecretsClient } from "./secrets.js";
12
- import { withRunContext } from "./internal/run-context.js";
13
- import { SDK_VERSION } from "./version.js";
14
- /**
15
- * Create a worker for Pull mode execution
16
- *
17
- * @example
18
- * ```typescript
19
- * import { createWorker } from "@ironflow/node/worker";
20
- *
21
- * const worker = createWorker({
22
- * serverUrl: "http://localhost:9123",
23
- * functions: [myFunction],
24
- * maxConcurrentJobs: 4,
25
- * });
26
- *
27
- * await worker.start();
28
- * ```
29
- */
30
- export function createWorker(config) {
31
- return new IronflowWorker(config);
32
- }
33
- /**
34
- * Worker implementation using REST HTTP polling
35
- */
36
- class IronflowWorker {
37
- config;
38
- functionMap;
39
- workerId;
40
- maxConcurrentJobs;
41
- heartbeatInterval;
42
- reconnectDelay;
43
- logger;
44
- environment;
45
- apiKey;
46
- state = "idle";
47
- activeJobs = new Map();
48
- heartbeatTimer;
49
- abortController;
50
- projectionRunners = [];
51
- constructor(config) {
52
- this.config = {
53
- ...config,
54
- serverUrl: config.serverUrl || DEFAULT_SERVER_URL,
55
- };
56
- this.workerId = generateWorkerId();
57
- this.maxConcurrentJobs =
58
- config.maxConcurrentJobs ?? DEFAULT_WORKER.MAX_CONCURRENT_JOBS;
59
- this.heartbeatInterval =
60
- config.heartbeatInterval ?? DEFAULT_WORKER.HEARTBEAT_INTERVAL_MS;
61
- this.reconnectDelay =
62
- config.reconnectDelay ?? DEFAULT_WORKER.RECONNECT_DELAY_MS;
63
- this.environment =
64
- config.environment ?? process.env.IRONFLOW_ENV ?? DEFAULT_ENVIRONMENT;
65
- this.apiKey = config.apiKey ?? process.env.IRONFLOW_API_KEY;
66
- // Initialize logger
67
- if (config.logger === false) {
68
- this.logger = createNoopLogger();
69
- }
70
- else if (config.logger) {
71
- this.logger = config.logger;
72
- }
73
- else {
74
- this.logger = createLogger({ prefix: "[ironflow-worker]" });
75
- }
76
- // Build function map
77
- this.functionMap = new Map();
78
- for (const fn of config.functions) {
79
- if (this.functionMap.has(fn.config.id)) {
80
- this.logger.warn(`Duplicate function ID "${fn.config.id}" — the later definition will overwrite the earlier one. ` +
81
- "Each function should have a unique ID.");
82
- }
83
- this.functionMap.set(fn.config.id, fn);
84
- }
85
- }
86
- /**
87
- * Start the worker (blocks until stopped)
88
- */
89
- async start() {
90
- if (this.state !== "idle") {
91
- throw new IronflowError("Worker is already running", {
92
- code: "WORKER_ALREADY_RUNNING",
93
- });
94
- }
95
- this.state = "connecting";
96
- this.abortController = new AbortController();
97
- this.logger.info(`Starting worker ${this.workerId} with ${this.functionMap.size} functions`);
98
- // Connect loop with auto-reconnect
99
- // Use explicit type annotation to allow state changes from other methods
100
- while (this.state !== "stopped") {
101
- try {
102
- await this.connect();
103
- }
104
- catch (error) {
105
- if (this.state === "stopped") {
106
- break;
107
- }
108
- this.logger.error("Connection error", { error: String(error) });
109
- this.logger.info(`Reconnecting in ${this.reconnectDelay}ms...`);
110
- await this.sleep(this.reconnectDelay);
111
- }
112
- }
113
- this.logger.info("Worker stopped");
114
- }
115
- /**
116
- * Gracefully drain and stop
117
- */
118
- async drain() {
119
- if (this.state === "stopped" || this.state === "idle") {
120
- return;
121
- }
122
- this.logger.info("Draining worker...");
123
- this.state = "draining";
124
- // Wait for active jobs to complete
125
- while (this.activeJobs.size > 0) {
126
- this.logger.info(`Waiting for ${this.activeJobs.size} jobs to complete...`);
127
- await this.sleep(1000);
128
- }
129
- this.stop();
130
- }
131
- /**
132
- * Force stop immediately
133
- */
134
- stop() {
135
- this.state = "stopped";
136
- this.abortController?.abort();
137
- if (this.heartbeatTimer) {
138
- clearInterval(this.heartbeatTimer);
139
- this.heartbeatTimer = undefined;
140
- }
141
- // Stop projection runners
142
- for (const runner of this.projectionRunners) {
143
- runner.stop().catch(() => { });
144
- }
145
- this.projectionRunners = [];
146
- // Cancel all active jobs
147
- for (const job of this.activeJobs.values()) {
148
- job.abortController.abort();
149
- }
150
- this.activeJobs.clear();
151
- }
152
- /**
153
- * Build common headers including environment
154
- */
155
- buildHeaders() {
156
- const headers = {
157
- "Content-Type": "application/json",
158
- [HEADERS.ENVIRONMENT]: this.environment,
159
- };
160
- if (this.apiKey) {
161
- headers["Authorization"] = `Bearer ${this.apiKey}`;
162
- }
163
- return headers;
164
- }
165
- /**
166
- * Establish connection to the Ironflow server
167
- */
168
- async connect() {
169
- this.state = "connecting";
170
- // Clean up from previous connection (e.g. after server restart)
171
- if (this.heartbeatTimer) {
172
- clearInterval(this.heartbeatTimer);
173
- this.heartbeatTimer = undefined;
174
- }
175
- for (const runner of this.projectionRunners) {
176
- runner.stop().catch(() => { });
177
- }
178
- this.projectionRunners = [];
179
- const baseUrl = this.config.serverUrl.replace(/\/$/, "");
180
- // Register functions so the event router can find them
181
- await this.registerFunctions(baseUrl);
182
- // Register worker
183
- await this.registerWorker(baseUrl);
184
- this.state = "connected";
185
- this.logger.info("Connected to server");
186
- // Start projection runners (if any)
187
- this.startProjectionRunners(baseUrl);
188
- // Start heartbeat
189
- this.startHeartbeat(baseUrl);
190
- // Poll for jobs
191
- await this.pollForJobs(baseUrl);
192
- }
193
- /**
194
- * Register all worker functions with the Ironflow server
195
- */
196
- async registerFunctions(baseUrl) {
197
- for (const [fnId, fn] of this.functionMap) {
198
- const body = {
199
- id: fn.config.id,
200
- name: fn.config.name || fn.config.id,
201
- triggers: fn.config.triggers || [],
202
- preferredMode: "EXECUTION_MODE_PULL",
203
- };
204
- if (fn.config.description)
205
- body.description = fn.config.description;
206
- if (fn.config.retry)
207
- body.retry = fn.config.retry;
208
- if (fn.config.timeout)
209
- body.timeoutMs = fn.config.timeout;
210
- if (fn.config.concurrency)
211
- body.concurrency = fn.config.concurrency;
212
- if (fn.config.actorKey)
213
- body.actorKey = fn.config.actorKey;
214
- if (fn.config.recording != null)
215
- body.recording = fn.config.recording;
216
- if (fn.config.recordingRetention != null)
217
- body.recordingRetention = fn.config.recordingRetention;
218
- if (fn.config.pauseBehavior)
219
- body.pauseBehavior = fn.config.pauseBehavior;
220
- if (fn.config.metadata)
221
- body.metadata = fn.config.metadata;
222
- if (fn.config.secrets?.length)
223
- body.secrets = fn.config.secrets;
224
- const response = await fetch(`${baseUrl}/ironflow.v1.IronflowService/RegisterFunction`, {
225
- method: "POST",
226
- headers: this.buildHeaders(),
227
- body: JSON.stringify(body),
228
- signal: this.abortController?.signal,
229
- });
230
- if (!response.ok) {
231
- throw new IronflowError(`Failed to register function ${fnId}: ${response.status}`, { code: "FUNCTION_REGISTRATION_FAILED" });
232
- }
233
- this.logger.info(`Registered function: ${fnId}`);
234
- }
235
- }
236
- /**
237
- * Register the worker with the Ironflow server
238
- */
239
- async registerWorker(baseUrl) {
240
- const functionIds = Array.from(this.functionMap.keys());
241
- const response = await fetch(`${baseUrl}/api/v1/workers/${this.workerId}/register`, {
242
- method: "POST",
243
- headers: this.buildHeaders(),
244
- body: JSON.stringify({
245
- worker_id: this.workerId,
246
- hostname: getHostname(),
247
- function_ids: functionIds,
248
- max_concurrent_jobs: this.maxConcurrentJobs,
249
- labels: this.config.labels ?? {},
250
- version: {
251
- sdk: SDK_VERSION,
252
- runtime: `node-${process.version}`,
253
- },
254
- }),
255
- signal: this.abortController?.signal,
256
- });
257
- if (!response.ok) {
258
- throw new IronflowError("Failed to register worker", {
259
- code: "REGISTRATION_FAILED",
260
- });
261
- }
262
- }
263
- /**
264
- * Start projection runners in background
265
- */
266
- startProjectionRunners(baseUrl) {
267
- if (!this.config.projections?.length) {
268
- return;
269
- }
270
- for (const proj of this.config.projections) {
271
- const runner = createProjectionRunner({
272
- projection: proj,
273
- baseUrl,
274
- headers: this.buildHeaders(),
275
- logger: this.logger,
276
- signal: this.abortController?.signal,
277
- });
278
- this.projectionRunners.push(runner);
279
- // Try streaming first, fall back to polling if unsupported
280
- runner.startStreaming().catch((err) => {
281
- if (err instanceof StreamingUnsupportedError) {
282
- this.logger.info(`Streaming not available for ${proj.config.name}, falling back to polling`);
283
- runner.start().catch((pollErr) => {
284
- this.logger.error(`Projection runner failed: ${pollErr}`);
285
- });
286
- }
287
- else {
288
- this.logger.error(`Projection runner failed: ${err}`);
289
- }
290
- });
291
- }
292
- this.logger.info(`Started ${this.config.projections.length} projection runner(s)`);
293
- }
294
- /**
295
- * Start the heartbeat interval
296
- */
297
- startHeartbeat(baseUrl) {
298
- this.heartbeatTimer = setInterval(async () => {
299
- if (this.state !== "connected") {
300
- return;
301
- }
302
- try {
303
- await fetch(`${baseUrl}/api/v1/workers/${this.workerId}/heartbeat`, {
304
- method: "POST",
305
- headers: this.buildHeaders(),
306
- body: JSON.stringify({
307
- worker_id: this.workerId,
308
- active_jobs: this.activeJobs.size,
309
- jobs: Array.from(this.activeJobs.values()).map((job) => ({
310
- job_id: job.jobId,
311
- started_at: job.startedAt.toISOString(),
312
- })),
313
- }),
314
- signal: this.abortController?.signal,
315
- });
316
- }
317
- catch (error) {
318
- this.logger.warn("Heartbeat failed", { error: String(error) });
319
- }
320
- }, this.heartbeatInterval);
321
- }
322
- /**
323
- * Continuously poll the server for available jobs
324
- */
325
- async pollForJobs(baseUrl) {
326
- while (this.state === "connected") {
327
- // Check capacity
328
- if (this.activeJobs.size >= this.maxConcurrentJobs) {
329
- await this.sleep(1000);
330
- continue;
331
- }
332
- try {
333
- // Request a job
334
- const response = await fetch(`${baseUrl}/api/v1/workers/${this.workerId}/jobs`, {
335
- method: "GET",
336
- headers: this.buildHeaders(),
337
- signal: this.abortController?.signal,
338
- });
339
- if (response.status === 204) {
340
- // No jobs available
341
- await this.sleep(1000);
342
- continue;
343
- }
344
- if (response.status === 404) {
345
- // Worker or function not registered — server likely restarted.
346
- // Break polling so connect() returns and start() re-registers.
347
- this.logger.warn("Worker not found on server (404) — will re-register");
348
- this.state = "connecting";
349
- return;
350
- }
351
- if (!response.ok) {
352
- throw new Error(`Failed to get job: ${response.status}`);
353
- }
354
- // Parse and validate job assignment
355
- const rawJob = await response.json();
356
- const result = JobAssignmentSchema.safeParse(rawJob);
357
- if (!result.success) {
358
- const issues = result.error.issues
359
- .map((i) => `${i.path.join(".")}: ${i.message}`)
360
- .join(", ");
361
- this.logger.error(`Invalid job assignment: ${issues}`);
362
- await this.sleep(1000);
363
- continue;
364
- }
365
- // Process the validated job
366
- this.processJob(baseUrl, result.data);
367
- }
368
- catch (error) {
369
- if (this.state !== "connected") {
370
- break;
371
- }
372
- this.logger.warn("Job polling error", { error: String(error) });
373
- await this.sleep(5000);
374
- }
375
- }
376
- }
377
- /**
378
- * Start processing a job asynchronously
379
- */
380
- processJob(baseUrl, job) {
381
- const abortController = new AbortController();
382
- const activeJob = {
383
- jobId: job.job_id,
384
- runId: job.run_id,
385
- functionId: job.function_id,
386
- startedAt: new Date(),
387
- abortController,
388
- };
389
- this.activeJobs.set(job.job_id, activeJob);
390
- // Execute in background
391
- this.executeJob(baseUrl, job, abortController.signal)
392
- .catch((error) => {
393
- this.logger.error(`Job ${job.job_id} failed`, { error: String(error) });
394
- })
395
- .finally(() => {
396
- this.activeJobs.delete(job.job_id);
397
- });
398
- }
399
- /**
400
- * Execute a job and report results
401
- */
402
- async executeJob(baseUrl, job, signal) {
403
- const fn = this.functionMap.get(job.function_id);
404
- if (!fn) {
405
- await this.sendJobFailed(baseUrl, job.job_id, {
406
- message: `Function not found: ${job.function_id}`,
407
- code: "FUNCTION_NOT_FOUND",
408
- retryable: false,
409
- });
410
- return;
411
- }
412
- this.logger.info(`Processing job ${job.job_id} for ${job.function_id}`);
413
- // Build execution context from job assignment (with optional upcasting)
414
- const ctx = new ExecutionContext({
415
- run_id: job.run_id,
416
- function_id: job.function_id,
417
- attempt: job.attempt,
418
- event: job.event,
419
- steps: job.completed_steps.map((s) => ({
420
- id: s.step_id,
421
- name: s.name,
422
- status: "completed",
423
- output: s.output,
424
- })),
425
- resume: undefined,
426
- }, undefined, this.config.eventDefinitions, fn.config.stepTimeout, this.config.serverUrl);
427
- const step = createStepClient(ctx);
428
- const functionContext = {
429
- event: ctx.event,
430
- step,
431
- run: ctx.runInfo,
432
- logger: ctx.logger,
433
- secrets: createSecretsClient(job.context?.secrets),
434
- };
435
- try {
436
- // Check for abort
437
- if (signal.aborted) {
438
- return;
439
- }
440
- const result = await withRunContext(ctx.runId, () => fn.handler(functionContext));
441
- // Send completion with executed steps
442
- await this.sendJobCompleted(baseUrl, job.job_id, result, ctx.getExecutedSteps());
443
- }
444
- catch (error) {
445
- if (signal.aborted) {
446
- return;
447
- }
448
- if (isYieldSignal(error)) {
449
- // Send yield
450
- await this.sendStepYielded(baseUrl, job.job_id, error.yieldInfo);
451
- return;
452
- }
453
- const retryable = error instanceof IronflowError ? error.retryable : true;
454
- // Run compensations only if error is not retryable (terminal failure)
455
- if (ctx.hasCompensations() && !retryable) {
456
- await executeCompensations(ctx);
457
- }
458
- // Send failure with executed steps (includes compensation steps)
459
- await this.sendJobFailed(baseUrl, job.job_id, {
460
- message: error instanceof Error ? error.message : String(error),
461
- code: error instanceof IronflowError ? error.code : "ERROR",
462
- retryable,
463
- }, ctx.getExecutedSteps());
464
- }
465
- }
466
- /**
467
- * Report successful job completion
468
- */
469
- async sendJobCompleted(baseUrl, jobId, output, steps) {
470
- await fetch(`${baseUrl}/api/v1/workers/${this.workerId}/jobs/${jobId}`, {
471
- method: "PUT",
472
- headers: this.buildHeaders(),
473
- body: JSON.stringify({
474
- status: "completed",
475
- output,
476
- steps,
477
- }),
478
- });
479
- }
480
- /**
481
- * Report job failure
482
- */
483
- async sendJobFailed(baseUrl, jobId, error, steps) {
484
- const body = {
485
- status: "failed",
486
- error,
487
- };
488
- if (steps && steps.length > 0) {
489
- body.steps = steps;
490
- }
491
- await fetch(`${baseUrl}/api/v1/workers/${this.workerId}/jobs/${jobId}`, {
492
- method: "PUT",
493
- headers: this.buildHeaders(),
494
- body: JSON.stringify(body),
495
- });
496
- }
497
- /**
498
- * Report step yield
499
- */
500
- async sendStepYielded(baseUrl, jobId, yieldInfo) {
501
- await fetch(`${baseUrl}/api/v1/workers/${this.workerId}/jobs/${jobId}`, {
502
- method: "PUT",
503
- headers: this.buildHeaders(),
504
- body: JSON.stringify({
505
- status: "yielded",
506
- yield: yieldInfo,
507
- }),
508
- });
509
- }
510
- /**
511
- * Async sleep helper
512
- */
513
- sleep(ms) {
514
- return new Promise((resolve) => setTimeout(resolve, ms));
515
- }
516
- }
517
- /**
518
- * Generate a unique worker ID
519
- */
520
- function generateWorkerId() {
521
- const timestamp = Date.now().toString(36);
522
- const random = Math.random().toString(36).substring(2, 8);
523
- return `worker-${timestamp}-${random}`;
524
- }
525
- /**
526
- * Get the hostname from environment
527
- */
528
- function getHostname() {
529
- if (typeof process !== "undefined" && process.env["HOSTNAME"]) {
530
- return process.env["HOSTNAME"];
531
- }
532
- return "unknown";
533
- }
534
- // NOTE: createStreamingWorker is NOT re-exported here to avoid loading protobuf
535
- // dependencies. Import from "@ironflow/node/worker-streaming" if you need it.
536
- /**
537
- * Default export
538
- */
539
- export default createWorker;
540
- //# sourceMappingURL=worker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}