@qodalis/cli-server-plugin-admin 1.0.0-beta.1 → 1.0.0-beta.13

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 (60) hide show
  1. package/README.md +226 -0
  2. package/dashboard/assets/index-BVWEEAZ_.js +248 -0
  3. package/dashboard/assets/index-DDYjltKc.css +32 -0
  4. package/dashboard/assets/wasm/qodalis_cli_wasm_bg.wasm +0 -0
  5. package/dashboard/index.html +14 -0
  6. package/dist/auth/auth-controller.d.ts +11 -2
  7. package/dist/auth/auth-controller.d.ts.map +1 -1
  8. package/dist/auth/auth-controller.js +59 -6
  9. package/dist/auth/auth-controller.js.map +1 -1
  10. package/dist/auth/auth-middleware.d.ts +2 -1
  11. package/dist/auth/auth-middleware.d.ts.map +1 -1
  12. package/dist/auth/auth-middleware.js +64 -1
  13. package/dist/auth/auth-middleware.js.map +1 -1
  14. package/dist/auth/auth-provider.d.ts +42 -0
  15. package/dist/auth/auth-provider.d.ts.map +1 -0
  16. package/dist/auth/auth-provider.js +16 -0
  17. package/dist/auth/auth-provider.js.map +1 -0
  18. package/dist/auth/jwt-service.d.ts +12 -2
  19. package/dist/auth/jwt-service.d.ts.map +1 -1
  20. package/dist/auth/jwt-service.js +11 -2
  21. package/dist/auth/jwt-service.js.map +1 -1
  22. package/dist/cli-admin-builder.d.ts +49 -9
  23. package/dist/cli-admin-builder.d.ts.map +1 -1
  24. package/dist/cli-admin-builder.js +87 -51
  25. package/dist/cli-admin-builder.js.map +1 -1
  26. package/dist/controllers/plugins-controller.d.ts.map +1 -1
  27. package/dist/controllers/plugins-controller.js +1 -2
  28. package/dist/controllers/plugins-controller.js.map +1 -1
  29. package/dist/controllers/status-controller.d.ts +1 -0
  30. package/dist/controllers/status-controller.d.ts.map +1 -1
  31. package/dist/controllers/status-controller.js.map +1 -1
  32. package/dist/controllers/ws-clients-controller.d.ts +1 -0
  33. package/dist/controllers/ws-clients-controller.d.ts.map +1 -1
  34. package/dist/controllers/ws-clients-controller.js.map +1 -1
  35. package/dist/index.d.ts +4 -2
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +10 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/services/admin-config.d.ts +32 -3
  40. package/dist/services/admin-config.d.ts.map +1 -1
  41. package/dist/services/admin-config.js +56 -3
  42. package/dist/services/admin-config.js.map +1 -1
  43. package/dist/services/admin-theme.d.ts +31 -0
  44. package/dist/services/admin-theme.d.ts.map +1 -0
  45. package/dist/services/admin-theme.js +94 -0
  46. package/dist/services/admin-theme.js.map +1 -0
  47. package/dist/services/dashboard-dir.d.ts +10 -0
  48. package/dist/services/dashboard-dir.d.ts.map +1 -0
  49. package/dist/services/dashboard-dir.js +51 -0
  50. package/dist/services/dashboard-dir.js.map +1 -0
  51. package/dist/services/log-ring-buffer.d.ts +6 -0
  52. package/dist/services/log-ring-buffer.d.ts.map +1 -1
  53. package/dist/services/log-ring-buffer.js +13 -0
  54. package/dist/services/log-ring-buffer.js.map +1 -1
  55. package/dist/services/module-registry.d.ts +20 -7
  56. package/dist/services/module-registry.d.ts.map +1 -1
  57. package/dist/services/module-registry.js +22 -10
  58. package/dist/services/module-registry.js.map +1 -1
  59. package/dist/tsconfig.tsbuildinfo +1 -1
  60. package/package.json +6 -2
@@ -1,7 +1,14 @@
1
1
  import { Router, RequestHandler } from 'express';
2
+ import { ICliProcessorFilter } from '@qodalis/cli-server-abstractions';
3
+ import { AdminAuthProvider } from './auth/auth-provider';
2
4
  import { WsClientsDeps } from './controllers/ws-clients-controller';
3
5
  import { IRegistryLike, IBuilderLike } from './services/module-registry';
4
6
  import { LogRingBuffer } from './services/log-ring-buffer';
7
+ import { AdminTheme } from './services/admin-theme';
8
+ /** Executor-like interface — the admin plugin only needs to register filters. */
9
+ export interface IExecutorLike {
10
+ addFilter(filter: ICliProcessorFilter): void;
11
+ }
5
12
  export interface CliAdminBuildDeps {
6
13
  /** The command registry instance. */
7
14
  registry: IRegistryLike;
@@ -11,18 +18,26 @@ export interface CliAdminBuildDeps {
11
18
  };
12
19
  /** The CLI builder instance (for reading modules). */
13
20
  builder: IBuilderLike;
21
+ /** The command executor service — used to register the module filter for plugin toggling. */
22
+ executor?: IExecutorLike;
14
23
  /** Optional broadcast function override for log events. */
15
24
  broadcastFn?: (message: Record<string, unknown>) => void;
16
25
  }
