flowengine-mcp-app 2.0.1 → 3.0.1
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 +19 -270
- package/bin.js +12 -0
- package/package.json +8 -29
- package/LICENSE +0 -21
- package/build/client.d.ts +0 -56
- package/build/client.d.ts.map +0 -1
- package/build/client.js +0 -188
- package/build/client.js.map +0 -1
- package/build/index.d.ts +0 -12
- package/build/index.d.ts.map +0 -1
- package/build/index.js +0 -339
- package/build/index.js.map +0 -1
- package/build/ui/base.d.ts +0 -8
- package/build/ui/base.d.ts.map +0 -1
- package/build/ui/base.js +0 -425
- package/build/ui/base.js.map +0 -1
- package/build/ui/component-viewer.d.ts +0 -14
- package/build/ui/component-viewer.d.ts.map +0 -1
- package/build/ui/component-viewer.js +0 -678
- package/build/ui/component-viewer.js.map +0 -1
- package/build/ui/dashboard.d.ts +0 -21
- package/build/ui/dashboard.d.ts.map +0 -1
- package/build/ui/dashboard.js +0 -252
- package/build/ui/dashboard.js.map +0 -1
- package/build/ui/demo.d.ts +0 -14
- package/build/ui/demo.d.ts.map +0 -1
- package/build/ui/demo.js +0 -222
- package/build/ui/demo.js.map +0 -1
- package/build/ui/instances.d.ts +0 -17
- package/build/ui/instances.d.ts.map +0 -1
- package/build/ui/instances.js +0 -233
- package/build/ui/instances.js.map +0 -1
- package/build/ui/n8n-viewer.d.ts +0 -12
- package/build/ui/n8n-viewer.d.ts.map +0 -1
- package/build/ui/n8n-viewer.js +0 -371
- package/build/ui/n8n-viewer.js.map +0 -1
- package/build/ui/portals.d.ts +0 -14
- package/build/ui/portals.d.ts.map +0 -1
- package/build/ui/portals.js +0 -184
- package/build/ui/portals.js.map +0 -1
- package/build/ui/widgets.d.ts +0 -17
- package/build/ui/widgets.d.ts.map +0 -1
- package/build/ui/widgets.js +0 -200
- package/build/ui/widgets.js.map +0 -1
- package/build/ui/workflows.d.ts +0 -17
- package/build/ui/workflows.d.ts.map +0 -1
- package/build/ui/workflows.js +0 -217
- package/build/ui/workflows.js.map +0 -1
package/build/ui/dashboard.js
DELETED
|
@@ -1,252 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unified Dashboard - Portals & Hosting Management
|
|
3
|
-
* Combines portal and instance management into a single interface
|
|
4
|
-
*/
|
|
5
|
-
import { baseLayout, renderEmptyState } from './base.js';
|
|
6
|
-
export function renderUnifiedDashboard(portals) {
|
|
7
|
-
if (!portals || portals.length === 0) {
|
|
8
|
-
return baseLayout('Dashboard', `
|
|
9
|
-
<div class="header">
|
|
10
|
-
<h1>🏢 FlowEngine Dashboard</h1>
|
|
11
|
-
<p>Manage your portals and hosting instances</p>
|
|
12
|
-
</div>
|
|
13
|
-
${renderEmptyState('No Portals or Instances Found', 'You don\'t have any portals yet. Create your first instance to get started.')}
|
|
14
|
-
<div class="card">
|
|
15
|
-
<h3 style="margin-bottom: 12px;">Get Started</h3>
|
|
16
|
-
<p style="color: rgba(156, 163, 175, 1); margin-bottom: 16px;">FlowEngine provides fully-managed n8n automation portals. Each portal includes:</p>
|
|
17
|
-
<ul style="color: rgba(156, 163, 175, 1); margin-left: 20px; margin-bottom: 16px;">
|
|
18
|
-
<li>Dedicated n8n automation server with custom domain</li>
|
|
19
|
-
<li>Client portal with white-label branding</li>
|
|
20
|
-
<li>Automated backups and scalable storage</li>
|
|
21
|
-
<li>Workflow and UI component builder</li>
|
|
22
|
-
</ul>
|
|
23
|
-
<button class="btn btn-primary">+ Create New Portal</button>
|
|
24
|
-
</div>
|
|
25
|
-
`);
|
|
26
|
-
}
|
|
27
|
-
// Calculate metrics
|
|
28
|
-
const dedicatedPortals = portals.filter(p => p.type === 'dedicated');
|
|
29
|
-
const payPerInstancePortals = portals.filter(p => p.type === 'pay-per-instance');
|
|
30
|
-
const activePortals = portals.filter(p => p.status === 'active' || p.status === 'running');
|
|
31
|
-
const totalStorage = portals.reduce((sum, p) => sum + p.storage_limit_gb, 0);
|
|
32
|
-
const usedStorage = portals.reduce((sum, p) => sum + (p.storage_used_gb || 0), 0);
|
|
33
|
-
const storagePercent = totalStorage > 0 ? Math.round((usedStorage / totalStorage) * 100) : 0;
|
|
34
|
-
const portalCards = portals
|
|
35
|
-
.map((portal) => {
|
|
36
|
-
const statusBadge = getStatusBadge(portal.status, portal.subscription_status);
|
|
37
|
-
const typeBadge = getTypeBadge(portal.type);
|
|
38
|
-
const storageUsed = portal.storage_used_gb || Math.floor(portal.storage_limit_gb * 0.3); // Mock if not available
|
|
39
|
-
const storagePercent = portal.storage_limit_gb > 0 ? Math.round((storageUsed / portal.storage_limit_gb) * 100) : 0;
|
|
40
|
-
const storageBarColor = storagePercent > 80 ? 'rgba(248, 113, 113, 1)' : storagePercent > 60 ? 'rgba(250, 204, 21, 1)' : 'rgba(74, 222, 128, 1)';
|
|
41
|
-
return `
|
|
42
|
-
<div class="card">
|
|
43
|
-
<div class="card-header">
|
|
44
|
-
<div>
|
|
45
|
-
<div class="card-title">${portal.instance_url}</div>
|
|
46
|
-
<div class="card-subtitle">${portal.instance_name || `ID: ${portal.id.slice(0, 8)}...`}</div>
|
|
47
|
-
</div>
|
|
48
|
-
<div style="display: flex; gap: 8px; flex-wrap: wrap; justify-content: flex-end;">
|
|
49
|
-
${statusBadge}
|
|
50
|
-
${typeBadge}
|
|
51
|
-
</div>
|
|
52
|
-
</div>
|
|
53
|
-
|
|
54
|
-
<div>
|
|
55
|
-
<div class="stat">
|
|
56
|
-
<span class="stat-label">Storage</span>
|
|
57
|
-
<span class="stat-value">${storageUsed} GB / ${portal.storage_limit_gb} GB</span>
|
|
58
|
-
</div>
|
|
59
|
-
<div class="progress" style="margin-top: 8px; margin-bottom: 12px;">
|
|
60
|
-
<div class="progress-bar" style="width: ${storagePercent}%; background: ${storageBarColor};"></div>
|
|
61
|
-
</div>
|
|
62
|
-
|
|
63
|
-
${portal.client_email ? `
|
|
64
|
-
<div class="stat">
|
|
65
|
-
<span class="stat-label">Client</span>
|
|
66
|
-
<span class="stat-value">${portal.client_email}</span>
|
|
67
|
-
</div>
|
|
68
|
-
` : ''}
|
|
69
|
-
|
|
70
|
-
<div class="stat">
|
|
71
|
-
<span class="stat-label">Subscription</span>
|
|
72
|
-
<span class="stat-value">${portal.subscription_status || 'Active'}</span>
|
|
73
|
-
</div>
|
|
74
|
-
|
|
75
|
-
<div class="stat">
|
|
76
|
-
<span class="stat-label">Created</span>
|
|
77
|
-
<span class="stat-value">${new Date(portal.created_at).toLocaleDateString()}</span>
|
|
78
|
-
</div>
|
|
79
|
-
</div>
|
|
80
|
-
|
|
81
|
-
<div class="actions">
|
|
82
|
-
<a href="https://${portal.instance_url}" target="_blank" class="btn btn-primary">
|
|
83
|
-
Open Portal →
|
|
84
|
-
</a>
|
|
85
|
-
<button class="btn btn-secondary">Settings</button>
|
|
86
|
-
<button class="btn btn-secondary">Manage</button>
|
|
87
|
-
</div>
|
|
88
|
-
</div>
|
|
89
|
-
`;
|
|
90
|
-
})
|
|
91
|
-
.join('');
|
|
92
|
-
return baseLayout('Dashboard', `
|
|
93
|
-
<div class="header">
|
|
94
|
-
<h1>🏢 FlowEngine Dashboard</h1>
|
|
95
|
-
<p>Manage ${portals.length} portal${portals.length === 1 ? '' : 's'} • ${activePortals.length} active • ${usedStorage.toFixed(1)} / ${totalStorage} GB used</p>
|
|
96
|
-
</div>
|
|
97
|
-
|
|
98
|
-
<div class="metric-grid">
|
|
99
|
-
<div class="metric-card">
|
|
100
|
-
<div class="metric-value">${portals.length}</div>
|
|
101
|
-
<div class="metric-label">Total Portals</div>
|
|
102
|
-
</div>
|
|
103
|
-
<div class="metric-card">
|
|
104
|
-
<div class="metric-value">${activePortals.length}</div>
|
|
105
|
-
<div class="metric-label">Active</div>
|
|
106
|
-
</div>
|
|
107
|
-
<div class="metric-card">
|
|
108
|
-
<div class="metric-value">${dedicatedPortals.length}</div>
|
|
109
|
-
<div class="metric-label">Dedicated</div>
|
|
110
|
-
</div>
|
|
111
|
-
<div class="metric-card">
|
|
112
|
-
<div class="metric-value">${storagePercent}%</div>
|
|
113
|
-
<div class="metric-label">Storage Used</div>
|
|
114
|
-
</div>
|
|
115
|
-
</div>
|
|
116
|
-
|
|
117
|
-
<div class="grid">
|
|
118
|
-
${portalCards}
|
|
119
|
-
</div>
|
|
120
|
-
|
|
121
|
-
<div class="card">
|
|
122
|
-
<h3 style="margin-bottom: 12px;">Quick Actions</h3>
|
|
123
|
-
<div style="display: flex; gap: 12px; flex-wrap: wrap;">
|
|
124
|
-
<button class="btn btn-primary">+ New Portal</button>
|
|
125
|
-
<button class="btn btn-secondary">Invite Client</button>
|
|
126
|
-
<button class="btn btn-secondary">View All Backups</button>
|
|
127
|
-
<button class="btn btn-secondary">Billing Settings</button>
|
|
128
|
-
</div>
|
|
129
|
-
</div>
|
|
130
|
-
`);
|
|
131
|
-
}
|
|
132
|
-
function getStatusBadge(status, subscriptionStatus) {
|
|
133
|
-
const isActive = status === 'active' || status === 'running';
|
|
134
|
-
const isPaused = status === 'paused' || subscriptionStatus === 'paused';
|
|
135
|
-
const isError = status === 'error' || status === 'failed';
|
|
136
|
-
if (isActive) {
|
|
137
|
-
return '<span class="badge badge-success"><span class="dot dot-success"></span>Active</span>';
|
|
138
|
-
}
|
|
139
|
-
else if (isPaused) {
|
|
140
|
-
return '<span class="badge badge-warning"><span class="dot dot-warning"></span>Paused</span>';
|
|
141
|
-
}
|
|
142
|
-
else if (isError) {
|
|
143
|
-
return '<span class="badge badge-error"><span class="dot dot-error"></span>Error</span>';
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
return '<span class="badge badge-neutral"><span class="dot dot-neutral"></span>Inactive</span>';
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
function getTypeBadge(type) {
|
|
150
|
-
if (type === 'dedicated') {
|
|
151
|
-
return '<span class="badge" style="background: rgba(168, 85, 247, 0.1); border: 1px solid rgba(168, 85, 247, 0.3); color: rgba(168, 85, 247, 1);">Dedicated</span>';
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
return '<span class="badge badge-neutral">Pay-Per-Instance</span>';
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
export function renderPortalDetails(portal) {
|
|
158
|
-
const statusBadge = getStatusBadge(portal.status, portal.subscription_status);
|
|
159
|
-
const typeBadge = getTypeBadge(portal.type);
|
|
160
|
-
const storageUsed = portal.storage_used_gb || Math.floor(portal.storage_limit_gb * 0.3);
|
|
161
|
-
const storagePercent = portal.storage_limit_gb > 0 ? Math.round((storageUsed / portal.storage_limit_gb) * 100) : 0;
|
|
162
|
-
return baseLayout(`Portal: ${portal.instance_url}`, `
|
|
163
|
-
<div class="header">
|
|
164
|
-
<h1>🏢 ${portal.instance_url}</h1>
|
|
165
|
-
<p>Portal ID: <span class="code">${portal.id.slice(0, 8)}...</span> • ${statusBadge} ${typeBadge}</p>
|
|
166
|
-
</div>
|
|
167
|
-
|
|
168
|
-
<div class="metric-grid" style="margin-bottom: 24px;">
|
|
169
|
-
<div class="metric-card">
|
|
170
|
-
<div class="metric-value">${statusBadge}</div>
|
|
171
|
-
<div class="metric-label">Status</div>
|
|
172
|
-
</div>
|
|
173
|
-
<div class="metric-card">
|
|
174
|
-
<div class="metric-value">${storageUsed} GB</div>
|
|
175
|
-
<div class="metric-label">Storage Used</div>
|
|
176
|
-
</div>
|
|
177
|
-
<div class="metric-card">
|
|
178
|
-
<div class="metric-value">${portal.storage_limit_gb} GB</div>
|
|
179
|
-
<div class="metric-label">Total Storage</div>
|
|
180
|
-
</div>
|
|
181
|
-
<div class="metric-card">
|
|
182
|
-
<div class="metric-value">${portal.subscription_status || 'Active'}</div>
|
|
183
|
-
<div class="metric-label">Subscription</div>
|
|
184
|
-
</div>
|
|
185
|
-
</div>
|
|
186
|
-
|
|
187
|
-
<div class="card" style="margin-bottom: 24px;">
|
|
188
|
-
<h3 style="margin-bottom: 16px;">Storage Usage</h3>
|
|
189
|
-
<div style="margin-bottom: 12px;">
|
|
190
|
-
<div style="display: flex; justify-content: space-between; margin-bottom: 8px;">
|
|
191
|
-
<span style="color: rgba(156, 163, 175, 1); font-size: 14px;">Used: ${storageUsed} GB</span>
|
|
192
|
-
<span style="color: rgba(156, 163, 175, 1); font-size: 14px;">${storagePercent}%</span>
|
|
193
|
-
</div>
|
|
194
|
-
<div class="progress">
|
|
195
|
-
<div class="progress-bar" style="width: ${storagePercent}%;"></div>
|
|
196
|
-
</div>
|
|
197
|
-
</div>
|
|
198
|
-
${storagePercent > 80
|
|
199
|
-
? '<div style="color: rgba(248, 113, 113, 1); font-size: 13px; margin-top: 12px;">⚠️ Storage is running low. Consider upgrading your plan.</div>'
|
|
200
|
-
: ''}
|
|
201
|
-
</div>
|
|
202
|
-
|
|
203
|
-
<div class="card" style="margin-bottom: 24px;">
|
|
204
|
-
<h3 style="margin-bottom: 16px;">Portal Information</h3>
|
|
205
|
-
<div class="stat">
|
|
206
|
-
<span class="stat-label">Portal URL</span>
|
|
207
|
-
<span class="stat-value"><a href="https://${portal.instance_url}" target="_blank">${portal.instance_url}</a></span>
|
|
208
|
-
</div>
|
|
209
|
-
<div class="stat">
|
|
210
|
-
<span class="stat-label">Instance Name</span>
|
|
211
|
-
<span class="stat-value">${portal.instance_name || 'N/A'}</span>
|
|
212
|
-
</div>
|
|
213
|
-
<div class="stat">
|
|
214
|
-
<span class="stat-label">Type</span>
|
|
215
|
-
<span class="stat-value">${typeBadge}</span>
|
|
216
|
-
</div>
|
|
217
|
-
${portal.client_email ? `
|
|
218
|
-
<div class="stat">
|
|
219
|
-
<span class="stat-label">Client Email</span>
|
|
220
|
-
<span class="stat-value">${portal.client_email}</span>
|
|
221
|
-
</div>
|
|
222
|
-
` : ''}
|
|
223
|
-
${portal.allow_full_access !== undefined ? `
|
|
224
|
-
<div class="stat">
|
|
225
|
-
<span class="stat-label">Full Access</span>
|
|
226
|
-
<span class="stat-value">${portal.allow_full_access ? 'Enabled' : 'Disabled'}</span>
|
|
227
|
-
</div>
|
|
228
|
-
` : ''}
|
|
229
|
-
<div class="stat">
|
|
230
|
-
<span class="stat-label">Created</span>
|
|
231
|
-
<span class="stat-value">${new Date(portal.created_at).toLocaleDateString()}</span>
|
|
232
|
-
</div>
|
|
233
|
-
${portal.updated_at ? `
|
|
234
|
-
<div class="stat">
|
|
235
|
-
<span class="stat-label">Last Updated</span>
|
|
236
|
-
<span class="stat-value">${new Date(portal.updated_at).toLocaleDateString()}</span>
|
|
237
|
-
</div>
|
|
238
|
-
` : ''}
|
|
239
|
-
</div>
|
|
240
|
-
|
|
241
|
-
<div class="actions">
|
|
242
|
-
<a href="https://${portal.instance_url}" target="_blank" class="btn btn-primary">
|
|
243
|
-
Open Portal →
|
|
244
|
-
</a>
|
|
245
|
-
<button class="btn btn-secondary">Change Domain</button>
|
|
246
|
-
<button class="btn btn-secondary">Upgrade Storage</button>
|
|
247
|
-
<button class="btn btn-secondary">Create Backup</button>
|
|
248
|
-
<button class="btn btn-danger">Delete Portal</button>
|
|
249
|
-
</div>
|
|
250
|
-
`);
|
|
251
|
-
}
|
|
252
|
-
//# sourceMappingURL=dashboard.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/ui/dashboard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAkBzD,MAAM,UAAU,sBAAsB,CAAC,OAAgC;IACrE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,UAAU,CACf,WAAW,EACX;;;;;QAKE,gBAAgB,CAAC,+BAA+B,EAAE,6EAA6E,CAAC;;;;;;;;;;;;KAYnI,CACA,CAAC;IACJ,CAAC;IAED,oBAAoB;IACpB,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IACrE,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC;IACjF,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAC3F,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IAC7E,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClF,MAAM,cAAc,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7F,MAAM,WAAW,GAAG,OAAO;SACxB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACd,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC9E,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAC,CAAC,wBAAwB;QACjH,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnH,MAAM,eAAe,GAAG,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,uBAAuB,CAAC;QAEjJ,OAAO;;;;wCAI2B,MAAM,CAAC,YAAY;2CAChB,MAAM,CAAC,aAAa,IAAI,OAAO,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK;;;gBAGpF,WAAW;gBACX,SAAS;;;;;;;yCAOgB,WAAW,SAAS,MAAM,CAAC,gBAAgB;;;wDAG5B,cAAc,kBAAkB,eAAe;;;cAGzF,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;;;yCAGK,MAAM,CAAC,YAAY;;aAE/C,CAAC,CAAC,CAAC,EAAE;;;;yCAIuB,MAAM,CAAC,mBAAmB,IAAI,QAAQ;;;;;yCAKtC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,kBAAkB,EAAE;;;;;+BAK1D,MAAM,CAAC,YAAY;;;;;;;OAO3C,CAAC;IACJ,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO,UAAU,CACf,WAAW,EACX;;;kBAGc,OAAO,CAAC,MAAM,UAAU,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,aAAa,CAAC,MAAM,aAAa,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,YAAY;;;;;oCAKpH,OAAO,CAAC,MAAM;;;;oCAId,aAAa,CAAC,MAAM;;;;oCAIpB,gBAAgB,CAAC,MAAM;;;;oCAIvB,cAAc;;;;;;QAM1C,WAAW;;;;;;;;;;;;GAYhB,CACA,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAAc,EAAE,kBAA2B;IACjE,MAAM,QAAQ,GAAG,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,CAAC;IAC7D,MAAM,QAAQ,GAAG,MAAM,KAAK,QAAQ,IAAI,kBAAkB,KAAK,QAAQ,CAAC;IACxE,MAAM,OAAO,GAAG,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,QAAQ,CAAC;IAE1D,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,sFAAsF,CAAC;IAChG,CAAC;SAAM,IAAI,QAAQ,EAAE,CAAC;QACpB,OAAO,sFAAsF,CAAC;IAChG,CAAC;SAAM,IAAI,OAAO,EAAE,CAAC;QACnB,OAAO,iFAAiF,CAAC;IAC3F,CAAC;SAAM,CAAC;QACN,OAAO,wFAAwF,CAAC;IAClG,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAsC;IAC1D,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACzB,OAAO,4JAA4J,CAAC;IACtK,CAAC;SAAM,CAAC;QACN,OAAO,2DAA2D,CAAC;IACrE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAA6B;IAC/D,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC9E,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAC;IACxF,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnH,OAAO,UAAU,CACf,WAAW,MAAM,CAAC,YAAY,EAAE,EAChC;;eAEW,MAAM,CAAC,YAAY;yCACO,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,gBAAgB,WAAW,IAAI,SAAS;;;;;oCAKlE,WAAW;;;;oCAIX,WAAW;;;;oCAIX,MAAM,CAAC,gBAAgB;;;;oCAIvB,MAAM,CAAC,mBAAmB,IAAI,QAAQ;;;;;;;;;gFASM,WAAW;0EACjB,cAAc;;;oDAGpC,cAAc;;;QAI1D,cAAc,GAAG,EAAE;QACjB,CAAC,CAAC,+IAA+I;QACjJ,CAAC,CAAC,EACN;;;;;;;oDAO8C,MAAM,CAAC,YAAY,qBAAqB,MAAM,CAAC,YAAY;;;;mCAI5E,MAAM,CAAC,aAAa,IAAI,KAAK;;;;mCAI7B,SAAS;;QAEpC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;;;mCAGK,MAAM,CAAC,YAAY;;OAE/C,CAAC,CAAC,CAAC,EAAE;QACJ,MAAM,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC;;;mCAGd,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;;OAE7E,CAAC,CAAC,CAAC,EAAE;;;mCAGuB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,kBAAkB,EAAE;;QAE3E,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;;;mCAGO,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,kBAAkB,EAAE;;OAE5E,CAAC,CAAC,CAAC,EAAE;;;;yBAIa,MAAM,CAAC,YAAY;;;;;;;;GAQzC,CACA,CAAC;AACJ,CAAC"}
|
package/build/ui/demo.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* n8n Demo & Templates Showcase
|
|
3
|
-
*/
|
|
4
|
-
export interface Template {
|
|
5
|
-
id: string;
|
|
6
|
-
name: string;
|
|
7
|
-
description: string;
|
|
8
|
-
category: string;
|
|
9
|
-
nodes_count?: number;
|
|
10
|
-
difficulty?: string;
|
|
11
|
-
tags?: string[];
|
|
12
|
-
}
|
|
13
|
-
export declare function renderDemoShowcase(templates?: Template[]): string;
|
|
14
|
-
//# sourceMappingURL=demo.d.ts.map
|
package/build/ui/demo.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../../src/ui/demo.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,CAsCjE"}
|
package/build/ui/demo.js
DELETED
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* n8n Demo & Templates Showcase
|
|
3
|
-
*/
|
|
4
|
-
import { baseLayout } from './base.js';
|
|
5
|
-
export function renderDemoShowcase(templates) {
|
|
6
|
-
const demoTemplates = templates || getDemoTemplates();
|
|
7
|
-
return baseLayout('n8n Demo & Templates', `
|
|
8
|
-
<div class="header">
|
|
9
|
-
<h1>🎬 n8n Demo & Templates</h1>
|
|
10
|
-
<p>Explore pre-built workflows and automation templates</p>
|
|
11
|
-
</div>
|
|
12
|
-
|
|
13
|
-
<div class="card" style="margin-bottom: 24px; background: linear-gradient(135deg, rgba(147, 51, 234, 0.1), rgba(79, 70, 229, 0.1)); border-color: rgba(147, 51, 234, 0.3);">
|
|
14
|
-
<h2 style="margin-bottom: 12px; font-size: 24px;">🚀 Try FlowEngine Free</h2>
|
|
15
|
-
<p style="color: #d4d4d4; margin-bottom: 16px; font-size: 15px;">
|
|
16
|
-
Experience the power of n8n automation with FlowEngine's free trial. Get started with pre-built templates and build your first workflow in minutes.
|
|
17
|
-
</p>
|
|
18
|
-
<div style="display: flex; gap: 12px;">
|
|
19
|
-
<button class="btn btn-primary">Start Free Trial</button>
|
|
20
|
-
<button class="btn btn-secondary">Watch Demo Video</button>
|
|
21
|
-
</div>
|
|
22
|
-
</div>
|
|
23
|
-
|
|
24
|
-
<h3 style="margin: 24px 0 16px;">Featured Templates</h3>
|
|
25
|
-
${renderTemplateGrid(demoTemplates.slice(0, 6))}
|
|
26
|
-
|
|
27
|
-
<h3 style="margin: 32px 0 16px;">Popular Use Cases</h3>
|
|
28
|
-
${renderUseCases()}
|
|
29
|
-
|
|
30
|
-
<div class="card" style="margin-top: 32px;">
|
|
31
|
-
<h3 style="margin-bottom: 12px;">Ready to Get Started?</h3>
|
|
32
|
-
<p style="color: #999; margin-bottom: 16px;">Browse all templates or create your first workflow from scratch.</p>
|
|
33
|
-
<div style="display: flex; gap: 12px;">
|
|
34
|
-
<button class="btn btn-primary">Browse All Templates</button>
|
|
35
|
-
<button class="btn btn-secondary">Create Custom Workflow</button>
|
|
36
|
-
</div>
|
|
37
|
-
</div>
|
|
38
|
-
`);
|
|
39
|
-
}
|
|
40
|
-
function renderTemplateGrid(templates) {
|
|
41
|
-
const templateCards = templates
|
|
42
|
-
.map((template) => {
|
|
43
|
-
const difficultyBadge = getDifficultyBadge(template.difficulty || 'beginner');
|
|
44
|
-
const categoryIcon = getCategoryIcon(template.category);
|
|
45
|
-
return `
|
|
46
|
-
<div class="card">
|
|
47
|
-
<div class="card-header">
|
|
48
|
-
<div>
|
|
49
|
-
<div class="card-title">${categoryIcon} ${template.name}</div>
|
|
50
|
-
<div class="card-subtitle">${template.description}</div>
|
|
51
|
-
</div>
|
|
52
|
-
${difficultyBadge}
|
|
53
|
-
</div>
|
|
54
|
-
|
|
55
|
-
<div>
|
|
56
|
-
<div class="stat">
|
|
57
|
-
<span class="stat-label">Category</span>
|
|
58
|
-
<span class="stat-value"><span class="code">${template.category}</span></span>
|
|
59
|
-
</div>
|
|
60
|
-
${template.nodes_count
|
|
61
|
-
? `
|
|
62
|
-
<div class="stat">
|
|
63
|
-
<span class="stat-label">Nodes</span>
|
|
64
|
-
<span class="stat-value">${template.nodes_count}</span>
|
|
65
|
-
</div>`
|
|
66
|
-
: ''}
|
|
67
|
-
</div>
|
|
68
|
-
|
|
69
|
-
${template.tags && template.tags.length > 0
|
|
70
|
-
? `
|
|
71
|
-
<div style="margin-top: 12px; display: flex; gap: 6px; flex-wrap: wrap;">
|
|
72
|
-
${template.tags.map((tag) => `<span class="badge badge-neutral" style="font-size: 11px;">${tag}</span>`).join('')}
|
|
73
|
-
</div>`
|
|
74
|
-
: ''}
|
|
75
|
-
|
|
76
|
-
<div class="actions">
|
|
77
|
-
<button class="btn btn-primary">Import Template</button>
|
|
78
|
-
<button class="btn btn-secondary">Preview</button>
|
|
79
|
-
</div>
|
|
80
|
-
</div>
|
|
81
|
-
`;
|
|
82
|
-
})
|
|
83
|
-
.join('');
|
|
84
|
-
return `
|
|
85
|
-
<div class="grid">
|
|
86
|
-
${templateCards}
|
|
87
|
-
</div>
|
|
88
|
-
`;
|
|
89
|
-
}
|
|
90
|
-
function renderUseCases() {
|
|
91
|
-
const useCases = [
|
|
92
|
-
{
|
|
93
|
-
icon: '💬',
|
|
94
|
-
title: 'Customer Support Automation',
|
|
95
|
-
description: 'Automate ticket routing, responses, and follow-ups',
|
|
96
|
-
examples: ['Slack notifications', 'Email autoresponder', 'CRM sync'],
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
icon: '📊',
|
|
100
|
-
title: 'Data Sync & Integration',
|
|
101
|
-
description: 'Keep your data synchronized across platforms',
|
|
102
|
-
examples: ['Google Sheets to Airtable', 'CRM to email marketing', 'Database backups'],
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
icon: '🔔',
|
|
106
|
-
title: 'Notifications & Alerts',
|
|
107
|
-
description: 'Get notified when important events happen',
|
|
108
|
-
examples: ['Sales alerts', 'System monitoring', 'Social media mentions'],
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
icon: '📝',
|
|
112
|
-
title: 'Content & Social Media',
|
|
113
|
-
description: 'Automate content publishing and social media',
|
|
114
|
-
examples: ['Auto-posting', 'Content scheduling', 'Analytics reporting'],
|
|
115
|
-
},
|
|
116
|
-
];
|
|
117
|
-
const cards = useCases
|
|
118
|
-
.map((useCase) => `
|
|
119
|
-
<div class="card">
|
|
120
|
-
<div style="font-size: 32px; margin-bottom: 12px;">${useCase.icon}</div>
|
|
121
|
-
<h4 style="margin-bottom: 8px;">${useCase.title}</h4>
|
|
122
|
-
<p style="color: #999; font-size: 14px; margin-bottom: 12px;">${useCase.description}</p>
|
|
123
|
-
<div style="display: flex; gap: 6px; flex-wrap: wrap;">
|
|
124
|
-
${useCase.examples.map((ex) => `<span class="badge badge-neutral" style="font-size: 11px;">${ex}</span>`).join('')}
|
|
125
|
-
</div>
|
|
126
|
-
</div>
|
|
127
|
-
`)
|
|
128
|
-
.join('');
|
|
129
|
-
return `
|
|
130
|
-
<div class="grid">
|
|
131
|
-
${cards}
|
|
132
|
-
</div>
|
|
133
|
-
`;
|
|
134
|
-
}
|
|
135
|
-
function getDifficultyBadge(difficulty) {
|
|
136
|
-
const difficultyLower = difficulty.toLowerCase();
|
|
137
|
-
if (difficultyLower === 'beginner' || difficultyLower === 'easy') {
|
|
138
|
-
return '<span class="badge badge-success">Beginner</span>';
|
|
139
|
-
}
|
|
140
|
-
else if (difficultyLower === 'intermediate' || difficultyLower === 'medium') {
|
|
141
|
-
return '<span class="badge badge-warning">Intermediate</span>';
|
|
142
|
-
}
|
|
143
|
-
else if (difficultyLower === 'advanced' || difficultyLower === 'hard') {
|
|
144
|
-
return '<span class="badge badge-error">Advanced</span>';
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
return `<span class="badge badge-neutral">${difficulty}</span>`;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
function getCategoryIcon(category) {
|
|
151
|
-
const icons = {
|
|
152
|
-
'customer-support': '💬',
|
|
153
|
-
'data-sync': '🔄',
|
|
154
|
-
'notifications': '🔔',
|
|
155
|
-
'social-media': '📱',
|
|
156
|
-
'productivity': '⚡',
|
|
157
|
-
'marketing': '📈',
|
|
158
|
-
'sales': '💰',
|
|
159
|
-
'development': '💻',
|
|
160
|
-
'analytics': '📊',
|
|
161
|
-
};
|
|
162
|
-
return icons[category.toLowerCase()] || '⚙️';
|
|
163
|
-
}
|
|
164
|
-
function getDemoTemplates() {
|
|
165
|
-
return [
|
|
166
|
-
{
|
|
167
|
-
id: 'demo-1',
|
|
168
|
-
name: 'Slack Lead Notification',
|
|
169
|
-
description: 'Send Slack notifications when new leads are submitted via your website form',
|
|
170
|
-
category: 'customer-support',
|
|
171
|
-
nodes_count: 4,
|
|
172
|
-
difficulty: 'beginner',
|
|
173
|
-
tags: ['Slack', 'Webhooks', 'Forms'],
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
id: 'demo-2',
|
|
177
|
-
name: 'Google Sheets to Airtable Sync',
|
|
178
|
-
description: 'Automatically sync new rows from Google Sheets to Airtable',
|
|
179
|
-
category: 'data-sync',
|
|
180
|
-
nodes_count: 5,
|
|
181
|
-
difficulty: 'beginner',
|
|
182
|
-
tags: ['Google Sheets', 'Airtable', 'Automation'],
|
|
183
|
-
},
|
|
184
|
-
{
|
|
185
|
-
id: 'demo-3',
|
|
186
|
-
name: 'Email Marketing Automation',
|
|
187
|
-
description: 'Send personalized email campaigns based on user actions',
|
|
188
|
-
category: 'marketing',
|
|
189
|
-
nodes_count: 8,
|
|
190
|
-
difficulty: 'intermediate',
|
|
191
|
-
tags: ['Email', 'Marketing', 'Personalization'],
|
|
192
|
-
},
|
|
193
|
-
{
|
|
194
|
-
id: 'demo-4',
|
|
195
|
-
name: 'Social Media Scheduler',
|
|
196
|
-
description: 'Schedule and auto-post content to multiple social media platforms',
|
|
197
|
-
category: 'social-media',
|
|
198
|
-
nodes_count: 6,
|
|
199
|
-
difficulty: 'intermediate',
|
|
200
|
-
tags: ['Twitter', 'LinkedIn', 'Instagram', 'Scheduling'],
|
|
201
|
-
},
|
|
202
|
-
{
|
|
203
|
-
id: 'demo-5',
|
|
204
|
-
name: 'Invoice Generation & Email',
|
|
205
|
-
description: 'Automatically generate invoices and email them to customers',
|
|
206
|
-
category: 'sales',
|
|
207
|
-
nodes_count: 7,
|
|
208
|
-
difficulty: 'intermediate',
|
|
209
|
-
tags: ['Invoices', 'PDF', 'Email', 'Stripe'],
|
|
210
|
-
},
|
|
211
|
-
{
|
|
212
|
-
id: 'demo-6',
|
|
213
|
-
name: 'Website Monitoring Alert',
|
|
214
|
-
description: 'Monitor your website uptime and get alerts when it goes down',
|
|
215
|
-
category: 'notifications',
|
|
216
|
-
nodes_count: 5,
|
|
217
|
-
difficulty: 'beginner',
|
|
218
|
-
tags: ['Monitoring', 'Alerts', 'Slack', 'Email'],
|
|
219
|
-
},
|
|
220
|
-
];
|
|
221
|
-
}
|
|
222
|
-
//# sourceMappingURL=demo.js.map
|
package/build/ui/demo.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"demo.js","sourceRoot":"","sources":["../../src/ui/demo.ts"],"names":[],"mappings":"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"}
|
package/build/ui/instances.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Instance / Hosting Management UI
|
|
3
|
-
*/
|
|
4
|
-
export interface Instance {
|
|
5
|
-
id: string;
|
|
6
|
-
instance_url: string;
|
|
7
|
-
status: string;
|
|
8
|
-
storage_limit_gb: number;
|
|
9
|
-
storage_used_gb?: number;
|
|
10
|
-
subscription_status?: string;
|
|
11
|
-
tier?: string;
|
|
12
|
-
created_at: string;
|
|
13
|
-
updated_at: string;
|
|
14
|
-
}
|
|
15
|
-
export declare function renderInstancesManager(instances: Instance[]): string;
|
|
16
|
-
export declare function renderInstanceDetails(instance: Instance, healthData?: any): string;
|
|
17
|
-
//# sourceMappingURL=instances.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"instances.d.ts","sourceRoot":"","sources":["../../src/ui/instances.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CA0GpE;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,GAAG,GAAG,MAAM,CA+FlF"}
|