flowengine-mcp-app 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -9
- package/build/index.js +68 -55
- package/build/index.js.map +1 -1
- package/build/ui/base.d.ts +1 -0
- package/build/ui/base.d.ts.map +1 -1
- package/build/ui/base.js +201 -77
- package/build/ui/base.js.map +1 -1
- package/build/ui/chat.d.ts +6 -0
- package/build/ui/chat.d.ts.map +1 -0
- package/build/ui/chat.js +1530 -0
- package/build/ui/chat.js.map +1 -0
- package/build/ui/component-viewer.d.ts +14 -0
- package/build/ui/component-viewer.d.ts.map +1 -0
- package/build/ui/component-viewer.js +678 -0
- package/build/ui/component-viewer.js.map +1 -0
- package/build/ui/dashboard.d.ts +21 -0
- package/build/ui/dashboard.d.ts.map +1 -0
- package/build/ui/dashboard.js +252 -0
- package/build/ui/dashboard.js.map +1 -0
- package/build/ui/instances.js +4 -0
- package/build/ui/instances.js.map +1 -1
- package/build/ui/n8n-viewer.d.ts +12 -0
- package/build/ui/n8n-viewer.d.ts.map +1 -0
- package/build/ui/n8n-viewer.js +371 -0
- package/build/ui/n8n-viewer.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Dashboard - Portals & Hosting Management
|
|
3
|
+
* Combines portal and instance management into a single interface
|
|
4
|
+
*/
|
|
5
|
+
export interface UnifiedPortalInstance {
|
|
6
|
+
id: string;
|
|
7
|
+
instance_name: string;
|
|
8
|
+
instance_url: string;
|
|
9
|
+
storage_limit_gb: number;
|
|
10
|
+
storage_used_gb?: number;
|
|
11
|
+
status: string;
|
|
12
|
+
subscription_status?: string;
|
|
13
|
+
type: 'pay-per-instance' | 'dedicated';
|
|
14
|
+
created_at: string;
|
|
15
|
+
updated_at?: string;
|
|
16
|
+
client_email?: string;
|
|
17
|
+
allow_full_access?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function renderUnifiedDashboard(portals: UnifiedPortalInstance[]): string;
|
|
20
|
+
export declare function renderPortalDetails(portal: UnifiedPortalInstance): string;
|
|
21
|
+
//# sourceMappingURL=dashboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/ui/dashboard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,kBAAkB,GAAG,WAAW,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAuI/E;AA0BD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAoGzE"}
|
|
@@ -0,0 +1,252 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/ui/dashboard.ts"],"names":[],"mappings":"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"}
|
package/build/ui/instances.js
CHANGED
|
@@ -186,6 +186,10 @@ export function renderInstanceDetails(instance, healthData) {
|
|
|
186
186
|
`);
|
|
187
187
|
}
|
|
188
188
|
function getInstanceStatusBadge(status) {
|
|
189
|
+
// Default to active since we removed status field from API
|
|
190
|
+
if (!status) {
|
|
191
|
+
return '<span class="badge badge-success"><span class="dot dot-success"></span>Active</span>';
|
|
192
|
+
}
|
|
189
193
|
const statusLower = status.toLowerCase();
|
|
190
194
|
if (statusLower === 'active' || statusLower === 'running') {
|
|
191
195
|
return '<span class="badge badge-success"><span class="dot dot-success"></span>Active</span>';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instances.js","sourceRoot":"","sources":["../../src/ui/instances.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"instances.js","sourceRoot":"","sources":["../../src/ui/instances.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* n8n Workflow Viewer - Direct workflow display via MCP
|
|
3
|
+
* No chat interface - just displays workflows returned by MCP
|
|
4
|
+
*/
|
|
5
|
+
export interface WorkflowData {
|
|
6
|
+
name: string;
|
|
7
|
+
nodes: any[];
|
|
8
|
+
connections: any;
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
}
|
|
11
|
+
export declare function renderN8nViewer(workflow?: WorkflowData): string;
|
|
12
|
+
//# sourceMappingURL=n8n-viewer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"n8n-viewer.d.ts","sourceRoot":"","sources":["../../src/ui/n8n-viewer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,GAAG,EAAE,CAAC;IACb,WAAW,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,MAAM,CA+W/D"}
|