comfyui-node 1.6.0 → 1.6.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 (95) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/call-wrapper.js +856 -856
  3. package/dist/index.d.ts +13 -13
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +7 -7
  6. package/dist/index.js.map +1 -1
  7. package/dist/multipool/client-registry.d.ts +33 -0
  8. package/dist/multipool/client-registry.d.ts.map +1 -0
  9. package/dist/multipool/client-registry.js +153 -0
  10. package/dist/multipool/client-registry.js.map +1 -0
  11. package/dist/multipool/helpers.d.ts +5 -0
  12. package/dist/multipool/helpers.d.ts.map +1 -0
  13. package/dist/multipool/helpers.js +53 -0
  14. package/dist/multipool/helpers.js.map +1 -0
  15. package/dist/multipool/index.d.ts +3 -0
  16. package/dist/multipool/index.d.ts.map +1 -0
  17. package/dist/multipool/index.js +3 -0
  18. package/dist/multipool/index.js.map +1 -0
  19. package/dist/multipool/interfaces.d.ts +13 -0
  20. package/dist/multipool/interfaces.d.ts.map +1 -0
  21. package/dist/multipool/interfaces.js +2 -0
  22. package/dist/multipool/interfaces.js.map +1 -0
  23. package/dist/multipool/job-profiler.d.ts +128 -0
  24. package/dist/multipool/job-profiler.d.ts.map +1 -0
  25. package/dist/multipool/job-profiler.js +222 -0
  26. package/dist/multipool/job-profiler.js.map +1 -0
  27. package/dist/multipool/job-queue-processor.d.ts +28 -0
  28. package/dist/multipool/job-queue-processor.d.ts.map +1 -0
  29. package/dist/multipool/job-queue-processor.js +197 -0
  30. package/dist/multipool/job-queue-processor.js.map +1 -0
  31. package/dist/multipool/job-state-registry.d.ts +67 -0
  32. package/dist/multipool/job-state-registry.d.ts.map +1 -0
  33. package/dist/multipool/job-state-registry.js +283 -0
  34. package/dist/multipool/job-state-registry.js.map +1 -0
  35. package/dist/multipool/logger.d.ts +30 -0
  36. package/dist/multipool/logger.d.ts.map +1 -0
  37. package/dist/multipool/logger.js +75 -0
  38. package/dist/multipool/logger.js.map +1 -0
  39. package/dist/multipool/multi-workflow-pool.d.ts +43 -0
  40. package/dist/multipool/multi-workflow-pool.d.ts.map +1 -0
  41. package/dist/multipool/multi-workflow-pool.js +314 -0
  42. package/dist/multipool/multi-workflow-pool.js.map +1 -0
  43. package/dist/multipool/pool-event-manager.d.ts +11 -0
  44. package/dist/multipool/pool-event-manager.d.ts.map +1 -0
  45. package/dist/multipool/pool-event-manager.js +28 -0
  46. package/dist/multipool/pool-event-manager.js.map +1 -0
  47. package/dist/multipool/tests/error-classification-tests.d.ts +2 -0
  48. package/dist/multipool/tests/error-classification-tests.d.ts.map +1 -0
  49. package/dist/multipool/tests/error-classification-tests.js +374 -0
  50. package/dist/multipool/tests/error-classification-tests.js.map +1 -0
  51. package/dist/multipool/tests/job-state-registry.d.ts +17 -0
  52. package/dist/multipool/tests/job-state-registry.d.ts.map +1 -0
  53. package/dist/multipool/tests/job-state-registry.js +24 -0
  54. package/dist/multipool/tests/job-state-registry.js.map +1 -0
  55. package/dist/multipool/tests/multipool-basic.d.ts +12 -0
  56. package/dist/multipool/tests/multipool-basic.d.ts.map +1 -0
  57. package/dist/multipool/tests/multipool-basic.js +142 -0
  58. package/dist/multipool/tests/multipool-basic.js.map +1 -0
  59. package/dist/multipool/tests/profiling-demo.d.ts +7 -0
  60. package/dist/multipool/tests/profiling-demo.d.ts.map +1 -0
  61. package/dist/multipool/tests/profiling-demo.js +88 -0
  62. package/dist/multipool/tests/profiling-demo.js.map +1 -0
  63. package/dist/multipool/tests/prompt-generator.d.ts +10 -0
  64. package/dist/multipool/tests/prompt-generator.d.ts.map +1 -0
  65. package/dist/multipool/tests/prompt-generator.js +26 -0
  66. package/dist/multipool/tests/prompt-generator.js.map +1 -0
  67. package/dist/multipool/tests/test-helpers.d.ts +4 -0
  68. package/dist/multipool/tests/test-helpers.d.ts.map +1 -0
  69. package/dist/multipool/tests/test-helpers.js +10 -0
  70. package/dist/multipool/tests/test-helpers.js.map +1 -0
  71. package/dist/multipool/tests/two-stage-edit-simulation.d.ts +32 -0
  72. package/dist/multipool/tests/two-stage-edit-simulation.d.ts.map +1 -0
  73. package/dist/multipool/tests/two-stage-edit-simulation.js +299 -0
  74. package/dist/multipool/tests/two-stage-edit-simulation.js.map +1 -0
  75. package/dist/multipool/workflow.d.ts +179 -0
  76. package/dist/multipool/workflow.d.ts.map +1 -0
  77. package/dist/multipool/workflow.js +334 -0
  78. package/dist/multipool/workflow.js.map +1 -0
  79. package/dist/pool/SmartPool.d.ts +143 -143
  80. package/dist/pool/SmartPool.d.ts.map +1 -1
  81. package/dist/pool/SmartPool.js +676 -676
  82. package/dist/pool/SmartPool.js.map +1 -1
  83. package/dist/pool/SmartPoolV2.d.ts +119 -119
  84. package/dist/pool/SmartPoolV2.js +586 -586
  85. package/dist/pool/WorkflowPool.d.ts +202 -202
  86. package/dist/pool/WorkflowPool.d.ts.map +1 -1
  87. package/dist/pool/WorkflowPool.js +845 -840
  88. package/dist/pool/WorkflowPool.js.map +1 -1
  89. package/dist/pool/client/ClientManager.d.ts +86 -86
  90. package/dist/pool/client/ClientManager.js +215 -215
  91. package/dist/pool/index.d.ts +9 -11
  92. package/dist/pool/index.d.ts.map +1 -1
  93. package/dist/pool/index.js +3 -5
  94. package/dist/pool/index.js.map +1 -1
  95. package/package.json +1 -1
