@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.
Files changed (119) hide show
  1. package/README.md +307 -215
  2. package/dist/adapters/WorkflowAdapter.d.ts +1 -1
  3. package/dist/adapters/WorkflowAdapter.js +30 -30
  4. package/dist/api/client.d.ts +24 -1
  5. package/dist/api/client.js +55 -38
  6. package/dist/api/enhanced-client.d.ts +46 -0
  7. package/dist/api/enhanced-client.js +211 -0
  8. package/dist/clients/ApiClient.d.ts +19 -23
  9. package/dist/clients/ApiClient.js +36 -34
  10. package/dist/components/App.svelte +1299 -230
  11. package/dist/components/App.svelte.d.ts +21 -1
  12. package/dist/components/CanvasBanner.svelte +50 -44
  13. package/dist/components/CanvasBanner.svelte.d.ts +5 -19
  14. package/dist/components/ConfigForm.svelte +555 -0
  15. package/dist/components/ConfigForm.svelte.d.ts +32 -0
  16. package/dist/components/ConfigModal.svelte +261 -0
  17. package/dist/components/ConfigModal.svelte.d.ts +31 -0
  18. package/dist/components/ConfigSidebar.svelte +934 -0
  19. package/dist/components/ConfigSidebar.svelte.d.ts +51 -0
  20. package/dist/components/ConnectionLine.svelte +32 -0
  21. package/dist/components/ConnectionLine.svelte.d.ts +3 -0
  22. package/dist/components/GatewayNode.svelte +471 -0
  23. package/dist/components/GatewayNode.svelte.d.ts +15 -0
  24. package/dist/components/LoadingSpinner.svelte +23 -23
  25. package/dist/components/LoadingSpinner.svelte.d.ts +1 -1
  26. package/dist/components/Logo.svelte +82 -0
  27. package/dist/components/Logo.svelte.d.ts +26 -0
  28. package/dist/components/LogsSidebar.svelte +565 -0
  29. package/dist/components/LogsSidebar.svelte.d.ts +34 -0
  30. package/dist/components/MarkdownDisplay.svelte +28 -0
  31. package/dist/components/MarkdownDisplay.svelte.d.ts +7 -0
  32. package/dist/components/Navbar.svelte +663 -0
  33. package/dist/components/Navbar.svelte.d.ts +21 -0
  34. package/dist/components/NodeSidebar.svelte +629 -488
  35. package/dist/components/NodeSidebar.svelte.d.ts +1 -2
  36. package/dist/components/NodeStatusOverlay.svelte +327 -0
  37. package/dist/components/NodeStatusOverlay.svelte.d.ts +11 -0
  38. package/dist/components/NotesNode.svelte +566 -0
  39. package/dist/components/NotesNode.svelte.d.ts +43 -0
  40. package/dist/components/PipelineStatus.svelte +331 -0
  41. package/dist/components/PipelineStatus.svelte.d.ts +18 -0
  42. package/dist/components/SimpleNode.svelte +447 -0
  43. package/dist/components/SimpleNode.svelte.d.ts +24 -0
  44. package/dist/components/SquareNode.svelte +346 -0
  45. package/dist/components/SquareNode.svelte.d.ts +24 -0
  46. package/dist/components/StatusIcon.svelte +112 -0
  47. package/dist/components/StatusIcon.svelte.d.ts +10 -0
  48. package/dist/components/StatusLabel.svelte +33 -0
  49. package/dist/components/StatusLabel.svelte.d.ts +7 -0
  50. package/dist/components/ToolNode.svelte +385 -0
  51. package/dist/components/ToolNode.svelte.d.ts +36 -0
  52. package/dist/components/UniversalNode.svelte +126 -0
  53. package/dist/components/UniversalNode.svelte.d.ts +15 -0
  54. package/dist/components/WorkflowEditor.svelte +871 -528
  55. package/dist/components/WorkflowEditor.svelte.d.ts +15 -5
  56. package/dist/components/WorkflowNode.svelte +428 -542
  57. package/dist/components/WorkflowNode.svelte.d.ts +7 -3
  58. package/dist/config/apiConfig.d.ts +33 -0
  59. package/dist/config/apiConfig.js +39 -0
  60. package/dist/config/defaultPortConfig.d.ts +6 -0
  61. package/dist/config/defaultPortConfig.js +192 -0
  62. package/dist/config/demo.d.ts +58 -0
  63. package/dist/config/demo.js +142 -0
  64. package/dist/config/endpoints.d.ts +106 -0
  65. package/dist/config/endpoints.js +128 -0
  66. package/dist/data/samples.d.ts +38 -4
  67. package/dist/data/samples.js +2789 -737
  68. package/dist/examples/adapter-usage.d.ts +4 -4
  69. package/dist/examples/adapter-usage.js +21 -26
  70. package/dist/examples/api-client-usage.d.ts +6 -6
  71. package/dist/examples/api-client-usage.js +55 -54
  72. package/dist/index.d.ts +23 -15
  73. package/dist/index.js +23 -15
  74. package/dist/mocks/app-environment.d.ts +8 -0
  75. package/dist/mocks/app-environment.js +16 -0
  76. package/dist/mocks/app-forms.d.ts +2 -0
  77. package/dist/mocks/app-forms.js +21 -0
  78. package/dist/mocks/app-navigation.d.ts +5 -0
  79. package/dist/mocks/app-navigation.js +34 -0
  80. package/dist/mocks/app-stores.d.ts +14 -0
  81. package/dist/mocks/app-stores.js +26 -0
  82. package/dist/services/api.d.ts +13 -3
  83. package/dist/services/api.js +91 -36
  84. package/dist/services/globalSave.d.ts +20 -0
  85. package/dist/services/globalSave.js +165 -0
  86. package/dist/services/nodeExecutionService.d.ts +63 -0
  87. package/dist/services/nodeExecutionService.js +261 -0
  88. package/dist/services/portConfigApi.d.ts +14 -0
  89. package/dist/services/portConfigApi.js +69 -0
  90. package/dist/services/toastService.d.ts +147 -0
  91. package/dist/services/toastService.js +235 -0
  92. package/dist/services/workflowStorage.d.ts +2 -2
  93. package/dist/services/workflowStorage.js +10 -10
  94. package/dist/stores/workflowStore.d.ts +53 -0
  95. package/dist/stores/workflowStore.js +264 -0
  96. package/dist/styles/base.css +896 -363
  97. package/dist/svelte-app.d.ts +52 -5
  98. package/dist/svelte-app.js +128 -6
  99. package/dist/types/config.d.ts +291 -0
  100. package/dist/types/config.js +4 -0
  101. package/dist/types/index.d.ts +231 -19
  102. package/dist/types/index.js +1 -1
  103. package/dist/utils/colors.d.ts +67 -33
  104. package/dist/utils/colors.js +183 -118
  105. package/dist/utils/config.d.ts +41 -0
  106. package/dist/utils/config.js +248 -0
  107. package/dist/utils/connections.d.ts +40 -3
  108. package/dist/utils/connections.js +115 -44
  109. package/dist/utils/icons.d.ts +1 -1
  110. package/dist/utils/icons.js +71 -70
  111. package/dist/utils/nodeStatus.d.ts +53 -0
  112. package/dist/utils/nodeStatus.js +183 -0
  113. package/dist/utils/nodeTypes.d.ts +57 -0
  114. package/dist/utils/nodeTypes.js +109 -0
  115. package/dist/utils/nodeWrapper.d.ts +39 -0
  116. package/dist/utils/nodeWrapper.js +62 -0
  117. package/package.json +129 -97
  118. package/dist/components/Node.svelte +0 -38
  119. 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 "../adapters/WorkflowAdapter.js";
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("../adapters/WorkflowAdapter.js").WorkflowValidationResult;
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: import("../index.js").NodeDataType;
53
+ type: string;
54
54
  required: boolean;
