@flowdrop/flowdrop 1.0.1 → 1.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/README.md +50 -50
- package/dist/adapters/WorkflowAdapter.d.ts +1 -1
- package/dist/adapters/WorkflowAdapter.js +25 -25
- package/dist/adapters/agentspec/AgentSpecAdapter.d.ts +2 -2
- package/dist/adapters/agentspec/AgentSpecAdapter.js +133 -122
- package/dist/adapters/agentspec/agentAdapter.d.ts +2 -2
- package/dist/adapters/agentspec/agentAdapter.js +10 -10
- package/dist/adapters/agentspec/autoLayout.d.ts +1 -1
- package/dist/adapters/agentspec/autoLayout.js +2 -2
- package/dist/adapters/agentspec/componentTypeDefaults.d.ts +1 -1
- package/dist/adapters/agentspec/componentTypeDefaults.js +120 -120
- package/dist/adapters/agentspec/defaultNodeTypes.d.ts +2 -2
- package/dist/adapters/agentspec/defaultNodeTypes.js +307 -307
- package/dist/adapters/agentspec/index.d.ts +10 -10
- package/dist/adapters/agentspec/index.js +6 -6
- package/dist/adapters/agentspec/validator.d.ts +2 -2
- package/dist/adapters/agentspec/validator.js +22 -20
- package/dist/api/enhanced-client.d.ts +3 -3
- package/dist/api/enhanced-client.js +73 -72
- package/dist/components/App.svelte +1090 -961
- package/dist/components/App.svelte.d.ts +9 -6
- package/dist/components/CanvasBanner.stories.svelte +23 -20
- package/dist/components/CanvasBanner.stories.svelte.d.ts +1 -1
- package/dist/components/CanvasBanner.svelte +52 -46
- package/dist/components/ConfigForm.svelte +1164 -1065
- package/dist/components/ConfigForm.svelte.d.ts +2 -2
- package/dist/components/ConfigModal.svelte +180 -180
- package/dist/components/ConfigModal.svelte.d.ts +1 -1
- package/dist/components/ConfigPanel.stories.svelte +35 -35
- package/dist/components/ConfigPanel.stories.svelte.d.ts +1 -1
- package/dist/components/ConfigPanel.svelte +178 -167
- package/dist/components/ConfigPanel.svelte.d.ts +1 -1
- package/dist/components/ConnectionLine.svelte +25 -25
- package/dist/components/EdgeRefresher.svelte +26 -26
- package/dist/components/FlowDropEdge.stories.svelte +179 -143
- package/dist/components/FlowDropEdge.svelte +147 -147
- package/dist/components/FlowDropEdge.svelte.d.ts +1 -1
- package/dist/components/FlowDropZone.svelte +63 -60
- package/dist/components/FlowDropZone.svelte.d.ts +1 -1
- package/dist/components/LoadingSpinner.stories.svelte +19 -19
- package/dist/components/LoadingSpinner.stories.svelte.d.ts +1 -1
- package/dist/components/LoadingSpinner.svelte +21 -21
- package/dist/components/LoadingSpinner.svelte.d.ts +1 -1
- package/dist/components/Logo.stories.svelte +13 -13
- package/dist/components/Logo.stories.svelte.d.ts +1 -1
- package/dist/components/Logo.svelte +101 -95
- package/dist/components/LogsSidebar.svelte +553 -546
- package/dist/components/LogsSidebar.svelte.d.ts +1 -1
- package/dist/components/MarkdownDisplay.stories.svelte +29 -23
- package/dist/components/MarkdownDisplay.stories.svelte.d.ts +1 -1
- package/dist/components/MarkdownDisplay.svelte +16 -14
- package/dist/components/Navbar.stories.svelte +43 -38
- package/dist/components/Navbar.stories.svelte.d.ts +1 -1
- package/dist/components/Navbar.svelte +760 -706
- package/dist/components/Navbar.svelte.d.ts +1 -1
- package/dist/components/NodeSidebar.svelte +905 -746
- package/dist/components/NodeSidebar.svelte.d.ts +5 -1
- package/dist/components/NodeStatusOverlay.stories.svelte +82 -70
- package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +1 -1
- package/dist/components/NodeStatusOverlay.svelte +295 -280
- package/dist/components/NodeStatusOverlay.svelte.d.ts +3 -3
- package/dist/components/PipelineStatus.svelte +326 -300
- package/dist/components/PipelineStatus.svelte.d.ts +4 -4
- package/dist/components/PortCoordinateTracker.svelte +49 -47
- package/dist/components/PortCoordinateTracker.svelte.d.ts +1 -1
- package/dist/components/ReadOnlyDetails.svelte +156 -156
- package/dist/components/SchemaForm.stories.svelte +106 -98
- package/dist/components/SchemaForm.stories.svelte.d.ts +1 -1
- package/dist/components/SchemaForm.svelte +490 -463
- package/dist/components/SchemaForm.svelte.d.ts +2 -2
- package/dist/components/SettingsModal.svelte +226 -223
- package/dist/components/SettingsModal.svelte.d.ts +1 -1
- package/dist/components/SettingsPanel.svelte +637 -601
- package/dist/components/SettingsPanel.svelte.d.ts +1 -1
- package/dist/components/StatusIcon.stories.svelte +62 -49
- package/dist/components/StatusIcon.stories.svelte.d.ts +1 -1
- package/dist/components/StatusIcon.svelte +87 -87
- package/dist/components/StatusIcon.svelte.d.ts +2 -2
- package/dist/components/StatusLabel.stories.svelte +12 -12
- package/dist/components/StatusLabel.stories.svelte.d.ts +1 -1
- package/dist/components/StatusLabel.svelte +19 -19
- package/dist/components/ThemeToggle.stories.svelte +16 -16
- package/dist/components/ThemeToggle.stories.svelte.d.ts +1 -1
- package/dist/components/ThemeToggle.svelte +180 -169
- package/dist/components/ThemeToggle.svelte.d.ts +1 -1
- package/dist/components/UniversalNode.svelte +150 -138
- package/dist/components/UniversalNode.svelte.d.ts +3 -3
- package/dist/components/WorkflowEditor.svelte +1069 -1014
- package/dist/components/WorkflowEditor.svelte.d.ts +4 -4
- package/dist/components/form/FormArray.svelte +1034 -973
- package/dist/components/form/FormArray.svelte.d.ts +1 -1
- package/dist/components/form/FormAutocomplete.svelte +1021 -978
- package/dist/components/form/FormAutocomplete.svelte.d.ts +1 -1
- package/dist/components/form/FormCheckboxGroup.stories.svelte +23 -20
- package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormCheckboxGroup.svelte +136 -136
- package/dist/components/form/FormCodeEditor.svelte +452 -434
- package/dist/components/form/FormField.svelte +366 -355
- package/dist/components/form/FormField.svelte.d.ts +2 -2
- package/dist/components/form/FormFieldLight.svelte +400 -384
- package/dist/components/form/FormFieldLight.svelte.d.ts +1 -1
- package/dist/components/form/FormFieldWrapper.stories.svelte +42 -42
- package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormFieldWrapper.svelte +100 -93
- package/dist/components/form/FormFieldWrapper.svelte.d.ts +1 -1
- package/dist/components/form/FormFieldset.svelte +108 -108
- package/dist/components/form/FormFieldset.svelte.d.ts +2 -2
- package/dist/components/form/FormMarkdownEditor.svelte +758 -725
- package/dist/components/form/FormNumberField.stories.svelte +25 -25
- package/dist/components/form/FormNumberField.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormNumberField.svelte +88 -88
- package/dist/components/form/FormRangeField.stories.svelte +20 -20
- package/dist/components/form/FormRangeField.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormRangeField.svelte +234 -226
- package/dist/components/form/FormSelect.stories.svelte +38 -38
- package/dist/components/form/FormSelect.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormSelect.svelte +101 -101
- package/dist/components/form/FormSelect.svelte.d.ts +1 -1
- package/dist/components/form/FormTemplateEditor.svelte +847 -798
- package/dist/components/form/FormTemplateEditor.svelte.d.ts +1 -1
- package/dist/components/form/FormTextField.stories.svelte +29 -23
- package/dist/components/form/FormTextField.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormTextField.svelte +68 -68
- package/dist/components/form/FormTextarea.stories.svelte +28 -25
- package/dist/components/form/FormTextarea.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormTextarea.svelte +74 -74
- package/dist/components/form/FormToggle.stories.svelte +23 -20
- package/dist/components/form/FormToggle.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormToggle.svelte +98 -98
- package/dist/components/form/FormUISchemaRenderer.svelte +120 -113
- package/dist/components/form/FormUISchemaRenderer.svelte.d.ts +3 -3
- package/dist/components/form/index.d.ts +19 -19
- package/dist/components/form/index.js +18 -18
- package/dist/components/form/templateAutocomplete.d.ts +2 -2
- package/dist/components/form/templateAutocomplete.js +64 -55
- package/dist/components/form/types.d.ts +6 -6
- package/dist/components/form/types.js +9 -4
- package/dist/components/icons/AlertCircleIcon.svelte +11 -0
- package/dist/components/icons/AlertCircleIcon.svelte.d.ts +26 -0
- package/dist/components/icons/CogIcon.svelte +11 -0
- package/dist/components/icons/CogIcon.svelte.d.ts +26 -0
- package/dist/components/interrupt/ChoicePrompt.stories.svelte +54 -38
- package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/ChoicePrompt.svelte +407 -383
- package/dist/components/interrupt/ChoicePrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +48 -48
- package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/ConfirmationPrompt.svelte +280 -274
- package/dist/components/interrupt/ConfirmationPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/FormPrompt.svelte +223 -218
- package/dist/components/interrupt/FormPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/InterruptBubble.svelte +617 -583
- package/dist/components/interrupt/InterruptBubble.svelte.d.ts +2 -2
- package/dist/components/interrupt/ReviewPrompt.stories.svelte +66 -56
- package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/ReviewPrompt.svelte +861 -841
- package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/TextInputPrompt.stories.svelte +38 -33
- package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/TextInputPrompt.svelte +333 -328
- package/dist/components/interrupt/TextInputPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/index.d.ts +5 -5
- package/dist/components/interrupt/index.js +5 -5
- package/dist/components/layouts/MainLayout.svelte +724 -691
- package/dist/components/layouts/MainLayout.svelte.d.ts +6 -6
- package/dist/components/nodes/GatewayNode.stories.svelte +100 -99
- package/dist/components/nodes/GatewayNode.svelte +605 -571
- package/dist/components/nodes/GatewayNode.svelte.d.ts +3 -3
- package/dist/components/nodes/IdeaNode.stories.svelte +44 -43
- package/dist/components/nodes/IdeaNode.svelte +451 -437
- package/dist/components/nodes/IdeaNode.svelte.d.ts +1 -1
- package/dist/components/nodes/NotesNode.stories.svelte +65 -64
- package/dist/components/nodes/NotesNode.svelte +380 -369
- package/dist/components/nodes/NotesNode.svelte.d.ts +1 -1
- package/dist/components/nodes/SimpleNode.stories.svelte +145 -144
- package/dist/components/nodes/SimpleNode.svelte +486 -424
- package/dist/components/nodes/SimpleNode.svelte.d.ts +1 -1
- package/dist/components/nodes/SquareNode.stories.svelte +73 -73
- package/dist/components/nodes/SquareNode.svelte +439 -380
- package/dist/components/nodes/SquareNode.svelte.d.ts +1 -1
- package/dist/components/nodes/TerminalNode.stories.svelte +13 -13
- package/dist/components/nodes/TerminalNode.svelte +709 -670
- package/dist/components/nodes/TerminalNode.svelte.d.ts +1 -1
- package/dist/components/nodes/ToolNode.stories.svelte +181 -180
- package/dist/components/nodes/ToolNode.svelte +505 -447
- package/dist/components/nodes/ToolNode.svelte.d.ts +1 -1
- package/dist/components/nodes/WorkflowNode.stories.svelte +70 -46
- package/dist/components/nodes/WorkflowNode.svelte +621 -551
- package/dist/components/nodes/WorkflowNode.svelte.d.ts +3 -3
- package/dist/components/playground/ChatPanel.svelte +945 -889
- package/dist/components/playground/ExecutionLogs.svelte +495 -472
- package/dist/components/playground/InputCollector.svelte +449 -428
- package/dist/components/playground/MessageBubble.stories.svelte +47 -47
- package/dist/components/playground/MessageBubble.stories.svelte.d.ts +1 -1
- package/dist/components/playground/MessageBubble.svelte +626 -610
- package/dist/components/playground/MessageBubble.svelte.d.ts +1 -1
- package/dist/components/playground/Playground.svelte +1088 -1057
- package/dist/components/playground/Playground.svelte.d.ts +3 -3
- package/dist/components/playground/PlaygroundModal.svelte +208 -204
- package/dist/components/playground/PlaygroundModal.svelte.d.ts +3 -3
- package/dist/components/playground/SessionManager.svelte +527 -521
- package/dist/components/playground/SessionManager.svelte.d.ts +1 -1
- package/dist/config/agentSpecEndpoints.d.ts +1 -1
- package/dist/config/agentSpecEndpoints.js +20 -20
- package/dist/config/constants.js +2 -2
- package/dist/config/defaultCategories.d.ts +1 -1
- package/dist/config/defaultCategories.js +86 -86
- package/dist/config/defaultPortConfig.d.ts +1 -1
- package/dist/config/defaultPortConfig.js +144 -144
- package/dist/config/endpoints.d.ts +4 -4
- package/dist/config/endpoints.js +65 -65
- package/dist/config/runtimeConfig.d.ts +2 -2
- package/dist/config/runtimeConfig.js +8 -8
- package/dist/core/index.d.ts +63 -59
- package/dist/core/index.js +35 -33
- package/dist/display/index.d.ts +2 -2
- package/dist/display/index.js +2 -2
- package/dist/editor/index.d.ts +62 -62
- package/dist/editor/index.js +53 -53
- package/dist/form/code.d.ts +5 -5
- package/dist/form/code.js +14 -14
- package/dist/form/fieldRegistry.d.ts +3 -3
- package/dist/form/fieldRegistry.js +11 -9
- package/dist/form/full.d.ts +8 -8
- package/dist/form/full.js +9 -9
- package/dist/form/index.d.ts +18 -18
- package/dist/form/index.js +16 -16
- package/dist/form/markdown.d.ts +4 -4
- package/dist/form/markdown.js +8 -8
- package/dist/helpers/proximityConnect.d.ts +3 -3
- package/dist/helpers/proximityConnect.js +34 -32
- package/dist/helpers/workflowEditorHelper.d.ts +5 -5
- package/dist/helpers/workflowEditorHelper.js +108 -96
- package/dist/index.d.ts +6 -6
- package/dist/index.js +6 -6
- package/dist/mocks/app-environment.js +2 -2
- package/dist/mocks/app-forms.js +9 -9
- package/dist/mocks/app-navigation.js +11 -11
- package/dist/mocks/app-stores.js +8 -8
- package/dist/playground/index.d.ts +19 -19
- package/dist/playground/index.js +16 -16
- package/dist/playground/mount.d.ts +3 -3
- package/dist/playground/mount.js +24 -24
- package/dist/registry/builtinFormats.js +13 -13
- package/dist/registry/builtinNodes.d.ts +2 -2
- package/dist/registry/builtinNodes.js +77 -77
- package/dist/registry/index.d.ts +4 -4
- package/dist/registry/index.js +4 -4
- package/dist/registry/nodeComponentRegistry.d.ts +8 -8
- package/dist/registry/nodeComponentRegistry.js +11 -9
- package/dist/registry/plugin.d.ts +2 -2
- package/dist/registry/plugin.js +11 -11
- package/dist/registry/workflowFormatRegistry.d.ts +3 -3
- package/dist/registry/workflowFormatRegistry.js +2 -2
- package/dist/schema/index.d.ts +1 -1
- package/dist/schema/index.js +2 -2
- package/dist/services/agentSpecExecutionService.d.ts +3 -3
- package/dist/services/agentSpecExecutionService.js +59 -55
- package/dist/services/api.d.ts +2 -2
- package/dist/services/api.js +37 -37
- package/dist/services/apiVariableService.d.ts +1 -1
- package/dist/services/apiVariableService.js +41 -34
- package/dist/services/autoSaveService.js +8 -8
- package/dist/services/categoriesApi.d.ts +2 -2
- package/dist/services/categoriesApi.js +8 -8
- package/dist/services/draftStorage.d.ts +1 -1
- package/dist/services/draftStorage.js +11 -11
- package/dist/services/dynamicSchemaService.d.ts +1 -1
- package/dist/services/dynamicSchemaService.js +41 -39
- package/dist/services/globalSave.d.ts +2 -2
- package/dist/services/globalSave.js +41 -38
- package/dist/services/historyService.d.ts +1 -1
- package/dist/services/historyService.js +8 -8
- package/dist/services/interruptService.d.ts +1 -1
- package/dist/services/interruptService.js +35 -29
- package/dist/services/nodeExecutionService.d.ts +1 -1
- package/dist/services/nodeExecutionService.js +45 -44
- package/dist/services/playgroundService.d.ts +1 -1
- package/dist/services/playgroundService.js +29 -29
- package/dist/services/portConfigApi.d.ts +2 -2
- package/dist/services/portConfigApi.js +8 -8
- package/dist/services/settingsService.d.ts +2 -2
- package/dist/services/settingsService.js +25 -19
- package/dist/services/toastService.d.ts +4 -4
- package/dist/services/toastService.js +33 -33
- package/dist/services/variableService.d.ts +1 -1
- package/dist/services/variableService.js +36 -36
- package/dist/services/workflowStorage.d.ts +2 -2
- package/dist/services/workflowStorage.js +13 -13
- package/dist/settings/index.d.ts +7 -7
- package/dist/settings/index.js +6 -6
- package/dist/skins/default.d.ts +2 -0
- package/dist/skins/default.js +1 -0
- package/dist/skins/index.d.ts +13 -0
- package/dist/skins/index.js +30 -0
- package/dist/skins/slate.d.ts +2 -0
- package/dist/skins/slate.js +78 -0
- package/dist/stores/categoriesStore.svelte.d.ts +1 -1
- package/dist/stores/categoriesStore.svelte.js +5 -5
- package/dist/stores/editorStateMachine.svelte.d.ts +2 -2
- package/dist/stores/editorStateMachine.svelte.js +65 -33
- package/dist/stores/historyStore.svelte.d.ts +4 -4
- package/dist/stores/historyStore.svelte.js +4 -4
- package/dist/stores/interruptStore.svelte.d.ts +3 -3
- package/dist/stores/interruptStore.svelte.js +21 -21
- package/dist/stores/playgroundStore.svelte.d.ts +2 -2
- package/dist/stores/playgroundStore.svelte.js +25 -18
- package/dist/stores/portCoordinateStore.svelte.d.ts +2 -2
- package/dist/stores/portCoordinateStore.svelte.js +15 -8
- package/dist/stores/settingsStore.svelte.d.ts +2 -2
- package/dist/stores/settingsStore.svelte.js +62 -57
- package/dist/stores/workflowStore.svelte.d.ts +3 -3
- package/dist/stores/workflowStore.svelte.js +50 -47
- package/dist/stories/CanvasDecorator.svelte +35 -32
- package/dist/stories/CanvasDecorator.svelte.d.ts +2 -2
- package/dist/stories/EdgeDecorator.svelte +102 -99
- package/dist/stories/EdgeDecorator.svelte.d.ts +1 -1
- package/dist/stories/NodeDecorator.svelte +59 -53
- package/dist/stories/NodeDecorator.svelte.d.ts +1 -1
- package/dist/stories/utils.d.ts +2 -2
- package/dist/stories/utils.js +105 -67
- package/dist/styles/base.css +599 -595
- package/dist/styles/toast.css +14 -14
- package/dist/styles/tokens.css +409 -378
- package/dist/svelte-app.d.ts +12 -9
- package/dist/svelte-app.js +40 -39
- package/dist/themes/default.d.ts +2 -0
- package/dist/themes/default.js +9 -0
- package/dist/themes/index.d.ts +13 -0
- package/dist/themes/index.js +44 -0
- package/dist/themes/minimal.d.ts +2 -0
- package/dist/themes/minimal.js +11 -0
- package/dist/types/agentspec.d.ts +18 -18
- package/dist/types/agentspec.js +2 -2
- package/dist/types/auth.d.ts +1 -1
- package/dist/types/auth.js +6 -6
- package/dist/types/config.d.ts +6 -6
- package/dist/types/events.d.ts +2 -2
- package/dist/types/events.js +2 -2
- package/dist/types/index.d.ts +32 -32
- package/dist/types/index.js +6 -6
- package/dist/types/interrupt.d.ts +6 -6
- package/dist/types/interrupt.js +21 -21
- package/dist/types/interruptState.d.ts +12 -12
- package/dist/types/interruptState.js +66 -66
- package/dist/types/playground.d.ts +7 -7
- package/dist/types/playground.js +14 -14
- package/dist/types/settings.d.ts +5 -3
- package/dist/types/settings.js +25 -18
- package/dist/types/skin.d.ts +31 -0
- package/dist/types/skin.js +1 -0
- package/dist/types/theme.d.ts +35 -0
- package/dist/types/theme.js +1 -0
- package/dist/types/uischema.d.ts +4 -4
- package/dist/types/uischema.js +3 -3
- package/dist/utils/colors.d.ts +1 -1
- package/dist/utils/colors.js +97 -95
- package/dist/utils/config.d.ts +2 -2
- package/dist/utils/config.js +48 -48
- package/dist/utils/connections.d.ts +2 -2
- package/dist/utils/connections.js +15 -15
- package/dist/utils/errors.js +3 -3
- package/dist/utils/fetchWithAuth.d.ts +1 -1
- package/dist/utils/fetchWithAuth.js +2 -2
- package/dist/utils/handleIds.d.ts +2 -2
- package/dist/utils/handleIds.js +8 -8
- package/dist/utils/handlePositioning.d.ts +1 -1
- package/dist/utils/handlePositioning.js +2 -2
- package/dist/utils/icons.d.ts +1 -1
- package/dist/utils/icons.js +74 -74
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/logger.js +7 -7
- package/dist/utils/nodeStatus.d.ts +1 -1
- package/dist/utils/nodeStatus.js +48 -48
- package/dist/utils/nodeTypes.d.ts +1 -1
- package/dist/utils/nodeTypes.js +21 -20
- package/dist/utils/nodeWrapper.d.ts +7 -7
- package/dist/utils/nodeWrapper.js +21 -19
- package/dist/utils/performanceUtils.d.ts +1 -1
- package/dist/utils/performanceUtils.js +2 -1
- package/dist/utils/sanitize.js +1 -1
- package/dist/utils/uischema.d.ts +2 -2
- package/dist/utils/uischema.js +8 -8
- package/dist/utils/validation.js +20 -8
- package/package.json +1 -1
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @module services/dynamicSchemaService
|
|
7
7
|
*/
|
|
8
|
-
import { getEndpointConfig } from
|
|
9
|
-
import { DEFAULT_CACHE_TTL_MS } from
|
|
8
|
+
import { getEndpointConfig } from "./api.js";
|
|
9
|
+
import { DEFAULT_CACHE_TTL_MS } from "../config/constants.js";
|
|
10
10
|
/**
|
|
11
11
|
* Schema cache with TTL support
|
|
12
12
|
* Key format: `{nodeTypeId}:{instanceId}` or `{nodeTypeId}` for type-level caching
|
|
@@ -30,13 +30,13 @@ const DEFAULT_CACHE_TTL = DEFAULT_CACHE_TTL_MS;
|
|
|
30
30
|
* ```
|
|
31
31
|
*/
|
|
32
32
|
function resolveVariablePath(context, path) {
|
|
33
|
-
const parts = path.split(
|
|
33
|
+
const parts = path.split(".");
|
|
34
34
|
let current = context;
|
|
35
35
|
for (const part of parts) {
|
|
36
36
|
if (current === null || current === undefined) {
|
|
37
37
|
return undefined;
|
|
38
38
|
}
|
|
39
|
-
if (typeof current ===
|
|
39
|
+
if (typeof current === "object" && part in current) {
|
|
40
40
|
current = current[part];
|
|
41
41
|
}
|
|
42
42
|
else {
|
|
@@ -77,7 +77,7 @@ function resolveTemplate(template, parameterMapping, context) {
|
|
|
77
77
|
const value = resolveVariablePath(context, contextPath);
|
|
78
78
|
if (value !== undefined) {
|
|
79
79
|
// Use global regex to replace all occurrences
|
|
80
|
-
const regex = new RegExp(`\\{${variableName}\\}`,
|
|
80
|
+
const regex = new RegExp(`\\{${variableName}\\}`, "g");
|
|
81
81
|
resolved = resolved.replace(regex, encodeURIComponent(value));
|
|
82
82
|
}
|
|
83
83
|
}
|
|
@@ -145,7 +145,7 @@ export async function fetchDynamicSchema(endpoint, node, workflowId) {
|
|
|
145
145
|
metadata: node.data.metadata,
|
|
146
146
|
config: node.data.config,
|
|
147
147
|
extensions: node.data.extensions,
|
|
148
|
-
workflowId
|
|
148
|
+
workflowId,
|
|
149
149
|
};
|
|
150
150
|
// Generate cache key
|
|
151
151
|
const cacheKey = generateCacheKey(endpoint, context);
|
|
@@ -156,39 +156,41 @@ export async function fetchDynamicSchema(endpoint, node, workflowId) {
|
|
|
156
156
|
return {
|
|
157
157
|
success: true,
|
|
158
158
|
schema: cached.schema,
|
|
159
|
-
fromCache: true
|
|
159
|
+
fromCache: true,
|
|
160
160
|
};
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
163
|
// Resolve the URL with template variables
|
|
164
164
|
let url = resolveTemplate(endpoint.url, endpoint.parameterMapping, context);
|
|
165
165
|
// If URL is relative, try to prepend base URL from endpoint config
|
|
166
|
-
if (url.startsWith(
|
|
166
|
+
if (url.startsWith("/")) {
|
|
167
167
|
const currentConfig = getEndpointConfig();
|
|
168
168
|
if (currentConfig?.baseUrl) {
|
|
169
169
|
// Remove trailing slash from base URL and leading slash from relative URL
|
|
170
|
-
const baseUrl = currentConfig.baseUrl.replace(/\/$/,
|
|
170
|
+
const baseUrl = currentConfig.baseUrl.replace(/\/$/, "");
|
|
171
171
|
url = `${baseUrl}${url}`;
|
|
172
172
|
}
|
|
173
173
|
}
|
|
174
174
|
// Prepare request options
|
|
175
|
-
const method = endpoint.method ??
|
|
175
|
+
const method = endpoint.method ?? "GET";
|
|
176
176
|
const timeout = endpoint.timeout ?? 10000;
|
|
177
177
|
const headers = {
|
|
178
|
-
Accept:
|
|
179
|
-
|
|
180
|
-
...endpoint.headers
|
|
178
|
+
Accept: "application/json",
|
|
179
|
+
"Content-Type": "application/json",
|
|
180
|
+
...endpoint.headers,
|
|
181
181
|
};
|
|
182
182
|
// Add auth headers from endpoint config if available
|
|
183
183
|
const currentConfig = getEndpointConfig();
|
|
184
184
|
if (currentConfig?.auth) {
|
|
185
|
-
if (currentConfig.auth.type ===
|
|
186
|
-
headers[
|
|
185
|
+
if (currentConfig.auth.type === "bearer" && currentConfig.auth.token) {
|
|
186
|
+
headers["Authorization"] = `Bearer ${currentConfig.auth.token}`;
|
|
187
187
|
}
|
|
188
|
-
else if (currentConfig.auth.type ===
|
|
189
|
-
|
|
188
|
+
else if (currentConfig.auth.type === "api_key" &&
|
|
189
|
+
currentConfig.auth.apiKey) {
|
|
190
|
+
headers["X-API-Key"] = currentConfig.auth.apiKey;
|
|
190
191
|
}
|
|
191
|
-
else if (currentConfig.auth.type ===
|
|
192
|
+
else if (currentConfig.auth.type === "custom" &&
|
|
193
|
+
currentConfig.auth.headers) {
|
|
192
194
|
Object.assign(headers, currentConfig.auth.headers);
|
|
193
195
|
}
|
|
194
196
|
}
|
|
@@ -196,14 +198,14 @@ export async function fetchDynamicSchema(endpoint, node, workflowId) {
|
|
|
196
198
|
const fetchOptions = {
|
|
197
199
|
method,
|
|
198
200
|
headers,
|
|
199
|
-
signal: AbortSignal.timeout(timeout)
|
|
201
|
+
signal: AbortSignal.timeout(timeout),
|
|
200
202
|
};
|
|
201
203
|
// Add body for non-GET requests
|
|
202
|
-
if (method !==
|
|
204
|
+
if (method !== "GET" && endpoint.body) {
|
|
203
205
|
// Resolve any template variables in the body
|
|
204
206
|
const resolvedBody = {};
|
|
205
207
|
for (const [key, value] of Object.entries(endpoint.body)) {
|
|
206
|
-
if (typeof value ===
|
|
208
|
+
if (typeof value === "string") {
|
|
207
209
|
resolvedBody[key] = resolveTemplate(value, endpoint.parameterMapping, context);
|
|
208
210
|
}
|
|
209
211
|
else {
|
|
@@ -218,7 +220,7 @@ export async function fetchDynamicSchema(endpoint, node, workflowId) {
|
|
|
218
220
|
const errorText = await response.text();
|
|
219
221
|
return {
|
|
220
222
|
success: false,
|
|
221
|
-
error: `HTTP ${response.status}: ${errorText || response.statusText}
|
|
223
|
+
error: `HTTP ${response.status}: ${errorText || response.statusText}`,
|
|
222
224
|
};
|
|
223
225
|
}
|
|
224
226
|
const data = await response.json();
|
|
@@ -227,26 +229,26 @@ export async function fetchDynamicSchema(endpoint, node, workflowId) {
|
|
|
227
229
|
// 2. Wrapped in { data: ConfigSchema } or { schema: ConfigSchema }
|
|
228
230
|
// 3. Wrapped in { success: true, data: ConfigSchema }
|
|
229
231
|
let schema;
|
|
230
|
-
if (data.type ===
|
|
232
|
+
if (data.type === "object" && data.properties) {
|
|
231
233
|
// Direct ConfigSchema
|
|
232
234
|
schema = data;
|
|
233
235
|
}
|
|
234
|
-
else if (data.data?.type ===
|
|
236
|
+
else if (data.data?.type === "object" && data.data?.properties) {
|
|
235
237
|
// Wrapped in { data: ... }
|
|
236
238
|
schema = data.data;
|
|
237
239
|
}
|
|
238
|
-
else if (data.schema?.type ===
|
|
240
|
+
else if (data.schema?.type === "object" && data.schema?.properties) {
|
|
239
241
|
// Wrapped in { schema: ... }
|
|
240
242
|
schema = data.schema;
|
|
241
243
|
}
|
|
242
|
-
else if (data.success && data.data?.type ===
|
|
244
|
+
else if (data.success && data.data?.type === "object") {
|
|
243
245
|
// Wrapped in { success: true, data: ... }
|
|
244
246
|
schema = data.data;
|
|
245
247
|
}
|
|
246
248
|
if (!schema) {
|
|
247
249
|
return {
|
|
248
250
|
success: false,
|
|
249
|
-
error:
|
|
251
|
+
error: "Invalid schema format received from endpoint",
|
|
250
252
|
};
|
|
251
253
|
}
|
|
252
254
|
// Cache the schema (if caching is enabled)
|
|
@@ -254,32 +256,32 @@ export async function fetchDynamicSchema(endpoint, node, workflowId) {
|
|
|
254
256
|
schemaCache.set(cacheKey, {
|
|
255
257
|
schema,
|
|
256
258
|
cachedAt: Date.now(),
|
|
257
|
-
cacheKey
|
|
259
|
+
cacheKey,
|
|
258
260
|
});
|
|
259
261
|
}
|
|
260
262
|
return {
|
|
261
263
|
success: true,
|
|
262
264
|
schema,
|
|
263
|
-
fromCache: false
|
|
265
|
+
fromCache: false,
|
|
264
266
|
};
|
|
265
267
|
}
|
|
266
268
|
catch (error) {
|
|
267
269
|
// Handle specific error types
|
|
268
270
|
if (error instanceof Error) {
|
|
269
|
-
if (error.name ===
|
|
271
|
+
if (error.name === "AbortError" || error.name === "TimeoutError") {
|
|
270
272
|
return {
|
|
271
273
|
success: false,
|
|
272
|
-
error: `Request timed out after ${timeout}ms
|
|
274
|
+
error: `Request timed out after ${timeout}ms`,
|
|
273
275
|
};
|
|
274
276
|
}
|
|
275
277
|
return {
|
|
276
278
|
success: false,
|
|
277
|
-
error: error.message
|
|
279
|
+
error: error.message,
|
|
278
280
|
};
|
|
279
281
|
}
|
|
280
282
|
return {
|
|
281
283
|
success: false,
|
|
282
|
-
error:
|
|
284
|
+
error: "Unknown error occurred while fetching schema",
|
|
283
285
|
};
|
|
284
286
|
}
|
|
285
287
|
}
|
|
@@ -311,13 +313,13 @@ export function resolveExternalEditUrl(link, node, workflowId, callbackUrl) {
|
|
|
311
313
|
metadata: node.data.metadata,
|
|
312
314
|
config: node.data.config,
|
|
313
315
|
extensions: node.data.extensions,
|
|
314
|
-
workflowId
|
|
316
|
+
workflowId,
|
|
315
317
|
};
|
|
316
318
|
// Resolve the URL with template variables
|
|
317
319
|
let url = resolveTemplate(link.url, link.parameterMapping, context);
|
|
318
320
|
// Append callback URL if configured
|
|
319
321
|
if (callbackUrl && link.callbackUrlParam) {
|
|
320
|
-
const separator = url.includes(
|
|
322
|
+
const separator = url.includes("?") ? "&" : "?";
|
|
321
323
|
url = `${url}${separator}${link.callbackUrlParam}=${encodeURIComponent(callbackUrl)}`;
|
|
322
324
|
}
|
|
323
325
|
return url;
|
|
@@ -351,16 +353,16 @@ export function getEffectiveConfigEditOptions(node) {
|
|
|
351
353
|
externalEditLink: (instanceConfig.externalEditLink ?? typeConfig.externalEditLink)
|
|
352
354
|
? {
|
|
353
355
|
...(typeConfig.externalEditLink ?? {}),
|
|
354
|
-
...(instanceConfig.externalEditLink ?? {})
|
|
356
|
+
...(instanceConfig.externalEditLink ?? {}),
|
|
355
357
|
}
|
|
356
358
|
: undefined,
|
|
357
359
|
// Deep merge dynamic schema
|
|
358
360
|
dynamicSchema: (instanceConfig.dynamicSchema ?? typeConfig.dynamicSchema)
|
|
359
361
|
? {
|
|
360
362
|
...(typeConfig.dynamicSchema ?? {}),
|
|
361
|
-
...(instanceConfig.dynamicSchema ?? {})
|
|
363
|
+
...(instanceConfig.dynamicSchema ?? {}),
|
|
362
364
|
}
|
|
363
|
-
: undefined
|
|
365
|
+
: undefined,
|
|
364
366
|
};
|
|
365
367
|
}
|
|
366
368
|
/**
|
|
@@ -393,7 +395,7 @@ export function invalidateSchemaCache(node, endpoint) {
|
|
|
393
395
|
type: node.type,
|
|
394
396
|
metadata: node.data.metadata,
|
|
395
397
|
config: node.data.config,
|
|
396
|
-
extensions: node.data.extensions
|
|
398
|
+
extensions: node.data.extensions,
|
|
397
399
|
};
|
|
398
400
|
const cacheKey = generateCacheKey(endpoint, context);
|
|
399
401
|
schemaCache.delete(cacheKey);
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* reimplementing the logic, ensuring "blur active element" flushing and metadata
|
|
8
8
|
* construction happen in exactly one place.
|
|
9
9
|
*/
|
|
10
|
-
import type { Workflow } from
|
|
11
|
-
import type { FlowDropEventHandlers, FlowDropFeatures } from
|
|
10
|
+
import type { Workflow } from "../types/index.js";
|
|
11
|
+
import type { FlowDropEventHandlers, FlowDropFeatures } from "../types/events.js";
|
|
12
12
|
/**
|
|
13
13
|
* Minimal interface for the enhanced API client used when an authProvider is present.
|
|
14
14
|
* Matches the surface of EnhancedFlowDropApiClient that save needs.
|
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
* reimplementing the logic, ensuring "blur active element" flushing and metadata
|
|
8
8
|
* construction happen in exactly one place.
|
|
9
9
|
*/
|
|
10
|
-
import { tick } from
|
|
11
|
-
import { getWorkflowStore, workflowActions, markAsSaved as storeMarkAsSaved } from
|
|
12
|
-
import { workflowApi, setEndpointConfig } from
|
|
13
|
-
import { createEndpointConfig } from
|
|
14
|
-
import { v4 as uuidv4 } from
|
|
15
|
-
import { DEFAULT_WORKFLOW_FORMAT } from
|
|
16
|
-
import { apiToasts, workflowToasts, dismissToast } from
|
|
17
|
-
import { DEFAULT_FEATURES } from
|
|
10
|
+
import { tick } from "svelte";
|
|
11
|
+
import { getWorkflowStore, workflowActions, markAsSaved as storeMarkAsSaved, } from "../stores/workflowStore.svelte.js";
|
|
12
|
+
import { workflowApi, setEndpointConfig } from "./api.js";
|
|
13
|
+
import { createEndpointConfig } from "../config/endpoints.js";
|
|
14
|
+
import { v4 as uuidv4 } from "uuid";
|
|
15
|
+
import { DEFAULT_WORKFLOW_FORMAT } from "../types/index.js";
|
|
16
|
+
import { apiToasts, workflowToasts, dismissToast } from "./toastService.js";
|
|
17
|
+
import { DEFAULT_FEATURES } from "../types/events.js";
|
|
18
18
|
// ---------------------------------------------------------------------------
|
|
19
19
|
// Internal helpers
|
|
20
20
|
// ---------------------------------------------------------------------------
|
|
@@ -25,7 +25,7 @@ import { DEFAULT_FEATURES } from '../types/events.js';
|
|
|
25
25
|
*/
|
|
26
26
|
async function ensureApiConfiguration() {
|
|
27
27
|
try {
|
|
28
|
-
const { getEndpointConfig } = await import(
|
|
28
|
+
const { getEndpointConfig } = await import("./api.js");
|
|
29
29
|
const currentConfig = getEndpointConfig();
|
|
30
30
|
if (currentConfig && currentConfig.baseUrl) {
|
|
31
31
|
return;
|
|
@@ -35,20 +35,20 @@ async function ensureApiConfiguration() {
|
|
|
35
35
|
// Could not check existing API configuration, initializing
|
|
36
36
|
}
|
|
37
37
|
// API configuration is not initialized — derive URL from window.location when available
|
|
38
|
-
const apiBaseUrl = typeof window !==
|
|
38
|
+
const apiBaseUrl = typeof window !== "undefined"
|
|
39
39
|
? `${window.location.protocol}//${window.location.host}/api/flowdrop`
|
|
40
|
-
:
|
|
40
|
+
: "/api/flowdrop";
|
|
41
41
|
const config = createEndpointConfig(apiBaseUrl, {
|
|
42
42
|
auth: {
|
|
43
|
-
type:
|
|
43
|
+
type: "none",
|
|
44
44
|
},
|
|
45
45
|
timeout: 10000,
|
|
46
46
|
retry: {
|
|
47
47
|
enabled: true,
|
|
48
48
|
maxAttempts: 2,
|
|
49
49
|
delay: 1000,
|
|
50
|
-
backoff:
|
|
51
|
-
}
|
|
50
|
+
backoff: "exponential",
|
|
51
|
+
},
|
|
52
52
|
});
|
|
53
53
|
setEndpointConfig(config);
|
|
54
54
|
}
|
|
@@ -60,7 +60,8 @@ async function ensureApiConfiguration() {
|
|
|
60
60
|
* Must be called once, in this file only, so the logic lives in exactly one place.
|
|
61
61
|
*/
|
|
62
62
|
async function flushPendingFormChanges() {
|
|
63
|
-
if (typeof document !==
|
|
63
|
+
if (typeof document !== "undefined" &&
|
|
64
|
+
document.activeElement instanceof HTMLElement) {
|
|
64
65
|
document.activeElement.blur();
|
|
65
66
|
}
|
|
66
67
|
// Wait for any pending DOM / Svelte reactive updates before reading the store
|
|
@@ -93,7 +94,7 @@ export async function globalSaveWorkflow(options = {}) {
|
|
|
93
94
|
const currentWorkflow = getWorkflowStore();
|
|
94
95
|
if (!currentWorkflow) {
|
|
95
96
|
if (features.showToasts) {
|
|
96
|
-
apiToasts.error(
|
|
97
|
+
apiToasts.error("Save workflow", "No workflow to save");
|
|
97
98
|
}
|
|
98
99
|
return;
|
|
99
100
|
}
|
|
@@ -104,7 +105,9 @@ export async function globalSaveWorkflow(options = {}) {
|
|
|
104
105
|
return;
|
|
105
106
|
}
|
|
106
107
|
}
|
|
107
|
-
const loadingToast = features.showToasts
|
|
108
|
+
const loadingToast = features.showToasts
|
|
109
|
+
? apiToasts.loading("Saving workflow")
|
|
110
|
+
: null;
|
|
108
111
|
try {
|
|
109
112
|
// Ensure API configuration is initialised (needed when called outside App.svelte)
|
|
110
113
|
await ensureApiConfiguration();
|
|
@@ -118,17 +121,17 @@ export async function globalSaveWorkflow(options = {}) {
|
|
|
118
121
|
const workflowId = currentWorkflow.id || uuidv4();
|
|
119
122
|
const finalWorkflow = {
|
|
120
123
|
id: workflowId,
|
|
121
|
-
name: currentWorkflow.name ||
|
|
122
|
-
description: currentWorkflow.description ||
|
|
124
|
+
name: currentWorkflow.name || "Untitled Workflow",
|
|
125
|
+
description: currentWorkflow.description || "",
|
|
123
126
|
nodes: currentWorkflow.nodes || [],
|
|
124
127
|
edges: currentWorkflow.edges || [],
|
|
125
128
|
metadata: {
|
|
126
129
|
...currentWorkflow.metadata,
|
|
127
|
-
version: currentWorkflow.metadata?.version ||
|
|
130
|
+
version: currentWorkflow.metadata?.version || "1.0.0",
|
|
128
131
|
format: currentWorkflow.metadata?.format || DEFAULT_WORKFLOW_FORMAT,
|
|
129
132
|
createdAt: currentWorkflow.metadata?.createdAt || new Date().toISOString(),
|
|
130
|
-
updatedAt: new Date().toISOString()
|
|
131
|
-
}
|
|
133
|
+
updatedAt: new Date().toISOString(),
|
|
134
|
+
},
|
|
132
135
|
};
|
|
133
136
|
// Step 4 — Persist
|
|
134
137
|
let savedWorkflow;
|
|
@@ -158,8 +161,8 @@ export async function globalSaveWorkflow(options = {}) {
|
|
|
158
161
|
name: finalWorkflow.name,
|
|
159
162
|
metadata: {
|
|
160
163
|
...finalWorkflow.metadata,
|
|
161
|
-
...savedWorkflow.metadata
|
|
162
|
-
}
|
|
164
|
+
...savedWorkflow.metadata,
|
|
165
|
+
},
|
|
163
166
|
});
|
|
164
167
|
}
|
|
165
168
|
// Step 6a — Mark dirty state as clean
|
|
@@ -184,7 +187,7 @@ export async function globalSaveWorkflow(options = {}) {
|
|
|
184
187
|
catch (error) {
|
|
185
188
|
if (loadingToast)
|
|
186
189
|
dismissToast(loadingToast);
|
|
187
|
-
const errorObj = error instanceof Error ? error : new Error(
|
|
190
|
+
const errorObj = error instanceof Error ? error : new Error("Unknown error occurred");
|
|
188
191
|
// onSaveError hook
|
|
189
192
|
const currentWorkflowForError = getWorkflowStore();
|
|
190
193
|
if (eventHandlers?.onSaveError && currentWorkflowForError) {
|
|
@@ -193,10 +196,10 @@ export async function globalSaveWorkflow(options = {}) {
|
|
|
193
196
|
// onApiError hook — return true suppresses the default toast
|
|
194
197
|
let suppressToast = false;
|
|
195
198
|
if (eventHandlers?.onApiError) {
|
|
196
|
-
suppressToast = eventHandlers.onApiError(errorObj,
|
|
199
|
+
suppressToast = eventHandlers.onApiError(errorObj, "save") === true;
|
|
197
200
|
}
|
|
198
201
|
if (features.showToasts && !suppressToast) {
|
|
199
|
-
apiToasts.error(
|
|
202
|
+
apiToasts.error("Save workflow", errorObj.message);
|
|
200
203
|
}
|
|
201
204
|
throw error;
|
|
202
205
|
}
|
|
@@ -217,30 +220,30 @@ export async function globalExportWorkflow(options = {}) {
|
|
|
217
220
|
const currentWorkflow = getWorkflowStore();
|
|
218
221
|
if (!currentWorkflow) {
|
|
219
222
|
if (features.showToasts) {
|
|
220
|
-
apiToasts.error(
|
|
223
|
+
apiToasts.error("Export workflow", "No workflow to export");
|
|
221
224
|
}
|
|
222
225
|
return;
|
|
223
226
|
}
|
|
224
227
|
// Build the canonical export object — preserve all metadata fields
|
|
225
228
|
const finalWorkflow = {
|
|
226
|
-
id: currentWorkflow.id ||
|
|
227
|
-
name: currentWorkflow.name ||
|
|
228
|
-
description: currentWorkflow.description ||
|
|
229
|
+
id: currentWorkflow.id || "untitled-workflow",
|
|
230
|
+
name: currentWorkflow.name || "Untitled Workflow",
|
|
231
|
+
description: currentWorkflow.description || "",
|
|
229
232
|
nodes: currentWorkflow.nodes || [],
|
|
230
233
|
edges: currentWorkflow.edges || [],
|
|
231
234
|
metadata: {
|
|
232
235
|
...currentWorkflow.metadata,
|
|
233
|
-
version: currentWorkflow.metadata?.version ||
|
|
236
|
+
version: currentWorkflow.metadata?.version || "1.0.0",
|
|
234
237
|
format: currentWorkflow.metadata?.format || DEFAULT_WORKFLOW_FORMAT,
|
|
235
238
|
createdAt: currentWorkflow.metadata?.createdAt || new Date().toISOString(),
|
|
236
|
-
updatedAt: new Date().toISOString()
|
|
237
|
-
}
|
|
239
|
+
updatedAt: new Date().toISOString(),
|
|
240
|
+
},
|
|
238
241
|
};
|
|
239
242
|
// Trigger browser download
|
|
240
243
|
const dataStr = JSON.stringify(finalWorkflow, null, 2);
|
|
241
|
-
const dataBlob = new Blob([dataStr], { type:
|
|
244
|
+
const dataBlob = new Blob([dataStr], { type: "application/json" });
|
|
242
245
|
const url = URL.createObjectURL(dataBlob);
|
|
243
|
-
const link = document.createElement(
|
|
246
|
+
const link = document.createElement("a");
|
|
244
247
|
link.href = url;
|
|
245
248
|
link.download = `${finalWorkflow.name}.json`;
|
|
246
249
|
link.click();
|
|
@@ -250,7 +253,7 @@ export async function globalExportWorkflow(options = {}) {
|
|
|
250
253
|
}
|
|
251
254
|
}
|
|
252
255
|
catch (error) {
|
|
253
|
-
const errorObj = error instanceof Error ? error : new Error(
|
|
254
|
-
apiToasts.error(
|
|
256
|
+
const errorObj = error instanceof Error ? error : new Error("Unknown error occurred");
|
|
257
|
+
apiToasts.error("Export workflow", errorObj.message);
|
|
255
258
|
}
|
|
256
259
|
}
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @module services/historyService
|
|
8
8
|
*/
|
|
9
|
-
import { DEFAULT_BEHAVIOR_SETTINGS } from
|
|
10
|
-
import { logger } from
|
|
9
|
+
import { DEFAULT_BEHAVIOR_SETTINGS } from "../types/settings.js";
|
|
10
|
+
import { logger } from "../utils/logger.js";
|
|
11
11
|
// =========================================================================
|
|
12
12
|
// History Service Class
|
|
13
13
|
// =========================================================================
|
|
@@ -77,7 +77,7 @@ export class HistoryService {
|
|
|
77
77
|
this.undoStack.push({
|
|
78
78
|
snapshot: this.cloneWorkflow(workflow),
|
|
79
79
|
timestamp: Date.now(),
|
|
80
|
-
description:
|
|
80
|
+
description: "Initial state",
|
|
81
81
|
});
|
|
82
82
|
this.notifyChange();
|
|
83
83
|
}
|
|
@@ -154,7 +154,7 @@ export class HistoryService {
|
|
|
154
154
|
*/
|
|
155
155
|
startTransaction(workflow, description) {
|
|
156
156
|
if (this.inTransaction) {
|
|
157
|
-
logger.warn(
|
|
157
|
+
logger.warn("HistoryService: Transaction already in progress, ignoring startTransaction");
|
|
158
158
|
return;
|
|
159
159
|
}
|
|
160
160
|
this.inTransaction = true;
|
|
@@ -168,7 +168,7 @@ export class HistoryService {
|
|
|
168
168
|
*/
|
|
169
169
|
commitTransaction() {
|
|
170
170
|
if (!this.inTransaction || !this.transactionSnapshot) {
|
|
171
|
-
logger.warn(
|
|
171
|
+
logger.warn("HistoryService: No transaction in progress, ignoring commitTransaction");
|
|
172
172
|
return;
|
|
173
173
|
}
|
|
174
174
|
// Push the snapshot captured at transaction start
|
|
@@ -205,7 +205,7 @@ export class HistoryService {
|
|
|
205
205
|
this.undoStack.push({
|
|
206
206
|
snapshot: this.cloneWorkflow(currentWorkflow),
|
|
207
207
|
timestamp: Date.now(),
|
|
208
|
-
description:
|
|
208
|
+
description: "Initial state",
|
|
209
209
|
});
|
|
210
210
|
}
|
|
211
211
|
this.notifyChange();
|
|
@@ -221,7 +221,7 @@ export class HistoryService {
|
|
|
221
221
|
canRedo: this.redoStack.length > 0,
|
|
222
222
|
currentIndex: this.undoStack.length - 1,
|
|
223
223
|
historyLength: this.undoStack.length + this.redoStack.length,
|
|
224
|
-
isInTransaction: this.inTransaction
|
|
224
|
+
isInTransaction: this.inTransaction,
|
|
225
225
|
};
|
|
226
226
|
}
|
|
227
227
|
/**
|
|
@@ -272,7 +272,7 @@ export class HistoryService {
|
|
|
272
272
|
this.undoStack.push({
|
|
273
273
|
snapshot: this.cloneWorkflow(workflow),
|
|
274
274
|
timestamp: Date.now(),
|
|
275
|
-
description
|
|
275
|
+
description,
|
|
276
276
|
});
|
|
277
277
|
// Trim history if over limit
|
|
278
278
|
this.trimHistory();
|