@d34dman/flowdrop 0.0.1 → 0.0.2
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 +307 -215
- package/dist/adapters/WorkflowAdapter.d.ts +1 -1
- package/dist/adapters/WorkflowAdapter.js +30 -30
- package/dist/api/client.d.ts +24 -1
- package/dist/api/client.js +55 -38
- package/dist/api/enhanced-client.d.ts +46 -0
- package/dist/api/enhanced-client.js +211 -0
- package/dist/clients/ApiClient.d.ts +19 -23
- package/dist/clients/ApiClient.js +36 -34
- package/dist/components/App.svelte +1299 -230
- package/dist/components/App.svelte.d.ts +21 -1
- package/dist/components/CanvasBanner.svelte +50 -44
- package/dist/components/CanvasBanner.svelte.d.ts +5 -19
- package/dist/components/ConfigForm.svelte +555 -0
- package/dist/components/ConfigForm.svelte.d.ts +32 -0
- package/dist/components/ConfigModal.svelte +261 -0
- package/dist/components/ConfigModal.svelte.d.ts +31 -0
- package/dist/components/ConfigSidebar.svelte +934 -0
- package/dist/components/ConfigSidebar.svelte.d.ts +51 -0
- package/dist/components/ConnectionLine.svelte +32 -0
- package/dist/components/ConnectionLine.svelte.d.ts +3 -0
- package/dist/components/GatewayNode.svelte +471 -0
- package/dist/components/GatewayNode.svelte.d.ts +15 -0
- package/dist/components/LoadingSpinner.svelte +23 -23
- package/dist/components/LoadingSpinner.svelte.d.ts +1 -1
- package/dist/components/Logo.svelte +82 -0
- package/dist/components/Logo.svelte.d.ts +26 -0
- package/dist/components/LogsSidebar.svelte +565 -0
- package/dist/components/LogsSidebar.svelte.d.ts +34 -0
- package/dist/components/MarkdownDisplay.svelte +28 -0
- package/dist/components/MarkdownDisplay.svelte.d.ts +7 -0
- package/dist/components/Navbar.svelte +663 -0
- package/dist/components/Navbar.svelte.d.ts +21 -0
- package/dist/components/NodeSidebar.svelte +629 -488
- package/dist/components/NodeSidebar.svelte.d.ts +1 -2
- package/dist/components/NodeStatusOverlay.svelte +327 -0
- package/dist/components/NodeStatusOverlay.svelte.d.ts +11 -0
- package/dist/components/NotesNode.svelte +566 -0
- package/dist/components/NotesNode.svelte.d.ts +43 -0
- package/dist/components/PipelineStatus.svelte +331 -0
- package/dist/components/PipelineStatus.svelte.d.ts +18 -0
- package/dist/components/SimpleNode.svelte +447 -0
- package/dist/components/SimpleNode.svelte.d.ts +24 -0
- package/dist/components/SquareNode.svelte +346 -0
- package/dist/components/SquareNode.svelte.d.ts +24 -0
- package/dist/components/StatusIcon.svelte +112 -0
- package/dist/components/StatusIcon.svelte.d.ts +10 -0
- package/dist/components/StatusLabel.svelte +33 -0
- package/dist/components/StatusLabel.svelte.d.ts +7 -0
- package/dist/components/ToolNode.svelte +385 -0
- package/dist/components/ToolNode.svelte.d.ts +36 -0
- package/dist/components/UniversalNode.svelte +126 -0
- package/dist/components/UniversalNode.svelte.d.ts +15 -0
- package/dist/components/WorkflowEditor.svelte +871 -528
- package/dist/components/WorkflowEditor.svelte.d.ts +15 -5
- package/dist/components/WorkflowNode.svelte +428 -542
- package/dist/components/WorkflowNode.svelte.d.ts +7 -3
- package/dist/config/apiConfig.d.ts +33 -0
- package/dist/config/apiConfig.js +39 -0
- package/dist/config/defaultPortConfig.d.ts +6 -0
- package/dist/config/defaultPortConfig.js +192 -0
- package/dist/config/demo.d.ts +58 -0
- package/dist/config/demo.js +142 -0
- package/dist/config/endpoints.d.ts +106 -0
- package/dist/config/endpoints.js +128 -0
- package/dist/data/samples.d.ts +38 -4
- package/dist/data/samples.js +2789 -737
- package/dist/examples/adapter-usage.d.ts +4 -4
- package/dist/examples/adapter-usage.js +21 -26
- package/dist/examples/api-client-usage.d.ts +6 -6
- package/dist/examples/api-client-usage.js +55 -54
- package/dist/index.d.ts +23 -15
- package/dist/index.js +23 -15
- 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 +21 -0
- package/dist/mocks/app-navigation.d.ts +5 -0
- package/dist/mocks/app-navigation.js +34 -0
- package/dist/mocks/app-stores.d.ts +14 -0
- package/dist/mocks/app-stores.js +26 -0
- package/dist/services/api.d.ts +13 -3
- package/dist/services/api.js +91 -36
- package/dist/services/globalSave.d.ts +20 -0
- package/dist/services/globalSave.js +165 -0
- package/dist/services/nodeExecutionService.d.ts +63 -0
- package/dist/services/nodeExecutionService.js +261 -0
- package/dist/services/portConfigApi.d.ts +14 -0
- package/dist/services/portConfigApi.js +69 -0
- package/dist/services/toastService.d.ts +147 -0
- package/dist/services/toastService.js +235 -0
- package/dist/services/workflowStorage.d.ts +2 -2
- package/dist/services/workflowStorage.js +10 -10
- package/dist/stores/workflowStore.d.ts +53 -0
- package/dist/stores/workflowStore.js +264 -0
- package/dist/styles/base.css +896 -363
- package/dist/svelte-app.d.ts +52 -5
- package/dist/svelte-app.js +128 -6
- package/dist/types/config.d.ts +291 -0
- package/dist/types/config.js +4 -0
- package/dist/types/index.d.ts +231 -19
- package/dist/types/index.js +1 -1
- package/dist/utils/colors.d.ts +67 -33
- package/dist/utils/colors.js +183 -118
- package/dist/utils/config.d.ts +41 -0
- package/dist/utils/config.js +248 -0
- package/dist/utils/connections.d.ts +40 -3
- package/dist/utils/connections.js +115 -44
- package/dist/utils/icons.d.ts +1 -1
- package/dist/utils/icons.js +71 -70
- package/dist/utils/nodeStatus.d.ts +53 -0
- package/dist/utils/nodeStatus.js +183 -0
- package/dist/utils/nodeTypes.d.ts +57 -0
- package/dist/utils/nodeTypes.js +109 -0
- package/dist/utils/nodeWrapper.d.ts +39 -0
- package/dist/utils/nodeWrapper.js +62 -0
- package/package.json +129 -97
- package/dist/components/Node.svelte +0 -38
- package/dist/components/Node.svelte.d.ts +0 -4
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Example: Using WorkflowAdapter for workflow management
|
|
3
3
|
* This demonstrates how systems can work with workflows without knowing SvelteFlow internals
|
|
4
4
|
*/
|
|
5
|
-
import { type StandardWorkflow } from
|
|
5
|
+
import { type StandardWorkflow } from '../adapters/WorkflowAdapter.js';
|
|
6
6
|
declare function createSimpleWorkflow(): StandardWorkflow;
|
|
7
7
|
declare function analyzeWorkflow(workflow: StandardWorkflow): {
|
|
8
8
|
stats: {
|
|
@@ -13,7 +13,7 @@ declare function analyzeWorkflow(workflow: StandardWorkflow): {
|
|
|
13
13
|
};
|
|
14
14
|
lastModified: string;
|
|
15
15
|
};
|
|
16
|
-
validation: import("../
|
|
16
|
+
validation: import("../index.js").WorkflowValidationResult;
|
|
17
17
|
complexity: number;
|
|
18
18
|
};
|
|
19
19
|
declare function calculateComplexity(workflow: StandardWorkflow): number;
|
|
@@ -50,12 +50,12 @@ declare function getAvailableNodeTypes(): {
|
|
|
50
50
|
description: string;
|
|
51
51
|
inputs: {
|
|
52
52
|
name: string;
|
|
53
|
-
type:
|
|
53
|
+
type: string;
|
|
54
54
|
required: boolean;
|
|
55
55
|
}[];
|
|
56
56
|
outputs: {
|
|
57
57
|
name: string;
|
|
58
|
-
type:
|
|
58
|
+
type: string;
|
|
59
59
|
}[];
|
|
60
60
|
}[];
|
|
61
61
|
declare function validateGeneratedWorkflow(workflowJson: string): {
|
|
@@ -2,41 +2,36 @@
|
|
|
2
2
|
* Example: Using WorkflowAdapter for workflow management
|
|
3
3
|
* This demonstrates how systems can work with workflows without knowing SvelteFlow internals
|
|
4
4
|
*/
|
|
5
|
-
import { WorkflowAdapter } from
|
|
6
|
-
import { sampleNodes } from
|
|
5
|
+
import { WorkflowAdapter } from '../adapters/WorkflowAdapter.js';
|
|
6
|
+
import { sampleNodes } from '../data/samples.js';
|
|
7
7
|
// Initialize the adapter with available node types
|
|
8
8
|
const adapter = new WorkflowAdapter(sampleNodes);
|
|
9
9
|
// Example 1: Create a simple workflow programmatically
|
|
10
10
|
function createSimpleWorkflow() {
|
|
11
|
-
const workflow = adapter.createWorkflow(
|
|
11
|
+
const workflow = adapter.createWorkflow('Chat Workflow', 'A simple chat workflow');
|
|
12
12
|
// Add nodes
|
|
13
|
-
const inputNode = adapter.addNode(workflow,
|
|
14
|
-
placeholder:
|
|
13
|
+
const inputNode = adapter.addNode(workflow, 'text-input', { x: 100, y: 100 }, {
|
|
14
|
+
placeholder: 'Enter your message'
|
|
15
15
|
});
|
|
16
|
-
const modelNode = adapter.addNode(workflow,
|
|
17
|
-
model:
|
|
16
|
+
const modelNode = adapter.addNode(workflow, 'openai', { x: 300, y: 100 }, {
|
|
17
|
+
model: 'gpt-4',
|
|
18
18
|
temperature: 0.7
|
|
19
19
|
});
|
|
20
|
-
const outputNode = adapter.addNode(workflow,
|
|
20
|
+
const outputNode = adapter.addNode(workflow, 'text-output', { x: 500, y: 100 });
|
|
21
21
|
// Connect nodes
|
|
22
|
-
adapter.addEdge(workflow, inputNode.id, modelNode.id,
|
|
23
|
-
adapter.addEdge(workflow, modelNode.id, outputNode.id,
|
|
22
|
+
adapter.addEdge(workflow, inputNode.id, modelNode.id, 'text', 'prompt');
|
|
23
|
+
adapter.addEdge(workflow, modelNode.id, outputNode.id, 'text', 'text');
|
|
24
24
|
return workflow;
|
|
25
25
|
}
|
|
26
26
|
// Example 2: Analyze a workflow structure
|
|
27
27
|
function analyzeWorkflow(workflow) {
|
|
28
28
|
const stats = adapter.getWorkflowStats(workflow);
|
|
29
29
|
const validation = adapter.validateWorkflow(workflow);
|
|
30
|
-
console.log("Workflow Analysis:");
|
|
31
|
-
console.log(`- Total nodes: ${stats.totalNodes}`);
|
|
32
|
-
console.log(`- Total edges: ${stats.totalEdges}`);
|
|
33
|
-
console.log(`- Node types:`, stats.nodeTypeCounts);
|
|
34
|
-
console.log(`- Valid: ${validation.valid}`);
|
|
35
30
|
if (validation.errors.length > 0) {
|
|
36
|
-
console.log(
|
|
31
|
+
console.log('Errors:', validation.errors);
|
|
37
32
|
}
|
|
38
33
|
if (validation.warnings.length > 0) {
|
|
39
|
-
console.log(
|
|
34
|
+
console.log('Warnings:', validation.warnings);
|
|
40
35
|
}
|
|
41
36
|
return {
|
|
42
37
|
stats,
|
|
@@ -69,13 +64,13 @@ function importWorkflow(json) {
|
|
|
69
64
|
// Example 6: Get workflow structure for analysis
|
|
70
65
|
function getWorkflowStructure(workflow) {
|
|
71
66
|
return {
|
|
72
|
-
nodes: workflow.nodes.map(node => ({
|
|
67
|
+
nodes: workflow.nodes.map((node) => ({
|
|
73
68
|
id: node.id,
|
|
74
69
|
type: node.type,
|
|
75
70
|
position: node.position,
|
|
76
71
|
config: node.data.config
|
|
77
72
|
})),
|
|
78
|
-
edges: workflow.edges.map(edge => ({
|
|
73
|
+
edges: workflow.edges.map((edge) => ({
|
|
79
74
|
source: edge.source,
|
|
80
75
|
target: edge.target,
|
|
81
76
|
sourceHandle: edge.sourceHandle,
|
|
@@ -91,17 +86,17 @@ function getWorkflowStructure(workflow) {
|
|
|
91
86
|
}
|
|
92
87
|
// Example 7: Get available node types
|
|
93
88
|
function getAvailableNodeTypes() {
|
|
94
|
-
return sampleNodes.map(node => ({
|
|
89
|
+
return sampleNodes.map((node) => ({
|
|
95
90
|
id: node.id,
|
|
96
91
|
name: node.name,
|
|
97
92
|
category: node.category,
|
|
98
93
|
description: node.description,
|
|
99
|
-
inputs: node.inputs.map(input => ({
|
|
94
|
+
inputs: node.inputs.map((input) => ({
|
|
100
95
|
name: input.name,
|
|
101
96
|
type: input.dataType,
|
|
102
97
|
required: input.required
|
|
103
98
|
})),
|
|
104
|
-
outputs: node.outputs.map(output => ({
|
|
99
|
+
outputs: node.outputs.map((output) => ({
|
|
105
100
|
name: output.name,
|
|
106
101
|
type: output.dataType
|
|
107
102
|
}))
|
|
@@ -115,10 +110,10 @@ function validateGeneratedWorkflow(workflowJson) {
|
|
|
115
110
|
const suggestions = [];
|
|
116
111
|
// Provide suggestions based on validation results
|
|
117
112
|
if (workflow.nodes.length === 0) {
|
|
118
|
-
suggestions.push(
|
|
113
|
+
suggestions.push('Consider adding input and output nodes');
|
|
119
114
|
}
|
|
120
115
|
if (workflow.edges.length === 0) {
|
|
121
|
-
suggestions.push(
|
|
116
|
+
suggestions.push('Connect nodes to create a data flow');
|
|
122
117
|
}
|
|
123
118
|
return {
|
|
124
119
|
valid: validation.valid,
|
|
@@ -129,8 +124,8 @@ function validateGeneratedWorkflow(workflowJson) {
|
|
|
129
124
|
catch (error) {
|
|
130
125
|
return {
|
|
131
126
|
valid: false,
|
|
132
|
-
errors: [error instanceof Error ? error.message :
|
|
133
|
-
suggestions: [
|
|
127
|
+
errors: [error instanceof Error ? error.message : 'Unknown error'],
|
|
128
|
+
suggestions: ['Check the JSON format and required fields']
|
|
134
129
|
};
|
|
135
130
|
}
|
|
136
131
|
}
|
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
* Example: Using FlowDrop API Client
|
|
3
3
|
* This demonstrates how to integrate with FlowDrop API from backend applications
|
|
4
4
|
*/
|
|
5
|
-
import type { Workflow } from
|
|
5
|
+
import type { Workflow } from '../types/index.js';
|
|
6
6
|
declare function checkApiHealth(): Promise<{
|
|
7
7
|
status: string;
|
|
8
8
|
timestamp: string;
|
|
9
9
|
version: string;
|
|
10
10
|
}>;
|
|
11
|
-
declare function getNodeTypes(): Promise<import("../
|
|
12
|
-
declare function manageWorkflows(): Promise<import("../
|
|
13
|
-
declare function executeWorkflow(workflowId: string): Promise<import("../
|
|
14
|
-
declare function importExportWorkflow(workflowId: string): Promise<import("../
|
|
15
|
-
declare function validateWorkflow(workflow: Workflow): Promise<import("../
|
|
11
|
+
declare function getNodeTypes(): Promise<import("../index.js").NodesResponse>;
|
|
12
|
+
declare function manageWorkflows(): Promise<import("../index.js").WorkflowResponse>;
|
|
13
|
+
declare function executeWorkflow(workflowId: string): Promise<import("../index.js").ExecutionStatusResponse>;
|
|
14
|
+
declare function importExportWorkflow(workflowId: string): Promise<import("../index.js").WorkflowResponse>;
|
|
15
|
+
declare function validateWorkflow(workflow: Workflow): Promise<import("../index.js").ValidationResponse>;
|
|
16
16
|
declare function handleApiErrors(): Promise<void>;
|
|
17
17
|
declare function batchOperations(): Promise<PromiseSettledResult<{
|
|
18
18
|
id: string;
|
|
@@ -2,23 +2,23 @@
|
|
|
2
2
|
* Example: Using FlowDrop API Client
|
|
3
3
|
* This demonstrates how to integrate with FlowDrop API from backend applications
|
|
4
4
|
*/
|
|
5
|
-
import { ApiClient } from
|
|
5
|
+
import { ApiClient } from '../clients/ApiClient.js';
|
|
6
6
|
// Initialize the API client
|
|
7
7
|
const apiClient = new ApiClient({
|
|
8
|
-
baseUrl:
|
|
9
|
-
apiKey:
|
|
8
|
+
baseUrl: 'https://api.flowdrop.dev/v1',
|
|
9
|
+
apiKey: 'your-api-key-here',
|
|
10
10
|
timeout: 30000
|
|
11
11
|
});
|
|
12
12
|
// Example 1: Health check
|
|
13
13
|
async function checkApiHealth() {
|
|
14
14
|
try {
|
|
15
15
|
const health = await apiClient.healthCheck();
|
|
16
|
-
console.log(
|
|
17
|
-
console.log(
|
|
16
|
+
console.log('API Status:', health.status);
|
|
17
|
+
console.log('API Version:', health.version);
|
|
18
18
|
return health;
|
|
19
19
|
}
|
|
20
20
|
catch (error) {
|
|
21
|
-
console.error(
|
|
21
|
+
console.error('API Health Check Failed:', error);
|
|
22
22
|
throw error;
|
|
23
23
|
}
|
|
24
24
|
}
|
|
@@ -29,15 +29,15 @@ async function getNodeTypes() {
|
|
|
29
29
|
const allNodes = await apiClient.getNodeTypes();
|
|
30
30
|
console.log(`Found ${allNodes.data?.length || 0} node types`);
|
|
31
31
|
// Get node types by category
|
|
32
|
-
const modelNodes = await apiClient.getNodeTypesByCategory(
|
|
32
|
+
const modelNodes = await apiClient.getNodeTypesByCategory('models');
|
|
33
33
|
console.log(`Found ${modelNodes.data?.length || 0} model nodes`);
|
|
34
34
|
// Search for specific nodes
|
|
35
|
-
const searchResults = await apiClient.getNodeTypes({ search:
|
|
35
|
+
const searchResults = await apiClient.getNodeTypes({ search: 'openai' });
|
|
36
36
|
console.log(`Found ${searchResults.data?.length || 0} OpenAI-related nodes`);
|
|
37
37
|
return allNodes;
|
|
38
38
|
}
|
|
39
39
|
catch (error) {
|
|
40
|
-
console.error(
|
|
40
|
+
console.error('Failed to get node types:', error);
|
|
41
41
|
throw error;
|
|
42
42
|
}
|
|
43
43
|
}
|
|
@@ -46,26 +46,26 @@ async function manageWorkflows() {
|
|
|
46
46
|
try {
|
|
47
47
|
// Create a new workflow
|
|
48
48
|
const createRequest = {
|
|
49
|
-
name:
|
|
50
|
-
description:
|
|
51
|
-
tags: [
|
|
49
|
+
name: 'Chat Workflow',
|
|
50
|
+
description: 'A simple chat workflow created via API',
|
|
51
|
+
tags: ['chat', 'demo']
|
|
52
52
|
};
|
|
53
53
|
const newWorkflow = await apiClient.createWorkflow(createRequest);
|
|
54
|
-
console.log(
|
|
54
|
+
console.log('Created workflow:', newWorkflow.data?.id);
|
|
55
55
|
// Get all workflows
|
|
56
56
|
const workflows = await apiClient.getWorkflows({
|
|
57
57
|
limit: 10,
|
|
58
|
-
sort:
|
|
59
|
-
order:
|
|
58
|
+
sort: 'created_at',
|
|
59
|
+
order: 'desc'
|
|
60
60
|
});
|
|
61
61
|
console.log(`Found ${workflows.data?.length || 0} workflows`);
|
|
62
62
|
// Get workflows by tag
|
|
63
|
-
const chatWorkflows = await apiClient.getWorkflowsByTag(
|
|
63
|
+
const chatWorkflows = await apiClient.getWorkflowsByTag('chat');
|
|
64
64
|
console.log(`Found ${chatWorkflows.data?.length || 0} chat workflows`);
|
|
65
65
|
return newWorkflow;
|
|
66
66
|
}
|
|
67
67
|
catch (error) {
|
|
68
|
-
console.error(
|
|
68
|
+
console.error('Failed to manage workflows:', error);
|
|
69
69
|
throw error;
|
|
70
70
|
}
|
|
71
71
|
}
|
|
@@ -75,7 +75,7 @@ async function executeWorkflow(workflowId) {
|
|
|
75
75
|
// Start execution
|
|
76
76
|
const execution = await apiClient.executeWorkflow(workflowId, {
|
|
77
77
|
inputs: {
|
|
78
|
-
message:
|
|
78
|
+
message: 'Hello, how are you?',
|
|
79
79
|
temperature: 0.7
|
|
80
80
|
},
|
|
81
81
|
options: {
|
|
@@ -83,20 +83,20 @@ async function executeWorkflow(workflowId) {
|
|
|
83
83
|
maxSteps: 100
|
|
84
84
|
}
|
|
85
85
|
});
|
|
86
|
-
console.log(
|
|
86
|
+
console.log('Execution started:', execution.data?.executionId);
|
|
87
87
|
// Wait for completion
|
|
88
88
|
const result = await apiClient.waitForExecution(execution.data.executionId);
|
|
89
|
-
if (result.data?.status ===
|
|
90
|
-
console.log(
|
|
91
|
-
console.log(
|
|
89
|
+
if (result.data?.status === 'completed') {
|
|
90
|
+
console.log('Execution completed successfully');
|
|
91
|
+
console.log('Result:', result.data?.result);
|
|
92
92
|
}
|
|
93
93
|
else {
|
|
94
|
-
console.log(
|
|
94
|
+
console.log('Execution failed:', result.data?.error);
|
|
95
95
|
}
|
|
96
96
|
return result;
|
|
97
97
|
}
|
|
98
98
|
catch (error) {
|
|
99
|
-
console.error(
|
|
99
|
+
console.error('Failed to execute workflow:', error);
|
|
100
100
|
throw error;
|
|
101
101
|
}
|
|
102
102
|
}
|
|
@@ -104,12 +104,12 @@ async function executeWorkflow(workflowId) {
|
|
|
104
104
|
async function importExportWorkflow(workflowId) {
|
|
105
105
|
try {
|
|
106
106
|
// Export workflow
|
|
107
|
-
const exportedWorkflow = await apiClient.exportWorkflow(workflowId,
|
|
108
|
-
console.log(
|
|
107
|
+
const exportedWorkflow = await apiClient.exportWorkflow(workflowId, 'json');
|
|
108
|
+
console.log('Exported workflow:', exportedWorkflow.name);
|
|
109
109
|
// Modify the exported workflow
|
|
110
110
|
const modifiedWorkflow = {
|
|
111
111
|
...exportedWorkflow,
|
|
112
|
-
id:
|
|
112
|
+
id: '', // Will be generated by server
|
|
113
113
|
name: `${exportedWorkflow.name} (Imported)`,
|
|
114
114
|
metadata: {
|
|
115
115
|
...exportedWorkflow.metadata,
|
|
@@ -119,11 +119,11 @@ async function importExportWorkflow(workflowId) {
|
|
|
119
119
|
};
|
|
120
120
|
// Import the modified workflow
|
|
121
121
|
const importedWorkflow = await apiClient.importWorkflow(modifiedWorkflow);
|
|
122
|
-
console.log(
|
|
122
|
+
console.log('Imported workflow:', importedWorkflow.data?.id);
|
|
123
123
|
return importedWorkflow;
|
|
124
124
|
}
|
|
125
125
|
catch (error) {
|
|
126
|
-
console.error(
|
|
126
|
+
console.error('Failed to import/export workflow:', error);
|
|
127
127
|
throw error;
|
|
128
128
|
}
|
|
129
129
|
}
|
|
@@ -132,18 +132,18 @@ async function validateWorkflow(workflow) {
|
|
|
132
132
|
try {
|
|
133
133
|
const validation = await apiClient.validateWorkflow(workflow);
|
|
134
134
|
if (validation.data?.valid) {
|
|
135
|
-
console.log(
|
|
135
|
+
console.log('Workflow is valid');
|
|
136
136
|
}
|
|
137
137
|
else {
|
|
138
|
-
console.log(
|
|
139
|
-
console.log(
|
|
140
|
-
console.log(
|
|
141
|
-
console.log(
|
|
138
|
+
console.log('Workflow validation failed:');
|
|
139
|
+
console.log('Errors:', validation.data?.errors);
|
|
140
|
+
console.log('Warnings:', validation.data?.warnings);
|
|
141
|
+
console.log('Suggestions:', validation.data?.suggestions);
|
|
142
142
|
}
|
|
143
143
|
return validation;
|
|
144
144
|
}
|
|
145
145
|
catch (error) {
|
|
146
|
-
console.error(
|
|
146
|
+
console.error('Failed to validate workflow:', error);
|
|
147
147
|
throw error;
|
|
148
148
|
}
|
|
149
149
|
}
|
|
@@ -151,17 +151,18 @@ async function validateWorkflow(workflow) {
|
|
|
151
151
|
async function handleApiErrors() {
|
|
152
152
|
try {
|
|
153
153
|
// This will fail - non-existent workflow
|
|
154
|
-
await apiClient.getWorkflow(
|
|
154
|
+
await apiClient.getWorkflow('non-existent-id');
|
|
155
155
|
}
|
|
156
156
|
catch (error) {
|
|
157
157
|
if (error instanceof Error) {
|
|
158
|
-
console.log(
|
|
159
|
-
console.log(
|
|
158
|
+
console.log('Error type:', error.constructor.name);
|
|
159
|
+
console.log('Error message:', error.message);
|
|
160
160
|
// Check if it's an API error
|
|
161
|
-
if (
|
|
162
|
-
|
|
163
|
-
console.log(
|
|
164
|
-
console.log(
|
|
161
|
+
if ('status' in error) {
|
|
162
|
+
const apiError = error;
|
|
163
|
+
console.log('HTTP status:', apiError.status);
|
|
164
|
+
console.log('Error code:', apiError.code);
|
|
165
|
+
console.log('Error details:', apiError.details);
|
|
165
166
|
}
|
|
166
167
|
}
|
|
167
168
|
}
|
|
@@ -188,15 +189,15 @@ async function batchOperations() {
|
|
|
188
189
|
id: workflow.id,
|
|
189
190
|
name: workflow.name,
|
|
190
191
|
valid: false,
|
|
191
|
-
error: error instanceof Error ? error.message :
|
|
192
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
192
193
|
};
|
|
193
194
|
}
|
|
194
195
|
}) || []);
|
|
195
|
-
console.log(
|
|
196
|
+
console.log('Batch validation results:', results);
|
|
196
197
|
return results;
|
|
197
198
|
}
|
|
198
199
|
catch (error) {
|
|
199
|
-
console.error(
|
|
200
|
+
console.error('Failed to perform batch operations:', error);
|
|
200
201
|
throw error;
|
|
201
202
|
}
|
|
202
203
|
}
|
|
@@ -205,35 +206,35 @@ async function monitorExecutions(workflowId) {
|
|
|
205
206
|
try {
|
|
206
207
|
// Start execution
|
|
207
208
|
const execution = await apiClient.executeWorkflow(workflowId, {
|
|
208
|
-
inputs: { message:
|
|
209
|
+
inputs: { message: 'Test message' }
|
|
209
210
|
});
|
|
210
211
|
const executionId = execution.data.executionId;
|
|
211
|
-
console.log(
|
|
212
|
+
console.log('Monitoring execution:', executionId);
|
|
212
213
|
// Poll for status updates
|
|
213
214
|
const interval = setInterval(async () => {
|
|
214
215
|
try {
|
|
215
216
|
const status = await apiClient.getExecutionStatus(executionId);
|
|
216
217
|
console.log(`Status: ${status.data?.status}`);
|
|
217
|
-
if (status.data?.status ===
|
|
218
|
-
status.data?.status ===
|
|
219
|
-
status.data?.status ===
|
|
218
|
+
if (status.data?.status === 'completed' ||
|
|
219
|
+
status.data?.status === 'failed' ||
|
|
220
|
+
status.data?.status === 'cancelled') {
|
|
220
221
|
clearInterval(interval);
|
|
221
|
-
console.log(
|
|
222
|
+
console.log('Execution finished:', status.data?.status);
|
|
222
223
|
}
|
|
223
224
|
}
|
|
224
225
|
catch (error) {
|
|
225
|
-
console.error(
|
|
226
|
+
console.error('Failed to get execution status:', error);
|
|
226
227
|
clearInterval(interval);
|
|
227
228
|
}
|
|
228
229
|
}, 1000);
|
|
229
230
|
// Timeout after 5 minutes
|
|
230
231
|
setTimeout(() => {
|
|
231
232
|
clearInterval(interval);
|
|
232
|
-
console.log(
|
|
233
|
+
console.log('Monitoring timeout');
|
|
233
234
|
}, 5 * 60 * 1000);
|
|
234
235
|
}
|
|
235
236
|
catch (error) {
|
|
236
|
-
console.error(
|
|
237
|
+
console.error('Failed to monitor execution:', error);
|
|
237
238
|
throw error;
|
|
238
239
|
}
|
|
239
240
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,18 +2,26 @@
|
|
|
2
2
|
* FlowDrop - Workflow Library
|
|
3
3
|
* A Svelte Flow-based library for building workflows
|
|
4
4
|
*/
|
|
5
|
-
import
|
|
6
|
-
export type { NodeCategory, NodeDataType, NodePort, NodeMetadata, NodeConfig, WorkflowNode, WorkflowEdge, Workflow, ApiResponse, NodesResponse, WorkflowResponse, WorkflowsResponse, ExecutionStatus, ExecutionResult, FlowDropConfig, WorkflowEvents } from
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export { default as
|
|
11
|
-
export { default as
|
|
12
|
-
export {
|
|
13
|
-
export
|
|
14
|
-
export
|
|
15
|
-
export
|
|
16
|
-
export
|
|
17
|
-
export
|
|
18
|
-
export * from
|
|
19
|
-
export
|
|
5
|
+
import '../app.css';
|
|
6
|
+
export type { NodeCategory, NodeDataType, NodePort, NodeMetadata, NodeConfig, WorkflowNode, WorkflowEdge, Workflow, ApiResponse, NodesResponse, WorkflowResponse, WorkflowsResponse, ExecutionStatus, ExecutionResult, FlowDropConfig, WorkflowEvents } from './types/index.js';
|
|
7
|
+
export type { WorkflowEditorConfig, EditorFeatures, UIConfig, APIConfig, ExecutionConfig, StorageConfig, NodeType, WorkflowData, ExecutionResult as EditorExecutionResult, EditorState } from './types/config.js';
|
|
8
|
+
export { FlowDropApiClient } from './api/client.js';
|
|
9
|
+
export { EnhancedFlowDropApiClient } from './api/enhanced-client.js';
|
|
10
|
+
export { default as WorkflowEditor } from './components/WorkflowEditor.svelte';
|
|
11
|
+
export { default as NodeSidebar } from './components/NodeSidebar.svelte';
|
|
12
|
+
export { default as WorkflowNodeComponent } from './components/WorkflowNode.svelte';
|
|
13
|
+
export { default as SimpleNodeComponent } from './components/SimpleNode.svelte';
|
|
14
|
+
export { default as ToolNodeComponent } from './components/ToolNode.svelte';
|
|
15
|
+
export { default as NotesNodeComponent } from './components/NotesNode.svelte';
|
|
16
|
+
export { default as CanvasBanner } from './components/CanvasBanner.svelte';
|
|
17
|
+
export { sampleNodes, sampleWorkflow } from './data/samples.js';
|
|
18
|
+
export * from './utils/icons.js';
|
|
19
|
+
export * from './utils/colors.js';
|
|
20
|
+
export * from './utils/connections.js';
|
|
21
|
+
export * from './utils/config.js';
|
|
22
|
+
export * from './utils/nodeTypes.js';
|
|
23
|
+
export * from './services/api.js';
|
|
24
|
+
export * from './config/endpoints.js';
|
|
25
|
+
export * from './adapters/WorkflowAdapter.js';
|
|
26
|
+
export * from './clients/ApiClient.js';
|
|
27
|
+
export { mountWorkflowEditor, unmountWorkflowEditor, mountFlowDropApp, unmountFlowDropApp } from './svelte-app.js';
|
package/dist/index.js
CHANGED
|
@@ -3,25 +3,33 @@
|
|
|
3
3
|
* A Svelte Flow-based library for building workflows
|
|
4
4
|
*/
|
|
5
5
|
// Import CSS to ensure styles are included in the library build
|
|
6
|
-
import
|
|
7
|
-
// Export API
|
|
8
|
-
export { FlowDropApiClient } from
|
|
6
|
+
import '../app.css';
|
|
7
|
+
// Export API clients
|
|
8
|
+
export { FlowDropApiClient } from './api/client.js';
|
|
9
|
+
export { EnhancedFlowDropApiClient } from './api/enhanced-client.js';
|
|
9
10
|
// Export components
|
|
10
|
-
export { default as WorkflowEditor } from
|
|
11
|
-
export { default as NodeSidebar } from
|
|
12
|
-
export { default as WorkflowNodeComponent } from
|
|
13
|
-
export { default as
|
|
11
|
+
export { default as WorkflowEditor } from './components/WorkflowEditor.svelte';
|
|
12
|
+
export { default as NodeSidebar } from './components/NodeSidebar.svelte';
|
|
13
|
+
export { default as WorkflowNodeComponent } from './components/WorkflowNode.svelte';
|
|
14
|
+
export { default as SimpleNodeComponent } from './components/SimpleNode.svelte';
|
|
15
|
+
export { default as ToolNodeComponent } from './components/ToolNode.svelte';
|
|
16
|
+
export { default as NotesNodeComponent } from './components/NotesNode.svelte';
|
|
17
|
+
export { default as CanvasBanner } from './components/CanvasBanner.svelte';
|
|
14
18
|
// Export sample data for development
|
|
15
|
-
export { sampleNodes, sampleWorkflow } from
|
|
19
|
+
export { sampleNodes, sampleWorkflow } from './data/samples.js';
|
|
16
20
|
// Export utilities
|
|
17
|
-
export * from
|
|
18
|
-
export * from
|
|
19
|
-
export * from
|
|
21
|
+
export * from './utils/icons.js';
|
|
22
|
+
export * from './utils/colors.js';
|
|
23
|
+
export * from './utils/connections.js';
|
|
24
|
+
export * from './utils/config.js';
|
|
25
|
+
export * from './utils/nodeTypes.js';
|
|
20
26
|
// Export services
|
|
21
|
-
export * from
|
|
27
|
+
export * from './services/api.js';
|
|
28
|
+
// Export endpoint configuration
|
|
29
|
+
export * from './config/endpoints.js';
|
|
22
30
|
// Export adapters
|
|
23
|
-
export * from
|
|
31
|
+
export * from './adapters/WorkflowAdapter.js';
|
|
24
32
|
// Export API client
|
|
25
|
-
export * from
|
|
33
|
+
export * from './clients/ApiClient.js';
|
|
26
34
|
// Export Svelte app wrapper for Drupal integration
|
|
27
|
-
export { mountWorkflowEditor, unmountWorkflowEditor } from
|
|
35
|
+
export { mountWorkflowEditor, unmountWorkflowEditor, mountFlowDropApp, unmountFlowDropApp } from './svelte-app.js';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock for $app/environment
|
|
3
|
+
* Provides minimal implementations for SvelteKit environment in library context
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Mock browser check
|
|
7
|
+
export const browser = typeof window !== 'undefined';
|
|
8
|
+
|
|
9
|
+
// Mock dev check
|
|
10
|
+
export const dev = false;
|
|
11
|
+
|
|
12
|
+
// Mock building check
|
|
13
|
+
export const building = false;
|
|
14
|
+
|
|
15
|
+
// Mock version
|
|
16
|
+
export const version = '1.0.0';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock for $app/forms
|
|
3
|
+
* Provides minimal implementations for SvelteKit forms in library context
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Mock enhance function
|
|
7
|
+
export const enhance = (form, options = {}) => {
|
|
8
|
+
return (event) => {
|
|
9
|
+
event.preventDefault();
|
|
10
|
+
// Basic form handling for library context
|
|
11
|
+
if (options.onResult) {
|
|
12
|
+
options.onResult({ type: 'success' });
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
// Mock applyAction function
|
|
18
|
+
export const applyAction = (action) => {
|
|
19
|
+
// No-op for library context
|
|
20
|
+
return action;
|
|
21
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export function goto(url: any, options?: {}): Promise<void>;
|
|
2
|
+
export function invalidate(url: any): Promise<void>;
|
|
3
|
+
export function invalidateAll(): Promise<void>;
|
|
4
|
+
export function preloadData(url: any): Promise<{}>;
|
|
5
|
+
export function preloadCode(url: any): Promise<void>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock for $app/navigation
|
|
3
|
+
* Provides minimal implementations for SvelteKit navigation in library context
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Mock goto function
|
|
7
|
+
export const goto = async (url, options = {}) => {
|
|
8
|
+
// No-op for library context
|
|
9
|
+
console.warn('Navigation not available in library context');
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
// Mock invalidate function
|
|
13
|
+
export const invalidate = async (url) => {
|
|
14
|
+
// No-op for library context
|
|
15
|
+
return Promise.resolve();
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
// Mock invalidateAll function
|
|
19
|
+
export const invalidateAll = async () => {
|
|
20
|
+
// No-op for library context
|
|
21
|
+
return Promise.resolve();
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
// Mock preloadData function
|
|
25
|
+
export const preloadData = async (url) => {
|
|
26
|
+
// No-op for library context
|
|
27
|
+
return Promise.resolve({});
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// Mock preloadCode function
|
|
31
|
+
export const preloadCode = async (url) => {
|
|
32
|
+
// No-op for library context
|
|
33
|
+
return Promise.resolve();
|
|
34
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const page: import("svelte/store").Writable<{
|
|
2
|
+
url: URL;
|
|
3
|
+
params: {};
|
|
4
|
+
route: {
|
|
5
|
+
id: any;
|
|
6
|
+
};
|
|
7
|
+
status: number;
|
|
8
|
+
error: any;
|
|
9
|
+
data: {};
|
|
10
|
+
form: any;
|
|
11
|
+
}>;
|
|
12
|
+
export const navigating: import("svelte/store").Writable<any>;
|
|
13
|
+
export const updated: import("svelte/store").Writable<boolean>;
|
|
14
|
+
export function preloadData(): Promise<{}>;
|