@qwickapps/server 1.0.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/LICENSE +45 -0
- package/README.md +321 -0
- package/dist/core/control-panel.d.ts +21 -0
- package/dist/core/control-panel.d.ts.map +1 -0
- package/dist/core/control-panel.js +416 -0
- package/dist/core/control-panel.js.map +1 -0
- package/dist/core/gateway.d.ts +133 -0
- package/dist/core/gateway.d.ts.map +1 -0
- package/dist/core/gateway.js +270 -0
- package/dist/core/gateway.js.map +1 -0
- package/dist/core/health-manager.d.ts +52 -0
- package/dist/core/health-manager.d.ts.map +1 -0
- package/dist/core/health-manager.js +192 -0
- package/dist/core/health-manager.js.map +1 -0
- package/dist/core/index.d.ts +10 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +8 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/logging.d.ts +83 -0
- package/dist/core/logging.d.ts.map +1 -0
- package/dist/core/logging.js +191 -0
- package/dist/core/logging.js.map +1 -0
- package/dist/core/types.d.ts +195 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +7 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/config-plugin.d.ts +15 -0
- package/dist/plugins/config-plugin.d.ts.map +1 -0
- package/dist/plugins/config-plugin.js +96 -0
- package/dist/plugins/config-plugin.js.map +1 -0
- package/dist/plugins/diagnostics-plugin.d.ts +29 -0
- package/dist/plugins/diagnostics-plugin.d.ts.map +1 -0
- package/dist/plugins/diagnostics-plugin.js +142 -0
- package/dist/plugins/diagnostics-plugin.js.map +1 -0
- package/dist/plugins/health-plugin.d.ts +17 -0
- package/dist/plugins/health-plugin.d.ts.map +1 -0
- package/dist/plugins/health-plugin.js +25 -0
- package/dist/plugins/health-plugin.js.map +1 -0
- package/dist/plugins/index.d.ts +14 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +10 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/logs-plugin.d.ts +22 -0
- package/dist/plugins/logs-plugin.d.ts.map +1 -0
- package/dist/plugins/logs-plugin.js +242 -0
- package/dist/plugins/logs-plugin.js.map +1 -0
- package/dist-ui/assets/index-Bk7ypbI4.js +465 -0
- package/dist-ui/assets/index-Bk7ypbI4.js.map +1 -0
- package/dist-ui/assets/index-CiizQQnb.css +1 -0
- package/dist-ui/index.html +13 -0
- package/package.json +98 -0
- package/src/core/control-panel.ts +493 -0
- package/src/core/gateway.ts +421 -0
- package/src/core/health-manager.ts +227 -0
- package/src/core/index.ts +25 -0
- package/src/core/logging.ts +234 -0
- package/src/core/types.ts +218 -0
- package/src/index.ts +55 -0
- package/src/plugins/config-plugin.ts +117 -0
- package/src/plugins/diagnostics-plugin.ts +178 -0
- package/src/plugins/health-plugin.ts +35 -0
- package/src/plugins/index.ts +17 -0
- package/src/plugins/logs-plugin.ts +314 -0
- package/ui/index.html +12 -0
- package/ui/src/App.tsx +65 -0
- package/ui/src/api/controlPanelApi.ts +148 -0
- package/ui/src/config/AppConfig.ts +18 -0
- package/ui/src/index.css +29 -0
- package/ui/src/index.tsx +11 -0
- package/ui/src/pages/ConfigPage.tsx +199 -0
- package/ui/src/pages/DashboardPage.tsx +264 -0
- package/ui/src/pages/DiagnosticsPage.tsx +315 -0
- package/ui/src/pages/HealthPage.tsx +204 -0
- package/ui/src/pages/LogsPage.tsx +267 -0
- package/ui/src/pages/NotFoundPage.tsx +41 -0
- package/ui/tsconfig.json +19 -0
- package/ui/vite.config.ts +21 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Control Panel Logging Subsystem
|
|
3
|
+
*
|
|
4
|
+
* Provides centralized logging for the control panel and all plugins.
|
|
5
|
+
* Configures @qwickapps/logging to write to files that the LogsPage can display.
|
|
6
|
+
*
|
|
7
|
+
* Environment Variables:
|
|
8
|
+
* LOG_LEVEL - Minimum log level (debug, info, warn, error). Default: debug in dev, info in prod
|
|
9
|
+
* LOG_DIR - Directory for log files. Default: ./logs
|
|
10
|
+
* LOG_FILE - Enable file logging. Default: true
|
|
11
|
+
* LOG_FILE_PATH - Path to log file. Default: ./logs/app.log (used by pino if available)
|
|
12
|
+
* LOG_CONSOLE - Enable console output. Default: true
|
|
13
|
+
*
|
|
14
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
15
|
+
*/
|
|
16
|
+
import { existsSync, mkdirSync, appendFileSync } from 'node:fs';
|
|
17
|
+
import { resolve } from 'node:path';
|
|
18
|
+
import { getLogger } from '@qwickapps/logging';
|
|
19
|
+
// Default configuration
|
|
20
|
+
const DEFAULT_CONFIG = {
|
|
21
|
+
namespace: 'ControlPanel',
|
|
22
|
+
level: process.env.LOG_LEVEL || (process.env.NODE_ENV === 'production' ? 'info' : 'debug'),
|
|
23
|
+
logDir: process.env.LOG_DIR || './logs',
|
|
24
|
+
fileLogging: process.env.LOG_FILE !== 'false',
|
|
25
|
+
consoleOutput: process.env.LOG_CONSOLE !== 'false',
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* File transport for writing logs to disk
|
|
29
|
+
* Used when pino is not available or as additional transport
|
|
30
|
+
*/
|
|
31
|
+
class FileLogTransport {
|
|
32
|
+
constructor(logDir) {
|
|
33
|
+
this.logPath = resolve(logDir, 'app.log');
|
|
34
|
+
this.errorLogPath = resolve(logDir, 'error.log');
|
|
35
|
+
this.ensureLogDir(logDir);
|
|
36
|
+
}
|
|
37
|
+
ensureLogDir(logDir) {
|
|
38
|
+
const resolvedDir = resolve(logDir);
|
|
39
|
+
if (!existsSync(resolvedDir)) {
|
|
40
|
+
mkdirSync(resolvedDir, { recursive: true });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
handle(level, namespace, message, context) {
|
|
44
|
+
const entry = {
|
|
45
|
+
timestamp: new Date().toISOString(),
|
|
46
|
+
level,
|
|
47
|
+
ns: namespace,
|
|
48
|
+
msg: message,
|
|
49
|
+
...context,
|
|
50
|
+
};
|
|
51
|
+
const line = JSON.stringify(entry) + '\n';
|
|
52
|
+
try {
|
|
53
|
+
// Write to app.log
|
|
54
|
+
appendFileSync(this.logPath, line);
|
|
55
|
+
// Also write errors to error.log
|
|
56
|
+
if (level === 'error') {
|
|
57
|
+
appendFileSync(this.errorLogPath, line);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Silently fail - don't let logging errors break the application
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Logging subsystem instance
|
|
67
|
+
*/
|
|
68
|
+
class LoggingSubsystem {
|
|
69
|
+
constructor() {
|
|
70
|
+
this.fileTransport = null;
|
|
71
|
+
this.initialized = false;
|
|
72
|
+
this.config = { ...DEFAULT_CONFIG };
|
|
73
|
+
this.rootLogger = getLogger(this.config.namespace);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Initialize the logging subsystem with configuration
|
|
77
|
+
*/
|
|
78
|
+
initialize(config = {}) {
|
|
79
|
+
if (this.initialized) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
83
|
+
// Set up file transport if enabled
|
|
84
|
+
if (this.config.fileLogging) {
|
|
85
|
+
this.fileTransport = new FileLogTransport(this.config.logDir);
|
|
86
|
+
// Configure the root logger with file transport
|
|
87
|
+
this.rootLogger.setConfig({
|
|
88
|
+
level: this.config.level,
|
|
89
|
+
disableConsole: !this.config.consoleOutput,
|
|
90
|
+
transports: [this.fileTransport],
|
|
91
|
+
});
|
|
92
|
+
// Set LOG_FILE_PATH for pino (if available)
|
|
93
|
+
if (!process.env.LOG_FILE_PATH) {
|
|
94
|
+
process.env.LOG_FILE = 'true';
|
|
95
|
+
process.env.LOG_FILE_PATH = resolve(this.config.logDir, 'app.log');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
this.rootLogger.setConfig({
|
|
100
|
+
level: this.config.level,
|
|
101
|
+
disableConsole: !this.config.consoleOutput,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
this.initialized = true;
|
|
105
|
+
this.rootLogger.info('Logging subsystem initialized', {
|
|
106
|
+
logDir: this.config.logDir,
|
|
107
|
+
level: this.config.level,
|
|
108
|
+
fileLogging: this.config.fileLogging,
|
|
109
|
+
consoleOutput: this.config.consoleOutput,
|
|
110
|
+
usingPino: this.rootLogger.isUsingPino(),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get a logger for a specific component/plugin
|
|
115
|
+
*/
|
|
116
|
+
getLogger(namespace) {
|
|
117
|
+
const childLogger = this.rootLogger.child(namespace);
|
|
118
|
+
// Return a Logger interface compatible with control-panel types
|
|
119
|
+
return {
|
|
120
|
+
debug: (message, data) => {
|
|
121
|
+
childLogger.debug(message, data || {});
|
|
122
|
+
},
|
|
123
|
+
info: (message, data) => {
|
|
124
|
+
childLogger.info(message, data || {});
|
|
125
|
+
},
|
|
126
|
+
warn: (message, data) => {
|
|
127
|
+
childLogger.warn(message, data || {});
|
|
128
|
+
},
|
|
129
|
+
error: (message, data) => {
|
|
130
|
+
childLogger.error(message, data || {});
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get the root logger
|
|
136
|
+
*/
|
|
137
|
+
getRootLogger() {
|
|
138
|
+
return this.getLogger('Core');
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Check if file logging is enabled and working
|
|
142
|
+
*/
|
|
143
|
+
isFileLoggingEnabled() {
|
|
144
|
+
return this.config.fileLogging && this.fileTransport !== null;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get the log directory path
|
|
148
|
+
*/
|
|
149
|
+
getLogDir() {
|
|
150
|
+
return resolve(this.config.logDir);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get the default log file paths
|
|
154
|
+
*/
|
|
155
|
+
getLogPaths() {
|
|
156
|
+
return {
|
|
157
|
+
appLog: resolve(this.config.logDir, 'app.log'),
|
|
158
|
+
errorLog: resolve(this.config.logDir, 'error.log'),
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Singleton instance
|
|
163
|
+
let loggingSubsystem = null;
|
|
164
|
+
/**
|
|
165
|
+
* Get or create the logging subsystem
|
|
166
|
+
*/
|
|
167
|
+
export function getLoggingSubsystem() {
|
|
168
|
+
if (!loggingSubsystem) {
|
|
169
|
+
loggingSubsystem = new LoggingSubsystem();
|
|
170
|
+
}
|
|
171
|
+
return loggingSubsystem;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Initialize the logging subsystem with configuration
|
|
175
|
+
*/
|
|
176
|
+
export function initializeLogging(config = {}) {
|
|
177
|
+
const subsystem = getLoggingSubsystem();
|
|
178
|
+
subsystem.initialize(config);
|
|
179
|
+
return subsystem;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Get a logger for a specific namespace
|
|
183
|
+
*/
|
|
184
|
+
export function getControlPanelLogger(namespace) {
|
|
185
|
+
return getLoggingSubsystem().getLogger(namespace);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Export for convenience
|
|
189
|
+
*/
|
|
190
|
+
export { LoggingSubsystem };
|
|
191
|
+
//# sourceMappingURL=logging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/core/logging.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for @qwickapps/server
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
5
|
+
*/
|
|
6
|
+
import type { Application, RequestHandler, Router } from 'express';
|
|
7
|
+
/**
|
|
8
|
+
* Control Panel Configuration
|
|
9
|
+
*/
|
|
10
|
+
export interface ControlPanelConfig {
|
|
11
|
+
/** Product name displayed in the control panel */
|
|
12
|
+
productName: string;
|
|
13
|
+
/** Port to run the control panel on */
|
|
14
|
+
port: number;
|
|
15
|
+
/** Optional: Product version */
|
|
16
|
+
version?: string;
|
|
17
|
+
/** Optional: Branding configuration */
|
|
18
|
+
branding?: {
|
|
19
|
+
logo?: string;
|
|
20
|
+
primaryColor?: string;
|
|
21
|
+
favicon?: string;
|
|
22
|
+
};
|
|
23
|
+
/** Optional: Authentication configuration */
|
|
24
|
+
auth?: {
|
|
25
|
+
enabled: boolean;
|
|
26
|
+
provider: 'basic' | 'jwt' | 'custom';
|
|
27
|
+
users?: Array<{
|
|
28
|
+
username: string;
|
|
29
|
+
password: string;
|
|
30
|
+
}>;
|
|
31
|
+
jwtSecret?: string;
|
|
32
|
+
customMiddleware?: RequestHandler;
|
|
33
|
+
};
|
|
34
|
+
/** Optional: CORS configuration */
|
|
35
|
+
cors?: {
|
|
36
|
+
origins: string[];
|
|
37
|
+
};
|
|
38
|
+
/** Optional: Quick links to display */
|
|
39
|
+
links?: Array<{
|
|
40
|
+
label: string;
|
|
41
|
+
url: string;
|
|
42
|
+
icon?: string;
|
|
43
|
+
external?: boolean;
|
|
44
|
+
requiresHealth?: string;
|
|
45
|
+
}>;
|
|
46
|
+
/** Optional: Paths to skip body parsing for (useful for proxy middleware) */
|
|
47
|
+
skipBodyParserPaths?: string[];
|
|
48
|
+
/** Optional: Disable the built-in dashboard HTML (set true when serving a custom React UI) */
|
|
49
|
+
disableDashboard?: boolean;
|
|
50
|
+
/** Optional: Use rich React UI instead of basic HTML (default: true if dist-ui exists) */
|
|
51
|
+
useRichUI?: boolean;
|
|
52
|
+
/** Optional: Custom path to a dist-ui folder for serving a custom React UI */
|
|
53
|
+
customUiPath?: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Plugin Context - passed to plugins during initialization
|
|
57
|
+
*/
|
|
58
|
+
export interface PluginContext {
|
|
59
|
+
config: ControlPanelConfig;
|
|
60
|
+
app: Application;
|
|
61
|
+
router: Router;
|
|
62
|
+
logger: Logger;
|
|
63
|
+
registerHealthCheck: (check: HealthCheck) => void;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Control Panel Plugin interface
|
|
67
|
+
*/
|
|
68
|
+
export interface ControlPanelPlugin {
|
|
69
|
+
/** Unique plugin name */
|
|
70
|
+
name: string;
|
|
71
|
+
/** Order for tab display (lower = first) */
|
|
72
|
+
order?: number;
|
|
73
|
+
/** API routes provided by this plugin */
|
|
74
|
+
routes?: Array<{
|
|
75
|
+
method: 'get' | 'post' | 'put' | 'delete';
|
|
76
|
+
path: string;
|
|
77
|
+
handler: RequestHandler;
|
|
78
|
+
}>;
|
|
79
|
+
/** Lifecycle: Initialize plugin */
|
|
80
|
+
onInit?: (context: PluginContext) => Promise<void>;
|
|
81
|
+
/** Lifecycle: Shutdown plugin */
|
|
82
|
+
onShutdown?: () => Promise<void>;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Health Check types
|
|
86
|
+
*/
|
|
87
|
+
export type HealthCheckType = 'http' | 'tcp' | 'custom';
|
|
88
|
+
export type HealthStatus = 'healthy' | 'degraded' | 'unhealthy' | 'unknown';
|
|
89
|
+
export interface HealthCheckResult {
|
|
90
|
+
status: HealthStatus;
|
|
91
|
+
latency?: number;
|
|
92
|
+
message?: string;
|
|
93
|
+
lastChecked: Date;
|
|
94
|
+
details?: Record<string, unknown>;
|
|
95
|
+
}
|
|
96
|
+
export interface HealthCheck {
|
|
97
|
+
name: string;
|
|
98
|
+
type: HealthCheckType;
|
|
99
|
+
/** For http checks */
|
|
100
|
+
url?: string;
|
|
101
|
+
/** For tcp checks */
|
|
102
|
+
host?: string;
|
|
103
|
+
port?: number;
|
|
104
|
+
/** Check interval in ms */
|
|
105
|
+
interval?: number;
|
|
106
|
+
/** Timeout in ms */
|
|
107
|
+
timeout?: number;
|
|
108
|
+
/** For custom checks */
|
|
109
|
+
check?: () => Promise<{
|
|
110
|
+
healthy: boolean;
|
|
111
|
+
latency?: number;
|
|
112
|
+
details?: Record<string, unknown>;
|
|
113
|
+
}>;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Log Source Configuration
|
|
117
|
+
*/
|
|
118
|
+
export interface LogSource {
|
|
119
|
+
name: string;
|
|
120
|
+
type: 'file' | 'api';
|
|
121
|
+
path?: string;
|
|
122
|
+
url?: string;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Config Display Configuration
|
|
126
|
+
*/
|
|
127
|
+
export interface ConfigDisplayOptions {
|
|
128
|
+
/** Environment variables to show */
|
|
129
|
+
show: string[];
|
|
130
|
+
/** Environment variables to mask */
|
|
131
|
+
mask: string[];
|
|
132
|
+
/** Validation rules */
|
|
133
|
+
validate?: Array<{
|
|
134
|
+
key: string;
|
|
135
|
+
required?: boolean;
|
|
136
|
+
pattern?: RegExp;
|
|
137
|
+
minLength?: number;
|
|
138
|
+
}>;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Simple logger interface
|
|
142
|
+
*/
|
|
143
|
+
export interface Logger {
|
|
144
|
+
debug: (message: string, data?: Record<string, unknown>) => void;
|
|
145
|
+
info: (message: string, data?: Record<string, unknown>) => void;
|
|
146
|
+
warn: (message: string, data?: Record<string, unknown>) => void;
|
|
147
|
+
error: (message: string, data?: Record<string, unknown>) => void;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Control Panel Instance
|
|
151
|
+
*/
|
|
152
|
+
export interface ControlPanelInstance {
|
|
153
|
+
/** Express application */
|
|
154
|
+
app: Application;
|
|
155
|
+
/** Start the control panel server */
|
|
156
|
+
start: () => Promise<void>;
|
|
157
|
+
/** Stop the control panel server */
|
|
158
|
+
stop: () => Promise<void>;
|
|
159
|
+
/** Register a plugin */
|
|
160
|
+
registerPlugin: (plugin: ControlPanelPlugin) => Promise<void>;
|
|
161
|
+
/** Get health check results */
|
|
162
|
+
getHealthStatus: () => Record<string, HealthCheckResult>;
|
|
163
|
+
/** Get diagnostics for AI agents */
|
|
164
|
+
getDiagnostics: () => DiagnosticsReport;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Diagnostics Report for AI agents
|
|
168
|
+
*/
|
|
169
|
+
export interface DiagnosticsReport {
|
|
170
|
+
timestamp: string;
|
|
171
|
+
product: string;
|
|
172
|
+
version?: string;
|
|
173
|
+
uptime: number;
|
|
174
|
+
health: Record<string, HealthCheckResult>;
|
|
175
|
+
system: {
|
|
176
|
+
nodeVersion: string;
|
|
177
|
+
platform: string;
|
|
178
|
+
arch: string;
|
|
179
|
+
memory: {
|
|
180
|
+
total: number;
|
|
181
|
+
used: number;
|
|
182
|
+
free: number;
|
|
183
|
+
};
|
|
184
|
+
cpu: {
|
|
185
|
+
usage: number;
|
|
186
|
+
};
|
|
187
|
+
};
|
|
188
|
+
config?: Record<string, string>;
|
|
189
|
+
logs?: {
|
|
190
|
+
startup: string[];
|
|
191
|
+
recent: string[];
|
|
192
|
+
errors: string[];
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @qwickapps/server
|
|
3
|
+
*
|
|
4
|
+
* Independent control panel and management UI for QwickApps services
|
|
5
|
+
* Runs on a separate port, provides health checks, logs, config, and diagnostics
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
8
|
+
*/
|
|
9
|
+
export { createControlPanel } from './core/control-panel.js';
|
|
10
|
+
export { createGateway } from './core/gateway.js';
|
|
11
|
+
export { HealthManager } from './core/health-manager.js';
|
|
12
|
+
export { initializeLogging, getControlPanelLogger, getLoggingSubsystem, } from './core/logging.js';
|
|
13
|
+
export type { LoggingConfig } from './core/logging.js';
|
|
14
|
+
export type { ControlPanelConfig, ControlPanelPlugin, ControlPanelInstance, PluginContext, HealthCheck, HealthCheckType, HealthCheckResult, HealthStatus, LogSource, ConfigDisplayOptions, Logger, DiagnosticsReport, } from './core/types.js';
|
|
15
|
+
export type { GatewayConfig, GatewayInstance, ServiceFactory, } from './core/gateway.js';
|
|
16
|
+
export { createHealthPlugin, createLogsPlugin, createConfigPlugin, createDiagnosticsPlugin, } from './plugins/index.js';
|
|
17
|
+
export type { HealthPluginConfig, LogsPluginConfig, ConfigPluginConfig, DiagnosticsPluginConfig, } from './plugins/index.js';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,oBAAoB,EACpB,MAAM,EACN,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,aAAa,EACb,eAAe,EACf,cAAc,GACf,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @qwickapps/server
|
|
3
|
+
*
|
|
4
|
+
* Independent control panel and management UI for QwickApps services
|
|
5
|
+
* Runs on a separate port, provides health checks, logs, config, and diagnostics
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
8
|
+
*/
|
|
9
|
+
// Core exports
|
|
10
|
+
export { createControlPanel } from './core/control-panel.js';
|
|
11
|
+
export { createGateway } from './core/gateway.js';
|
|
12
|
+
export { HealthManager } from './core/health-manager.js';
|
|
13
|
+
// Logging exports
|
|
14
|
+
export { initializeLogging, getControlPanelLogger, getLoggingSubsystem, } from './core/logging.js';
|
|
15
|
+
// Built-in plugins
|
|
16
|
+
export { createHealthPlugin, createLogsPlugin, createConfigPlugin, createDiagnosticsPlugin, } from './plugins/index.js';
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAe;AACf,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,kBAAkB;AAClB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAuB3B,mBAAmB;AACnB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Plugin
|
|
3
|
+
*
|
|
4
|
+
* Displays configuration and environment variables with secret masking
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
7
|
+
*/
|
|
8
|
+
import type { ControlPanelPlugin, ConfigDisplayOptions } from '../core/types.js';
|
|
9
|
+
export interface ConfigPluginConfig extends ConfigDisplayOptions {
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Create a config display plugin
|
|
13
|
+
*/
|
|
14
|
+
export declare function createConfigPlugin(config: ConfigPluginConfig): ControlPanelPlugin;
|
|
15
|
+
//# sourceMappingURL=config-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/config-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAiB,MAAM,kBAAkB,CAAC;AAEhG,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;CAAG;AAQnE;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,kBAAkB,CAoFjF"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Plugin
|
|
3
|
+
*
|
|
4
|
+
* Displays configuration and environment variables with secret masking
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Create a config display plugin
|
|
10
|
+
*/
|
|
11
|
+
export function createConfigPlugin(config) {
|
|
12
|
+
return {
|
|
13
|
+
name: 'config',
|
|
14
|
+
order: 30,
|
|
15
|
+
routes: [
|
|
16
|
+
{
|
|
17
|
+
method: 'get',
|
|
18
|
+
path: '/config',
|
|
19
|
+
handler: (_req, res) => {
|
|
20
|
+
const envVars = {};
|
|
21
|
+
// Get visible env vars
|
|
22
|
+
for (const key of config.show) {
|
|
23
|
+
const value = process.env[key];
|
|
24
|
+
if (value !== undefined) {
|
|
25
|
+
// Mask if in mask list
|
|
26
|
+
if (config.mask.some((m) => key.toLowerCase().includes(m.toLowerCase()))) {
|
|
27
|
+
envVars[key] = maskValue(value);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
envVars[key] = value;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
envVars[key] = '<not set>';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
res.json({
|
|
38
|
+
environment: process.env.NODE_ENV || 'development',
|
|
39
|
+
config: envVars,
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
method: 'get',
|
|
45
|
+
path: '/config/validate',
|
|
46
|
+
handler: (_req, res) => {
|
|
47
|
+
const results = [];
|
|
48
|
+
let allValid = true;
|
|
49
|
+
if (config.validate) {
|
|
50
|
+
for (const rule of config.validate) {
|
|
51
|
+
const value = process.env[rule.key];
|
|
52
|
+
let valid = true;
|
|
53
|
+
let message;
|
|
54
|
+
// Required check
|
|
55
|
+
if (rule.required && !value) {
|
|
56
|
+
valid = false;
|
|
57
|
+
message = `Required environment variable "${rule.key}" is not set`;
|
|
58
|
+
}
|
|
59
|
+
// Pattern check
|
|
60
|
+
if (valid && value && rule.pattern && !rule.pattern.test(value)) {
|
|
61
|
+
valid = false;
|
|
62
|
+
message = `Environment variable "${rule.key}" does not match expected pattern`;
|
|
63
|
+
}
|
|
64
|
+
// Min length check
|
|
65
|
+
if (valid && value && rule.minLength && value.length < rule.minLength) {
|
|
66
|
+
valid = false;
|
|
67
|
+
message = `Environment variable "${rule.key}" is too short (min ${rule.minLength} chars)`;
|
|
68
|
+
}
|
|
69
|
+
if (!valid) {
|
|
70
|
+
allValid = false;
|
|
71
|
+
}
|
|
72
|
+
results.push({ key: rule.key, valid, message });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
res.json({
|
|
76
|
+
valid: allValid,
|
|
77
|
+
results,
|
|
78
|
+
});
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
async onInit(context) {
|
|
83
|
+
context.logger.info(`[ConfigPlugin] Initialized with ${config.show.length} visible vars`);
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Mask a sensitive value
|
|
89
|
+
*/
|
|
90
|
+
function maskValue(value) {
|
|
91
|
+
if (value.length <= 4) {
|
|
92
|
+
return '****';
|
|
93
|
+
}
|
|
94
|
+
return value.substring(0, 2) + '*'.repeat(value.length - 4) + value.substring(value.length - 2);
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=config-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-plugin.js","sourceRoot":"","sources":["../../src/plugins/config-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnostics Plugin
|
|
3
|
+
*
|
|
4
|
+
* Provides AI-friendly diagnostic API for troubleshooting
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
7
|
+
*/
|
|
8
|
+
import type { ControlPanelPlugin } from '../core/types.js';
|
|
9
|
+
export interface DiagnosticsPluginConfig {
|
|
10
|
+
include?: {
|
|
11
|
+
logs?: {
|
|
12
|
+
startup?: number;
|
|
13
|
+
app?: number;
|
|
14
|
+
};
|
|
15
|
+
health?: boolean;
|
|
16
|
+
config?: boolean;
|
|
17
|
+
system?: boolean;
|
|
18
|
+
};
|
|
19
|
+
logPaths?: {
|
|
20
|
+
startup?: string;
|
|
21
|
+
app?: string;
|
|
22
|
+
};
|
|
23
|
+
endpoint?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create a diagnostics plugin for AI agents
|
|
27
|
+
*/
|
|
28
|
+
export declare function createDiagnosticsPlugin(config?: DiagnosticsPluginConfig): ControlPanelPlugin;
|
|
29
|
+
//# sourceMappingURL=diagnostics-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics-plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/diagnostics-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAiB,MAAM,kBAAkB,CAAC;AAE1E,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE;YACL,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,GAAG,CAAC,EAAE,MAAM,CAAC;SACd,CAAC;QACF,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,GAAE,uBAA4B,GAAG,kBAAkB,CAkHhG"}
|