@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.
Files changed (81) hide show
  1. package/LICENSE +45 -0
  2. package/README.md +321 -0
  3. package/dist/core/control-panel.d.ts +21 -0
  4. package/dist/core/control-panel.d.ts.map +1 -0
  5. package/dist/core/control-panel.js +416 -0
  6. package/dist/core/control-panel.js.map +1 -0
  7. package/dist/core/gateway.d.ts +133 -0
  8. package/dist/core/gateway.d.ts.map +1 -0
  9. package/dist/core/gateway.js +270 -0
  10. package/dist/core/gateway.js.map +1 -0
  11. package/dist/core/health-manager.d.ts +52 -0
  12. package/dist/core/health-manager.d.ts.map +1 -0
  13. package/dist/core/health-manager.js +192 -0
  14. package/dist/core/health-manager.js.map +1 -0
  15. package/dist/core/index.d.ts +10 -0
  16. package/dist/core/index.d.ts.map +1 -0
  17. package/dist/core/index.js +8 -0
  18. package/dist/core/index.js.map +1 -0
  19. package/dist/core/logging.d.ts +83 -0
  20. package/dist/core/logging.d.ts.map +1 -0
  21. package/dist/core/logging.js +191 -0
  22. package/dist/core/logging.js.map +1 -0
  23. package/dist/core/types.d.ts +195 -0
  24. package/dist/core/types.d.ts.map +1 -0
  25. package/dist/core/types.js +7 -0
  26. package/dist/core/types.js.map +1 -0
  27. package/dist/index.d.ts +18 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +17 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/plugins/config-plugin.d.ts +15 -0
  32. package/dist/plugins/config-plugin.d.ts.map +1 -0
  33. package/dist/plugins/config-plugin.js +96 -0
  34. package/dist/plugins/config-plugin.js.map +1 -0
  35. package/dist/plugins/diagnostics-plugin.d.ts +29 -0
  36. package/dist/plugins/diagnostics-plugin.d.ts.map +1 -0
  37. package/dist/plugins/diagnostics-plugin.js +142 -0
  38. package/dist/plugins/diagnostics-plugin.js.map +1 -0
  39. package/dist/plugins/health-plugin.d.ts +17 -0
  40. package/dist/plugins/health-plugin.d.ts.map +1 -0
  41. package/dist/plugins/health-plugin.js +25 -0
  42. package/dist/plugins/health-plugin.js.map +1 -0
  43. package/dist/plugins/index.d.ts +14 -0
  44. package/dist/plugins/index.d.ts.map +1 -0
  45. package/dist/plugins/index.js +10 -0
  46. package/dist/plugins/index.js.map +1 -0
  47. package/dist/plugins/logs-plugin.d.ts +22 -0
  48. package/dist/plugins/logs-plugin.d.ts.map +1 -0
  49. package/dist/plugins/logs-plugin.js +242 -0
  50. package/dist/plugins/logs-plugin.js.map +1 -0
  51. package/dist-ui/assets/index-Bk7ypbI4.js +465 -0
  52. package/dist-ui/assets/index-Bk7ypbI4.js.map +1 -0
  53. package/dist-ui/assets/index-CiizQQnb.css +1 -0
  54. package/dist-ui/index.html +13 -0
  55. package/package.json +98 -0
  56. package/src/core/control-panel.ts +493 -0
  57. package/src/core/gateway.ts +421 -0
  58. package/src/core/health-manager.ts +227 -0
  59. package/src/core/index.ts +25 -0
  60. package/src/core/logging.ts +234 -0
  61. package/src/core/types.ts +218 -0
  62. package/src/index.ts +55 -0
  63. package/src/plugins/config-plugin.ts +117 -0
  64. package/src/plugins/diagnostics-plugin.ts +178 -0
  65. package/src/plugins/health-plugin.ts +35 -0
  66. package/src/plugins/index.ts +17 -0
  67. package/src/plugins/logs-plugin.ts +314 -0
  68. package/ui/index.html +12 -0
  69. package/ui/src/App.tsx +65 -0
  70. package/ui/src/api/controlPanelApi.ts +148 -0
  71. package/ui/src/config/AppConfig.ts +18 -0
  72. package/ui/src/index.css +29 -0
  73. package/ui/src/index.tsx +11 -0
  74. package/ui/src/pages/ConfigPage.tsx +199 -0
  75. package/ui/src/pages/DashboardPage.tsx +264 -0
  76. package/ui/src/pages/DiagnosticsPage.tsx +315 -0
  77. package/ui/src/pages/HealthPage.tsx +204 -0
  78. package/ui/src/pages/LogsPage.tsx +267 -0
  79. package/ui/src/pages/NotFoundPage.tsx +41 -0
  80. package/ui/tsconfig.json +19 -0
  81. 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,7 @@
1
+ /**
2
+ * Type definitions for @qwickapps/server
3
+ *
4
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -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"}