@flowdrop/flowdrop 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/LICENSE +21 -0
- package/README.md +252 -0
- package/dist/adapters/WorkflowAdapter.d.ts +167 -0
- package/dist/adapters/WorkflowAdapter.js +368 -0
- package/dist/adapters/agentspec/AgentSpecAdapter.d.ts +96 -0
- package/dist/adapters/agentspec/AgentSpecAdapter.js +626 -0
- package/dist/adapters/agentspec/agentAdapter.d.ts +59 -0
- package/dist/adapters/agentspec/agentAdapter.js +91 -0
- package/dist/adapters/agentspec/autoLayout.d.ts +34 -0
- package/dist/adapters/agentspec/autoLayout.js +127 -0
- package/dist/adapters/agentspec/componentTypeDefaults.d.ts +73 -0
- package/dist/adapters/agentspec/componentTypeDefaults.js +238 -0
- package/dist/adapters/agentspec/defaultNodeTypes.d.ts +53 -0
- package/dist/adapters/agentspec/defaultNodeTypes.js +561 -0
- package/dist/adapters/agentspec/index.d.ts +37 -0
- package/dist/adapters/agentspec/index.js +39 -0
- package/dist/adapters/agentspec/validator.d.ts +34 -0
- package/dist/adapters/agentspec/validator.js +169 -0
- package/dist/api/enhanced-client.d.ts +183 -0
- package/dist/api/enhanced-client.js +430 -0
- package/dist/components/App.svelte +981 -0
- package/dist/components/App.svelte.d.ts +54 -0
- package/dist/components/CanvasBanner.stories.svelte +29 -0
- package/dist/components/CanvasBanner.stories.svelte.d.ts +27 -0
- package/dist/components/CanvasBanner.svelte +57 -0
- package/dist/components/CanvasBanner.svelte.d.ts +8 -0
- package/dist/components/ConfigForm.svelte +1138 -0
- package/dist/components/ConfigForm.svelte.d.ts +44 -0
- package/dist/components/ConfigModal.svelte +188 -0
- package/dist/components/ConfigModal.svelte.d.ts +13 -0
- package/dist/components/ConfigPanel.stories.svelte +47 -0
- package/dist/components/ConfigPanel.stories.svelte.d.ts +27 -0
- package/dist/components/ConfigPanel.svelte +182 -0
- package/dist/components/ConfigPanel.svelte.d.ts +32 -0
- package/dist/components/ConnectionLine.svelte +32 -0
- package/dist/components/ConnectionLine.svelte.d.ts +3 -0
- package/dist/components/EdgeRefresher.svelte +41 -0
- package/dist/components/EdgeRefresher.svelte.d.ts +9 -0
- package/dist/components/FlowDropZone.svelte +83 -0
- package/dist/components/FlowDropZone.svelte.d.ts +13 -0
- package/dist/components/LoadingSpinner.stories.svelte +30 -0
- package/dist/components/LoadingSpinner.stories.svelte.d.ts +27 -0
- package/dist/components/LoadingSpinner.svelte +36 -0
- package/dist/components/LoadingSpinner.svelte.d.ts +8 -0
- package/dist/components/Logo.stories.svelte +22 -0
- package/dist/components/Logo.stories.svelte.d.ts +27 -0
- package/dist/components/Logo.svelte +102 -0
- package/dist/components/Logo.svelte.d.ts +26 -0
- package/dist/components/LogsSidebar.svelte +563 -0
- package/dist/components/LogsSidebar.svelte.d.ts +17 -0
- package/dist/components/MarkdownDisplay.stories.svelte +36 -0
- package/dist/components/MarkdownDisplay.stories.svelte.d.ts +27 -0
- package/dist/components/MarkdownDisplay.svelte +29 -0
- package/dist/components/MarkdownDisplay.svelte.d.ts +7 -0
- package/dist/components/Navbar.stories.svelte +53 -0
- package/dist/components/Navbar.stories.svelte.d.ts +27 -0
- package/dist/components/Navbar.svelte +726 -0
- package/dist/components/Navbar.svelte.d.ts +29 -0
- package/dist/components/NodeSidebar.svelte +762 -0
- package/dist/components/NodeSidebar.svelte.d.ts +9 -0
- package/dist/components/NodeStatusOverlay.stories.svelte +85 -0
- package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +27 -0
- package/dist/components/NodeStatusOverlay.svelte +327 -0
- package/dist/components/NodeStatusOverlay.svelte.d.ts +11 -0
- package/dist/components/PipelineStatus.svelte +314 -0
- package/dist/components/PipelineStatus.svelte.d.ts +20 -0
- package/dist/components/PortCoordinateTracker.svelte +58 -0
- package/dist/components/PortCoordinateTracker.svelte.d.ts +12 -0
- package/dist/components/ReadOnlyDetails.svelte +170 -0
- package/dist/components/ReadOnlyDetails.svelte.d.ts +25 -0
- package/dist/components/SchemaForm.stories.svelte +116 -0
- package/dist/components/SchemaForm.stories.svelte.d.ts +27 -0
- package/dist/components/SchemaForm.svelte +536 -0
- package/dist/components/SchemaForm.svelte.d.ts +83 -0
- package/dist/components/SettingsModal.svelte +279 -0
- package/dist/components/SettingsModal.svelte.d.ts +23 -0
- package/dist/components/SettingsPanel.svelte +638 -0
- package/dist/components/SettingsPanel.svelte.d.ts +21 -0
- package/dist/components/StatusIcon.stories.svelte +60 -0
- package/dist/components/StatusIcon.stories.svelte.d.ts +27 -0
- package/dist/components/StatusIcon.svelte +119 -0
- package/dist/components/StatusIcon.svelte.d.ts +10 -0
- package/dist/components/StatusLabel.stories.svelte +17 -0
- package/dist/components/StatusLabel.stories.svelte.d.ts +27 -0
- package/dist/components/StatusLabel.svelte +33 -0
- package/dist/components/StatusLabel.svelte.d.ts +7 -0
- package/dist/components/ThemeToggle.stories.svelte +25 -0
- package/dist/components/ThemeToggle.stories.svelte.d.ts +27 -0
- package/dist/components/ThemeToggle.svelte +185 -0
- package/dist/components/ThemeToggle.svelte.d.ts +14 -0
- package/dist/components/UniversalNode.svelte +155 -0
- package/dist/components/UniversalNode.svelte.d.ts +15 -0
- package/dist/components/WorkflowEditor.svelte +1035 -0
- package/dist/components/WorkflowEditor.svelte.d.ts +23 -0
- package/dist/components/form/FormArray.svelte +1049 -0
- package/dist/components/form/FormArray.svelte.d.ts +22 -0
- package/dist/components/form/FormAutocomplete.svelte +1009 -0
- package/dist/components/form/FormAutocomplete.svelte.d.ts +25 -0
- package/dist/components/form/FormCheckboxGroup.stories.svelte +28 -0
- package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormCheckboxGroup.svelte +155 -0
- package/dist/components/form/FormCheckboxGroup.svelte.d.ts +17 -0
- package/dist/components/form/FormCodeEditor.svelte +458 -0
- package/dist/components/form/FormCodeEditor.svelte.d.ts +25 -0
- package/dist/components/form/FormField.svelte +417 -0
- package/dist/components/form/FormField.svelte.d.ts +29 -0
- package/dist/components/form/FormFieldLight.svelte +425 -0
- package/dist/components/form/FormFieldLight.svelte.d.ts +18 -0
- package/dist/components/form/FormFieldWrapper.stories.svelte +53 -0
- package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormFieldWrapper.svelte +125 -0
- package/dist/components/form/FormFieldWrapper.svelte.d.ts +18 -0
- package/dist/components/form/FormFieldset.svelte +142 -0
- package/dist/components/form/FormFieldset.svelte.d.ts +11 -0
- package/dist/components/form/FormMarkdownEditor.svelte +752 -0
- package/dist/components/form/FormMarkdownEditor.svelte.d.ts +33 -0
- package/dist/components/form/FormNumberField.stories.svelte +36 -0
- package/dist/components/form/FormNumberField.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormNumberField.svelte +112 -0
- package/dist/components/form/FormNumberField.svelte.d.ts +25 -0
- package/dist/components/form/FormRangeField.stories.svelte +31 -0
- package/dist/components/form/FormRangeField.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormRangeField.svelte +246 -0
- package/dist/components/form/FormRangeField.svelte.d.ts +23 -0
- package/dist/components/form/FormSelect.stories.svelte +50 -0
- package/dist/components/form/FormSelect.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormSelect.svelte +129 -0
- package/dist/components/form/FormSelect.svelte.d.ts +20 -0
- package/dist/components/form/FormTemplateEditor.svelte +825 -0
- package/dist/components/form/FormTemplateEditor.svelte.d.ts +41 -0
- package/dist/components/form/FormTextField.stories.svelte +30 -0
- package/dist/components/form/FormTextField.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormTextField.svelte +91 -0
- package/dist/components/form/FormTextField.svelte.d.ts +19 -0
- package/dist/components/form/FormTextarea.stories.svelte +34 -0
- package/dist/components/form/FormTextarea.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormTextarea.svelte +97 -0
- package/dist/components/form/FormTextarea.svelte.d.ts +21 -0
- package/dist/components/form/FormToggle.stories.svelte +30 -0
- package/dist/components/form/FormToggle.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormToggle.svelte +126 -0
- package/dist/components/form/FormToggle.svelte.d.ts +19 -0
- package/dist/components/form/FormUISchemaRenderer.svelte +136 -0
- package/dist/components/form/FormUISchemaRenderer.svelte.d.ts +32 -0
- package/dist/components/form/index.d.ts +50 -0
- package/dist/components/form/index.js +54 -0
- package/dist/components/form/templateAutocomplete.d.ts +29 -0
- package/dist/components/form/templateAutocomplete.js +254 -0
- package/dist/components/form/types.d.ts +485 -0
- package/dist/components/form/types.js +73 -0
- package/dist/components/interrupt/ChoicePrompt.stories.svelte +52 -0
- package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +27 -0
- package/dist/components/interrupt/ChoicePrompt.svelte +401 -0
- package/dist/components/interrupt/ChoicePrompt.svelte.d.ts +23 -0
- package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +71 -0
- package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +27 -0
- package/dist/components/interrupt/ConfirmationPrompt.svelte +292 -0
- package/dist/components/interrupt/ConfirmationPrompt.svelte.d.ts +25 -0
- package/dist/components/interrupt/FormPrompt.svelte +236 -0
- package/dist/components/interrupt/FormPrompt.svelte.d.ts +23 -0
- package/dist/components/interrupt/InterruptBubble.svelte +601 -0
- package/dist/components/interrupt/InterruptBubble.svelte.d.ts +16 -0
- package/dist/components/interrupt/ReviewPrompt.stories.svelte +67 -0
- package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +27 -0
- package/dist/components/interrupt/ReviewPrompt.svelte +861 -0
- package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +23 -0
- package/dist/components/interrupt/TextInputPrompt.stories.svelte +47 -0
- package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +27 -0
- package/dist/components/interrupt/TextInputPrompt.svelte +346 -0
- package/dist/components/interrupt/TextInputPrompt.svelte.d.ts +23 -0
- package/dist/components/interrupt/index.d.ts +13 -0
- package/dist/components/interrupt/index.js +15 -0
- package/dist/components/layouts/MainLayout.svelte +718 -0
- package/dist/components/layouts/MainLayout.svelte.d.ts +62 -0
- package/dist/components/nodes/GatewayNode.stories.svelte +108 -0
- package/dist/components/nodes/GatewayNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/GatewayNode.svelte +591 -0
- package/dist/components/nodes/GatewayNode.svelte.d.ts +15 -0
- package/dist/components/nodes/IdeaNode.stories.svelte +52 -0
- package/dist/components/nodes/IdeaNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/IdeaNode.svelte +455 -0
- package/dist/components/nodes/IdeaNode.svelte.d.ts +24 -0
- package/dist/components/nodes/NotesNode.stories.svelte +76 -0
- package/dist/components/nodes/NotesNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/NotesNode.svelte +378 -0
- package/dist/components/nodes/NotesNode.svelte.d.ts +24 -0
- package/dist/components/nodes/SimpleNode.stories.svelte +159 -0
- package/dist/components/nodes/SimpleNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/SimpleNode.svelte +451 -0
- package/dist/components/nodes/SimpleNode.svelte.d.ts +25 -0
- package/dist/components/nodes/SquareNode.stories.svelte +82 -0
- package/dist/components/nodes/SquareNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/SquareNode.svelte +407 -0
- package/dist/components/nodes/SquareNode.svelte.d.ts +25 -0
- package/dist/components/nodes/TerminalNode.stories.svelte +25 -0
- package/dist/components/nodes/TerminalNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/TerminalNode.svelte +690 -0
- package/dist/components/nodes/TerminalNode.svelte.d.ts +25 -0
- package/dist/components/nodes/ToolNode.stories.svelte +189 -0
- package/dist/components/nodes/ToolNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/ToolNode.svelte +471 -0
- package/dist/components/nodes/ToolNode.svelte.d.ts +36 -0
- package/dist/components/nodes/WorkflowNode.stories.svelte +55 -0
- package/dist/components/nodes/WorkflowNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/WorkflowNode.svelte +571 -0
- package/dist/components/nodes/WorkflowNode.svelte.d.ts +15 -0
- package/dist/components/playground/ChatPanel.svelte +905 -0
- package/dist/components/playground/ChatPanel.svelte.d.ts +46 -0
- package/dist/components/playground/ExecutionLogs.svelte +488 -0
- package/dist/components/playground/ExecutionLogs.svelte.d.ts +14 -0
- package/dist/components/playground/InputCollector.svelte +444 -0
- package/dist/components/playground/InputCollector.svelte.d.ts +16 -0
- package/dist/components/playground/MessageBubble.stories.svelte +62 -0
- package/dist/components/playground/MessageBubble.stories.svelte.d.ts +27 -0
- package/dist/components/playground/MessageBubble.svelte +633 -0
- package/dist/components/playground/MessageBubble.svelte.d.ts +24 -0
- package/dist/components/playground/Playground.svelte +1075 -0
- package/dist/components/playground/Playground.svelte.d.ts +25 -0
- package/dist/components/playground/PlaygroundModal.svelte +220 -0
- package/dist/components/playground/PlaygroundModal.svelte.d.ts +25 -0
- package/dist/components/playground/SessionManager.svelte +538 -0
- package/dist/components/playground/SessionManager.svelte.d.ts +20 -0
- package/dist/config/agentSpecEndpoints.d.ts +70 -0
- package/dist/config/agentSpecEndpoints.js +65 -0
- package/dist/config/constants.d.ts +43 -0
- package/dist/config/constants.js +31 -0
- package/dist/config/defaultCategories.d.ts +7 -0
- package/dist/config/defaultCategories.js +126 -0
- package/dist/config/defaultPortConfig.d.ts +6 -0
- package/dist/config/defaultPortConfig.js +201 -0
- package/dist/config/endpoints.d.ts +160 -0
- package/dist/config/endpoints.js +146 -0
- package/dist/config/runtimeConfig.d.ts +47 -0
- package/dist/config/runtimeConfig.js +80 -0
- package/dist/core/index.d.ts +75 -0
- package/dist/core/index.js +92 -0
- package/dist/display/index.d.ts +29 -0
- package/dist/display/index.js +36 -0
- package/dist/editor/index.d.ts +95 -0
- package/dist/editor/index.js +138 -0
- package/dist/form/code.d.ts +101 -0
- package/dist/form/code.js +168 -0
- package/dist/form/fieldRegistry.d.ts +169 -0
- package/dist/form/fieldRegistry.js +152 -0
- package/dist/form/full.d.ts +56 -0
- package/dist/form/full.js +80 -0
- package/dist/form/index.d.ts +77 -0
- package/dist/form/index.js +91 -0
- package/dist/form/markdown.d.ts +69 -0
- package/dist/form/markdown.js +103 -0
- package/dist/helpers/nodeLayoutHelper.d.ts +14 -0
- package/dist/helpers/nodeLayoutHelper.js +19 -0
- package/dist/helpers/proximityConnect.d.ts +94 -0
- package/dist/helpers/proximityConnect.js +314 -0
- package/dist/helpers/workflowEditorHelper.d.ts +183 -0
- package/dist/helpers/workflowEditorHelper.js +595 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.js +64 -0
- package/dist/mocks/app-environment.d.ts +8 -0
- package/dist/mocks/app-environment.js +16 -0
- package/dist/mocks/app-forms.d.ts +2 -0
- package/dist/mocks/app-forms.js +22 -0
- package/dist/mocks/app-navigation.d.ts +5 -0
- package/dist/mocks/app-navigation.js +36 -0
- package/dist/mocks/app-stores.d.ts +14 -0
- package/dist/mocks/app-stores.js +26 -0
- package/dist/playground/index.d.ts +131 -0
- package/dist/playground/index.js +172 -0
- package/dist/playground/mount.d.ts +203 -0
- package/dist/playground/mount.js +235 -0
- package/dist/registry/BaseRegistry.d.ts +92 -0
- package/dist/registry/BaseRegistry.js +124 -0
- package/dist/registry/builtinFormats.d.ts +23 -0
- package/dist/registry/builtinFormats.js +70 -0
- package/dist/registry/builtinNodes.d.ts +77 -0
- package/dist/registry/builtinNodes.js +211 -0
- package/dist/registry/index.d.ts +8 -0
- package/dist/registry/index.js +12 -0
- package/dist/registry/nodeComponentRegistry.d.ts +276 -0
- package/dist/registry/nodeComponentRegistry.js +262 -0
- package/dist/registry/plugin.d.ts +215 -0
- package/dist/registry/plugin.js +249 -0
- package/dist/registry/workflowFormatRegistry.d.ts +122 -0
- package/dist/registry/workflowFormatRegistry.js +96 -0
- package/dist/schema/index.d.ts +23 -0
- package/dist/schema/index.js +23 -0
- package/dist/schemas/v1/workflow.schema.json +1078 -0
- package/dist/services/agentSpecExecutionService.d.ts +106 -0
- package/dist/services/agentSpecExecutionService.js +334 -0
- package/dist/services/api.d.ts +115 -0
- package/dist/services/api.js +214 -0
- package/dist/services/apiVariableService.d.ts +114 -0
- package/dist/services/apiVariableService.js +338 -0
- package/dist/services/autoSaveService.d.ts +112 -0
- package/dist/services/autoSaveService.js +227 -0
- package/dist/services/categoriesApi.d.ts +14 -0
- package/dist/services/categoriesApi.js +49 -0
- package/dist/services/draftStorage.d.ts +171 -0
- package/dist/services/draftStorage.js +299 -0
- package/dist/services/dynamicSchemaService.d.ts +108 -0
- package/dist/services/dynamicSchemaService.js +444 -0
- package/dist/services/globalSave.d.ts +69 -0
- package/dist/services/globalSave.js +248 -0
- package/dist/services/historyService.d.ts +208 -0
- package/dist/services/historyService.js +321 -0
- package/dist/services/interruptService.d.ts +133 -0
- package/dist/services/interruptService.js +280 -0
- package/dist/services/nodeExecutionService.d.ts +63 -0
- package/dist/services/nodeExecutionService.js +266 -0
- package/dist/services/playgroundService.d.ts +130 -0
- package/dist/services/playgroundService.js +321 -0
- package/dist/services/portConfigApi.d.ts +14 -0
- package/dist/services/portConfigApi.js +54 -0
- package/dist/services/settingsService.d.ts +92 -0
- package/dist/services/settingsService.js +196 -0
- package/dist/services/toastService.d.ts +156 -0
- package/dist/services/toastService.js +265 -0
- package/dist/services/variableService.d.ts +141 -0
- package/dist/services/variableService.js +463 -0
- package/dist/services/workflowStorage.d.ts +37 -0
- package/dist/services/workflowStorage.js +116 -0
- package/dist/settings/index.d.ts +25 -0
- package/dist/settings/index.js +33 -0
- package/dist/stores/categoriesStore.svelte.d.ts +32 -0
- package/dist/stores/categoriesStore.svelte.js +77 -0
- package/dist/stores/editorStateMachine.svelte.d.ts +42 -0
- package/dist/stores/editorStateMachine.svelte.js +132 -0
- package/dist/stores/historyStore.svelte.d.ts +136 -0
- package/dist/stores/historyStore.svelte.js +207 -0
- package/dist/stores/interruptStore.svelte.d.ts +179 -0
- package/dist/stores/interruptStore.svelte.js +346 -0
- package/dist/stores/playgroundStore.svelte.d.ts +230 -0
- package/dist/stores/playgroundStore.svelte.js +515 -0
- package/dist/stores/portCoordinateStore.svelte.d.ts +66 -0
- package/dist/stores/portCoordinateStore.svelte.js +186 -0
- package/dist/stores/settingsStore.svelte.d.ts +158 -0
- package/dist/stores/settingsStore.svelte.js +544 -0
- package/dist/stores/workflowStore.svelte.d.ts +260 -0
- package/dist/stores/workflowStore.svelte.js +649 -0
- package/dist/stories/CanvasDecorator.svelte +49 -0
- package/dist/stories/CanvasDecorator.svelte.d.ts +8 -0
- package/dist/stories/NodeDecorator.svelte +73 -0
- package/dist/stories/NodeDecorator.svelte.d.ts +8 -0
- package/dist/stories/utils.d.ts +93 -0
- package/dist/stories/utils.js +122 -0
- package/dist/styles/base.css +1300 -0
- package/dist/styles/toast.css +35 -0
- package/dist/styles/tokens.css +475 -0
- package/dist/svelte-app.d.ts +150 -0
- package/dist/svelte-app.js +295 -0
- package/dist/types/agentspec.d.ts +318 -0
- package/dist/types/agentspec.js +48 -0
- package/dist/types/auth.d.ts +263 -0
- package/dist/types/auth.js +229 -0
- package/dist/types/config.d.ts +151 -0
- package/dist/types/config.js +7 -0
- package/dist/types/events.d.ts +190 -0
- package/dist/types/events.js +30 -0
- package/dist/types/index.d.ts +1234 -0
- package/dist/types/index.js +27 -0
- package/dist/types/interrupt.d.ts +390 -0
- package/dist/types/interrupt.js +145 -0
- package/dist/types/interruptState.d.ts +211 -0
- package/dist/types/interruptState.js +308 -0
- package/dist/types/playground.d.ts +351 -0
- package/dist/types/playground.js +95 -0
- package/dist/types/settings.d.ts +189 -0
- package/dist/types/settings.js +97 -0
- package/dist/types/uischema.d.ts +144 -0
- package/dist/types/uischema.js +51 -0
- package/dist/utils/colors.d.ts +288 -0
- package/dist/utils/colors.js +548 -0
- package/dist/utils/config.d.ts +37 -0
- package/dist/utils/config.js +226 -0
- package/dist/utils/connections.d.ts +125 -0
- package/dist/utils/connections.js +414 -0
- package/dist/utils/errors.d.ts +28 -0
- package/dist/utils/errors.js +44 -0
- package/dist/utils/fetchWithAuth.d.ts +25 -0
- package/dist/utils/fetchWithAuth.js +34 -0
- package/dist/utils/handleIds.d.ts +35 -0
- package/dist/utils/handleIds.js +58 -0
- package/dist/utils/handlePositioning.d.ts +31 -0
- package/dist/utils/handlePositioning.js +35 -0
- package/dist/utils/icons.d.ts +106 -0
- package/dist/utils/icons.js +157 -0
- package/dist/utils/logger.d.ts +47 -0
- package/dist/utils/logger.js +72 -0
- package/dist/utils/nodeStatus.d.ts +53 -0
- package/dist/utils/nodeStatus.js +183 -0
- package/dist/utils/nodeTypes.d.ts +117 -0
- package/dist/utils/nodeTypes.js +244 -0
- package/dist/utils/nodeWrapper.d.ts +39 -0
- package/dist/utils/nodeWrapper.js +62 -0
- package/dist/utils/performanceUtils.d.ts +30 -0
- package/dist/utils/performanceUtils.js +108 -0
- package/dist/utils/sanitize.d.ts +19 -0
- package/dist/utils/sanitize.js +31 -0
- package/dist/utils/uischema.d.ts +52 -0
- package/dist/utils/uischema.js +88 -0
- package/dist/utils/validation.d.ts +29 -0
- package/dist/utils/validation.js +39 -0
- package/package.json +292 -0
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced API Client for FlowDrop
|
|
3
|
+
*
|
|
4
|
+
* Uses configurable endpoints and supports pluggable authentication providers.
|
|
5
|
+
*
|
|
6
|
+
* @module api/enhanced-client
|
|
7
|
+
*/
|
|
8
|
+
import { buildEndpointUrl, getEndpointMethod, getEndpointHeaders } from '../config/endpoints.js';
|
|
9
|
+
import { NoAuthProvider } from '../types/auth.js';
|
|
10
|
+
import { getApiSettings } from '../stores/settingsStore.svelte.js';
|
|
11
|
+
import { logger } from '../utils/logger.js';
|
|
12
|
+
import { DEFAULT_API_TIMEOUT_MS } from '../config/constants.js';
|
|
13
|
+
/**
|
|
14
|
+
* API error with additional context
|
|
15
|
+
*/
|
|
16
|
+
export class ApiError extends Error {
|
|
17
|
+
/** HTTP status code */
|
|
18
|
+
status;
|
|
19
|
+
/** Original error data from API */
|
|
20
|
+
errorData;
|
|
21
|
+
/** Operation that was being performed */
|
|
22
|
+
operation;
|
|
23
|
+
constructor(message, status, operation, errorData = {}) {
|
|
24
|
+
super(message);
|
|
25
|
+
this.name = 'ApiError';
|
|
26
|
+
this.status = status;
|
|
27
|
+
this.operation = operation;
|
|
28
|
+
this.errorData = errorData;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Enhanced HTTP API client for FlowDrop with configurable endpoints
|
|
33
|
+
*
|
|
34
|
+
* Supports pluggable authentication via AuthProvider interface.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* // With AuthProvider
|
|
39
|
+
* const client = new EnhancedFlowDropApiClient(config, authProvider);
|
|
40
|
+
*
|
|
41
|
+
* // Without authentication
|
|
42
|
+
* const client = new EnhancedFlowDropApiClient(config);
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export class EnhancedFlowDropApiClient {
|
|
46
|
+
config;
|
|
47
|
+
authProvider;
|
|
48
|
+
/**
|
|
49
|
+
* Create a new EnhancedFlowDropApiClient
|
|
50
|
+
*
|
|
51
|
+
* @param config - Endpoint configuration
|
|
52
|
+
* @param authProvider - Optional authentication provider (defaults to NoAuthProvider)
|
|
53
|
+
*/
|
|
54
|
+
constructor(config, authProvider) {
|
|
55
|
+
this.config = config;
|
|
56
|
+
// Use provided AuthProvider or default to no authentication
|
|
57
|
+
this.authProvider = authProvider ?? new NoAuthProvider();
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Make HTTP request with error handling, retry logic, timeout, and auth support
|
|
61
|
+
*
|
|
62
|
+
* Uses apiSettings for timeout and retry configuration, falling back to EndpointConfig values.
|
|
63
|
+
*
|
|
64
|
+
* @param endpointKey - Key identifying the endpoint (for method/header lookup)
|
|
65
|
+
* @param endpointPath - The endpoint path template
|
|
66
|
+
* @param params - URL parameters to substitute
|
|
67
|
+
* @param options - Additional fetch options
|
|
68
|
+
* @param operation - Description of the operation (for error messages)
|
|
69
|
+
*/
|
|
70
|
+
async request(endpointKey, endpointPath, params, options = {}, operation = 'API request') {
|
|
71
|
+
const url = buildEndpointUrl(this.config, endpointPath, params);
|
|
72
|
+
const method = options.method ?? getEndpointMethod(this.config, endpointKey);
|
|
73
|
+
const configHeaders = getEndpointHeaders(this.config, endpointKey);
|
|
74
|
+
// Get user settings for timeout and retry
|
|
75
|
+
const userApiSettings = getApiSettings();
|
|
76
|
+
// Get auth headers from provider
|
|
77
|
+
const authHeaders = await this.authProvider.getAuthHeaders();
|
|
78
|
+
// Merge headers: config headers < auth headers < request-specific headers
|
|
79
|
+
const headers = {
|
|
80
|
+
...configHeaders,
|
|
81
|
+
...authHeaders,
|
|
82
|
+
...options.headers
|
|
83
|
+
};
|
|
84
|
+
// Create AbortController for timeout
|
|
85
|
+
const controller = new AbortController();
|
|
86
|
+
const timeoutMs = userApiSettings.timeout ?? this.config.timeout ?? DEFAULT_API_TIMEOUT_MS;
|
|
87
|
+
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
|
|
88
|
+
const fetchConfig = {
|
|
89
|
+
method,
|
|
90
|
+
headers,
|
|
91
|
+
signal: controller.signal,
|
|
92
|
+
...options
|
|
93
|
+
};
|
|
94
|
+
let lastError = null;
|
|
95
|
+
// Determine retry settings: user settings override config
|
|
96
|
+
const retryEnabled = userApiSettings.retryEnabled ?? this.config.retry?.enabled ?? false;
|
|
97
|
+
const maxAttempts = retryEnabled
|
|
98
|
+
? (userApiSettings.retryAttempts ?? this.config.retry?.maxAttempts ?? 3)
|
|
99
|
+
: 1;
|
|
100
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
101
|
+
try {
|
|
102
|
+
const response = await fetch(url, fetchConfig);
|
|
103
|
+
// Clear timeout on successful response
|
|
104
|
+
clearTimeout(timeoutId);
|
|
105
|
+
// Handle 401 Unauthorized
|
|
106
|
+
if (response.status === 401) {
|
|
107
|
+
if (this.authProvider.onUnauthorized) {
|
|
108
|
+
const refreshed = await this.authProvider.onUnauthorized();
|
|
109
|
+
if (refreshed && attempt < maxAttempts) {
|
|
110
|
+
// Get new auth headers and retry
|
|
111
|
+
const newAuthHeaders = await this.authProvider.getAuthHeaders();
|
|
112
|
+
fetchConfig.headers = {
|
|
113
|
+
...configHeaders,
|
|
114
|
+
...newAuthHeaders,
|
|
115
|
+
...options.headers
|
|
116
|
+
};
|
|
117
|
+
continue; // Retry with new headers
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
throw new ApiError('Unauthorized', 401, operation, {});
|
|
121
|
+
}
|
|
122
|
+
// Handle 403 Forbidden
|
|
123
|
+
if (response.status === 403) {
|
|
124
|
+
if (this.authProvider.onForbidden) {
|
|
125
|
+
await this.authProvider.onForbidden();
|
|
126
|
+
}
|
|
127
|
+
throw new ApiError('Forbidden', 403, operation, {});
|
|
128
|
+
}
|
|
129
|
+
// Handle other errors
|
|
130
|
+
if (!response.ok) {
|
|
131
|
+
const errorData = await response.json().catch(() => ({}));
|
|
132
|
+
throw new ApiError(errorData.error ?? `HTTP ${response.status}: ${response.statusText}`, response.status, operation, errorData);
|
|
133
|
+
}
|
|
134
|
+
const data = await response.json();
|
|
135
|
+
return data;
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
// Clear timeout on error
|
|
139
|
+
clearTimeout(timeoutId);
|
|
140
|
+
// Handle abort (timeout)
|
|
141
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
142
|
+
lastError = new ApiError(`Request timeout after ${timeoutMs}ms`, 0, operation, {
|
|
143
|
+
timeout: true
|
|
144
|
+
});
|
|
145
|
+
// Don't retry on timeout - it's a client-side timeout
|
|
146
|
+
logger.error(`API request timed out after ${timeoutMs}ms:`, lastError);
|
|
147
|
+
throw lastError;
|
|
148
|
+
}
|
|
149
|
+
// If it's already an ApiError, preserve it
|
|
150
|
+
if (error instanceof ApiError) {
|
|
151
|
+
lastError = error;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
155
|
+
}
|
|
156
|
+
// Don't retry on auth errors (401, 403) or last attempt
|
|
157
|
+
if ((lastError instanceof ApiError &&
|
|
158
|
+
(lastError.status === 401 || lastError.status === 403)) ||
|
|
159
|
+
attempt === maxAttempts) {
|
|
160
|
+
logger.error(`API request failed after ${attempt} attempts:`, lastError);
|
|
161
|
+
throw lastError;
|
|
162
|
+
}
|
|
163
|
+
// Wait before retry with exponential backoff
|
|
164
|
+
const baseDelay = this.config.retry?.delay ?? 1000;
|
|
165
|
+
const backoffDelay = this.config.retry?.backoff === 'exponential'
|
|
166
|
+
? baseDelay * Math.pow(2, attempt - 1)
|
|
167
|
+
: baseDelay;
|
|
168
|
+
await new Promise((resolve) => setTimeout(resolve, backoffDelay));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
throw lastError;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Update the auth provider
|
|
175
|
+
*
|
|
176
|
+
* Useful for updating auth after token refresh in parent application.
|
|
177
|
+
* Note: Per specification, this should rarely be needed as auth is typically
|
|
178
|
+
* set at mount time and requires remount to change.
|
|
179
|
+
*
|
|
180
|
+
* @param authProvider - New authentication provider
|
|
181
|
+
*/
|
|
182
|
+
setAuthProvider(authProvider) {
|
|
183
|
+
this.authProvider = authProvider;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Get current auth provider
|
|
187
|
+
*
|
|
188
|
+
* @returns The current AuthProvider instance
|
|
189
|
+
*/
|
|
190
|
+
getAuthProvider() {
|
|
191
|
+
return this.authProvider;
|
|
192
|
+
}
|
|
193
|
+
// =========================================================================
|
|
194
|
+
// Node API Methods
|
|
195
|
+
// =========================================================================
|
|
196
|
+
/**
|
|
197
|
+
* Fetch all available node types
|
|
198
|
+
*/
|
|
199
|
+
async getAvailableNodes() {
|
|
200
|
+
const response = await this.request('nodes.list', this.config.endpoints.nodes.list, undefined, {}, 'fetch available nodes');
|
|
201
|
+
if (!response.success || !response.data) {
|
|
202
|
+
throw new Error(response.error ?? 'Failed to fetch available nodes');
|
|
203
|
+
}
|
|
204
|
+
return response.data;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Fetch nodes filtered by category
|
|
208
|
+
*/
|
|
209
|
+
async getNodesByCategory(category) {
|
|
210
|
+
const response = await this.request('nodes.byCategory', this.config.endpoints.nodes.byCategory, { category }, {}, 'fetch nodes by category');
|
|
211
|
+
if (!response.success || !response.data) {
|
|
212
|
+
throw new Error(response.error ?? 'Failed to fetch nodes by category');
|
|
213
|
+
}
|
|
214
|
+
return response.data;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Fetch metadata for a specific node type
|
|
218
|
+
*/
|
|
219
|
+
async getNodeMetadata(nodeId) {
|
|
220
|
+
const response = await this.request('nodes.metadata', this.config.endpoints.nodes.metadata, { id: nodeId }, {}, 'fetch node metadata');
|
|
221
|
+
if (!response.success || !response.data) {
|
|
222
|
+
throw new Error(response.error ?? 'Failed to fetch node metadata');
|
|
223
|
+
}
|
|
224
|
+
return response.data;
|
|
225
|
+
}
|
|
226
|
+
// =========================================================================
|
|
227
|
+
// Workflow API Methods
|
|
228
|
+
// =========================================================================
|
|
229
|
+
/**
|
|
230
|
+
* Save a new workflow
|
|
231
|
+
*/
|
|
232
|
+
async saveWorkflow(workflow) {
|
|
233
|
+
const response = await this.request('workflows.create', this.config.endpoints.workflows.create, undefined, {
|
|
234
|
+
method: 'POST',
|
|
235
|
+
body: JSON.stringify(workflow)
|
|
236
|
+
}, 'save workflow');
|
|
237
|
+
if (!response.success || !response.data) {
|
|
238
|
+
throw new Error(response.error ?? 'Failed to save workflow');
|
|
239
|
+
}
|
|
240
|
+
return response.data;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Update an existing workflow
|
|
244
|
+
*/
|
|
245
|
+
async updateWorkflow(workflowId, workflow) {
|
|
246
|
+
const response = await this.request('workflows.update', this.config.endpoints.workflows.update, { id: workflowId }, {
|
|
247
|
+
method: 'PUT',
|
|
248
|
+
body: JSON.stringify(workflow)
|
|
249
|
+
}, 'update workflow');
|
|
250
|
+
if (!response.success || !response.data) {
|
|
251
|
+
throw new Error(response.error ?? 'Failed to update workflow');
|
|
252
|
+
}
|
|
253
|
+
return response.data;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Load a workflow by ID
|
|
257
|
+
*/
|
|
258
|
+
async loadWorkflow(workflowId) {
|
|
259
|
+
const response = await this.request('workflows.get', this.config.endpoints.workflows.get, { id: workflowId }, {}, 'load workflow');
|
|
260
|
+
if (!response.success || !response.data) {
|
|
261
|
+
throw new Error(response.error ?? 'Failed to load workflow');
|
|
262
|
+
}
|
|
263
|
+
return response.data;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* List all workflows
|
|
267
|
+
*/
|
|
268
|
+
async listWorkflows() {
|
|
269
|
+
const response = await this.request('workflows.list', this.config.endpoints.workflows.list, undefined, {}, 'list workflows');
|
|
270
|
+
if (!response.success || !response.data) {
|
|
271
|
+
throw new Error(response.error ?? 'Failed to list workflows');
|
|
272
|
+
}
|
|
273
|
+
return response.data;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Delete a workflow
|
|
277
|
+
*/
|
|
278
|
+
async deleteWorkflow(workflowId) {
|
|
279
|
+
const response = await this.request('workflows.delete', this.config.endpoints.workflows.delete, { id: workflowId }, { method: 'DELETE' }, 'delete workflow');
|
|
280
|
+
if (!response.success) {
|
|
281
|
+
throw new Error(response.error ?? 'Failed to delete workflow');
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Validate a workflow
|
|
286
|
+
*/
|
|
287
|
+
async validateWorkflow(workflow) {
|
|
288
|
+
const response = await this.request('workflows.validate', this.config.endpoints.workflows.validate, undefined, {
|
|
289
|
+
method: 'POST',
|
|
290
|
+
body: JSON.stringify(workflow)
|
|
291
|
+
}, 'validate workflow');
|
|
292
|
+
if (!response.success || !response.data) {
|
|
293
|
+
throw new Error(response.error ?? 'Failed to validate workflow');
|
|
294
|
+
}
|
|
295
|
+
return response.data;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Export a workflow as JSON string
|
|
299
|
+
*/
|
|
300
|
+
async exportWorkflow(workflowId) {
|
|
301
|
+
const response = await this.request('workflows.export', this.config.endpoints.workflows.export, { id: workflowId }, {}, 'export workflow');
|
|
302
|
+
if (!response.success || !response.data) {
|
|
303
|
+
throw new Error(response.error ?? 'Failed to export workflow');
|
|
304
|
+
}
|
|
305
|
+
return response.data;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Import a workflow from JSON
|
|
309
|
+
*/
|
|
310
|
+
async importWorkflow(workflowJson) {
|
|
311
|
+
const response = await this.request('workflows.import', this.config.endpoints.workflows.import, undefined, {
|
|
312
|
+
method: 'POST',
|
|
313
|
+
body: JSON.stringify({ workflow: workflowJson })
|
|
314
|
+
}, 'import workflow');
|
|
315
|
+
if (!response.success || !response.data) {
|
|
316
|
+
throw new Error(response.error ?? 'Failed to import workflow');
|
|
317
|
+
}
|
|
318
|
+
return response.data;
|
|
319
|
+
}
|
|
320
|
+
// =========================================================================
|
|
321
|
+
// Execution API Methods
|
|
322
|
+
// =========================================================================
|
|
323
|
+
/**
|
|
324
|
+
* Execute a workflow
|
|
325
|
+
*/
|
|
326
|
+
async executeWorkflow(workflowId, inputs) {
|
|
327
|
+
const response = await this.request('executions.execute', this.config.endpoints.executions.execute, { id: workflowId }, {
|
|
328
|
+
method: 'POST',
|
|
329
|
+
body: JSON.stringify({ inputs })
|
|
330
|
+
}, 'execute workflow');
|
|
331
|
+
if (!response.success || !response.data) {
|
|
332
|
+
throw new Error(response.error ?? 'Failed to execute workflow');
|
|
333
|
+
}
|
|
334
|
+
return response.data;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Get execution status
|
|
338
|
+
*/
|
|
339
|
+
async getExecutionStatus(executionId) {
|
|
340
|
+
const response = await this.request('executions.status', this.config.endpoints.executions.status, { id: executionId }, {}, 'get execution status');
|
|
341
|
+
if (!response.success || !response.data) {
|
|
342
|
+
throw new Error(response.error ?? 'Failed to get execution status');
|
|
343
|
+
}
|
|
344
|
+
return response.data;
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Cancel a running execution
|
|
348
|
+
*/
|
|
349
|
+
async cancelExecution(executionId) {
|
|
350
|
+
const response = await this.request('executions.cancel', this.config.endpoints.executions.cancel, { id: executionId }, { method: 'POST' }, 'cancel execution');
|
|
351
|
+
if (!response.success) {
|
|
352
|
+
throw new Error(response.error ?? 'Failed to cancel execution');
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Get execution logs
|
|
357
|
+
*/
|
|
358
|
+
async getExecutionLogs(executionId) {
|
|
359
|
+
const response = await this.request('executions.logs', this.config.endpoints.executions.logs, { id: executionId }, {}, 'get execution logs');
|
|
360
|
+
if (!response.success || !response.data) {
|
|
361
|
+
throw new Error(response.error ?? 'Failed to get execution logs');
|
|
362
|
+
}
|
|
363
|
+
return response.data;
|
|
364
|
+
}
|
|
365
|
+
// =========================================================================
|
|
366
|
+
// Template API Methods
|
|
367
|
+
// =========================================================================
|
|
368
|
+
/**
|
|
369
|
+
* List available templates
|
|
370
|
+
*/
|
|
371
|
+
async listTemplates() {
|
|
372
|
+
const response = await this.request('templates.list', this.config.endpoints.templates.list, undefined, {}, 'list templates');
|
|
373
|
+
if (!response.success || !response.data) {
|
|
374
|
+
throw new Error(response.error ?? 'Failed to list templates');
|
|
375
|
+
}
|
|
376
|
+
return response.data;
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Get a template by ID
|
|
380
|
+
*/
|
|
381
|
+
async getTemplate(templateId) {
|
|
382
|
+
const response = await this.request('templates.get', this.config.endpoints.templates.get, { id: templateId }, {}, 'get template');
|
|
383
|
+
if (!response.success || !response.data) {
|
|
384
|
+
throw new Error(response.error ?? 'Failed to get template');
|
|
385
|
+
}
|
|
386
|
+
return response.data;
|
|
387
|
+
}
|
|
388
|
+
// =========================================================================
|
|
389
|
+
// System API Methods
|
|
390
|
+
// =========================================================================
|
|
391
|
+
/**
|
|
392
|
+
* Get system health status
|
|
393
|
+
*/
|
|
394
|
+
async getSystemHealth() {
|
|
395
|
+
const response = await this.request('system.health', this.config.endpoints.system.health, undefined, {}, 'get system health');
|
|
396
|
+
if (!response.success || !response.data) {
|
|
397
|
+
throw new Error(response.error ?? 'Failed to get system health');
|
|
398
|
+
}
|
|
399
|
+
return response.data;
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Get system configuration
|
|
403
|
+
*/
|
|
404
|
+
async getSystemConfig() {
|
|
405
|
+
const response = await this.request('system.config', this.config.endpoints.system.config, undefined, {}, 'get system config');
|
|
406
|
+
if (!response.success || !response.data) {
|
|
407
|
+
throw new Error(response.error ?? 'Failed to get system config');
|
|
408
|
+
}
|
|
409
|
+
return response.data;
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Get system version information
|
|
413
|
+
*/
|
|
414
|
+
async getSystemVersion() {
|
|
415
|
+
const response = await this.request('system.version', this.config.endpoints.system.version, undefined, {}, 'get system version');
|
|
416
|
+
if (!response.success || !response.data) {
|
|
417
|
+
throw new Error(response.error ?? 'Failed to get system version');
|
|
418
|
+
}
|
|
419
|
+
return response.data;
|
|
420
|
+
}
|
|
421
|
+
// =========================================================================
|
|
422
|
+
// Pipeline API Methods
|
|
423
|
+
// =========================================================================
|
|
424
|
+
/**
|
|
425
|
+
* Fetch pipeline data including job information and status
|
|
426
|
+
*/
|
|
427
|
+
async getPipelineData(pipelineId) {
|
|
428
|
+
return this.request('pipelines.get', this.config.endpoints.pipelines.get, { id: pipelineId }, {}, 'get pipeline data');
|
|
429
|
+
}
|
|
430
|
+
}
|