17
26
  export interface CliAdminPluginResult {
18
- /** Express router — mount at `/api/v1/qcli`. */
27
+ /** Default mount prefix for the API router. */
28
+ prefix: '/api/v1/qcli';
29
+ /** Default mount prefix for the dashboard SPA. */
30
+ dashboardPrefix: '/qcli/admin';
31
+ /** Express router for admin API endpoints. */
19
32
  router: Router;
20
- /** Express router serving the SPA at `/qcli/admin`. */
33
+ /** Express router serving the SPA. */
21
34
  dashboardRouter: Router;
22
35
  /** The auth middleware, in case you need to protect additional routes. */
23
36
  authMiddleware: RequestHandler;
24
37
  /** The log ring buffer, in case you need to push entries programmatically. */
25
38
  logBuffer: LogRingBuffer;
39
+ /** Routes that stay public when the users plugin protects the server. */
40
+ publicRoutes: string[];
26
41
  /** Clean up timers and restore console. Call when shutting down. */
27
42
  dispose: () => void;
28
43
  }
@@ -46,6 +61,38 @@ export declare class CliAdminBuilder {
46
61
  private _registeredJobs;
47
62
  private _dashboardDir?;
48
63
  private _enabledFeatures;
64
+ private _authProvider?;
65
+ private _theme;
66
+ /**
67
+ * Set the dashboard's color scheme: the mode (`dark`, `light` or `system`)
68
+ * and color overrides per scheme. Tokens left out keep the dashboard
69
+ * defaults. Values must be plain CSS colors (hex, rgb()/hsl()/oklch(...)
70
+ * or a named color); anything else throws here.
71
+ *
72
+ * @example
73
+ * ```ts
74
+ * builder.setTheme({
75
+ * mode: 'system',
76
+ * light: { primary: '#2a6bba', background: '#f1f6fa' },
77
+ * dark: { primary: '#4f9be0', background: '#0d1823' },
78
+ * });
79
+ * ```
80
+ */
81
+ setTheme(theme: AdminTheme): CliAdminBuilder;
82
+ /**
83
+ * Authenticate the dashboard through the users plugin
84
+ * (`usersPlugin.serverAuth`): login uses the users auth service and
85
+ * requires the `admin:access` permission (`admin` has it via `*`). The
86
+ * static credentials are then ignored.
87
+ */
88
+ setAuthProvider(provider: AdminAuthProvider): CliAdminBuilder;
89
+ /**
90
+ * Where the host application signs users in, shown by the dashboard in external
91
+ * sign-in mode (the users plugin with an external auth adapter) and returned by
92
+ * `GET /api/v1/qcli/auth/mode`. An absolute `http(s)` URL or a root-relative path
93
+ * (`/sign-in`); anything else (e.g. `javascript:` or `//host`) makes `build()` throw.
94
+ */
95
+ setSignInUrl(url: string | undefined): CliAdminBuilder;
49
96
  /**
50
97
  * Set admin credentials.
51
98
  */
@@ -74,12 +121,5 @@ export declare class CliAdminBuilder {
74
121
  * If not set, the builder will try to resolve it automatically.
75
122
  */
76
123
  setDashboardDir(dir: string): CliAdminBuilder;
77
- /**
78
- * Resolve the dashboard dist directory. Looks for:
79
- * 1. Explicitly set path
80
- * 2. @qodalis/cli-server-dashboard/dist (npm package)
81
- * 3. Relative paths from this file and cwd (development)
82
- */
83
- private _resolveDashboardDir;
84
124
  }
85
125
  //# sourceMappingURL=cli-admin-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-admin-builder.d.ts","sourceRoot":"","sources":["../cli-admin-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAA2B,MAAM,SAAS,CAAC;AAQ1E,OAAO,EAA6B,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAC/F,OAAO,EAAkB,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAM3D,MAAM,WAAW,iBAAiB;IAC9B,qCAAqC;IACrC,QAAQ,EAAE,aAAa,CAAC;IACxB,0CAA0C;IAC1C,kBAAkB,EAAE,aAAa,GAAG;QAChC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;KAC5D,CAAC;IACF,sDAAsD;IACtD,OAAO,EAAE,YAAY,CAAC;IACtB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC5D;AAED,MAAM,WAAW,oBAAoB;IACjC,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,eAAe,EAAE,MAAM,CAAC;IACxB,0EAA0E;IAC1E,cAAc,EAAE,cAAc,CAAC;IAC/B,8EAA8E;IAC9E,SAAS,EAAE,aAAa,CAAC;IACzB,oEAAoE;IACpE,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,eAAe;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,gBAAgB,CAAgB;IAExC;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe;IAKnE;;;OAGG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe;IAM7C;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe;IAKjD;;;;OAIG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,eAAe;IAKvD;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,iBAAiB,GAAG,oBAAoB;IA2FpD;;;OAGG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAK7C;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;CA6B/B"}
1
+ {"version":3,"file":"cli-admin-builder.d.ts","sourceRoot":"","sources":["../cli-admin-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAA2B,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAoC,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAGzG,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAKzD,OAAO,EAA6B,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAC/F,OAAO,EAAkB,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,OAAO,EAAE,UAAU,EAA0C,MAAM,wBAAwB,CAAC;AAI5F,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC1B,SAAS,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,iBAAiB;IAC9B,qCAAqC;IACrC,QAAQ,EAAE,aAAa,CAAC;IACxB,0CAA0C;IAC1C,kBAAkB,EAAE,aAAa,GAAG;QAChC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;KAC5D,CAAC;IACF,sDAAsD;IACtD,OAAO,EAAE,YAAY,CAAC;IACtB,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC5D;AAED,MAAM,WAAW,oBAAoB;IACjC,+CAA+C;IAC/C,MAAM,EAAE,cAAc,CAAC;IACvB,kDAAkD;IAClD,eAAe,EAAE,aAAa,CAAC;IAC/B,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,0EAA0E;IAC1E,cAAc,EAAE,cAAc,CAAC;IAC/B,8EAA8E;IAC9E,SAAS,EAAE,aAAa,CAAC;IACzB,yEAAyE;IACzE,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oEAAoE;IACpE,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,eAAe;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,aAAa,CAAC,CAAoB;IAC1C,OAAO,CAAC,MAAM,CAAqD;IAEnE;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,eAAe;IAK5C;;;;;OAKG;IACH,eAAe,CAAC,QAAQ,EAAE,iBAAiB,GAAG,eAAe;IAK7D;;;;;OAKG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,eAAe;IAKtD;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe;IAKnE;;;OAGG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe;IAM7C;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe;IAKjD;;;;OAIG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,eAAe;IAKvD;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,iBAAiB,GAAG,oBAAoB;IA2HpD;;;OAGG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;CAIhD"}
@@ -45,7 +45,8 @@ const ws_clients_controller_1 = require("./controllers/ws-clients-controller");
45
45
  const module_registry_1 = require("./services/module-registry");
46
46
  const log_ring_buffer_1 = require("./services/log-ring-buffer");
47
47
  const admin_config_1 = require("./services/admin-config");
48
- const fs_1 = require("fs");
48
+ const dashboard_dir_1 = require("./services/dashboard-dir");
49
+ const admin_theme_1 = require("./services/admin-theme");
49
50
  const path_1 = require("path");
50
51
  const crypto = __importStar(require("crypto"));
51
52
  /**
@@ -68,6 +69,47 @@ class CliAdminBuilder {
68
69
  _registeredJobs = 0;
69
70
  _dashboardDir;
70
71
  _enabledFeatures = [];
72
+ _authProvider;
73
+ _theme = (0, admin_theme_1.validateAdminTheme)(undefined);
74
+ /**
75
+ * Set the dashboard's color scheme: the mode (`dark`, `light` or `system`)
76
+ * and color overrides per scheme. Tokens left out keep the dashboard
77
+ * defaults. Values must be plain CSS colors (hex, rgb()/hsl()/oklch(...)
78
+ * or a named color); anything else throws here.
79
+ *
80
+ * @example
81
+ * ```ts
82
+ * builder.setTheme({
83
+ * mode: 'system',
84
+ * light: { primary: '#2a6bba', background: '#f1f6fa' },
85
+ * dark: { primary: '#4f9be0', background: '#0d1823' },
86
+ * });
87
+ * ```
88
+ */
89
+ setTheme(theme) {
90
+ this._theme = (0, admin_theme_1.validateAdminTheme)(theme);
91
+ return this;
92
+ }
93
+ /**
94
+ * Authenticate the dashboard through the users plugin
95
+ * (`usersPlugin.serverAuth`): login uses the users auth service and
96
+ * requires the `admin:access` permission (`admin` has it via `*`). The
97
+ * static credentials are then ignored.
98
+ */
99
+ setAuthProvider(provider) {
100
+ this._authProvider = provider;
101
+ return this;
102
+ }
103
+ /**
104
+ * Where the host application signs users in, shown by the dashboard in external
105
+ * sign-in mode (the users plugin with an external auth adapter) and returned by
106
+ * `GET /api/v1/qcli/auth/mode`. An absolute `http(s)` URL or a root-relative path
107
+ * (`/sign-in`); anything else (e.g. `javascript:` or `//host`) makes `build()` throw.
108
+ */
109
+ setSignInUrl(url) {
110
+ this._config.signInUrl = url;
111
+ return this;
112
+ }
71
113
  /**
72
114
  * Set admin credentials.
73
115
  */
@@ -104,59 +146,79 @@ class CliAdminBuilder {
104
146
  * Build the admin plugin, returning the Express router and auth middleware.
105
147
  */
106
148
  build(deps) {
107
- const { registry, eventSocketManager, builder, broadcastFn } = deps;
149
+ const { registry, eventSocketManager, builder, executor, broadcastFn } = deps;
150
+ this._config.validate();
151
+ // Read on every request: the users plugin sets it when it is mounted (possibly after this build).
152
+ const isExternal = () => !!builder.serverOptions?.externalAuthentication;
153
+ if (!this._authProvider && this._config.usesDefaultCredentials()) {
154
+ console.warn('[qcli-admin] WARNING: Using default admin credentials. Set QCLI_ADMIN_USERNAME and QCLI_ADMIN_PASSWORD environment variables.');
155
+ }
108
156
  // Resolve JWT secret: explicit > env var > random
109
157
  const secret = this._jwtSecret
110
158
  ?? process.env.QCLI_ADMIN_JWT_SECRET
111
159
  ?? crypto.randomBytes(32).toString('hex');
112
160
  // Create services
113
161
  const moduleRegistry = new module_registry_1.ModuleRegistry(registry, builder);
162
+ // Register the module registry as a processor filter so that
163
+ // disabled modules' commands are blocked at execution time.
164
+ if (executor) {
165
+ executor.addFilter(moduleRegistry);
166
+ }
114
167
  const logBuffer = new log_ring_buffer_1.LogRingBuffer();
115
168
  const broadcast = broadcastFn ?? ((msg) => eventSocketManager.broadcastMessage(msg));
116
169
  logBuffer.setBroadcastFn(broadcast);
117
170
  logBuffer.interceptConsole();
118
171
  // Create auth middleware
119
- const authMiddleware = (0, auth_middleware_1.createAuthMiddleware)(secret);
172
+ const authMiddleware = (0, auth_middleware_1.createAuthMiddleware)(secret, this._authProvider, isExternal);
120
173
  // Create main router
121
174
  const router = (0, express_1.Router)();
122
175
  // Auth routes (login is unauthenticated, /me requires auth)
123
- const authResult = (0, auth_controller_1.createAuthController)(this._config, secret);
176
+ const authResult = (0, auth_controller_1.createAuthController)(this._config, secret, this._authProvider, isExternal);
124
177
  router.use('/auth', authResult.router);
125
- // Apply auth middleware to all routes below
126
- router.use(authMiddleware);
178
+ // Auth is applied per admin route group (not router-wide): this router
179
+ // is mounted at the shared /api/v1/qcli prefix, so an unscoped
180
+ // `router.use(authMiddleware)` would reject requests meant for other
181
+ // plugins mounted at the same prefix (e.g. the users plugin).
127
182
  // Status
128
183
  const registeredJobs = this._registeredJobs;
129
184
  const enabledFeatures = this._enabledFeatures;
130
- const hasFilesystem = !!(builder.fileStorageProvider || builder.fileSystemOptions);
131
185
  const statusDeps = {
132
186
  getActiveWsConnections: () => eventSocketManager.getClients().length,
133
- // TODO: expose getActiveShellSessions() on CliEventSocketManager
134
187
  getActiveShellSessions: () => 0,
135
188
  getRegisteredCommands: () => registry.processors.length,
136
189
  getRegisteredJobs: () => registeredJobs,
137
190
  getEnabledFeatures: () => {
138
191
  const features = [...enabledFeatures];
192
+ const hasFilesystem = !!(builder.fileStorageProvider || builder.fileSystemOptions);
139
193
  if (hasFilesystem && !features.includes('filesystem')) {
140
194
  features.push('filesystem');
141
195
  }
142
- if (registeredJobs > 0 && !features.includes('jobs')) {
196
+ const hasJobs = registeredJobs > 0 || !!builder.serverOptions?.jobsEnabled;
197
+ if (hasJobs && !features.includes('jobs')) {
143
198
  features.push('jobs');
144
199
  }
145
200
  return features;
146
201
  },
147
202
  };
148
- router.use('/status', (0, status_controller_1.createStatusController)(statusDeps));
203
+ router.use('/status', authMiddleware, (0, status_controller_1.createStatusController)(statusDeps));
149
204
  // Plugins
150
- router.use('/plugins', (0, plugins_controller_1.createPluginsController)(moduleRegistry));
205
+ router.use('/plugins', authMiddleware, (0, plugins_controller_1.createPluginsController)(moduleRegistry));
151
206
  // Config
152
- router.use('/config', (0, config_controller_1.createConfigController)(this._config));
207
+ router.use('/config', authMiddleware, (0, config_controller_1.createConfigController)(this._config));
153
208
  // Logs
154
- router.use('/logs', (0, logs_controller_1.createLogsController)(logBuffer));
209
+ router.use('/logs', authMiddleware, (0, logs_controller_1.createLogsController)(logBuffer));
155
210
  // WebSocket clients
156
- router.use('/ws/clients', (0, ws_clients_controller_1.createWsClientsController)(eventSocketManager));
211
+ router.use('/ws/clients', authMiddleware, (0, ws_clients_controller_1.createWsClientsController)(eventSocketManager));
157
212
  // Dashboard SPA static file serving
158
213
  const dashboardRouter = (0, express_1.Router)();
159
- const dashboardDistDir = this._resolveDashboardDir();
214
+ const dashboardDistDir = (0, dashboard_dir_1.resolveDashboardDir)(this._dashboardDir);
215
+ // Color scheme, read by the dashboard before its first render (public,
216
+ // like the dashboard itself: the login page uses it too)
217
+ const themeJson = JSON.stringify(this._theme);
218
+ dashboardRouter.get('/theme.json', (_req, res) => {
219
+ res.set('Cache-Control', 'no-cache');
220
+ res.type('application/json').send(themeJson);
221
+ });
160
222
  if (dashboardDistDir) {
161
223
  dashboardRouter.use((0, express_1.static)(dashboardDistDir));
162
224
  // SPA fallback: serve index.html for all non-file routes
@@ -175,7 +237,16 @@ class CliAdminBuilder {
175
237
  clearInterval(authResult.cleanupInterval);
176
238
  logBuffer.restoreConsole();
177
239
  };
178
- return { router, dashboardRouter, authMiddleware, logBuffer, dispose };
240
+ return {
241
+ prefix: '/api/v1/qcli',
242
+ dashboardPrefix: '/qcli/admin',
243
+ router,
244
+ dashboardRouter,
245
+ authMiddleware,
246
+ logBuffer,
247
+ publicRoutes: ['POST /api/v1/qcli/auth/login', 'GET /api/v1/qcli/auth/mode'],
248
+ dispose,
249
+ };
179
250
  }
180
251
  /**
181
252
  * Set the path to the dashboard dist directory.
@@ -185,41 +256,6 @@ class CliAdminBuilder {
185
256
  this._dashboardDir = dir;
186
257
  return this;
187
258
  }
188
- /**
189
- * Resolve the dashboard dist directory. Looks for:
190
- * 1. Explicitly set path
191
- * 2. @qodalis/cli-server-dashboard/dist (npm package)
192
- * 3. Relative paths from this file and cwd (development)
193
- */
194
- _resolveDashboardDir() {
195
- // Explicit override
196
- if (this._dashboardDir && (0, fs_1.existsSync)(this._dashboardDir)) {
197
- return (0, path_1.resolve)(this._dashboardDir);
198
- }
199
- // Try bundled dashboard directory (embedded in this package)
200
- const bundledPath = (0, path_1.resolve)(__dirname, '..', 'dashboard');
201
- if ((0, fs_1.existsSync)(bundledPath))
202
- return bundledPath;
203
- // Try resolving from node_modules (published package — legacy fallback)
204
- try {
205
- const pkgDir = require.resolve('@qodalis/cli-server-dashboard/package.json');
206
- const distDir = (0, path_1.join)(pkgDir, '..', 'dist');
207
- if ((0, fs_1.existsSync)(distDir))
208
- return (0, path_1.resolve)(distDir);
209
- }
210
- catch {
211
- // Package not installed
212
- }
213
- // Try relative path from this file (development)
214
- const devPath = (0, path_1.resolve)(__dirname, '../../../../cli-server-dashboard/dist');
215
- if ((0, fs_1.existsSync)(devPath))
216
- return devPath;
217
- // Try relative path from cwd (workspace root)
218
- const cwdPath = (0, path_1.resolve)(process.cwd(), '../cli-server-dashboard/dist');
219
- if ((0, fs_1.existsSync)(cwdPath))
220
- return cwdPath;
221
- return null;
222
- }
223
259
  }
224
260
  exports.CliAdminBuilder = CliAdminBuilder;
225
261
  //# sourceMappingURL=cli-admin-builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-admin-builder.js","sourceRoot":"","sources":["../cli-admin-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-admin-builder.js","sourceRoot":"","sources":["../cli-admin-builder.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugins-controller.d.ts","sourceRoot":"","sources":["../../controllers/plugins-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,cAAc,GAAG,MAAM,CAqB9E"}
1
+ {"version":3,"file":"plugins-controller.d.ts","sourceRoot":"","sources":["../../controllers/plugins-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,cAAc,GAAG,MAAM,CAoB9E"}
@@ -21,8 +21,7 @@ function createPluginsController(moduleRegistry) {
21
21
  res.status(404).json({ error: `Module '${id}' not found` });
22
22
  return;
23
23
  }
24
- const { warning, ...moduleInfo } = result;
25
- res.json(warning ? { ...moduleInfo, warning } : moduleInfo);
24
+ res.json(result);
26
25
  });
27
26
  return router;
28
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugins-controller.js","sourceRoot":"","sources":["../../controllers/plugins-controller.ts"],"names":[],"mappings":";;AAUA,0DAqBC;AA/BD,qCAAoD;AAGpD;;;;;;GAMG;AACH,SAAgB,uBAAuB,CAAC,cAA8B;IAClE,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAa,EAAE,GAAa,EAAQ,EAAE;QACnD,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,GAAY,EAAE,GAAa,EAAQ,EAAE;QAC7D,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;YAC5D,OAAO;QACX,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC;QAC1C,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"plugins-controller.js","sourceRoot":"","sources":["../../controllers/plugins-controller.ts"],"names":[],"mappings":";;AAUA,0DAoBC;AA9BD,qCAAoD;AAGpD;;;;;;GAMG;AACH,SAAgB,uBAAuB,CAAC,cAA8B;IAClE,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAa,EAAE,GAAa,EAAQ,EAAE;QACnD,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,GAAY,EAAE,GAAa,EAAQ,EAAE;QAC7D,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;YAC5D,OAAO;QACX,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { Router } from 'express';
2
+ /** Dependencies injected into the status controller for runtime metrics. */
2
3
  export interface StatusDeps {
3
4
  getActiveWsConnections: () => number;
4
5
  getActiveShellSessions: () => number;
@@ -1 +1 @@
1
- {"version":3,"file":"status-controller.d.ts","sourceRoot":"","sources":["../../controllers/status-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAEpD,MAAM,WAAW,UAAU;IACvB,sBAAsB,EAAE,MAAM,MAAM,CAAC;IACrC,sBAAsB,EAAE,MAAM,MAAM,CAAC;IACrC,qBAAqB,EAAE,MAAM,MAAM,CAAC;IACpC,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,MAAM,EAAE,CAAC;CACtC;AAID;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAuB/D"}
1
+ {"version":3,"file":"status-controller.d.ts","sourceRoot":"","sources":["../../controllers/status-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAEpD,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IACvB,sBAAsB,EAAE,MAAM,MAAM,CAAC;IACrC,sBAAsB,EAAE,MAAM,MAAM,CAAC;IACrC,qBAAqB,EAAE,MAAM,MAAM,CAAC;IACpC,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,MAAM,EAAE,CAAC;CACtC;AAID;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAuB/D"}
@@ -1 +1 @@
1
- {"version":3,"file":"status-controller.js","sourceRoot":"","sources":["../../controllers/status-controller.ts"],"names":[],"mappings":";;AAkBA,wDAuBC;AAzCD,qCAAoD;AAUpD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAE3C;;;;;GAKG;AACH,SAAgB,sBAAsB,CAAC,IAAgB;IACnD,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAa,EAAE,GAAa,EAAQ,EAAE;QACnD,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAElC,GAAG,CAAC,IAAI,CAAC;YACL,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC3C,SAAS;YACT,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;YAC9D,eAAe,EAAE,IAAI;YACrB,QAAQ,EAAE,MAAM;YAChB,eAAe,EAAE,OAAO,CAAC,OAAO;YAChC,mBAAmB,EAAE,IAAI,CAAC,sBAAsB,EAAE;YAClD,mBAAmB,EAAE,IAAI,CAAC,sBAAsB,EAAE;YAClD,kBAAkB,EAAE,IAAI,CAAC,qBAAqB,EAAE;YAChD,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE;YACxC,EAAE,EAAE,OAAO,CAAC,QAAQ;YACpB,eAAe,EAAE,IAAI,CAAC,kBAAkB,EAAE;SAC7C,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"status-controller.js","sourceRoot":"","sources":["../../controllers/status-controller.ts"],"names":[],"mappings":";;AAmBA,wDAuBC;AA1CD,qCAAoD;AAWpD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAE3C;;;;;GAKG;AACH,SAAgB,sBAAsB,CAAC,IAAgB;IACnD,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAa,EAAE,GAAa,EAAQ,EAAE;QACnD,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAElC,GAAG,CAAC,IAAI,CAAC;YACL,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC3C,SAAS;YACT,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;YAC9D,eAAe,EAAE,IAAI;YACrB,QAAQ,EAAE,MAAM;YAChB,eAAe,EAAE,OAAO,CAAC,OAAO;YAChC,mBAAmB,EAAE,IAAI,CAAC,sBAAsB,EAAE;YAClD,mBAAmB,EAAE,IAAI,CAAC,sBAAsB,EAAE;YAClD,kBAAkB,EAAE,IAAI,CAAC,qBAAqB,EAAE;YAChD,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE;YACxC,EAAE,EAAE,OAAO,CAAC,QAAQ;YACpB,eAAe,EAAE,IAAI,CAAC,kBAAkB,EAAE;SAC7C,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { Router } from 'express';
2
+ /** Dependency providing access to connected WebSocket client metadata. */
2
3
  export interface WsClientsDeps {
3
4
  getClients: () => Array<{
4
5
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ws-clients-controller.d.ts","sourceRoot":"","sources":["../../controllers/ws-clients-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAEpD,MAAM,WAAW,aAAa;IAC1B,UAAU,EAAE,MAAM,KAAK,CAAC;QACpB,EAAE,EAAE,MAAM,CAAC;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACN;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAQrE"}
1
+ {"version":3,"file":"ws-clients-controller.d.ts","sourceRoot":"","sources":["../../controllers/ws-clients-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAEpD,0EAA0E;AAC1E,MAAM,WAAW,aAAa;IAC1B,UAAU,EAAE,MAAM,KAAK,CAAC;QACpB,EAAE,EAAE,MAAM,CAAC;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACN;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAQrE"}
@@ -1 +1 @@
1
- {"version":3,"file":"ws-clients-controller.js","sourceRoot":"","sources":["../../controllers/ws-clients-controller.ts"],"names":[],"mappings":";;AAiBA,8DAQC;AAzBD,qCAAoD;AAWpD;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAC,IAAmB;IACzD,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAa,EAAE,GAAa,EAAQ,EAAE;QACnD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"ws-clients-controller.js","sourceRoot":"","sources":["../../controllers/ws-clients-controller.ts"],"names":[],"mappings":";;AAkBA,8DAQC;AA1BD,qCAAoD;AAYpD;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAC,IAAmB;IACzD,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAa,EAAE,GAAa,EAAQ,EAAE;QACnD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,10 @@
1
- export { CliAdminBuilder, CliAdminBuildDeps, CliAdminPluginResult } from './cli-admin-builder';
1
+ export { CliAdminBuilder, CliAdminBuildDeps, CliAdminPluginResult, IExecutorLike } from './cli-admin-builder';
2
2
  export { LogRingBuffer, LogEntry, LogQueryParams, LogQueryResult } from './services/log-ring-buffer';
3
3
  export { ModuleRegistry, ModuleInfo, IRegistryLike, IBuilderLike } from './services/module-registry';
4
4
  export { AdminConfig, AdminCredentials, ConfigSection } from './services/admin-config';
5
5
  export { signToken, verifyToken, JwtPayload } from './auth/jwt-service';
6
- export { AuthControllerResult } from './auth/auth-controller';
6
+ export { AuthControllerResult, ADMIN_AUTH_MODE_PASSWORD, ADMIN_AUTH_MODE_EXTERNAL } from './auth/auth-controller';
7
7
  export { createAuthMiddleware, AuthenticatedRequest } from './auth/auth-middleware';
8
+ export { AdminAuthProvider, ADMIN_ACCESS_PERMISSION } from './auth/auth-provider';
9
+ export { AdminTheme, AdminThemeColors, AdminThemeDocument, AdminThemeMode, AdminThemeToken, ADMIN_THEME_TOKENS, isThemeColor, validateAdminTheme, } from './services/admin-theme';
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACrG,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACrG,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC9G,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACrG,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACrG,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClH,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EACH,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,GACrB,MAAM,wBAAwB,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createAuthMiddleware = exports.verifyToken = exports.signToken = exports.AdminConfig = exports.ModuleRegistry = exports.LogRingBuffer = exports.CliAdminBuilder = void 0;
3
+ exports.validateAdminTheme = exports.isThemeColor = exports.ADMIN_THEME_TOKENS = exports.ADMIN_ACCESS_PERMISSION = exports.createAuthMiddleware = exports.ADMIN_AUTH_MODE_EXTERNAL = exports.ADMIN_AUTH_MODE_PASSWORD = exports.verifyToken = exports.signToken = exports.AdminConfig = exports.ModuleRegistry = exports.LogRingBuffer = exports.CliAdminBuilder = void 0;
4
4
  var cli_admin_builder_1 = require("./cli-admin-builder");
5
5
  Object.defineProperty(exports, "CliAdminBuilder", { enumerable: true, get: function () { return cli_admin_builder_1.CliAdminBuilder; } });
6
6
  var log_ring_buffer_1 = require("./services/log-ring-buffer");
@@ -12,6 +12,15 @@ Object.defineProperty(exports, "AdminConfig", { enumerable: true, get: function
12
12
  var jwt_service_1 = require("./auth/jwt-service");
13
13
  Object.defineProperty(exports, "signToken", { enumerable: true, get: function () { return jwt_service_1.signToken; } });
14
14
  Object.defineProperty(exports, "verifyToken", { enumerable: true, get: function () { return jwt_service_1.verifyToken; } });
15
+ var auth_controller_1 = require("./auth/auth-controller");
16
+ Object.defineProperty(exports, "ADMIN_AUTH_MODE_PASSWORD", { enumerable: true, get: function () { return auth_controller_1.ADMIN_AUTH_MODE_PASSWORD; } });
17
+ Object.defineProperty(exports, "ADMIN_AUTH_MODE_EXTERNAL", { enumerable: true, get: function () { return auth_controller_1.ADMIN_AUTH_MODE_EXTERNAL; } });
15
18
  var auth_middleware_1 = require("./auth/auth-middleware");
16
19
  Object.defineProperty(exports, "createAuthMiddleware", { enumerable: true, get: function () { return auth_middleware_1.createAuthMiddleware; } });
20
+ var auth_provider_1 = require("./auth/auth-provider");
21
+ Object.defineProperty(exports, "ADMIN_ACCESS_PERMISSION", { enumerable: true, get: function () { return auth_provider_1.ADMIN_ACCESS_PERMISSION; } });
22
+ var admin_theme_1 = require("./services/admin-theme");
23
+ Object.defineProperty(exports, "ADMIN_THEME_TOKENS", { enumerable: true, get: function () { return admin_theme_1.ADMIN_THEME_TOKENS; } });
24
+ Object.defineProperty(exports, "isThemeColor", { enumerable: true, get: function () { return admin_theme_1.isThemeColor; } });
25
+ Object.defineProperty(exports, "validateAdminTheme", { enumerable: true, get: function () { return admin_theme_1.validateAdminTheme; } });
17
26
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,yDAA+F;AAAtF,oHAAA,eAAe,OAAA;AACxB,8DAAqG;AAA5F,gHAAA,aAAa,OAAA;AACtB,8DAAqG;AAA5F,iHAAA,cAAc,OAAA;AACvB,wDAAuF;AAA9E,2GAAA,WAAW,OAAA;AACpB,kDAAwE;AAA/D,wGAAA,SAAS,OAAA;AAAE,0GAAA,WAAW,OAAA;AAE/B,0DAAoF;AAA3E,uHAAA,oBAAoB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,yDAA8G;AAArG,oHAAA,eAAe,OAAA;AACxB,8DAAqG;AAA5F,gHAAA,aAAa,OAAA;AACtB,8DAAqG;AAA5F,iHAAA,cAAc,OAAA;AACvB,wDAAuF;AAA9E,2GAAA,WAAW,OAAA;AACpB,kDAAwE;AAA/D,wGAAA,SAAS,OAAA;AAAE,0GAAA,WAAW,OAAA;AAC/B,0DAAkH;AAAnF,2HAAA,wBAAwB,OAAA;AAAE,2HAAA,wBAAwB,OAAA;AACjF,0DAAoF;AAA3E,uHAAA,oBAAoB,OAAA;AAC7B,sDAAkF;AAAtD,wHAAA,uBAAuB,OAAA;AACnD,sDASgC;AAH5B,iHAAA,kBAAkB,OAAA;AAClB,2GAAA,YAAY,OAAA;AACZ,iHAAA,kBAAkB,OAAA"}
@@ -1,10 +1,9 @@
1
- /**
2
- * Admin configuration — reads credentials and settings from environment variables.
3
- */
1
+ /** Admin username/password pair. */
4
2
  export interface AdminCredentials {
5
3
  username: string;
6
4
  password: string;
7
5
  }
6
+ /** A single configuration setting exposed by the admin dashboard. */
8
7
  export interface ConfigEntry {
9
8
  key: string;
10
9
  value: string | number | boolean | string[];
@@ -12,23 +11,53 @@ export interface ConfigEntry {
12
11
  description: string;
13
12
  mutable: boolean;
14
13
  }
14
+ /** A named group of configuration entries (e.g. "server", "auth", "custom"). */
15
15
  export interface ConfigSection {
16
16
  name: string;
17
17
  mutable: boolean;
18
18
  settings: ConfigEntry[];
19
19
  }
20
+ /**
21
+ * Manages admin credentials and mutable runtime settings.
22
+ * Reads defaults from environment variables on construction.
23
+ */
20
24
  export declare class AdminConfig {
21
25
  private _username;
22
26
  private _password;
23
27
  private _jwtSecret;
28
+ private _signInUrl;
24
29
  private readonly _mutableSettings;
30
+ /**
31
+ * Where the host application signs users in, shown by the dashboard in external
32
+ * sign-in mode (users plugin with an external auth adapter) and returned by
33
+ * `GET /api/v1/qcli/auth/mode`. An absolute `http(s)` URL or a root-relative path
34
+ * (`/sign-in`). Undefined: the dashboard tells users to sign in through the host application.
35
+ */
36
+ get signInUrl(): string | undefined;
37
+ set signInUrl(value: string | undefined);
38
+ /** Validates the options set by the host. Throws on an invalid {@link signInUrl}. */
39
+ validate(): void;
40
+ /**
41
+ * True for an absolute `http`/`https` URL with a host, or a root-relative path
42
+ * (`/sign-in`; not protocol-relative `//host` or `/\host`). Rejects other schemes
43
+ * such as `javascript:`, and control characters or whitespace.
44
+ */
45
+ static isValidSignInUrl(value: string | null | undefined): boolean;
25
46
  constructor();
47
+ /** True while the well-known `admin` / `admin` credentials are in effect. */
48
+ usesDefaultCredentials(): boolean;
49
+ /** Override the admin username and password. */
26
50
  setCredentials(username: string, password: string): void;
51
+ /** Set the JWT signing secret explicitly. */
27
52
  setJwtSecret(secret: string): void;
28
53
  get jwtSecret(): string | undefined;
54
+ /** Validate credentials using timing-safe comparison. */
29
55
  validateCredentials(username: string, password: string): boolean;
56
+ /** Return all configuration sections (server, auth, custom) for the dashboard. */
30
57
  getConfigSections(): ConfigSection[];
58
+ /** Return a shallow copy of all mutable (custom) settings. */
31
59
  getMutableSettings(): Record<string, unknown>;
60
+ /** Merge the provided key-value pairs into mutable settings. */
32
61
  updateMutableSettings(values: Record<string, unknown>): void;
33
62
  }
34
63
  //# sourceMappingURL=admin-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"admin-config.d.ts","sourceRoot":"","sources":["../../services/admin-config.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC;IAC5C,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,WAAW,EAAE,CAAC;CAC3B;AAED,qBAAa,WAAW;IACpB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA+B;;IAYhE,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKxD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIlC,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAElC;IAED,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAOhE,iBAAiB,IAAI,aAAa,EAAE;IAsCpC,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI7C,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAG/D"}
1
+ {"version":3,"file":"admin-config.d.ts","sourceRoot":"","sources":["../../services/admin-config.ts"],"names":[],"mappings":"AAYA,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,qEAAqE;AACrE,MAAM,WAAW,WAAW;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC;IAC5C,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,gFAAgF;AAChF,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,WAAW,EAAE,CAAC;CAC3B;AAED;;;GAGG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA+B;IAEhE;;;;;OAKG;IACH,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAElC;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAEtC;IAED,qFAAqF;IACrF,QAAQ,IAAI,IAAI;IAMhB;;;;OAIG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO;;IAuBlE,6EAA6E;IAC7E,sBAAsB,IAAI,OAAO;IAIjC,gDAAgD;IAChD,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKxD,6CAA6C;IAC7C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIlC,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAElC;IAED,yDAAyD;IACzD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAOhE,kFAAkF;IAClF,iBAAiB,IAAI,aAAa,EAAE;IAsCpC,8DAA8D;IAC9D,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI7C,gEAAgE;IAChE,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAG/D"}