dynamic-api-workflow 1.0.0
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/README.md +287 -0
- package/dist/engine/cli.d.ts +3 -0
- package/dist/engine/cli.d.ts.map +1 -0
- package/dist/engine/cli.js +4 -0
- package/dist/engine/cli.js.map +1 -0
- package/dist/engine/config/llm-costs.d.ts +16 -0
- package/dist/engine/config/llm-costs.d.ts.map +1 -0
- package/dist/engine/config/llm-costs.js +38 -0
- package/dist/engine/config/llm-costs.js.map +1 -0
- package/dist/engine/core/node-executor.d.ts +8 -0
- package/dist/engine/core/node-executor.d.ts.map +1 -0
- package/dist/engine/core/node-executor.js +144 -0
- package/dist/engine/core/node-executor.js.map +1 -0
- package/dist/engine/core/validator.d.ts +6 -0
- package/dist/engine/core/validator.d.ts.map +1 -0
- package/dist/engine/core/validator.js +473 -0
- package/dist/engine/core/validator.js.map +1 -0
- package/dist/engine/core/workflow-executor.d.ts +6 -0
- package/dist/engine/core/workflow-executor.d.ts.map +1 -0
- package/dist/engine/core/workflow-executor.js +186 -0
- package/dist/engine/core/workflow-executor.js.map +1 -0
- package/dist/engine/core/workflow-loader.d.ts +26 -0
- package/dist/engine/core/workflow-loader.d.ts.map +1 -0
- package/dist/engine/core/workflow-loader.js +257 -0
- package/dist/engine/core/workflow-loader.js.map +1 -0
- package/dist/engine/index.d.ts +5 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +70 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/nodes/code-node.d.ts +6 -0
- package/dist/engine/nodes/code-node.d.ts.map +1 -0
- package/dist/engine/nodes/code-node.js +70 -0
- package/dist/engine/nodes/code-node.js.map +1 -0
- package/dist/engine/nodes/llm-node.d.ts +6 -0
- package/dist/engine/nodes/llm-node.d.ts.map +1 -0
- package/dist/engine/nodes/llm-node.js +164 -0
- package/dist/engine/nodes/llm-node.js.map +1 -0
- package/dist/engine/nodes/passthrough-node.d.ts +6 -0
- package/dist/engine/nodes/passthrough-node.d.ts.map +1 -0
- package/dist/engine/nodes/passthrough-node.js +13 -0
- package/dist/engine/nodes/passthrough-node.js.map +1 -0
- package/dist/engine/nodes/reduce-node.d.ts +6 -0
- package/dist/engine/nodes/reduce-node.d.ts.map +1 -0
- package/dist/engine/nodes/reduce-node.js +44 -0
- package/dist/engine/nodes/reduce-node.js.map +1 -0
- package/dist/engine/nodes/split-node.d.ts +10 -0
- package/dist/engine/nodes/split-node.d.ts.map +1 -0
- package/dist/engine/nodes/split-node.js +51 -0
- package/dist/engine/nodes/split-node.js.map +1 -0
- package/dist/engine/providers/gemini.d.ts +27 -0
- package/dist/engine/providers/gemini.d.ts.map +1 -0
- package/dist/engine/providers/gemini.js +163 -0
- package/dist/engine/providers/gemini.js.map +1 -0
- package/dist/engine/providers/grok.d.ts +28 -0
- package/dist/engine/providers/grok.d.ts.map +1 -0
- package/dist/engine/providers/grok.js +164 -0
- package/dist/engine/providers/grok.js.map +1 -0
- package/dist/engine/providers/registry.d.ts +33 -0
- package/dist/engine/providers/registry.d.ts.map +1 -0
- package/dist/engine/providers/registry.js +51 -0
- package/dist/engine/providers/registry.js.map +1 -0
- package/dist/engine/router.d.ts +8 -0
- package/dist/engine/router.d.ts.map +1 -0
- package/dist/engine/router.js +79 -0
- package/dist/engine/router.js.map +1 -0
- package/dist/engine/scripts/cleanup-port.d.ts +2 -0
- package/dist/engine/scripts/cleanup-port.d.ts.map +1 -0
- package/dist/engine/scripts/cleanup-port.js +54 -0
- package/dist/engine/scripts/cleanup-port.js.map +1 -0
- package/dist/engine/scripts/create-endpoint.d.ts +2 -0
- package/dist/engine/scripts/create-endpoint.d.ts.map +1 -0
- package/dist/engine/scripts/create-endpoint.js +83 -0
- package/dist/engine/scripts/create-endpoint.js.map +1 -0
- package/dist/engine/scripts/scan-deps.d.ts +2 -0
- package/dist/engine/scripts/scan-deps.d.ts.map +1 -0
- package/dist/engine/scripts/scan-deps.js +112 -0
- package/dist/engine/scripts/scan-deps.js.map +1 -0
- package/dist/engine/scripts/validate-workflows.d.ts +3 -0
- package/dist/engine/scripts/validate-workflows.d.ts.map +1 -0
- package/dist/engine/scripts/validate-workflows.js +75 -0
- package/dist/engine/scripts/validate-workflows.js.map +1 -0
- package/dist/engine/server.d.ts +10 -0
- package/dist/engine/server.d.ts.map +1 -0
- package/dist/engine/server.js +92 -0
- package/dist/engine/server.js.map +1 -0
- package/dist/engine/types/index.d.ts +304 -0
- package/dist/engine/types/index.d.ts.map +1 -0
- package/dist/engine/types/index.js +24 -0
- package/dist/engine/types/index.js.map +1 -0
- package/dist/engine/utils/file-cache.d.ts +31 -0
- package/dist/engine/utils/file-cache.d.ts.map +1 -0
- package/dist/engine/utils/file-cache.js +68 -0
- package/dist/engine/utils/file-cache.js.map +1 -0
- package/dist/engine/utils/file-resolver.d.ts +21 -0
- package/dist/engine/utils/file-resolver.d.ts.map +1 -0
- package/dist/engine/utils/file-resolver.js +33 -0
- package/dist/engine/utils/file-resolver.js.map +1 -0
- package/dist/engine/utils/jsonpath.d.ts +13 -0
- package/dist/engine/utils/jsonpath.d.ts.map +1 -0
- package/dist/engine/utils/jsonpath.js +38 -0
- package/dist/engine/utils/jsonpath.js.map +1 -0
- package/dist/engine/utils/logger.d.ts +11 -0
- package/dist/engine/utils/logger.d.ts.map +1 -0
- package/dist/engine/utils/logger.js +24 -0
- package/dist/engine/utils/logger.js.map +1 -0
- package/dist/engine/utils/metrics.d.ts +6 -0
- package/dist/engine/utils/metrics.d.ts.map +1 -0
- package/dist/engine/utils/metrics.js +82 -0
- package/dist/engine/utils/metrics.js.map +1 -0
- package/dist/engine/utils/schema-validator.d.ts +10 -0
- package/dist/engine/utils/schema-validator.d.ts.map +1 -0
- package/dist/engine/utils/schema-validator.js +61 -0
- package/dist/engine/utils/schema-validator.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto';
|
|
2
|
+
import { executeNode } from './node-executor.js';
|
|
3
|
+
import { validateSchema } from '../utils/schema-validator.js';
|
|
4
|
+
import { createLogger } from '../utils/logger.js';
|
|
5
|
+
import { displayMetrics } from '../utils/metrics.js';
|
|
6
|
+
import { ErrorCode } from '../types/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Execute a workflow with the given input
|
|
9
|
+
*/
|
|
10
|
+
export async function executeWorkflow(workflow, input, params = {}) {
|
|
11
|
+
const requestId = randomUUID();
|
|
12
|
+
const requestLogger = createLogger({ requestId });
|
|
13
|
+
requestLogger.info('Starting workflow execution', { params });
|
|
14
|
+
try {
|
|
15
|
+
// Validate input against schema
|
|
16
|
+
if (workflow.input?.schema) {
|
|
17
|
+
const schema = workflow.input.schema.inline || workflow.input.schema.file;
|
|
18
|
+
if (schema) {
|
|
19
|
+
const validation = await validateSchema(input, schema);
|
|
20
|
+
if (!validation.valid) {
|
|
21
|
+
const errorMessages = validation.errors?.map((e) => e.message).join('; ') || 'Unknown error';
|
|
22
|
+
return {
|
|
23
|
+
success: false,
|
|
24
|
+
error: {
|
|
25
|
+
stage: 'validation',
|
|
26
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
27
|
+
message: `Input validation failed: ${errorMessages}`,
|
|
28
|
+
details: validation.errors,
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Initialize execution context
|
|
35
|
+
const context = {
|
|
36
|
+
requestId,
|
|
37
|
+
input,
|
|
38
|
+
params,
|
|
39
|
+
nodeOutputs: new Map(),
|
|
40
|
+
splitOutputs: new Map(),
|
|
41
|
+
timing: new Map(),
|
|
42
|
+
metrics: [],
|
|
43
|
+
};
|
|
44
|
+
// Execute stages sequentially
|
|
45
|
+
for (const stage of workflow.stages) {
|
|
46
|
+
try {
|
|
47
|
+
await executeStage(stage, workflow, context, requestLogger);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
51
|
+
const errorCode = extractErrorCode(message);
|
|
52
|
+
requestLogger.error('Stage execution failed', { stage: stage.name, error: message });
|
|
53
|
+
return {
|
|
54
|
+
success: false,
|
|
55
|
+
error: {
|
|
56
|
+
stage: stage.name,
|
|
57
|
+
code: errorCode,
|
|
58
|
+
message,
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Get exit node output (use stage-scoped key)
|
|
64
|
+
const exitStage = workflow.stages[workflow.stages.length - 1];
|
|
65
|
+
const exitNodeId = Object.keys(exitStage.nodes)[0];
|
|
66
|
+
if (!exitNodeId) {
|
|
67
|
+
throw new Error('Exit stage must have a node defined');
|
|
68
|
+
}
|
|
69
|
+
const exitKey = `${exitStage.name}.${exitNodeId}`;
|
|
70
|
+
const exitOutput = context.nodeOutputs.get(exitKey);
|
|
71
|
+
if (!exitOutput) {
|
|
72
|
+
throw new Error(`Exit node '${exitKey}' did not produce output`);
|
|
73
|
+
}
|
|
74
|
+
const totalDuration = Array.from(context.timing.values()).reduce((a, b) => a + b, 0);
|
|
75
|
+
requestLogger.info('Workflow execution completed', {
|
|
76
|
+
totalDuration: `${totalDuration}ms`,
|
|
77
|
+
nodesExecuted: context.nodeOutputs.size,
|
|
78
|
+
});
|
|
79
|
+
// Display metrics
|
|
80
|
+
displayMetrics(context.metrics);
|
|
81
|
+
// Return success response
|
|
82
|
+
return {
|
|
83
|
+
success: true,
|
|
84
|
+
data: exitOutput.value,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
89
|
+
const errorCode = extractErrorCode(message);
|
|
90
|
+
requestLogger.error('Workflow execution failed', { error: message });
|
|
91
|
+
return {
|
|
92
|
+
success: false,
|
|
93
|
+
error: {
|
|
94
|
+
stage: 'execution',
|
|
95
|
+
code: errorCode,
|
|
96
|
+
message,
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Execute a single stage
|
|
103
|
+
*/
|
|
104
|
+
async function executeStage(stage, workflow, context, logger) {
|
|
105
|
+
logger.debug('Executing stage', { stage: stage.name });
|
|
106
|
+
// Get node entries from stage (nodes is { nodeId: input })
|
|
107
|
+
const nodeEntries = Object.entries(stage.nodes);
|
|
108
|
+
if (nodeEntries.length === 0) {
|
|
109
|
+
throw new Error(`Stage '${stage.name}' has no nodes to execute`);
|
|
110
|
+
}
|
|
111
|
+
// Get node definitions with their inputs from the stage
|
|
112
|
+
// stage.nodes is Record<nodeId, InlineNodeDefinition>
|
|
113
|
+
const nodesWithInputs = nodeEntries.map(([nodeId, inlineNode]) => {
|
|
114
|
+
const node = workflow.nodes.find((n) => n.id === nodeId);
|
|
115
|
+
if (!node) {
|
|
116
|
+
throw new Error(`${ErrorCode.NODE_NOT_FOUND}: Node '${nodeId}' not found in workflow`);
|
|
117
|
+
}
|
|
118
|
+
// Extract input from the inline node definition
|
|
119
|
+
const input = 'input' in inlineNode ? inlineNode.input : inlineNode.inputs?.[0] || '$input';
|
|
120
|
+
return { node, input };
|
|
121
|
+
});
|
|
122
|
+
// Execute nodes
|
|
123
|
+
if (stage.parallel) {
|
|
124
|
+
// Parallel execution
|
|
125
|
+
await executeParallel(nodesWithInputs, workflow, context, stage, logger);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
// Sequential execution
|
|
129
|
+
for (const { node, input } of nodesWithInputs) {
|
|
130
|
+
await executeNode(node, input, stage, context, workflow);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
logger.debug('Stage completed', { stage: stage.name });
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Execute nodes in parallel
|
|
137
|
+
*/
|
|
138
|
+
async function executeParallel(nodesWithInputs, workflow, context, stage, logger) {
|
|
139
|
+
const errorStrategy = stage.errorStrategy || 'complete';
|
|
140
|
+
logger.debug('Executing nodes in parallel', {
|
|
141
|
+
nodeCount: nodesWithInputs.length,
|
|
142
|
+
errorStrategy,
|
|
143
|
+
});
|
|
144
|
+
if (errorStrategy === 'fast') {
|
|
145
|
+
// Fail fast - throw on first error
|
|
146
|
+
await Promise.all(nodesWithInputs.map(({ node, input }) => executeNode(node, input, stage, context, workflow)));
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
// Complete - collect all errors
|
|
150
|
+
const results = await Promise.allSettled(nodesWithInputs.map(({ node, input }) => executeNode(node, input, stage, context, workflow)));
|
|
151
|
+
const failures = results
|
|
152
|
+
.map((result, index) => ({
|
|
153
|
+
result,
|
|
154
|
+
node: nodesWithInputs[index].node,
|
|
155
|
+
}))
|
|
156
|
+
.filter(({ result }) => result.status === 'rejected');
|
|
157
|
+
if (failures.length > 0) {
|
|
158
|
+
const errors = failures.map(({ result, node }) => ({
|
|
159
|
+
stage: stage.name,
|
|
160
|
+
node: node.id,
|
|
161
|
+
code: extractErrorCode(result.status === 'rejected' ? result.reason.message : ''),
|
|
162
|
+
message: result.status === 'rejected'
|
|
163
|
+
? result.reason instanceof Error
|
|
164
|
+
? result.reason.message
|
|
165
|
+
: String(result.reason)
|
|
166
|
+
: 'Unknown error',
|
|
167
|
+
}));
|
|
168
|
+
logger.error('Multiple nodes failed in parallel stage', {
|
|
169
|
+
failureCount: failures.length,
|
|
170
|
+
errors,
|
|
171
|
+
});
|
|
172
|
+
// Throw with details about all failures
|
|
173
|
+
const error = new Error(`${ErrorCode.STAGE_FAILED}: Multiple nodes failed in stage '${stage.name}'`);
|
|
174
|
+
error.errors = errors;
|
|
175
|
+
throw error;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Extract error code from error message
|
|
181
|
+
*/
|
|
182
|
+
function extractErrorCode(message) {
|
|
183
|
+
const match = message.match(/^([A-Z_]+):/);
|
|
184
|
+
return match ? match[1] : ErrorCode.CODE_EXCEPTION;
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=workflow-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-executor.js","sourceRoot":"","sources":["../../../engine/core/workflow-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { WorkflowDefinition } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Load all workflow YAML files from the endpoints directory using folder-based routing
|
|
4
|
+
* Supports Next.js-style dynamic routes with [param] folder names
|
|
5
|
+
*/
|
|
6
|
+
export declare function loadAllWorkflows(): Promise<Map<string, WorkflowDefinition>>;
|
|
7
|
+
/**
|
|
8
|
+
* Get cached workflow by method and route, with param extraction
|
|
9
|
+
*/
|
|
10
|
+
export declare function getCachedWorkflow(method: string, route: string): WorkflowDefinition | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Extract route params from a request path
|
|
13
|
+
*/
|
|
14
|
+
export declare function extractRouteParams(method: string, requestPath: string): Record<string, string> | null;
|
|
15
|
+
/**
|
|
16
|
+
* Get all cached routes with their methods
|
|
17
|
+
*/
|
|
18
|
+
export declare function getAllRoutes(): Array<{
|
|
19
|
+
method: string;
|
|
20
|
+
route: string;
|
|
21
|
+
}>;
|
|
22
|
+
/**
|
|
23
|
+
* Clear workflow cache
|
|
24
|
+
*/
|
|
25
|
+
export declare function clearWorkflowCache(): void;
|
|
26
|
+
//# sourceMappingURL=workflow-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-loader.d.ts","sourceRoot":"","sources":["../../../engine/core/workflow-loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACR,kBAAkB,EAIrB,MAAM,mBAAmB,CAAC;AAwB3B;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAiBjF;AAsND;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAgB/F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAcrG;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAEvE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import YAML from 'yaml';
|
|
4
|
+
import logger from '../utils/logger.js';
|
|
5
|
+
import { ErrorCode } from '../types/index.js';
|
|
6
|
+
const workflowsDir = process.env.WORKFLOWS_DIR || './src';
|
|
7
|
+
const workflowCache = new Map();
|
|
8
|
+
/**
|
|
9
|
+
* Load all workflow YAML files from the endpoints directory using folder-based routing
|
|
10
|
+
* Supports Next.js-style dynamic routes with [param] folder names
|
|
11
|
+
*/
|
|
12
|
+
export async function loadAllWorkflows() {
|
|
13
|
+
const workflows = new Map();
|
|
14
|
+
const endpointsPath = path.join(process.cwd(), workflowsDir, 'endpoints');
|
|
15
|
+
logger.info(`Loading workflows from: ${endpointsPath}`);
|
|
16
|
+
try {
|
|
17
|
+
await scanEndpointsFolder(endpointsPath, '', workflows);
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
if (error.code === 'ENOENT') {
|
|
21
|
+
logger.warn(`Endpoints directory not found: ${endpointsPath}`);
|
|
22
|
+
return workflows;
|
|
23
|
+
}
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
return workflows;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Recursively scan endpoints folder for method YAML files
|
|
30
|
+
*/
|
|
31
|
+
async function scanEndpointsFolder(basePath, relativePath, workflows) {
|
|
32
|
+
const currentPath = path.join(basePath, relativePath);
|
|
33
|
+
let entries;
|
|
34
|
+
try {
|
|
35
|
+
entries = await fs.readdir(currentPath, { withFileTypes: true });
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
if (error.code === 'ENOENT') {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
throw error;
|
|
42
|
+
}
|
|
43
|
+
// Process YAML files (HTTP method files like POST.yaml, GET.yaml)
|
|
44
|
+
const httpMethods = ['POST', 'GET', 'PUT', 'DELETE', 'PATCH'];
|
|
45
|
+
for (const entry of entries) {
|
|
46
|
+
if (entry.isFile() && (entry.name.endsWith('.yaml') || entry.name.endsWith('.yml'))) {
|
|
47
|
+
const method = path.basename(entry.name, path.extname(entry.name)).toUpperCase();
|
|
48
|
+
if (httpMethods.includes(method)) {
|
|
49
|
+
try {
|
|
50
|
+
const filePath = path.join(currentPath, entry.name);
|
|
51
|
+
const { route, routeParams, routePattern } = parseRoute(relativePath);
|
|
52
|
+
const workflow = await loadMethodFile(filePath, method, route, routeParams, relativePath);
|
|
53
|
+
const cacheKey = `${method}:${route}`;
|
|
54
|
+
workflows.set(cacheKey, workflow);
|
|
55
|
+
workflowCache.set(cacheKey, {
|
|
56
|
+
workflow,
|
|
57
|
+
route,
|
|
58
|
+
method,
|
|
59
|
+
routeParams,
|
|
60
|
+
routePattern
|
|
61
|
+
});
|
|
62
|
+
logger.info(`Loaded workflow: ${relativePath}/${entry.name} -> ${method} ${route}`);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
66
|
+
logger.error(`Failed to load ${relativePath}/${entry.name}`, { error: message });
|
|
67
|
+
throw new Error(`${ErrorCode.WORKFLOW_LOAD_FAILED}: Failed to load ${relativePath}/${entry.name}: ${message}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Recurse into subdirectories
|
|
73
|
+
for (const entry of entries) {
|
|
74
|
+
if (entry.isDirectory()) {
|
|
75
|
+
await scanEndpointsFolder(basePath, path.join(relativePath, entry.name), workflows);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Parse a relative folder path into route info
|
|
81
|
+
* Converts [param] folders to :param route segments
|
|
82
|
+
*/
|
|
83
|
+
function parseRoute(relativePath) {
|
|
84
|
+
const routeParams = [];
|
|
85
|
+
if (!relativePath || relativePath === '.') {
|
|
86
|
+
return { route: '/', routeParams: [], routePattern: /^\/$/ };
|
|
87
|
+
}
|
|
88
|
+
const segments = relativePath.split(path.sep);
|
|
89
|
+
const routeSegments = [];
|
|
90
|
+
const patternParts = [];
|
|
91
|
+
for (const segment of segments) {
|
|
92
|
+
// Check for dynamic segment [param]
|
|
93
|
+
const match = segment.match(/^\[(.+)\]$/);
|
|
94
|
+
if (match) {
|
|
95
|
+
const paramName = match[1];
|
|
96
|
+
routeParams.push(paramName);
|
|
97
|
+
routeSegments.push(`:${paramName}`);
|
|
98
|
+
patternParts.push('([^/]+)');
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
routeSegments.push(segment);
|
|
102
|
+
patternParts.push(segment);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const route = '/' + routeSegments.join('/');
|
|
106
|
+
const routePattern = new RegExp(`^/${patternParts.join('/')}$`);
|
|
107
|
+
return { route, routeParams, routePattern };
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Load a single method file (e.g., POST.yaml)
|
|
111
|
+
*/
|
|
112
|
+
async function loadMethodFile(filePath, method, route, routeParams, endpointPath) {
|
|
113
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
114
|
+
const methodDef = YAML.parse(content);
|
|
115
|
+
if (!methodDef) {
|
|
116
|
+
throw new Error('Method file is empty or invalid YAML');
|
|
117
|
+
}
|
|
118
|
+
if (!methodDef.version) {
|
|
119
|
+
throw new Error('Missing required field: version');
|
|
120
|
+
}
|
|
121
|
+
if (!methodDef.stages || methodDef.stages.length === 0) {
|
|
122
|
+
throw new Error('Missing required field: stages');
|
|
123
|
+
}
|
|
124
|
+
// Build nodes array from inline definitions in stages
|
|
125
|
+
const nodes = extractNodesFromStages(methodDef.stages);
|
|
126
|
+
return {
|
|
127
|
+
version: methodDef.version,
|
|
128
|
+
endpoint: {
|
|
129
|
+
method: method,
|
|
130
|
+
route,
|
|
131
|
+
routeParams,
|
|
132
|
+
endpointPath,
|
|
133
|
+
},
|
|
134
|
+
nodes,
|
|
135
|
+
stages: methodDef.stages,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Extract node definitions from inline stage nodes
|
|
140
|
+
*/
|
|
141
|
+
function extractNodesFromStages(stages) {
|
|
142
|
+
const nodes = [];
|
|
143
|
+
const seenNodes = new Set();
|
|
144
|
+
for (const stage of stages) {
|
|
145
|
+
if (!stage.nodes)
|
|
146
|
+
continue;
|
|
147
|
+
for (const [nodeId, inlineNode] of Object.entries(stage.nodes)) {
|
|
148
|
+
// Skip if we've already processed this node
|
|
149
|
+
if (seenNodes.has(nodeId))
|
|
150
|
+
continue;
|
|
151
|
+
seenNodes.add(nodeId);
|
|
152
|
+
// Convert inline node to full NodeDefinition
|
|
153
|
+
const node = inlineNodeToNodeDefinition(nodeId, inlineNode);
|
|
154
|
+
nodes.push(node);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return nodes;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Convert an inline node definition to a full NodeDefinition
|
|
161
|
+
*/
|
|
162
|
+
function inlineNodeToNodeDefinition(id, inline) {
|
|
163
|
+
switch (inline.type) {
|
|
164
|
+
case 'llm':
|
|
165
|
+
return {
|
|
166
|
+
id,
|
|
167
|
+
type: 'llm',
|
|
168
|
+
input: inline.input,
|
|
169
|
+
provider: inline.provider,
|
|
170
|
+
config: {
|
|
171
|
+
model: inline.model || 'gemini-2.0-flash',
|
|
172
|
+
temperature: inline.temperature,
|
|
173
|
+
maxTokens: inline.maxTokens,
|
|
174
|
+
},
|
|
175
|
+
systemMessages: inline.systemMessages,
|
|
176
|
+
};
|
|
177
|
+
case 'code':
|
|
178
|
+
return {
|
|
179
|
+
id,
|
|
180
|
+
type: 'code',
|
|
181
|
+
input: inline.input,
|
|
182
|
+
file: inline.file,
|
|
183
|
+
};
|
|
184
|
+
case 'reduce':
|
|
185
|
+
return {
|
|
186
|
+
id,
|
|
187
|
+
type: 'reduce',
|
|
188
|
+
inputs: inline.inputs,
|
|
189
|
+
mapping: inline.mapping,
|
|
190
|
+
};
|
|
191
|
+
case 'split':
|
|
192
|
+
return {
|
|
193
|
+
id,
|
|
194
|
+
type: 'split',
|
|
195
|
+
input: inline.input,
|
|
196
|
+
mapping: inline.mapping,
|
|
197
|
+
};
|
|
198
|
+
case 'passthrough':
|
|
199
|
+
return {
|
|
200
|
+
id,
|
|
201
|
+
type: 'passthrough',
|
|
202
|
+
input: inline.input,
|
|
203
|
+
};
|
|
204
|
+
default:
|
|
205
|
+
throw new Error(`Unknown node type: ${inline.type}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Get cached workflow by method and route, with param extraction
|
|
210
|
+
*/
|
|
211
|
+
export function getCachedWorkflow(method, route) {
|
|
212
|
+
// Try exact match first
|
|
213
|
+
const exactKey = `${method}:${route}`;
|
|
214
|
+
const exact = workflowCache.get(exactKey);
|
|
215
|
+
if (exact) {
|
|
216
|
+
return exact.workflow;
|
|
217
|
+
}
|
|
218
|
+
// Try pattern matching for dynamic routes
|
|
219
|
+
for (const [, entry] of workflowCache) {
|
|
220
|
+
if (entry.method === method && entry.routePattern.test(route)) {
|
|
221
|
+
return entry.workflow;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return undefined;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Extract route params from a request path
|
|
228
|
+
*/
|
|
229
|
+
export function extractRouteParams(method, requestPath) {
|
|
230
|
+
for (const [, entry] of workflowCache) {
|
|
231
|
+
if (entry.method !== method)
|
|
232
|
+
continue;
|
|
233
|
+
const match = requestPath.match(entry.routePattern);
|
|
234
|
+
if (match) {
|
|
235
|
+
const params = {};
|
|
236
|
+
entry.routeParams.forEach((param, index) => {
|
|
237
|
+
params[param] = match[index + 1];
|
|
238
|
+
});
|
|
239
|
+
return params;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Get all cached routes with their methods
|
|
246
|
+
*/
|
|
247
|
+
export function getAllRoutes() {
|
|
248
|
+
return Array.from(workflowCache.values()).map(({ method, route }) => ({ method, route }));
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Clear workflow cache
|
|
252
|
+
*/
|
|
253
|
+
export function clearWorkflowCache() {
|
|
254
|
+
workflowCache.clear();
|
|
255
|
+
logger.debug('Workflow cache cleared');
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=workflow-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-loader.js","sourceRoot":"","sources":["../../../engine/core/workflow-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../engine/index.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,wBAAsB,IAAI,kBA+DzB"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import dotenv from 'dotenv';
|
|
2
|
+
import { createServer, startServer } from './server.js';
|
|
3
|
+
import { registerRoutes } from './router.js';
|
|
4
|
+
import { loadAllWorkflows } from './core/workflow-loader.js';
|
|
5
|
+
import { validateWorkflow } from './core/validator.js';
|
|
6
|
+
import { providerRegistry } from './providers/registry.js';
|
|
7
|
+
import { GeminiProvider } from './providers/gemini.js';
|
|
8
|
+
import { GrokProvider } from './providers/grok.js';
|
|
9
|
+
import logger from './utils/logger.js';
|
|
10
|
+
// Load environment variables
|
|
11
|
+
dotenv.config();
|
|
12
|
+
/**
|
|
13
|
+
* Initialize and start the application
|
|
14
|
+
*/
|
|
15
|
+
export async function main() {
|
|
16
|
+
try {
|
|
17
|
+
logger.info('🚀 Starting Dynamic API Workflow Engine');
|
|
18
|
+
// Register LLM providers
|
|
19
|
+
logger.info('Registering LLM providers...');
|
|
20
|
+
providerRegistry.register(new GeminiProvider());
|
|
21
|
+
providerRegistry.register(new GrokProvider());
|
|
22
|
+
// Load workflows
|
|
23
|
+
logger.info('Loading workflows...');
|
|
24
|
+
const workflows = await loadAllWorkflows();
|
|
25
|
+
if (workflows.size === 0) {
|
|
26
|
+
logger.warn('No workflows found. Server will start but have no routes.');
|
|
27
|
+
}
|
|
28
|
+
// Validate all workflows
|
|
29
|
+
logger.info('Validating workflows...');
|
|
30
|
+
let hasErrors = false;
|
|
31
|
+
for (const [route, workflow] of workflows.entries()) {
|
|
32
|
+
const validation = await validateWorkflow(workflow);
|
|
33
|
+
if (!validation.valid) {
|
|
34
|
+
logger.error(`Workflow validation failed for route ${route}`, {
|
|
35
|
+
errors: validation.errors,
|
|
36
|
+
});
|
|
37
|
+
hasErrors = true;
|
|
38
|
+
}
|
|
39
|
+
else if (validation.warnings && validation.warnings.length > 0) {
|
|
40
|
+
logger.warn(`Workflow has warnings for route ${route}`, {
|
|
41
|
+
warnings: validation.warnings,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
logger.info(`✓ Workflow validated: ${route}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (hasErrors) {
|
|
49
|
+
logger.error('Some workflows failed validation. Aborting startup.');
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
// Create and configure server
|
|
53
|
+
const app = createServer();
|
|
54
|
+
// Register workflow routes
|
|
55
|
+
registerRoutes(app, workflows);
|
|
56
|
+
// Start server
|
|
57
|
+
const port = parseInt(process.env.PORT || '3000', 10);
|
|
58
|
+
await startServer(app, port);
|
|
59
|
+
logger.info(`✅ Server ready at http://localhost:${port}`);
|
|
60
|
+
logger.info(`✅ Health check available at http://localhost:${port}/health`);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
logger.error('Failed to start server', {
|
|
64
|
+
error: error instanceof Error ? error.message : String(error),
|
|
65
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
66
|
+
});
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../engine/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { NodeOutput, CodeNodeDefinition, ExecutionContext, WorkflowDefinition } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Execute a code node
|
|
4
|
+
*/
|
|
5
|
+
export declare function executeCodeNode(node: CodeNodeDefinition, input: unknown, context: ExecutionContext, workflow: WorkflowDefinition): Promise<NodeOutput>;
|
|
6
|
+
//# sourceMappingURL=code-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-node.d.ts","sourceRoot":"","sources":["../../../engine/nodes/code-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAO9G;;GAEG;AACH,wBAAsB,eAAe,CACjC,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,kBAAkB,GAC7B,OAAO,CAAC,UAAU,CAAC,CAgFrB"}
|