55
55
  }[];
56
56
  outputs: {
57
57
  name: string;
58
- type: import("../index.js").NodeDataType;
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 "../adapters/WorkflowAdapter.js";
6
- import { sampleNodes } from "../data/samples.js";
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("Chat Workflow", "A simple chat workflow");
11
+ const workflow = adapter.createWorkflow('Chat Workflow', 'A simple chat workflow');
12
12
  // Add nodes
13
- const inputNode = adapter.addNode(workflow, "text-input", { x: 100, y: 100 }, {
14
- placeholder: "Enter your message"
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, "openai", { x: 300, y: 100 }, {
17
- model: "gpt-4",
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, "text-output", { x: 500, y: 100 });
20
+ const outputNode = adapter.addNode(workflow, 'text-output', { x: 500, y: 100 });
21
21
  // Connect nodes
22
- adapter.addEdge(workflow, inputNode.id, modelNode.id, "text", "prompt");
23
- adapter.addEdge(workflow, modelNode.id, outputNode.id, "text", "text");
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("Errors:", validation.errors);
31
+ console.log('Errors:', validation.errors);
37
32
  }
38
33
  if (validation.warnings.length > 0) {
39
- console.log("Warnings:", validation.warnings);
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("Consider adding input and output nodes");
113
+ suggestions.push('Consider adding input and output nodes');
119
114
  }
120
115
  if (workflow.edges.length === 0) {
121
- suggestions.push("Connect nodes to create a data flow");
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 : "Unknown error"],
133
- suggestions: ["Check the JSON format and required fields"]
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 "../types/index.js";
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("../types/index.js").NodesResponse>;
12
- declare function manageWorkflows(): Promise<import("../types/index.js").WorkflowResponse>;
13
- declare function executeWorkflow(workflowId: string): Promise<import("../clients/ApiClient.js").ExecutionStatusResponse>;
14
- declare function importExportWorkflow(workflowId: string): Promise<import("../types/index.js").WorkflowResponse>;
15
- declare function validateWorkflow(workflow: Workflow): Promise<import("../clients/ApiClient.js").ValidationResponse>;
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 "../clients/ApiClient.js";
5
+ import { ApiClient } from '../clients/ApiClient.js';
6
6
  // Initialize the API client
7
7
  const apiClient = new ApiClient({
8
- baseUrl: "https://api.flowdrop.dev/v1",
9
- apiKey: "your-api-key-here",
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("API Status:", health.status);
17
- console.log("API Version:", health.version);
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("API Health Check Failed:", 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("models");
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: "openai" });
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("Failed to get node types:", 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: "Chat Workflow",
50
- description: "A simple chat workflow created via API",
51
- tags: ["chat", "demo"]
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("Created workflow:", newWorkflow.data?.id);
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: "created_at",
59
- order: "desc"
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("chat");
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("Failed to manage workflows:", 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: "Hello, how are you?",
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("Execution started:", execution.data?.executionId);
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 === "completed") {
90
- console.log("Execution completed successfully");
91
- console.log("Result:", result.data?.result);
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("Execution failed:", result.data?.error);
94
+ console.log('Execution failed:', result.data?.error);
95
95
  }
96
96
  return result;
97
97
  }
98
98
  catch (error) {
99
- console.error("Failed to execute workflow:", 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, "json");
108
- console.log("Exported workflow:", exportedWorkflow.name);
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: "", // Will be generated by server
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("Imported workflow:", importedWorkflow.data?.id);
122
+ console.log('Imported workflow:', importedWorkflow.data?.id);
123
123
  return importedWorkflow;
124
124
  }
125
125
  catch (error) {
126
- console.error("Failed to import/export workflow:", 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("Workflow is valid");
135
+ console.log('Workflow is valid');
136
136
  }
137
137
  else {
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);
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("Failed to validate workflow:", 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("non-existent-id");
154
+ await apiClient.getWorkflow('non-existent-id');
155
155
  }
156
156
  catch (error) {
157
157
  if (error instanceof Error) {
158
- console.log("Error type:", error.constructor.name);
159
- console.log("Error message:", error.message);
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 ("status" in error) {
162
- console.log("HTTP status:", error.status);
163
- console.log("Error code:", error.code);
164
- console.log("Error details:", error.details);
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 : "Unknown error"
192
+ error: error instanceof Error ? error.message : 'Unknown error'
192
193
  };
193
194
  }
194
195
  }) || []);
195
- console.log("Batch validation results:", results);
196
+ console.log('Batch validation results:', results);
196
197
  return results;
197
198
  }
198
199
  catch (error) {
199
- console.error("Failed to perform batch operations:", 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: "Test message" }
209
+ inputs: { message: 'Test message' }
209
210
  });
