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.
Files changed (114) hide show
  1. package/README.md +287 -0
  2. package/dist/engine/cli.d.ts +3 -0
  3. package/dist/engine/cli.d.ts.map +1 -0
  4. package/dist/engine/cli.js +4 -0
  5. package/dist/engine/cli.js.map +1 -0
  6. package/dist/engine/config/llm-costs.d.ts +16 -0
  7. package/dist/engine/config/llm-costs.d.ts.map +1 -0
  8. package/dist/engine/config/llm-costs.js +38 -0
  9. package/dist/engine/config/llm-costs.js.map +1 -0
  10. package/dist/engine/core/node-executor.d.ts +8 -0
  11. package/dist/engine/core/node-executor.d.ts.map +1 -0
  12. package/dist/engine/core/node-executor.js +144 -0
  13. package/dist/engine/core/node-executor.js.map +1 -0
  14. package/dist/engine/core/validator.d.ts +6 -0
  15. package/dist/engine/core/validator.d.ts.map +1 -0
  16. package/dist/engine/core/validator.js +473 -0
  17. package/dist/engine/core/validator.js.map +1 -0
  18. package/dist/engine/core/workflow-executor.d.ts +6 -0
  19. package/dist/engine/core/workflow-executor.d.ts.map +1 -0
  20. package/dist/engine/core/workflow-executor.js +186 -0
  21. package/dist/engine/core/workflow-executor.js.map +1 -0
  22. package/dist/engine/core/workflow-loader.d.ts +26 -0
  23. package/dist/engine/core/workflow-loader.d.ts.map +1 -0
  24. package/dist/engine/core/workflow-loader.js +257 -0
  25. package/dist/engine/core/workflow-loader.js.map +1 -0
  26. package/dist/engine/index.d.ts +5 -0
  27. package/dist/engine/index.d.ts.map +1 -0
  28. package/dist/engine/index.js +70 -0
  29. package/dist/engine/index.js.map +1 -0
  30. package/dist/engine/nodes/code-node.d.ts +6 -0
  31. package/dist/engine/nodes/code-node.d.ts.map +1 -0
  32. package/dist/engine/nodes/code-node.js +70 -0
  33. package/dist/engine/nodes/code-node.js.map +1 -0
  34. package/dist/engine/nodes/llm-node.d.ts +6 -0
  35. package/dist/engine/nodes/llm-node.d.ts.map +1 -0
  36. package/dist/engine/nodes/llm-node.js +164 -0
  37. package/dist/engine/nodes/llm-node.js.map +1 -0
  38. package/dist/engine/nodes/passthrough-node.d.ts +6 -0
  39. package/dist/engine/nodes/passthrough-node.d.ts.map +1 -0
  40. package/dist/engine/nodes/passthrough-node.js +13 -0
  41. package/dist/engine/nodes/passthrough-node.js.map +1 -0
  42. package/dist/engine/nodes/reduce-node.d.ts +6 -0
  43. package/dist/engine/nodes/reduce-node.d.ts.map +1 -0
  44. package/dist/engine/nodes/reduce-node.js +44 -0
  45. package/dist/engine/nodes/reduce-node.js.map +1 -0
  46. package/dist/engine/nodes/split-node.d.ts +10 -0
  47. package/dist/engine/nodes/split-node.d.ts.map +1 -0
  48. package/dist/engine/nodes/split-node.js +51 -0
  49. package/dist/engine/nodes/split-node.js.map +1 -0
  50. package/dist/engine/providers/gemini.d.ts +27 -0
  51. package/dist/engine/providers/gemini.d.ts.map +1 -0
  52. package/dist/engine/providers/gemini.js +163 -0
  53. package/dist/engine/providers/gemini.js.map +1 -0
  54. package/dist/engine/providers/grok.d.ts +28 -0
  55. package/dist/engine/providers/grok.d.ts.map +1 -0
  56. package/dist/engine/providers/grok.js +164 -0
  57. package/dist/engine/providers/grok.js.map +1 -0
  58. package/dist/engine/providers/registry.d.ts +33 -0
  59. package/dist/engine/providers/registry.d.ts.map +1 -0
  60. package/dist/engine/providers/registry.js +51 -0
  61. package/dist/engine/providers/registry.js.map +1 -0
  62. package/dist/engine/router.d.ts +8 -0
  63. package/dist/engine/router.d.ts.map +1 -0
  64. package/dist/engine/router.js +79 -0
  65. package/dist/engine/router.js.map +1 -0
  66. package/dist/engine/scripts/cleanup-port.d.ts +2 -0
  67. package/dist/engine/scripts/cleanup-port.d.ts.map +1 -0
  68. package/dist/engine/scripts/cleanup-port.js +54 -0
  69. package/dist/engine/scripts/cleanup-port.js.map +1 -0
  70. package/dist/engine/scripts/create-endpoint.d.ts +2 -0
  71. package/dist/engine/scripts/create-endpoint.d.ts.map +1 -0
  72. package/dist/engine/scripts/create-endpoint.js +83 -0
  73. package/dist/engine/scripts/create-endpoint.js.map +1 -0
  74. package/dist/engine/scripts/scan-deps.d.ts +2 -0
  75. package/dist/engine/scripts/scan-deps.d.ts.map +1 -0
  76. package/dist/engine/scripts/scan-deps.js +112 -0
  77. package/dist/engine/scripts/scan-deps.js.map +1 -0
  78. package/dist/engine/scripts/validate-workflows.d.ts +3 -0
  79. package/dist/engine/scripts/validate-workflows.d.ts.map +1 -0
  80. package/dist/engine/scripts/validate-workflows.js +75 -0
  81. package/dist/engine/scripts/validate-workflows.js.map +1 -0
  82. package/dist/engine/server.d.ts +10 -0
  83. package/dist/engine/server.d.ts.map +1 -0
  84. package/dist/engine/server.js +92 -0
  85. package/dist/engine/server.js.map +1 -0
  86. package/dist/engine/types/index.d.ts +304 -0
  87. package/dist/engine/types/index.d.ts.map +1 -0
  88. package/dist/engine/types/index.js +24 -0
  89. package/dist/engine/types/index.js.map +1 -0
  90. package/dist/engine/utils/file-cache.d.ts +31 -0
  91. package/dist/engine/utils/file-cache.d.ts.map +1 -0
  92. package/dist/engine/utils/file-cache.js +68 -0
  93. package/dist/engine/utils/file-cache.js.map +1 -0
  94. package/dist/engine/utils/file-resolver.d.ts +21 -0
  95. package/dist/engine/utils/file-resolver.d.ts.map +1 -0
  96. package/dist/engine/utils/file-resolver.js +33 -0
  97. package/dist/engine/utils/file-resolver.js.map +1 -0
  98. package/dist/engine/utils/jsonpath.d.ts +13 -0
  99. package/dist/engine/utils/jsonpath.d.ts.map +1 -0
  100. package/dist/engine/utils/jsonpath.js +38 -0
  101. package/dist/engine/utils/jsonpath.js.map +1 -0
  102. package/dist/engine/utils/logger.d.ts +11 -0
  103. package/dist/engine/utils/logger.d.ts.map +1 -0
  104. package/dist/engine/utils/logger.js +24 -0
  105. package/dist/engine/utils/logger.js.map +1 -0
  106. package/dist/engine/utils/metrics.d.ts +6 -0
  107. package/dist/engine/utils/metrics.d.ts.map +1 -0
  108. package/dist/engine/utils/metrics.js +82 -0
  109. package/dist/engine/utils/metrics.js.map +1 -0
  110. package/dist/engine/utils/schema-validator.d.ts +10 -0
  111. package/dist/engine/utils/schema-validator.d.ts.map +1 -0
  112. package/dist/engine/utils/schema-validator.js +61 -0
  113. package/dist/engine/utils/schema-validator.js.map +1 -0
  114. package/package.json +53 -0
