@d34dman/flowdrop 0.0.18 → 0.0.20
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 +161 -400
- package/dist/api/enhanced-client.d.ts +2 -2
- package/dist/api/enhanced-client.js +5 -5
- package/dist/components/NotesNode.svelte +3 -3
- package/dist/components/NotesNode.svelte.d.ts +3 -3
- package/dist/components/SimpleNode.svelte +3 -3
- package/dist/components/SimpleNode.svelte.d.ts +3 -3
- package/dist/components/SquareNode.svelte +3 -3
- package/dist/components/SquareNode.svelte.d.ts +3 -3
- package/dist/components/TerminalNode.svelte +84 -66
- package/dist/components/TerminalNode.svelte.d.ts +3 -3
- package/dist/components/UniversalNode.svelte +7 -33
- package/dist/components/WorkflowEditor.svelte +1 -9
- package/dist/helpers/workflowEditorHelper.d.ts +3 -3
- package/dist/helpers/workflowEditorHelper.js +5 -7
- package/dist/index.d.ts +4 -7
- package/dist/index.js +2 -5
- package/dist/registry/builtinNodes.d.ts +2 -2
- package/dist/registry/builtinNodes.js +2 -2
- package/dist/services/api.d.ts +0 -5
- package/dist/services/api.js +0 -20
- package/dist/svelte-app.d.ts +0 -6
- package/dist/svelte-app.js +0 -8
- package/dist/types/auth.d.ts +0 -15
- package/dist/types/auth.js +0 -15
- package/dist/types/config.d.ts +11 -151
- package/dist/types/config.js +3 -0
- package/dist/types/index.d.ts +0 -6
- package/dist/utils/colors.d.ts +0 -5
- package/dist/utils/colors.js +3 -4
- package/dist/utils/config.d.ts +0 -8
- package/dist/utils/config.js +0 -14
- package/dist/utils/connections.d.ts +0 -5
- package/dist/utils/connections.js +10 -16
- package/dist/utils/icons.js +1 -1
- package/dist/utils/nodeTypes.d.ts +1 -1
- package/dist/utils/nodeTypes.js +3 -20
- package/package.json +149 -138
- package/dist/clients/ApiClient.d.ts +0 -199
- package/dist/clients/ApiClient.js +0 -214
- package/dist/config/apiConfig.d.ts +0 -34
- package/dist/config/apiConfig.js +0 -40
- package/dist/examples/adapter-usage.d.ts +0 -66
- package/dist/examples/adapter-usage.js +0 -133
- package/dist/examples/api-client-usage.d.ts +0 -32
- package/dist/examples/api-client-usage.js +0 -243
package/README.md
CHANGED
|
@@ -1,484 +1,245 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="static/logo.svg" alt="FlowDrop" width="120" />
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
<h1 align="center">FlowDrop</h1>
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>Build beautiful workflow editors in minutes, not months.</strong>
|
|
9
|
+
</p>
|
|
6
10
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- **Node System**: Extensible node types with customizable configuration
|
|
12
|
-
- **Real-time Updates**: Live workflow state management with stores
|
|
13
|
-
- **Framework Agnostic**: Can be integrated into any web application
|
|
14
|
-
- **TypeScript Support**: Full type definitions included
|
|
15
|
-
- **Docker Ready**: Production-ready Dockerfile and Docker Compose configuration
|
|
11
|
+
<p align="center">
|
|
12
|
+
An awesome workflow editor built with Svelte 5 and @xyflow/svelte.<br/>
|
|
13
|
+
You own the backend. You own the data. You own the orchestration.
|
|
14
|
+
</p>
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
<p align="center">
|
|
17
|
+
<a href="#quickstart">Quickstart</a> •
|
|
18
|
+
<a href="#features">Features</a> •
|
|
19
|
+
<a href="#integration">Integration</a> •
|
|
20
|
+
<a href="#documentation">Docs</a>
|
|
21
|
+
</p>
|
|
18
22
|
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
-
|
|
23
|
+
<p align="center">
|
|
24
|
+
<img src="static/FlowDrop-Screenshot.jpg" alt="FlowDrop Screenshot" width="800" />
|
|
25
|
+
</p>
|
|
26
|
+
<p align="center">
|
|
27
|
+
<em>Build AI-powered workflows with drag-and-drop simplicity. Connect nodes, configure inputs/outputs, and visualize your entire pipeline.</em>
|
|
28
|
+
</p>
|
|
24
29
|
|
|
25
|
-
##
|
|
30
|
+
## Why FlowDrop?
|
|
26
31
|
|
|
27
|
-
|
|
28
|
-
npm install @d34dman/flowdrop
|
|
29
|
-
```
|
|
32
|
+
Most workflow tools are SaaS platforms that lock you in. Your data lives on their servers. Your execution logic runs in their cloud. You pay per workflow, per user, per run.
|
|
30
33
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
@d34dman/flowdrop/
|
|
35
|
-
├── dist/ # Built library files
|
|
36
|
-
│ ├── components/ # Svelte components
|
|
37
|
-
│ ├── types/ # TypeScript definitions
|
|
38
|
-
│ ├── services/ # API and state management
|
|
39
|
-
│ ├── utils/ # Utility functions
|
|
40
|
-
│ └── styles/ # CSS styles
|
|
41
|
-
├── src/ # Source code
|
|
42
|
-
│ └── lib/ # Library source
|
|
43
|
-
│ ├── components/ # Svelte components
|
|
44
|
-
│ ├── services/ # Services and APIs
|
|
45
|
-
│ ├── stores/ # State management
|
|
46
|
-
│ └── types/ # Type definitions
|
|
47
|
-
└── api/ # API documentation
|
|
48
|
-
```
|
|
34
|
+
**FlowDrop is different.**
|
|
49
35
|
|
|
50
|
-
|
|
36
|
+
FlowDrop is a pure visual editor. You implement the backend. You control the orchestration. Your workflows run on your infrastructure, with your security policies, at your scale.
|
|
51
37
|
|
|
52
|
-
|
|
38
|
+
No vendor lock-in. No data leaving your walls. No surprise bills.
|
|
53
39
|
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
import '@d34dman/flowdrop/styles/base.css';
|
|
40
|
+
```bash
|
|
41
|
+
npm install @d34dman/flowdrop
|
|
57
42
|
```
|
|
58
43
|
|
|
59
|
-
|
|
44
|
+
You get a production-ready workflow UI. You keep full control of everything else.
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
## Quickstart
|
|
60
48
|
|
|
61
49
|
```svelte
|
|
62
50
|
<script lang="ts">
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
let nodes: NodeMetadata[] = [
|
|
67
|
-
{
|
|
68
|
-
id: 'text_input',
|
|
69
|
-
name: 'Text Input',
|
|
70
|
-
category: 'input_output',
|
|
71
|
-
description: 'User input field',
|
|
72
|
-
inputs: [],
|
|
73
|
-
outputs: [{ id: 'value', name: 'Value', type: 'output', dataType: 'string' }]
|
|
74
|
-
}
|
|
75
|
-
];
|
|
76
|
-
|
|
77
|
-
let workflow: Workflow = {
|
|
78
|
-
id: 'workflow_1',
|
|
79
|
-
name: 'My Workflow',
|
|
80
|
-
nodes: [],
|
|
81
|
-
edges: []
|
|
82
|
-
};
|
|
51
|
+
import { WorkflowEditor } from "@d34dman/flowdrop";
|
|
52
|
+
import "@d34dman/flowdrop/styles/base.css";
|
|
83
53
|
</script>
|
|
84
54
|
|
|
85
|
-
<WorkflowEditor
|
|
55
|
+
<WorkflowEditor />
|
|
86
56
|
```
|
|
87
57
|
|
|
88
|
-
|
|
58
|
+
**5 lines. One fully-functional workflow editor.**
|
|
59
|
+
|
|
89
60
|
|
|
90
|
-
|
|
61
|
+
## Features
|
|
62
|
+
|
|
63
|
+
| | |
|
|
64
|
+
| --------------------------- | ------------------------------------------------------------------------- |
|
|
65
|
+
| 🎨 **Visual Editor Only** | Pure UI component. No hidden backend, no external dependencies |
|
|
66
|
+
| 🔐 **You Own Everything** | Your data, your servers, your orchestration logic, your security policies |
|
|
67
|
+
| 🔌 **Backend Agnostic** | Connect to any API: Drupal, Laravel, Express, FastAPI, or your own |
|
|
68
|
+
| 🧩 **7 Built-in Node Types** | From simple icons to complex gateway logic |
|
|
69
|
+
| 🎭 **Framework Flexible** | Use as Svelte component or mount into React, Vue, Angular, or vanilla JS |
|
|
70
|
+
| 🐳 **Deploy Anywhere** | Runtime config means build once, deploy everywhere |
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
## Node Types
|
|
74
|
+
|
|
75
|
+
FlowDrop ships with 7 beautifully designed node types:
|
|
76
|
+
|
|
77
|
+
| Type | Purpose |
|
|
78
|
+
| ---------- | --------------------------------------- |
|
|
79
|
+
| `default` | Full-featured nodes with inputs/outputs |
|
|
80
|
+
| `simple` | Compact, space-efficient layout |
|
|
81
|
+
| `square` | Icon-only minimal design |
|
|
82
|
+
| `tool` | AI agent tool nodes |
|
|
83
|
+
| `gateway` | Conditional branching logic |
|
|
84
|
+
| `terminal` | Start/end workflow points |
|
|
85
|
+
| `note` | Markdown documentation blocks |
|
|
86
|
+
|
|
87
|
+
<p align="center">
|
|
88
|
+
<img src="static/Node-Types.jpg" alt="FlowDrop Node Types" width="800" />
|
|
89
|
+
</p>
|
|
90
|
+
<p align="center">
|
|
91
|
+
<em>From simple triggers to complex branching logic, each node type is designed for specific workflow patterns.</em>
|
|
92
|
+
</p>
|
|
93
|
+
|
|
94
|
+
## Integration
|
|
95
|
+
|
|
96
|
+
### Svelte (Native)
|
|
91
97
|
|
|
92
98
|
```svelte
|
|
93
99
|
<script>
|
|
94
|
-
|
|
100
|
+
import { WorkflowEditor, NodeSidebar } from "@d34dman/flowdrop";
|
|
95
101
|
</script>
|
|
96
102
|
|
|
97
|
-
<div class="
|
|
98
|
-
|
|
99
|
-
|
|
103
|
+
<div class="flex h-screen">
|
|
104
|
+
<NodeSidebar {nodes} />
|
|
105
|
+
<WorkflowEditor {nodes} />
|
|
100
106
|
</div>
|
|
101
107
|
```
|
|
102
108
|
|
|
103
|
-
|
|
109
|
+
### Vanilla JS / React / Vue / Angular
|
|
104
110
|
|
|
105
111
|
```javascript
|
|
106
|
-
import {
|
|
107
|
-
|
|
108
|
-
const
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
list: '/workflows',
|
|
116
|
-
get: '/workflows/{id}',
|
|
117
|
-
create: '/workflows',
|
|
118
|
-
update: '/workflows/{id}'
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
112
|
+
import { mountFlowDropApp, createEndpointConfig } from "@d34dman/flowdrop";
|
|
113
|
+
|
|
114
|
+
const app = await mountFlowDropApp(document.getElementById("editor"), {
|
|
115
|
+
workflow: myWorkflow,
|
|
116
|
+
endpointConfig: createEndpointConfig("/api/flowdrop"),
|
|
117
|
+
eventHandlers: {
|
|
118
|
+
onDirtyStateChange: (isDirty) => console.log("Unsaved changes:", isDirty),
|
|
119
|
+
onAfterSave: (workflow) => console.log("Saved!", workflow)
|
|
120
|
+
}
|
|
122
121
|
});
|
|
123
122
|
|
|
124
|
-
//
|
|
125
|
-
|
|
123
|
+
// Full control over the editor
|
|
124
|
+
app.save();
|
|
125
|
+
app.getWorkflow();
|
|
126
|
+
app.destroy();
|
|
126
127
|
```
|
|
127
128
|
|
|
128
|
-
|
|
129
|
+
### Enterprise Integration
|
|
129
130
|
|
|
130
131
|
```javascript
|
|
131
|
-
import { mountFlowDropApp,
|
|
132
|
+
import { mountFlowDropApp, CallbackAuthProvider } from "@d34dman/flowdrop";
|
|
132
133
|
|
|
133
134
|
const app = await mountFlowDropApp(container, {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
// Feature configuration
|
|
153
|
-
features: {
|
|
154
|
-
autoSaveDraft: true,
|
|
155
|
-
autoSaveDraftInterval: 30000,
|
|
156
|
-
showToasts: true
|
|
157
|
-
}
|
|
135
|
+
// Dynamic token refresh
|
|
136
|
+
authProvider: new CallbackAuthProvider({
|
|
137
|
+
getToken: () => authService.getAccessToken(),
|
|
138
|
+
onUnauthorized: () => authService.refreshToken()
|
|
139
|
+
}),
|
|
140
|
+
|
|
141
|
+
// Lifecycle hooks
|
|
142
|
+
eventHandlers: {
|
|
143
|
+
onBeforeUnmount: (workflow, isDirty) => {
|
|
144
|
+
if (isDirty) saveDraft(workflow);
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
|
|
148
|
+
// Auto-save, toasts, and more
|
|
149
|
+
features: {
|
|
150
|
+
autoSaveDraft: true,
|
|
151
|
+
autoSaveDraftInterval: 30000
|
|
152
|
+
}
|
|
158
153
|
});
|
|
159
|
-
|
|
160
|
-
// Access instance methods
|
|
161
|
-
if (app.isDirty()) {
|
|
162
|
-
await app.save();
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
// Get current workflow data
|
|
166
|
-
const workflow = app.getWorkflow();
|
|
167
|
-
|
|
168
|
-
// Cleanup
|
|
169
|
-
app.destroy();
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
See the [Enterprise Integration Guide](./docs/enterprise-integration.md) for React, Vue, Angular, and Drupal examples.
|
|
173
|
-
|
|
174
|
-
#### 3. Integration with Backend Frameworks
|
|
175
|
-
|
|
176
|
-
##### Drupal Example
|
|
177
|
-
|
|
178
|
-
```javascript
|
|
179
|
-
Drupal.behaviors.flowdropEditor = {
|
|
180
|
-
attach: function (context, settings) {
|
|
181
|
-
const container = context.querySelector('.flowdrop-container');
|
|
182
|
-
if (container && window.FlowDrop) {
|
|
183
|
-
window.FlowDrop.mountWorkflowEditor(container, {
|
|
184
|
-
endpointConfig: settings.flowdrop.endpointConfig,
|
|
185
|
-
nodes: settings.flowdrop.nodes
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
};
|
|
190
154
|
```
|
|
191
155
|
|
|
192
|
-
## 📚 Core Components
|
|
193
|
-
|
|
194
|
-
### WorkflowEditor
|
|
195
|
-
|
|
196
|
-
Main editor component for creating and editing workflows.
|
|
197
|
-
|
|
198
|
-
**Props:**
|
|
199
156
|
|
|
200
|
-
|
|
201
|
-
- `endpointConfig`: API endpoint configuration
|
|
202
|
-
- `height`: Editor height (default: "100vh")
|
|
203
|
-
- `width`: Editor width (default: "100%")
|
|
204
|
-
- `lockWorkflow`: Disable editing
|
|
205
|
-
- `readOnly`: Read-only mode
|
|
157
|
+
## API Configuration
|
|
206
158
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
Sidebar displaying available node types.
|
|
210
|
-
|
|
211
|
-
**Props:**
|
|
212
|
-
|
|
213
|
-
- `nodes`: Array of node types to display
|
|
214
|
-
|
|
215
|
-
### ConfigSidebar
|
|
216
|
-
|
|
217
|
-
Configuration panel for selected nodes.
|
|
218
|
-
|
|
219
|
-
**Props:**
|
|
220
|
-
|
|
221
|
-
- `isOpen`: Sidebar visibility
|
|
222
|
-
- `configSchema`: JSON schema for configuration
|
|
223
|
-
- `configValues`: Current configuration values
|
|
224
|
-
- `onSave`: Save handler
|
|
225
|
-
- `onClose`: Close handler
|
|
226
|
-
|
|
227
|
-
## 🔧 API Configuration
|
|
228
|
-
|
|
229
|
-
Configure the API client to connect to your backend:
|
|
159
|
+
Connect to any backend in seconds:
|
|
230
160
|
|
|
231
161
|
```typescript
|
|
232
|
-
import { createEndpointConfig } from
|
|
162
|
+
import { createEndpointConfig } from "@d34dman/flowdrop";
|
|
233
163
|
|
|
234
164
|
const config = createEndpointConfig({
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
execute: '/workflows/{id}/execute'
|
|
248
|
-
}
|
|
249
|
-
},
|
|
250
|
-
timeout: 30000,
|
|
251
|
-
auth: {
|
|
252
|
-
type: 'bearer',
|
|
253
|
-
token: 'your-token'
|
|
254
|
-
}
|
|
165
|
+
baseUrl: "https://api.example.com",
|
|
166
|
+
endpoints: {
|
|
167
|
+
nodes: { list: "/nodes", get: "/nodes/{id}" },
|
|
168
|
+
workflows: {
|
|
169
|
+
list: "/workflows",
|
|
170
|
+
get: "/workflows/{id}",
|
|
171
|
+
create: "/workflows",
|
|
172
|
+
update: "/workflows/{id}",
|
|
173
|
+
execute: "/workflows/{id}/execute"
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
auth: { type: "bearer", token: "your-token" }
|
|
255
177
|
});
|
|
256
178
|
```
|
|
257
179
|
|
|
258
|
-
## 🎨 Customization
|
|
259
180
|
|
|
260
|
-
|
|
181
|
+
## Customization
|
|
261
182
|
|
|
262
|
-
|
|
183
|
+
Make it yours with CSS custom properties:
|
|
263
184
|
|
|
264
185
|
```css
|
|
265
186
|
:root {
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
187
|
+
--flowdrop-background-color: #0a0a0a;
|
|
188
|
+
--flowdrop-primary-color: #6366f1;
|
|
189
|
+
--flowdrop-border-color: #27272a;
|
|
190
|
+
--flowdrop-text-color: #fafafa;
|
|
270
191
|
}
|
|
271
192
|
```
|
|
272
193
|
|
|
273
|
-
### Node Types
|
|
274
|
-
|
|
275
|
-
FlowDrop includes 7 built-in visual node types that control how nodes are rendered:
|
|
276
|
-
|
|
277
|
-
| Type | Description | Use Case |
|
|
278
|
-
| ---------- | ------------------------------------------------------- | ------------------------ |
|
|
279
|
-
| `default` | Full-featured workflow node with inputs/outputs display | Standard nodes |
|
|
280
|
-
| `simple` | Compact layout with header, icon, and description | Space-efficient nodes |
|
|
281
|
-
| `square` | Minimal square node showing only an icon | Icon-only representation |
|
|
282
|
-
| `tool` | Specialized node for agent tools with tool metadata | AI agent tools |
|
|
283
|
-
| `gateway` | Branching control flow with multiple output branches | Conditional logic |
|
|
284
|
-
| `terminal` | Circular node for workflow start/end/exit points | Workflow boundaries |
|
|
285
|
-
| `note` | Documentation note with markdown support | Comments/documentation |
|
|
286
194
|
|
|
287
|
-
|
|
195
|
+
## Deploy
|
|
288
196
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
```typescript
|
|
292
|
-
// Start node - output only
|
|
293
|
-
const startNode: NodeMetadata = {
|
|
294
|
-
id: 'workflow-start',
|
|
295
|
-
name: 'Start',
|
|
296
|
-
type: 'terminal',
|
|
297
|
-
tags: ['start'],
|
|
298
|
-
inputs: [],
|
|
299
|
-
outputs: [{ id: 'trigger', name: 'Go', type: 'output', dataType: 'trigger' }]
|
|
300
|
-
};
|
|
301
|
-
|
|
302
|
-
// End node - input only
|
|
303
|
-
const endNode: NodeMetadata = {
|
|
304
|
-
id: 'workflow-end',
|
|
305
|
-
name: 'End',
|
|
306
|
-
type: 'terminal',
|
|
307
|
-
tags: ['end'],
|
|
308
|
-
inputs: [{ id: 'done', name: 'Done', type: 'input', dataType: 'trigger' }],
|
|
309
|
-
outputs: []
|
|
310
|
-
};
|
|
311
|
-
```
|
|
312
|
-
|
|
313
|
-
Terminal variants are auto-detected from `id`, `name`, or `tags` containing: `start`, `end`, `exit`, `abort`, `entry`, `finish`, `complete`.
|
|
314
|
-
|
|
315
|
-
#### Custom Node Types
|
|
316
|
-
|
|
317
|
-
Define custom node types:
|
|
318
|
-
|
|
319
|
-
```typescript
|
|
320
|
-
const customNode: NodeMetadata = {
|
|
321
|
-
id: 'custom_processor',
|
|
322
|
-
name: 'Custom Processor',
|
|
323
|
-
category: 'data_processing',
|
|
324
|
-
description: 'Process data with custom logic',
|
|
325
|
-
icon: 'mdi:cog',
|
|
326
|
-
color: '#3b82f6',
|
|
327
|
-
inputs: [
|
|
328
|
-
{
|
|
329
|
-
id: 'input',
|
|
330
|
-
name: 'Input',
|
|
331
|
-
type: 'input',
|
|
332
|
-
dataType: 'mixed'
|
|
333
|
-
}
|
|
334
|
-
],
|
|
335
|
-
outputs: [
|
|
336
|
-
{
|
|
337
|
-
id: 'output',
|
|
338
|
-
name: 'Output',
|
|
339
|
-
type: 'output',
|
|
340
|
-
dataType: 'mixed'
|
|
341
|
-
}
|
|
342
|
-
],
|
|
343
|
-
configSchema: {
|
|
344
|
-
type: 'object',
|
|
345
|
-
properties: {
|
|
346
|
-
operation: {
|
|
347
|
-
type: 'string',
|
|
348
|
-
title: 'Operation'
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
};
|
|
353
|
-
```
|
|
354
|
-
|
|
355
|
-
## 🔌 Backend Integration
|
|
356
|
-
|
|
357
|
-
FlowDrop is backend-agnostic. Implement the API endpoints expected by the client:
|
|
358
|
-
|
|
359
|
-
### Required Endpoints
|
|
360
|
-
|
|
361
|
-
- `GET /api/nodes` - List available node types
|
|
362
|
-
- `GET /api/workflows` - List workflows
|
|
363
|
-
- `GET /api/workflows/{id}` - Get workflow
|
|
364
|
-
- `POST /api/workflows` - Create workflow
|
|
365
|
-
- `PUT /api/workflows/{id}` - Update workflow
|
|
366
|
-
- `DELETE /api/workflows/{id}` - Delete workflow
|
|
367
|
-
- `POST /api/workflows/{id}/execute` - Execute workflow
|
|
368
|
-
|
|
369
|
-
See `API.md` for detailed endpoint specifications.
|
|
370
|
-
|
|
371
|
-
## 🧪 Testing
|
|
197
|
+
### Docker (Recommended)
|
|
372
198
|
|
|
373
199
|
```bash
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
# E2E tests
|
|
378
|
-
npm run test:e2e
|
|
379
|
-
|
|
380
|
-
# All tests
|
|
381
|
-
npm test
|
|
200
|
+
cp env.example .env
|
|
201
|
+
docker-compose up -d
|
|
382
202
|
```
|
|
383
203
|
|
|
384
|
-
|
|
204
|
+
### Node.js
|
|
385
205
|
|
|
386
206
|
```bash
|
|
387
|
-
# Install dependencies
|
|
388
|
-
npm install
|
|
389
|
-
|
|
390
|
-
# Development server
|
|
391
|
-
npm run dev
|
|
392
|
-
|
|
393
|
-
# Build library
|
|
394
207
|
npm run build
|
|
395
|
-
|
|
396
|
-
# Build for production
|
|
397
|
-
npm run build:production
|
|
398
|
-
|
|
399
|
-
# Linting
|
|
400
|
-
npm run lint
|
|
401
|
-
|
|
402
|
-
# Format code
|
|
403
|
-
npm run format
|
|
208
|
+
FLOWDROP_API_BASE_URL=http://your-backend/api node build
|
|
404
209
|
```
|
|
405
210
|
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
- **API.md** - REST API specification
|
|
409
|
-
- **CHANGELOG.md** - Version history
|
|
410
|
-
- **Storybook** - Component documentation (run `npm run storybook`)
|
|
411
|
-
|
|
412
|
-
### Enterprise Features (v0.0.16+)
|
|
413
|
-
|
|
414
|
-
- **[Enterprise Integration Guide](./docs/enterprise-integration.md)** - Complete integration patterns for React, Vue, Angular, Drupal
|
|
415
|
-
- **[Authentication Guide](./docs/authentication-guide.md)** - OAuth, JWT, SSO, and custom auth providers
|
|
416
|
-
- **[Event Handlers](./docs/event-handlers.md)** - Workflow lifecycle events and hooks
|
|
417
|
-
- **[Features Configuration](./docs/features-configuration.md)** - Feature flags, draft auto-save, and customization
|
|
418
|
-
|
|
419
|
-
## 🤝 Contributing
|
|
420
|
-
|
|
421
|
-
Not accepting contributions until the library stabilizes. Stay tuned.
|
|
211
|
+
Runtime configuration means you build once and deploy to staging, production, or anywhere else with just environment variables.
|
|
422
212
|
|
|
423
|
-
## 📄 License
|
|
424
213
|
|
|
425
|
-
MIT
|
|
426
214
|
|
|
427
|
-
##
|
|
215
|
+
## Documentation
|
|
428
216
|
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
217
|
+
| Resource | Description |
|
|
218
|
+
| ---------------------------------- | ------------------------ |
|
|
219
|
+
| [API.md](./API.md) | REST API specification |
|
|
220
|
+
| [DOCKER.md](./DOCKER.md) | Docker deployment guide |
|
|
221
|
+
| [QUICK_START.md](./QUICK_START.md) | Get running in 5 minutes |
|
|
222
|
+
| [CHANGELOG.md](./CHANGELOG.md) | Version history |
|
|
432
223
|
|
|
433
|
-
##
|
|
434
|
-
|
|
435
|
-
FlowDrop uses **runtime configuration** instead of build-time environment variables, allowing you to build once and deploy to multiple environments.
|
|
436
|
-
|
|
437
|
-
### Quick Start with Docker
|
|
224
|
+
## Development
|
|
438
225
|
|
|
439
226
|
```bash
|
|
440
|
-
#
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
#
|
|
444
|
-
# Set FLOWDROP_API_BASE_URL to your backend API URL
|
|
445
|
-
|
|
446
|
-
# Start with Docker Compose
|
|
447
|
-
docker-compose up -d
|
|
227
|
+
npm install # Install dependencies
|
|
228
|
+
npm run dev # Start dev server
|
|
229
|
+
npm run build # Build library
|
|
230
|
+
npm test # Run all tests
|
|
448
231
|
```
|
|
449
232
|
|
|
450
|
-
### Environment Variables
|
|
451
|
-
|
|
452
|
-
**Production (Runtime):**
|
|
453
|
-
|
|
454
|
-
- `FLOWDROP_API_BASE_URL` - Backend API URL
|
|
455
|
-
- `FLOWDROP_THEME` - UI theme (light/dark/auto)
|
|
456
|
-
- `FLOWDROP_TIMEOUT` - Request timeout in milliseconds
|
|
457
|
-
- `FLOWDROP_AUTH_TYPE` - Authentication type (none/bearer/api_key/custom)
|
|
458
|
-
- `FLOWDROP_AUTH_TOKEN` - Authentication token
|
|
459
|
-
|
|
460
|
-
**Development (Build-time):**
|
|
461
|
-
|
|
462
|
-
- `VITE_API_BASE_URL` - Dev API URL (used only during `npm run dev`)
|
|
463
|
-
|
|
464
|
-
### Build for Production
|
|
465
233
|
|
|
466
|
-
|
|
467
|
-
# Install dependencies
|
|
468
|
-
npm ci
|
|
469
|
-
|
|
470
|
-
# Build the application
|
|
471
|
-
npm run build
|
|
472
|
-
|
|
473
|
-
# Set environment variables and start
|
|
474
|
-
export FLOWDROP_API_BASE_URL=http://your-backend:8080/api/flowdrop
|
|
475
|
-
node build
|
|
476
|
-
```
|
|
234
|
+
## Contributing
|
|
477
235
|
|
|
478
|
-
|
|
236
|
+
FlowDrop is stabilizing. Contributions will open soon. Star the repo to stay updated.
|
|
479
237
|
|
|
480
|
-
- [DOCKER.md](./DOCKER.md) - Docker quick start
|
|
481
238
|
|
|
482
|
-
|
|
239
|
+
<p align="center">
|
|
240
|
+
<strong>FlowDrop</strong> - The visual workflow editor you own completely
|
|
241
|
+
</p>
|
|
483
242
|
|
|
484
|
-
|
|
243
|
+
<p align="center">
|
|
244
|
+
Built with ❤️ Svelte 5 and @xyflow/svelte
|
|
245
|
+
</p>
|
|
@@ -30,7 +30,7 @@ export declare class ApiError extends Error {
|
|
|
30
30
|
* // With AuthProvider
|
|
31
31
|
* const client = new EnhancedFlowDropApiClient(config, authProvider);
|
|
32
32
|
*
|
|
33
|
-
* //
|
|
33
|
+
* // Without authentication
|
|
34
34
|
* const client = new EnhancedFlowDropApiClient(config);
|
|
35
35
|
* ```
|
|
36
36
|
*/
|
|
@@ -41,7 +41,7 @@ export declare class EnhancedFlowDropApiClient {
|
|
|
41
41
|
* Create a new EnhancedFlowDropApiClient
|
|
42
42
|
*
|
|
43
43
|
* @param config - Endpoint configuration
|
|
44
|
-
* @param authProvider - Optional authentication provider (
|
|
44
|
+
* @param authProvider - Optional authentication provider (defaults to NoAuthProvider)
|
|
45
45
|
*/
|
|
46
46
|
constructor(config: EndpointConfig, authProvider?: AuthProvider);
|
|
47
47
|
/**
|