@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.
Files changed (146) hide show
  1. package/LICENSE +181 -0
  2. package/package.json +8 -8
  3. package/dist/agent/agent.d.ts +0 -60
  4. package/dist/agent/agent.d.ts.map +0 -1
  5. package/dist/agent/agent.js +0 -133
  6. package/dist/agent/agent.js.map +0 -1
  7. package/dist/agent/approve.d.ts +0 -23
  8. package/dist/agent/approve.d.ts.map +0 -1
  9. package/dist/agent/approve.js +0 -42
  10. package/dist/agent/approve.js.map +0 -1
  11. package/dist/agent/dispatch.d.ts +0 -63
  12. package/dist/agent/dispatch.d.ts.map +0 -1
  13. package/dist/agent/dispatch.js +0 -130
  14. package/dist/agent/dispatch.js.map +0 -1
  15. package/dist/agent/errors.d.ts +0 -90
  16. package/dist/agent/errors.d.ts.map +0 -1
  17. package/dist/agent/errors.js +0 -136
  18. package/dist/agent/errors.js.map +0 -1
  19. package/dist/agent/index.d.ts +0 -30
  20. package/dist/agent/index.d.ts.map +0 -1
  21. package/dist/agent/index.js +0 -27
  22. package/dist/agent/index.js.map +0 -1
  23. package/dist/agent/internal-registry.d.ts +0 -27
  24. package/dist/agent/internal-registry.d.ts.map +0 -1
  25. package/dist/agent/internal-registry.js +0 -36
  26. package/dist/agent/internal-registry.js.map +0 -1
  27. package/dist/agent/internal.d.ts +0 -24
  28. package/dist/agent/internal.d.ts.map +0 -1
  29. package/dist/agent/internal.js +0 -29
  30. package/dist/agent/internal.js.map +0 -1
  31. package/dist/agent/llm.d.ts +0 -39
  32. package/dist/agent/llm.d.ts.map +0 -1
  33. package/dist/agent/llm.js +0 -59
  34. package/dist/agent/llm.js.map +0 -1
  35. package/dist/agent/mcp.d.ts +0 -51
  36. package/dist/agent/mcp.d.ts.map +0 -1
  37. package/dist/agent/mcp.js +0 -155
  38. package/dist/agent/mcp.js.map +0 -1
  39. package/dist/agent/memory.d.ts +0 -74
  40. package/dist/agent/memory.d.ts.map +0 -1
  41. package/dist/agent/memory.js +0 -130
  42. package/dist/agent/memory.js.map +0 -1
  43. package/dist/agent/spawn.d.ts +0 -20
  44. package/dist/agent/spawn.d.ts.map +0 -1
  45. package/dist/agent/spawn.js +0 -29
  46. package/dist/agent/spawn.js.map +0 -1
  47. package/dist/agent/tool.d.ts +0 -39
  48. package/dist/agent/tool.d.ts.map +0 -1
  49. package/dist/agent/tool.js +0 -103
  50. package/dist/agent/tool.js.map +0 -1
  51. package/dist/agent/types.d.ts +0 -363
  52. package/dist/agent/types.d.ts.map +0 -1
  53. package/dist/agent/types.js +0 -9
  54. package/dist/agent/types.js.map +0 -1
  55. package/dist/client.d.ts +0 -942
  56. package/dist/client.d.ts.map +0 -1
  57. package/dist/client.js +0 -1557
  58. package/dist/client.js.map +0 -1
  59. package/dist/command-dedup.d.ts +0 -61
  60. package/dist/command-dedup.d.ts.map +0 -1
  61. package/dist/command-dedup.js +0 -129
  62. package/dist/command-dedup.js.map +0 -1
  63. package/dist/config-client.d.ts +0 -58
  64. package/dist/config-client.d.ts.map +0 -1
  65. package/dist/config-client.js +0 -171
  66. package/dist/config-client.js.map +0 -1
  67. package/dist/function.d.ts +0 -53
  68. package/dist/function.d.ts.map +0 -1
  69. package/dist/function.js +0 -72
  70. package/dist/function.js.map +0 -1
  71. package/dist/index.d.ts +0 -71
  72. package/dist/index.d.ts.map +0 -1
  73. package/dist/index.js +0 -70
  74. package/dist/index.js.map +0 -1
  75. package/dist/internal/assert-defined.d.ts +0 -10
  76. package/dist/internal/assert-defined.d.ts.map +0 -1
  77. package/dist/internal/assert-defined.js +0 -15
  78. package/dist/internal/assert-defined.js.map +0 -1
  79. package/dist/internal/context.d.ts +0 -142
  80. package/dist/internal/context.d.ts.map +0 -1
  81. package/dist/internal/context.js +0 -306
  82. package/dist/internal/context.js.map +0 -1
  83. package/dist/internal/errors.d.ts +0 -66
  84. package/dist/internal/errors.d.ts.map +0 -1
  85. package/dist/internal/errors.js +0 -29
  86. package/dist/internal/errors.js.map +0 -1
  87. package/dist/internal/run-context.d.ts +0 -10
  88. package/dist/internal/run-context.d.ts.map +0 -1
  89. package/dist/internal/run-context.js +0 -23
  90. package/dist/internal/run-context.js.map +0 -1
  91. package/dist/kv.d.ts +0 -86
  92. package/dist/kv.d.ts.map +0 -1
  93. package/dist/kv.js +0 -261
  94. package/dist/kv.js.map +0 -1
  95. package/dist/projection-runner.d.ts +0 -83
  96. package/dist/projection-runner.d.ts.map +0 -1
  97. package/dist/projection-runner.js +0 -498
  98. package/dist/projection-runner.js.map +0 -1
  99. package/dist/projection.d.ts +0 -36
  100. package/dist/projection.d.ts.map +0 -1
  101. package/dist/projection.js +0 -55
  102. package/dist/projection.js.map +0 -1
  103. package/dist/secrets.d.ts +0 -6
  104. package/dist/secrets.d.ts.map +0 -1
  105. package/dist/secrets.js +0 -19
  106. package/dist/secrets.js.map +0 -1
  107. package/dist/serve.d.ts +0 -71
  108. package/dist/serve.d.ts.map +0 -1
  109. package/dist/serve.js +0 -460
  110. package/dist/serve.js.map +0 -1
  111. package/dist/step.d.ts +0 -18
  112. package/dist/step.d.ts.map +0 -1
  113. package/dist/step.js +0 -581
  114. package/dist/step.js.map +0 -1
  115. package/dist/subscribe.d.ts +0 -164
  116. package/dist/subscribe.d.ts.map +0 -1
  117. package/dist/subscribe.js +0 -487
  118. package/dist/subscribe.js.map +0 -1
  119. package/dist/test/index.d.ts +0 -22
  120. package/dist/test/index.d.ts.map +0 -1
  121. package/dist/test/index.js +0 -112
  122. package/dist/test/index.js.map +0 -1
  123. package/dist/test/test-step.d.ts +0 -21
  124. package/dist/test/test-step.d.ts.map +0 -1
  125. package/dist/test/test-step.js +0 -83
  126. package/dist/test/test-step.js.map +0 -1
  127. package/dist/types.d.ts +0 -108
  128. package/dist/types.d.ts.map +0 -1
  129. package/dist/types.js +0 -5
  130. package/dist/types.js.map +0 -1
  131. package/dist/version.d.ts +0 -2
  132. package/dist/version.d.ts.map +0 -1
  133. package/dist/version.js +0 -4
  134. package/dist/version.js.map +0 -1
  135. package/dist/webhook.d.ts +0 -22
  136. package/dist/webhook.d.ts.map +0 -1
  137. package/dist/webhook.js +0 -23
  138. package/dist/webhook.js.map +0 -1
  139. package/dist/worker-streaming.d.ts +0 -17
  140. package/dist/worker-streaming.d.ts.map +0 -1
  141. package/dist/worker-streaming.js +0 -510
  142. package/dist/worker-streaming.js.map +0 -1
  143. package/dist/worker.d.ts +0 -28
  144. package/dist/worker.d.ts.map +0 -1
  145. package/dist/worker.js +0 -559
  146. package/dist/worker.js.map +0 -1