@@ -0,0 +1,283 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { JobProfiler } from "./job-profiler.js";
3
+ export class JobStateRegistry {
4
+ pool;
5
+ clients;
6
+ // Map of jobId to JobState
7
+ jobs = new Map();
8
+ // Map of prompt_id to jobId
9
+ promptIdToJobId = new Map();
10
+ constructor(pool, clients) {
11
+ this.pool = pool;
12
+ this.clients = clients;
13
+ }
14
+ addJob(workflow) {
15
+ // Create new job id
16
+ const jobId = randomUUID();
17
+ let resolver = null;
18
+ const resultsPromise = new Promise((resolve) => {
19
+ resolver = resolve;
20
+ });
21
+ const jobState = {
22
+ jobId,
23
+ workflow,
24
+ status: "pending",
25
+ resolver,
26
+ resultsPromise
27
+ };
28
+ // Initialize profiler if enabled
29
+ if (this.pool.options.enableProfiling) {
30
+ jobState.profiler = new JobProfiler(Date.now(), workflow.toJSON());
31
+ }
32
+ this.jobs.set(jobId, jobState);
33
+ return jobId;
34
+ }
35
+ getJobStatus(jobId) {
36
+ const jobState = this.jobs.get(jobId);
37
+ if (!jobState) {
38
+ throw new Error(`Job with ID ${jobId} not found.`);
39
+ }
40
+ return jobState.status;
41
+ }
42
+ async cancelJob(jobId) {
43
+ const jobState = this.jobs.get(jobId);
44
+ if (!jobState) {
45
+ throw new Error(`Job with ID ${jobId} not found.`);
46
+ }
47
+ if (jobState.status === "completed" || jobState.status === "canceled") {
48
+ throw new Error(`Cannot cancel job ${jobId} with status ${jobState.status}.`);
49
+ }
50
+ if (jobState.status === "assigned" || jobState.status === "running") {
51
+ // Notify assigned client to cancel the job
52
+ if (jobState.assignedClientUrl) {
53
+ const client = this.clients.clients.get(jobState.assignedClientUrl);
54
+ if (client) {
55
+ try {
56
+ await client.api.ext.queue.interrupt(jobState.prompt_id);
57
+ // Mark job as canceled
58
+ jobState.status = "canceled";
59
+ // Mark client as idle
60
+ client.state = "idle";
61
+ // Also resolve the promise to avoid hanging
62
+ if (jobState.resolver) {
63
+ const results = {
64
+ status: "canceled",
65
+ jobId: jobState.jobId,
66
+ prompt_id: jobState.prompt_id,
67
+ images: []
68
+ };
69
+ jobState.resolver(results);
70
+ jobState.resolver = null;
71
+ }
72
+ // Process the queue to allow next job to proceed
73
+ this.processQueue(jobState.workflow.structureHash);
74
+ }
75
+ catch (e) {
76
+ console.error(`Failed to notify client ${jobState.assignedClientUrl} to cancel job ${jobId}:`, e);
77
+ }
78
+ }
79
+ }
80
+ }
81
+ else {
82
+ // For pending or no_clients status, just mark as canceled
83
+ jobState.status = "canceled";
84
+ // Also resolve the promise to avoid hanging
85
+ if (jobState.resolver) {
86
+ const results = {
87
+ status: "canceled",
88
+ jobId: jobState.jobId,
89
+ prompt_id: jobState.prompt_id,
90
+ images: []
91
+ };
92
+ jobState.resolver(results);
93
+ jobState.resolver = null;
94
+ }
95
+ // Remove from queue if necessary
96
+ this.removeJobFromQueue(jobState);
97
+ }
98
+ }
99
+ setJobStatus(jobId, newStatus, assignedClientUrl) {
100
+ const jobState = this.jobs.get(jobId);
101
+ if (!jobState) {
102
+ throw new Error(`Job with ID ${jobId} not found.`);
103
+ }
104
+ jobState.status = newStatus;
105
+ if (assignedClientUrl) {
106
+ jobState.assignedClientUrl = assignedClientUrl;
107
+ }
108
+ }
109
+ updateJobAutoSeeds(jobId, autoSeeds) {
110
+ const jobState = this.jobs.get(jobId);
111
+ if (!jobState) {
112
+ throw new Error(`Job with ID ${jobId} not found.`);
113
+ }
114
+ jobState.autoSeeds = autoSeeds;
115
+ }
116
+ setPromptId(jobId, prompt_id) {
117
+ const jobState = this.jobs.get(jobId);
118
+ if (!jobState) {
119
+ throw new Error(`Job with ID ${jobId} not found.`);
120
+ }
121
+ jobState.prompt_id = prompt_id;
122
+ this.promptIdToJobId.set(prompt_id, jobId);
123
+ // Notify profiler of execution start
124
+ if (jobState.profiler) {
125
+ jobState.profiler.onExecutionStart(prompt_id);
126
+ }
127
+ }
128
+ completeJob(prompt_id) {
129
+ const jobState = this.jobs.get(this.promptIdToJobId.get(prompt_id) || "");
130
+ if (!jobState || !jobState.prompt_id) {
131
+ throw new Error(`No job state found for prompt_id ${prompt_id} when completing job.`);
132
+ }
133
+ if (jobState.prompt_id === prompt_id) {
134
+ jobState.status = "completed";
135
+ // Notify profiler of completion
136
+ if (jobState.profiler) {
137
+ jobState.profiler.onExecutionComplete();
138
+ }
139
+ if (jobState.resolver) {
140
+ const results = {
141
+ status: "completed",
142
+ jobId: jobState.jobId,
143
+ prompt_id: jobState.prompt_id,
144
+ images: []
145
+ };
146
+ // Prepare images
147
+ if (jobState.images && jobState.images.length > 0 && jobState.assignedClientUrl) {
148
+ const client = this.clients.clients.get(jobState.assignedClientUrl);
149
+ if (client) {
150
+ for (let i = 0; i < jobState.images.length; i++) {
151
+ const image = jobState.images[i];
152
+ const imageUrl = client.api.ext.file.getPathImage(image);
153
+ results.images.push(imageUrl);
154
+ }
155
+ }
156
+ }
157
+ // Add profiler stats if available
158
+ if (jobState.profiler) {
159
+ results.profileStats = jobState.profiler.getStats();
160
+ }
161
+ jobState.resolver(results);
162
+ jobState.resolver = null;
163
+ }
164
+ }
165
+ }
166
+ processQueue(structureHash) {
167
+ let queue = this.pool.queues.get(structureHash || "general");
168
+ if (queue) {
169
+ queue.processQueue().catch(reason => {
170
+ console.error(`Error processing job queue for workflow hash ${structureHash}:`, reason);
171
+ });
172
+ }
173
+ }
174
+ async waitForResults(jobId) {
175
+ const jobState = this.jobs.get(jobId);
176
+ if (!jobState) {
177
+ throw new Error(`Job with ID ${jobId} not found.`);
178
+ }
179
+ if (!jobState.resultsPromise) {
180
+ throw new Error(`Job with ID ${jobId} does not have a results promise.`);
181
+ }
182
+ return jobState.resultsPromise;
183
+ }
184
+ addJobImages(prompt_id, images) {
185
+ const state = this.jobs.get(this.promptIdToJobId.get(prompt_id) || "");
186
+ if (!state) {
187
+ throw new Error(`No job state found for prompt_id ${prompt_id} when adding images.`);
188
+ }
189
+ if (state.prompt_id === prompt_id) {
190
+ state.images = [...images];
191
+ return;
192
+ }
193
+ }
194
+ removeJobFromQueue(jobState) {
195
+ let queue = this.pool.queues.get(jobState.workflow.structureHash || "general");
196
+ if (queue) {
197
+ queue.dequeueJob(jobState.jobId);
198
+ }
199
+ }
200
+ attachJobProgressListener(jobId, progressListener) {
201
+ const jobState = this.jobs.get(jobId);
202
+ if (!jobState) {
203
+ throw new Error(`Job with ID ${jobId} not found.`);
204
+ }
205
+ jobState.onProgress = progressListener;
206
+ }
207
+ attachJobPreviewListener(jobId, previewListener) {
208
+ const jobState = this.jobs.get(jobId);
209
+ if (!jobState) {
210
+ throw new Error(`Job with ID ${jobId} not found.`);
211
+ }
212
+ jobState.onPreview = previewListener;
213
+ }
214
+ updateJobProgress(prompt_id, value, max, nodeId) {
215
+ const state = this.jobs.get(this.promptIdToJobId.get(prompt_id) || "");
216
+ if (!state) {
217
+ console.warn(`No job state found for prompt_id ${prompt_id} when updating progress.`);
218
+ return;
219
+ }
220
+ if (state.onProgress && state.prompt_id === prompt_id) {
221
+ state.onProgress({ value, max });
222
+ }
223
+ // Notify profiler
224
+ if (state.profiler && nodeId !== undefined) {
225
+ state.profiler.onProgress(nodeId, value, max);
226
+ }
227
+ }
228
+ updateJobPreviewMetadata(prompt_id, metadata, blob) {
229
+ const state = this.jobs.get(this.promptIdToJobId.get(prompt_id) || "");
230
+ if (!state) {
231
+ console.warn(`No job state found for prompt_id ${prompt_id} when updating preview metadata.`);
232
+ return;
233
+ }
234
+ if (state.onPreview && state.prompt_id === prompt_id) {
235
+ state.onPreview({ metadata, blob });
236
+ }
237
+ }
238
+ setJobFailure(jobId, bodyJSON) {
239
+ const jobState = this.jobs.get(jobId);
240
+ if (!jobState) {
241
+ throw new Error(`Job with ID ${jobId} not found.`);
242
+ }
243
+ jobState.status = "failed";
244
+ // Notify profiler of completion (even on failure)
245
+ if (jobState.profiler) {
246
+ jobState.profiler.onExecutionComplete();
247
+ }
248
+ if (jobState.resolver) {
249
+ const results = {
250
+ status: "failed",
251
+ jobId: jobState.jobId,
252
+ prompt_id: jobState.prompt_id,
253
+ images: [],
254
+ error: bodyJSON
255
+ };
256
+ // Add profiler stats even on failure
257
+ if (jobState.profiler) {
258
+ results.profileStats = jobState.profiler.getStats();
259
+ }
260
+ jobState.resolver(results);
261
+ jobState.resolver = null;
262
+ }
263
+ }
264
+ /**
265
+ * Track node execution start for profiling
266
+ */
267
+ onNodeExecuting(prompt_id, nodeId) {
268
+ const state = this.jobs.get(this.promptIdToJobId.get(prompt_id) || "");
269
+ if (state?.profiler && state.prompt_id === prompt_id) {
270
+ state.profiler.onNodeExecuting(nodeId);
271
+ }
272
+ }
273
+ /**
274
+ * Track cached nodes for profiling
275
+ */
276
+ onCachedNodes(prompt_id, nodeIds) {
277
+ const state = this.jobs.get(this.promptIdToJobId.get(prompt_id) || "");
278
+ if (state?.profiler && state.prompt_id === prompt_id) {
279
+ state.profiler.onCachedNodes(nodeIds);
280
+ }
281
+ }
282
+ }
283
+ //# sourceMappingURL=job-state-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-state-registry.js","sourceRoot":"","sources":["../../src/multipool/job-state-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Logging utility for MultiWorkflowPool
3
+ * Provides structured logging with configurable log levels
4
+ */
5
+ export type LogLevel = "debug" | "info" | "warn" | "error" | "silent";
6
+ export declare class Logger {
7
+ private level;
8
+ private context;
9
+ constructor(context: string, level?: LogLevel);
10
+ setLevel(level: LogLevel): void;
11
+ private shouldLog;
12
+ private formatMessage;
13
+ debug(message: string, ...args: any[]): void;
14
+ info(message: string, ...args: any[]): void;
15
+ warn(message: string, ...args: any[]): void;
16
+ error(message: string, ...args: any[]): void;
17
+ /**
18
+ * Special log for queue operations (always uses timestamp format)
19
+ */
20
+ queue(workflowHash: string, message: string, ...args: any[]): void;
21
+ /**
22
+ * Special log for client events
23
+ */
24
+ client(clientName: string, event: string, message: string, ...args: any[]): void;
25
+ }
26
+ /**
27
+ * Create a logger instance for a specific context
28
+ */
29
+ export declare function createLogger(context: string, level?: LogLevel): Logger;
30
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/multipool/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAUtE,qBAAa,MAAM;IACjB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,QAAiB;IAKrD,QAAQ,CAAC,KAAK,EAAE,QAAQ;IAIxB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,aAAa;IAMrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAMrC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAMpC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAMpC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAMrC;;OAEG;IACH,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAQ3D;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;CAK1E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,QAAiB,GAAG,MAAM,CAE9E"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Logging utility for MultiWorkflowPool
3
+ * Provides structured logging with configurable log levels
4
+ */
5
+ const LOG_LEVELS = {
6
+ debug: 0,
7
+ info: 1,
8
+ warn: 2,
9
+ error: 3,
10
+ silent: 4
11
+ };
12
+ export class Logger {
13
+ level;
14
+ context;
15
+ constructor(context, level = "info") {
16
+ this.context = context;
17
+ this.level = level;
18
+ }
19
+ setLevel(level) {
20
+ this.level = level;
21
+ }
22
+ shouldLog(level) {
23
+ return LOG_LEVELS[level] >= LOG_LEVELS[this.level];
24
+ }
25
+ formatMessage(level, message, ...args) {
26
+ const timestamp = new Date().toISOString();
27
+ const prefix = `[${timestamp}] [${level.toUpperCase()}] [${this.context}]`;
28
+ return args.length > 0 ? `${prefix} ${message}` : `${prefix} ${message}`;
29
+ }
30
+ debug(message, ...args) {
31
+ if (this.shouldLog("debug")) {
32
+ console.debug(this.formatMessage("debug", message), ...args);
33
+ }
34
+ }
35
+ info(message, ...args) {
36
+ if (this.shouldLog("info")) {
37
+ console.info(this.formatMessage("info", message), ...args);
38
+ }
39
+ }
40
+ warn(message, ...args) {
41
+ if (this.shouldLog("warn")) {
42
+ console.warn(this.formatMessage("warn", message), ...args);
43
+ }
44
+ }
45
+ error(message, ...args) {
46
+ if (this.shouldLog("error")) {
47
+ console.error(this.formatMessage("error", message), ...args);
48
+ }
49
+ }
50
+ /**
51
+ * Special log for queue operations (always uses timestamp format)
52
+ */
53
+ queue(workflowHash, message, ...args) {
54
+ if (this.shouldLog("debug")) {
55
+ const timestamp = new Date().toISOString();
56
+ const hashPrefix = workflowHash.substring(0, 16);
57
+ console.log(`[${timestamp}] [queue::${hashPrefix}] ${message}`, ...args);
58
+ }
59
+ }
60
+ /**
61
+ * Special log for client events
62
+ */
63
+ client(clientName, event, message, ...args) {
64
+ if (this.shouldLog("debug")) {
65
+ console.log(`[${event}@${clientName}] ${message}`, ...args);
66
+ }
67
+ }
68
+ }
69
+ /**
70
+ * Create a logger instance for a specific context
71
+ */
72
+ export function createLogger(context, level = "info") {
73
+ return new Logger(context, level);
74
+ }
75
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/multipool/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { JobResults } from "./job-state-registry.js";
2
+ import { JobQueueProcessor } from "./job-queue-processor.js";
3
+ import { Workflow } from "./workflow.js";
4
+ import { MultiWorkflowPoolOptions, PoolEvent } from "./interfaces.js";
5
+ /**
6
+ * MultiWorkflowPool class to manage heterogeneous clusters of ComfyUI workers with different workflow capabilities.
7
+ * Using a fully event driven architecture to handle client connections, job submissions, and failover strategies.
8
+ * Zero polling is used; all operations are event driven. Maximizes responsiveness and scalability.
9
+ */
10
+ export declare class MultiWorkflowPool {
11
+ private events;
12
+ private clientRegistry;
13
+ private jobRegistry;
14
+ queues: Map<string, JobQueueProcessor>;
15
+ options: Required<MultiWorkflowPoolOptions>;
16
+ private logger;
17
+ monitoringInterval?: Timer;
18
+ constructor(options?: MultiWorkflowPoolOptions);
19
+ init(): Promise<void>;
20
+ shutdown(): Promise<void>;
21
+ addClient(clientUrl: string, options?: {
22
+ workflowAffinity: Workflow<any>[];
23
+ priority?: number;
24
+ }): void;
25
+ removeClient(clientUrl: string): void;
26
+ submitJob(workflow: Workflow<any>): Promise<string>;
27
+ getJobStatus(jobId: string): import("./job-state-registry.js").JobStatus;
28
+ cancelJob(jobId: string): Promise<void>;
29
+ attachEventHook(event: string, listener: (e: PoolEvent) => void): void;
30
+ private assertQueue;
31
+ private attachHandlersToClient;
32
+ private printStatusSummary;
33
+ waitForJobCompletion(jobId: string): Promise<JobResults>;
34
+ attachJobProgressListener(jobId: string, progressListener: (progress: {
35
+ value: number;
36
+ max: number;
37
+ }) => void): void;
38
+ attachJobPreviewListener(jobId: string, previewListener: (preview: {
39
+ blob: Blob;
40
+ metadata: any;
41
+ }) => void): void;
42
+ }
43
+ //# sourceMappingURL=multi-workflow-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-workflow-pool.d.ts","sourceRoot":"","sources":["../../src/multipool/multi-workflow-pool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAoB,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,wBAAwB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGtE;;;;GAIG;AACH,qBAAa,iBAAiB;IAG5B,OAAO,CAAC,MAAM,CAAmB;IAGjC,OAAO,CAAC,cAAc,CAAiB;IAGvC,OAAO,CAAC,WAAW,CAAmB;IAGtC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAa;IAG5C,OAAO,EAAE,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IAGnD,OAAO,CAAC,MAAM,CAAS;IAEvB,kBAAkB,CAAC,EAAE,KAAK,CAAC;gBAEf,OAAO,CAAC,EAAE,wBAAwB;IA4BxC,IAAI;IAyDJ,QAAQ;IA2Bd,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QACrC,gBAAgB,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IAID,YAAY,CAAC,SAAS,EAAE,MAAM;IAIxB,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC;IA0BvC,YAAY,CAAC,KAAK,EAAE,MAAM;IAIpB,SAAS,CAAC,KAAK,EAAE,MAAM;IAI7B,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI;IAO/D,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,sBAAsB;IAsG9B,OAAO,CAAC,kBAAkB;IAmCpB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAI9D,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,QAAQ,EAAE;QACpE,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;KACb,KAAK,IAAI;IAIV,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,OAAO,EAAE;QACjE,IAAI,EAAE,IAAI,CAAC;QACX,QAAQ,EAAE,GAAG,CAAC;KACf,KAAK,IAAI;CAGX"}