210
211
  const executionId = execution.data.executionId;
211
- console.log("Monitoring execution:", executionId);
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 === "completed" ||
218
- status.data?.status === "failed" ||
219
- status.data?.status === "cancelled") {
218
+ if (status.data?.status === 'completed' ||
219
+ status.data?.status === 'failed' ||
220
+ status.data?.status === 'cancelled') {
220
221
  clearInterval(interval);
221
- console.log("Execution finished:", status.data?.status);
222
+ console.log('Execution finished:', status.data?.status);
222
223
  }
223
224
  }
224
225
  catch (error) {
225
- console.error("Failed to get execution status:", 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("Monitoring timeout");
233
+ console.log('Monitoring timeout');
233
234
  }, 5 * 60 * 1000);
234
235
  }
235
236
  catch (error) {
236
- console.error("Failed to monitor execution:", 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 "../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 { FlowDropApiClient } from "./api/client.js";
8
- export { default as WorkflowEditor } from "./components/WorkflowEditor.svelte";
9
- export { default as NodeSidebar } from "./components/NodeSidebar.svelte";
10
- export { default as WorkflowNodeComponent } from "./components/WorkflowNode.svelte";
11
- export { default as CanvasBanner } from "./components/CanvasBanner.svelte";
12
- export { sampleNodes, sampleWorkflow } from "./data/samples.js";
13
- export * from "./utils/icons.js";
14
- export * from "./utils/colors.js";
15
- export * from "./utils/connections.js";
16
- export * from "./services/api.js";
17
- export * from "./adapters/WorkflowAdapter.js";
18
- export * from "./clients/ApiClient.js";
19
- export { mountWorkflowEditor, unmountWorkflowEditor } from "./svelte-app.js";
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 "../app.css";
7
- // Export API client
8
- export { FlowDropApiClient } from "./api/client.js";
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 "./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 CanvasBanner } from "./components/CanvasBanner.svelte";
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 "./data/samples.js";
19
+ export { sampleNodes, sampleWorkflow } from './data/samples.js';
16
20
  // Export utilities
17
- export * from "./utils/icons.js";
18
- export * from "./utils/colors.js";
19
- export * from "./utils/connections.js";
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 "./services/api.js";
27
+ export * from './services/api.js';
28
+ // Export endpoint configuration
29
+ export * from './config/endpoints.js';
22
30
  // Export adapters
23
- export * from "./adapters/WorkflowAdapter.js";
31
+ export * from './adapters/WorkflowAdapter.js';
24
32
  // Export API client
25
- export * from "./clients/ApiClient.js";
33
+ export * from './clients/ApiClient.js';
26
34
  // Export Svelte app wrapper for Drupal integration
27
- export { mountWorkflowEditor, unmountWorkflowEditor } from "./svelte-app.js";
35
+ export { mountWorkflowEditor, unmountWorkflowEditor, mountFlowDropApp, unmountFlowDropApp } from './svelte-app.js';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Mock for $app/environment
3
+ * Provides minimal implementations for SvelteKit environment in library context
4
+ */
5
+ export const browser: boolean;
6
+ export const dev: false;
7
+ export const building: false;
8
+ export const version: "1.0.0";
@@ -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,2 @@
1
+ export function enhance(form: any, options?: {}): (event: any) => void;
2
+ export function applyAction(action: any): any;
@@ -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<{}>;