@qodalis/cli-server-plugin-admin 1.0.0-beta.1 → 1.0.0-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +110 -0
- package/dashboard/assets/index-B5szolha.js +200 -0
- package/dashboard/assets/index-Co1BkfeM.css +32 -0
- package/dashboard/assets/wasm/qodalis_cli_wasm_bg.wasm +0 -0
- package/dashboard/index.html +14 -0
- package/dist/auth/auth-controller.d.ts +5 -1
- package/dist/auth/auth-controller.d.ts.map +1 -1
- package/dist/auth/auth-controller.js +35 -5
- package/dist/auth/auth-controller.js.map +1 -1
- package/dist/auth/auth-middleware.d.ts +2 -1
- package/dist/auth/auth-middleware.d.ts.map +1 -1
- package/dist/auth/auth-middleware.js +35 -1
- package/dist/auth/auth-middleware.js.map +1 -1
- package/dist/auth/auth-provider.d.ts +33 -0
- package/dist/auth/auth-provider.d.ts.map +1 -0
- package/dist/auth/auth-provider.js +16 -0
- package/dist/auth/auth-provider.js.map +1 -0
- package/dist/auth/jwt-service.d.ts +12 -2
- package/dist/auth/jwt-service.d.ts.map +1 -1
- package/dist/auth/jwt-service.js +11 -2
- package/dist/auth/jwt-service.js.map +1 -1
- package/dist/cli-admin-builder.d.ts +24 -2
- package/dist/cli-admin-builder.d.ts.map +1 -1
- package/dist/cli-admin-builder.js +41 -12
- package/dist/cli-admin-builder.js.map +1 -1
- package/dist/controllers/plugins-controller.d.ts.map +1 -1
- package/dist/controllers/plugins-controller.js +1 -2
- package/dist/controllers/plugins-controller.js.map +1 -1
- package/dist/controllers/status-controller.d.ts +1 -0
- package/dist/controllers/status-controller.d.ts.map +1 -1
- package/dist/controllers/status-controller.js.map +1 -1
- package/dist/controllers/ws-clients-controller.d.ts +1 -0
- package/dist/controllers/ws-clients-controller.d.ts.map +1 -1
- package/dist/controllers/ws-clients-controller.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/services/admin-config.d.ts +15 -3
- package/dist/services/admin-config.d.ts.map +1 -1
- package/dist/services/admin-config.js +15 -3
- package/dist/services/admin-config.js.map +1 -1
- package/dist/services/log-ring-buffer.d.ts +4 -0
- package/dist/services/log-ring-buffer.d.ts.map +1 -1
- package/dist/services/log-ring-buffer.js +1 -0
- package/dist/services/log-ring-buffer.js.map +1 -1
- package/dist/services/module-registry.d.ts +12 -7
- package/dist/services/module-registry.d.ts.map +1 -1
- package/dist/services/module-registry.js +22 -10
- package/dist/services/module-registry.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -1
|
@@ -68,6 +68,17 @@ class CliAdminBuilder {
|
|
|
68
68
|
_registeredJobs = 0;
|
|
69
69
|
_dashboardDir;
|
|
70
70
|
_enabledFeatures = [];
|
|
71
|
+
_authProvider;
|
|
72
|
+
/**
|
|
73
|
+
* Authenticate the dashboard through the users plugin
|
|
74
|
+
* (`usersPlugin.serverAuth`): login uses the users auth service and
|
|
75
|
+
* requires the `admin:access` permission (`admin` has it via `*`). The
|
|
76
|
+
* static credentials are then ignored.
|
|
77
|
+
*/
|
|
78
|
+
setAuthProvider(provider) {
|
|
79
|
+
this._authProvider = provider;
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
71
82
|
/**
|
|
72
83
|
* Set admin credentials.
|
|
73
84
|
*/
|
|
@@ -104,33 +115,42 @@ class CliAdminBuilder {
|
|
|
104
115
|
* Build the admin plugin, returning the Express router and auth middleware.
|
|
105
116
|
*/
|
|
106
117
|
build(deps) {
|
|
107
|
-
const { registry, eventSocketManager, builder, broadcastFn } = deps;
|
|
118
|
+
const { registry, eventSocketManager, builder, executor, broadcastFn } = deps;
|
|
119
|
+
if (!this._authProvider && this._config.usesDefaultCredentials()) {
|
|
120
|
+
console.warn('[qcli-admin] WARNING: Using default admin credentials. Set QCLI_ADMIN_USERNAME and QCLI_ADMIN_PASSWORD environment variables.');
|
|
121
|
+
}
|
|
108
122
|
// Resolve JWT secret: explicit > env var > random
|
|
109
123
|
const secret = this._jwtSecret
|
|
110
124
|
?? process.env.QCLI_ADMIN_JWT_SECRET
|
|
111
125
|
?? crypto.randomBytes(32).toString('hex');
|
|
112
126
|
// Create services
|
|
113
127
|
const moduleRegistry = new module_registry_1.ModuleRegistry(registry, builder);
|
|
128
|
+
// Register the module registry as a processor filter so that
|
|
129
|
+
// disabled modules' commands are blocked at execution time.
|
|
130
|
+
if (executor) {
|
|
131
|
+
executor.addFilter(moduleRegistry);
|
|
132
|
+
}
|
|
114
133
|
const logBuffer = new log_ring_buffer_1.LogRingBuffer();
|
|
115
134
|
const broadcast = broadcastFn ?? ((msg) => eventSocketManager.broadcastMessage(msg));
|
|
116
135
|
logBuffer.setBroadcastFn(broadcast);
|
|
117
136
|
logBuffer.interceptConsole();
|
|
118
137
|
// Create auth middleware
|
|
119
|
-
const authMiddleware = (0, auth_middleware_1.createAuthMiddleware)(secret);
|
|
138
|
+
const authMiddleware = (0, auth_middleware_1.createAuthMiddleware)(secret, this._authProvider);
|
|
120
139
|
// Create main router
|
|
121
140
|
const router = (0, express_1.Router)();
|
|
122
141
|
// Auth routes (login is unauthenticated, /me requires auth)
|
|
123
|
-
const authResult = (0, auth_controller_1.createAuthController)(this._config, secret);
|
|
142
|
+
const authResult = (0, auth_controller_1.createAuthController)(this._config, secret, this._authProvider);
|
|
124
143
|
router.use('/auth', authResult.router);
|
|
125
|
-
//
|
|
126
|
-
|
|
144
|
+
// Auth is applied per admin route group (not router-wide): this router
|
|
145
|
+
// is mounted at the shared /api/v1/qcli prefix, so an unscoped
|
|
146
|
+
// `router.use(authMiddleware)` would reject requests meant for other
|
|
147
|
+
// plugins mounted at the same prefix (e.g. the users plugin).
|
|
127
148
|
// Status
|
|
128
149
|
const registeredJobs = this._registeredJobs;
|
|
129
150
|
const enabledFeatures = this._enabledFeatures;
|
|
130
151
|
const hasFilesystem = !!(builder.fileStorageProvider || builder.fileSystemOptions);
|
|
131
152
|
const statusDeps = {
|
|
132
153
|
getActiveWsConnections: () => eventSocketManager.getClients().length,
|
|
133
|
-
// TODO: expose getActiveShellSessions() on CliEventSocketManager
|
|
134
154
|
getActiveShellSessions: () => 0,
|
|
135
155
|
getRegisteredCommands: () => registry.processors.length,
|
|
136
156
|
getRegisteredJobs: () => registeredJobs,
|
|
@@ -145,15 +165,15 @@ class CliAdminBuilder {
|
|
|
145
165
|
return features;
|
|
146
166
|
},
|
|
147
167
|
};
|
|
148
|
-
router.use('/status', (0, status_controller_1.createStatusController)(statusDeps));
|
|
168
|
+
router.use('/status', authMiddleware, (0, status_controller_1.createStatusController)(statusDeps));
|
|
149
169
|
// Plugins
|
|
150
|
-
router.use('/plugins', (0, plugins_controller_1.createPluginsController)(moduleRegistry));
|
|
170
|
+
router.use('/plugins', authMiddleware, (0, plugins_controller_1.createPluginsController)(moduleRegistry));
|
|
151
171
|
// Config
|
|
152
|
-
router.use('/config', (0, config_controller_1.createConfigController)(this._config));
|
|
172
|
+
router.use('/config', authMiddleware, (0, config_controller_1.createConfigController)(this._config));
|
|
153
173
|
// Logs
|
|
154
|
-
router.use('/logs', (0, logs_controller_1.createLogsController)(logBuffer));
|
|
174
|
+
router.use('/logs', authMiddleware, (0, logs_controller_1.createLogsController)(logBuffer));
|
|
155
175
|
// WebSocket clients
|
|
156
|
-
router.use('/ws/clients', (0, ws_clients_controller_1.createWsClientsController)(eventSocketManager));
|
|
176
|
+
router.use('/ws/clients', authMiddleware, (0, ws_clients_controller_1.createWsClientsController)(eventSocketManager));
|
|
157
177
|
// Dashboard SPA static file serving
|
|
158
178
|
const dashboardRouter = (0, express_1.Router)();
|
|
159
179
|
const dashboardDistDir = this._resolveDashboardDir();
|
|
@@ -175,7 +195,16 @@ class CliAdminBuilder {
|
|
|
175
195
|
clearInterval(authResult.cleanupInterval);
|
|
176
196
|
logBuffer.restoreConsole();
|
|
177
197
|
};
|
|
178
|
-
return {
|
|
198
|
+
return {
|
|
199
|
+
prefix: '/api/v1/qcli',
|
|
200
|
+
dashboardPrefix: '/qcli/admin',
|
|
201
|
+
router,
|
|
202
|
+
dashboardRouter,
|
|
203
|
+
authMiddleware,
|
|
204
|
+
logBuffer,
|
|
205
|
+
publicRoutes: ['POST /api/v1/qcli/auth/login'],
|
|
206
|
+
dispose,
|
|
207
|
+
};
|
|
179
208
|
}
|
|
180
209
|
/**
|
|
181
210
|
* Set the path to the dashboard dist directory.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-admin-builder.js","sourceRoot":"","sources":["../cli-admin-builder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAA0E;AAE1E,4DAA8D;AAC9D,4DAA8D;
|
|
1
|
+
{"version":3,"file":"cli-admin-builder.js","sourceRoot":"","sources":["../cli-admin-builder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAA0E;AAE1E,4DAA8D;AAC9D,4DAA8D;AAE9D,uEAAqF;AACrF,yEAA2E;AAC3E,uEAAyE;AACzE,mEAAqE;AACrE,+EAA+F;AAC/F,gEAAyF;AACzF,gEAA2D;AAC3D,0DAAsD;AACtD,2BAA8C;AAC9C,+BAAqC;AACrC,+CAAiC;AAyCjC;;;;;;;;;;;;;GAaG;AACH,MAAa,eAAe;IACP,OAAO,GAAG,IAAI,0BAAW,EAAE,CAAC;IACrC,UAAU,CAAU;IACpB,eAAe,GAAG,CAAC,CAAC;IACpB,aAAa,CAAU;IACvB,gBAAgB,GAAa,EAAE,CAAC;IAChC,aAAa,CAAqB;IAE1C;;;;;OAKG;IACH,eAAe,CAAC,QAA2B;QACvC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,QAAgB,EAAE,QAAgB;QAC7C,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,MAAc;QACvB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,KAAa;QAC3B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,QAAkB;QACjC,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAuB;QACzB,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAE9E,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,+HAA+H,CAAC,CAAC;QAClJ,CAAC;QAED,kDAAkD;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU;eACvB,OAAO,CAAC,GAAG,CAAC,qBAAqB;eACjC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE9C,kBAAkB;QAClB,MAAM,cAAc,GAAG,IAAI,gCAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE7D,6DAA6D;QAC7D,4DAA4D;QAC5D,IAAI,QAAQ,EAAE,CAAC;YACX,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,+BAAa,EAAE,CAAC;QAEtC,MAAM,SAAS,GAAG,WAAW,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;QACrF,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACpC,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAE7B,yBAAyB;QACzB,MAAM,cAAc,GAAG,IAAA,sCAAoB,EAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAExE,qBAAqB;QACrB,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;QAExB,4DAA4D;QAC5D,MAAM,UAAU,GAAG,IAAA,sCAAoB,EAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAClF,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAEvC,uEAAuE;QACvE,+DAA+D;QAC/D,qEAAqE;QACrE,8DAA8D;QAE9D,SAAS;QACT,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;QAC5C,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC9C,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACnF,MAAM,UAAU,GAAe;YAC3B,sBAAsB,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC,MAAM;YACpE,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/B,qBAAqB,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM;YACvD,iBAAiB,EAAE,GAAG,EAAE,CAAC,cAAc;YACvC,kBAAkB,EAAE,GAAG,EAAE;gBACrB,MAAM,QAAQ,GAAa,CAAC,GAAG,eAAe,CAAC,CAAC;gBAChD,IAAI,aAAa,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;oBACpD,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAChC,CAAC;gBACD,IAAI,cAAc,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACnD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1B,CAAC;gBACD,OAAO,QAAQ,CAAC;YACpB,CAAC;SACJ,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,IAAA,0CAAsB,EAAC,UAAU,CAAC,CAAC,CAAC;QAE1E,UAAU;QACV,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,IAAA,4CAAuB,EAAC,cAAc,CAAC,CAAC,CAAC;QAEhF,SAAS;QACT,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,IAAA,0CAAsB,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAE5E,OAAO;QACP,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,IAAA,sCAAoB,EAAC,SAAS,CAAC,CAAC,CAAC;QAErE,oBAAoB;QACpB,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,cAAc,EAAE,IAAA,iDAAyB,EAAC,kBAAkB,CAAC,CAAC,CAAC;QAEzF,oCAAoC;QACpC,MAAM,eAAe,GAAG,IAAA,gBAAM,GAAE,CAAC;QACjC,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAErD,IAAI,gBAAgB,EAAE,CAAC;YACnB,eAAe,CAAC,GAAG,CAAC,IAAA,gBAAa,EAAC,gBAAgB,CAAC,CAAC,CAAC;YAErD,yDAAyD;YACzD,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;gBACnC,GAAG,CAAC,QAAQ,CAAC,IAAA,WAAI,EAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;gBACnC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACjB,KAAK,EAAE,iIAAiI;iBAC3I,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,EAAE;YACjB,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YAC1C,SAAS,CAAC,cAAc,EAAE,CAAC;QAC/B,CAAC,CAAC;QAEF,OAAO;YACH,MAAM,EAAE,cAAc;YACtB,eAAe,EAAE,aAAa;YAC9B,MAAM;YACN,eAAe;YACf,cAAc;YACd,SAAS;YACT,YAAY,EAAE,CAAC,8BAA8B,CAAC;YAC9C,OAAO;SACV,CAAC;IACN,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,GAAW;QACvB,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;QACzB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACK,oBAAoB;QACxB,oBAAoB;QACpB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAA,eAAU,EAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YACvD,OAAO,IAAA,cAAO,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACvC,CAAC;QAED,6DAA6D;QAC7D,MAAM,WAAW,GAAG,IAAA,cAAO,EAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAC1D,IAAI,IAAA,eAAU,EAAC,WAAW,CAAC;YAAE,OAAO,WAAW,CAAC;QAEhD,wEAAwE;QACxE,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC;YAC7E,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3C,IAAI,IAAA,eAAU,EAAC,OAAO,CAAC;gBAAE,OAAO,IAAA,cAAO,EAAC,OAAO,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACL,wBAAwB;QAC5B,CAAC;QAED,iDAAiD;QACjD,MAAM,OAAO,GAAG,IAAA,cAAO,EAAC,SAAS,EAAE,uCAAuC,CAAC,CAAC;QAC5E,IAAI,IAAA,eAAU,EAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;QAExC,8CAA8C;QAC9C,MAAM,OAAO,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,8BAA8B,CAAC,CAAC;QACvE,IAAI,IAAA,eAAU,EAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;QAExC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AArND,0CAqNC"}
|
|
@@ -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,
|
|
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
|
-
|
|
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,
|
|
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 +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":";;
|
|
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 +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":";;
|
|
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,9 @@
|
|
|
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
6
|
export { AuthControllerResult } from './auth/auth-controller';
|
|
7
7
|
export { createAuthMiddleware, AuthenticatedRequest } from './auth/auth-middleware';
|
|
8
|
+
export { AdminAuthProvider, ADMIN_ACCESS_PERMISSION } from './auth/auth-provider';
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,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.ADMIN_ACCESS_PERMISSION = exports.createAuthMiddleware = 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");
|
|
@@ -14,4 +14,6 @@ Object.defineProperty(exports, "signToken", { enumerable: true, get: function ()
|
|
|
14
14
|
Object.defineProperty(exports, "verifyToken", { enumerable: true, get: function () { return jwt_service_1.verifyToken; } });
|
|
15
15
|
var auth_middleware_1 = require("./auth/auth-middleware");
|
|
16
16
|
Object.defineProperty(exports, "createAuthMiddleware", { enumerable: true, get: function () { return auth_middleware_1.createAuthMiddleware; } });
|
|
17
|
+
var auth_provider_1 = require("./auth/auth-provider");
|
|
18
|
+
Object.defineProperty(exports, "ADMIN_ACCESS_PERMISSION", { enumerable: true, get: function () { return auth_provider_1.ADMIN_ACCESS_PERMISSION; } });
|
|
17
19
|
//# 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,
|
|
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;AAE/B,0DAAoF;AAA3E,uHAAA,oBAAoB,OAAA;AAC7B,sDAAkF;AAAtD,wHAAA,uBAAuB,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,36 @@ 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;
|
|
24
28
|
private readonly _mutableSettings;
|
|
25
29
|
constructor();
|
|
30
|
+
/** True while the well-known `admin` / `admin` credentials are in effect. */
|
|
31
|
+
usesDefaultCredentials(): boolean;
|
|
32
|
+
/** Override the admin username and password. */
|
|
26
33
|
setCredentials(username: string, password: string): void;
|
|
34
|
+
/** Set the JWT signing secret explicitly. */
|
|
27
35
|
setJwtSecret(secret: string): void;
|
|
28
36
|
get jwtSecret(): string | undefined;
|
|
37
|
+
/** Validate credentials using timing-safe comparison. */
|
|
29
38
|
validateCredentials(username: string, password: string): boolean;
|
|
39
|
+
/** Return all configuration sections (server, auth, custom) for the dashboard. */
|
|
30
40
|
getConfigSections(): ConfigSection[];
|
|
41
|
+
/** Return a shallow copy of all mutable (custom) settings. */
|
|
31
42
|
getMutableSettings(): Record<string, unknown>;
|
|
43
|
+
/** Merge the provided key-value pairs into mutable settings. */
|
|
32
44
|
updateMutableSettings(values: Record<string, unknown>): void;
|
|
33
45
|
}
|
|
34
46
|
//# 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
|
|
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,QAAQ,CAAC,gBAAgB,CAA+B;;IAQhE,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"}
|
|
@@ -11,6 +11,10 @@ function safeCompare(a, b) {
|
|
|
11
11
|
const hashB = (0, crypto_1.createHash)('sha256').update(b).digest();
|
|
12
12
|
return (0, crypto_1.timingSafeEqual)(hashA, hashB);
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Manages admin credentials and mutable runtime settings.
|
|
16
|
+
* Reads defaults from environment variables on construction.
|
|
17
|
+
*/
|
|
14
18
|
class AdminConfig {
|
|
15
19
|
_username;
|
|
16
20
|
_password;
|
|
@@ -20,26 +24,31 @@ class AdminConfig {
|
|
|
20
24
|
this._username = process.env.QCLI_ADMIN_USERNAME ?? 'admin';
|
|
21
25
|
this._password = process.env.QCLI_ADMIN_PASSWORD ?? 'admin';
|
|
22
26
|
this._jwtSecret = process.env.QCLI_ADMIN_JWT_SECRET;
|
|
23
|
-
if (this._username === 'admin' && this._password === 'admin') {
|
|
24
|
-
console.warn('[qcli-admin] WARNING: Using default admin credentials. Set QCLI_ADMIN_USERNAME and QCLI_ADMIN_PASSWORD environment variables.');
|
|
25
|
-
}
|
|
26
27
|
}
|
|
28
|
+
/** True while the well-known `admin` / `admin` credentials are in effect. */
|
|
29
|
+
usesDefaultCredentials() {
|
|
30
|
+
return this._username === 'admin' && this._password === 'admin';
|
|
31
|
+
}
|
|
32
|
+
/** Override the admin username and password. */
|
|
27
33
|
setCredentials(username, password) {
|
|
28
34
|
this._username = username;
|
|
29
35
|
this._password = password;
|
|
30
36
|
}
|
|
37
|
+
/** Set the JWT signing secret explicitly. */
|
|
31
38
|
setJwtSecret(secret) {
|
|
32
39
|
this._jwtSecret = secret;
|
|
33
40
|
}
|
|
34
41
|
get jwtSecret() {
|
|
35
42
|
return this._jwtSecret;
|
|
36
43
|
}
|
|
44
|
+
/** Validate credentials using timing-safe comparison. */
|
|
37
45
|
validateCredentials(username, password) {
|
|
38
46
|
// Evaluate both comparisons to avoid short-circuit timing leaks
|
|
39
47
|
const usernameMatch = safeCompare(username, this._username);
|
|
40
48
|
const passwordMatch = safeCompare(password, this._password);
|
|
41
49
|
return usernameMatch && passwordMatch;
|
|
42
50
|
}
|
|
51
|
+
/** Return all configuration sections (server, auth, custom) for the dashboard. */
|
|
43
52
|
getConfigSections() {
|
|
44
53
|
const customEntries = Object.entries(this._mutableSettings).map(([key, val]) => ({
|
|
45
54
|
key,
|
|
@@ -74,14 +83,17 @@ class AdminConfig {
|
|
|
74
83
|
},
|
|
75
84
|
];
|
|
76
85
|
}
|
|
86
|
+
/** Return a shallow copy of all mutable (custom) settings. */
|
|
77
87
|
getMutableSettings() {
|
|
78
88
|
return { ...this._mutableSettings };
|
|
79
89
|
}
|
|
90
|
+
/** Merge the provided key-value pairs into mutable settings. */
|
|
80
91
|
updateMutableSettings(values) {
|
|
81
92
|
Object.assign(this._mutableSettings, values);
|
|
82
93
|
}
|
|
83
94
|
}
|
|
84
95
|
exports.AdminConfig = AdminConfig;
|
|
96
|
+
/** Infer the ConfigEntry type string from a runtime value. */
|
|
85
97
|
function inferType(val) {
|
|
86
98
|
if (typeof val === 'boolean')
|
|
87
99
|
return 'boolean';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-config.js","sourceRoot":"","sources":["../../services/admin-config.ts"],"names":[],"mappings":";;;AAAA,mCAAqD;AAErD;;;GAGG;AACH,SAAS,WAAW,CAAC,CAAS,EAAE,CAAS;IACrC,MAAM,KAAK,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACtD,MAAM,KAAK,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACtD,OAAO,IAAA,wBAAe,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC;AAwBD,MAAa,WAAW;IACZ,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,UAAU,CAAqB;IACtB,gBAAgB,GAA4B,EAAE,CAAC;IAEhE;QACI,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC;QAC5D,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC;QAC5D,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"admin-config.js","sourceRoot":"","sources":["../../services/admin-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Circular buffer capturing application logs for the admin dashboard.
|
|
3
3
|
*/
|
|
4
|
+
/** A single log entry captured by the ring buffer. */
|
|
4
5
|
export interface LogEntry {
|
|
5
6
|
timestamp: string;
|
|
6
7
|
level: 'INFO' | 'WARN' | 'ERROR' | 'DEBUG';
|
|
7
8
|
message: string;
|
|
8
9
|
source: string;
|
|
9
10
|
}
|
|
11
|
+
/** Filtering and pagination parameters for querying the log buffer. */
|
|
10
12
|
export interface LogQueryParams {
|
|
11
13
|
level?: string;
|
|
12
14
|
search?: string;
|
|
13
15
|
limit?: number;
|
|
14
16
|
offset?: number;
|
|
15
17
|
}
|
|
18
|
+
/** Result of a log buffer query, including matched entries and total count. */
|
|
16
19
|
export interface LogQueryResult {
|
|
17
20
|
entries: LogEntry[];
|
|
18
21
|
total: number;
|
|
@@ -27,6 +30,7 @@ export declare class LogRingBuffer {
|
|
|
27
30
|
private _origWarn?;
|
|
28
31
|
private _origError?;
|
|
29
32
|
constructor(capacity?: number);
|
|
33
|
+
/** Set the function used to broadcast new log entries (e.g. via WebSocket). */
|
|
30
34
|
setBroadcastFn(fn: (message: Record<string, unknown>) => void): void;
|
|
31
35
|
/**
|
|
32
36
|
* Add a log entry to the buffer.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-ring-buffer.d.ts","sourceRoot":"","sources":["../../services/log-ring-buffer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,QAAQ;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,YAAY,CAAC,CAA6C;IAElE,OAAO,CAAC,QAAQ,CAAC,CAAqB;IACtC,OAAO,CAAC,SAAS,CAAC,CAAsB;IACxC,OAAO,CAAC,UAAU,CAAC,CAAuB;gBAE9B,QAAQ,SAAO;IAK3B,cAAc,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI;IAIpE;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAgB3B;;OAEG;IACH,KAAK,CAAC,MAAM,GAAE,cAAmB,GAAG,cAAc;IAqBlD;;OAEG;IACH,OAAO,CAAC,MAAM;IAWd;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAoCxB;;OAEG;IACH,cAAc,IAAI,IAAI;CAKzB"}
|
|
1
|
+
{"version":3,"file":"log-ring-buffer.d.ts","sourceRoot":"","sources":["../../services/log-ring-buffer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,sDAAsD;AACtD,MAAM,WAAW,QAAQ;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,YAAY,CAAC,CAA6C;IAElE,OAAO,CAAC,QAAQ,CAAC,CAAqB;IACtC,OAAO,CAAC,SAAS,CAAC,CAAsB;IACxC,OAAO,CAAC,UAAU,CAAC,CAAuB;gBAE9B,QAAQ,SAAO;IAK3B,+EAA+E;IAC/E,cAAc,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI;IAIpE;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAgB3B;;OAEG;IACH,KAAK,CAAC,MAAM,GAAE,cAAmB,GAAG,cAAc;IAqBlD;;OAEG;IACH,OAAO,CAAC,MAAM;IAWd;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAoCxB;;OAEG;IACH,cAAc,IAAI,IAAI;CAKzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-ring-buffer.js","sourceRoot":"","sources":["../../services/log-ring-buffer.ts"],"names":[],"mappings":";AAAA;;GAEG;;;
|
|
1
|
+
{"version":3,"file":"log-ring-buffer.js","sourceRoot":"","sources":["../../services/log-ring-buffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ICliModule, ICliCommandProcessor } from '@qodalis/cli-server-abstractions';
|
|
1
|
+
import { ICliModule, ICliCommandProcessor, ICliProcessorFilter } from '@qodalis/cli-server-abstractions';
|
|
2
2
|
/**
|
|
3
3
|
* Provides information about a tracked module for the admin dashboard.
|
|
4
4
|
*/
|
|
@@ -30,24 +30,29 @@ export interface IBuilderLike {
|
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
32
|
* Tracks registered CLI modules and allows toggling them on/off.
|
|
33
|
+
* Implements {@link ICliProcessorFilter} to block execution of processors belonging to disabled modules.
|
|
33
34
|
*/
|
|
34
|
-
export declare class ModuleRegistry {
|
|
35
|
+
export declare class ModuleRegistry implements ICliProcessorFilter {
|
|
35
36
|
private readonly _tracked;
|
|
37
|
+
private readonly _processorToModuleId;
|
|
36
38
|
private readonly _registry;
|
|
37
39
|
private readonly _builder;
|
|
38
40
|
constructor(registry: IRegistryLike, builder: IBuilderLike);
|
|
41
|
+
/**
|
|
42
|
+
* Determines whether the given command processor is allowed to execute.
|
|
43
|
+
* Returns false when the processor belongs to a disabled module.
|
|
44
|
+
*/
|
|
45
|
+
isAllowed(processor: ICliCommandProcessor): boolean;
|
|
39
46
|
/**
|
|
40
47
|
* List all tracked modules with their current status.
|
|
41
48
|
*/
|
|
42
49
|
list(): ModuleInfo[];
|
|
43
50
|
/**
|
|
44
51
|
* Toggle a module's enabled/disabled state.
|
|
45
|
-
* When disabled,
|
|
46
|
-
* When enabled, they are re-registered.
|
|
52
|
+
* When disabled, processors are blocked at execution time via the filter.
|
|
53
|
+
* When enabled, they are re-registered if needed.
|
|
47
54
|
*/
|
|
48
|
-
toggle(id: string):
|
|
49
|
-
warning?: string;
|
|
50
|
-
}) | undefined;
|
|
55
|
+
toggle(id: string): ModuleInfo | undefined;
|
|
51
56
|
private moduleId;
|
|
52
57
|
private toInfo;
|
|
53
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-registry.d.ts","sourceRoot":"","sources":["../../services/module-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"module-registry.d.ts","sourceRoot":"","sources":["../../services/module-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAEzG;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;CACxB;AAQD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACxC;AAED;;;GAGG;AACH,qBAAa,cAAe,YAAW,mBAAmB;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA2C;IAChF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;gBAE5B,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY;IAkB1D;;;OAGG;IACH,SAAS,CAAC,SAAS,EAAE,oBAAoB,GAAG,OAAO;IAUnD;;OAEG;IACH,IAAI,IAAI,UAAU,EAAE;IAepB;;;;OAIG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAgB1C,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,MAAM;CAcjB"}
|
|
@@ -3,9 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ModuleRegistry = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Tracks registered CLI modules and allows toggling them on/off.
|
|
6
|
+
* Implements {@link ICliProcessorFilter} to block execution of processors belonging to disabled modules.
|
|
6
7
|
*/
|
|
7
8
|
class ModuleRegistry {
|
|
8
9
|
_tracked = new Map();
|
|
10
|
+
_processorToModuleId = new Map();
|
|
9
11
|
_registry;
|
|
10
12
|
_builder;
|
|
11
13
|
constructor(registry, builder) {
|
|
@@ -19,7 +21,23 @@ class ModuleRegistry {
|
|
|
19
21
|
enabled: true,
|
|
20
22
|
processors: [...mod.processors],
|
|
21
23
|
});
|
|
24
|
+
for (const processor of mod.processors) {
|
|
25
|
+
this._processorToModuleId.set(processor, id);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Determines whether the given command processor is allowed to execute.
|
|
31
|
+
* Returns false when the processor belongs to a disabled module.
|
|
32
|
+
*/
|
|
33
|
+
isAllowed(processor) {
|
|
34
|
+
const moduleId = this._processorToModuleId.get(processor);
|
|
35
|
+
if (!moduleId) {
|
|
36
|
+
// Processor is not part of any tracked module — allow by default
|
|
37
|
+
return true;
|
|
22
38
|
}
|
|
39
|
+
const tracked = this._tracked.get(moduleId);
|
|
40
|
+
return tracked ? tracked.enabled : true;
|
|
23
41
|
}
|
|
24
42
|
/**
|
|
25
43
|
* List all tracked modules with their current status.
|
|
@@ -40,27 +58,21 @@ class ModuleRegistry {
|
|
|
40
58
|
}
|
|
41
59
|
/**
|
|
42
60
|
* Toggle a module's enabled/disabled state.
|
|
43
|
-
* When disabled,
|
|
44
|
-
* When enabled, they are re-registered.
|
|
61
|
+
* When disabled, processors are blocked at execution time via the filter.
|
|
62
|
+
* When enabled, they are re-registered if needed.
|
|
45
63
|
*/
|
|
46
64
|
toggle(id) {
|
|
47
65
|
const tracked = this._tracked.get(id);
|
|
48
66
|
if (!tracked)
|
|
49
67
|
return undefined;
|
|
50
68
|
tracked.enabled = !tracked.enabled;
|
|
51
|
-
let warning;
|
|
52
69
|
if (tracked.enabled) {
|
|
53
|
-
// Re-register processors
|
|
70
|
+
// Re-register processors in case they were removed
|
|
54
71
|
for (const processor of tracked.processors) {
|
|
55
72
|
this._registry.register(processor);
|
|
56
73
|
}
|
|
57
74
|
}
|
|
58
|
-
|
|
59
|
-
// We can't "unregister" from the current CliCommandRegistry directly
|
|
60
|
-
// since it only has register(). We track the state but processors remain active.
|
|
61
|
-
warning = 'Module state tracked but command unregistration is not yet supported. Processors remain active.';
|
|
62
|
-
}
|
|
63
|
-
return { ...this.toInfo(tracked), warning };
|
|
75
|
+
return this.toInfo(tracked);
|
|
64
76
|
}
|
|
65
77
|
moduleId(mod) {
|
|
66
78
|
return mod.name.toLowerCase().replace(/\s+/g, '-');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-registry.js","sourceRoot":"","sources":["../../services/module-registry.ts"],"names":[],"mappings":";;;AAwCA
|
|
1
|
+
{"version":3,"file":"module-registry.js","sourceRoot":"","sources":["../../services/module-registry.ts"],"names":[],"mappings":"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"}
|