@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.
@@ -0,0 +1,469 @@
1
+ /**
2
+ * Ironflow Streaming Worker
3
+ *
4
+ * ConnectRPC bidirectional streaming worker for low-latency pull mode.
5
+ */
6
+ import { createClient } from "@connectrpc/connect";
7
+ import { createConnectTransport } from "@connectrpc/connect-node";
8
+ import { create } from "@bufbuild/protobuf";
9
+ import { IronflowError, createLogger, createNoopLogger, DEFAULT_SERVER_URL, DEFAULT_WORKER, WorkerService, } from "@ironflow/core";
10
+ import { WorkerMessageSchema, WorkerRegisterSchema, WorkerHeartbeatSchema, JobCompletedSchema, JobFailedSchema, JobAckSchema, ErrorSchema, } from "@ironflow/core/gen";
11
+ import { ExecutionContext } from "./internal/context.js";
12
+ import { createStepClient } from "./step.js";
13
+ import { isYieldSignal } from "./internal/errors.js";
14
+ import { isRetryable } from "@ironflow/core";
15
+ /**
16
+ * Create a streaming worker for Pull mode execution using ConnectRPC
17
+ *
18
+ * Uses bidirectional gRPC streaming for efficient job dispatch.
19
+ *
20
+ * @param config - Worker configuration
21
+ * @returns Worker instance
22
+ */
23
+ export function createStreamingWorker(config) {
24
+ return new StreamingWorker(config);
25
+ }
26
+ /**
27
+ * Streaming Worker implementation using ConnectRPC bidirectional streaming
28
+ */
29
+ class StreamingWorker {
30
+ config;
31
+ functionMap;
32
+ workerId;
33
+ maxConcurrentJobs;
34
+ heartbeatInterval;
35
+ reconnectDelay;
36
+ logger;
37
+ state = "idle";
38
+ activeJobs = new Map();
39
+ heartbeatTimer;
40
+ abortController;
41
+ sendMessage;
42
+ constructor(config) {
43
+ this.config = {
44
+ ...config,
45
+ serverUrl: config.serverUrl || DEFAULT_SERVER_URL,
46
+ };
47
+ this.workerId = generateWorkerId();
48
+ this.maxConcurrentJobs =
49
+ config.maxConcurrentJobs ?? DEFAULT_WORKER.MAX_CONCURRENT_JOBS;
50
+ this.heartbeatInterval =
51
+ config.heartbeatInterval ?? DEFAULT_WORKER.HEARTBEAT_INTERVAL_MS;
52
+ this.reconnectDelay =
53
+ config.reconnectDelay ?? DEFAULT_WORKER.RECONNECT_DELAY_MS;
54
+ // Initialize logger
55
+ if (config.logger === false) {
56
+ this.logger = createNoopLogger();
57
+ }
58
+ else if (config.logger) {
59
+ this.logger = config.logger;
60
+ }
61
+ else {
62
+ this.logger = createLogger({ prefix: "[ironflow-streaming]" });
63
+ }
64
+ // Build function map
65
+ this.functionMap = new Map();
66
+ for (const fn of config.functions) {
67
+ this.functionMap.set(fn.config.id, fn);
68
+ }
69
+ }
70
+ /**
71
+ * Start the worker (blocks until stopped)
72
+ */
73
+ async start() {
74
+ if (this.state !== "idle") {
75
+ throw new IronflowError("Worker is already running", {
76
+ code: "WORKER_ALREADY_RUNNING",
77
+ });
78
+ }
79
+ this.state = "connecting";
80
+ this.abortController = new AbortController();
81
+ this.logger.info(`Starting streaming worker ${this.workerId} with ${this.functionMap.size} functions`);
82
+ // Connect loop with auto-reconnect
83
+ while (this.state !== "stopped") {
84
+ try {
85
+ await this.connect();
86
+ }
87
+ catch (error) {
88
+ if (this.state === "stopped") {
89
+ break;
90
+ }
91
+ this.logger.error("Connection error", { error: String(error) });
92
+ this.logger.info(`Reconnecting in ${this.reconnectDelay}ms...`);
93
+ await this.sleep(this.reconnectDelay);
94
+ }
95
+ }
96
+ this.logger.info("Streaming worker stopped");
97
+ }
98
+ /**
99
+ * Gracefully drain and stop
100
+ */
101
+ async drain() {
102
+ if (this.state === "stopped" || this.state === "idle") {
103
+ return;
104
+ }
105
+ this.logger.info("Draining worker...");
106
+ this.state = "draining";
107
+ // Wait for active jobs to complete
108
+ while (this.activeJobs.size > 0) {
109
+ this.logger.info(`Waiting for ${this.activeJobs.size} jobs to complete...`);
110
+ await this.sleep(1000);
111
+ }
112
+ this.stop();
113
+ }
114
+ /**
115
+ * Force stop immediately
116
+ */
117
+ stop() {
118
+ this.state = "stopped";
119
+ this.abortController?.abort();
120
+ if (this.heartbeatTimer) {
121
+ clearInterval(this.heartbeatTimer);
122
+ this.heartbeatTimer = undefined;
123
+ }
124
+ // Cancel all active jobs
125
+ for (const job of this.activeJobs.values()) {
126
+ job.abortController.abort();
127
+ }
128
+ this.activeJobs.clear();
129
+ }
130
+ /**
131
+ * Connect to the server via ConnectRPC bidirectional streaming
132
+ */
133
+ async connect() {
134
+ this.state = "connecting";
135
+ // Create Connect transport with HTTP/2 for bidirectional streaming
136
+ const transport = createConnectTransport({
137
+ baseUrl: this.config.serverUrl,
138
+ httpVersion: "2",
139
+ });
140
+ // Create client with type assertion due to connect-es v1/v2 type mismatch
141
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
142
+ const client = createClient(WorkerService, transport);
143
+ // Create message queue for sending
144
+ const messageQueue = [];
145
+ let resolveNext = null;
146
+ // Function to send messages
147
+ this.sendMessage = (msg) => {
148
+ messageQueue.push(msg);
149
+ if (resolveNext) {
150
+ resolveNext();
151
+ resolveNext = null;
152
+ }
153
+ };
154
+ // Async generator for outgoing messages
155
+ async function* outgoingMessages() {
156
+ while (true) {
157
+ if (messageQueue.length > 0) {
158
+ yield messageQueue.shift();
159
+ }
160
+ else {
161
+ await new Promise((resolve) => {
162
+ resolveNext = resolve;
163
+ });
164
+ }
165
+ }
166
+ }
167
+ // Send registration message first
168
+ const registerMsg = create(WorkerMessageSchema, {
169
+ payload: {
170
+ case: "register",
171
+ value: create(WorkerRegisterSchema, {
172
+ workerId: this.workerId,
173
+ hostname: getHostname(),
174
+ functionIds: Array.from(this.functionMap.keys()),
175
+ maxConcurrentJobs: this.maxConcurrentJobs,
176
+ labels: this.config.labels ?? {},
177
+ version: {
178
+ sdk: "0.1.0",
179
+ runtime: `node-${process.version}`,
180
+ },
181
+ }),
182
+ },
183
+ });
184
+ this.sendMessage(registerMsg);
185
+ this.state = "connected";
186
+ this.logger.info("Connected to server via streaming");
187
+ // Start heartbeat
188
+ this.startHeartbeat();
189
+ // Process incoming messages from the stream
190
+ try {
191
+ const stream = client.connect(outgoingMessages());
192
+ for await (const message of stream) {
193
+ if (this.state === "stopped") {
194
+ break;
195
+ }
196
+ await this.handleEngineMessage(message);
197
+ }
198
+ }
199
+ finally {
200
+ if (this.heartbeatTimer) {
201
+ clearInterval(this.heartbeatTimer);
202
+ this.heartbeatTimer = undefined;
203
+ }
204
+ }
205
+ }
206
+ /**
207
+ * Handle incoming messages from the engine
208
+ */
209
+ async handleEngineMessage(message) {
210
+ switch (message.payload.case) {
211
+ case "registered":
212
+ this.logger.info("Registration confirmed", {
213
+ heartbeatInterval: message.payload.value.heartbeatIntervalMs,
214
+ });
215
+ break;
216
+ case "job":
217
+ await this.handleJobAssignment(message.payload.value);
218
+ break;
219
+ case "resume":
220
+ this.logger.info("Resume job received", {
221
+ jobId: message.payload.value.jobId,
222
+ stepId: message.payload.value.stepId,
223
+ });
224
+ // TODO: Handle job resume
225
+ break;
226
+ case "cancel":
227
+ this.handleJobCancel(message.payload.value.jobId, message.payload.value.reason);
228
+ break;
229
+ case "shutdown":
230
+ this.logger.info("Shutdown requested", {
231
+ reason: message.payload.value.reason,
232
+ });
233
+ this.drain();
234
+ break;
235
+ default:
236
+ this.logger.warn("Unknown message type", { case: message.payload.case });
237
+ }
238
+ }
239
+ /**
240
+ * Handle a job assignment from the server
241
+ */
242
+ async handleJobAssignment(job) {
243
+ // Check capacity
244
+ if (this.activeJobs.size >= this.maxConcurrentJobs) {
245
+ this.logger.warn("At capacity, cannot accept job", { jobId: job.jobId });
246
+ return;
247
+ }
248
+ // Send ack
249
+ if (this.sendMessage) {
250
+ const ackMsg = create(WorkerMessageSchema, {
251
+ payload: {
252
+ case: "jobAck",
253
+ value: create(JobAckSchema, {
254
+ jobId: job.jobId,
255
+ }),
256
+ },
257
+ });
258
+ this.sendMessage(ackMsg);
259
+ }
260
+ // Track active job
261
+ const abortController = new AbortController();
262
+ const activeJob = {
263
+ jobId: job.jobId,
264
+ runId: job.runId,
265
+ functionId: job.functionId,
266
+ startedAt: new Date(),
267
+ abortController,
268
+ };
269
+ this.activeJobs.set(job.jobId, activeJob);
270
+ // Execute in background
271
+ this.executeJob(job, abortController.signal)
272
+ .catch((error) => {
273
+ this.logger.error(`Job ${job.jobId} failed`, { error: String(error) });
274
+ })
275
+ .finally(() => {
276
+ this.activeJobs.delete(job.jobId);
277
+ });
278
+ }
279
+ /**
280
+ * Handle job cancellation
281
+ */
282
+ handleJobCancel(jobId, reason) {
283
+ const job = this.activeJobs.get(jobId);
284
+ if (job) {
285
+ this.logger.info("Cancelling job", { jobId, reason });
286
+ job.abortController.abort();
287
+ this.activeJobs.delete(jobId);
288
+ }
289
+ }
290
+ /**
291
+ * Execute a job
292
+ */
293
+ async executeJob(job, signal) {
294
+ const fn = this.functionMap.get(job.functionId);
295
+ if (!fn) {
296
+ await this.sendJobFailed(job.jobId, {
297
+ message: `Function not found: ${job.functionId}`,
298
+ code: "FUNCTION_NOT_FOUND",
299
+ retryable: false,
300
+ });
301
+ return;
302
+ }
303
+ this.logger.info(`Processing job ${job.jobId} for ${job.functionId}`);
304
+ // Convert protobuf event to our format
305
+ const timestampToISO = (ts) => {
306
+ if (!ts)
307
+ return new Date().toISOString();
308
+ const ms = Number(ts.seconds) * 1000 + Math.floor(ts.nanos / 1_000_000);
309
+ return new Date(ms).toISOString();
310
+ };
311
+ const event = job.event
312
+ ? {
313
+ id: job.event.id,
314
+ name: job.event.name,
315
+ data: job.event.data ?? {},
316
+ timestamp: timestampToISO(job.event.timestamp),
317
+ }
318
+ : {
319
+ id: "",
320
+ name: "",
321
+ data: {},
322
+ timestamp: new Date().toISOString(),
323
+ };
324
+ // Build execution context
325
+ const ctx = new ExecutionContext({
326
+ run_id: job.runId,
327
+ function_id: job.functionId,
328
+ attempt: job.attempt,
329
+ event,
330
+ steps: job.completedSteps.map((s) => ({
331
+ id: s.stepId,
332
+ name: s.name,
333
+ status: "completed",
334
+ output: s.output,
335
+ })),
336
+ resume: undefined,
337
+ });
338
+ const step = createStepClient(ctx);
339
+ const functionContext = {
340
+ event: ctx.event,
341
+ step,
342
+ run: ctx.runInfo,
343
+ logger: ctx.logger,
344
+ };
345
+ const startTime = Date.now();
346
+ try {
347
+ if (signal.aborted) {
348
+ return;
349
+ }
350
+ const result = await fn.handler(functionContext);
351
+ const durationMs = Date.now() - startTime;
352
+ // Send completion via stream
353
+ await this.sendJobCompleted(job.jobId, result, durationMs);
354
+ }
355
+ catch (error) {
356
+ if (signal.aborted) {
357
+ return;
358
+ }
359
+ const durationMs = Date.now() - startTime;
360
+ if (isYieldSignal(error)) {
361
+ // TODO: Send step yielded via stream
362
+ this.logger.info("Job yielded", { jobId: job.jobId });
363
+ return;
364
+ }
365
+ // Send failure via stream
366
+ await this.sendJobFailed(job.jobId, {
367
+ message: error instanceof Error ? error.message : String(error),
368
+ code: error instanceof IronflowError ? error.code : "ERROR",
369
+ retryable: isRetryable(error),
370
+ durationMs,
371
+ });
372
+ }
373
+ }
374
+ /**
375
+ * Send job completed message via stream
376
+ */
377
+ async sendJobCompleted(jobId, output, durationMs) {
378
+ if (!this.sendMessage)
379
+ return;
380
+ const msg = create(WorkerMessageSchema, {
381
+ payload: {
382
+ case: "jobCompleted",
383
+ value: create(JobCompletedSchema, {
384
+ jobId,
385
+ output: output,
386
+ durationMs,
387
+ }),
388
+ },
389
+ });
390
+ this.sendMessage(msg);
391
+ }
392
+ /**
393
+ * Send job failed message via stream
394
+ */
395
+ async sendJobFailed(jobId, error) {
396
+ if (!this.sendMessage)
397
+ return;
398
+ const msg = create(WorkerMessageSchema, {
399
+ payload: {
400
+ case: "jobFailed",
401
+ value: create(JobFailedSchema, {
402
+ jobId,
403
+ error: create(ErrorSchema, {
404
+ message: error.message,
405
+ code: error.code,
406
+ retryable: error.retryable,
407
+ }),
408
+ durationMs: error.durationMs ?? 0,
409
+ }),
410
+ },
411
+ });
412
+ this.sendMessage(msg);
413
+ }
414
+ /**
415
+ * Start sending heartbeats via stream
416
+ */
417
+ startHeartbeat() {
418
+ this.heartbeatTimer = setInterval(() => {
419
+ if (this.state !== "connected" || !this.sendMessage) {
420
+ return;
421
+ }
422
+ const msg = create(WorkerMessageSchema, {
423
+ payload: {
424
+ case: "heartbeat",
425
+ value: create(WorkerHeartbeatSchema, {
426
+ workerId: this.workerId,
427
+ activeJobs: this.activeJobs.size,
428
+ jobs: Array.from(this.activeJobs.values()).map((job) => ({
429
+ jobId: job.jobId,
430
+ startedAt: {
431
+ seconds: BigInt(Math.floor(job.startedAt.getTime() / 1000)),
432
+ nanos: 0,
433
+ },
434
+ })),
435
+ }),
436
+ },
437
+ });
438
+ this.sendMessage(msg);
439
+ }, this.heartbeatInterval);
440
+ }
441
+ /**
442
+ * Sleep helper
443
+ */
444
+ sleep(ms) {
445
+ return new Promise((resolve) => setTimeout(resolve, ms));
446
+ }
447
+ }
448
+ // ============================================================================
449
+ // Utilities
450
+ // ============================================================================
451
+ /**
452
+ * Generate a unique worker ID
453
+ */
454
+ function generateWorkerId() {
455
+ const timestamp = Date.now().toString(36);
456
+ const random = Math.random().toString(36).substring(2, 8);
457
+ return `worker-stream-${timestamp}-${random}`;
458
+ }
459
+ /**
460
+ * Get the hostname
461
+ */
462
+ function getHostname() {
463
+ if (typeof process !== "undefined" && process.env["HOSTNAME"]) {
464
+ return process.env["HOSTNAME"];
465
+ }
466
+ return "unknown";
467
+ }
468
+ export default createStreamingWorker;
469
+ //# sourceMappingURL=worker-streaming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-streaming.js","sourceRoot":"","sources":["../src/worker-streaming.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,MAAM,EAAmB,MAAM,oBAAoB,CAAC;AAM7D,OAAO,EACL,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,WAAW,GAIZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AA0B7C;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAoB;IACxD,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,eAAe;IACF,MAAM,CAAe;IACrB,WAAW,CAAgC;IAC3C,QAAQ,CAAS;IACjB,iBAAiB,CAAS;IAC1B,iBAAiB,CAAS;IAC1B,cAAc,CAAS;IACvB,MAAM,CAAS;IAExB,KAAK,GAAgB,MAAM,CAAC;IAC5B,UAAU,GAA2B,IAAI,GAAG,EAAE,CAAC;IAC/C,cAAc,CAAkC;IAChD,eAAe,CAAmB;IAClC,WAAW,CAAgC;IAEnD,YAAY,MAAoB;QAC9B,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,MAAM;YACT,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,kBAAkB;SAClD,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,gBAAgB,EAAE,CAAC;QACnC,IAAI,CAAC,iBAAiB;YACpB,MAAM,CAAC,iBAAiB,IAAI,cAAc,CAAC,mBAAmB,CAAC;QACjE,IAAI,CAAC,iBAAiB;YACpB,MAAM,CAAC,iBAAiB,IAAI,cAAc,CAAC,qBAAqB,CAAC;QACnE,IAAI,CAAC,cAAc;YACjB,MAAM,CAAC,cAAc,IAAI,cAAc,CAAC,kBAAkB,CAAC;QAE7D,oBAAoB;QACpB,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;QACnC,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,qBAAqB;QACrB,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;QAC7B,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC1B,MAAM,IAAI,aAAa,CAAC,2BAA2B,EAAE;gBACnD,IAAI,EAAE,wBAAwB;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;QAC1B,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAE7C,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,6BAA6B,IAAI,CAAC,QAAQ,SAAS,IAAI,CAAC,WAAW,CAAC,IAAI,YAAY,CACrF,CAAC;QAEF,mCAAmC;QACnC,OAAQ,IAAI,CAAC,KAAqB,KAAK,SAAS,EAAE,CAAC;YACjD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAK,IAAI,CAAC,KAAqB,KAAK,SAAS,EAAE,CAAC;oBAC9C,MAAM;gBACR,CAAC;gBAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAChE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,cAAc,OAAO,CAAC,CAAC;gBAEhE,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YACtD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;QAExB,mCAAmC;QACnC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,eAAe,IAAI,CAAC,UAAU,CAAC,IAAI,sBAAsB,CAC1D,CAAC;YACF,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC;QAE9B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACnC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAClC,CAAC;QAED,yBAAyB;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;QAE1B,mEAAmE;QACnE,MAAM,SAAS,GAAG,sBAAsB,CAAC;YACvC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,SAAU;YAC/B,WAAW,EAAE,GAAG;SACjB,CAAC,CAAC;QAEH,0EAA0E;QAC1E,8DAA8D;QAC9D,MAAM,MAAM,GAAG,YAAY,CAAC,aAAoB,EAAE,SAAS,CAAiB,CAAC;QAE7E,mCAAmC;QACnC,MAAM,YAAY,GAAoB,EAAE,CAAC;QACzC,IAAI,WAAW,GAAwB,IAAI,CAAC;QAE5C,4BAA4B;QAC5B,IAAI,CAAC,WAAW,GAAG,CAAC,GAAkB,EAAE,EAAE;YACxC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,EAAE,CAAC;gBACd,WAAW,GAAG,IAAI,CAAC;YACrB,CAAC;QACH,CAAC,CAAC;QAEF,wCAAwC;QACxC,KAAK,SAAS,CAAC,CAAC,gBAAgB;YAC9B,OAAO,IAAI,EAAE,CAAC;gBACZ,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,MAAM,YAAY,CAAC,KAAK,EAAG,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;wBAClC,WAAW,GAAG,OAAO,CAAC;oBACxB,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,kCAAkC;QAClC,MAAM,WAAW,GAAG,MAAM,CAAC,mBAAmB,EAAE;YAC9C,OAAO,EAAE;gBACP,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,MAAM,CAAC,oBAAoB,EAAE;oBAClC,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,QAAQ,EAAE,WAAW,EAAE;oBACvB,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;oBAChD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;oBACzC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE;oBAChC,OAAO,EAAE;wBACP,GAAG,EAAE,OAAO;wBACZ,OAAO,EAAE,QAAQ,OAAO,CAAC,OAAO,EAAE;qBACnC;iBACF,CAAC;aACH;SACF,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAE9B,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAEtD,kBAAkB;QAClB,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,4CAA4C;QAC5C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAElD,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;gBACnC,IAAK,IAAI,CAAC,KAAqB,KAAK,SAAS,EAAE,CAAC;oBAC9C,MAAM;gBACR,CAAC;gBACD,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACnC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAAC,OAAsB;QACtD,QAAQ,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC7B,KAAK,YAAY;gBACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE;oBACzC,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,mBAAmB;iBAC7D,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,KAAK;gBACR,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACtD,MAAM;YAER,KAAK,QAAQ;gBACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE;oBACtC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;oBAClC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM;iBACrC,CAAC,CAAC;gBACH,0BAA0B;gBAC1B,MAAM;YAER,KAAK,QAAQ;gBACX,IAAI,CAAC,eAAe,CAClB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAC3B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAC7B,CAAC;gBACF,MAAM;YAER,KAAK,UAAU;gBACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;oBACrC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM;iBACrC,CAAC,CAAC;gBACH,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,MAAM;YAER;gBACE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAAC,GAAkB;QAClD,iBAAiB;QACjB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QAED,WAAW;QACX,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,EAAE;gBACzC,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE;wBAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;qBACjB,CAAC;iBACH;aACF,CAAC,CAAC;YACH,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QAED,mBAAmB;QACnB,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAc;YAC3B,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,eAAe;SAChB,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAE1C,wBAAwB;QACxB,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC;aACzC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,KAAa,EAAE,MAAc;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACtD,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU,CACtB,GAAkB,EAClB,MAAmB;QAEnB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE;gBAClC,OAAO,EAAE,uBAAuB,GAAG,CAAC,UAAU,EAAE;gBAChD,IAAI,EAAE,oBAAoB;gBAC1B,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,GAAG,CAAC,KAAK,QAAQ,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAEtE,uCAAuC;QACvC,MAAM,cAAc,GAAG,CACrB,EAAkD,EAC1C,EAAE;YACV,IAAI,CAAC,EAAE;gBAAE,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;YACxE,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK;YACrB,CAAC,CAAC;gBACE,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE;gBAChB,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI;gBACpB,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE;gBAC1B,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;aAC/C;YACH,CAAC,CAAC;gBACE,EAAE,EAAE,EAAE;gBACN,IAAI,EAAE,EAAE;gBACR,IAAI,EAAE,EAAE;gBACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;QAEN,0BAA0B;QAC1B,MAAM,GAAG,GAAG,IAAI,gBAAgB,CAAC;YAC/B,MAAM,EAAE,GAAG,CAAC,KAAK;YACjB,WAAW,EAAE,GAAG,CAAC,UAAU;YAC3B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,KAAK;YACL,KAAK,EAAE,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACpC,EAAE,EAAE,CAAC,CAAC,MAAM;gBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,MAAM,EAAE,WAAoB;gBAC5B,MAAM,EAAE,CAAC,CAAC,MAAM;aACjB,CAAC,CAAC;YACH,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,eAAe,GAAoB;YACvC,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,IAAI;YACJ,GAAG,EAAE,GAAG,CAAC,OAAO;YAChB,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC;QAEF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACjD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAE1C,6BAA6B;YAC7B,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAE1C,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,qCAAqC;gBACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBACtD,OAAO;YACT,CAAC;YAED,0BAA0B;YAC1B,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE;gBAClC,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC/D,IAAI,EAAE,KAAK,YAAY,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;gBAC3D,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC;gBAC7B,UAAU;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAC5B,KAAa,EACb,MAAe,EACf,UAAkB;QAElB,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAE9B,MAAM,GAAG,GAAG,MAAM,CAAC,mBAAmB,EAAE;YACtC,OAAO,EAAE;gBACP,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE,MAAM,CAAC,kBAAkB,EAAE;oBAChC,KAAK;oBACL,MAAM,EAAE,MAAoB;oBAC5B,UAAU;iBACX,CAAC;aACH;SACF,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CACzB,KAAa,EACb,KAKC;QAED,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAE9B,MAAM,GAAG,GAAG,MAAM,CAAC,mBAAmB,EAAE;YACtC,OAAO,EAAE;gBACP,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,MAAM,CAAC,eAAe,EAAE;oBAC7B,KAAK;oBACL,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE;wBACzB,OAAO,EAAE,KAAK,CAAC,OAAO;wBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;qBAC3B,CAAC;oBACF,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,CAAC;iBAClC,CAAC;aACH;SACF,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAED;;OAEG;IACK,cAAc;QACpB,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;YACrC,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACpD,OAAO;YACT,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,CAAC,mBAAmB,EAAE;gBACtC,OAAO,EAAE;oBACP,IAAI,EAAE,WAAW;oBACjB,KAAK,EAAE,MAAM,CAAC,qBAAqB,EAAE;wBACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;wBAChC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;4BACvD,KAAK,EAAE,GAAG,CAAC,KAAK;4BAChB,SAAS,EAAE;gCACT,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;gCAC3D,KAAK,EAAE,CAAC;6BACT;yBACF,CAAC,CAAC;qBACJ,CAAC;iBACH;aACF,CAAC,CAAC;YACH,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;CACF;AAED,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E;;GAEG;AACH,SAAS,gBAAgB;IACvB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,OAAO,iBAAiB,SAAS,IAAI,MAAM,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAS,WAAW;IAClB,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9D,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Ironflow Worker Client
3
+ *
4
+ * Pull mode worker that polls the Ironflow server for jobs.
5
+ */
6
+ import type { WorkerConfig, Worker } from "./types.js";
7
+ /**
8
+ * Create a worker for Pull mode execution
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { createWorker } from "@ironflow/node/worker";
13
+ *
14
+ * const worker = createWorker({
15
+ * serverUrl: "http://localhost:9123",
16
+ * functions: [myFunction],
17
+ * maxConcurrentJobs: 4,
18
+ * });
19
+ *
20
+ * await worker.start();
21
+ * ```
22
+ */
23
+ export declare function createWorker(config: WorkerConfig): Worker;
24
+ export { createStreamingWorker } from "./worker-streaming.js";
25
+ /**
26
+ * Default export
27
+ */
28
+ export default createWorker;
29
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAqBvD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAEzD;AAscD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;GAEG;AACH,eAAe,YAAY,CAAC"}