@@ -0,0 +1,31 @@
1
+ /**
2
+ * File cache with modification time tracking
3
+ */
4
+ declare class FileCache {
5
+ private cache;
6
+ private baseDir;
7
+ constructor(baseDir: string);
8
+ /**
9
+ * Get file content, using cache if file hasn't been modified
10
+ */
11
+ get(filePath: string): Promise<string>;
12
+ /**
13
+ * Clear cache for a specific file
14
+ */
15
+ invalidate(filePath: string): void;
16
+ /**
17
+ * Clear entire cache
18
+ */
19
+ clear(): void;
20
+ /**
21
+ * Get cache statistics
22
+ */
23
+ getStats(): {
24
+ size: number;
25
+ entries: string[];
26
+ };
27
+ }
28
+ export declare const promptCache: FileCache;
29
+ export declare const schemaCache: FileCache;
30
+ export default FileCache;
31
+ //# sourceMappingURL=file-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-cache.d.ts","sourceRoot":"","sources":["../../../engine/utils/file-cache.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,cAAM,SAAS;IACX,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,MAAM;IAI3B;;OAEG;IACG,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA8B5C;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKlC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,QAAQ;;;;CAMX;AAGD,eAAO,MAAM,WAAW,WAAmE,CAAC;AAC5F,eAAO,MAAM,WAAW,WAAmE,CAAC;AAE5F,eAAe,SAAS,CAAC"}
@@ -0,0 +1,68 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import logger from './logger.js';
4
+ /**
5
+ * File cache with modification time tracking
6
+ */
7
+ class FileCache {
8
+ cache = new Map();
9
+ baseDir;
10
+ constructor(baseDir) {
11
+ this.baseDir = baseDir;
12
+ }
13
+ /**
14
+ * Get file content, using cache if file hasn't been modified
15
+ */
16
+ async get(filePath) {
17
+ const fullPath = path.isAbsolute(filePath) ? filePath : path.join(this.baseDir, filePath);
18
+ try {
19
+ const stats = await fs.stat(fullPath);
20
+ const cached = this.cache.get(fullPath);
21
+ // Return cached content if file hasn't been modified
22
+ if (cached && cached.mtime === stats.mtimeMs) {
23
+ logger.debug('File cache hit', { file: fullPath });
24
+ return cached.content;
25
+ }
26
+ // Load file content
27
+ const content = await fs.readFile(fullPath, 'utf-8');
28
+ // Update cache
29
+ this.cache.set(fullPath, {
30
+ content,
31
+ mtime: stats.mtimeMs,
32
+ });
33
+ logger.debug('File cache miss, loaded from disk', { file: fullPath });
34
+ return content;
35
+ }
36
+ catch (error) {
37
+ const message = error instanceof Error ? error.message : String(error);
38
+ throw new Error(`Failed to read file '${fullPath}': ${message}`);
39
+ }
40
+ }
41
+ /**
42
+ * Clear cache for a specific file
43
+ */
44
+ invalidate(filePath) {
45
+ const fullPath = path.isAbsolute(filePath) ? filePath : path.join(this.baseDir, filePath);
46
+ this.cache.delete(fullPath);
47
+ }
48
+ /**
49
+ * Clear entire cache
50
+ */
51
+ clear() {
52
+ this.cache.clear();
53
+ }
54
+ /**
55
+ * Get cache statistics
56
+ */
57
+ getStats() {
58
+ return {
59
+ size: this.cache.size,
60
+ entries: Array.from(this.cache.keys()),
61
+ };
62
+ }
63
+ }
64
+ // Create singleton instances for different file types
65
+ export const promptCache = new FileCache(process.env.PROMPTS_DIR || './src/source/prompts');
66
+ export const schemaCache = new FileCache(process.env.SCHEMAS_DIR || './src/source/schemas');
67
+ export default FileCache;
68
+ //# sourceMappingURL=file-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-cache.js","sourceRoot":"","sources":["../../../engine/utils/file-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,aAAa,CAAC;AAOjC;;GAEG;AACH,MAAM,SAAS;IACH,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IACtC,OAAO,CAAS;IAExB,YAAY,OAAe;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,QAAgB;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAE1F,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAExC,qDAAqD;YACrD,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC3C,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACnD,OAAO,MAAM,CAAC,OAAO,CAAC;YAC1B,CAAC;YAED,oBAAoB;YACpB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAErD,eAAe;YACf,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE;gBACrB,OAAO;gBACP,KAAK,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YACtE,OAAO,OAAO,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,MAAM,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;IACL,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,QAAgB;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC1F,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,QAAQ;QACJ,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YACrB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SACzC,CAAC;IACN,CAAC;CACJ;AAED,sDAAsD;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,sBAAsB,CAAC,CAAC;AAC5F,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,sBAAsB,CAAC,CAAC;AAE5F,eAAe,SAAS,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Resolve file path for code or prompt files
3
+ *
4
+ * Files are always local to the endpoint folder:
5
+ * - code files: src/endpoints/<path>/codes/<filename>
6
+ * - prompt files: src/endpoints/<path>/prompts/<filename>
7
+ *
8
+ * For shared utilities, code files can import from @workflow/plugins/...
9
+ * which maps to src/plugins/...
10
+ *
11
+ * @param filename - The filename from YAML
12
+ * @param endpointPath - The endpoint folder path relative to src/endpoints
13
+ * @param type - 'codes' or 'prompts'
14
+ */
15
+ export declare function resolveFilePath(filename: string, endpointPath: string, type: 'codes' | 'prompts'): string;
16
+ /**
17
+ * Extract endpoint path from route
18
+ * Converts route like "/users/:id" to folder path "users/[id]"
19
+ */
20
+ export declare function routeToEndpointPath(route: string): string;
21
+ //# sourceMappingURL=file-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-resolver.d.ts","sourceRoot":"","sources":["../../../engine/utils/file-resolver.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC3B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,OAAO,GAAG,SAAS,GAC1B,MAAM,CAGR;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOzD"}
@@ -0,0 +1,33 @@
1
+ import path from 'path';
2
+ const workflowsDir = process.env.WORKFLOWS_DIR || './src';
3
+ /**
4
+ * Resolve file path for code or prompt files
5
+ *
6
+ * Files are always local to the endpoint folder:
7
+ * - code files: src/endpoints/<path>/codes/<filename>
8
+ * - prompt files: src/endpoints/<path>/prompts/<filename>
9
+ *
10
+ * For shared utilities, code files can import from @workflow/plugins/...
11
+ * which maps to src/plugins/...
12
+ *
13
+ * @param filename - The filename from YAML
14
+ * @param endpointPath - The endpoint folder path relative to src/endpoints
15
+ * @param type - 'codes' or 'prompts'
16
+ */
17
+ export function resolveFilePath(filename, endpointPath, type) {
18
+ // All files are local to the endpoint
19
+ return path.join(process.cwd(), workflowsDir, 'endpoints', endpointPath, type, filename);
20
+ }
21
+ /**
22
+ * Extract endpoint path from route
23
+ * Converts route like "/users/:id" to folder path "users/[id]"
24
+ */
25
+ export function routeToEndpointPath(route) {
26
+ // Remove leading slash and convert :param to [param]
27
+ return route
28
+ .replace(/^\//, '')
29
+ .split('/')
30
+ .map(segment => segment.startsWith(':') ? `[${segment.slice(1)}]` : segment)
31
+ .join('/');
32
+ }
33
+ //# sourceMappingURL=file-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-resolver.js","sourceRoot":"","sources":["../../../engine/utils/file-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC;AAE1D;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAC3B,QAAgB,EAChB,YAAoB,EACpB,IAAyB;IAEzB,sCAAsC;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC7C,qDAAqD;IACrD,OAAO,KAAK;SACP,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;SAClB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;SAC3E,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Evaluate a JSONPath expression against data
3
+ */
4
+ export declare function evaluate(path: string, data: unknown): unknown;
5
+ /**
6
+ * Evaluate multiple JSONPath expressions
7
+ */
8
+ export declare function evaluateAll(mapping: Record<string, string>, data: unknown): Record<string, unknown>;
9
+ /**
10
+ * Check if a JSONPath expression is valid syntax
11
+ */
12
+ export declare function isValidPath(path: string): boolean;
13
+ //# sourceMappingURL=jsonpath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonpath.d.ts","sourceRoot":"","sources":["../../../engine/utils/jsonpath.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAQ7D;AAED;;GAEG;AACH,wBAAgB,WAAW,CACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,IAAI,EAAE,OAAO,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQzB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOjD"}
@@ -0,0 +1,38 @@
1
+ import { JSONPath } from 'jsonpath-plus';
2
+ import { ErrorCode } from '../types/index.js';
3
+ /**
4
+ * Evaluate a JSONPath expression against data
5
+ */
6
+ export function evaluate(path, data) {
7
+ try {
8
+ const result = JSONPath({ path, json: data, wrap: false });
9
+ return result;
10
+ }
11
+ catch (error) {
12
+ const message = error instanceof Error ? error.message : String(error);
13
+ throw new Error(`${ErrorCode.JSONPATH_ERROR}: Failed to evaluate path '${path}': ${message}`);
14
+ }
15
+ }
16
+ /**
17
+ * Evaluate multiple JSONPath expressions
18
+ */
19
+ export function evaluateAll(mapping, data) {
20
+ const result = {};
21
+ for (const [key, path] of Object.entries(mapping)) {
22
+ result[key] = evaluate(path, data);
23
+ }
24
+ return result;
25
+ }
26
+ /**
27
+ * Check if a JSONPath expression is valid syntax
28
+ */
29
+ export function isValidPath(path) {
30
+ try {
31
+ JSONPath({ path, json: {}, wrap: false });
32
+ return true;
33
+ }
34
+ catch {
35
+ return false;
36
+ }
37
+ }
38
+ //# sourceMappingURL=jsonpath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonpath.js","sourceRoot":"","sources":["../../../engine/utils/jsonpath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,IAAa;IAChD,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAsB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7E,OAAO,MAAM,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,CAAC,cAAc,8BAA8B,IAAI,MAAM,OAAO,EAAE,CAAC,CAAC;IAClG,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACvB,OAA+B,EAC/B,IAAa;IAEb,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAChD,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACpC,IAAI,CAAC;QACD,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC"}
@@ -0,0 +1,11 @@
1
+ import winston from 'winston';
2
+ /**
3
+ * Create winston logger with appropriate format
4
+ */
5
+ declare const logger: winston.Logger;
6
+ /**
7
+ * Create a child logger with additional context
8
+ */
9
+ export declare function createLogger(context: Record<string, unknown>): winston.Logger;
10
+ export default logger;
11
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../engine/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAK9B;;GAEG;AACH,QAAA,MAAM,MAAM,gBAaV,CAAC;AAEH;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kBAE5D;AAED,eAAe,MAAM,CAAC"}
@@ -0,0 +1,24 @@
1
+ import winston from 'winston';
2
+ const logLevel = process.env.LOG_LEVEL || 'info';
3
+ const isProduction = process.env.NODE_ENV === 'production';
4
+ /**
5
+ * Create winston logger with appropriate format
6
+ */
7
+ const logger = winston.createLogger({
8
+ level: logLevel,
9
+ format: isProduction
10
+ ? winston.format.json()
11
+ : winston.format.combine(winston.format.colorize(), winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), winston.format.printf(({ timestamp, level, message, ...meta }) => {
12
+ const metaStr = Object.keys(meta).length ? JSON.stringify(meta, null, 2) : '';
13
+ return `${timestamp} [${level}]: ${message} ${metaStr}`;
14
+ })),
15
+ transports: [new winston.transports.Console()],
16
+ });
17
+ /**
18
+ * Create a child logger with additional context
19
+ */
20
+ export function createLogger(context) {
21
+ return logger.child(context);
22
+ }
23
+ export default logger;
24
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../engine/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;AACjD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAChC,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,YAAY;QAChB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;QACvB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CACpB,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,EACzB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,EAC3D,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;YAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,OAAO,GAAG,SAAS,KAAK,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;QAC5D,CAAC,CAAC,CACL;IACL,UAAU,EAAE,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;CACjD,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAgC;IACzD,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,eAAe,MAAM,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { NodeMetrics } from '../types/index.js';
2
+ /**
3
+ * Display metrics in a tabular format
4
+ */
5
+ export declare function displayMetrics(metrics: NodeMetrics[]): void;
6
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../engine/utils/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKrD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAwF3D"}
@@ -0,0 +1,82 @@
1
+ import logger from './logger.js';
2
+ import { getModelCost } from '../config/llm-costs.js';
3
+ /**
4
+ * Display metrics in a tabular format
5
+ */
6
+ export function displayMetrics(metrics) {
7
+ if (metrics.length === 0) {
8
+ return;
9
+ }
10
+ console.log('\n📊 Pipeline Metrics:');
11
+ console.log('─'.repeat(80));
12
+ // Header
13
+ console.log(padRight('Node ID', 25) +
14
+ padRight('Type', 12) +
15
+ padRight('Runtime', 12) +
16
+ padRight('Tokens (in/out)', 20) +
17
+ padRight('Cost ($)', 12));
18
+ console.log('─'.repeat(80));
19
+ // Calculate totals
20
+ let totalTime = 0;
21
+ let totalInputTokens = 0;
22
+ let totalOutputTokens = 0;
23
+ let totalCost = 0;
24
+ // Rows
25
+ for (const metric of metrics) {
26
+ const runtimeSeconds = (metric.executionTimeMs / 1000).toFixed(2);
27
+ const runtime = `${runtimeSeconds}s`;
28
+ let tokens = '-';
29
+ let costStr = '-';
30
+ let cost = 0;
31
+ if (metric.inputTokens !== undefined || metric.outputTokens !== undefined) {
32
+ const inputStr = metric.inputTokens?.toString() || '0';
33
+ const outputStr = metric.outputTokens?.toString() || '0';
34
+ tokens = `${inputStr} / ${outputStr}`;
35
+ }
36
+ if (metric.nodeType === 'llm' && metric.model) {
37
+ const modelCosts = getModelCost(metric.model);
38
+ const inputCost = ((metric.inputTokens || 0) / 1_000_000) * modelCosts.inputCostPer1M;
39
+ const outputCost = ((metric.outputTokens || 0) / 1_000_000) * modelCosts.outputCostPer1M;
40
+ const cachedCost = ((metric.cachedTokens || 0) / 1_000_000) * (modelCosts.cachedInputCostPer1M || 0);
41
+ cost = inputCost + outputCost + cachedCost;
42
+ costStr = `$${cost.toFixed(6)}`;
43
+ }
44
+ console.log(padRight(metric.nodeId, 25) +
45
+ padRight(metric.nodeType, 12) +
46
+ padRight(runtime, 12) +
47
+ padRight(tokens, 20) +
48
+ padRight(costStr, 12));
49
+ totalTime += metric.executionTimeMs;
50
+ totalInputTokens += metric.inputTokens || 0;
51
+ totalOutputTokens += metric.outputTokens || 0;
52
+ totalCost += cost;
53
+ }
54
+ // Footer with totals
55
+ console.log('─'.repeat(80));
56
+ const totalRuntimeSeconds = (totalTime / 1000).toFixed(2);
57
+ const totalTokens = totalInputTokens > 0 || totalOutputTokens > 0
58
+ ? `${totalInputTokens} / ${totalOutputTokens}`
59
+ : '-';
60
+ console.log(padRight('TOTAL', 25) +
61
+ padRight('', 12) +
62
+ padRight(`${totalRuntimeSeconds}s`, 12) +
63
+ padRight(totalTokens, 20) +
64
+ padRight(`$${totalCost.toFixed(6)}`, 12));
65
+ console.log('─'.repeat(80));
66
+ console.log('');
67
+ // Log summary to logger
68
+ logger.info('Pipeline execution metrics', {
69
+ totalExecutionTimeMs: totalTime.toFixed(2),
70
+ totalInputTokens,
71
+ totalOutputTokens,
72
+ totalCost: totalCost.toFixed(6),
73
+ nodeCount: metrics.length,
74
+ });
75
+ }
76
+ /**
77
+ * Pad string to the right
78
+ */
79
+ function padRight(str, length) {
80
+ return str.padEnd(length, ' ');
81
+ }
82
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../engine/utils/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { ValidationResult } from '../types/index.js';
2
+ /**
3
+ * Validate data against a JSON schema
4
+ */
5
+ export declare function validateSchema(data: unknown, schema: Record<string, unknown> | string): Promise<ValidationResult>;
6
+ /**
7
+ * Check if a schema is valid JSON Schema
8
+ */
9
+ export declare function isValidSchema(schema: unknown): boolean;
10
+ //# sourceMappingURL=schema-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-validator.d.ts","sourceRoot":"","sources":["../../../engine/utils/schema-validator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAK1D;;GAEG;AACH,wBAAsB,cAAc,CAChC,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GACzC,OAAO,CAAC,gBAAgB,CAAC,CA+B3B;AAoBD;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAOtD"}
@@ -0,0 +1,61 @@
1
+ import Ajv from 'ajv';
2
+ import { schemaCache } from './file-cache.js';
3
+ const ajv = new Ajv({ allErrors: true });
4
+ /**
5
+ * Validate data against a JSON schema
6
+ */
7
+ export async function validateSchema(data, schema) {
8
+ let schemaObj;
9
+ // Load schema from file if it's a string path
10
+ if (typeof schema === 'string') {
11
+ const schemaContent = await schemaCache.get(schema);
12
+ schemaObj = JSON.parse(schemaContent);
13
+ }
14
+ else {
15
+ schemaObj = schema;
16
+ }
17
+ // Compile and validate
18
+ const validate = ajv.compile(schemaObj);
19
+ const valid = validate(data);
20
+ if (valid) {
21
+ return { valid: true };
22
+ }
23
+ // Format errors
24
+ const errors = (validate.errors || []).map((error) => ({
25
+ code: 'SCHEMA_VALIDATION_ERROR',
26
+ message: formatErrorMessage(error),
27
+ path: error.instancePath,
28
+ details: error,
29
+ }));
30
+ return {
31
+ valid: false,
32
+ errors,
33
+ };
34
+ }
35
+ /**
36
+ * Format Ajv error into human-readable message
37
+ */
38
+ function formatErrorMessage(error) {
39
+ const { instancePath, message, params } = error;
40
+ const path = instancePath || 'root';
41
+ if (error.keyword === 'required') {
42
+ return `${path} ${message}: ${params.missingProperty}`;
43
+ }
44
+ if (error.keyword === 'type') {
45
+ return `${path} ${message}`;
46
+ }
47
+ return `${path}: ${message}`;
48
+ }
49
+ /**
50
+ * Check if a schema is valid JSON Schema
51
+ */
52
+ export function isValidSchema(schema) {
53
+ try {
54
+ ajv.compile(schema);
55
+ return true;
56
+ }
57
+ catch {
58
+ return false;
59
+ }
60
+ }
61
+ //# sourceMappingURL=schema-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../../../engine/utils/schema-validator.ts"],"names":[],"mappings":"AAAA,OAAO,GAAoB,MAAM,KAAK,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAEzC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,IAAa,EACb,MAAwC;IAExC,IAAI,SAAkC,CAAC;IAEvC,8CAA8C;IAC9C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpD,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACJ,SAAS,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,uBAAuB;IACvB,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE7B,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,gBAAgB;IAChB,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAkB,EAAE,EAAE,CAAC,CAAC;QAChE,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,kBAAkB,CAAC,KAAK,CAAC;QAClC,IAAI,EAAE,KAAK,CAAC,YAAY;QACxB,OAAO,EAAE,KAAK;KACjB,CAAC,CAAC,CAAC;IAEJ,OAAO;QACH,KAAK,EAAE,KAAK;QACZ,MAAM;KACT,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,KAAkB;IAC1C,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAChD,MAAM,IAAI,GAAG,YAAY,IAAI,MAAM,CAAC;IAEpC,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,GAAG,IAAI,IAAI,OAAO,KAAM,MAAsC,CAAC,eAAe,EAAE,CAAC;IAC5F,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAC3B,OAAO,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;IAChC,CAAC;IAED,OAAO,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAe;IACzC,IAAI,CAAC;QACD,GAAG,CAAC,OAAO,CAAC,MAAiC,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "dynamic-api-workflow",
3
+ "version": "1.0.0",
4
+ "description": "TypeScript-based dynamic API workflow engine that creates configurable endpoints from YAML definitions",
5
+ "main": "dist/engine/index.js",
6
+ "bin": {
7
+ "dynamic-api-workflow": "./dist/engine/cli.js"
8
+ },
9
+ "files": [
10
+ "dist/engine",
11
+ "README.md"
12
+ ],
13
+ "type": "module",
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "dev": "tsx engine/scripts/cleanup-port.ts && tsx --watch engine/cli.ts",
17
+ "create-endpoint": "tsx engine/scripts/create-endpoint.ts",
18
+ "start": "node dist/engine/cli.js",
19
+ "validate": "tsx engine/scripts/validate-workflows.ts",
20
+ "scan-deps": "tsx engine/scripts/scan-deps.ts",
21
+ "lint": "eslint engine/",
22
+ "format": "prettier --write \"engine/**/*.ts\""
23
+ },
24
+ "keywords": [
25
+ "api",
26
+ "workflow",
27
+ "llm",
28
+ "automation",
29
+ "yaml"
30
+ ],
31
+ "author": "",
32
+ "license": "ISC",
33
+ "dependencies": {
34
+ "@google/generative-ai": "^0.21.0",
35
+ "@xmldom/xmldom": "^0.8.11",
36
+ "ajv": "^8.12.0",
37
+ "dotenv": "^16.4.1",
38
+ "express": "^4.18.2",
39
+ "jsonpath-plus": "^10.2.0",
40
+ "winston": "^3.11.0",
41
+ "yaml": "^2.3.4"
42
+ },
43
+ "devDependencies": {
44
+ "@types/express": "^4.17.21",
45
+ "@types/node": "^20.11.5",
46
+ "@typescript-eslint/eslint-plugin": "^6.19.0",
47
+ "@typescript-eslint/parser": "^6.19.0",
48
+ "eslint": "^8.56.0",
49
+ "prettier": "^3.2.4",
50
+ "tsx": "^4.7.0",
51
+ "typescript": "^5.3.3"
52
+ }
53
+ }