@qwickapps/server 1.0.0 → 1.1.7
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 +179 -80
- package/dist/core/control-panel.d.ts.map +1 -1
- package/dist/core/control-panel.js +37 -45
- package/dist/core/control-panel.js.map +1 -1
- package/dist/core/gateway.d.ts +32 -13
- package/dist/core/gateway.d.ts.map +1 -1
- package/dist/core/gateway.js +150 -99
- package/dist/core/gateway.js.map +1 -1
- package/dist/core/guards.d.ts +22 -0
- package/dist/core/guards.d.ts.map +1 -0
- package/dist/core/guards.js +167 -0
- package/dist/core/guards.js.map +1 -0
- package/dist/core/health-manager.d.ts.map +1 -1
- package/dist/core/health-manager.js +3 -9
- package/dist/core/health-manager.js.map +1 -1
- package/dist/core/logging.d.ts.map +1 -1
- package/dist/core/logging.js +1 -5
- package/dist/core/logging.js.map +1 -1
- package/dist/core/types.d.ts +104 -11
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/plugins/cache-plugin.d.ts +219 -0
- package/dist/plugins/cache-plugin.d.ts.map +1 -0
- package/dist/plugins/cache-plugin.js +326 -0
- package/dist/plugins/cache-plugin.js.map +1 -0
- package/dist/plugins/cache-plugin.test.d.ts +8 -0
- package/dist/plugins/cache-plugin.test.d.ts.map +1 -0
- package/dist/plugins/cache-plugin.test.js +188 -0
- package/dist/plugins/cache-plugin.test.js.map +1 -0
- package/dist/plugins/config-plugin.js +1 -1
- package/dist/plugins/config-plugin.js.map +1 -1
- package/dist/plugins/diagnostics-plugin.js +1 -1
- package/dist/plugins/diagnostics-plugin.js.map +1 -1
- package/dist/plugins/frontend-app-plugin.d.ts +39 -0
- package/dist/plugins/frontend-app-plugin.d.ts.map +1 -0
- package/dist/plugins/frontend-app-plugin.js +176 -0
- package/dist/plugins/frontend-app-plugin.js.map +1 -0
- package/dist/plugins/health-plugin.js +1 -1
- package/dist/plugins/health-plugin.js.map +1 -1
- package/dist/plugins/index.d.ts +8 -0
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +5 -0
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/logs-plugin.d.ts.map +1 -1
- package/dist/plugins/logs-plugin.js +1 -3
- package/dist/plugins/logs-plugin.js.map +1 -1
- package/dist/plugins/postgres-plugin.d.ts +155 -0
- package/dist/plugins/postgres-plugin.d.ts.map +1 -0
- package/dist/plugins/postgres-plugin.js +244 -0
- package/dist/plugins/postgres-plugin.js.map +1 -0
- package/dist/plugins/postgres-plugin.test.d.ts +8 -0
- package/dist/plugins/postgres-plugin.test.d.ts.map +1 -0
- package/dist/plugins/postgres-plugin.test.js +165 -0
- package/dist/plugins/postgres-plugin.test.js.map +1 -0
- package/dist-ui/assets/{index-Bk7ypbI4.js → index-CW1BviRn.js} +2 -2
- package/dist-ui/assets/{index-Bk7ypbI4.js.map → index-CW1BviRn.js.map} +1 -1
- package/dist-ui/index.html +1 -1
- package/package.json +18 -2
- package/src/core/control-panel.ts +41 -53
- package/src/core/gateway.ts +193 -124
- package/src/core/guards.ts +190 -0
- package/src/core/health-manager.ts +3 -9
- package/src/core/logging.ts +1 -5
- package/src/core/types.ts +115 -9
- package/src/index.ts +40 -0
- package/src/plugins/cache-plugin.test.ts +241 -0
- package/src/plugins/cache-plugin.ts +503 -0
- package/src/plugins/config-plugin.ts +1 -1
- package/src/plugins/diagnostics-plugin.ts +1 -1
- package/src/plugins/frontend-app-plugin.ts +211 -0
- package/src/plugins/health-plugin.ts +1 -1
- package/src/plugins/index.ts +13 -0
- package/src/plugins/logs-plugin.ts +1 -3
- package/src/plugins/postgres-plugin.test.ts +213 -0
- package/src/plugins/postgres-plugin.ts +345 -0
- package/ui/src/api/controlPanelApi.ts +1 -1
- package/ui/src/pages/LogsPage.tsx +6 -10
package/README.md
CHANGED
|
@@ -5,12 +5,12 @@ A flexible, pluggable control panel framework for QwickApps services. Provides a
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
7
|
- **Gateway Pattern**: Production-ready gateway that proxies API requests while keeping control panel always responsive
|
|
8
|
-
- **
|
|
9
|
-
- **
|
|
8
|
+
- **Configurable Mount Paths**: Control panel mounts at `/cpanel` by default, reserving root for frontend apps
|
|
9
|
+
- **Route Guards**: Unified authentication system supporting Basic Auth, Supabase OAuth, and Auth0
|
|
10
10
|
- **Plugin System**: Extensible architecture for adding custom functionality
|
|
11
11
|
- **Health Monitoring**: Built-in health check management with customizable checks
|
|
12
|
+
- **Frontend App Support**: Handle root path with redirect, static files, or landing page
|
|
12
13
|
- **Theming**: Customizable branding and styling
|
|
13
|
-
- **Proxy Support**: Skip body parsing for specific paths to enable proxy middleware
|
|
14
14
|
|
|
15
15
|
## Installation
|
|
16
16
|
|
|
@@ -28,16 +28,13 @@ const controlPanel = createControlPanel({
|
|
|
28
28
|
productName: 'My Service',
|
|
29
29
|
port: 3101,
|
|
30
30
|
version: '1.0.0',
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
provider: 'google',
|
|
39
|
-
allowedEmails: ['admin@example.com'],
|
|
40
|
-
},
|
|
31
|
+
mountPath: '/cpanel',
|
|
32
|
+
guard: {
|
|
33
|
+
type: 'basic',
|
|
34
|
+
username: 'admin',
|
|
35
|
+
password: process.env.ADMIN_PASSWORD!,
|
|
36
|
+
realm: 'My Service Control Panel',
|
|
37
|
+
excludePaths: ['/api/health'],
|
|
41
38
|
},
|
|
42
39
|
},
|
|
43
40
|
plugins: [
|
|
@@ -55,7 +52,7 @@ const controlPanel = createControlPanel({
|
|
|
55
52
|
});
|
|
56
53
|
|
|
57
54
|
await controlPanel.start();
|
|
58
|
-
console.log(`Control panel running at http://localhost:3101`);
|
|
55
|
+
console.log(`Control panel running at http://localhost:3101/cpanel`);
|
|
59
56
|
```
|
|
60
57
|
|
|
61
58
|
## Gateway Pattern
|
|
@@ -74,9 +71,14 @@ const gateway = createGateway(
|
|
|
74
71
|
productName: 'My Service',
|
|
75
72
|
gatewayPort: 3101, // Public port (control panel)
|
|
76
73
|
servicePort: 3100, // Internal port (API)
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
74
|
+
controlPanelPath: '/cpanel',
|
|
75
|
+
controlPanelGuard: {
|
|
76
|
+
type: 'basic',
|
|
77
|
+
username: 'admin',
|
|
78
|
+
password: process.env.ADMIN_PASSWORD!,
|
|
79
|
+
realm: 'My Service Control Panel',
|
|
80
|
+
excludePaths: ['/health', '/api/v1'],
|
|
81
|
+
},
|
|
80
82
|
proxyPaths: ['/api/v1'],
|
|
81
83
|
plugins: [
|
|
82
84
|
createHealthPlugin({
|
|
@@ -106,9 +108,9 @@ await gateway.start();
|
|
|
106
108
|
```
|
|
107
109
|
Internet → Gateway (3101, public) → API Service (3100, internal)
|
|
108
110
|
↓
|
|
109
|
-
Control Panel UI
|
|
110
|
-
/api/health
|
|
111
|
-
/api/diagnostics
|
|
111
|
+
Control Panel UI (/cpanel)
|
|
112
|
+
/cpanel/api/health
|
|
113
|
+
/cpanel/api/diagnostics
|
|
112
114
|
```
|
|
113
115
|
|
|
114
116
|
The gateway is always responsive even if the internal API service crashes, allowing you to view diagnostics and error information.
|
|
@@ -122,75 +124,112 @@ The gateway is always responsive even if the internal API service crashes, allow
|
|
|
122
124
|
| `productName` | `string` | Yes | Name displayed in the dashboard |
|
|
123
125
|
| `port` | `number` | Yes | Port to run the control panel on |
|
|
124
126
|
| `version` | `string` | No | Product version to display |
|
|
127
|
+
| `mountPath` | `string` | No | Path to mount control panel (default: `/cpanel`) |
|
|
128
|
+
| `guard` | `RouteGuardConfig` | No | Authentication guard configuration |
|
|
125
129
|
| `branding` | `object` | No | Logo, primary color, favicon |
|
|
126
|
-
| `auth` | `AuthConfig` | No | Authentication configuration |
|
|
127
130
|
| `cors` | `object` | No | CORS origins configuration |
|
|
128
131
|
| `links` | `array` | No | Quick links for the dashboard |
|
|
129
132
|
| `skipBodyParserPaths` | `string[]` | No | Paths to skip body parsing (for proxy) |
|
|
130
133
|
|
|
131
|
-
###
|
|
134
|
+
### Route Guards
|
|
132
135
|
|
|
133
|
-
|
|
136
|
+
The unified guard system provides authentication for the control panel. All guards support `excludePaths` to allow unauthenticated access to specific routes.
|
|
137
|
+
|
|
138
|
+
#### No Authentication
|
|
134
139
|
|
|
135
140
|
```typescript
|
|
136
|
-
|
|
137
|
-
enabled: true,
|
|
138
|
-
provider: 'supabase',
|
|
139
|
-
skipAuthForLocalhost: true,
|
|
140
|
-
supabase: {
|
|
141
|
-
url: 'https://xxx.supabase.co',
|
|
142
|
-
anonKey: 'your-anon-key',
|
|
143
|
-
provider: 'google', // or 'github', 'azure', 'gitlab'
|
|
144
|
-
allowedEmails: ['admin@company.com'], // Optional whitelist
|
|
145
|
-
redirectUrl: '/auth/callback', // Default
|
|
146
|
-
},
|
|
147
|
-
}
|
|
141
|
+
guard: { type: 'none' }
|
|
148
142
|
```
|
|
149
143
|
|
|
150
144
|
#### Basic Auth
|
|
151
145
|
|
|
152
146
|
```typescript
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
],
|
|
147
|
+
guard: {
|
|
148
|
+
type: 'basic',
|
|
149
|
+
username: 'admin',
|
|
150
|
+
password: process.env.ADMIN_PASSWORD!,
|
|
151
|
+
realm: 'Control Panel',
|
|
152
|
+
excludePaths: ['/api/health'],
|
|
159
153
|
}
|
|
160
154
|
```
|
|
161
155
|
|
|
162
|
-
####
|
|
156
|
+
#### Supabase OAuth
|
|
163
157
|
|
|
164
158
|
```typescript
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
next();
|
|
171
|
-
},
|
|
159
|
+
guard: {
|
|
160
|
+
type: 'supabase',
|
|
161
|
+
supabaseUrl: process.env.SUPABASE_URL!,
|
|
162
|
+
supabaseAnonKey: process.env.SUPABASE_ANON_KEY!,
|
|
163
|
+
excludePaths: ['/api/health'],
|
|
172
164
|
}
|
|
173
165
|
```
|
|
174
166
|
|
|
175
|
-
|
|
167
|
+
#### Auth0 OpenID Connect
|
|
168
|
+
|
|
169
|
+
Requires `express-openid-connect` as a peer dependency.
|
|
176
170
|
|
|
177
|
-
|
|
171
|
+
```typescript
|
|
172
|
+
guard: {
|
|
173
|
+
type: 'auth0',
|
|
174
|
+
domain: process.env.AUTH0_DOMAIN!,
|
|
175
|
+
clientId: process.env.AUTH0_CLIENT_ID!,
|
|
176
|
+
clientSecret: process.env.AUTH0_CLIENT_SECRET!,
|
|
177
|
+
baseUrl: 'https://myapp.example.com',
|
|
178
|
+
secret: process.env.AUTH0_SECRET!,
|
|
179
|
+
routes: {
|
|
180
|
+
login: '/login',
|
|
181
|
+
logout: '/logout',
|
|
182
|
+
callback: '/callback',
|
|
183
|
+
},
|
|
184
|
+
excludePaths: ['/api/health'],
|
|
185
|
+
}
|
|
186
|
+
```
|
|
178
187
|
|
|
179
|
-
###
|
|
188
|
+
### Mount Paths
|
|
180
189
|
|
|
181
|
-
|
|
190
|
+
By default, the control panel mounts at `/cpanel`, reserving the root path (`/`) for frontend applications:
|
|
182
191
|
|
|
183
192
|
```typescript
|
|
193
|
+
// Control panel at /cpanel
|
|
184
194
|
config: {
|
|
185
|
-
//
|
|
186
|
-
skipBodyParserPaths: ['/api/v1', '/health'],
|
|
195
|
+
mountPath: '/cpanel', // Dashboard at /cpanel, API at /cpanel/api/*
|
|
187
196
|
}
|
|
188
197
|
|
|
189
|
-
//
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
198
|
+
// Or mount at root (legacy behavior)
|
|
199
|
+
config: {
|
|
200
|
+
mountPath: '/', // Dashboard at /, API at /api/*
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Frontend App Plugin
|
|
205
|
+
|
|
206
|
+
Handle the root path when control panel is mounted elsewhere:
|
|
207
|
+
|
|
208
|
+
```typescript
|
|
209
|
+
import { createFrontendAppPlugin } from '@qwickapps/server';
|
|
210
|
+
|
|
211
|
+
// Redirect to external URL
|
|
212
|
+
createFrontendAppPlugin({
|
|
213
|
+
redirectUrl: 'https://myapp.example.com',
|
|
214
|
+
})
|
|
215
|
+
|
|
216
|
+
// Serve static files
|
|
217
|
+
createFrontendAppPlugin({
|
|
218
|
+
staticPath: './dist',
|
|
219
|
+
})
|
|
220
|
+
|
|
221
|
+
// Show landing page with links
|
|
222
|
+
createFrontendAppPlugin({
|
|
223
|
+
landingPage: {
|
|
224
|
+
title: 'My Service',
|
|
225
|
+
heading: 'Welcome',
|
|
226
|
+
description: 'Select a destination',
|
|
227
|
+
links: [
|
|
228
|
+
{ label: 'Control Panel', url: '/cpanel' },
|
|
229
|
+
{ label: 'API Docs', url: '/docs' },
|
|
230
|
+
],
|
|
231
|
+
},
|
|
232
|
+
})
|
|
194
233
|
```
|
|
195
234
|
|
|
196
235
|
## Plugins
|
|
@@ -217,7 +256,7 @@ createHealthPlugin({
|
|
|
217
256
|
name: 'custom',
|
|
218
257
|
type: 'custom',
|
|
219
258
|
check: async () => ({
|
|
220
|
-
|
|
259
|
+
healthy: true,
|
|
221
260
|
details: { message: 'All good' },
|
|
222
261
|
}),
|
|
223
262
|
interval: 30000,
|
|
@@ -226,6 +265,38 @@ createHealthPlugin({
|
|
|
226
265
|
});
|
|
227
266
|
```
|
|
228
267
|
|
|
268
|
+
#### Diagnostics Plugin
|
|
269
|
+
|
|
270
|
+
```typescript
|
|
271
|
+
import { createDiagnosticsPlugin } from '@qwickapps/server';
|
|
272
|
+
|
|
273
|
+
createDiagnosticsPlugin({});
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
#### Config Plugin
|
|
277
|
+
|
|
278
|
+
```typescript
|
|
279
|
+
import { createConfigPlugin } from '@qwickapps/server';
|
|
280
|
+
|
|
281
|
+
createConfigPlugin({
|
|
282
|
+
show: ['NODE_ENV', 'PORT', 'DATABASE_URL'],
|
|
283
|
+
mask: ['SECRET', 'PASSWORD', 'KEY', 'TOKEN'],
|
|
284
|
+
});
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
#### Logs Plugin
|
|
288
|
+
|
|
289
|
+
```typescript
|
|
290
|
+
import { createLogsPlugin } from '@qwickapps/server';
|
|
291
|
+
|
|
292
|
+
createLogsPlugin({
|
|
293
|
+
sources: [
|
|
294
|
+
{ name: 'app', type: 'file', path: './logs/app.log' },
|
|
295
|
+
{ name: 'error', type: 'file', path: './logs/error.log' },
|
|
296
|
+
],
|
|
297
|
+
});
|
|
298
|
+
```
|
|
299
|
+
|
|
229
300
|
### Creating Custom Plugins
|
|
230
301
|
|
|
231
302
|
```typescript
|
|
@@ -244,7 +315,7 @@ const myPlugin: ControlPanelPlugin = {
|
|
|
244
315
|
},
|
|
245
316
|
],
|
|
246
317
|
initialize: async (context: PluginContext) => {
|
|
247
|
-
context.logger.
|
|
318
|
+
context.logger.debug('My plugin initialized');
|
|
248
319
|
},
|
|
249
320
|
shutdown: async () => {
|
|
250
321
|
// Cleanup
|
|
@@ -270,28 +341,56 @@ interface ControlPanelInstance {
|
|
|
270
341
|
}
|
|
271
342
|
```
|
|
272
343
|
|
|
344
|
+
### createRouteGuard(config)
|
|
345
|
+
|
|
346
|
+
Creates authentication middleware from guard configuration.
|
|
347
|
+
|
|
348
|
+
```typescript
|
|
349
|
+
import { createRouteGuard } from '@qwickapps/server';
|
|
350
|
+
|
|
351
|
+
const guard = createRouteGuard({
|
|
352
|
+
type: 'basic',
|
|
353
|
+
username: 'admin',
|
|
354
|
+
password: 'secret',
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
app.use(guard);
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
### isAuthenticated(req)
|
|
361
|
+
|
|
362
|
+
Check if current request is authenticated.
|
|
363
|
+
|
|
364
|
+
```typescript
|
|
365
|
+
import { isAuthenticated } from '@qwickapps/server';
|
|
366
|
+
|
|
367
|
+
if (isAuthenticated(req)) {
|
|
368
|
+
// User is authenticated
|
|
369
|
+
}
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
### getAuthenticatedUser(req)
|
|
373
|
+
|
|
374
|
+
Get authenticated user information.
|
|
375
|
+
|
|
376
|
+
```typescript
|
|
377
|
+
import { getAuthenticatedUser } from '@qwickapps/server';
|
|
378
|
+
|
|
379
|
+
const user = getAuthenticatedUser(req);
|
|
380
|
+
// { id: string; email?: string; name?: string; }
|
|
381
|
+
```
|
|
382
|
+
|
|
273
383
|
### Built-in Routes
|
|
274
384
|
|
|
385
|
+
Routes are mounted at the configured `mountPath` (default `/cpanel`):
|
|
386
|
+
|
|
275
387
|
| Route | Method | Description |
|
|
276
388
|
|-------|--------|-------------|
|
|
277
|
-
|
|
|
278
|
-
|
|
|
279
|
-
|
|
|
280
|
-
|
|
|
281
|
-
|
|
|
282
|
-
| `/api/diagnostics` | GET | System diagnostics |
|
|
283
|
-
|
|
284
|
-
## Environment Variables
|
|
285
|
-
|
|
286
|
-
```env
|
|
287
|
-
# Supabase OAuth
|
|
288
|
-
SUPABASE_URL=https://xxx.supabase.co
|
|
289
|
-
SUPABASE_ANON_KEY=your-anon-key
|
|
290
|
-
ALLOWED_EMAILS=admin@example.com,user@example.com
|
|
291
|
-
|
|
292
|
-
# Development
|
|
293
|
-
SKIP_AUTH_LOCALHOST=true
|
|
294
|
-
```
|
|
389
|
+
| `{mountPath}/` | GET | Dashboard UI |
|
|
390
|
+
| `{mountPath}/api/health` | GET | Aggregated health status |
|
|
391
|
+
| `{mountPath}/api/diagnostics` | GET | System diagnostics |
|
|
392
|
+
| `{mountPath}/api/config` | GET | Configuration (if plugin enabled) |
|
|
393
|
+
| `{mountPath}/api/logs` | GET | Log viewer (if plugin enabled) |
|
|
295
394
|
|
|
296
395
|
## License
|
|
297
396
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-panel.d.ts","sourceRoot":"","sources":["../../src/core/control-panel.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,
|
|
1
|
+
{"version":3,"file":"control-panel.d.ts","sourceRoot":"","sources":["../../src/core/control-panel.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,EAA4C,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAE5F,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EAIpB,MAAM,EACP,MAAM,YAAY,CAAC;AAWpB,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,oBAAoB,CA2Q3F"}
|
|
@@ -14,6 +14,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
14
14
|
import { dirname, join } from 'node:path';
|
|
15
15
|
import { HealthManager } from './health-manager.js';
|
|
16
16
|
import { initializeLogging, getControlPanelLogger } from './logging.js';
|
|
17
|
+
import { createRouteGuard } from './guards.js';
|
|
17
18
|
// Get the package root directory for serving UI assets
|
|
18
19
|
const __filename = fileURLToPath(import.meta.url);
|
|
19
20
|
const __dirname = dirname(__filename);
|
|
@@ -64,35 +65,21 @@ export function createControlPanel(options) {
|
|
|
64
65
|
app.use(express.json());
|
|
65
66
|
}
|
|
66
67
|
app.use(compression());
|
|
67
|
-
//
|
|
68
|
-
if (config.
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (!authHeader || !authHeader.startsWith('Basic ')) {
|
|
72
|
-
res.set('WWW-Authenticate', 'Basic realm="Control Panel"');
|
|
73
|
-
return res.status(401).json({ error: 'Authentication required' });
|
|
74
|
-
}
|
|
75
|
-
const base64Credentials = authHeader.substring(6);
|
|
76
|
-
const credentials = Buffer.from(base64Credentials, 'base64').toString('utf-8');
|
|
77
|
-
const [username, password] = credentials.split(':');
|
|
78
|
-
const validUser = config.auth.users.find((u) => u.username === username && u.password === password);
|
|
79
|
-
if (!validUser) {
|
|
80
|
-
return res.status(401).json({ error: 'Invalid credentials' });
|
|
81
|
-
}
|
|
82
|
-
next();
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
// Custom auth middleware
|
|
86
|
-
if (config.auth?.enabled && config.auth.provider === 'custom' && config.auth.customMiddleware) {
|
|
87
|
-
app.use(config.auth.customMiddleware);
|
|
68
|
+
// Apply route guard if configured
|
|
69
|
+
if (config.guard && config.guard.type !== 'none') {
|
|
70
|
+
const guardMiddleware = createRouteGuard(config.guard);
|
|
71
|
+
app.use(guardMiddleware);
|
|
88
72
|
}
|
|
73
|
+
// Get mount path (defaults to /cpanel)
|
|
74
|
+
const mountPath = config.mountPath || '/cpanel';
|
|
75
|
+
const apiBasePath = mountPath === '/' ? '/api' : `${mountPath}/api`;
|
|
89
76
|
// Request logging
|
|
90
77
|
app.use((req, _res, next) => {
|
|
91
78
|
logger.debug(`${req.method} ${req.path}`);
|
|
92
79
|
next();
|
|
93
80
|
});
|
|
94
|
-
// Mount router
|
|
95
|
-
app.use(
|
|
81
|
+
// Mount router at the configured path
|
|
82
|
+
app.use(apiBasePath, router);
|
|
96
83
|
// Built-in routes
|
|
97
84
|
/**
|
|
98
85
|
* GET /api/health - Aggregated health status
|
|
@@ -128,7 +115,7 @@ export function createControlPanel(options) {
|
|
|
128
115
|
res.json(report);
|
|
129
116
|
});
|
|
130
117
|
/**
|
|
131
|
-
* Serve dashboard UI
|
|
118
|
+
* Serve dashboard UI at the configured mount path
|
|
132
119
|
*
|
|
133
120
|
* Priority:
|
|
134
121
|
* 1. If useRichUI is true and dist-ui exists, serve React SPA
|
|
@@ -139,24 +126,31 @@ export function createControlPanel(options) {
|
|
|
139
126
|
const effectiveUiPath = config.customUiPath || uiDistPath;
|
|
140
127
|
const hasRichUI = existsSync(effectiveUiPath);
|
|
141
128
|
const useRichUI = config.useRichUI !== false && hasRichUI;
|
|
142
|
-
logger.debug(`Dashboard config:
|
|
129
|
+
logger.debug(`Dashboard config: mountPath=${mountPath}, effectiveUiPath=${effectiveUiPath}, hasRichUI=${hasRichUI}, useRichUI=${useRichUI}`);
|
|
143
130
|
if (useRichUI) {
|
|
144
|
-
logger.
|
|
145
|
-
// Serve static assets from dist-ui
|
|
146
|
-
app.use(express.static(effectiveUiPath));
|
|
147
|
-
// SPA fallback - serve index.html for all non-API routes
|
|
148
|
-
app.get(
|
|
149
|
-
// Skip API routes
|
|
150
|
-
if (req.path.startsWith(
|
|
131
|
+
logger.debug(`Serving React UI from ${effectiveUiPath}`);
|
|
132
|
+
// Serve static assets from dist-ui at the mount path
|
|
133
|
+
app.use(mountPath, express.static(effectiveUiPath));
|
|
134
|
+
// SPA fallback - serve index.html for all non-API routes under the mount path
|
|
135
|
+
app.get(`${mountPath}/*`, (req, res, next) => {
|
|
136
|
+
// Skip API routes
|
|
137
|
+
if (req.path.startsWith(apiBasePath)) {
|
|
151
138
|
return next();
|
|
152
139
|
}
|
|
153
140
|
res.sendFile(join(effectiveUiPath, 'index.html'));
|
|
154
141
|
});
|
|
142
|
+
// Also serve the mount path root
|
|
143
|
+
if (mountPath !== '/') {
|
|
144
|
+
app.get(mountPath, (_req, res) => {
|
|
145
|
+
res.sendFile(join(effectiveUiPath, 'index.html'));
|
|
146
|
+
});
|
|
147
|
+
}
|
|
155
148
|
}
|
|
156
149
|
else {
|
|
157
|
-
logger.
|
|
158
|
-
|
|
159
|
-
|
|
150
|
+
logger.debug(`Serving basic HTML dashboard`);
|
|
151
|
+
const dashboardPath = mountPath === '/' ? '/' : mountPath;
|
|
152
|
+
app.get(dashboardPath, (_req, res) => {
|
|
153
|
+
const html = generateDashboardHtml(config, healthManager.getResults(), mountPath);
|
|
160
154
|
res.type('html').send(html);
|
|
161
155
|
});
|
|
162
156
|
}
|
|
@@ -171,7 +165,7 @@ export function createControlPanel(options) {
|
|
|
171
165
|
});
|
|
172
166
|
// Register plugin
|
|
173
167
|
const registerPlugin = async (plugin) => {
|
|
174
|
-
logger.
|
|
168
|
+
logger.debug(`Registering plugin: ${plugin.name}`);
|
|
175
169
|
// Register routes
|
|
176
170
|
if (plugin.routes) {
|
|
177
171
|
for (const route of plugin.routes) {
|
|
@@ -197,7 +191,7 @@ export function createControlPanel(options) {
|
|
|
197
191
|
await plugin.onInit(createPluginContext(plugin.name));
|
|
198
192
|
}
|
|
199
193
|
registeredPlugins.push(plugin);
|
|
200
|
-
logger.
|
|
194
|
+
logger.debug(`Plugin registered: ${plugin.name}`);
|
|
201
195
|
};
|
|
202
196
|
// Get diagnostics report
|
|
203
197
|
const getDiagnostics = () => {
|
|
@@ -231,10 +225,7 @@ export function createControlPanel(options) {
|
|
|
231
225
|
}
|
|
232
226
|
return new Promise((resolve) => {
|
|
233
227
|
server = app.listen(config.port, () => {
|
|
234
|
-
logger.info(`Control panel
|
|
235
|
-
logger.info(`Dashboard: http://localhost:${config.port}`);
|
|
236
|
-
logger.info(`Health: http://localhost:${config.port}/api/health`);
|
|
237
|
-
logger.info(`Diagnostics: http://localhost:${config.port}/api/diagnostics`);
|
|
228
|
+
logger.info(`Control panel listening on port ${config.port}`);
|
|
238
229
|
resolve();
|
|
239
230
|
});
|
|
240
231
|
});
|
|
@@ -271,7 +262,8 @@ export function createControlPanel(options) {
|
|
|
271
262
|
/**
|
|
272
263
|
* Generate simple dashboard HTML
|
|
273
264
|
*/
|
|
274
|
-
function generateDashboardHtml(config, health) {
|
|
265
|
+
function generateDashboardHtml(config, health, mountPath = '/cpanel') {
|
|
266
|
+
const apiBasePath = mountPath === '/' ? '/api' : `${mountPath}/api`;
|
|
275
267
|
const healthEntries = Object.entries(health);
|
|
276
268
|
const overallStatus = healthEntries.every((e) => e[1].status === 'healthy')
|
|
277
269
|
? 'healthy'
|
|
@@ -400,9 +392,9 @@ function generateDashboardHtml(config, health) {
|
|
|
400
392
|
|
|
401
393
|
<div class="api-links">
|
|
402
394
|
<strong>API:</strong>
|
|
403
|
-
<a href="/
|
|
404
|
-
<a href="/
|
|
405
|
-
<a href="/
|
|
395
|
+
<a href="${apiBasePath}/health">Health</a>
|
|
396
|
+
<a href="${apiBasePath}/info">Info</a>
|
|
397
|
+
<a href="${apiBasePath}/diagnostics">Diagnostics</a>
|
|
406
398
|
</div>
|
|
407
399
|
</div>
|
|
408
400
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-panel.js","sourceRoot":"","sources":["../../src/core/control-panel.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"control-panel.js","sourceRoot":"","sources":["../../src/core/control-panel.ts"],"names":[],"mappings":"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"}
|
package/dist/core/gateway.d.ts
CHANGED
|
@@ -39,26 +39,45 @@ export interface GatewayConfig {
|
|
|
39
39
|
plugins?: ControlPanelPlugin[];
|
|
40
40
|
/** Quick links for the control panel */
|
|
41
41
|
links?: ControlPanelConfig['links'];
|
|
42
|
-
/** Path to custom React UI dist folder */
|
|
42
|
+
/** Path to custom React UI dist folder for the control panel */
|
|
43
43
|
customUiPath?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Mount path for the control panel.
|
|
46
|
+
* Defaults to '/cpanel'.
|
|
47
|
+
*/
|
|
48
|
+
controlPanelPath?: string;
|
|
49
|
+
/**
|
|
50
|
+
* Route guard for the control panel.
|
|
51
|
+
* Defaults to auto-generated basic auth.
|
|
52
|
+
*/
|
|
53
|
+
controlPanelGuard?: ControlPanelConfig['guard'];
|
|
54
|
+
/**
|
|
55
|
+
* Frontend app configuration for the root path (/).
|
|
56
|
+
* If not provided, root path is not handled by the gateway.
|
|
57
|
+
*/
|
|
58
|
+
frontendApp?: {
|
|
59
|
+
/** Redirect to another URL */
|
|
60
|
+
redirectUrl?: string;
|
|
61
|
+
/** Path to static files to serve */
|
|
62
|
+
staticPath?: string;
|
|
63
|
+
/** Landing page configuration */
|
|
64
|
+
landingPage?: {
|
|
65
|
+
title: string;
|
|
66
|
+
heading?: string;
|
|
67
|
+
description?: string;
|
|
68
|
+
links?: Array<{
|
|
69
|
+
label: string;
|
|
70
|
+
url: string;
|
|
71
|
+
}>;
|
|
72
|
+
};
|
|
73
|
+
};
|
|
44
74
|
/**
|
|
45
75
|
* API paths to proxy to the internal service.
|
|
46
76
|
* Defaults to ['/api/v1'] if not specified.
|
|
47
77
|
* The gateway always proxies /health to the internal service.
|
|
48
78
|
*/
|
|
49
79
|
proxyPaths?: string[];
|
|
50
|
-
/**
|
|
51
|
-
* Authentication mode for the control panel (not the API).
|
|
52
|
-
* - 'none': No authentication (not recommended for production)
|
|
53
|
-
* - 'basic': HTTP Basic Auth with username/password
|
|
54
|
-
* - 'auto': Auto-generate password on startup (default)
|
|
55
|
-
*/
|
|
56
|
-
authMode?: 'none' | 'basic' | 'auto';
|
|
57
|
-
/** Basic auth username (defaults to 'admin') */
|
|
58
|
-
basicAuthUser?: string;
|
|
59
|
-
/** Basic auth password (required if authMode is 'basic') */
|
|
60
|
-
basicAuthPassword?: string;
|
|
61
|
-
/** Logger instance (deprecated: use logging config instead) */
|
|
80
|
+
/** Logger instance */
|
|
62
81
|
logger?: Logger;
|
|
63
82
|
/** Logging configuration */
|
|
64
83
|
logging?: LoggingConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/core/gateway.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAmC,MAAM,SAAS,CAAC;AAG5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAA4C,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/core/gateway.ts"],"names":[],"mappings":"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"}
|