@flowdrop/flowdrop 1.0.0 → 1.1.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 +1081 -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 +46 -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 +197 -0
- package/dist/components/FlowDropEdge.stories.svelte.d.ts +26 -0
- package/dist/components/FlowDropEdge.svelte +168 -0
- package/dist/components/FlowDropEdge.svelte.d.ts +4 -0
- 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 +900 -746
- package/dist/components/NodeSidebar.svelte.d.ts +3 -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 -1007
- 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.d.ts +8 -0
- package/dist/config/constants.js +10 -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/schemas/v1/workflow.schema.json +22 -107
- package/dist/services/agentSpecExecutionService.d.ts +3 -3
- package/dist/services/agentSpecExecutionService.js +59 -55
- package/dist/services/api.d.ts +18 -4
- package/dist/services/api.js +46 -43
- 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 +53 -42
- 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 +125 -0
- package/dist/stories/EdgeDecorator.svelte.d.ts +17 -0
- 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 +9 -9
- package/dist/svelte-app.js +39 -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 +296 -291
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* Node Execution Service
|
|
3
3
|
* Handles fetching and managing node execution information from the backend
|
|
4
4
|
*/
|
|
5
|
-
import { getEndpointConfig } from
|
|
6
|
-
import { buildEndpointUrl } from
|
|
7
|
-
import { NODE_EXECUTION_CACHE_TIMEOUT_MS, PIPELINE_API_UNAVAILABLE_DURATION_MS } from
|
|
8
|
-
import { logger } from
|
|
5
|
+
import { getEndpointConfig } from "./api.js";
|
|
6
|
+
import { buildEndpointUrl } from "../config/endpoints.js";
|
|
7
|
+
import { NODE_EXECUTION_CACHE_TIMEOUT_MS, PIPELINE_API_UNAVAILABLE_DURATION_MS, } from "../config/constants.js";
|
|
8
|
+
import { logger } from "../utils/logger.js";
|
|
9
9
|
/**
|
|
10
10
|
* Service for managing node execution information
|
|
11
11
|
*/
|
|
@@ -33,9 +33,9 @@ export class NodeExecutionService {
|
|
|
33
33
|
try {
|
|
34
34
|
const endpointConfig = getEndpointConfig();
|
|
35
35
|
if (!endpointConfig)
|
|
36
|
-
throw new Error(
|
|
36
|
+
throw new Error("Endpoint config not available");
|
|
37
37
|
const url = buildEndpointUrl(endpointConfig, endpointConfig.endpoints.pipelines.get, {
|
|
38
|
-
id: pipelineId
|
|
38
|
+
id: pipelineId,
|
|
39
39
|
});
|
|
40
40
|
const response = await fetch(url);
|
|
41
41
|
if (!response.ok) {
|
|
@@ -49,24 +49,24 @@ export class NodeExecutionService {
|
|
|
49
49
|
const nodeStatus = nodeStatuses[nodeId];
|
|
50
50
|
if (!nodeJob && !nodeStatus) {
|
|
51
51
|
return {
|
|
52
|
-
status:
|
|
52
|
+
status: "idle",
|
|
53
53
|
executionCount: 0,
|
|
54
|
-
isExecuting: false
|
|
54
|
+
isExecuting: false,
|
|
55
55
|
};
|
|
56
56
|
}
|
|
57
57
|
const executionInfo = {
|
|
58
|
-
status: this.mapJobStatusToExecutionStatus(nodeStatus?.status || nodeJob?.status ||
|
|
58
|
+
status: this.mapJobStatusToExecutionStatus(nodeStatus?.status || nodeJob?.status || "idle"),
|
|
59
59
|
executionCount: nodeJob?.execution_count || 0,
|
|
60
|
-
isExecuting: nodeStatus?.status ===
|
|
60
|
+
isExecuting: nodeStatus?.status === "running" || nodeJob?.status === "running",
|
|
61
61
|
lastExecuted: nodeJob?.last_executed || nodeStatus?.last_executed,
|
|
62
62
|
lastExecutionDuration: nodeJob?.execution_time || nodeStatus?.execution_time,
|
|
63
|
-
lastError: nodeJob?.error || nodeStatus?.error
|
|
63
|
+
lastError: nodeJob?.error || nodeStatus?.error,
|
|
64
64
|
};
|
|
65
65
|
this.cache.set(nodeId, executionInfo);
|
|
66
66
|
return executionInfo;
|
|
67
67
|
}
|
|
68
68
|
catch (error) {
|
|
69
|
-
logger.error(
|
|
69
|
+
logger.error("Failed to fetch node execution info:", error);
|
|
70
70
|
return null;
|
|
71
71
|
}
|
|
72
72
|
}
|
|
@@ -82,9 +82,9 @@ export class NodeExecutionService {
|
|
|
82
82
|
const defaultExecutionInfo = {};
|
|
83
83
|
nodeIds.forEach((nodeId) => {
|
|
84
84
|
defaultExecutionInfo[nodeId] = {
|
|
85
|
-
status:
|
|
85
|
+
status: "idle",
|
|
86
86
|
executionCount: 0,
|
|
87
|
-
isExecuting: false
|
|
87
|
+
isExecuting: false,
|
|
88
88
|
};
|
|
89
89
|
});
|
|
90
90
|
return defaultExecutionInfo;
|
|
@@ -92,9 +92,9 @@ export class NodeExecutionService {
|
|
|
92
92
|
try {
|
|
93
93
|
const endpointConfig = getEndpointConfig();
|
|
94
94
|
if (!endpointConfig)
|
|
95
|
-
throw new Error(
|
|
95
|
+
throw new Error("Endpoint config not available");
|
|
96
96
|
const url = buildEndpointUrl(endpointConfig, endpointConfig.endpoints.pipelines.get, {
|
|
97
|
-
id: pipelineId
|
|
97
|
+
id: pipelineId,
|
|
98
98
|
});
|
|
99
99
|
const response = await fetch(url);
|
|
100
100
|
if (!response.ok) {
|
|
@@ -103,13 +103,14 @@ export class NodeExecutionService {
|
|
|
103
103
|
if (response.status === 404) {
|
|
104
104
|
logger.warn(`Pipeline API endpoint not available for pipeline ${pipelineId}`);
|
|
105
105
|
this.apiUnavailable = true;
|
|
106
|
-
this.apiUnavailableUntil =
|
|
106
|
+
this.apiUnavailableUntil =
|
|
107
|
+
Date.now() + PIPELINE_API_UNAVAILABLE_DURATION_MS;
|
|
107
108
|
const defaultExecutionInfo = {};
|
|
108
109
|
nodeIds.forEach((nodeId) => {
|
|
109
110
|
defaultExecutionInfo[nodeId] = {
|
|
110
|
-
status:
|
|
111
|
+
status: "idle",
|
|
111
112
|
executionCount: 0,
|
|
112
|
-
isExecuting: false
|
|
113
|
+
isExecuting: false,
|
|
113
114
|
};
|
|
114
115
|
});
|
|
115
116
|
return defaultExecutionInfo;
|
|
@@ -122,9 +123,9 @@ export class NodeExecutionService {
|
|
|
122
123
|
// Initialize all nodes with default values
|
|
123
124
|
nodeIds.forEach((nodeId) => {
|
|
124
125
|
executionInfoMap[nodeId] = {
|
|
125
|
-
status:
|
|
126
|
+
status: "idle",
|
|
126
127
|
executionCount: 0,
|
|
127
|
-
isExecuting: false
|
|
128
|
+
isExecuting: false,
|
|
128
129
|
};
|
|
129
130
|
});
|
|
130
131
|
// Update with actual job data
|
|
@@ -134,10 +135,10 @@ export class NodeExecutionService {
|
|
|
134
135
|
executionInfoMap[nodeId] = {
|
|
135
136
|
status: this.mapJobStatusToExecutionStatus(job.status),
|
|
136
137
|
executionCount: job.execution_count || 0,
|
|
137
|
-
isExecuting: job.status ===
|
|
138
|
+
isExecuting: job.status === "running",
|
|
138
139
|
lastExecuted: job.completed || job.started,
|
|
139
140
|
lastExecutionDuration: job.execution_time,
|
|
140
|
-
lastError: job.error_message
|
|
141
|
+
lastError: job.error_message,
|
|
141
142
|
};
|
|
142
143
|
// Update cache
|
|
143
144
|
this.cache.set(nodeId, executionInfoMap[nodeId]);
|
|
@@ -146,14 +147,14 @@ export class NodeExecutionService {
|
|
|
146
147
|
return executionInfoMap;
|
|
147
148
|
}
|
|
148
149
|
catch (error) {
|
|
149
|
-
logger.error(
|
|
150
|
+
logger.error("Failed to fetch multiple node execution info:", error);
|
|
150
151
|
// Return default values instead of empty object to prevent repeated calls
|
|
151
152
|
const defaultExecutionInfo = {};
|
|
152
153
|
nodeIds.forEach((nodeId) => {
|
|
153
154
|
defaultExecutionInfo[nodeId] = {
|
|
154
|
-
status:
|
|
155
|
+
status: "idle",
|
|
155
156
|
executionCount: 0,
|
|
156
|
-
isExecuting: false
|
|
157
|
+
isExecuting: false,
|
|
157
158
|
};
|
|
158
159
|
});
|
|
159
160
|
return defaultExecutionInfo;
|
|
@@ -166,8 +167,8 @@ export class NodeExecutionService {
|
|
|
166
167
|
try {
|
|
167
168
|
const endpointConfig = getEndpointConfig();
|
|
168
169
|
if (!endpointConfig)
|
|
169
|
-
throw new Error(
|
|
170
|
-
const url = buildEndpointUrl(endpointConfig,
|
|
170
|
+
throw new Error("Endpoint config not available");
|
|
171
|
+
const url = buildEndpointUrl(endpointConfig, "/node-execution-counts");
|
|
171
172
|
const response = await fetch(url);
|
|
172
173
|
if (!response.ok) {
|
|
173
174
|
throw new Error(`HTTP error! status: ${response.status}`);
|
|
@@ -179,7 +180,7 @@ export class NodeExecutionService {
|
|
|
179
180
|
return {};
|
|
180
181
|
}
|
|
181
182
|
catch (error) {
|
|
182
|
-
logger.error(
|
|
183
|
+
logger.error("Failed to fetch all node execution counts:", error);
|
|
183
184
|
return {};
|
|
184
185
|
}
|
|
185
186
|
}
|
|
@@ -218,10 +219,10 @@ export class NodeExecutionService {
|
|
|
218
219
|
}
|
|
219
220
|
else {
|
|
220
221
|
this.cache.set(nodeId, {
|
|
221
|
-
status:
|
|
222
|
+
status: "idle",
|
|
222
223
|
executionCount: 0,
|
|
223
224
|
isExecuting: false,
|
|
224
|
-
...executionInfo
|
|
225
|
+
...executionInfo,
|
|
225
226
|
});
|
|
226
227
|
}
|
|
227
228
|
}
|
|
@@ -230,20 +231,20 @@ export class NodeExecutionService {
|
|
|
230
231
|
*/
|
|
231
232
|
mapJobStatusToExecutionStatus(jobStatus) {
|
|
232
233
|
switch (jobStatus) {
|
|
233
|
-
case
|
|
234
|
-
return
|
|
235
|
-
case
|
|
236
|
-
return
|
|
237
|
-
case
|
|
238
|
-
return
|
|
239
|
-
case
|
|
240
|
-
return
|
|
241
|
-
case
|
|
242
|
-
return
|
|
243
|
-
case
|
|
244
|
-
return
|
|
234
|
+
case "pending":
|
|
235
|
+
return "pending";
|
|
236
|
+
case "running":
|
|
237
|
+
return "running";
|
|
238
|
+
case "completed":
|
|
239
|
+
return "completed";
|
|
240
|
+
case "failed":
|
|
241
|
+
return "failed";
|
|
242
|
+
case "cancelled":
|
|
243
|
+
return "cancelled";
|
|
244
|
+
case "skipped":
|
|
245
|
+
return "skipped";
|
|
245
246
|
default:
|
|
246
|
-
return
|
|
247
|
+
return "idle";
|
|
247
248
|
}
|
|
248
249
|
}
|
|
249
250
|
/**
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @module services/playgroundService
|
|
8
8
|
*/
|
|
9
|
-
import type { PlaygroundSession, PlaygroundMessage, PlaygroundMessagesApiResponse, PlaygroundSessionStatus } from
|
|
9
|
+
import type { PlaygroundSession, PlaygroundMessage, PlaygroundMessagesApiResponse, PlaygroundSessionStatus } from "../types/playground.js";
|
|
10
10
|
/**
|
|
11
11
|
* Playground Service class
|
|
12
12
|
*
|
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @module services/playgroundService
|
|
8
8
|
*/
|
|
9
|
-
import { defaultShouldStopPolling } from
|
|
10
|
-
import { buildEndpointUrl, getEndpointHeaders } from
|
|
11
|
-
import { getEndpointConfig } from
|
|
12
|
-
import { logger } from
|
|
9
|
+
import { defaultShouldStopPolling } from "../types/playground.js";
|
|
10
|
+
import { buildEndpointUrl, getEndpointHeaders } from "../config/endpoints.js";
|
|
11
|
+
import { getEndpointConfig } from "./api.js";
|
|
12
|
+
import { logger } from "../utils/logger.js";
|
|
13
13
|
/**
|
|
14
14
|
* Default polling interval in milliseconds
|
|
15
15
|
*/
|
|
@@ -51,7 +51,7 @@ export class PlaygroundService {
|
|
|
51
51
|
getConfig() {
|
|
52
52
|
const config = getEndpointConfig();
|
|
53
53
|
if (!config) {
|
|
54
|
-
throw new Error(
|
|
54
|
+
throw new Error("Endpoint configuration not set. Call setEndpointConfig() first.");
|
|
55
55
|
}
|
|
56
56
|
return config;
|
|
57
57
|
}
|
|
@@ -64,13 +64,13 @@ export class PlaygroundService {
|
|
|
64
64
|
*/
|
|
65
65
|
async request(url, options = {}) {
|
|
66
66
|
const config = this.getConfig();
|
|
67
|
-
const headers = getEndpointHeaders(config,
|
|
67
|
+
const headers = getEndpointHeaders(config, "playground");
|
|
68
68
|
const response = await fetch(url, {
|
|
69
69
|
...options,
|
|
70
70
|
headers: {
|
|
71
71
|
...headers,
|
|
72
|
-
...options.headers
|
|
73
|
-
}
|
|
72
|
+
...options.headers,
|
|
73
|
+
},
|
|
74
74
|
});
|
|
75
75
|
if (!response.ok) {
|
|
76
76
|
const errorData = await response.json().catch(() => ({}));
|
|
@@ -94,15 +94,15 @@ export class PlaygroundService {
|
|
|
94
94
|
async listSessions(workflowId, options) {
|
|
95
95
|
const config = this.getConfig();
|
|
96
96
|
let url = buildEndpointUrl(config, config.endpoints.playground.listSessions, {
|
|
97
|
-
id: workflowId
|
|
97
|
+
id: workflowId,
|
|
98
98
|
});
|
|
99
99
|
// Add query parameters
|
|
100
100
|
const params = new URLSearchParams();
|
|
101
101
|
if (options?.limit !== undefined) {
|
|
102
|
-
params.append(
|
|
102
|
+
params.append("limit", options.limit.toString());
|
|
103
103
|
}
|
|
104
104
|
if (options?.offset !== undefined) {
|
|
105
|
-
params.append(
|
|
105
|
+
params.append("offset", options.offset.toString());
|
|
106
106
|
}
|
|
107
107
|
const queryString = params.toString();
|
|
108
108
|
if (queryString) {
|
|
@@ -122,14 +122,14 @@ export class PlaygroundService {
|
|
|
122
122
|
async createSession(workflowId, name, metadata) {
|
|
123
123
|
const config = this.getConfig();
|
|
124
124
|
const url = buildEndpointUrl(config, config.endpoints.playground.createSession, {
|
|
125
|
-
id: workflowId
|
|
125
|
+
id: workflowId,
|
|
126
126
|
});
|
|
127
127
|
const response = await this.request(url, {
|
|
128
|
-
method:
|
|
129
|
-
body: JSON.stringify({ name, metadata })
|
|
128
|
+
method: "POST",
|
|
129
|
+
body: JSON.stringify({ name, metadata }),
|
|
130
130
|
});
|
|
131
131
|
if (!response.data) {
|
|
132
|
-
throw new Error(
|
|
132
|
+
throw new Error("Failed to create session: No data returned");
|
|
133
133
|
}
|
|
134
134
|
return response.data;
|
|
135
135
|
}
|
|
@@ -142,11 +142,11 @@ export class PlaygroundService {
|
|
|
142
142
|
async getSession(sessionId) {
|
|
143
143
|
const config = this.getConfig();
|
|
144
144
|
const url = buildEndpointUrl(config, config.endpoints.playground.getSession, {
|
|
145
|
-
sessionId
|
|
145
|
+
sessionId,
|
|
146
146
|
});
|
|
147
147
|
const response = await this.request(url);
|
|
148
148
|
if (!response.data) {
|
|
149
|
-
throw new Error(
|
|
149
|
+
throw new Error("Session not found");
|
|
150
150
|
}
|
|
151
151
|
return response.data;
|
|
152
152
|
}
|
|
@@ -158,10 +158,10 @@ export class PlaygroundService {
|
|
|
158
158
|
async deleteSession(sessionId) {
|
|
159
159
|
const config = this.getConfig();
|
|
160
160
|
const url = buildEndpointUrl(config, config.endpoints.playground.deleteSession, {
|
|
161
|
-
sessionId
|
|
161
|
+
sessionId,
|
|
162
162
|
});
|
|
163
163
|
await this.request(url, {
|
|
164
|
-
method:
|
|
164
|
+
method: "DELETE",
|
|
165
165
|
});
|
|
166
166
|
}
|
|
167
167
|
// =========================================================================
|
|
@@ -178,15 +178,15 @@ export class PlaygroundService {
|
|
|
178
178
|
async getMessages(sessionId, since, limit) {
|
|
179
179
|
const config = this.getConfig();
|
|
180
180
|
let url = buildEndpointUrl(config, config.endpoints.playground.getMessages, {
|
|
181
|
-
sessionId
|
|
181
|
+
sessionId,
|
|
182
182
|
});
|
|
183
183
|
// Add query parameters
|
|
184
184
|
const params = new URLSearchParams();
|
|
185
185
|
if (since) {
|
|
186
|
-
params.append(
|
|
186
|
+
params.append("since", since);
|
|
187
187
|
}
|
|
188
188
|
if (limit !== undefined) {
|
|
189
|
-
params.append(
|
|
189
|
+
params.append("limit", limit.toString());
|
|
190
190
|
}
|
|
191
191
|
const queryString = params.toString();
|
|
192
192
|
if (queryString) {
|
|
@@ -205,18 +205,18 @@ export class PlaygroundService {
|
|
|
205
205
|
async sendMessage(sessionId, content, inputs) {
|
|
206
206
|
const config = this.getConfig();
|
|
207
207
|
const url = buildEndpointUrl(config, config.endpoints.playground.sendMessage, {
|
|
208
|
-
sessionId
|
|
208
|
+
sessionId,
|
|
209
209
|
});
|
|
210
210
|
const requestBody = { content };
|
|
211
211
|
if (inputs) {
|
|
212
212
|
requestBody.inputs = inputs;
|
|
213
213
|
}
|
|
214
214
|
const response = await this.request(url, {
|
|
215
|
-
method:
|
|
216
|
-
body: JSON.stringify(requestBody)
|
|
215
|
+
method: "POST",
|
|
216
|
+
body: JSON.stringify(requestBody),
|
|
217
217
|
});
|
|
218
218
|
if (!response.data) {
|
|
219
|
-
throw new Error(
|
|
219
|
+
throw new Error("Failed to send message: No data returned");
|
|
220
220
|
}
|
|
221
221
|
return response.data;
|
|
222
222
|
}
|
|
@@ -228,10 +228,10 @@ export class PlaygroundService {
|
|
|
228
228
|
async stopExecution(sessionId) {
|
|
229
229
|
const config = this.getConfig();
|
|
230
230
|
const url = buildEndpointUrl(config, config.endpoints.playground.stopExecution, {
|
|
231
|
-
sessionId
|
|
231
|
+
sessionId,
|
|
232
232
|
});
|
|
233
233
|
await this.request(url, {
|
|
234
|
-
method:
|
|
234
|
+
method: "POST",
|
|
235
235
|
});
|
|
236
236
|
}
|
|
237
237
|
// =========================================================================
|
|
@@ -274,7 +274,7 @@ export class PlaygroundService {
|
|
|
274
274
|
}
|
|
275
275
|
}
|
|
276
276
|
catch (error) {
|
|
277
|
-
logger.error(
|
|
277
|
+
logger.error("Polling error:", error);
|
|
278
278
|
// Exponential backoff on error
|
|
279
279
|
this.currentBackoff = Math.min(this.currentBackoff * 2, MAX_POLLING_BACKOFF);
|
|
280
280
|
}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Port Configuration API Service
|
|
3
3
|
* Handles fetching port configuration from the backend
|
|
4
4
|
*/
|
|
5
|
-
import type { PortConfig } from
|
|
6
|
-
import type { EndpointConfig } from
|
|
5
|
+
import type { PortConfig } from "../types/index.js";
|
|
6
|
+
import type { EndpointConfig } from "../config/endpoints.js";
|
|
7
7
|
/**
|
|
8
8
|
* Fetch port configuration from API
|
|
9
9
|
*/
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Port Configuration API Service
|
|
3
3
|
* Handles fetching port configuration from the backend
|
|
4
4
|
*/
|
|
5
|
-
import { buildEndpointUrl } from
|
|
6
|
-
import { DEFAULT_PORT_CONFIG } from
|
|
7
|
-
import { logger } from
|
|
5
|
+
import { buildEndpointUrl } from "../config/endpoints.js";
|
|
6
|
+
import { DEFAULT_PORT_CONFIG } from "../config/defaultPortConfig.js";
|
|
7
|
+
import { logger } from "../utils/logger.js";
|
|
8
8
|
/**
|
|
9
9
|
* Fetch port configuration from API
|
|
10
10
|
*/
|
|
@@ -12,7 +12,7 @@ export async function fetchPortConfig(endpointConfig) {
|
|
|
12
12
|
try {
|
|
13
13
|
const url = buildEndpointUrl(endpointConfig, endpointConfig.endpoints.portConfig);
|
|
14
14
|
const response = await fetch(url, {
|
|
15
|
-
headers: {
|
|
15
|
+
headers: { "Content-Type": "application/json" },
|
|
16
16
|
});
|
|
17
17
|
if (!response.ok) {
|
|
18
18
|
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
@@ -21,13 +21,13 @@ export async function fetchPortConfig(endpointConfig) {
|
|
|
21
21
|
const portConfig = data.data ?? data;
|
|
22
22
|
// Validate the configuration has required fields
|
|
23
23
|
if (!portConfig.dataTypes || !Array.isArray(portConfig.dataTypes)) {
|
|
24
|
-
logger.warn(
|
|
24
|
+
logger.warn("Invalid port config received from API, using default");
|
|
25
25
|
return DEFAULT_PORT_CONFIG;
|
|
26
26
|
}
|
|
27
27
|
return portConfig;
|
|
28
28
|
}
|
|
29
29
|
catch (error) {
|
|
30
|
-
logger.error(
|
|
30
|
+
logger.error("Error fetching port configuration:", error);
|
|
31
31
|
return DEFAULT_PORT_CONFIG;
|
|
32
32
|
}
|
|
33
33
|
}
|
|
@@ -35,13 +35,13 @@ export async function fetchPortConfig(endpointConfig) {
|
|
|
35
35
|
* Validate port configuration structure
|
|
36
36
|
*/
|
|
37
37
|
export function validatePortConfig(config) {
|
|
38
|
-
if (!config || typeof config !==
|
|
38
|
+
if (!config || typeof config !== "object") {
|
|
39
39
|
return false;
|
|
40
40
|
}
|
|
41
41
|
if (!config.dataTypes || !Array.isArray(config.dataTypes)) {
|
|
42
42
|
return false;
|
|
43
43
|
}
|
|
44
|
-
if (!config.defaultDataType || typeof config.defaultDataType !==
|
|
44
|
+
if (!config.defaultDataType || typeof config.defaultDataType !== "string") {
|
|
45
45
|
return false;
|
|
46
46
|
}
|
|
47
47
|
// Check that all data types have required fields
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @module services/settingsService
|
|
9
9
|
*/
|
|
10
|
-
import type { FlowDropSettings, PartialSettings } from
|
|
11
|
-
import type { EndpointConfig } from
|
|
10
|
+
import type { FlowDropSettings, PartialSettings } from "../types/settings.js";
|
|
11
|
+
import type { EndpointConfig } from "../config/endpoints.js";
|
|
12
12
|
/**
|
|
13
13
|
* Set the endpoint configuration for settings API calls
|
|
14
14
|
*
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @module services/settingsService
|
|
9
9
|
*/
|
|
10
|
-
import { buildEndpointUrl, getEndpointHeaders } from
|
|
10
|
+
import { buildEndpointUrl, getEndpointHeaders } from "../config/endpoints.js";
|
|
11
11
|
// =========================================================================
|
|
12
12
|
// Configuration
|
|
13
13
|
// =========================================================================
|
|
@@ -44,17 +44,17 @@ export function getSettingsEndpointConfig() {
|
|
|
44
44
|
*/
|
|
45
45
|
async function settingsRequest(endpointKey, endpointPath, options = {}) {
|
|
46
46
|
if (!endpointConfig) {
|
|
47
|
-
throw new Error(
|
|
47
|
+
throw new Error("Endpoint configuration not set. Call setSettingsEndpointConfig() first.");
|
|
48
48
|
}
|
|
49
49
|
const url = buildEndpointUrl(endpointConfig, endpointPath);
|
|
50
50
|
const headers = getEndpointHeaders(endpointConfig, endpointKey);
|
|
51
51
|
const response = await fetch(url, {
|
|
52
52
|
headers,
|
|
53
|
-
...options
|
|
53
|
+
...options,
|
|
54
54
|
});
|
|
55
55
|
// Check if response is JSON
|
|
56
|
-
const contentType = response.headers.get(
|
|
57
|
-
const isJson = contentType?.includes(
|
|
56
|
+
const contentType = response.headers.get("content-type");
|
|
57
|
+
const isJson = contentType?.includes("application/json");
|
|
58
58
|
if (!response.ok) {
|
|
59
59
|
let errorMessage = `HTTP ${response.status}: ${response.statusText}`;
|
|
60
60
|
if (isJson) {
|
|
@@ -86,11 +86,13 @@ export const settingsApi = {
|
|
|
86
86
|
*/
|
|
87
87
|
async getPreferences() {
|
|
88
88
|
if (!endpointConfig) {
|
|
89
|
-
throw new Error(
|
|
89
|
+
throw new Error("Endpoint configuration not set");
|
|
90
90
|
}
|
|
91
|
-
const response = await settingsRequest(
|
|
91
|
+
const response = await settingsRequest("users.preferences", endpointConfig.endpoints.users.preferences, { method: "GET" });
|
|
92
92
|
if (!response.success || !response.data) {
|
|
93
|
-
throw new Error(typeof response.error ===
|
|
93
|
+
throw new Error(typeof response.error === "string"
|
|
94
|
+
? response.error
|
|
95
|
+
: "Failed to fetch user preferences");
|
|
94
96
|
}
|
|
95
97
|
return response.data;
|
|
96
98
|
},
|
|
@@ -101,14 +103,16 @@ export const settingsApi = {
|
|
|
101
103
|
*/
|
|
102
104
|
async savePreferences(settings) {
|
|
103
105
|
if (!endpointConfig) {
|
|
104
|
-
throw new Error(
|
|
106
|
+
throw new Error("Endpoint configuration not set");
|
|
105
107
|
}
|
|
106
|
-
const response = await settingsRequest(
|
|
107
|
-
method:
|
|
108
|
-
body: JSON.stringify(settings)
|
|
108
|
+
const response = await settingsRequest("users.preferences", endpointConfig.endpoints.users.preferences, {
|
|
109
|
+
method: "PUT",
|
|
110
|
+
body: JSON.stringify(settings),
|
|
109
111
|
});
|
|
110
112
|
if (!response.success) {
|
|
111
|
-
throw new Error(typeof response.error ===
|
|
113
|
+
throw new Error(typeof response.error === "string"
|
|
114
|
+
? response.error
|
|
115
|
+
: "Failed to save user preferences");
|
|
112
116
|
}
|
|
113
117
|
},
|
|
114
118
|
/**
|
|
@@ -118,17 +122,19 @@ export const settingsApi = {
|
|
|
118
122
|
*/
|
|
119
123
|
async patchPreferences(partial) {
|
|
120
124
|
if (!endpointConfig) {
|
|
121
|
-
throw new Error(
|
|
125
|
+
throw new Error("Endpoint configuration not set");
|
|
122
126
|
}
|
|
123
|
-
const response = await settingsRequest(
|
|
124
|
-
method:
|
|
125
|
-
body: JSON.stringify(partial)
|
|
127
|
+
const response = await settingsRequest("users.preferences", endpointConfig.endpoints.users.preferences, {
|
|
128
|
+
method: "PATCH",
|
|
129
|
+
body: JSON.stringify(partial),
|
|
126
130
|
});
|
|
127
131
|
if (!response.success || !response.data) {
|
|
128
|
-
throw new Error(typeof response.error ===
|
|
132
|
+
throw new Error(typeof response.error === "string"
|
|
133
|
+
? response.error
|
|
134
|
+
: "Failed to update user preferences");
|
|
129
135
|
}
|
|
130
136
|
return response.data;
|
|
131
|
-
}
|
|
137
|
+
},
|
|
132
138
|
};
|
|
133
139
|
// =========================================================================
|
|
134
140
|
// Settings Service Class (for settingsStore integration)
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Centralized toast notification service using svelte-french-toast
|
|
4
4
|
* Provides consistent toast notifications across the FlowDrop application
|
|
5
5
|
*/
|
|
6
|
-
import { type DefaultToastOptions } from
|
|
6
|
+
import { type DefaultToastOptions } from "svelte-5-french-toast";
|
|
7
7
|
/**
|
|
8
8
|
* Default toast options themed with FlowDrop design tokens.
|
|
9
9
|
* Use with <Toaster toastOptions={flowdropToastOptions} containerClassName="flowdrop-toaster" />
|
|
@@ -15,13 +15,13 @@ export declare const FLOWDROP_TOASTER_CLASS = "flowdrop-toaster";
|
|
|
15
15
|
/**
|
|
16
16
|
* Toast notification types
|
|
17
17
|
*/
|
|
18
|
-
export type ToastType =
|
|
18
|
+
export type ToastType = "success" | "error" | "warning" | "info" | "loading";
|
|
19
19
|
/**
|
|
20
20
|
* Toast configuration options
|
|
21
21
|
*/
|
|
22
22
|
export interface ToastOptions {
|
|
23
23
|
duration?: number;
|
|
24
|
-
position?:
|
|
24
|
+
position?: "top-left" | "top-center" | "top-right" | "bottom-left" | "bottom-center" | "bottom-right";
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
27
|
* Show a success toast notification
|
|
@@ -54,7 +54,7 @@ export declare function dismissAllToasts(): void;
|
|
|
54
54
|
/**
|
|
55
55
|
* Show a promise-based toast (loading -> success/error)
|
|
56
56
|
*/
|
|
57
|
-
export declare function showPromise<T>(promise: Promise<T>, { loading, success, error, options }: {
|
|
57
|
+
export declare function showPromise<T>(promise: Promise<T>, { loading, success, error, options, }: {
|
|
58
58
|
loading: string;
|
|
59
59
|
success: string | ((data: T) => string);
|
|
60
60
|
error: string | ((error: unknown) => string);
|