@qwickapps/server 1.1.9 → 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 +80 -0
- package/dist/core/control-panel.d.ts.map +1 -1
- package/dist/core/control-panel.js +7 -6
- package/dist/core/control-panel.js.map +1 -1
- package/dist/core/gateway.d.ts.map +1 -1
- package/dist/core/gateway.js +37 -29
- package/dist/core/gateway.js.map +1 -1
- package/package.json +1 -1
- package/src/core/control-panel.ts +8 -7
- package/src/core/gateway.ts +40 -29
package/README.md
CHANGED
|
@@ -130,6 +130,7 @@ The gateway is always responsive even if the internal API service crashes, allow
|
|
|
130
130
|
| `cors` | `object` | No | CORS origins configuration |
|
|
131
131
|
| `links` | `array` | No | Quick links for the dashboard |
|
|
132
132
|
| `skipBodyParserPaths` | `string[]` | No | Paths to skip body parsing (for proxy) |
|
|
133
|
+
| `logoUrl` | `string` | No | Custom logo URL for the landing page |
|
|
133
134
|
|
|
134
135
|
### Route Guards
|
|
135
136
|
|
|
@@ -297,6 +298,85 @@ createLogsPlugin({
|
|
|
297
298
|
});
|
|
298
299
|
```
|
|
299
300
|
|
|
301
|
+
#### PostgreSQL Plugin
|
|
302
|
+
|
|
303
|
+
Provides connection pooling, transactions, and health checks for PostgreSQL databases.
|
|
304
|
+
|
|
305
|
+
```typescript
|
|
306
|
+
import { createPostgresPlugin, getPostgres } from '@qwickapps/server';
|
|
307
|
+
|
|
308
|
+
// Register the plugin
|
|
309
|
+
createPostgresPlugin({
|
|
310
|
+
connectionString: process.env.DATABASE_URL,
|
|
311
|
+
// Or individual options:
|
|
312
|
+
// host: 'localhost',
|
|
313
|
+
// port: 5432,
|
|
314
|
+
// database: 'mydb',
|
|
315
|
+
// user: 'postgres',
|
|
316
|
+
// password: 'secret',
|
|
317
|
+
maxConnections: 20,
|
|
318
|
+
healthCheckInterval: 30000,
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
// Use in your code
|
|
322
|
+
const pg = getPostgres();
|
|
323
|
+
const result = await pg.query('SELECT * FROM users WHERE id = $1', [userId]);
|
|
324
|
+
|
|
325
|
+
// With transactions
|
|
326
|
+
await pg.withTransaction(async (client) => {
|
|
327
|
+
await client.query('INSERT INTO orders ...');
|
|
328
|
+
await client.query('UPDATE inventory ...');
|
|
329
|
+
});
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
**Exports:**
|
|
333
|
+
- `createPostgresPlugin(config)` - Create and register the plugin
|
|
334
|
+
- `getPostgres(name?)` - Get a PostgreSQL instance (throws if not registered)
|
|
335
|
+
- `hasPostgres(name?)` - Check if an instance is registered
|
|
336
|
+
- `PostgresInstance` - TypeScript type for the instance
|
|
337
|
+
|
|
338
|
+
#### Cache Plugin
|
|
339
|
+
|
|
340
|
+
Redis-based caching with key prefixing, TTL support, and pattern operations.
|
|
341
|
+
|
|
342
|
+
```typescript
|
|
343
|
+
import { createCachePlugin, getCache } from '@qwickapps/server';
|
|
344
|
+
|
|
345
|
+
// Register the plugin
|
|
346
|
+
createCachePlugin({
|
|
347
|
+
url: process.env.REDIS_URL,
|
|
348
|
+
// Or individual options:
|
|
349
|
+
// host: 'localhost',
|
|
350
|
+
// port: 6379,
|
|
351
|
+
// password: 'secret',
|
|
352
|
+
keyPrefix: 'myapp:',
|
|
353
|
+
defaultTTL: 3600, // 1 hour default
|
|
354
|
+
healthCheckInterval: 30000,
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
// Use in your code
|
|
358
|
+
const cache = getCache();
|
|
359
|
+
|
|
360
|
+
// Basic operations
|
|
361
|
+
await cache.set('user:123', userData, 600); // TTL in seconds
|
|
362
|
+
const user = await cache.get('user:123');
|
|
363
|
+
await cache.delete('user:123');
|
|
364
|
+
|
|
365
|
+
// Pattern operations
|
|
366
|
+
const keys = await cache.keys('user:*');
|
|
367
|
+
await cache.deletePattern('session:*');
|
|
368
|
+
|
|
369
|
+
// Stats and maintenance
|
|
370
|
+
const stats = await cache.getStats();
|
|
371
|
+
await cache.flush(); // Clear all keys with prefix
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
**Exports:**
|
|
375
|
+
- `createCachePlugin(config)` - Create and register the plugin
|
|
376
|
+
- `getCache(name?)` - Get a cache instance (throws if not registered)
|
|
377
|
+
- `hasCache(name?)` - Check if an instance is registered
|
|
378
|
+
- `CacheInstance` - TypeScript type for the instance
|
|
379
|
+
|
|
300
380
|
### Creating Custom Plugins
|
|
301
381
|
|
|
302
382
|
```typescript
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,CA4Q3F"}
|
|
@@ -65,13 +65,14 @@ export function createControlPanel(options) {
|
|
|
65
65
|
app.use(express.json());
|
|
66
66
|
}
|
|
67
67
|
app.use(compression());
|
|
68
|
-
//
|
|
68
|
+
// Get mount path (defaults to /cpanel)
|
|
69
|
+
const mountPath = config.mountPath || '/cpanel';
|
|
70
|
+
// Apply route guard if configured - only to the control panel mount path
|
|
69
71
|
if (config.guard && config.guard.type !== 'none') {
|
|
70
72
|
const guardMiddleware = createRouteGuard(config.guard);
|
|
71
|
-
|
|
73
|
+
// Only protect the control panel path, not the root or other paths
|
|
74
|
+
app.use(mountPath, guardMiddleware);
|
|
72
75
|
}
|
|
73
|
-
// Get mount path (defaults to /cpanel)
|
|
74
|
-
const mountPath = config.mountPath || '/cpanel';
|
|
75
76
|
const apiBasePath = mountPath === '/' ? '/api' : `${mountPath}/api`;
|
|
76
77
|
// Request logging
|
|
77
78
|
app.use((req, _res, next) => {
|
|
@@ -225,7 +226,7 @@ export function createControlPanel(options) {
|
|
|
225
226
|
}
|
|
226
227
|
return new Promise((resolve) => {
|
|
227
228
|
server = app.listen(config.port, () => {
|
|
228
|
-
logger.
|
|
229
|
+
logger.debug(`Control panel listening on port ${config.port}`);
|
|
229
230
|
resolve();
|
|
230
231
|
});
|
|
231
232
|
});
|
|
@@ -244,7 +245,7 @@ export function createControlPanel(options) {
|
|
|
244
245
|
if (server) {
|
|
245
246
|
return new Promise((resolve) => {
|
|
246
247
|
server.close(() => {
|
|
247
|
-
logger.
|
|
248
|
+
logger.debug('Control panel stopped');
|
|
248
249
|
resolve();
|
|
249
250
|
});
|
|
250
251
|
});
|
|
@@ -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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/core/gateway.ts"],"names":[],"mappings":"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
|
|
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;AAM5F;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IAEpB,sBAAsB;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAE1C,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAE/B,wCAAwC;IACxC,KAAK,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAEpC,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAEhD;;;OAGG;IACH,WAAW,CAAC,EAAE;QACZ,8BAA8B;QAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,oCAAoC;QACpC,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,iCAAiC;QACjC,WAAW,CAAC,EAAE;YACZ,KAAK,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,KAAK,CAAC,EAAE,KAAK,CAAC;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,GAAG,EAAE,MAAM,CAAA;aAAE,CAAC,CAAC;SAC/C,CAAC;KACH,CAAC;IAEF;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACtB,GAAG,EAAE,WAAW,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;KAC/B,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,YAAY,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;IAEpD,wCAAwC;IACxC,OAAO,EAAE;QACP,GAAG,EAAE,WAAW,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;KAC/B,GAAG,IAAI,CAAC;IAET,6CAA6C;IAC7C,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3B,iCAAiC;IACjC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IAEpB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAkeD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,EACrB,cAAc,EAAE,cAAc,GAC7B,eAAe,CAoOjB"}
|
package/dist/core/gateway.js
CHANGED
|
@@ -405,7 +405,7 @@ function generateDefaultLandingPageHtml(productName, controlPanelPath, apiBasePa
|
|
|
405
405
|
|
|
406
406
|
<div class="container">
|
|
407
407
|
${logoUrl
|
|
408
|
-
? `<div class="logo custom"><img src="
|
|
408
|
+
? `<div class="logo custom"><img src="/logo.svg" alt="${productName} logo" /></div>`
|
|
409
409
|
: `<div class="logo default">
|
|
410
410
|
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
|
411
411
|
<path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"/>
|
|
@@ -448,7 +448,8 @@ function generateDefaultLandingPageHtml(productName, controlPanelPath, apiBasePa
|
|
|
448
448
|
const desc = document.getElementById('description');
|
|
449
449
|
|
|
450
450
|
try {
|
|
451
|
-
|
|
451
|
+
// Use /health (public, proxied from service) instead of control panel API
|
|
452
|
+
const res = await fetch('/health');
|
|
452
453
|
const data = await res.json();
|
|
453
454
|
|
|
454
455
|
badge.classList.remove('loading');
|
|
@@ -602,9 +603,19 @@ export function createGateway(config, serviceFactory) {
|
|
|
602
603
|
const apiBasePath = controlPanelPath === '/' ? '/api' : `${controlPanelPath}/api`;
|
|
603
604
|
// Setup frontend app at root path
|
|
604
605
|
const setupFrontendApp = () => {
|
|
606
|
+
// Serve logo at /logo.svg if logoUrl is configured and customUiPath exists
|
|
607
|
+
if (config.logoUrl && config.customUiPath) {
|
|
608
|
+
const logoPath = resolve(config.customUiPath, 'logo.svg');
|
|
609
|
+
if (existsSync(logoPath)) {
|
|
610
|
+
controlPanel.app.get('/logo.svg', (_req, res) => {
|
|
611
|
+
res.sendFile(logoPath);
|
|
612
|
+
});
|
|
613
|
+
logger.debug('Frontend app: Serving logo at /logo.svg');
|
|
614
|
+
}
|
|
615
|
+
}
|
|
605
616
|
// If no frontend app configured, serve default landing page with status
|
|
606
617
|
if (!config.frontendApp) {
|
|
607
|
-
logger.
|
|
618
|
+
logger.debug('Frontend app: Serving default landing page');
|
|
608
619
|
controlPanel.app.get('/', (_req, res) => {
|
|
609
620
|
const html = generateDefaultLandingPageHtml(config.productName, controlPanelPath, apiBasePath, version, config.logoUrl);
|
|
610
621
|
res.type('html').send(html);
|
|
@@ -614,7 +625,7 @@ export function createGateway(config, serviceFactory) {
|
|
|
614
625
|
const { redirectUrl, staticPath, landingPage } = config.frontendApp;
|
|
615
626
|
// Priority 1: Redirect
|
|
616
627
|
if (redirectUrl) {
|
|
617
|
-
logger.
|
|
628
|
+
logger.debug(`Frontend app: Redirecting / to ${redirectUrl}`);
|
|
618
629
|
controlPanel.app.get('/', (_req, res) => {
|
|
619
630
|
res.redirect(redirectUrl);
|
|
620
631
|
});
|
|
@@ -622,7 +633,7 @@ export function createGateway(config, serviceFactory) {
|
|
|
622
633
|
}
|
|
623
634
|
// Priority 2: Serve static files
|
|
624
635
|
if (staticPath && existsSync(staticPath)) {
|
|
625
|
-
logger.
|
|
636
|
+
logger.debug(`Frontend app: Serving static files from ${staticPath}`);
|
|
626
637
|
controlPanel.app.use('/', express.static(staticPath));
|
|
627
638
|
// SPA fallback for root
|
|
628
639
|
controlPanel.app.get('/', (_req, res) => {
|
|
@@ -632,7 +643,7 @@ export function createGateway(config, serviceFactory) {
|
|
|
632
643
|
}
|
|
633
644
|
// Priority 3: Landing page
|
|
634
645
|
if (landingPage) {
|
|
635
|
-
logger.
|
|
646
|
+
logger.debug(`Frontend app: Serving landing page`);
|
|
636
647
|
controlPanel.app.get('/', (_req, res) => {
|
|
637
648
|
const html = generateLandingPageHtml(landingPage, controlPanelPath);
|
|
638
649
|
res.type('html').send(html);
|
|
@@ -640,40 +651,37 @@ export function createGateway(config, serviceFactory) {
|
|
|
640
651
|
}
|
|
641
652
|
};
|
|
642
653
|
const start = async () => {
|
|
643
|
-
logger.
|
|
654
|
+
logger.debug('Starting gateway...');
|
|
644
655
|
// 1. Start internal service
|
|
645
|
-
logger.
|
|
656
|
+
logger.debug(`Starting internal service on port ${servicePort}...`);
|
|
646
657
|
service = await serviceFactory(servicePort);
|
|
647
|
-
logger.
|
|
658
|
+
logger.debug(`Internal service started on port ${servicePort}`);
|
|
648
659
|
// 2. Setup proxy middleware (after service is started)
|
|
649
660
|
setupProxyMiddleware();
|
|
650
661
|
// 3. Setup frontend app at root path
|
|
651
662
|
setupFrontendApp();
|
|
652
663
|
// 4. Start control panel gateway
|
|
653
664
|
await controlPanel.start();
|
|
654
|
-
// Log startup info
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
}
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
}
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
}
|
|
667
|
-
logger.
|
|
668
|
-
logger.info(`Control Panel UI: GET ${controlPanelPath.padEnd(20)}`);
|
|
669
|
-
logger.info(`Gateway Health: GET ${apiBasePath}/health`);
|
|
670
|
-
logger.info(`Service Health: GET /health`);
|
|
665
|
+
// Log concise startup info
|
|
666
|
+
const authInfo = guardConfig?.type === 'basic'
|
|
667
|
+
? `(auth: ${guardConfig.username})`
|
|
668
|
+
: guardConfig?.type && guardConfig.type !== 'none'
|
|
669
|
+
? `(auth: ${guardConfig.type})`
|
|
670
|
+
: '(no auth)';
|
|
671
|
+
logger.info(`${config.productName} started on port ${gatewayPort} ${authInfo}`);
|
|
672
|
+
// Log detailed route info at debug level
|
|
673
|
+
logger.debug(`Gateway Port: ${gatewayPort} (public)`);
|
|
674
|
+
logger.debug(`Service Port: ${servicePort} (internal)`);
|
|
675
|
+
logger.debug(`Frontend App: GET /`);
|
|
676
|
+
logger.debug(`Control Panel UI: GET ${controlPanelPath}`);
|
|
677
|
+
logger.debug(`Gateway Health: GET ${apiBasePath}/health`);
|
|
678
|
+
logger.debug(`Service Health: GET /health`);
|
|
671
679
|
for (const apiPath of proxyPaths) {
|
|
672
|
-
logger.
|
|
680
|
+
logger.debug(`Service API: * ${apiPath}/*`);
|
|
673
681
|
}
|
|
674
682
|
};
|
|
675
683
|
const stop = async () => {
|
|
676
|
-
logger.
|
|
684
|
+
logger.debug('Shutting down gateway...');
|
|
677
685
|
// Stop control panel
|
|
678
686
|
await controlPanel.stop();
|
|
679
687
|
// Stop internal service
|
|
@@ -681,7 +689,7 @@ export function createGateway(config, serviceFactory) {
|
|
|
681
689
|
await service.shutdown();
|
|
682
690
|
service.server.close();
|
|
683
691
|
}
|
|
684
|
-
logger.
|
|
692
|
+
logger.debug('Gateway shutdown complete');
|
|
685
693
|
};
|
|
686
694
|
return {
|
|
687
695
|
controlPanel,
|
package/dist/core/gateway.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/core/gateway.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAsB,MAAM,cAAc,CAAC;AAC5F,OAAO,EAAE,qBAAqB,EAAgB,MAAM,uBAAuB,CAAC;AAC5E,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AA8H/B;;GAEG;AACH,SAAS,uBAAuB,CAC9B,MAAgE,EAChE,gBAAwB;IAExB,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvB,MAAM,YAAY,GAAG,SAAS,CAAC;IAE/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI;QAC5B,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,gBAAgB,EAAE;KAClD,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK;SACpB,GAAG,CACF,CAAC,IAAI,EAAE,EAAE,CACP,YAAY,IAAI,CAAC,GAAG,kBAAkB,IAAI,CAAC,KAAK,MAAM,CACzD;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO;;;;;WAKE,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;eAmBR,YAAY;;;;;;;;;;;;;;;;;;oBAkBP,YAAY;;;;;;;;;;;;;;;;;;;;;eAqBjB,YAAY;;;;;;;UAOjB,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK;MAClC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,WAAW,MAAM,CAAC,CAAC,CAAC,EAAE;MACxD,SAAS,CAAC,CAAC,CAAC,sBAAsB,SAAS,QAAQ,CAAC,CAAC,CAAC,EAAE;;;;;;QAMtD,CAAC;AACT,CAAC;AAED;;;GAGG;AACH,SAAS,8BAA8B,CACrC,WAAmB,EACnB,gBAAwB,EACxB,WAAmB,EACnB,OAAe,EACf,OAAgB;IAEhB,OAAO;;;;;WAKE,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAyRhB,OAAO;QACP,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/core/gateway.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -95,14 +95,15 @@ export function createControlPanel(options: CreateControlPanelOptions): ControlP
|
|
|
95
95
|
}
|
|
96
96
|
app.use(compression());
|
|
97
97
|
|
|
98
|
-
//
|
|
98
|
+
// Get mount path (defaults to /cpanel)
|
|
99
|
+
const mountPath = config.mountPath || '/cpanel';
|
|
100
|
+
|
|
101
|
+
// Apply route guard if configured - only to the control panel mount path
|
|
99
102
|
if (config.guard && config.guard.type !== 'none') {
|
|
100
103
|
const guardMiddleware = createRouteGuard(config.guard);
|
|
101
|
-
|
|
104
|
+
// Only protect the control panel path, not the root or other paths
|
|
105
|
+
app.use(mountPath, guardMiddleware);
|
|
102
106
|
}
|
|
103
|
-
|
|
104
|
-
// Get mount path (defaults to /cpanel)
|
|
105
|
-
const mountPath = config.mountPath || '/cpanel';
|
|
106
107
|
const apiBasePath = mountPath === '/' ? '/api' : `${mountPath}/api`;
|
|
107
108
|
|
|
108
109
|
// Request logging
|
|
@@ -276,7 +277,7 @@ export function createControlPanel(options: CreateControlPanelOptions): ControlP
|
|
|
276
277
|
|
|
277
278
|
return new Promise((resolve) => {
|
|
278
279
|
server = app.listen(config.port, () => {
|
|
279
|
-
logger.
|
|
280
|
+
logger.debug(`Control panel listening on port ${config.port}`);
|
|
280
281
|
resolve();
|
|
281
282
|
});
|
|
282
283
|
});
|
|
@@ -298,7 +299,7 @@ export function createControlPanel(options: CreateControlPanelOptions): ControlP
|
|
|
298
299
|
if (server) {
|
|
299
300
|
return new Promise((resolve) => {
|
|
300
301
|
server!.close(() => {
|
|
301
|
-
logger.
|
|
302
|
+
logger.debug('Control panel stopped');
|
|
302
303
|
resolve();
|
|
303
304
|
});
|
|
304
305
|
});
|
package/src/core/gateway.ts
CHANGED
|
@@ -552,7 +552,7 @@ function generateDefaultLandingPageHtml(
|
|
|
552
552
|
|
|
553
553
|
<div class="container">
|
|
554
554
|
${logoUrl
|
|
555
|
-
? `<div class="logo custom"><img src="
|
|
555
|
+
? `<div class="logo custom"><img src="/logo.svg" alt="${productName} logo" /></div>`
|
|
556
556
|
: `<div class="logo default">
|
|
557
557
|
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
|
558
558
|
<path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"/>
|
|
@@ -595,7 +595,8 @@ function generateDefaultLandingPageHtml(
|
|
|
595
595
|
const desc = document.getElementById('description');
|
|
596
596
|
|
|
597
597
|
try {
|
|
598
|
-
|
|
598
|
+
// Use /health (public, proxied from service) instead of control panel API
|
|
599
|
+
const res = await fetch('/health');
|
|
599
600
|
const data = await res.json();
|
|
600
601
|
|
|
601
602
|
badge.classList.remove('loading');
|
|
@@ -770,9 +771,20 @@ export function createGateway(
|
|
|
770
771
|
|
|
771
772
|
// Setup frontend app at root path
|
|
772
773
|
const setupFrontendApp = () => {
|
|
774
|
+
// Serve logo at /logo.svg if logoUrl is configured and customUiPath exists
|
|
775
|
+
if (config.logoUrl && config.customUiPath) {
|
|
776
|
+
const logoPath = resolve(config.customUiPath, 'logo.svg');
|
|
777
|
+
if (existsSync(logoPath)) {
|
|
778
|
+
controlPanel.app.get('/logo.svg', (_req, res) => {
|
|
779
|
+
res.sendFile(logoPath);
|
|
780
|
+
});
|
|
781
|
+
logger.debug('Frontend app: Serving logo at /logo.svg');
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
|
|
773
785
|
// If no frontend app configured, serve default landing page with status
|
|
774
786
|
if (!config.frontendApp) {
|
|
775
|
-
logger.
|
|
787
|
+
logger.debug('Frontend app: Serving default landing page');
|
|
776
788
|
controlPanel.app.get('/', (_req, res) => {
|
|
777
789
|
const html = generateDefaultLandingPageHtml(
|
|
778
790
|
config.productName,
|
|
@@ -790,7 +802,7 @@ export function createGateway(
|
|
|
790
802
|
|
|
791
803
|
// Priority 1: Redirect
|
|
792
804
|
if (redirectUrl) {
|
|
793
|
-
logger.
|
|
805
|
+
logger.debug(`Frontend app: Redirecting / to ${redirectUrl}`);
|
|
794
806
|
controlPanel.app.get('/', (_req, res) => {
|
|
795
807
|
res.redirect(redirectUrl);
|
|
796
808
|
});
|
|
@@ -799,7 +811,7 @@ export function createGateway(
|
|
|
799
811
|
|
|
800
812
|
// Priority 2: Serve static files
|
|
801
813
|
if (staticPath && existsSync(staticPath)) {
|
|
802
|
-
logger.
|
|
814
|
+
logger.debug(`Frontend app: Serving static files from ${staticPath}`);
|
|
803
815
|
controlPanel.app.use('/', express.static(staticPath));
|
|
804
816
|
|
|
805
817
|
// SPA fallback for root
|
|
@@ -811,7 +823,7 @@ export function createGateway(
|
|
|
811
823
|
|
|
812
824
|
// Priority 3: Landing page
|
|
813
825
|
if (landingPage) {
|
|
814
|
-
logger.
|
|
826
|
+
logger.debug(`Frontend app: Serving landing page`);
|
|
815
827
|
controlPanel.app.get('/', (_req, res) => {
|
|
816
828
|
const html = generateLandingPageHtml(landingPage, controlPanelPath);
|
|
817
829
|
res.type('html').send(html);
|
|
@@ -820,12 +832,12 @@ export function createGateway(
|
|
|
820
832
|
};
|
|
821
833
|
|
|
822
834
|
const start = async (): Promise<void> => {
|
|
823
|
-
logger.
|
|
835
|
+
logger.debug('Starting gateway...');
|
|
824
836
|
|
|
825
837
|
// 1. Start internal service
|
|
826
|
-
logger.
|
|
838
|
+
logger.debug(`Starting internal service on port ${servicePort}...`);
|
|
827
839
|
service = await serviceFactory(servicePort);
|
|
828
|
-
logger.
|
|
840
|
+
logger.debug(`Internal service started on port ${servicePort}`);
|
|
829
841
|
|
|
830
842
|
// 2. Setup proxy middleware (after service is started)
|
|
831
843
|
setupProxyMiddleware();
|
|
@@ -836,30 +848,29 @@ export function createGateway(
|
|
|
836
848
|
// 4. Start control panel gateway
|
|
837
849
|
await controlPanel.start();
|
|
838
850
|
|
|
839
|
-
// Log startup info
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
}
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
}
|
|
851
|
-
|
|
852
|
-
logger.
|
|
853
|
-
logger.
|
|
854
|
-
logger.
|
|
855
|
-
logger.info(`Service Health: GET /health`);
|
|
851
|
+
// Log concise startup info
|
|
852
|
+
const authInfo = guardConfig?.type === 'basic'
|
|
853
|
+
? `(auth: ${guardConfig.username})`
|
|
854
|
+
: guardConfig?.type && guardConfig.type !== 'none'
|
|
855
|
+
? `(auth: ${guardConfig.type})`
|
|
856
|
+
: '(no auth)';
|
|
857
|
+
|
|
858
|
+
logger.info(`${config.productName} started on port ${gatewayPort} ${authInfo}`);
|
|
859
|
+
|
|
860
|
+
// Log detailed route info at debug level
|
|
861
|
+
logger.debug(`Gateway Port: ${gatewayPort} (public)`);
|
|
862
|
+
logger.debug(`Service Port: ${servicePort} (internal)`);
|
|
863
|
+
logger.debug(`Frontend App: GET /`);
|
|
864
|
+
logger.debug(`Control Panel UI: GET ${controlPanelPath}`);
|
|
865
|
+
logger.debug(`Gateway Health: GET ${apiBasePath}/health`);
|
|
866
|
+
logger.debug(`Service Health: GET /health`);
|
|
856
867
|
for (const apiPath of proxyPaths) {
|
|
857
|
-
logger.
|
|
868
|
+
logger.debug(`Service API: * ${apiPath}/*`);
|
|
858
869
|
}
|
|
859
870
|
};
|
|
860
871
|
|
|
861
872
|
const stop = async (): Promise<void> => {
|
|
862
|
-
logger.
|
|
873
|
+
logger.debug('Shutting down gateway...');
|
|
863
874
|
|
|
864
875
|
// Stop control panel
|
|
865
876
|
await controlPanel.stop();
|
|
@@ -870,7 +881,7 @@ export function createGateway(
|
|
|
870
881
|
service.server.close();
|
|
871
882
|
}
|
|
872
883
|
|
|
873
|
-
logger.
|
|
884
|
+
logger.debug('Gateway shutdown complete');
|
|
874
885
|
};
|
|
875
886
|
|
|
876
887
|
return {
|