@solidxai/core 0.1.13-beta.3 → 0.1.13-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/seed.command.d.ts +2 -0
- package/dist/commands/seed.command.d.ts.map +1 -1
- package/dist/commands/seed.command.js +21 -0
- package/dist/commands/seed.command.js.map +1 -1
- package/dist/controllers/chatter-message.controller.d.ts +5 -0
- package/dist/controllers/chatter-message.controller.d.ts.map +1 -1
- package/dist/controllers/chatter-message.controller.js +14 -0
- package/dist/controllers/chatter-message.controller.js.map +1 -1
- package/dist/entities/workflow-trigger-execution.entity.js +1 -1
- package/dist/entities/workflow-trigger-execution.entity.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +1 -0
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +44 -27
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +84 -70
- package/dist/services/chatter-message.service.d.ts +5 -0
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +18 -0
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/workflow/nodes/execution-fail.node.d.ts +6 -0
- package/dist/services/workflow/nodes/execution-fail.node.d.ts.map +1 -0
- package/dist/services/workflow/nodes/execution-fail.node.js +81 -0
- package/dist/services/workflow/nodes/execution-fail.node.js.map +1 -0
- package/dist/services/workflow/nodes/for-each.node.d.ts +2 -0
- package/dist/services/workflow/nodes/for-each.node.d.ts.map +1 -1
- package/dist/services/workflow/nodes/for-each.node.js +114 -5
- package/dist/services/workflow/nodes/for-each.node.js.map +1 -1
- package/dist/services/workflow/nodes/if.node.d.ts.map +1 -1
- package/dist/services/workflow/nodes/if.node.js +7 -0
- package/dist/services/workflow/nodes/if.node.js.map +1 -1
- package/dist/services/workflow/nodes/log-write.node.d.ts.map +1 -1
- package/dist/services/workflow/nodes/log-write.node.js +2 -0
- package/dist/services/workflow/nodes/log-write.node.js.map +1 -1
- package/dist/services/workflow/nodes/loop-until.node.d.ts +12 -0
- package/dist/services/workflow/nodes/loop-until.node.d.ts.map +1 -0
- package/dist/services/workflow/nodes/loop-until.node.js +281 -0
- package/dist/services/workflow/nodes/loop-until.node.js.map +1 -0
- package/dist/services/workflow/nodes/parallel.node.d.ts.map +1 -1
- package/dist/services/workflow/nodes/parallel.node.js +7 -0
- package/dist/services/workflow/nodes/parallel.node.js.map +1 -1
- package/dist/services/workflow/nodes/sequential.node.d.ts.map +1 -1
- package/dist/services/workflow/nodes/sequential.node.js +7 -0
- package/dist/services/workflow/nodes/sequential.node.js.map +1 -1
- package/dist/services/workflow/nodes/switch.node.d.ts.map +1 -1
- package/dist/services/workflow/nodes/switch.node.js +7 -0
- package/dist/services/workflow/nodes/switch.node.js.map +1 -1
- package/dist/services/workflow/workflow-definition-validator.service.d.ts.map +1 -1
- package/dist/services/workflow/workflow-definition-validator.service.js +5 -2
- package/dist/services/workflow/workflow-definition-validator.service.js.map +1 -1
- package/dist/services/workflow/workflow-expression.service.d.ts.map +1 -1
- package/dist/services/workflow/workflow-expression.service.js +5 -0
- package/dist/services/workflow/workflow-expression.service.js.map +1 -1
- package/dist/services/workflow/workflow-node-registry.service.d.ts +2 -1
- package/dist/services/workflow/workflow-node-registry.service.d.ts.map +1 -1
- package/dist/services/workflow/workflow-node-registry.service.js +7 -0
- package/dist/services/workflow/workflow-node-registry.service.js.map +1 -1
- package/dist/services/workflow/workflow-runtime.service.d.ts +8 -0
- package/dist/services/workflow/workflow-runtime.service.d.ts.map +1 -1
- package/dist/services/workflow/workflow-runtime.service.js +197 -32
- package/dist/services/workflow/workflow-runtime.service.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +4 -0
- package/dist/solid-core.module.js.map +1 -1
- package/dist/types/workflow-dsl.types.d.ts +14 -0
- package/dist/types/workflow-dsl.types.d.ts.map +1 -1
- package/dist/types/workflow-dsl.types.js.map +1 -1
- package/dist-tests/api/authenticate.spec.js +119 -0
- package/dist-tests/api/authenticate.spec.js.map +1 -0
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +97 -0
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +1 -0
- package/dist-tests/api/ping.spec.js +21 -0
- package/dist-tests/api/ping.spec.js.map +1 -0
- package/dist-tests/helpers/auth.js +41 -0
- package/dist-tests/helpers/auth.js.map +1 -0
- package/dist-tests/helpers/env.js +11 -0
- package/dist-tests/helpers/env.js.map +1 -0
- package/docs/agent-builder/notebook-lm-prompt-for-agent-builder.md +136 -0
- package/docs/agent-builder/team-ready-note-agent-builder.md +305 -0
- package/docs/agent-hub-grooming.md +301 -0
- package/docs/dashboards/AGENTIC_DASHBOARD_IMPLEMENTATION_PLAN.md +438 -0
- package/docs/dashboards/dashboard-curl-smoke-tests.txt +146 -0
- package/docs/dashboards/delete-legacy-dashboard-metadata.sql +172 -0
- package/docs/datasource-introspection-ddl-analysis.md +326 -0
- package/docs/datasource-introspection-implementation-plan.md +306 -0
- package/docs/grouping-enhancements.md +89 -0
- package/docs/java-spring/README.md +3 -0
- package/docs/java-spring/solid-core-module-deep-dive-report.md +1317 -0
- package/docs/module-package-import-handoff.md +691 -0
- package/docs/seed-changes.md +65 -0
- package/docs/test-data-workflow.md +200 -0
- package/docs/type-declaration-import-issue.md +24 -0
- package/docs/workflow/business-automation-example-notes.md +309 -0
- package/docs/workflow/control-flow-node-addition-sop.md +324 -0
- package/docs/workflow/data-engineering-pipeline-example-notes.md +330 -0
- package/docs/workflow/foreach-example-notes.md +187 -0
- package/docs/workflow/hello-world-example-notes.md +271 -0
- package/docs/workflow/kestra-concepts-plugins-blueprints.md +315 -0
- package/docs/workflow/loop-until-example-notes.md +198 -0
- package/docs/workflow/microservices-and-apis-example-notes.md +264 -0
- package/docs/workflow/samples.md +25 -0
- package/docs/workflow/what-is-kestra.md +79 -0
- package/docs/workflow/workflow-core-module-handoff-summary.md +191 -0
- package/docs/workflow/workflow-module-brd.md +185 -0
- package/docs/workflow/workflow-module-domain-model.md +252 -0
- package/docs/workflow/workflow-module-metadata-dsl.md +302 -0
- package/docs/workflow/workflow-module-technical-spec.md +293 -0
- package/docs/workflow/workflow-node-type-contracts.md +635 -0
- package/docs/workflow/workflow-node-ui-metadata-contract.md +1262 -0
- package/docs/workflow/workflow-solidx-model-field-spec.md +284 -0
- package/package.json +1 -1
- package/src/commands/seed.command.ts +19 -0
- package/src/controllers/chatter-message.controller.ts +8 -0
- package/src/entities/workflow-trigger-execution.entity.ts +1 -1
- package/src/index.ts +2 -0
- package/src/interfaces.ts +1 -0
- package/src/seeders/module-metadata-seeder.service.ts +50 -36
- package/src/seeders/seed-data/solid-core-metadata.json +84 -70
- package/src/services/chatter-message.service.ts +26 -0
- package/src/services/workflow/nodes/execution-fail.node.ts +82 -0
- package/src/services/workflow/nodes/for-each.node.ts +140 -6
- package/src/services/workflow/nodes/if.node.ts +7 -0
- package/src/services/workflow/nodes/log-write.node.ts +2 -0
- package/src/services/workflow/nodes/loop-until.node.ts +343 -0
- package/src/services/workflow/nodes/parallel.node.ts +7 -0
- package/src/services/workflow/nodes/sequential.node.ts +7 -0
- package/src/services/workflow/nodes/switch.node.ts +7 -0
- package/src/services/workflow/workflow-definition-validator.service.ts +5 -2
- package/src/services/workflow/workflow-expression.service.ts +5 -0
- package/src/services/workflow/workflow-node-registry.service.ts +11 -0
- package/src/services/workflow/workflow-runtime.service.ts +274 -39
- package/src/solid-core.module.ts +4 -0
- package/src/types/workflow-dsl.types.ts +43 -0
- package/.claude/settings.local.json +0 -16
- package/CLAUDE.md +0 -26
- package/src/services/1.js +0 -6
|
@@ -118,7 +118,11 @@ let WorkflowRuntimeService = WorkflowRuntimeService_1 = class WorkflowRuntimeSer
|
|
|
118
118
|
const execution = existingExecution
|
|
119
119
|
? await this.writer.startExecution(existingExecution, effectiveRequest)
|
|
120
120
|
: await this.writer.createExecution(definition, effectiveRequest);
|
|
121
|
-
const nodeCount = this.countNodes(
|
|
121
|
+
const nodeCount = this.countNodes([
|
|
122
|
+
...(definitionDsl.nodes ?? []),
|
|
123
|
+
...(definitionDsl.errors ?? []),
|
|
124
|
+
...(definitionDsl.finally ?? []),
|
|
125
|
+
]);
|
|
122
126
|
const outputs = {};
|
|
123
127
|
const runtimeContext = {
|
|
124
128
|
execution,
|
|
@@ -131,22 +135,48 @@ let WorkflowRuntimeService = WorkflowRuntimeService_1 = class WorkflowRuntimeSer
|
|
|
131
135
|
log: 0,
|
|
132
136
|
},
|
|
133
137
|
};
|
|
138
|
+
this.logger.log(`Starting workflow execution ${execution.executionIdentifier} for ${definition.key} with ${nodeCount} node(s).`);
|
|
139
|
+
await this.writer.writeLog(execution, undefined, {
|
|
140
|
+
level: 'info',
|
|
141
|
+
eventType: 'execution.started',
|
|
142
|
+
message: `Workflow execution started for ${definition.key}.`,
|
|
143
|
+
metadata: {
|
|
144
|
+
executionIdentifier: execution.executionIdentifier,
|
|
145
|
+
workflowKey: definition.key,
|
|
146
|
+
triggerType: execution.triggerType,
|
|
147
|
+
nodeCount,
|
|
148
|
+
inputKeys: Object.keys(runtimeContext.input ?? {}),
|
|
149
|
+
variableKeys: Object.keys(runtimeContext.variables ?? {}),
|
|
150
|
+
},
|
|
151
|
+
}, this.nextLogSequence(runtimeContext));
|
|
152
|
+
let executionError;
|
|
153
|
+
try {
|
|
154
|
+
await this.runNodes(definitionDsl.nodes, runtimeContext);
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
executionError = error;
|
|
158
|
+
await this.runGlobalErrorHandlers(definitionDsl, runtimeContext, error);
|
|
159
|
+
}
|
|
134
160
|
try {
|
|
135
|
-
this.
|
|
161
|
+
await this.runFinallyHandlers(definitionDsl, runtimeContext);
|
|
162
|
+
}
|
|
163
|
+
catch (finallyError) {
|
|
136
164
|
await this.writer.writeLog(execution, undefined, {
|
|
137
|
-
level: '
|
|
138
|
-
eventType: '
|
|
139
|
-
message: `
|
|
165
|
+
level: 'error',
|
|
166
|
+
eventType: 'finally.failed',
|
|
167
|
+
message: `Finally handler failed: ${this.errorMessage(finallyError)}.`,
|
|
168
|
+
context: this.summarizeError(finallyError),
|
|
140
169
|
metadata: {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
nodeCount,
|
|
145
|
-
inputKeys: Object.keys(runtimeContext.input ?? {}),
|
|
146
|
-
variableKeys: Object.keys(runtimeContext.variables ?? {}),
|
|
170
|
+
originalError: executionError
|
|
171
|
+
? this.summarizeError(executionError)
|
|
172
|
+
: undefined,
|
|
147
173
|
},
|
|
148
174
|
}, this.nextLogSequence(runtimeContext));
|
|
149
|
-
|
|
175
|
+
if (!executionError) {
|
|
176
|
+
executionError = finallyError;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (!executionError) {
|
|
150
180
|
const completed = await this.writer.completeExecution(execution, outputs);
|
|
151
181
|
this.logger.log(`Completed workflow execution ${completed.executionIdentifier} for ${definition.key} in ${completed.durationMs ?? 0} ms.`);
|
|
152
182
|
await this.writer.writeLog(completed, undefined, {
|
|
@@ -161,21 +191,19 @@ let WorkflowRuntimeService = WorkflowRuntimeService_1 = class WorkflowRuntimeSer
|
|
|
161
191
|
}, this.nextLogSequence(runtimeContext));
|
|
162
192
|
return this.toResponse(completed);
|
|
163
193
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
return this.toResponse(failed);
|
|
178
|
-
}
|
|
194
|
+
const failed = await this.writer.failExecution(execution, executionError);
|
|
195
|
+
this.logger.error(`Failed workflow execution ${failed.executionIdentifier} for ${definition.key}: ${failed.errorSummary}`, executionError instanceof Error ? executionError.stack : undefined);
|
|
196
|
+
await this.writer.writeLog(failed, undefined, {
|
|
197
|
+
level: 'error',
|
|
198
|
+
eventType: 'execution.failed',
|
|
199
|
+
message: failed.errorSummary,
|
|
200
|
+
context: this.summarizeError(executionError),
|
|
201
|
+
metadata: {
|
|
202
|
+
executionIdentifier: failed.executionIdentifier,
|
|
203
|
+
durationMs: failed.durationMs,
|
|
204
|
+
},
|
|
205
|
+
}, this.nextLogSequence(runtimeContext));
|
|
206
|
+
return this.toResponse(failed);
|
|
179
207
|
}
|
|
180
208
|
async getExecutionStatus(executionId) {
|
|
181
209
|
const execution = await this.findExecutionOrThrow(executionId);
|
|
@@ -263,10 +291,11 @@ let WorkflowRuntimeService = WorkflowRuntimeService_1 = class WorkflowRuntimeSer
|
|
|
263
291
|
});
|
|
264
292
|
}
|
|
265
293
|
async runNodes(nodes, context) {
|
|
294
|
+
const nodeOutputs = {};
|
|
266
295
|
for (const node of nodes ?? []) {
|
|
267
|
-
await this.runNode(node, context);
|
|
296
|
+
nodeOutputs[node.id] = await this.runNode(node, context);
|
|
268
297
|
}
|
|
269
|
-
return
|
|
298
|
+
return nodeOutputs;
|
|
270
299
|
}
|
|
271
300
|
async runNode(node, context) {
|
|
272
301
|
const inputPayload = {
|
|
@@ -286,7 +315,7 @@ let WorkflowRuntimeService = WorkflowRuntimeService_1 = class WorkflowRuntimeSer
|
|
|
286
315
|
message: `Skipped disabled node ${node.id}.`,
|
|
287
316
|
metadata: this.nodeLogMetadata(node, context, step),
|
|
288
317
|
}, this.nextLogSequence(context));
|
|
289
|
-
return;
|
|
318
|
+
return context.outputs[node.id];
|
|
290
319
|
}
|
|
291
320
|
try {
|
|
292
321
|
await this.writer.writeLog(context.execution, step, {
|
|
@@ -319,7 +348,7 @@ let WorkflowRuntimeService = WorkflowRuntimeService_1 = class WorkflowRuntimeSer
|
|
|
319
348
|
},
|
|
320
349
|
});
|
|
321
350
|
const output = result.output ?? {};
|
|
322
|
-
context.outputs[node.id] = output;
|
|
351
|
+
context.outputs[node.id] = this.getRuntimeContextOutput(node, output);
|
|
323
352
|
for (const artifact of result.artifacts ?? []) {
|
|
324
353
|
await this.writer.writeArtifact(context.execution, step, artifact);
|
|
325
354
|
}
|
|
@@ -339,6 +368,7 @@ let WorkflowRuntimeService = WorkflowRuntimeService_1 = class WorkflowRuntimeSer
|
|
|
339
368
|
artifactCount: result.artifacts?.length ?? 0,
|
|
340
369
|
},
|
|
341
370
|
}, this.nextLogSequence(context));
|
|
371
|
+
return output;
|
|
342
372
|
}
|
|
343
373
|
catch (error) {
|
|
344
374
|
await this.writer.failStep(step, error);
|
|
@@ -353,7 +383,7 @@ let WorkflowRuntimeService = WorkflowRuntimeService_1 = class WorkflowRuntimeSer
|
|
|
353
383
|
context: this.summarizeError(error),
|
|
354
384
|
metadata: this.nodeLogMetadata(node, context, step),
|
|
355
385
|
}, this.nextLogSequence(context));
|
|
356
|
-
return;
|
|
386
|
+
return context.outputs[node.id];
|
|
357
387
|
}
|
|
358
388
|
await this.writer.writeLog(context.execution, step, {
|
|
359
389
|
level: 'error',
|
|
@@ -362,9 +392,106 @@ let WorkflowRuntimeService = WorkflowRuntimeService_1 = class WorkflowRuntimeSer
|
|
|
362
392
|
context: this.summarizeError(error),
|
|
363
393
|
metadata: this.nodeLogMetadata(node, context, step),
|
|
364
394
|
}, this.nextLogSequence(context));
|
|
395
|
+
await this.runLocalErrorHandlers(node, context, error);
|
|
365
396
|
throw error;
|
|
366
397
|
}
|
|
367
398
|
}
|
|
399
|
+
async runGlobalErrorHandlers(definitionDsl, context, error) {
|
|
400
|
+
const errorNodes = definitionDsl.errors ?? [];
|
|
401
|
+
if (!errorNodes.length) {
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
await this.runErrorHandlers(errorNodes, context, error, 'global', undefined, undefined);
|
|
405
|
+
}
|
|
406
|
+
async runFinallyHandlers(definitionDsl, context) {
|
|
407
|
+
const finallyNodes = definitionDsl.finally ?? [];
|
|
408
|
+
if (!finallyNodes.length) {
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
await this.writer.writeLog(context.execution, undefined, {
|
|
412
|
+
level: 'info',
|
|
413
|
+
eventType: 'finally.started',
|
|
414
|
+
message: 'Running workflow finally handlers.',
|
|
415
|
+
metadata: {
|
|
416
|
+
handlerNodeCount: finallyNodes.length,
|
|
417
|
+
},
|
|
418
|
+
}, this.nextLogSequence(context));
|
|
419
|
+
await this.runNodes(finallyNodes, context);
|
|
420
|
+
await this.writer.writeLog(context.execution, undefined, {
|
|
421
|
+
level: 'info',
|
|
422
|
+
eventType: 'finally.completed',
|
|
423
|
+
message: 'Workflow finally handlers completed.',
|
|
424
|
+
metadata: {
|
|
425
|
+
handlerNodeCount: finallyNodes.length,
|
|
426
|
+
},
|
|
427
|
+
}, this.nextLogSequence(context));
|
|
428
|
+
}
|
|
429
|
+
async runLocalErrorHandlers(node, context, error) {
|
|
430
|
+
const errorNodes = node.errors ?? [];
|
|
431
|
+
if (!errorNodes.length) {
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
await this.runErrorHandlers(errorNodes, context, error, 'local', node.id, context.stepExecution?.stepExecutionKey);
|
|
435
|
+
}
|
|
436
|
+
async runErrorHandlers(errorNodes, context, error, scope, sourceNodeId, sourceStepExecutionKey) {
|
|
437
|
+
const errorContext = this.buildErrorContext(error, sourceNodeId, sourceStepExecutionKey);
|
|
438
|
+
await this.writer.writeLog(context.execution, undefined, {
|
|
439
|
+
level: 'warn',
|
|
440
|
+
eventType: `error-handler.${scope}.started`,
|
|
441
|
+
message: scope === 'global'
|
|
442
|
+
? 'Running workflow-level error handlers.'
|
|
443
|
+
: `Running local error handlers for node ${sourceNodeId}.`,
|
|
444
|
+
context: errorContext,
|
|
445
|
+
metadata: {
|
|
446
|
+
sourceNodeId,
|
|
447
|
+
sourceStepExecutionKey,
|
|
448
|
+
handlerNodeCount: errorNodes.length,
|
|
449
|
+
},
|
|
450
|
+
}, this.nextLogSequence(context));
|
|
451
|
+
try {
|
|
452
|
+
await this.runNodes(errorNodes, {
|
|
453
|
+
...context,
|
|
454
|
+
error: errorContext,
|
|
455
|
+
parentNodeId: sourceNodeId ?? context.parentNodeId,
|
|
456
|
+
parentStepExecutionKey: sourceStepExecutionKey ?? context.parentStepExecutionKey,
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
catch (handlerError) {
|
|
460
|
+
await this.writer.writeLog(context.execution, undefined, {
|
|
461
|
+
level: 'error',
|
|
462
|
+
eventType: `error-handler.${scope}.failed`,
|
|
463
|
+
message: `Error handler failed: ${this.errorMessage(handlerError)}.`,
|
|
464
|
+
context: this.summarizeError(handlerError),
|
|
465
|
+
metadata: {
|
|
466
|
+
originalError: errorContext,
|
|
467
|
+
sourceNodeId,
|
|
468
|
+
sourceStepExecutionKey,
|
|
469
|
+
},
|
|
470
|
+
}, this.nextLogSequence(context));
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
await this.writer.writeLog(context.execution, undefined, {
|
|
474
|
+
level: 'info',
|
|
475
|
+
eventType: `error-handler.${scope}.completed`,
|
|
476
|
+
message: scope === 'global'
|
|
477
|
+
? 'Workflow-level error handlers completed.'
|
|
478
|
+
: `Local error handlers completed for node ${sourceNodeId}.`,
|
|
479
|
+
context: errorContext,
|
|
480
|
+
metadata: {
|
|
481
|
+
sourceNodeId,
|
|
482
|
+
sourceStepExecutionKey,
|
|
483
|
+
},
|
|
484
|
+
}, this.nextLogSequence(context));
|
|
485
|
+
}
|
|
486
|
+
buildErrorContext(error, nodeId, stepExecutionKey) {
|
|
487
|
+
const summary = this.summarizeError(error);
|
|
488
|
+
return {
|
|
489
|
+
...summary,
|
|
490
|
+
message: this.errorMessage(error),
|
|
491
|
+
nodeId,
|
|
492
|
+
stepExecutionKey,
|
|
493
|
+
};
|
|
494
|
+
}
|
|
368
495
|
assertDefinitionYaml(value) {
|
|
369
496
|
if (!value || typeof value !== 'string') {
|
|
370
497
|
throw new common_1.BadRequestException('Workflow definition YAML must be stored as a string.');
|
|
@@ -469,6 +596,7 @@ let WorkflowRuntimeService = WorkflowRuntimeService_1 = class WorkflowRuntimeSer
|
|
|
469
596
|
...(node.then ?? []),
|
|
470
597
|
...(node.else ?? []),
|
|
471
598
|
...(node.defaults ?? []),
|
|
599
|
+
...(node.errors ?? []),
|
|
472
600
|
...Object.values(node.cases ?? {}).flat(),
|
|
473
601
|
];
|
|
474
602
|
return count + 1 + this.countNodes(nestedNodes);
|
|
@@ -494,6 +622,43 @@ let WorkflowRuntimeService = WorkflowRuntimeService_1 = class WorkflowRuntimeSer
|
|
|
494
622
|
availableOutputNodeIds: Object.keys(context.outputs ?? {}),
|
|
495
623
|
};
|
|
496
624
|
}
|
|
625
|
+
getRuntimeContextOutput(node, output) {
|
|
626
|
+
const hiddenOutputPaths = this.registry
|
|
627
|
+
.getMetadata(node.type)
|
|
628
|
+
.authoring?.outputs?.filter((definition) => definition.includeInRuntimeContext === false)
|
|
629
|
+
.map((definition) => definition.path ?? definition.key)
|
|
630
|
+
.filter(Boolean) ?? [];
|
|
631
|
+
if (!hiddenOutputPaths.length || !output || typeof output !== 'object') {
|
|
632
|
+
return output;
|
|
633
|
+
}
|
|
634
|
+
const runtimeOutput = this.cloneOutput(output);
|
|
635
|
+
hiddenOutputPaths.forEach((path) => {
|
|
636
|
+
this.deletePath(runtimeOutput, path);
|
|
637
|
+
});
|
|
638
|
+
return runtimeOutput;
|
|
639
|
+
}
|
|
640
|
+
cloneOutput(output) {
|
|
641
|
+
if (typeof structuredClone === 'function') {
|
|
642
|
+
return structuredClone(output);
|
|
643
|
+
}
|
|
644
|
+
return JSON.parse(JSON.stringify(output));
|
|
645
|
+
}
|
|
646
|
+
deletePath(target, path) {
|
|
647
|
+
const parts = path.split('.').filter(Boolean);
|
|
648
|
+
if (!parts.length) {
|
|
649
|
+
return;
|
|
650
|
+
}
|
|
651
|
+
let cursor = target;
|
|
652
|
+
for (let index = 0; index < parts.length - 1; index += 1) {
|
|
653
|
+
cursor = cursor?.[parts[index]];
|
|
654
|
+
if (!cursor || typeof cursor !== 'object') {
|
|
655
|
+
return;
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
if (cursor && typeof cursor === 'object') {
|
|
659
|
+
delete cursor[parts[parts.length - 1]];
|
|
660
|
+
}
|
|
661
|
+
}
|
|
497
662
|
summarizeValue(value) {
|
|
498
663
|
if (Array.isArray(value)) {
|
|
499
664
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-runtime.service.js","sourceRoot":"","sources":["../../../src/services/workflow/workflow-runtime.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, Injectable, Logger, NotFoundException } from '@nestjs/common';\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { EntityManager } from 'typeorm';\nimport { WorkflowDefinition } from '../../entities/workflow-definition.entity';\nimport { WorkflowExecution } from '../../entities/workflow-execution.entity';\nimport { WorkflowStepExecution } from '../../entities/workflow-step-execution.entity';\nimport {\n WorkflowDefinitionDsl,\n WorkflowExecutionRequest,\n WorkflowExecutionResponse,\n WorkflowNodeDefinition,\n WorkflowRuntimeContext,\n} from '../../types/workflow-dsl.types';\nimport { WorkflowExecutionWriterService } from './workflow-execution-writer.service';\nimport { WorkflowExpressionService } from './workflow-expression.service';\nimport { WorkflowDefinitionValidatorService } from './workflow-definition-validator.service';\nimport { WorkflowNodeRegistryService } from './workflow-node-registry.service';\nimport { WorkflowSecretService } from '../workflow-secret.service';\nimport { PublisherFactory } from '../queues/publisher-factory.service';\nimport { WorkflowExecutionQueuePayload } from '../../types/workflow-execution-queue.types';\nimport YAML from 'yaml';\n\n@Injectable()\nexport class WorkflowRuntimeService {\n private readonly logger = new Logger(WorkflowRuntimeService.name);\n\n constructor(\n @InjectEntityManager('default')\n private readonly entityManager: EntityManager,\n private readonly registry: WorkflowNodeRegistryService,\n private readonly expression: WorkflowExpressionService,\n private readonly writer: WorkflowExecutionWriterService,\n private readonly validator: WorkflowDefinitionValidatorService,\n private readonly workflowSecretService: WorkflowSecretService,\n private readonly workflowExecutionPublisherFactory: PublisherFactory<WorkflowExecutionQueuePayload>,\n ) {}\n\n async executeDefinitionById(\n id: number,\n request: WorkflowExecutionRequest,\n ): Promise<WorkflowExecutionResponse> {\n const definition = await this.entityManager.findOne(WorkflowDefinition, {\n where: { id } as any,\n });\n\n return this.executeDefinition(definition, request);\n }\n\n async executeDefinitionByIdAsync(\n id: number,\n request: WorkflowExecutionRequest = {},\n ): Promise<WorkflowExecutionResponse> {\n const definition = await this.entityManager.findOne(WorkflowDefinition, {\n where: { id } as any,\n });\n\n return this.enqueueDefinition(definition, request);\n }\n\n async executeDefinitionByKey(\n key: string,\n request: WorkflowExecutionRequest,\n ): Promise<WorkflowExecutionResponse> {\n const definition = await this.entityManager.findOne(WorkflowDefinition, {\n where: { key } as any,\n });\n\n return this.executeDefinition(definition, request);\n }\n\n async executeDefinitionByKeyAsync(\n key: string,\n request: WorkflowExecutionRequest = {},\n ): Promise<WorkflowExecutionResponse> {\n const definition = await this.entityManager.findOne(WorkflowDefinition, {\n where: { key } as any,\n });\n\n return this.enqueueDefinition(definition, request);\n }\n\n private async queueWorkflowExecution(\n payload: WorkflowExecutionQueuePayload,\n ): Promise<string> {\n const messageId = await this.workflowExecutionPublisherFactory.publish(\n {\n payload,\n parentEntityId: payload.executionId,\n parentEntity: 'workflowExecution',\n retryCount: 0,\n retryInterval: 1000,\n },\n 'WorkflowExecutionPublisher',\n );\n\n this.logger.log(\n `Queued workflow execution message ${messageId} for execution id ${payload.executionId}.`,\n );\n\n return messageId;\n }\n\n private async enqueueDefinition(\n definition: WorkflowDefinition | null,\n request: WorkflowExecutionRequest,\n ): Promise<WorkflowExecutionResponse> {\n if (!definition) {\n throw new BadRequestException('Workflow definition not found.');\n }\n\n this.validator.validate(this.assertDefinitionYaml(definition.definitionYaml));\n const execution = await this.writer.createEnqueuedExecution(definition, request);\n await this.queueWorkflowExecution({\n executionId: execution.id,\n });\n\n return this.toResponse(execution);\n }\n\n async executeEnqueuedExecution(\n executionId: number,\n ): Promise<WorkflowExecutionResponse> {\n const execution = await this.entityManager.findOne(WorkflowExecution, {\n where: { id: executionId } as any,\n relations: ['workflowDefinition'],\n });\n\n if (!execution) {\n throw new NotFoundException(`Workflow execution ${executionId} not found.`);\n }\n\n if (execution.status !== 'enqueued') {\n throw new BadRequestException(\n `Workflow execution ${executionId} is ${execution.status}; expected enqueued.`,\n );\n }\n\n const request = this.readEnqueuedExecutionRequest(execution);\n return this.executeDefinition(execution.workflowDefinition, request, execution);\n }\n\n private async executeDefinition(\n definition: WorkflowDefinition | null,\n request: WorkflowExecutionRequest,\n existingExecution?: WorkflowExecution,\n ): Promise<WorkflowExecutionResponse> {\n if (!definition) {\n throw new BadRequestException('Workflow definition not found.');\n }\n\n const definitionDsl = this.assertDefinitionYaml(definition.definitionYaml);\n this.validator.validate(definitionDsl);\n const secrets = await this.workflowSecretService.getWorkflowSecretsContext();\n const input = this.resolveWorkflowInput(definitionDsl, request, secrets);\n const variables = this.resolveWorkflowVariables(definitionDsl, request, input, secrets);\n const effectiveRequest: WorkflowExecutionRequest = {\n ...request,\n input,\n variables,\n };\n const execution = existingExecution\n ? await this.writer.startExecution(existingExecution, effectiveRequest)\n : await this.writer.createExecution(definition, effectiveRequest);\n const nodeCount = this.countNodes(definitionDsl.nodes);\n const outputs: Record<string, any> = {};\n const runtimeContext: WorkflowRuntimeContext = {\n execution,\n input,\n variables,\n secrets,\n outputs,\n counters: {\n step: 0,\n log: 0,\n },\n };\n\n try {\n this.logger.log(\n `Starting workflow execution ${execution.executionIdentifier} for ${definition.key} with ${nodeCount} node(s).`,\n );\n await this.writer.writeLog(execution, undefined, {\n level: 'info',\n eventType: 'execution.started',\n message: `Workflow execution started for ${definition.key}.`,\n metadata: {\n executionIdentifier: execution.executionIdentifier,\n workflowKey: definition.key,\n triggerType: execution.triggerType,\n nodeCount,\n inputKeys: Object.keys(runtimeContext.input ?? {}),\n variableKeys: Object.keys(runtimeContext.variables ?? {}),\n },\n }, this.nextLogSequence(runtimeContext));\n\n await this.runNodes(definitionDsl.nodes, runtimeContext);\n\n const completed = await this.writer.completeExecution(execution, outputs);\n\n this.logger.log(\n `Completed workflow execution ${completed.executionIdentifier} for ${definition.key} in ${completed.durationMs ?? 0} ms.`,\n );\n await this.writer.writeLog(completed, undefined, {\n level: 'info',\n eventType: 'execution.completed',\n message: `Workflow execution completed for ${definition.key}.`,\n metadata: {\n executionIdentifier: completed.executionIdentifier,\n durationMs: completed.durationMs,\n outputNodeIds: Object.keys(outputs),\n },\n }, this.nextLogSequence(runtimeContext));\n\n return this.toResponse(completed);\n } catch (error) {\n const failed = await this.writer.failExecution(execution, error);\n\n this.logger.error(\n `Failed workflow execution ${failed.executionIdentifier} for ${definition.key}: ${failed.errorSummary}`,\n error instanceof Error ? error.stack : undefined,\n );\n await this.writer.writeLog(failed, undefined, {\n level: 'error',\n eventType: 'execution.failed',\n message: failed.errorSummary,\n context: this.summarizeError(error),\n metadata: {\n executionIdentifier: failed.executionIdentifier,\n durationMs: failed.durationMs,\n },\n }, this.nextLogSequence(runtimeContext));\n\n return this.toResponse(failed);\n }\n }\n\n async getExecutionStatus(executionId: number): Promise<WorkflowExecutionResponse> {\n const execution = await this.findExecutionOrThrow(executionId);\n return this.toResponse(execution);\n }\n\n async getLastStepOutput(executionId: number): Promise<any> {\n await this.findExecutionOrThrow(executionId);\n const step = await this.entityManager.findOne(WorkflowStepExecution, {\n where: { workflowExecution: { id: executionId } } as any,\n order: {\n sequenceNumber: 'DESC',\n id: 'DESC',\n } as any,\n });\n\n if (!step) {\n throw new NotFoundException(`No step executions found for workflow execution ${executionId}.`);\n }\n\n return this.toStepOutputResponse(step);\n }\n\n async getStepOutput(\n executionId: number,\n stepNameOrId: string,\n options: { latest?: boolean; limit?: number; offset?: number } = {},\n ): Promise<any> {\n await this.findExecutionOrThrow(executionId);\n\n const qb = this.entityManager\n .createQueryBuilder(WorkflowStepExecution, 'step')\n .innerJoin('step.workflowExecution', 'execution')\n .where('execution.id = :executionId', { executionId })\n .andWhere(\n '(step.nodeId = :stepNameOrId OR step.nodeName = :stepNameOrId OR step.stepExecutionKey = :stepNameOrId)',\n { stepNameOrId },\n )\n .orderBy('step.sequenceNumber', options.latest === false ? 'ASC' : 'DESC')\n .addOrderBy('step.id', options.latest === false ? 'ASC' : 'DESC');\n\n if (options.latest !== false && options.limit === undefined && options.offset === undefined) {\n const step = await qb.getOne();\n if (!step) {\n throw new NotFoundException(\n `No step output found for '${stepNameOrId}' in workflow execution ${executionId}.`,\n );\n }\n return this.toStepOutputResponse(step);\n }\n\n const limit = Math.max(1, Math.min(Number(options.limit ?? 50), 200));\n const offset = Math.max(0, Number(options.offset ?? 0));\n const [steps, totalRecords] = await qb.limit(limit).offset(offset).getManyAndCount();\n\n return {\n meta: this.buildPagedMeta(offset, limit, totalRecords),\n records: steps.map((step) => this.toStepOutputResponse(step)),\n };\n }\n\n private resolveWorkflowInput(\n definitionDsl: WorkflowDefinitionDsl,\n request: WorkflowExecutionRequest,\n secrets: Record<string, any>,\n ): Record<string, any> {\n const requestedInput = request.input ?? {};\n const defaultInput = Object.entries(definitionDsl.inputs ?? {}).reduce(\n (acc, [key, inputDefinition]) => {\n if (\n inputDefinition &&\n typeof inputDefinition === 'object' &&\n !Array.isArray(inputDefinition) &&\n Object.prototype.hasOwnProperty.call(inputDefinition, 'default')\n ) {\n acc[key] = inputDefinition.default;\n return acc;\n }\n\n if (\n inputDefinition === null ||\n inputDefinition === undefined ||\n (typeof inputDefinition === 'object' && !Array.isArray(inputDefinition))\n ) {\n return acc;\n }\n\n acc[key] = inputDefinition;\n return acc;\n },\n {} as Record<string, any>,\n );\n const rawInput = {\n ...defaultInput,\n ...requestedInput,\n };\n\n return this.expression.interpolate(rawInput, {\n execution: undefined as any,\n input: rawInput,\n variables: definitionDsl.variables ?? {},\n secrets,\n outputs: {},\n });\n }\n\n private resolveWorkflowVariables(\n definitionDsl: WorkflowDefinitionDsl,\n request: WorkflowExecutionRequest,\n input: Record<string, any>,\n secrets: Record<string, any>,\n ): Record<string, any> {\n const rawVariables = {\n ...(definitionDsl.variables ?? {}),\n ...(request.variables ?? {}),\n };\n\n return this.expression.interpolate(rawVariables, {\n execution: undefined as any,\n input,\n variables: rawVariables,\n secrets,\n outputs: {},\n });\n }\n\n private async runNodes(\n nodes: WorkflowNodeDefinition[],\n context: WorkflowRuntimeContext,\n ): Promise<Record<string, any>> {\n for (const node of nodes ?? []) {\n await this.runNode(node, context);\n }\n\n return context.outputs;\n }\n\n private async runNode(\n node: WorkflowNodeDefinition,\n context: WorkflowRuntimeContext,\n ): Promise<void> {\n const inputPayload = {\n configuration: node.configuration,\n input: context.input,\n variables: context.variables,\n item: context.item,\n index: context.index,\n };\n\n const step = await this.writer.createStep(\n context.execution,\n node,\n this.nextStepSequence(context),\n inputPayload,\n context.parentNodeId,\n context.parentStepExecutionKey,\n );\n\n if (node.disabled) {\n context.outputs[node.id] = { skipped: true };\n await this.writer.completeStep(step, 'skipped', context.outputs[node.id]);\n await this.writer.writeLog(context.execution, step, {\n level: 'debug',\n eventType: 'node.skipped',\n message: `Skipped disabled node ${node.id}.`,\n metadata: this.nodeLogMetadata(node, context, step),\n }, this.nextLogSequence(context));\n return;\n }\n\n try {\n await this.writer.writeLog(context.execution, step, {\n level: 'debug',\n eventType: 'node.started',\n message: `Starting node ${node.id} (${node.type}).`,\n metadata: this.nodeLogMetadata(node, context, step),\n }, this.nextLogSequence(context));\n\n this.logger.debug(\n `Starting workflow node ${node.id} (${node.type}) for execution ${context.execution.executionIdentifier}.`,\n );\n const startedAtMs = Date.now();\n const handler = this.registry.get(node.type);\n const result = await handler.execute({\n ...context,\n node,\n stepExecution: step,\n expression: this.expression,\n runNodes: async (childNodes, options = {}) =>\n this.runNodes(childNodes, {\n ...context,\n ...options,\n execution: context.execution,\n outputs: options.outputs ?? context.outputs,\n parentNodeId: node.id,\n parentStepExecutionKey: step.stepExecutionKey,\n }),\n emitLog: async (entry) => {\n await this.writer.writeLog(\n context.execution,\n step,\n entry,\n this.nextLogSequence(context),\n );\n },\n emitArtifact: async (entry) => {\n await this.writer.writeArtifact(context.execution, step, entry);\n },\n });\n\n const output = result.output ?? {};\n context.outputs[node.id] = output;\n\n for (const artifact of result.artifacts ?? []) {\n await this.writer.writeArtifact(context.execution, step, artifact);\n }\n\n await this.writer.completeStep(\n step,\n result.status ?? 'success',\n output,\n {\n item: context.item,\n index: context.index,\n },\n );\n\n await this.writer.writeLog(context.execution, step, {\n level: 'debug',\n eventType: 'node.completed',\n message: `Completed node ${node.id} (${node.type}).`,\n metadata: {\n ...this.nodeLogMetadata(node, context, step),\n status: result.status ?? 'success',\n durationMs: Date.now() - startedAtMs,\n outputSummary: this.summarizeValue(output),\n artifactCount: result.artifacts?.length ?? 0,\n },\n }, this.nextLogSequence(context));\n } catch (error) {\n await this.writer.failStep(step, error);\n\n if (node.onError === 'continue') {\n context.outputs[node.id] = {\n error: error instanceof Error ? error.message : String(error),\n };\n await this.writer.writeLog(context.execution, step, {\n level: 'warn',\n eventType: 'node.failed.continued',\n message: `Node ${node.id} failed but workflow continued: ${this.errorMessage(error)}.`,\n context: this.summarizeError(error),\n metadata: this.nodeLogMetadata(node, context, step),\n }, this.nextLogSequence(context));\n return;\n }\n\n await this.writer.writeLog(context.execution, step, {\n level: 'error',\n eventType: 'node.failed',\n message: `Node ${node.id} failed: ${this.errorMessage(error)}.`,\n context: this.summarizeError(error),\n metadata: this.nodeLogMetadata(node, context, step),\n }, this.nextLogSequence(context));\n throw error;\n }\n }\n\n private assertDefinitionYaml(value: any): WorkflowDefinitionDsl {\n if (!value || typeof value !== 'string') {\n throw new BadRequestException(\n 'Workflow definition YAML must be stored as a string.',\n );\n }\n\n let parsed: unknown;\n try {\n parsed = YAML.parse(value);\n } catch (error: any) {\n throw new BadRequestException(\n error?.message ?? 'Workflow definition YAML could not be parsed.',\n );\n }\n\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new BadRequestException(\n 'Workflow definition YAML must resolve to an object with a nodes array.',\n );\n }\n\n if (!Array.isArray((parsed as WorkflowDefinitionDsl).nodes)) {\n throw new BadRequestException(\n 'Workflow definition YAML must include a nodes array.',\n );\n }\n\n return parsed as WorkflowDefinitionDsl;\n }\n\n private readEnqueuedExecutionRequest(execution: WorkflowExecution): WorkflowExecutionRequest {\n const payload = execution.inputPayload;\n if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {\n return {\n triggerType: execution.triggerType,\n requestedByUserId: execution.requestedByUserId as any,\n };\n }\n\n return {\n ...(payload as WorkflowExecutionRequest),\n triggerType: (payload as WorkflowExecutionRequest).triggerType ?? execution.triggerType,\n requestedByUserId:\n (payload as WorkflowExecutionRequest).requestedByUserId ??\n (execution.requestedByUserId as any),\n };\n }\n\n private async findExecutionOrThrow(executionId: number): Promise<WorkflowExecution> {\n const execution = await this.entityManager.findOne(WorkflowExecution, {\n where: { id: executionId } as any,\n });\n\n if (!execution) {\n throw new NotFoundException(`Workflow execution ${executionId} not found.`);\n }\n\n return execution;\n }\n\n private toStepOutputResponse(step: WorkflowStepExecution) {\n return {\n id: step.id,\n stepExecutionKey: step.stepExecutionKey,\n nodeId: step.nodeId,\n nodeName: step.nodeName,\n nodeType: step.nodeType,\n nodeKind: step.nodeKind,\n sequenceNumber: step.sequenceNumber,\n attemptNumber: step.attemptNumber,\n status: step.status,\n startedAt: step.startedAt,\n finishedAt: step.finishedAt,\n durationMs: step.durationMs as any,\n runtimeContext: step.runtimeContext,\n outputPayload: step.outputPayload,\n errorSummary: step.errorSummary,\n };\n }\n\n private buildPagedMeta(offset: number, limit: number, totalRecords: number) {\n const currentPage = limit ? Math.floor(offset / limit) + 1 : 1;\n const totalPages = limit ? Math.max(1, Math.ceil(totalRecords / limit)) : 1;\n return {\n totalRecords,\n currentPage,\n nextPage: currentPage < totalPages ? currentPage + 1 : null,\n prevPage: currentPage > 1 ? currentPage - 1 : null,\n totalPages,\n perPage: limit,\n };\n }\n\n private toResponse(execution: WorkflowExecution): WorkflowExecutionResponse {\n return {\n id: execution.id,\n executionIdentifier: execution.executionIdentifier,\n workflowKey: execution.workflowKey,\n status: execution.status as any,\n startedAt: execution.startedAt,\n finishedAt: execution.finishedAt,\n durationMs: execution.durationMs as any,\n outputPayload: execution.outputPayload,\n errorSummary: execution.errorSummary,\n };\n }\n\n private nextStepSequence(context: WorkflowRuntimeContext): number {\n context.counters = context.counters ?? { step: 0, log: 0 };\n context.counters.step += 1;\n return context.counters.step;\n }\n\n private nextLogSequence(context: WorkflowRuntimeContext): number {\n context.counters = context.counters ?? { step: 0, log: 0 };\n context.counters.log += 1;\n return context.counters.log;\n }\n\n private countNodes(nodes: WorkflowNodeDefinition[] = []): number {\n return nodes.reduce((count, node) => {\n const nestedNodes = [\n ...(node.tasks ?? []),\n ...(node.then ?? []),\n ...(node.else ?? []),\n ...(node.defaults ?? []),\n ...Object.values(node.cases ?? {}).flat(),\n ];\n\n return count + 1 + this.countNodes(nestedNodes);\n }, 0);\n }\n\n private nodeLogMetadata(\n node: WorkflowNodeDefinition,\n context: WorkflowRuntimeContext,\n step?: WorkflowStepExecution,\n ) {\n return {\n executionIdentifier: context.execution.executionIdentifier,\n stepExecutionKey: step?.stepExecutionKey,\n nodeId: node.id,\n nodeName: node.name,\n nodeType: node.type,\n nodeKind: node.kind,\n parentNodeId: context.parentNodeId,\n parentStepExecutionKey: context.parentStepExecutionKey,\n index: context.index,\n hasItem: context.item !== undefined,\n configurationKeys:\n node.configuration && typeof node.configuration === 'object'\n ? Object.keys(node.configuration)\n : [],\n availableInputKeys: Object.keys(context.input ?? {}),\n availableVariableKeys: Object.keys(context.variables ?? {}),\n availableOutputNodeIds: Object.keys(context.outputs ?? {}),\n };\n }\n\n private summarizeValue(value: any): any {\n if (Array.isArray(value)) {\n return {\n type: 'array',\n length: value.length,\n };\n }\n\n if (value && typeof value === 'object') {\n return {\n type: 'object',\n keys: Object.keys(value),\n };\n }\n\n return {\n type: value === null ? 'null' : typeof value,\n empty: value === undefined || value === null || value === '',\n };\n }\n\n private errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n }\n\n private summarizeError(error: unknown): any {\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n };\n }\n\n return { error };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"workflow-runtime.service.js","sourceRoot":"","sources":["../../../src/services/workflow/workflow-runtime.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,2CAA4F;AAC5F,6CAAsD;AACtD,qCAAwC;AACxC,0FAA+E;AAC/E,wFAA6E;AAC7E,kGAAsF;AAQtF,2FAAqF;AACrF,+EAA0E;AAC1E,mGAA6F;AAC7F,qFAA+E;AAC/E,wEAAmE;AACnE,mFAAuE;AAEvE,gDAAwB;AAGjB,IAAM,sBAAsB,8BAA5B,MAAM,sBAAsB;IAGjC,YAEE,aAA6C,EAC5B,QAAqC,EACrC,UAAqC,EACrC,MAAsC,EACtC,SAA6C,EAC7C,qBAA4C,EAC5C,iCAAkF;QANlF,kBAAa,GAAb,aAAa,CAAe;QAC5B,aAAQ,GAAR,QAAQ,CAA6B;QACrC,eAAU,GAAV,UAAU,CAA2B;QACrC,WAAM,GAAN,MAAM,CAAgC;QACtC,cAAS,GAAT,SAAS,CAAoC;QAC7C,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,sCAAiC,GAAjC,iCAAiC,CAAiD;QAVpF,WAAM,GAAG,IAAI,eAAM,CAAC,wBAAsB,CAAC,IAAI,CAAC,CAAC;IAW/D,CAAC;IAEJ,KAAK,CAAC,qBAAqB,CACzB,EAAU,EACV,OAAiC;QAEjC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,+CAAkB,EAAE;YACtE,KAAK,EAAE,EAAE,EAAE,EAAS;SACrB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,0BAA0B,CAC9B,EAAU,EACV,UAAoC,EAAE;QAEtC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,+CAAkB,EAAE;YACtE,KAAK,EAAE,EAAE,EAAE,EAAS;SACrB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,GAAW,EACX,OAAiC;QAEjC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,+CAAkB,EAAE;YACtE,KAAK,EAAE,EAAE,GAAG,EAAS;SACtB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,2BAA2B,CAC/B,GAAW,EACX,UAAoC,EAAE;QAEtC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,+CAAkB,EAAE;YACtE,KAAK,EAAE,EAAE,GAAG,EAAS;SACtB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,OAAsC;QAEtC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iCAAiC,CAAC,OAAO,CACpE;YACE,OAAO;YACP,cAAc,EAAE,OAAO,CAAC,WAAW;YACnC,YAAY,EAAE,mBAAmB;YACjC,UAAU,EAAE,CAAC;YACb,aAAa,EAAE,IAAI;SACpB,EACD,4BAA4B,CAC7B,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,qCAAqC,SAAS,qBAAqB,OAAO,CAAC,WAAW,GAAG,CAC1F,CAAC;QAEF,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,UAAqC,EACrC,OAAiC;QAEjC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,4BAAmB,CAAC,gCAAgC,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;QAC9E,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjF,MAAM,IAAI,CAAC,sBAAsB,CAAC;YAChC,WAAW,EAAE,SAAS,CAAC,EAAE;SAC1B,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC5B,WAAmB;QAEnB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,6CAAiB,EAAE;YACpE,KAAK,EAAE,EAAE,EAAE,EAAE,WAAW,EAAS;YACjC,SAAS,EAAE,CAAC,oBAAoB,CAAC;SAClC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,0BAAiB,CAAC,sBAAsB,WAAW,aAAa,CAAC,CAAC;QAC9E,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACpC,MAAM,IAAI,4BAAmB,CAC3B,sBAAsB,WAAW,OAAO,SAAS,CAAC,MAAM,sBAAsB,CAC/E,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAClF,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,UAAqC,EACrC,OAAiC,EACjC,iBAAqC;QAErC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,4BAAmB,CAAC,gCAAgC,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAC3E,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,yBAAyB,EAAE,CAAC;QAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACzE,MAAM,SAAS,GAAG,IAAI,CAAC,wBAAwB,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACxF,MAAM,gBAAgB,GAA6B;YACjD,GAAG,OAAO;YACV,KAAK;YACL,SAAS;SACV,CAAC;QACF,MAAM,SAAS,GAAG,iBAAiB;YACjC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;YACvE,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QACpE,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;YAChC,GAAG,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9B,GAAG,CAAC,aAAa,CAAC,MAAM,IAAI,EAAE,CAAC;YAC/B,GAAG,CAAC,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC;SACjC,CAAC,CAAC;QACH,MAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,MAAM,cAAc,GAA2B;YAC7C,SAAS;YACT,KAAK;YACL,SAAS;YACT,OAAO;YACP,OAAO;YACP,QAAQ,EAAE;gBACR,IAAI,EAAE,CAAC;gBACP,GAAG,EAAE,CAAC;aACP;SACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,+BAA+B,SAAS,CAAC,mBAAmB,QAAQ,UAAU,CAAC,GAAG,SAAS,SAAS,WAAW,CAChH,CAAC;QACF,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE;YAC/C,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,mBAAmB;YAC9B,OAAO,EAAE,kCAAkC,UAAU,CAAC,GAAG,GAAG;YAC5D,QAAQ,EAAE;gBACR,mBAAmB,EAAE,SAAS,CAAC,mBAAmB;gBAClD,WAAW,EAAE,UAAU,CAAC,GAAG;gBAC3B,WAAW,EAAE,SAAS,CAAC,WAAW;gBAClC,SAAS;gBACT,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC;gBAClD,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,IAAI,EAAE,CAAC;aAC1D;SACF,EAAE,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;QAEzC,IAAI,cAAuB,CAAC;QAE5B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,GAAG,KAAK,CAAC;YACvB,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,YAAY,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE;gBAC/C,KAAK,EAAE,OAAO;gBACd,SAAS,EAAE,gBAAgB;gBAC3B,OAAO,EAAE,2BAA2B,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG;gBACtE,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;gBAC1C,QAAQ,EAAE;oBACR,aAAa,EAAE,cAAc;wBAC3B,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;wBACrC,CAAC,CAAC,SAAS;iBACd;aACF,EAAE,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,cAAc,GAAG,YAAY,CAAC;YAChC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAE1E,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,gCAAgC,SAAS,CAAC,mBAAmB,QAAQ,UAAU,CAAC,GAAG,OAAO,SAAS,CAAC,UAAU,IAAI,CAAC,MAAM,CAC1H,CAAC;YACF,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE;gBAC/C,KAAK,EAAE,MAAM;gBACb,SAAS,EAAE,qBAAqB;gBAChC,OAAO,EAAE,oCAAoC,UAAU,CAAC,GAAG,GAAG;gBAC9D,QAAQ,EAAE;oBACR,mBAAmB,EAAE,SAAS,CAAC,mBAAmB;oBAClD,UAAU,EAAE,SAAS,CAAC,UAAU;oBAChC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;iBACpC;aACF,EAAE,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;YAEzC,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAE1E,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,6BAA6B,MAAM,CAAC,mBAAmB,QAAQ,UAAU,CAAC,GAAG,KAAK,MAAM,CAAC,YAAY,EAAE,EACvG,cAAc,YAAY,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CACnE,CAAC;QACF,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE;YAC5C,KAAK,EAAE,OAAO;YACd,SAAS,EAAE,kBAAkB;YAC7B,OAAO,EAAE,MAAM,CAAC,YAAY;YAC5B,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;YAC5C,QAAQ,EAAE;gBACR,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;gBAC/C,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B;SACF,EAAE,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;QAEzC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,WAAmB;QAC1C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QACzC,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,sDAAqB,EAAE;YACnE,KAAK,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,EAAS;YACxD,KAAK,EAAE;gBACL,cAAc,EAAE,MAAM;gBACtB,EAAE,EAAE,MAAM;aACJ;SACT,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,0BAAiB,CAAC,mDAAmD,WAAW,GAAG,CAAC,CAAC;QACjG,CAAC;QAED,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,WAAmB,EACnB,YAAoB,EACpB,UAAiE,EAAE;QAEnE,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAE7C,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa;aAC1B,kBAAkB,CAAC,sDAAqB,EAAE,MAAM,CAAC;aACjD,SAAS,CAAC,wBAAwB,EAAE,WAAW,CAAC;aAChD,KAAK,CAAC,6BAA6B,EAAE,EAAE,WAAW,EAAE,CAAC;aACrD,QAAQ,CACP,yGAAyG,EACzG,EAAE,YAAY,EAAE,CACjB;aACA,OAAO,CAAC,qBAAqB,EAAE,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;aACzE,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAEpE,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5F,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,0BAAiB,CACzB,6BAA6B,YAAY,2BAA2B,WAAW,GAAG,CACnF,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;QAErF,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC;YACtD,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;SAC9D,CAAC;IACJ,CAAC;IAEO,oBAAoB,CAC1B,aAAoC,EACpC,OAAiC,EACjC,OAA4B;QAE5B,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CACpE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,EAAE;YAC9B,IACE,eAAe;gBACf,OAAO,eAAe,KAAK,QAAQ;gBACnC,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;gBAC/B,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,EAChE,CAAC;gBACD,GAAG,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC;gBACnC,OAAO,GAAG,CAAC;YACb,CAAC;YAED,IACE,eAAe,KAAK,IAAI;gBACxB,eAAe,KAAK,SAAS;gBAC7B,CAAC,OAAO,eAAe,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,EACxE,CAAC;gBACD,OAAO,GAAG,CAAC;YACb,CAAC;YAED,GAAG,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC;YAC3B,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAAyB,CAC1B,CAAC;QACF,MAAM,QAAQ,GAAG;YACf,GAAG,YAAY;YACf,GAAG,cAAc;SAClB,CAAC;QAEF,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE;YAC3C,SAAS,EAAE,SAAgB;YAC3B,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,aAAa,CAAC,SAAS,IAAI,EAAE;YACxC,OAAO;YACP,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;IACL,CAAC;IAEO,wBAAwB,CAC9B,aAAoC,EACpC,OAAiC,EACjC,KAA0B,EAC1B,OAA4B;QAE5B,MAAM,YAAY,GAAG;YACnB,GAAG,CAAC,aAAa,CAAC,SAAS,IAAI,EAAE,CAAC;YAClC,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;SAC7B,CAAC;QAEF,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,EAAE;YAC/C,SAAS,EAAE,SAAgB;YAC3B,KAAK;YACL,SAAS,EAAE,YAAY;YACvB,OAAO;YACP,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,QAAQ,CACpB,KAA+B,EAC/B,OAA+B;QAE/B,MAAM,WAAW,GAAwB,EAAE,CAAC;QAE5C,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;YAC/B,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,IAA4B,EAC5B,OAA+B;QAE/B,MAAM,YAAY,GAAG;YACnB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CACvC,OAAO,CAAC,SAAS,EACjB,IAAI,EACJ,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAC9B,YAAY,EACZ,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,sBAAsB,CAC/B,CAAC;QAEF,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1E,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE;gBAClD,KAAK,EAAE,OAAO;gBACd,SAAS,EAAE,cAAc;gBACzB,OAAO,EAAE,yBAAyB,IAAI,CAAC,EAAE,GAAG;gBAC5C,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;aACpD,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;YAClC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE;gBAClD,KAAK,EAAE,OAAO;gBACd,SAAS,EAAE,cAAc;gBACzB,OAAO,EAAE,iBAAiB,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,IAAI;gBACnD,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;aACpD,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;YAElC,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,0BAA0B,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,mBAAmB,OAAO,CAAC,SAAS,CAAC,mBAAmB,GAAG,CAC3G,CAAC;YACF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;gBACnC,GAAG,OAAO;gBACV,IAAI;gBACJ,aAAa,EAAE,IAAI;gBACnB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE,CAC3C,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;oBACxB,GAAG,OAAO;oBACV,GAAG,OAAO;oBACV,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO;oBAC3C,YAAY,EAAE,IAAI,CAAC,EAAE;oBACrB,sBAAsB,EAAE,IAAI,CAAC,gBAAgB;iBAC9C,CAAC;gBACJ,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;oBACvB,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CACxB,OAAO,CAAC,SAAS,EACjB,IAAI,EACJ,KAAK,EACL,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAC9B,CAAC;gBACJ,CAAC;gBACD,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;oBAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;gBAClE,CAAC;aACF,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;YACnC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAEtE,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;gBAC9C,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YACrE,CAAC;YAED,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAC5B,IAAI,EACJ,MAAM,CAAC,MAAM,IAAI,SAAS,EAC1B,MAAM,EACN;gBACE,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CACF,CAAC;YAEF,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE;gBAClD,KAAK,EAAE,OAAO;gBACd,SAAS,EAAE,gBAAgB;gBAC3B,OAAO,EAAE,kBAAkB,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,IAAI;gBACpD,QAAQ,EAAE;oBACR,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;oBAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,SAAS;oBAClC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW;oBACpC,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;oBAC1C,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;iBAC7C;aACF,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;YAElC,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAExC,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG;oBACzB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC;gBACF,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE;oBAClD,KAAK,EAAE,MAAM;oBACb,SAAS,EAAE,uBAAuB;oBAClC,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,mCAAmC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG;oBACtF,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;oBACnC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;iBACpD,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;gBAClC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClC,CAAC;YAED,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE;gBAClD,KAAK,EAAE,OAAO;gBACd,SAAS,EAAE,aAAa;gBACxB,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,YAAY,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG;gBAC/D,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;gBACnC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;aACpD,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;YAClC,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YACvD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,aAAoC,EACpC,OAA+B,EAC/B,KAAc;QAEd,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,gBAAgB,CACzB,UAAU,EACV,OAAO,EACP,KAAK,EACL,QAAQ,EACR,SAAS,EACT,SAAS,CACV,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,aAAoC,EACpC,OAA+B;QAE/B,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC;QACjD,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE;YACvD,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,iBAAiB;YAC5B,OAAO,EAAE,oCAAoC;YAC7C,QAAQ,EAAE;gBACR,gBAAgB,EAAE,YAAY,CAAC,MAAM;aACtC;SACF,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAElC,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAE3C,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE;YACvD,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,mBAAmB;YAC9B,OAAO,EAAE,sCAAsC;YAC/C,QAAQ,EAAE;gBACR,gBAAgB,EAAE,YAAY,CAAC,MAAM;aACtC;SACF,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IACpC,CAAC;IAEO,KAAK,CAAC,qBAAqB,CACjC,IAA4B,EAC5B,OAA+B,EAC/B,KAAc;QAEd,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,gBAAgB,CACzB,UAAU,EACV,OAAO,EACP,KAAK,EACL,OAAO,EACP,IAAI,CAAC,EAAE,EACP,OAAO,CAAC,aAAa,EAAE,gBAAgB,CACxC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,UAAoC,EACpC,OAA+B,EAC/B,KAAc,EACd,KAAyB,EACzB,YAAqB,EACrB,sBAA+B;QAE/B,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,sBAAsB,CAAC,CAAC;QAEzF,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE;YACvD,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,iBAAiB,KAAK,UAAU;YAC3C,OAAO,EACL,KAAK,KAAK,QAAQ;gBAChB,CAAC,CAAC,wCAAwC;gBAC1C,CAAC,CAAC,yCAAyC,YAAY,GAAG;YAC9D,OAAO,EAAE,YAAY;YACrB,QAAQ,EAAE;gBACR,YAAY;gBACZ,sBAAsB;gBACtB,gBAAgB,EAAE,UAAU,CAAC,MAAM;aACpC;SACF,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAElC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;gBAC9B,GAAG,OAAO;gBACV,KAAK,EAAE,YAAY;gBACnB,YAAY,EAAE,YAAY,IAAI,OAAO,CAAC,YAAY;gBAClD,sBAAsB,EACpB,sBAAsB,IAAI,OAAO,CAAC,sBAAsB;aAC3D,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,YAAY,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE;gBACvD,KAAK,EAAE,OAAO;gBACd,SAAS,EAAE,iBAAiB,KAAK,SAAS;gBAC1C,OAAO,EAAE,yBAAyB,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG;gBACpE,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;gBAC1C,QAAQ,EAAE;oBACR,aAAa,EAAE,YAAY;oBAC3B,YAAY;oBACZ,sBAAsB;iBACvB;aACF,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE;YACvD,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,iBAAiB,KAAK,YAAY;YAC7C,OAAO,EACL,KAAK,KAAK,QAAQ;gBAChB,CAAC,CAAC,0CAA0C;gBAC5C,CAAC,CAAC,2CAA2C,YAAY,GAAG;YAChE,OAAO,EAAE,YAAY;YACrB,QAAQ,EAAE;gBACR,YAAY;gBACZ,sBAAsB;aACvB;SACF,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IACpC,CAAC;IAEO,iBAAiB,CACvB,KAAc,EACd,MAAe,EACf,gBAAyB;QAEzB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3C,OAAO;YACL,GAAG,OAAO;YACV,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YACjC,MAAM;YACN,gBAAgB;SACjB,CAAC;IACJ,CAAC;IAEO,oBAAoB,CAAC,KAAU;QACrC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,IAAI,4BAAmB,CAC3B,sDAAsD,CACvD,CAAC;QACJ,CAAC;QAED,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,cAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,4BAAmB,CAC3B,KAAK,EAAE,OAAO,IAAI,+CAA+C,CAClE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,4BAAmB,CAC3B,wEAAwE,CACzE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,MAAgC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,4BAAmB,CAC3B,sDAAsD,CACvD,CAAC;QACJ,CAAC;QAED,OAAO,MAA+B,CAAC;IACzC,CAAC;IAEO,4BAA4B,CAAC,SAA4B;QAC/D,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACtE,OAAO;gBACL,WAAW,EAAE,SAAS,CAAC,WAAW;gBAClC,iBAAiB,EAAE,SAAS,CAAC,iBAAwB;aACtD,CAAC;QACJ,CAAC;QAED,OAAO;YACL,GAAI,OAAoC;YACxC,WAAW,EAAG,OAAoC,CAAC,WAAW,IAAI,SAAS,CAAC,WAAW;YACvF,iBAAiB,EACd,OAAoC,CAAC,iBAAiB;gBACtD,SAAS,CAAC,iBAAyB;SACvC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,WAAmB;QACpD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,6CAAiB,EAAE;YACpE,KAAK,EAAE,EAAE,EAAE,EAAE,WAAW,EAAS;SAClC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,0BAAiB,CAAC,sBAAsB,WAAW,aAAa,CAAC,CAAC;QAC9E,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,oBAAoB,CAAC,IAA2B;QACtD,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAiB;YAClC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC;IACJ,CAAC;IAEO,cAAc,CAAC,MAAc,EAAE,KAAa,EAAE,YAAoB;QACxE,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO;YACL,YAAY;YACZ,WAAW;YACX,QAAQ,EAAE,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;YAC3D,QAAQ,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;YAClD,UAAU;YACV,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;IAEO,UAAU,CAAC,SAA4B;QAC7C,OAAO;YACL,EAAE,EAAE,SAAS,CAAC,EAAE;YAChB,mBAAmB,EAAE,SAAS,CAAC,mBAAmB;YAClD,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,MAAM,EAAE,SAAS,CAAC,MAAa;YAC/B,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,UAAU,EAAE,SAAS,CAAC,UAAiB;YACvC,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,YAAY,EAAE,SAAS,CAAC,YAAY;SACrC,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,OAA+B;QACtD,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC3D,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;QAC3B,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC/B,CAAC;IAEO,eAAe,CAAC,OAA+B;QACrD,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC3D,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;QAC1B,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;IAC9B,CAAC;IAEO,UAAU,CAAC,QAAkC,EAAE;QACrD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAClC,MAAM,WAAW,GAAG;gBAClB,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACrB,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;gBACpB,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;gBACpB,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;gBACxB,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;gBACtB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;aAC1C,CAAC;YAEF,OAAO,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC,EAAE,CAAC,CAAC,CAAC;IACR,CAAC;IAEO,eAAe,CACrB,IAA4B,EAC5B,OAA+B,EAC/B,IAA4B;QAE5B,OAAO;YACL,mBAAmB,EAAE,OAAO,CAAC,SAAS,CAAC,mBAAmB;YAC1D,gBAAgB,EAAE,IAAI,EAAE,gBAAgB;YACxC,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;YACtD,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS;YACnC,iBAAiB,EACf,IAAI,CAAC,aAAa,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ;gBAC1D,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;gBACjC,CAAC,CAAC,EAAE;YACR,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;YACpD,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;YAC3D,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;SAC3D,CAAC;IACJ,CAAC;IAEO,uBAAuB,CAC7B,IAA4B,EAC5B,MAA2B;QAE3B,MAAM,iBAAiB,GACrB,IAAI,CAAC,QAAQ;aACV,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;aACtB,SAAS,EAAE,OAAO,EAAE,MAAM,CACzB,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,uBAAuB,KAAK,KAAK,CAC7D;aACA,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC;aACtD,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAE3B,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACvE,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC/C,iBAAiB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACjC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,OAAO,aAAa,CAAC;IACvB,CAAC;IAEO,WAAW,CAAC,MAA2B;QAC7C,IAAI,OAAO,eAAe,KAAK,UAAU,EAAE,CAAC;YAC1C,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,CAAC;IAEO,UAAU,CAAC,MAA2B,EAAE,IAAY;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,IAAI,MAAM,GAAQ,MAAM,CAAC;QACzB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACzD,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC1C,OAAO;YACT,CAAC;QACH,CAAC;QAED,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzC,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,KAAU;QAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;aACzB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK;YAC5C,KAAK,EAAE,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;SAC7D,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,KAAc;QACjC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC;IAEO,cAAc,CAAC,KAAc;QACnC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;CACF,CAAA;AA94BY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,mBAAU,GAAE;IAKR,WAAA,IAAA,6BAAmB,EAAC,SAAS,CAAC,CAAA;qCACC,uBAAa;QAClB,4DAA2B;QACzB,uDAAyB;QAC7B,kEAA8B;QAC3B,0EAAkC;QACtB,+CAAqB;QACT,4CAAgB;GAX3D,sBAAsB,CA84BlC","sourcesContent":["import { BadRequestException, Injectable, Logger, NotFoundException } from '@nestjs/common';\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { EntityManager } from 'typeorm';\nimport { WorkflowDefinition } from '../../entities/workflow-definition.entity';\nimport { WorkflowExecution } from '../../entities/workflow-execution.entity';\nimport { WorkflowStepExecution } from '../../entities/workflow-step-execution.entity';\nimport {\n WorkflowDefinitionDsl,\n WorkflowExecutionRequest,\n WorkflowExecutionResponse,\n WorkflowNodeDefinition,\n WorkflowRuntimeContext,\n} from '../../types/workflow-dsl.types';\nimport { WorkflowExecutionWriterService } from './workflow-execution-writer.service';\nimport { WorkflowExpressionService } from './workflow-expression.service';\nimport { WorkflowDefinitionValidatorService } from './workflow-definition-validator.service';\nimport { WorkflowNodeRegistryService } from './workflow-node-registry.service';\nimport { WorkflowSecretService } from '../workflow-secret.service';\nimport { PublisherFactory } from '../queues/publisher-factory.service';\nimport { WorkflowExecutionQueuePayload } from '../../types/workflow-execution-queue.types';\nimport YAML from 'yaml';\n\n@Injectable()\nexport class WorkflowRuntimeService {\n private readonly logger = new Logger(WorkflowRuntimeService.name);\n\n constructor(\n @InjectEntityManager('default')\n private readonly entityManager: EntityManager,\n private readonly registry: WorkflowNodeRegistryService,\n private readonly expression: WorkflowExpressionService,\n private readonly writer: WorkflowExecutionWriterService,\n private readonly validator: WorkflowDefinitionValidatorService,\n private readonly workflowSecretService: WorkflowSecretService,\n private readonly workflowExecutionPublisherFactory: PublisherFactory<WorkflowExecutionQueuePayload>,\n ) {}\n\n async executeDefinitionById(\n id: number,\n request: WorkflowExecutionRequest,\n ): Promise<WorkflowExecutionResponse> {\n const definition = await this.entityManager.findOne(WorkflowDefinition, {\n where: { id } as any,\n });\n\n return this.executeDefinition(definition, request);\n }\n\n async executeDefinitionByIdAsync(\n id: number,\n request: WorkflowExecutionRequest = {},\n ): Promise<WorkflowExecutionResponse> {\n const definition = await this.entityManager.findOne(WorkflowDefinition, {\n where: { id } as any,\n });\n\n return this.enqueueDefinition(definition, request);\n }\n\n async executeDefinitionByKey(\n key: string,\n request: WorkflowExecutionRequest,\n ): Promise<WorkflowExecutionResponse> {\n const definition = await this.entityManager.findOne(WorkflowDefinition, {\n where: { key } as any,\n });\n\n return this.executeDefinition(definition, request);\n }\n\n async executeDefinitionByKeyAsync(\n key: string,\n request: WorkflowExecutionRequest = {},\n ): Promise<WorkflowExecutionResponse> {\n const definition = await this.entityManager.findOne(WorkflowDefinition, {\n where: { key } as any,\n });\n\n return this.enqueueDefinition(definition, request);\n }\n\n private async queueWorkflowExecution(\n payload: WorkflowExecutionQueuePayload,\n ): Promise<string> {\n const messageId = await this.workflowExecutionPublisherFactory.publish(\n {\n payload,\n parentEntityId: payload.executionId,\n parentEntity: 'workflowExecution',\n retryCount: 0,\n retryInterval: 1000,\n },\n 'WorkflowExecutionPublisher',\n );\n\n this.logger.log(\n `Queued workflow execution message ${messageId} for execution id ${payload.executionId}.`,\n );\n\n return messageId;\n }\n\n private async enqueueDefinition(\n definition: WorkflowDefinition | null,\n request: WorkflowExecutionRequest,\n ): Promise<WorkflowExecutionResponse> {\n if (!definition) {\n throw new BadRequestException('Workflow definition not found.');\n }\n\n this.validator.validate(this.assertDefinitionYaml(definition.definitionYaml));\n const execution = await this.writer.createEnqueuedExecution(definition, request);\n await this.queueWorkflowExecution({\n executionId: execution.id,\n });\n\n return this.toResponse(execution);\n }\n\n async executeEnqueuedExecution(\n executionId: number,\n ): Promise<WorkflowExecutionResponse> {\n const execution = await this.entityManager.findOne(WorkflowExecution, {\n where: { id: executionId } as any,\n relations: ['workflowDefinition'],\n });\n\n if (!execution) {\n throw new NotFoundException(`Workflow execution ${executionId} not found.`);\n }\n\n if (execution.status !== 'enqueued') {\n throw new BadRequestException(\n `Workflow execution ${executionId} is ${execution.status}; expected enqueued.`,\n );\n }\n\n const request = this.readEnqueuedExecutionRequest(execution);\n return this.executeDefinition(execution.workflowDefinition, request, execution);\n }\n\n private async executeDefinition(\n definition: WorkflowDefinition | null,\n request: WorkflowExecutionRequest,\n existingExecution?: WorkflowExecution,\n ): Promise<WorkflowExecutionResponse> {\n if (!definition) {\n throw new BadRequestException('Workflow definition not found.');\n }\n\n const definitionDsl = this.assertDefinitionYaml(definition.definitionYaml);\n this.validator.validate(definitionDsl);\n const secrets = await this.workflowSecretService.getWorkflowSecretsContext();\n const input = this.resolveWorkflowInput(definitionDsl, request, secrets);\n const variables = this.resolveWorkflowVariables(definitionDsl, request, input, secrets);\n const effectiveRequest: WorkflowExecutionRequest = {\n ...request,\n input,\n variables,\n };\n const execution = existingExecution\n ? await this.writer.startExecution(existingExecution, effectiveRequest)\n : await this.writer.createExecution(definition, effectiveRequest);\n const nodeCount = this.countNodes([\n ...(definitionDsl.nodes ?? []),\n ...(definitionDsl.errors ?? []),\n ...(definitionDsl.finally ?? []),\n ]);\n const outputs: Record<string, any> = {};\n const runtimeContext: WorkflowRuntimeContext = {\n execution,\n input,\n variables,\n secrets,\n outputs,\n counters: {\n step: 0,\n log: 0,\n },\n };\n\n this.logger.log(\n `Starting workflow execution ${execution.executionIdentifier} for ${definition.key} with ${nodeCount} node(s).`,\n );\n await this.writer.writeLog(execution, undefined, {\n level: 'info',\n eventType: 'execution.started',\n message: `Workflow execution started for ${definition.key}.`,\n metadata: {\n executionIdentifier: execution.executionIdentifier,\n workflowKey: definition.key,\n triggerType: execution.triggerType,\n nodeCount,\n inputKeys: Object.keys(runtimeContext.input ?? {}),\n variableKeys: Object.keys(runtimeContext.variables ?? {}),\n },\n }, this.nextLogSequence(runtimeContext));\n\n let executionError: unknown;\n\n try {\n await this.runNodes(definitionDsl.nodes, runtimeContext);\n } catch (error) {\n executionError = error;\n await this.runGlobalErrorHandlers(definitionDsl, runtimeContext, error);\n }\n\n try {\n await this.runFinallyHandlers(definitionDsl, runtimeContext);\n } catch (finallyError) {\n await this.writer.writeLog(execution, undefined, {\n level: 'error',\n eventType: 'finally.failed',\n message: `Finally handler failed: ${this.errorMessage(finallyError)}.`,\n context: this.summarizeError(finallyError),\n metadata: {\n originalError: executionError\n ? this.summarizeError(executionError)\n : undefined,\n },\n }, this.nextLogSequence(runtimeContext));\n if (!executionError) {\n executionError = finallyError;\n }\n }\n\n if (!executionError) {\n const completed = await this.writer.completeExecution(execution, outputs);\n\n this.logger.log(\n `Completed workflow execution ${completed.executionIdentifier} for ${definition.key} in ${completed.durationMs ?? 0} ms.`,\n );\n await this.writer.writeLog(completed, undefined, {\n level: 'info',\n eventType: 'execution.completed',\n message: `Workflow execution completed for ${definition.key}.`,\n metadata: {\n executionIdentifier: completed.executionIdentifier,\n durationMs: completed.durationMs,\n outputNodeIds: Object.keys(outputs),\n },\n }, this.nextLogSequence(runtimeContext));\n\n return this.toResponse(completed);\n }\n\n const failed = await this.writer.failExecution(execution, executionError);\n\n this.logger.error(\n `Failed workflow execution ${failed.executionIdentifier} for ${definition.key}: ${failed.errorSummary}`,\n executionError instanceof Error ? executionError.stack : undefined,\n );\n await this.writer.writeLog(failed, undefined, {\n level: 'error',\n eventType: 'execution.failed',\n message: failed.errorSummary,\n context: this.summarizeError(executionError),\n metadata: {\n executionIdentifier: failed.executionIdentifier,\n durationMs: failed.durationMs,\n },\n }, this.nextLogSequence(runtimeContext));\n\n return this.toResponse(failed);\n }\n\n async getExecutionStatus(executionId: number): Promise<WorkflowExecutionResponse> {\n const execution = await this.findExecutionOrThrow(executionId);\n return this.toResponse(execution);\n }\n\n async getLastStepOutput(executionId: number): Promise<any> {\n await this.findExecutionOrThrow(executionId);\n const step = await this.entityManager.findOne(WorkflowStepExecution, {\n where: { workflowExecution: { id: executionId } } as any,\n order: {\n sequenceNumber: 'DESC',\n id: 'DESC',\n } as any,\n });\n\n if (!step) {\n throw new NotFoundException(`No step executions found for workflow execution ${executionId}.`);\n }\n\n return this.toStepOutputResponse(step);\n }\n\n async getStepOutput(\n executionId: number,\n stepNameOrId: string,\n options: { latest?: boolean; limit?: number; offset?: number } = {},\n ): Promise<any> {\n await this.findExecutionOrThrow(executionId);\n\n const qb = this.entityManager\n .createQueryBuilder(WorkflowStepExecution, 'step')\n .innerJoin('step.workflowExecution', 'execution')\n .where('execution.id = :executionId', { executionId })\n .andWhere(\n '(step.nodeId = :stepNameOrId OR step.nodeName = :stepNameOrId OR step.stepExecutionKey = :stepNameOrId)',\n { stepNameOrId },\n )\n .orderBy('step.sequenceNumber', options.latest === false ? 'ASC' : 'DESC')\n .addOrderBy('step.id', options.latest === false ? 'ASC' : 'DESC');\n\n if (options.latest !== false && options.limit === undefined && options.offset === undefined) {\n const step = await qb.getOne();\n if (!step) {\n throw new NotFoundException(\n `No step output found for '${stepNameOrId}' in workflow execution ${executionId}.`,\n );\n }\n return this.toStepOutputResponse(step);\n }\n\n const limit = Math.max(1, Math.min(Number(options.limit ?? 50), 200));\n const offset = Math.max(0, Number(options.offset ?? 0));\n const [steps, totalRecords] = await qb.limit(limit).offset(offset).getManyAndCount();\n\n return {\n meta: this.buildPagedMeta(offset, limit, totalRecords),\n records: steps.map((step) => this.toStepOutputResponse(step)),\n };\n }\n\n private resolveWorkflowInput(\n definitionDsl: WorkflowDefinitionDsl,\n request: WorkflowExecutionRequest,\n secrets: Record<string, any>,\n ): Record<string, any> {\n const requestedInput = request.input ?? {};\n const defaultInput = Object.entries(definitionDsl.inputs ?? {}).reduce(\n (acc, [key, inputDefinition]) => {\n if (\n inputDefinition &&\n typeof inputDefinition === 'object' &&\n !Array.isArray(inputDefinition) &&\n Object.prototype.hasOwnProperty.call(inputDefinition, 'default')\n ) {\n acc[key] = inputDefinition.default;\n return acc;\n }\n\n if (\n inputDefinition === null ||\n inputDefinition === undefined ||\n (typeof inputDefinition === 'object' && !Array.isArray(inputDefinition))\n ) {\n return acc;\n }\n\n acc[key] = inputDefinition;\n return acc;\n },\n {} as Record<string, any>,\n );\n const rawInput = {\n ...defaultInput,\n ...requestedInput,\n };\n\n return this.expression.interpolate(rawInput, {\n execution: undefined as any,\n input: rawInput,\n variables: definitionDsl.variables ?? {},\n secrets,\n outputs: {},\n });\n }\n\n private resolveWorkflowVariables(\n definitionDsl: WorkflowDefinitionDsl,\n request: WorkflowExecutionRequest,\n input: Record<string, any>,\n secrets: Record<string, any>,\n ): Record<string, any> {\n const rawVariables = {\n ...(definitionDsl.variables ?? {}),\n ...(request.variables ?? {}),\n };\n\n return this.expression.interpolate(rawVariables, {\n execution: undefined as any,\n input,\n variables: rawVariables,\n secrets,\n outputs: {},\n });\n }\n\n private async runNodes(\n nodes: WorkflowNodeDefinition[],\n context: WorkflowRuntimeContext,\n ): Promise<Record<string, any>> {\n const nodeOutputs: Record<string, any> = {};\n\n for (const node of nodes ?? []) {\n nodeOutputs[node.id] = await this.runNode(node, context);\n }\n\n return nodeOutputs;\n }\n\n private async runNode(\n node: WorkflowNodeDefinition,\n context: WorkflowRuntimeContext,\n ): Promise<Record<string, any>> {\n const inputPayload = {\n configuration: node.configuration,\n input: context.input,\n variables: context.variables,\n item: context.item,\n index: context.index,\n };\n\n const step = await this.writer.createStep(\n context.execution,\n node,\n this.nextStepSequence(context),\n inputPayload,\n context.parentNodeId,\n context.parentStepExecutionKey,\n );\n\n if (node.disabled) {\n context.outputs[node.id] = { skipped: true };\n await this.writer.completeStep(step, 'skipped', context.outputs[node.id]);\n await this.writer.writeLog(context.execution, step, {\n level: 'debug',\n eventType: 'node.skipped',\n message: `Skipped disabled node ${node.id}.`,\n metadata: this.nodeLogMetadata(node, context, step),\n }, this.nextLogSequence(context));\n return context.outputs[node.id];\n }\n\n try {\n await this.writer.writeLog(context.execution, step, {\n level: 'debug',\n eventType: 'node.started',\n message: `Starting node ${node.id} (${node.type}).`,\n metadata: this.nodeLogMetadata(node, context, step),\n }, this.nextLogSequence(context));\n\n this.logger.debug(\n `Starting workflow node ${node.id} (${node.type}) for execution ${context.execution.executionIdentifier}.`,\n );\n const startedAtMs = Date.now();\n const handler = this.registry.get(node.type);\n const result = await handler.execute({\n ...context,\n node,\n stepExecution: step,\n expression: this.expression,\n runNodes: async (childNodes, options = {}) =>\n this.runNodes(childNodes, {\n ...context,\n ...options,\n execution: context.execution,\n outputs: options.outputs ?? context.outputs,\n parentNodeId: node.id,\n parentStepExecutionKey: step.stepExecutionKey,\n }),\n emitLog: async (entry) => {\n await this.writer.writeLog(\n context.execution,\n step,\n entry,\n this.nextLogSequence(context),\n );\n },\n emitArtifact: async (entry) => {\n await this.writer.writeArtifact(context.execution, step, entry);\n },\n });\n\n const output = result.output ?? {};\n context.outputs[node.id] = this.getRuntimeContextOutput(node, output);\n\n for (const artifact of result.artifacts ?? []) {\n await this.writer.writeArtifact(context.execution, step, artifact);\n }\n\n await this.writer.completeStep(\n step,\n result.status ?? 'success',\n output,\n {\n item: context.item,\n index: context.index,\n },\n );\n\n await this.writer.writeLog(context.execution, step, {\n level: 'debug',\n eventType: 'node.completed',\n message: `Completed node ${node.id} (${node.type}).`,\n metadata: {\n ...this.nodeLogMetadata(node, context, step),\n status: result.status ?? 'success',\n durationMs: Date.now() - startedAtMs,\n outputSummary: this.summarizeValue(output),\n artifactCount: result.artifacts?.length ?? 0,\n },\n }, this.nextLogSequence(context));\n\n return output;\n } catch (error) {\n await this.writer.failStep(step, error);\n\n if (node.onError === 'continue') {\n context.outputs[node.id] = {\n error: error instanceof Error ? error.message : String(error),\n };\n await this.writer.writeLog(context.execution, step, {\n level: 'warn',\n eventType: 'node.failed.continued',\n message: `Node ${node.id} failed but workflow continued: ${this.errorMessage(error)}.`,\n context: this.summarizeError(error),\n metadata: this.nodeLogMetadata(node, context, step),\n }, this.nextLogSequence(context));\n return context.outputs[node.id];\n }\n\n await this.writer.writeLog(context.execution, step, {\n level: 'error',\n eventType: 'node.failed',\n message: `Node ${node.id} failed: ${this.errorMessage(error)}.`,\n context: this.summarizeError(error),\n metadata: this.nodeLogMetadata(node, context, step),\n }, this.nextLogSequence(context));\n await this.runLocalErrorHandlers(node, context, error);\n throw error;\n }\n }\n\n private async runGlobalErrorHandlers(\n definitionDsl: WorkflowDefinitionDsl,\n context: WorkflowRuntimeContext,\n error: unknown,\n ): Promise<void> {\n const errorNodes = definitionDsl.errors ?? [];\n if (!errorNodes.length) {\n return;\n }\n\n await this.runErrorHandlers(\n errorNodes,\n context,\n error,\n 'global',\n undefined,\n undefined,\n );\n }\n\n private async runFinallyHandlers(\n definitionDsl: WorkflowDefinitionDsl,\n context: WorkflowRuntimeContext,\n ): Promise<void> {\n const finallyNodes = definitionDsl.finally ?? [];\n if (!finallyNodes.length) {\n return;\n }\n\n await this.writer.writeLog(context.execution, undefined, {\n level: 'info',\n eventType: 'finally.started',\n message: 'Running workflow finally handlers.',\n metadata: {\n handlerNodeCount: finallyNodes.length,\n },\n }, this.nextLogSequence(context));\n\n await this.runNodes(finallyNodes, context);\n\n await this.writer.writeLog(context.execution, undefined, {\n level: 'info',\n eventType: 'finally.completed',\n message: 'Workflow finally handlers completed.',\n metadata: {\n handlerNodeCount: finallyNodes.length,\n },\n }, this.nextLogSequence(context));\n }\n\n private async runLocalErrorHandlers(\n node: WorkflowNodeDefinition,\n context: WorkflowRuntimeContext,\n error: unknown,\n ): Promise<void> {\n const errorNodes = node.errors ?? [];\n if (!errorNodes.length) {\n return;\n }\n\n await this.runErrorHandlers(\n errorNodes,\n context,\n error,\n 'local',\n node.id,\n context.stepExecution?.stepExecutionKey,\n );\n }\n\n private async runErrorHandlers(\n errorNodes: WorkflowNodeDefinition[],\n context: WorkflowRuntimeContext,\n error: unknown,\n scope: 'global' | 'local',\n sourceNodeId?: string,\n sourceStepExecutionKey?: string,\n ): Promise<void> {\n const errorContext = this.buildErrorContext(error, sourceNodeId, sourceStepExecutionKey);\n\n await this.writer.writeLog(context.execution, undefined, {\n level: 'warn',\n eventType: `error-handler.${scope}.started`,\n message:\n scope === 'global'\n ? 'Running workflow-level error handlers.'\n : `Running local error handlers for node ${sourceNodeId}.`,\n context: errorContext,\n metadata: {\n sourceNodeId,\n sourceStepExecutionKey,\n handlerNodeCount: errorNodes.length,\n },\n }, this.nextLogSequence(context));\n\n try {\n await this.runNodes(errorNodes, {\n ...context,\n error: errorContext,\n parentNodeId: sourceNodeId ?? context.parentNodeId,\n parentStepExecutionKey:\n sourceStepExecutionKey ?? context.parentStepExecutionKey,\n });\n } catch (handlerError) {\n await this.writer.writeLog(context.execution, undefined, {\n level: 'error',\n eventType: `error-handler.${scope}.failed`,\n message: `Error handler failed: ${this.errorMessage(handlerError)}.`,\n context: this.summarizeError(handlerError),\n metadata: {\n originalError: errorContext,\n sourceNodeId,\n sourceStepExecutionKey,\n },\n }, this.nextLogSequence(context));\n return;\n }\n\n await this.writer.writeLog(context.execution, undefined, {\n level: 'info',\n eventType: `error-handler.${scope}.completed`,\n message:\n scope === 'global'\n ? 'Workflow-level error handlers completed.'\n : `Local error handlers completed for node ${sourceNodeId}.`,\n context: errorContext,\n metadata: {\n sourceNodeId,\n sourceStepExecutionKey,\n },\n }, this.nextLogSequence(context));\n }\n\n private buildErrorContext(\n error: unknown,\n nodeId?: string,\n stepExecutionKey?: string,\n ): Record<string, any> {\n const summary = this.summarizeError(error);\n return {\n ...summary,\n message: this.errorMessage(error),\n nodeId,\n stepExecutionKey,\n };\n }\n\n private assertDefinitionYaml(value: any): WorkflowDefinitionDsl {\n if (!value || typeof value !== 'string') {\n throw new BadRequestException(\n 'Workflow definition YAML must be stored as a string.',\n );\n }\n\n let parsed: unknown;\n try {\n parsed = YAML.parse(value);\n } catch (error: any) {\n throw new BadRequestException(\n error?.message ?? 'Workflow definition YAML could not be parsed.',\n );\n }\n\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new BadRequestException(\n 'Workflow definition YAML must resolve to an object with a nodes array.',\n );\n }\n\n if (!Array.isArray((parsed as WorkflowDefinitionDsl).nodes)) {\n throw new BadRequestException(\n 'Workflow definition YAML must include a nodes array.',\n );\n }\n\n return parsed as WorkflowDefinitionDsl;\n }\n\n private readEnqueuedExecutionRequest(execution: WorkflowExecution): WorkflowExecutionRequest {\n const payload = execution.inputPayload;\n if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {\n return {\n triggerType: execution.triggerType,\n requestedByUserId: execution.requestedByUserId as any,\n };\n }\n\n return {\n ...(payload as WorkflowExecutionRequest),\n triggerType: (payload as WorkflowExecutionRequest).triggerType ?? execution.triggerType,\n requestedByUserId:\n (payload as WorkflowExecutionRequest).requestedByUserId ??\n (execution.requestedByUserId as any),\n };\n }\n\n private async findExecutionOrThrow(executionId: number): Promise<WorkflowExecution> {\n const execution = await this.entityManager.findOne(WorkflowExecution, {\n where: { id: executionId } as any,\n });\n\n if (!execution) {\n throw new NotFoundException(`Workflow execution ${executionId} not found.`);\n }\n\n return execution;\n }\n\n private toStepOutputResponse(step: WorkflowStepExecution) {\n return {\n id: step.id,\n stepExecutionKey: step.stepExecutionKey,\n nodeId: step.nodeId,\n nodeName: step.nodeName,\n nodeType: step.nodeType,\n nodeKind: step.nodeKind,\n sequenceNumber: step.sequenceNumber,\n attemptNumber: step.attemptNumber,\n status: step.status,\n startedAt: step.startedAt,\n finishedAt: step.finishedAt,\n durationMs: step.durationMs as any,\n runtimeContext: step.runtimeContext,\n outputPayload: step.outputPayload,\n errorSummary: step.errorSummary,\n };\n }\n\n private buildPagedMeta(offset: number, limit: number, totalRecords: number) {\n const currentPage = limit ? Math.floor(offset / limit) + 1 : 1;\n const totalPages = limit ? Math.max(1, Math.ceil(totalRecords / limit)) : 1;\n return {\n totalRecords,\n currentPage,\n nextPage: currentPage < totalPages ? currentPage + 1 : null,\n prevPage: currentPage > 1 ? currentPage - 1 : null,\n totalPages,\n perPage: limit,\n };\n }\n\n private toResponse(execution: WorkflowExecution): WorkflowExecutionResponse {\n return {\n id: execution.id,\n executionIdentifier: execution.executionIdentifier,\n workflowKey: execution.workflowKey,\n status: execution.status as any,\n startedAt: execution.startedAt,\n finishedAt: execution.finishedAt,\n durationMs: execution.durationMs as any,\n outputPayload: execution.outputPayload,\n errorSummary: execution.errorSummary,\n };\n }\n\n private nextStepSequence(context: WorkflowRuntimeContext): number {\n context.counters = context.counters ?? { step: 0, log: 0 };\n context.counters.step += 1;\n return context.counters.step;\n }\n\n private nextLogSequence(context: WorkflowRuntimeContext): number {\n context.counters = context.counters ?? { step: 0, log: 0 };\n context.counters.log += 1;\n return context.counters.log;\n }\n\n private countNodes(nodes: WorkflowNodeDefinition[] = []): number {\n return nodes.reduce((count, node) => {\n const nestedNodes = [\n ...(node.tasks ?? []),\n ...(node.then ?? []),\n ...(node.else ?? []),\n ...(node.defaults ?? []),\n ...(node.errors ?? []),\n ...Object.values(node.cases ?? {}).flat(),\n ];\n\n return count + 1 + this.countNodes(nestedNodes);\n }, 0);\n }\n\n private nodeLogMetadata(\n node: WorkflowNodeDefinition,\n context: WorkflowRuntimeContext,\n step?: WorkflowStepExecution,\n ) {\n return {\n executionIdentifier: context.execution.executionIdentifier,\n stepExecutionKey: step?.stepExecutionKey,\n nodeId: node.id,\n nodeName: node.name,\n nodeType: node.type,\n nodeKind: node.kind,\n parentNodeId: context.parentNodeId,\n parentStepExecutionKey: context.parentStepExecutionKey,\n index: context.index,\n hasItem: context.item !== undefined,\n configurationKeys:\n node.configuration && typeof node.configuration === 'object'\n ? Object.keys(node.configuration)\n : [],\n availableInputKeys: Object.keys(context.input ?? {}),\n availableVariableKeys: Object.keys(context.variables ?? {}),\n availableOutputNodeIds: Object.keys(context.outputs ?? {}),\n };\n }\n\n private getRuntimeContextOutput(\n node: WorkflowNodeDefinition,\n output: Record<string, any>,\n ): Record<string, any> {\n const hiddenOutputPaths =\n this.registry\n .getMetadata(node.type)\n .authoring?.outputs?.filter(\n (definition) => definition.includeInRuntimeContext === false,\n )\n .map((definition) => definition.path ?? definition.key)\n .filter(Boolean) ?? [];\n\n if (!hiddenOutputPaths.length || !output || typeof output !== 'object') {\n return output;\n }\n\n const runtimeOutput = this.cloneOutput(output);\n hiddenOutputPaths.forEach((path) => {\n this.deletePath(runtimeOutput, path);\n });\n\n return runtimeOutput;\n }\n\n private cloneOutput(output: Record<string, any>): Record<string, any> {\n if (typeof structuredClone === 'function') {\n return structuredClone(output);\n }\n\n return JSON.parse(JSON.stringify(output));\n }\n\n private deletePath(target: Record<string, any>, path: string) {\n const parts = path.split('.').filter(Boolean);\n if (!parts.length) {\n return;\n }\n\n let cursor: any = target;\n for (let index = 0; index < parts.length - 1; index += 1) {\n cursor = cursor?.[parts[index]];\n if (!cursor || typeof cursor !== 'object') {\n return;\n }\n }\n\n if (cursor && typeof cursor === 'object') {\n delete cursor[parts[parts.length - 1]];\n }\n }\n\n private summarizeValue(value: any): any {\n if (Array.isArray(value)) {\n return {\n type: 'array',\n length: value.length,\n };\n }\n\n if (value && typeof value === 'object') {\n return {\n type: 'object',\n keys: Object.keys(value),\n };\n }\n\n return {\n type: value === null ? 'null' : typeof value,\n empty: value === undefined || value === null || value === '',\n };\n }\n\n private errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n }\n\n private summarizeError(error: unknown): any {\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n };\n }\n\n return { error };\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solid-core.module.d.ts","sourceRoot":"","sources":["../src/solid-core.module.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC;AAChB,OAAO,EAAU,kBAAkB,EAAU,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"solid-core.module.d.ts","sourceRoot":"","sources":["../src/solid-core.module.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC;AAChB,OAAO,EAAU,kBAAkB,EAAU,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAgdhF,qBA8jBa,eAAgB,YAAW,UAAU;IAChD,SAAS,CAAC,QAAQ,EAAE,kBAAkB;CAQvC"}
|
|
@@ -450,10 +450,12 @@ const workflow_invocation_service_1 = require("./services/workflow/workflow-invo
|
|
|
450
450
|
const workflow_node_registry_service_1 = require("./services/workflow/workflow-node-registry.service");
|
|
451
451
|
const workflow_runtime_service_1 = require("./services/workflow/workflow-runtime.service");
|
|
452
452
|
const workflow_scheduled_trigger_job_1 = require("./services/workflow/workflow-scheduled-trigger.job");
|
|
453
|
+
const execution_fail_node_1 = require("./services/workflow/nodes/execution-fail.node");
|
|
453
454
|
const for_each_node_1 = require("./services/workflow/nodes/for-each.node");
|
|
454
455
|
const http_request_node_1 = require("./services/workflow/nodes/http-request.node");
|
|
455
456
|
const if_node_1 = require("./services/workflow/nodes/if.node");
|
|
456
457
|
const log_write_node_1 = require("./services/workflow/nodes/log-write.node");
|
|
458
|
+
const loop_until_node_1 = require("./services/workflow/nodes/loop-until.node");
|
|
457
459
|
const parallel_node_1 = require("./services/workflow/nodes/parallel.node");
|
|
458
460
|
const runtime_python_node_1 = require("./services/workflow/nodes/runtime-python.node");
|
|
459
461
|
const sequential_node_1 = require("./services/workflow/nodes/sequential.node");
|
|
@@ -935,10 +937,12 @@ exports.SolidCoreModule = SolidCoreModule = __decorate([
|
|
|
935
937
|
workflow_definition_validator_service_1.WorkflowDefinitionValidatorService,
|
|
936
938
|
workflow_node_registry_service_1.WorkflowNodeRegistryService,
|
|
937
939
|
workflow_scheduled_trigger_job_1.WorkflowScheduledTriggerJobService,
|
|
940
|
+
execution_fail_node_1.ExecutionFailNode,
|
|
938
941
|
log_write_node_1.LogWriteNode,
|
|
939
942
|
http_request_node_1.HttpRequestNode,
|
|
940
943
|
if_node_1.IfNode,
|
|
941
944
|
for_each_node_1.ForEachNode,
|
|
945
|
+
loop_until_node_1.LoopUntilNode,
|
|
942
946
|
parallel_node_1.ParallelNode,
|
|
943
947
|
runtime_python_node_1.RuntimePythonNode,
|
|
944
948
|
sequential_node_1.SequentialNode,
|