package/dist/worker.js DELETED
@@ -1,559 +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, getServerUrl, } 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 || getServerUrl() || 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 at ${this.config.serverUrl}`);
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.debounce) {
213
- // Server expects snake_case period_ms / max_wait_ms;
214
- // SDK uses camelCase for parity with the rest of the TS surface.
215
- body.debounce = {
216
- period_ms: fn.config.debounce.periodMs,
217
- key: fn.config.debounce.key ?? "",
218
- ...(fn.config.debounce.maxWaitMs != null
219
- ? { max_wait_ms: fn.config.debounce.maxWaitMs }
220
- : {}),
221
- };
222
- }
223
- if (fn.config.actorKey)
224
- body.actorKey = fn.config.actorKey;
225
- if (fn.config.recording != null)
226
- body.recording = fn.config.recording;
227
- if (fn.config.recordingRetention != null)
228
- body.recordingRetention = fn.config.recordingRetention;
229
- if (fn.config.pauseBehavior)
230
- body.pauseBehavior = fn.config.pauseBehavior;
231
- if (fn.config.metadata)
232
- body.metadata = fn.config.metadata;
233
- if (fn.config.secrets?.length)
234
- body.secrets = fn.config.secrets;
235
- if (fn.config.compensateOnCancel)
236
- body.compensateOnCancel = true;
237
- if (fn.config.cancelOn?.length) {
238
- body.cancelOn = fn.config.cancelOn.map((s) => ({
239
- event: s.event,
240
- match: s.match,
241
- }));
242
- }
243
- const response = await fetch(`${baseUrl}/ironflow.v1.IronflowService/RegisterFunction`, {
244
- method: "POST",
245
- headers: this.buildHeaders(),
246
- body: JSON.stringify(body),
247
- signal: this.abortController?.signal,
248
- });
249
- if (!response.ok) {
250
- throw new IronflowError(`Failed to register function ${fnId}: ${response.status}`, { code: "FUNCTION_REGISTRATION_FAILED" });
251
- }
252
- this.logger.info(`Registered function: ${fnId}`);
253
- }
254
- }
255
- /**
256
- * Register the worker with the Ironflow server
257
- */
258
- async registerWorker(baseUrl) {
259
- const functionIds = Array.from(this.functionMap.keys());
260
- const response = await fetch(`${baseUrl}/api/v1/workers/${this.workerId}/register`, {
261
- method: "POST",
262
- headers: this.buildHeaders(),
263
- body: JSON.stringify({
264
- worker_id: this.workerId,
265
- hostname: getHostname(),
266
- function_ids: functionIds,
267
- max_concurrent_jobs: this.maxConcurrentJobs,
268
- labels: this.config.labels ?? {},
269
- version: {
270
- sdk: SDK_VERSION,
271
- runtime: `node-${process.version}`,
272
- },
273
- }),
274
- signal: this.abortController?.signal,
275
- });
276
- if (!response.ok) {
277
- throw new IronflowError("Failed to register worker", {
278
- code: "REGISTRATION_FAILED",
279
- });
280
- }
281
- }
282
- /**
283
- * Start projection runners in background
284
- */
285
- startProjectionRunners(baseUrl) {
286
- if (!this.config.projections?.length) {
287
- return;
288
- }
289
- for (const proj of this.config.projections) {
290
- const runner = createProjectionRunner({
291
- projection: proj,
292
- baseUrl,
293
- headers: this.buildHeaders(),
294
- logger: this.logger,
295
- signal: this.abortController?.signal,
296
- });
297
- this.projectionRunners.push(runner);
298
- // Try streaming first, fall back to polling if unsupported
299
- runner.startStreaming().catch((err) => {
300
- if (err instanceof StreamingUnsupportedError) {
301
- this.logger.info(`Streaming not available for ${proj.config.name}, falling back to polling`);
302
- runner.start().catch((pollErr) => {
303
- this.logger.error(`Projection runner failed: ${pollErr}`);
304
- });
305
- }
306
- else {
307
- this.logger.error(`Projection runner failed: ${err}`);
308
- }
309
- });
310
- }
311
- this.logger.info(`Started ${this.config.projections.length} projection runner(s)`);
312
- }
313
- /**
314
- * Start the heartbeat interval
315
- */
316
- startHeartbeat(baseUrl) {
317
- this.heartbeatTimer = setInterval(async () => {
318
- if (this.state !== "connected") {
319
- return;
320
- }
321
- try {
322
- await fetch(`${baseUrl}/api/v1/workers/${this.workerId}/heartbeat`, {
323
- method: "POST",
324
- headers: this.buildHeaders(),
325
- body: JSON.stringify({
326
- worker_id: this.workerId,
327
- active_jobs: this.activeJobs.size,
328
- jobs: Array.from(this.activeJobs.values()).map((job) => ({
329
- job_id: job.jobId,
330
- started_at: job.startedAt.toISOString(),
331
- })),
332
- }),
333
- signal: this.abortController?.signal,
334
- });
335
- }
336
- catch (error) {
337
- this.logger.warn("Heartbeat failed", { error: String(error) });
338
- }
339
- }, this.heartbeatInterval);
340
- }
341
- /**
342
- * Continuously poll the server for available jobs
343
- */
344
- async pollForJobs(baseUrl) {
345
- while (this.state === "connected") {
346
- // Check capacity
347
- if (this.activeJobs.size >= this.maxConcurrentJobs) {
348
- await this.sleep(1000);
349
- continue;
350
- }
351
- try {
352
- // Request a job
353
- const response = await fetch(`${baseUrl}/api/v1/workers/${this.workerId}/jobs`, {
354
- method: "GET",
355
- headers: this.buildHeaders(),
356
- signal: this.abortController?.signal,
357
- });
358
- if (response.status === 204) {
359
- // No jobs available
360
- await this.sleep(1000);
361
- continue;
362
- }
363
- if (response.status === 404) {
364
- // Worker or function not registered — server likely restarted.
365
- // Break polling so connect() returns and start() re-registers.
366
- this.logger.warn("Worker not found on server (404) — will re-register");
367
- this.state = "connecting";
368
- return;
369
- }
370
- if (!response.ok) {
371
- throw new Error(`Failed to get job: ${response.status}`);
372
- }
373
- // Parse and validate job assignment
374
- const rawJob = await response.json();
375
- const result = JobAssignmentSchema.safeParse(rawJob);
376
- if (!result.success) {
377
- const issues = result.error.issues
378
- .map((i) => `${i.path.join(".")}: ${i.message}`)
379
- .join(", ");
380
- this.logger.error(`Invalid job assignment: ${issues}`);
381
- await this.sleep(1000);
382
- continue;
383
- }
384
- // Process the validated job
385
- this.processJob(baseUrl, result.data);
386
- }
387
- catch (error) {
388
- if (this.state !== "connected") {
389
- break;
390
- }
391
- this.logger.warn("Job polling error", { error: String(error) });
392
- await this.sleep(5000);
393
- }
394
- }
395
- }
396
- /**
397
- * Start processing a job asynchronously
398
- */
399
- processJob(baseUrl, job) {
400
- const abortController = new AbortController();
401
- const activeJob = {
402
- jobId: job.job_id,
403
- runId: job.run_id,
404
- functionId: job.function_id,
405
- startedAt: new Date(),
406
- abortController,
407
- };
408
- this.activeJobs.set(job.job_id, activeJob);
409
- // Execute in background
410
- this.executeJob(baseUrl, job, abortController.signal)
411
- .catch((error) => {
412
- this.logger.error(`Job ${job.job_id} failed`, { error: String(error) });
413
- })
414
- .finally(() => {
415
- this.activeJobs.delete(job.job_id);
416
- });
417
- }
418
- /**
419
- * Execute a job and report results
420
- */
421
- async executeJob(baseUrl, job, signal) {
422
- const fn = this.functionMap.get(job.function_id);
423
- if (!fn) {
424
- await this.sendJobFailed(baseUrl, job.job_id, {
425
- message: `Function not found: ${job.function_id}`,
426
- code: "FUNCTION_NOT_FOUND",
427
- retryable: false,
428
- });
429
- return;
430
- }
431
- this.logger.info(`Processing job ${job.job_id} for ${job.function_id}`);
432
- // Build execution context from job assignment (with optional upcasting)
433
- const ctx = new ExecutionContext({
434
- run_id: job.run_id,
435
- function_id: job.function_id,
436
- attempt: job.attempt,
437
- event: job.event,
438
- steps: job.completed_steps.map((s) => ({
439
- id: s.step_id,
440
- name: s.name,
441
- status: "completed",
442
- output: s.output,
443
- })),
444
- resume: undefined,
445
- }, undefined, this.config.eventDefinitions, fn.config.stepTimeout, this.config.serverUrl);
446
- const step = createStepClient(ctx);
447
- const functionContext = {
448
- event: ctx.event,
449
- step,
450
- run: ctx.runInfo,
451
- logger: ctx.logger,
452
- secrets: createSecretsClient(job.context?.secrets),
453
- };
454
- try {
455
- // Check for abort
456
- if (signal.aborted) {
457
- return;
458
- }
459
- const result = await withRunContext(ctx.runId, () => fn.handler(functionContext));
460
- // Send completion with executed steps
461
- await this.sendJobCompleted(baseUrl, job.job_id, result, ctx.getExecutedSteps());
462
- }
463
- catch (error) {
464
- if (signal.aborted) {
465
- return;
466
- }
467
- if (isYieldSignal(error)) {
468
- // Send yield
469
- await this.sendStepYielded(baseUrl, job.job_id, error.yieldInfo);
470
- return;
471
- }
472
- const retryable = error instanceof IronflowError ? error.retryable : true;
473
- // Run compensations only if error is not retryable (terminal failure)
474
- if (ctx.hasCompensations() && !retryable) {
475
- await executeCompensations(ctx);
476
- }
477
- // Send failure with executed steps (includes compensation steps)
478
- await this.sendJobFailed(baseUrl, job.job_id, {
479
- message: error instanceof Error ? error.message : String(error),
480
- code: error instanceof IronflowError ? error.code : "ERROR",
481
- retryable,
482
- }, ctx.getExecutedSteps());
483
- }
484
- }
485
- /**
486
- * Report successful job completion
487
- */
488
- async sendJobCompleted(baseUrl, jobId, output, steps) {
489
- await fetch(`${baseUrl}/api/v1/workers/${this.workerId}/jobs/${jobId}`, {
490
- method: "PUT",
491
- headers: this.buildHeaders(),
492
- body: JSON.stringify({
493
- status: "completed",
494
- output,
495
- steps,
496
- }),
497
- });
498
- }
499
- /**
500
- * Report job failure
501
- */
502
- async sendJobFailed(baseUrl, jobId, error, steps) {
503
- const body = {
504
- status: "failed",
505
- error,
506
- };
507
- if (steps && steps.length > 0) {
508
- body.steps = steps;
509
- }
510
- await fetch(`${baseUrl}/api/v1/workers/${this.workerId}/jobs/${jobId}`, {
511
- method: "PUT",
512
- headers: this.buildHeaders(),
513
- body: JSON.stringify(body),
514
- });
515
- }
516
- /**
517
- * Report step yield
518
- */
519
- async sendStepYielded(baseUrl, jobId, yieldInfo) {
520
- await fetch(`${baseUrl}/api/v1/workers/${this.workerId}/jobs/${jobId}`, {
521
- method: "PUT",
522
- headers: this.buildHeaders(),
523
- body: JSON.stringify({
524
- status: "yielded",
525
- yield: yieldInfo,
526
- }),
527
- });
528
- }
529
- /**
530
- * Async sleep helper
531
- */
532
- sleep(ms) {
533
- return new Promise((resolve) => setTimeout(resolve, ms));
534
- }
535
- }
536
- /**
537
- * Generate a unique worker ID
538
- */
539
- function generateWorkerId() {
540
- const timestamp = Date.now().toString(36);
541
- const random = Math.random().toString(36).substring(2, 8);
542
- return `worker-${timestamp}-${random}`;
543
- }
544
- /**
545
- * Get the hostname from environment
546
- */
547
- function getHostname() {
548
- if (typeof process !== "undefined" && process.env["HOSTNAME"]) {
549
- return process.env["HOSTNAME"];
550
- }
551
- return "unknown";
552
- }
553
- // NOTE: createStreamingWorker is NOT re-exported here to avoid loading protobuf
554
- // dependencies. Import from "@ironflow/node/worker-streaming" if you need it.
555
- /**
556
- * Default export
557
- */
558
- export default createWorker;
559
- //# sourceMappingURL=worker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}