@synergenius/flow-weaver 0.2.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/LICENSE +122 -0
- package/README.md +315 -0
- package/dist/annotation-generator.d.ts +45 -0
- package/dist/annotation-generator.js +557 -0
- package/dist/api/builder.d.ts +223 -0
- package/dist/api/builder.js +345 -0
- package/dist/api/compile.d.ts +92 -0
- package/dist/api/compile.js +149 -0
- package/dist/api/extract-types.d.ts +29 -0
- package/dist/api/extract-types.js +57 -0
- package/dist/api/generate-in-place.d.ts +73 -0
- package/dist/api/generate-in-place.js +1353 -0
- package/dist/api/generate.d.ts +83 -0
- package/dist/api/generate.js +510 -0
- package/dist/api/helpers.d.ts +248 -0
- package/dist/api/helpers.js +285 -0
- package/dist/api/index.d.ts +46 -0
- package/dist/api/index.js +45 -0
- package/dist/api/inline-runtime.d.ts +27 -0
- package/dist/api/inline-runtime.js +551 -0
- package/dist/api/manipulation/connections.d.ts +79 -0
- package/dist/api/manipulation/connections.js +151 -0
- package/dist/api/manipulation/index.d.ts +34 -0
- package/dist/api/manipulation/index.js +41 -0
- package/dist/api/manipulation/node-types.d.ts +123 -0
- package/dist/api/manipulation/node-types.js +200 -0
- package/dist/api/manipulation/nodes.d.ts +144 -0
- package/dist/api/manipulation/nodes.js +333 -0
- package/dist/api/manipulation/ports.d.ts +59 -0
- package/dist/api/manipulation/ports.js +228 -0
- package/dist/api/manipulation/scopes.d.ts +52 -0
- package/dist/api/manipulation/scopes.js +156 -0
- package/dist/api/manipulation/validation.d.ts +6 -0
- package/dist/api/manipulation/validation.js +6 -0
- package/dist/api/manipulation/workflow.d.ts +81 -0
- package/dist/api/manipulation/workflow.js +116 -0
- package/dist/api/manipulation.d.ts +8 -0
- package/dist/api/manipulation.js +8 -0
- package/dist/api/parse.d.ts +48 -0
- package/dist/api/parse.js +110 -0
- package/dist/api/patterns.d.ts +112 -0
- package/dist/api/patterns.js +306 -0
- package/dist/api/query.d.ts +429 -0
- package/dist/api/query.js +816 -0
- package/dist/api/templates.d.ts +98 -0
- package/dist/api/templates.js +117 -0
- package/dist/api/transform.d.ts +31 -0
- package/dist/api/transform.js +40 -0
- package/dist/api/validate.d.ts +25 -0
- package/dist/api/validate.js +39 -0
- package/dist/api/workflow-file-operations.d.ts +29 -0
- package/dist/api/workflow-file-operations.js +180 -0
- package/dist/ast/builder.d.ts +210 -0
- package/dist/ast/builder.js +395 -0
- package/dist/ast/index.d.ts +5 -0
- package/dist/ast/index.js +5 -0
- package/dist/ast/serialization-node.d.ts +6 -0
- package/dist/ast/serialization-node.js +30 -0
- package/dist/ast/serialization.d.ts +43 -0
- package/dist/ast/serialization.js +134 -0
- package/dist/ast/types.d.ts +852 -0
- package/dist/ast/types.js +2 -0
- package/dist/ast/workflow-utils.d.ts +54 -0
- package/dist/ast/workflow-utils.js +114 -0
- package/dist/body-generator.d.ts +31 -0
- package/dist/body-generator.js +35 -0
- package/dist/built-in-nodes/delay.d.ts +11 -0
- package/dist/built-in-nodes/delay.js +29 -0
- package/dist/built-in-nodes/index.d.ts +5 -0
- package/dist/built-in-nodes/index.js +4 -0
- package/dist/built-in-nodes/invoke-workflow.d.ts +13 -0
- package/dist/built-in-nodes/invoke-workflow.js +25 -0
- package/dist/built-in-nodes/mock-types.d.ts +18 -0
- package/dist/built-in-nodes/mock-types.js +12 -0
- package/dist/built-in-nodes/wait-for-event.d.ts +13 -0
- package/dist/built-in-nodes/wait-for-event.js +25 -0
- package/dist/chevrotain-parser/connect-parser.d.ts +24 -0
- package/dist/chevrotain-parser/connect-parser.js +98 -0
- package/dist/chevrotain-parser/grammar-diagrams.d.ts +29 -0
- package/dist/chevrotain-parser/grammar-diagrams.js +264 -0
- package/dist/chevrotain-parser/index.d.ts +25 -0
- package/dist/chevrotain-parser/index.js +27 -0
- package/dist/chevrotain-parser/map-parser.d.ts +33 -0
- package/dist/chevrotain-parser/map-parser.js +130 -0
- package/dist/chevrotain-parser/node-parser.d.ts +36 -0
- package/dist/chevrotain-parser/node-parser.js +466 -0
- package/dist/chevrotain-parser/path-parser.d.ts +28 -0
- package/dist/chevrotain-parser/path-parser.js +118 -0
- package/dist/chevrotain-parser/port-parser.d.ts +36 -0
- package/dist/chevrotain-parser/port-parser.js +442 -0
- package/dist/chevrotain-parser/position-parser.d.ts +20 -0
- package/dist/chevrotain-parser/position-parser.js +83 -0
- package/dist/chevrotain-parser/scope-parser.d.ts +19 -0
- package/dist/chevrotain-parser/scope-parser.js +104 -0
- package/dist/chevrotain-parser/tokens.d.ts +78 -0
- package/dist/chevrotain-parser/tokens.js +384 -0
- package/dist/chevrotain-parser/trigger-cancel-parser.d.ts +50 -0
- package/dist/chevrotain-parser/trigger-cancel-parser.js +282 -0
- package/dist/cli/commands/changelog.d.ts +13 -0
- package/dist/cli/commands/changelog.js +135 -0
- package/dist/cli/commands/compile.d.ts +64 -0
- package/dist/cli/commands/compile.js +278 -0
- package/dist/cli/commands/create.d.ts +33 -0
- package/dist/cli/commands/create.js +147 -0
- package/dist/cli/commands/describe.d.ts +68 -0
- package/dist/cli/commands/describe.js +377 -0
- package/dist/cli/commands/dev.d.ts +32 -0
- package/dist/cli/commands/dev.js +384 -0
- package/dist/cli/commands/diagram.d.ts +13 -0
- package/dist/cli/commands/diagram.js +33 -0
- package/dist/cli/commands/diff.d.ts +11 -0
- package/dist/cli/commands/diff.js +59 -0
- package/dist/cli/commands/doctor.d.ts +57 -0
- package/dist/cli/commands/doctor.js +719 -0
- package/dist/cli/commands/export.d.ts +57 -0
- package/dist/cli/commands/export.js +163 -0
- package/dist/cli/commands/grammar.d.ts +9 -0
- package/dist/cli/commands/grammar.js +39 -0
- package/dist/cli/commands/init.d.ts +59 -0
- package/dist/cli/commands/init.js +435 -0
- package/dist/cli/commands/listen.d.ts +16 -0
- package/dist/cli/commands/listen.js +39 -0
- package/dist/cli/commands/market.d.ts +52 -0
- package/dist/cli/commands/market.js +436 -0
- package/dist/cli/commands/migrate.d.ts +13 -0
- package/dist/cli/commands/migrate.js +89 -0
- package/dist/cli/commands/openapi.d.ts +37 -0
- package/dist/cli/commands/openapi.js +67 -0
- package/dist/cli/commands/pattern.d.ts +34 -0
- package/dist/cli/commands/pattern.js +185 -0
- package/dist/cli/commands/plugin.d.ts +16 -0
- package/dist/cli/commands/plugin.js +176 -0
- package/dist/cli/commands/run.d.ts +49 -0
- package/dist/cli/commands/run.js +191 -0
- package/dist/cli/commands/serve.d.ts +45 -0
- package/dist/cli/commands/serve.js +81 -0
- package/dist/cli/commands/templates.d.ts +8 -0
- package/dist/cli/commands/templates.js +54 -0
- package/dist/cli/commands/ui.d.ts +16 -0
- package/dist/cli/commands/ui.js +130 -0
- package/dist/cli/commands/validate.d.ts +12 -0
- package/dist/cli/commands/validate.js +247 -0
- package/dist/cli/commands/watch.d.ts +9 -0
- package/dist/cli/commands/watch.js +70 -0
- package/dist/cli/flow-weaver.mjs +92924 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.js +742 -0
- package/dist/cli/templates/ai/mock-provider.d.ts +7 -0
- package/dist/cli/templates/ai/mock-provider.js +64 -0
- package/dist/cli/templates/ai/types.d.ts +47 -0
- package/dist/cli/templates/ai/types.js +5 -0
- package/dist/cli/templates/approvals/index.d.ts +15 -0
- package/dist/cli/templates/approvals/index.js +241 -0
- package/dist/cli/templates/index.d.ts +102 -0
- package/dist/cli/templates/index.js +101 -0
- package/dist/cli/templates/nodes/agent-router.d.ts +3 -0
- package/dist/cli/templates/nodes/agent-router.js +114 -0
- package/dist/cli/templates/nodes/aggregator.d.ts +7 -0
- package/dist/cli/templates/nodes/aggregator.js +63 -0
- package/dist/cli/templates/nodes/conversation-memory.d.ts +3 -0
- package/dist/cli/templates/nodes/conversation-memory.js +85 -0
- package/dist/cli/templates/nodes/http.d.ts +7 -0
- package/dist/cli/templates/nodes/http.js +80 -0
- package/dist/cli/templates/nodes/human-approval.d.ts +3 -0
- package/dist/cli/templates/nodes/human-approval.js +110 -0
- package/dist/cli/templates/nodes/json-extractor.d.ts +3 -0
- package/dist/cli/templates/nodes/json-extractor.js +119 -0
- package/dist/cli/templates/nodes/llm-call.d.ts +3 -0
- package/dist/cli/templates/nodes/llm-call.js +106 -0
- package/dist/cli/templates/nodes/prompt-template.d.ts +3 -0
- package/dist/cli/templates/nodes/prompt-template.js +52 -0
- package/dist/cli/templates/nodes/rag-retriever.d.ts +3 -0
- package/dist/cli/templates/nodes/rag-retriever.js +128 -0
- package/dist/cli/templates/nodes/tool-executor.d.ts +3 -0
- package/dist/cli/templates/nodes/tool-executor.js +108 -0
- package/dist/cli/templates/nodes/transformer.d.ts +7 -0
- package/dist/cli/templates/nodes/transformer.js +68 -0
- package/dist/cli/templates/nodes/validator.d.ts +7 -0
- package/dist/cli/templates/nodes/validator.js +62 -0
- package/dist/cli/templates/providers/index.d.ts +14 -0
- package/dist/cli/templates/providers/index.js +239 -0
- package/dist/cli/templates/shared/approval-types.d.ts +9 -0
- package/dist/cli/templates/shared/approval-types.js +31 -0
- package/dist/cli/templates/shared/llm-types.d.ts +15 -0
- package/dist/cli/templates/shared/llm-types.js +104 -0
- package/dist/cli/templates/workflows/aggregator.d.ts +7 -0
- package/dist/cli/templates/workflows/aggregator.js +104 -0
- package/dist/cli/templates/workflows/ai-agent-durable.d.ts +8 -0
- package/dist/cli/templates/workflows/ai-agent-durable.js +338 -0
- package/dist/cli/templates/workflows/ai-agent.d.ts +31 -0
- package/dist/cli/templates/workflows/ai-agent.js +326 -0
- package/dist/cli/templates/workflows/ai-chat.d.ts +7 -0
- package/dist/cli/templates/workflows/ai-chat.js +169 -0
- package/dist/cli/templates/workflows/ai-pipeline-durable.d.ts +8 -0
- package/dist/cli/templates/workflows/ai-pipeline-durable.js +330 -0
- package/dist/cli/templates/workflows/ai-rag.d.ts +7 -0
- package/dist/cli/templates/workflows/ai-rag.js +186 -0
- package/dist/cli/templates/workflows/ai-react.d.ts +7 -0
- package/dist/cli/templates/workflows/ai-react.js +294 -0
- package/dist/cli/templates/workflows/conditional.d.ts +12 -0
- package/dist/cli/templates/workflows/conditional.js +142 -0
- package/dist/cli/templates/workflows/error-handler.d.ts +7 -0
- package/dist/cli/templates/workflows/error-handler.js +147 -0
- package/dist/cli/templates/workflows/foreach.d.ts +7 -0
- package/dist/cli/templates/workflows/foreach.js +143 -0
- package/dist/cli/templates/workflows/sequential.d.ts +7 -0
- package/dist/cli/templates/workflows/sequential.js +198 -0
- package/dist/cli/templates/workflows/webhook.d.ts +7 -0
- package/dist/cli/templates/workflows/webhook.js +161 -0
- package/dist/cli/utils/logger.d.ts +15 -0
- package/dist/cli/utils/logger.js +46 -0
- package/dist/constants.d.ts +100 -0
- package/dist/constants.js +125 -0
- package/dist/defaults.d.ts +3 -0
- package/dist/defaults.js +3 -0
- package/dist/deployment/config/defaults.d.ts +29 -0
- package/dist/deployment/config/defaults.js +98 -0
- package/dist/deployment/config/loader.d.ts +24 -0
- package/dist/deployment/config/loader.js +236 -0
- package/dist/deployment/config/types.d.ts +117 -0
- package/dist/deployment/config/types.js +5 -0
- package/dist/deployment/core/adapters.d.ts +90 -0
- package/dist/deployment/core/adapters.js +251 -0
- package/dist/deployment/core/executor.d.ts +62 -0
- package/dist/deployment/core/executor.js +197 -0
- package/dist/deployment/core/formatters.d.ts +57 -0
- package/dist/deployment/core/formatters.js +170 -0
- package/dist/deployment/index.d.ts +31 -0
- package/dist/deployment/index.js +48 -0
- package/dist/deployment/openapi/generator.d.ts +146 -0
- package/dist/deployment/openapi/generator.js +347 -0
- package/dist/deployment/openapi/schema-converter.d.ts +49 -0
- package/dist/deployment/openapi/schema-converter.js +192 -0
- package/dist/deployment/targets/base.d.ts +316 -0
- package/dist/deployment/targets/base.js +823 -0
- package/dist/deployment/targets/cloudflare.d.ts +23 -0
- package/dist/deployment/targets/cloudflare.js +1125 -0
- package/dist/deployment/targets/inngest.d.ts +38 -0
- package/dist/deployment/targets/inngest.js +926 -0
- package/dist/deployment/targets/lambda.d.ts +23 -0
- package/dist/deployment/targets/lambda.js +1289 -0
- package/dist/deployment/targets/vercel.d.ts +23 -0
- package/dist/deployment/targets/vercel.js +886 -0
- package/dist/deployment/types.d.ts +183 -0
- package/dist/deployment/types.js +8 -0
- package/dist/diagram/geometry.d.ts +26 -0
- package/dist/diagram/geometry.js +850 -0
- package/dist/diagram/index.d.ts +16 -0
- package/dist/diagram/index.js +42 -0
- package/dist/diagram/layout.d.ts +11 -0
- package/dist/diagram/layout.js +143 -0
- package/dist/diagram/orthogonal-router.d.ts +79 -0
- package/dist/diagram/orthogonal-router.js +568 -0
- package/dist/diagram/renderer.d.ts +3 -0
- package/dist/diagram/renderer.js +207 -0
- package/dist/diagram/theme.d.ts +20 -0
- package/dist/diagram/theme.js +189 -0
- package/dist/diagram/types.d.ts +70 -0
- package/dist/diagram/types.js +2 -0
- package/dist/diff/WorkflowDiffer.d.ts +13 -0
- package/dist/diff/WorkflowDiffer.js +429 -0
- package/dist/diff/formatDiff.d.ts +10 -0
- package/dist/diff/formatDiff.js +220 -0
- package/dist/diff/impact.d.ts +29 -0
- package/dist/diff/impact.js +119 -0
- package/dist/diff/index.d.ts +10 -0
- package/dist/diff/index.js +9 -0
- package/dist/diff/types.d.ts +138 -0
- package/dist/diff/types.js +35 -0
- package/dist/doc-metadata/extractors/annotations.d.ts +56 -0
- package/dist/doc-metadata/extractors/annotations.js +337 -0
- package/dist/doc-metadata/extractors/cli-commands.d.ts +17 -0
- package/dist/doc-metadata/extractors/cli-commands.js +355 -0
- package/dist/doc-metadata/extractors/mcp-tools.d.ts +16 -0
- package/dist/doc-metadata/extractors/mcp-tools.js +689 -0
- package/dist/doc-metadata/extractors/plugin-api.d.ts +19 -0
- package/dist/doc-metadata/extractors/plugin-api.js +279 -0
- package/dist/doc-metadata/index.d.ts +5 -0
- package/dist/doc-metadata/index.js +4 -0
- package/dist/doc-metadata/types.d.ts +120 -0
- package/dist/doc-metadata/types.js +5 -0
- package/dist/editor-completions/annotationValues.d.ts +12 -0
- package/dist/editor-completions/annotationValues.js +138 -0
- package/dist/editor-completions/contextParser.d.ts +40 -0
- package/dist/editor-completions/contextParser.js +410 -0
- package/dist/editor-completions/dataTypes.d.ts +16 -0
- package/dist/editor-completions/dataTypes.js +95 -0
- package/dist/editor-completions/goToDefinition.d.ts +27 -0
- package/dist/editor-completions/goToDefinition.js +112 -0
- package/dist/editor-completions/index.d.ts +39 -0
- package/dist/editor-completions/index.js +181 -0
- package/dist/editor-completions/jsDocAnnotations.d.ts +29 -0
- package/dist/editor-completions/jsDocAnnotations.js +357 -0
- package/dist/editor-completions/modifierCompletions.d.ts +17 -0
- package/dist/editor-completions/modifierCompletions.js +197 -0
- package/dist/editor-completions/types.d.ts +119 -0
- package/dist/editor-completions/types.js +8 -0
- package/dist/export/index.d.ts +68 -0
- package/dist/export/index.js +1074 -0
- package/dist/export/templates.d.ts +24 -0
- package/dist/export/templates.js +186 -0
- package/dist/friendly-errors.d.ts +35 -0
- package/dist/friendly-errors.js +375 -0
- package/dist/function-like.d.ts +38 -0
- package/dist/function-like.js +83 -0
- package/dist/generated-branding.d.ts +16 -0
- package/dist/generated-branding.js +22 -0
- package/dist/generator/async-detection.d.ts +27 -0
- package/dist/generator/async-detection.js +56 -0
- package/dist/generator/code-utils.d.ts +76 -0
- package/dist/generator/code-utils.js +410 -0
- package/dist/generator/control-flow.d.ts +54 -0
- package/dist/generator/control-flow.js +284 -0
- package/dist/generator/inngest.d.ts +53 -0
- package/dist/generator/inngest.js +1126 -0
- package/dist/generator/scope-function-generator.d.ts +78 -0
- package/dist/generator/scope-function-generator.js +360 -0
- package/dist/generator/unified.d.ts +42 -0
- package/dist/generator/unified.js +1504 -0
- package/dist/generator.d.ts +54 -0
- package/dist/generator.js +100 -0
- package/dist/index.d.ts +85 -0
- package/dist/index.js +89 -0
- package/dist/jsdoc-parser.d.ts +308 -0
- package/dist/jsdoc-parser.js +923 -0
- package/dist/jsdoc-port-sync/constants.d.ts +41 -0
- package/dist/jsdoc-port-sync/constants.js +103 -0
- package/dist/jsdoc-port-sync/diff.d.ts +76 -0
- package/dist/jsdoc-port-sync/diff.js +319 -0
- package/dist/jsdoc-port-sync/index.d.ts +42 -0
- package/dist/jsdoc-port-sync/index.js +45 -0
- package/dist/jsdoc-port-sync/port-parser.d.ts +68 -0
- package/dist/jsdoc-port-sync/port-parser.js +579 -0
- package/dist/jsdoc-port-sync/rename.d.ts +21 -0
- package/dist/jsdoc-port-sync/rename.js +256 -0
- package/dist/jsdoc-port-sync/signature-parser.d.ts +104 -0
- package/dist/jsdoc-port-sync/signature-parser.js +559 -0
- package/dist/jsdoc-port-sync/sync.d.ts +36 -0
- package/dist/jsdoc-port-sync/sync.js +644 -0
- package/dist/jsdoc-port-sync.d.ts +10 -0
- package/dist/jsdoc-port-sync.js +10 -0
- package/dist/marketplace/index.d.ts +11 -0
- package/dist/marketplace/index.js +10 -0
- package/dist/marketplace/manifest.d.ts +32 -0
- package/dist/marketplace/manifest.js +176 -0
- package/dist/marketplace/registry.d.ts +30 -0
- package/dist/marketplace/registry.js +100 -0
- package/dist/marketplace/types.d.ts +154 -0
- package/dist/marketplace/types.js +9 -0
- package/dist/marketplace/validator.d.ts +13 -0
- package/dist/marketplace/validator.js +131 -0
- package/dist/mcp/auto-registration.d.ts +3 -0
- package/dist/mcp/auto-registration.js +62 -0
- package/dist/mcp/editor-connection.d.ts +50 -0
- package/dist/mcp/editor-connection.js +125 -0
- package/dist/mcp/event-buffer.d.ts +62 -0
- package/dist/mcp/event-buffer.js +150 -0
- package/dist/mcp/index.d.ts +12 -0
- package/dist/mcp/index.js +11 -0
- package/dist/mcp/resources.d.ts +14 -0
- package/dist/mcp/resources.js +55 -0
- package/dist/mcp/response-utils.d.ts +63 -0
- package/dist/mcp/response-utils.js +89 -0
- package/dist/mcp/server.d.ts +4 -0
- package/dist/mcp/server.js +99 -0
- package/dist/mcp/tools-diagram.d.ts +8 -0
- package/dist/mcp/tools-diagram.js +53 -0
- package/dist/mcp/tools-editor.d.ts +5 -0
- package/dist/mcp/tools-editor.js +190 -0
- package/dist/mcp/tools-export.d.ts +9 -0
- package/dist/mcp/tools-export.js +180 -0
- package/dist/mcp/tools-marketplace.d.ts +9 -0
- package/dist/mcp/tools-marketplace.js +132 -0
- package/dist/mcp/tools-pattern.d.ts +3 -0
- package/dist/mcp/tools-pattern.js +783 -0
- package/dist/mcp/tools-query.d.ts +3 -0
- package/dist/mcp/tools-query.js +364 -0
- package/dist/mcp/tools-template.d.ts +10 -0
- package/dist/mcp/tools-template.js +119 -0
- package/dist/mcp/types.d.ts +70 -0
- package/dist/mcp/types.js +8 -0
- package/dist/mcp/workflow-executor.d.ts +47 -0
- package/dist/mcp/workflow-executor.js +133 -0
- package/dist/migration/registry.d.ts +30 -0
- package/dist/migration/registry.js +29 -0
- package/dist/node-types-generator.d.ts +49 -0
- package/dist/node-types-generator.js +139 -0
- package/dist/npm-packages.d.ts +56 -0
- package/dist/npm-packages.js +255 -0
- package/dist/parser.d.ts +204 -0
- package/dist/parser.js +2100 -0
- package/dist/plugin/PluginPanel.d.ts +12 -0
- package/dist/plugin/PluginPanel.js +5 -0
- package/dist/plugin/index.d.ts +13 -0
- package/dist/plugin/index.js +14 -0
- package/dist/plugin/types.d.ts +75 -0
- package/dist/plugin/types.js +8 -0
- package/dist/resolve-package-types.d.ts +17 -0
- package/dist/resolve-package-types.js +123 -0
- package/dist/runtime/CancellationError.d.ts +11 -0
- package/dist/runtime/CancellationError.js +20 -0
- package/dist/runtime/ExecutionContext.d.ts +146 -0
- package/dist/runtime/ExecutionContext.js +235 -0
- package/dist/runtime/builtin-functions.d.ts +8 -0
- package/dist/runtime/builtin-functions.js +549 -0
- package/dist/runtime/events.d.ts +50 -0
- package/dist/runtime/events.js +2 -0
- package/dist/runtime/function-registry.d.ts +59 -0
- package/dist/runtime/function-registry.js +66 -0
- package/dist/runtime/index.d.ts +7 -0
- package/dist/runtime/index.js +7 -0
- package/dist/runtime/parameter-resolver.d.ts +62 -0
- package/dist/runtime/parameter-resolver.js +113 -0
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.js +6 -0
- package/dist/server/types.d.ts +93 -0
- package/dist/server/types.js +5 -0
- package/dist/server/webhook-server.d.ts +50 -0
- package/dist/server/webhook-server.js +269 -0
- package/dist/server/workflow-registry.d.ts +61 -0
- package/dist/server/workflow-registry.js +202 -0
- package/dist/shared-project.d.ts +9 -0
- package/dist/shared-project.js +28 -0
- package/dist/sugar-optimizer.d.ts +40 -0
- package/dist/sugar-optimizer.js +387 -0
- package/dist/testing/assertions.d.ts +51 -0
- package/dist/testing/assertions.js +127 -0
- package/dist/testing/index.d.ts +30 -0
- package/dist/testing/index.js +24 -0
- package/dist/testing/mock-approval.d.ts +81 -0
- package/dist/testing/mock-approval.js +98 -0
- package/dist/testing/mock-llm.d.ts +124 -0
- package/dist/testing/mock-llm.js +119 -0
- package/dist/testing/recorder.d.ts +72 -0
- package/dist/testing/recorder.js +70 -0
- package/dist/testing/replayer.d.ts +56 -0
- package/dist/testing/replayer.js +143 -0
- package/dist/testing/token-tracker.d.ts +71 -0
- package/dist/testing/token-tracker.js +94 -0
- package/dist/type-checker.d.ts +42 -0
- package/dist/type-checker.js +190 -0
- package/dist/type-mappings.d.ts +29 -0
- package/dist/type-mappings.js +125 -0
- package/dist/types/branded-ports.d.ts +151 -0
- package/dist/types/branded-ports.js +121 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.js +5 -0
- package/dist/types.d.ts +139 -0
- package/dist/types.js +15 -0
- package/dist/utils/error-utils.d.ts +15 -0
- package/dist/utils/error-utils.js +27 -0
- package/dist/utils/lru-cache.d.ts +15 -0
- package/dist/utils/lru-cache.js +40 -0
- package/dist/utils/port-ordering.d.ts +26 -0
- package/dist/utils/port-ordering.js +88 -0
- package/dist/utils/port-tag-utils.d.ts +23 -0
- package/dist/utils/port-tag-utils.js +41 -0
- package/dist/utils/string-distance.d.ts +14 -0
- package/dist/utils/string-distance.js +56 -0
- package/dist/validation/agent-detection.d.ts +33 -0
- package/dist/validation/agent-detection.js +115 -0
- package/dist/validation/agent-rules.d.ts +48 -0
- package/dist/validation/agent-rules.js +262 -0
- package/dist/validator.d.ts +92 -0
- package/dist/validator.js +970 -0
- package/package.json +109 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Function Registry for Flow Weaver
|
|
3
|
+
*
|
|
4
|
+
* Provides a global registry of functions that can be referenced by string IDs
|
|
5
|
+
* in external HTTP calls while allowing direct function passing in internal calls.
|
|
6
|
+
*/
|
|
7
|
+
export class FunctionRegistry {
|
|
8
|
+
functions = new Map();
|
|
9
|
+
/**
|
|
10
|
+
* Register a function with the registry
|
|
11
|
+
*/
|
|
12
|
+
register(config) {
|
|
13
|
+
if (this.functions.has(config.id)) {
|
|
14
|
+
throw new Error(`Function with ID '${config.id}' is already registered`);
|
|
15
|
+
}
|
|
16
|
+
this.functions.set(config.id, config);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get a function by ID
|
|
20
|
+
*/
|
|
21
|
+
get(id) {
|
|
22
|
+
const registered = this.functions.get(id);
|
|
23
|
+
return registered?.fn;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get function metadata without the function itself
|
|
27
|
+
*/
|
|
28
|
+
getMetadata(id) {
|
|
29
|
+
const registered = this.functions.get(id);
|
|
30
|
+
if (!registered)
|
|
31
|
+
return undefined;
|
|
32
|
+
const { fn: _, ...metadata } = registered;
|
|
33
|
+
return metadata;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* List all registered functions, optionally filtered by category
|
|
37
|
+
*/
|
|
38
|
+
list(category) {
|
|
39
|
+
const all = Array.from(this.functions.values());
|
|
40
|
+
const filtered = category ? all.filter((f) => f.category === category) : all;
|
|
41
|
+
return filtered.map(({ fn: _, ...metadata }) => metadata);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Check if a function is registered
|
|
45
|
+
*/
|
|
46
|
+
has(id) {
|
|
47
|
+
return this.functions.has(id);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Clear all registered functions (useful for testing)
|
|
51
|
+
*/
|
|
52
|
+
clear() {
|
|
53
|
+
this.functions.clear();
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get the count of registered functions
|
|
57
|
+
*/
|
|
58
|
+
get size() {
|
|
59
|
+
return this.functions.size;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Global function registry singleton
|
|
64
|
+
*/
|
|
65
|
+
export const functionRegistry = new FunctionRegistry();
|
|
66
|
+
//# sourceMappingURL=function-registry.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { GeneratedExecutionContext } from "./ExecutionContext.js";
|
|
2
|
+
export { CancellationError } from "./CancellationError.js";
|
|
3
|
+
export * from "./events.js";
|
|
4
|
+
export * from "./function-registry.js";
|
|
5
|
+
export * from "./parameter-resolver.js";
|
|
6
|
+
export * from "./builtin-functions.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { GeneratedExecutionContext } from "./ExecutionContext.js";
|
|
2
|
+
export { CancellationError } from "./CancellationError.js";
|
|
3
|
+
export * from "./events.js";
|
|
4
|
+
export * from "./function-registry.js";
|
|
5
|
+
export * from "./parameter-resolver.js";
|
|
6
|
+
export * from "./builtin-functions.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parameter Resolver for Flow Weaver
|
|
3
|
+
*
|
|
4
|
+
* Resolves function-like parameters to executable functions.
|
|
5
|
+
* Supports:
|
|
6
|
+
* - Direct functions (passed through)
|
|
7
|
+
* - Registry IDs (looked up in function registry)
|
|
8
|
+
* - Partial application (registry ID with pre-bound arguments)
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* A function-like parameter that can be:
|
|
12
|
+
* - A direct function
|
|
13
|
+
* - A string registry ID
|
|
14
|
+
* - An object with registry ID and partial arguments
|
|
15
|
+
*/
|
|
16
|
+
export type FunctionLike<TIn, TOut> = ((input: TIn) => TOut | Promise<TOut>) | string | {
|
|
17
|
+
registryId: string;
|
|
18
|
+
partialArgs?: Partial<TIn>;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Result of resolving a function parameter
|
|
22
|
+
*/
|
|
23
|
+
export interface ResolvedFunction<TIn, TOut> {
|
|
24
|
+
fn: (input: TIn) => TOut | Promise<TOut>;
|
|
25
|
+
source: 'direct' | 'registry';
|
|
26
|
+
registryId?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Resolve a function-like parameter to an executable function
|
|
30
|
+
*
|
|
31
|
+
* @param param - The function-like parameter to resolve
|
|
32
|
+
* @returns The resolved function with metadata
|
|
33
|
+
* @throws Error if registry ID is not found
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* // Direct function
|
|
37
|
+
* const resolved = resolveFunction((x: number) => x * 2);
|
|
38
|
+
* resolved.fn(5); // 10
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* // Registry ID
|
|
42
|
+
* const resolved = resolveFunction('string:uppercase');
|
|
43
|
+
* resolved.fn('hello'); // 'HELLO'
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* // Partial application
|
|
47
|
+
* const resolved = resolveFunction({
|
|
48
|
+
* registryId: 'math:clamp',
|
|
49
|
+
* partialArgs: { min: 0, max: 100 }
|
|
50
|
+
* });
|
|
51
|
+
* resolved.fn({ value: 150 }); // 100
|
|
52
|
+
*/
|
|
53
|
+
export declare function resolveFunction<TIn, TOut>(param: FunctionLike<TIn, TOut>): ResolvedFunction<TIn, TOut>;
|
|
54
|
+
/**
|
|
55
|
+
* Check if a value is a function-like parameter
|
|
56
|
+
*/
|
|
57
|
+
export declare function isFunctionLike(value: unknown): value is FunctionLike<unknown, unknown>;
|
|
58
|
+
/**
|
|
59
|
+
* Try to resolve a function, returning undefined if not found
|
|
60
|
+
*/
|
|
61
|
+
export declare function tryResolveFunction<TIn, TOut>(param: FunctionLike<TIn, TOut>): ResolvedFunction<TIn, TOut> | undefined;
|
|
62
|
+
//# sourceMappingURL=parameter-resolver.d.ts.map
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parameter Resolver for Flow Weaver
|
|
3
|
+
*
|
|
4
|
+
* Resolves function-like parameters to executable functions.
|
|
5
|
+
* Supports:
|
|
6
|
+
* - Direct functions (passed through)
|
|
7
|
+
* - Registry IDs (looked up in function registry)
|
|
8
|
+
* - Partial application (registry ID with pre-bound arguments)
|
|
9
|
+
*/
|
|
10
|
+
import { functionRegistry } from './function-registry.js';
|
|
11
|
+
/**
|
|
12
|
+
* Resolve a function-like parameter to an executable function
|
|
13
|
+
*
|
|
14
|
+
* @param param - The function-like parameter to resolve
|
|
15
|
+
* @returns The resolved function with metadata
|
|
16
|
+
* @throws Error if registry ID is not found
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* // Direct function
|
|
20
|
+
* const resolved = resolveFunction((x: number) => x * 2);
|
|
21
|
+
* resolved.fn(5); // 10
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* // Registry ID
|
|
25
|
+
* const resolved = resolveFunction('string:uppercase');
|
|
26
|
+
* resolved.fn('hello'); // 'HELLO'
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* // Partial application
|
|
30
|
+
* const resolved = resolveFunction({
|
|
31
|
+
* registryId: 'math:clamp',
|
|
32
|
+
* partialArgs: { min: 0, max: 100 }
|
|
33
|
+
* });
|
|
34
|
+
* resolved.fn({ value: 150 }); // 100
|
|
35
|
+
*/
|
|
36
|
+
export function resolveFunction(param) {
|
|
37
|
+
// Direct function - pass through
|
|
38
|
+
if (typeof param === 'function') {
|
|
39
|
+
return {
|
|
40
|
+
fn: param,
|
|
41
|
+
source: 'direct',
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// String registry ID
|
|
45
|
+
if (typeof param === 'string') {
|
|
46
|
+
const fn = functionRegistry.get(param);
|
|
47
|
+
if (!fn) {
|
|
48
|
+
throw new Error(`Function '${param}' not found in registry`);
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
fn,
|
|
52
|
+
source: 'registry',
|
|
53
|
+
registryId: param,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
// Object with registry ID and optional partial args
|
|
57
|
+
if (typeof param === 'object' && param !== null && 'registryId' in param) {
|
|
58
|
+
const fn = functionRegistry.get(param.registryId);
|
|
59
|
+
if (!fn) {
|
|
60
|
+
throw new Error(`Function '${param.registryId}' not found in registry`);
|
|
61
|
+
}
|
|
62
|
+
// If partial args provided, create wrapper that merges them
|
|
63
|
+
if (param.partialArgs) {
|
|
64
|
+
const partialArgs = param.partialArgs;
|
|
65
|
+
const wrappedFn = (input) => {
|
|
66
|
+
// Merge partial args with input (input takes precedence for conflicting keys)
|
|
67
|
+
const mergedInput = typeof input === 'object' && input !== null
|
|
68
|
+
? { ...partialArgs, ...input }
|
|
69
|
+
: input;
|
|
70
|
+
return fn(mergedInput);
|
|
71
|
+
};
|
|
72
|
+
return {
|
|
73
|
+
fn: wrappedFn,
|
|
74
|
+
source: 'registry',
|
|
75
|
+
registryId: param.registryId,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
fn,
|
|
80
|
+
source: 'registry',
|
|
81
|
+
registryId: param.registryId,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
throw new Error(`Invalid function parameter: ${JSON.stringify(param)}`);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Check if a value is a function-like parameter
|
|
88
|
+
*/
|
|
89
|
+
export function isFunctionLike(value) {
|
|
90
|
+
if (typeof value === 'function')
|
|
91
|
+
return true;
|
|
92
|
+
if (typeof value === 'string')
|
|
93
|
+
return true;
|
|
94
|
+
if (typeof value === 'object' &&
|
|
95
|
+
value !== null &&
|
|
96
|
+
'registryId' in value &&
|
|
97
|
+
typeof value.registryId === 'string') {
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Try to resolve a function, returning undefined if not found
|
|
104
|
+
*/
|
|
105
|
+
export function tryResolveFunction(param) {
|
|
106
|
+
try {
|
|
107
|
+
return resolveFunction(param);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=parameter-resolver.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server module exports
|
|
3
|
+
*/
|
|
4
|
+
export { WebhookServer } from './webhook-server.js';
|
|
5
|
+
export { WorkflowRegistry } from './workflow-registry.js';
|
|
6
|
+
export type { WebhookServerConfig, WorkflowEndpoint, ExecutionResult, HealthResponse, WorkflowListResponse, } from './types.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for the webhook server
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Represents a workflow exposed as an HTTP endpoint
|
|
6
|
+
*/
|
|
7
|
+
export interface WorkflowEndpoint {
|
|
8
|
+
/** Workflow name (used in URL path) */
|
|
9
|
+
name: string;
|
|
10
|
+
/** Function name in the source file */
|
|
11
|
+
functionName: string;
|
|
12
|
+
/** Path to the source file */
|
|
13
|
+
filePath: string;
|
|
14
|
+
/** HTTP method for the endpoint */
|
|
15
|
+
method: 'POST' | 'GET';
|
|
16
|
+
/** URL path for the endpoint */
|
|
17
|
+
path: string;
|
|
18
|
+
/** JSON Schema for input parameters */
|
|
19
|
+
inputSchema?: Record<string, unknown>;
|
|
20
|
+
/** JSON Schema for output */
|
|
21
|
+
outputSchema?: Record<string, unknown>;
|
|
22
|
+
/** Workflow description */
|
|
23
|
+
description?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Configuration for the webhook server
|
|
27
|
+
*/
|
|
28
|
+
export interface WebhookServerConfig {
|
|
29
|
+
/** Port to listen on */
|
|
30
|
+
port: number;
|
|
31
|
+
/** Host to bind to */
|
|
32
|
+
host: string;
|
|
33
|
+
/** Directory containing workflow files */
|
|
34
|
+
workflowDir: string;
|
|
35
|
+
/** Enable file watching for hot reload */
|
|
36
|
+
watchEnabled: boolean;
|
|
37
|
+
/** CORS origin configuration */
|
|
38
|
+
corsOrigin: string | string[];
|
|
39
|
+
/** Production mode (no trace events) */
|
|
40
|
+
production: boolean;
|
|
41
|
+
/** Precompile workflows on startup */
|
|
42
|
+
precompile: boolean;
|
|
43
|
+
/** Enable Swagger UI at /docs and OpenAPI spec at /openapi.json */
|
|
44
|
+
swaggerEnabled?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Result of workflow execution via HTTP
|
|
48
|
+
*/
|
|
49
|
+
export interface ExecutionResult {
|
|
50
|
+
/** Whether execution succeeded */
|
|
51
|
+
success: boolean;
|
|
52
|
+
/** Name of the executed workflow */
|
|
53
|
+
workflow: string;
|
|
54
|
+
/** Execution time in milliseconds */
|
|
55
|
+
executionTime: number;
|
|
56
|
+
/** Execution result (if successful) */
|
|
57
|
+
result?: unknown;
|
|
58
|
+
/** Error details (if failed) */
|
|
59
|
+
error?: {
|
|
60
|
+
message: string;
|
|
61
|
+
stack?: string;
|
|
62
|
+
};
|
|
63
|
+
/** Execution trace events (if requested) */
|
|
64
|
+
trace?: Array<{
|
|
65
|
+
type: string;
|
|
66
|
+
timestamp: number;
|
|
67
|
+
data?: unknown;
|
|
68
|
+
}>;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Health check response
|
|
72
|
+
*/
|
|
73
|
+
export interface HealthResponse {
|
|
74
|
+
status: 'ok' | 'error';
|
|
75
|
+
timestamp: string;
|
|
76
|
+
workflows: number;
|
|
77
|
+
uptime?: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Workflow list response
|
|
81
|
+
*/
|
|
82
|
+
export interface WorkflowListResponse {
|
|
83
|
+
count: number;
|
|
84
|
+
workflows: Array<{
|
|
85
|
+
name: string;
|
|
86
|
+
path: string;
|
|
87
|
+
method: string;
|
|
88
|
+
description?: string;
|
|
89
|
+
inputSchema?: Record<string, unknown>;
|
|
90
|
+
outputSchema?: Record<string, unknown>;
|
|
91
|
+
}>;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Webhook server for exposing workflows as HTTP endpoints
|
|
3
|
+
*/
|
|
4
|
+
import type { WebhookServerConfig } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* HTTP server that exposes Flow Weaver workflows as REST endpoints
|
|
7
|
+
*/
|
|
8
|
+
export declare class WebhookServer {
|
|
9
|
+
private fastify;
|
|
10
|
+
private registry;
|
|
11
|
+
private config;
|
|
12
|
+
constructor(config: WebhookServerConfig);
|
|
13
|
+
/**
|
|
14
|
+
* Start the HTTP server
|
|
15
|
+
*/
|
|
16
|
+
start(): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Setup health check endpoint
|
|
19
|
+
*/
|
|
20
|
+
private setupHealthRoute;
|
|
21
|
+
/**
|
|
22
|
+
* Setup workflow list endpoint
|
|
23
|
+
*/
|
|
24
|
+
private setupListRoute;
|
|
25
|
+
/**
|
|
26
|
+
* Setup dynamic workflow execution route
|
|
27
|
+
*/
|
|
28
|
+
private setupExecuteRoute;
|
|
29
|
+
/**
|
|
30
|
+
* Build OpenAPI spec from discovered workflows
|
|
31
|
+
*/
|
|
32
|
+
private buildOpenApiSpec;
|
|
33
|
+
/**
|
|
34
|
+
* Setup Swagger UI and OpenAPI spec routes
|
|
35
|
+
*/
|
|
36
|
+
private setupSwaggerRoutes;
|
|
37
|
+
/**
|
|
38
|
+
* Get server info for external logging
|
|
39
|
+
*/
|
|
40
|
+
getServerInfo(): {
|
|
41
|
+
port: number;
|
|
42
|
+
host: string;
|
|
43
|
+
endpoints: number;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Stop the HTTP server
|
|
47
|
+
*/
|
|
48
|
+
stop(): Promise<void>;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=webhook-server.d.ts.map
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Webhook server for exposing workflows as HTTP endpoints
|
|
3
|
+
*/
|
|
4
|
+
import { WorkflowRegistry } from './workflow-registry.js';
|
|
5
|
+
import { executeWorkflowFromFile } from '../mcp/workflow-executor.js';
|
|
6
|
+
/**
|
|
7
|
+
* HTTP server that exposes Flow Weaver workflows as REST endpoints
|
|
8
|
+
*/
|
|
9
|
+
export class WebhookServer {
|
|
10
|
+
fastify = null;
|
|
11
|
+
registry;
|
|
12
|
+
config;
|
|
13
|
+
constructor(config) {
|
|
14
|
+
this.config = config;
|
|
15
|
+
this.registry = new WorkflowRegistry(config.workflowDir, {
|
|
16
|
+
precompile: config.precompile,
|
|
17
|
+
production: config.production,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Start the HTTP server
|
|
22
|
+
*/
|
|
23
|
+
async start() {
|
|
24
|
+
// Dynamic import Fastify
|
|
25
|
+
const Fastify = await import('fastify');
|
|
26
|
+
this.fastify = Fastify.default({ logger: false });
|
|
27
|
+
// Register CORS
|
|
28
|
+
try {
|
|
29
|
+
const cors = await import('@fastify/cors');
|
|
30
|
+
await this.fastify.register(cors.default, { origin: this.config.corsOrigin });
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// CORS plugin not available, continue without it
|
|
34
|
+
}
|
|
35
|
+
// Initialize registry
|
|
36
|
+
await this.registry.initialize();
|
|
37
|
+
// Setup routes
|
|
38
|
+
this.setupHealthRoute();
|
|
39
|
+
this.setupListRoute();
|
|
40
|
+
this.setupExecuteRoute();
|
|
41
|
+
// Setup Swagger UI routes if enabled
|
|
42
|
+
if (this.config.swaggerEnabled) {
|
|
43
|
+
this.setupSwaggerRoutes();
|
|
44
|
+
}
|
|
45
|
+
// Start file watching
|
|
46
|
+
if (this.config.watchEnabled) {
|
|
47
|
+
await this.registry.startWatching(() => {
|
|
48
|
+
// Workflows reloaded - could emit event here if needed
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
// Start server
|
|
52
|
+
await this.fastify.listen({ port: this.config.port, host: this.config.host });
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Setup health check endpoint
|
|
56
|
+
*/
|
|
57
|
+
setupHealthRoute() {
|
|
58
|
+
if (!this.fastify)
|
|
59
|
+
return;
|
|
60
|
+
this.fastify.get('/health', async () => {
|
|
61
|
+
return {
|
|
62
|
+
status: 'ok',
|
|
63
|
+
timestamp: new Date().toISOString(),
|
|
64
|
+
workflows: this.registry.getAllEndpoints().length,
|
|
65
|
+
uptime: this.registry.getUptime(),
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Setup workflow list endpoint
|
|
71
|
+
*/
|
|
72
|
+
setupListRoute() {
|
|
73
|
+
if (!this.fastify)
|
|
74
|
+
return;
|
|
75
|
+
this.fastify.get('/workflows', async () => {
|
|
76
|
+
const endpoints = this.registry.getAllEndpoints();
|
|
77
|
+
return {
|
|
78
|
+
count: endpoints.length,
|
|
79
|
+
workflows: endpoints.map((e) => ({
|
|
80
|
+
name: e.name,
|
|
81
|
+
path: e.path,
|
|
82
|
+
method: e.method,
|
|
83
|
+
description: e.description,
|
|
84
|
+
inputSchema: e.inputSchema,
|
|
85
|
+
outputSchema: e.outputSchema,
|
|
86
|
+
})),
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Setup dynamic workflow execution route
|
|
92
|
+
*/
|
|
93
|
+
setupExecuteRoute() {
|
|
94
|
+
if (!this.fastify)
|
|
95
|
+
return;
|
|
96
|
+
// POST /workflows/:name
|
|
97
|
+
this.fastify.post('/workflows/:name', async (request, reply) => {
|
|
98
|
+
const { name } = request.params;
|
|
99
|
+
const params = request.body || {};
|
|
100
|
+
const includeTrace = request.query?.trace === 'true';
|
|
101
|
+
const endpoint = this.registry.getEndpoint(name);
|
|
102
|
+
if (!endpoint) {
|
|
103
|
+
reply.status(404);
|
|
104
|
+
return {
|
|
105
|
+
success: false,
|
|
106
|
+
workflow: name,
|
|
107
|
+
executionTime: 0,
|
|
108
|
+
error: { message: `Workflow "${name}" not found` },
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
const startTime = Date.now();
|
|
112
|
+
try {
|
|
113
|
+
const result = await executeWorkflowFromFile(endpoint.filePath, params, {
|
|
114
|
+
workflowName: endpoint.functionName,
|
|
115
|
+
production: this.config.production,
|
|
116
|
+
includeTrace,
|
|
117
|
+
});
|
|
118
|
+
const response = {
|
|
119
|
+
success: true,
|
|
120
|
+
workflow: result.functionName,
|
|
121
|
+
executionTime: result.executionTime,
|
|
122
|
+
result: result.result,
|
|
123
|
+
};
|
|
124
|
+
if (includeTrace && result.trace) {
|
|
125
|
+
response.trace = result.trace;
|
|
126
|
+
}
|
|
127
|
+
return response;
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
reply.status(500);
|
|
131
|
+
return {
|
|
132
|
+
success: false,
|
|
133
|
+
workflow: endpoint.functionName,
|
|
134
|
+
executionTime: Date.now() - startTime,
|
|
135
|
+
error: {
|
|
136
|
+
message: error instanceof Error ? error.message : String(error),
|
|
137
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Build OpenAPI spec from discovered workflows
|
|
145
|
+
*/
|
|
146
|
+
buildOpenApiSpec() {
|
|
147
|
+
const endpoints = this.registry.getAllEndpoints();
|
|
148
|
+
const paths = {};
|
|
149
|
+
for (const endpoint of endpoints) {
|
|
150
|
+
paths[endpoint.path] = {
|
|
151
|
+
post: {
|
|
152
|
+
operationId: `execute_${endpoint.functionName}`,
|
|
153
|
+
summary: `Execute ${endpoint.name} workflow`,
|
|
154
|
+
description: endpoint.description || `Execute the ${endpoint.name} workflow`,
|
|
155
|
+
tags: ['workflows'],
|
|
156
|
+
requestBody: {
|
|
157
|
+
description: 'Workflow input parameters',
|
|
158
|
+
required: true,
|
|
159
|
+
content: {
|
|
160
|
+
'application/json': {
|
|
161
|
+
schema: endpoint.inputSchema || { type: 'object', additionalProperties: true },
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
responses: {
|
|
166
|
+
'200': {
|
|
167
|
+
description: 'Successful execution',
|
|
168
|
+
content: {
|
|
169
|
+
'application/json': {
|
|
170
|
+
schema: {
|
|
171
|
+
type: 'object',
|
|
172
|
+
properties: {
|
|
173
|
+
success: { type: 'boolean' },
|
|
174
|
+
result: endpoint.outputSchema || { type: 'object' },
|
|
175
|
+
executionTime: { type: 'number' },
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
'500': {
|
|
182
|
+
description: 'Execution error',
|
|
183
|
+
content: {
|
|
184
|
+
'application/json': {
|
|
185
|
+
schema: {
|
|
186
|
+
type: 'object',
|
|
187
|
+
properties: {
|
|
188
|
+
success: { type: 'boolean' },
|
|
189
|
+
error: { type: 'object', properties: { message: { type: 'string' } } },
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
openapi: '3.0.3',
|
|
201
|
+
info: {
|
|
202
|
+
title: 'Flow Weaver API',
|
|
203
|
+
version: '1.0.0',
|
|
204
|
+
description: `Webhook server with ${endpoints.length} workflow endpoint(s)`,
|
|
205
|
+
},
|
|
206
|
+
servers: [{ url: `http://${this.config.host}:${this.config.port}`, description: 'Local server' }],
|
|
207
|
+
paths,
|
|
208
|
+
tags: [{ name: 'workflows', description: 'Workflow execution endpoints' }],
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Setup Swagger UI and OpenAPI spec routes
|
|
213
|
+
*/
|
|
214
|
+
setupSwaggerRoutes() {
|
|
215
|
+
if (!this.fastify)
|
|
216
|
+
return;
|
|
217
|
+
// GET /openapi.json - OpenAPI specification
|
|
218
|
+
this.fastify.get('/openapi.json', async (_req, reply) => {
|
|
219
|
+
const spec = this.buildOpenApiSpec();
|
|
220
|
+
reply.header('Content-Type', 'application/json');
|
|
221
|
+
reply.send(spec);
|
|
222
|
+
});
|
|
223
|
+
// GET /docs - Swagger UI
|
|
224
|
+
this.fastify.get('/docs', async (_req, reply) => {
|
|
225
|
+
const html = `<!DOCTYPE html>
|
|
226
|
+
<html lang="en">
|
|
227
|
+
<head>
|
|
228
|
+
<meta charset="UTF-8">
|
|
229
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
230
|
+
<title>Flow Weaver API Documentation</title>
|
|
231
|
+
<link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@5/swagger-ui.css">
|
|
232
|
+
</head>
|
|
233
|
+
<body>
|
|
234
|
+
<div id="swagger-ui"></div>
|
|
235
|
+
<script src="https://unpkg.com/swagger-ui-dist@5/swagger-ui-bundle.js"></script>
|
|
236
|
+
<script>
|
|
237
|
+
SwaggerUIBundle({
|
|
238
|
+
url: '/openapi.json',
|
|
239
|
+
dom_id: '#swagger-ui',
|
|
240
|
+
presets: [SwaggerUIBundle.presets.apis, SwaggerUIBundle.SwaggerUIStandalonePreset],
|
|
241
|
+
layout: 'BaseLayout'
|
|
242
|
+
});
|
|
243
|
+
</script>
|
|
244
|
+
</body>
|
|
245
|
+
</html>`;
|
|
246
|
+
reply.type('text/html').send(html);
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Get server info for external logging
|
|
251
|
+
*/
|
|
252
|
+
getServerInfo() {
|
|
253
|
+
return {
|
|
254
|
+
port: this.config.port,
|
|
255
|
+
host: this.config.host,
|
|
256
|
+
endpoints: this.registry.getAllEndpoints().length,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Stop the HTTP server
|
|
261
|
+
*/
|
|
262
|
+
async stop() {
|
|
263
|
+
await this.registry.stopWatching();
|
|
264
|
+
if (this.fastify) {
|
|
265
|
+
await this.fastify.close();
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=webhook-server.js.map
|