@robthepcguy/rag-vault 1.5.3 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +86 -14
- package/dist/bin/install-skills.d.ts.map +1 -0
- package/dist/bin/install-skills.js +16 -17
- package/dist/bin/install-skills.js.map +1 -0
- package/dist/chunker/index.d.ts.map +1 -0
- package/dist/chunker/index.js +1 -5
- package/dist/chunker/index.js.map +1 -0
- package/dist/chunker/semantic-chunker.d.ts.map +1 -0
- package/dist/chunker/semantic-chunker.js +9 -13
- package/dist/chunker/semantic-chunker.js.map +1 -0
- package/dist/chunker/sentence-splitter.d.ts.map +1 -0
- package/dist/chunker/sentence-splitter.js +1 -4
- package/dist/chunker/sentence-splitter.js.map +1 -0
- package/dist/embedder/index.d.ts +10 -0
- package/dist/embedder/index.d.ts.map +1 -0
- package/dist/embedder/index.js +58 -32
- package/dist/embedder/index.js.map +1 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +10 -17
- package/dist/errors/index.js.map +1 -0
- package/dist/explainability/index.d.ts.map +1 -0
- package/dist/explainability/index.js +1 -5
- package/dist/explainability/index.js.map +1 -0
- package/dist/explainability/keywords.d.ts.map +1 -0
- package/dist/explainability/keywords.js +1 -4
- package/dist/explainability/keywords.js.map +1 -0
- package/dist/flywheel/feedback.d.ts.map +1 -0
- package/dist/flywheel/feedback.js +15 -19
- package/dist/flywheel/feedback.js.map +1 -0
- package/dist/flywheel/index.d.ts.map +1 -0
- package/dist/flywheel/index.js +1 -5
- package/dist/flywheel/index.js.map +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +86 -64
- package/dist/index.js.map +1 -0
- package/dist/parser/html-parser.d.ts.map +1 -0
- package/dist/parser/html-parser.js +7 -13
- package/dist/parser/html-parser.js.map +1 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +44 -52
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/pdf-filter.d.ts.map +1 -0
- package/dist/parser/pdf-filter.js +10 -16
- package/dist/parser/pdf-filter.js.map +1 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +1 -8
- package/dist/query/index.js.map +1 -0
- package/dist/query/parser.d.ts.map +1 -0
- package/dist/query/parser.js +5 -12
- package/dist/query/parser.js.map +1 -0
- package/dist/server/index.d.ts +6 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +106 -95
- package/dist/server/index.js.map +1 -0
- package/dist/server/raw-data-utils.d.ts.map +1 -0
- package/dist/server/raw-data-utils.js +21 -33
- package/dist/server/raw-data-utils.js.map +1 -0
- package/dist/server/remote-transport.d.ts +31 -0
- package/dist/server/remote-transport.d.ts.map +1 -0
- package/dist/server/remote-transport.js +177 -0
- package/dist/server/remote-transport.js.map +1 -0
- package/dist/server/schemas.d.ts.map +1 -0
- package/dist/server/schemas.js +35 -38
- package/dist/server/schemas.js.map +1 -0
- package/dist/utils/config-parsers.d.ts.map +1 -0
- package/dist/utils/config-parsers.js +3 -8
- package/dist/utils/config-parsers.js.map +1 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +12 -19
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/embedding-device-cli.d.ts +12 -0
- package/dist/utils/embedding-device-cli.d.ts.map +1 -0
- package/dist/utils/embedding-device-cli.js +61 -0
- package/dist/utils/embedding-device-cli.js.map +1 -0
- package/dist/utils/file-utils.d.ts.map +1 -0
- package/dist/utils/file-utils.js +12 -18
- package/dist/utils/file-utils.js.map +1 -0
- package/dist/utils/math.d.ts.map +1 -0
- package/dist/utils/math.js +2 -6
- package/dist/utils/math.js.map +1 -0
- package/dist/utils/process-handlers.d.ts.map +1 -0
- package/dist/utils/process-handlers.js +5 -10
- package/dist/utils/process-handlers.js.map +1 -0
- package/dist/vectordb/index.d.ts.map +1 -0
- package/dist/vectordb/index.js +39 -45
- package/dist/vectordb/index.js.map +1 -0
- package/dist/web/api-routes.d.ts.map +1 -0
- package/dist/web/api-routes.js +41 -47
- package/dist/web/api-routes.js.map +1 -0
- package/dist/web/config-routes.d.ts.map +1 -0
- package/dist/web/config-routes.js +30 -33
- package/dist/web/config-routes.js.map +1 -0
- package/dist/web/database-manager.d.ts.map +1 -0
- package/dist/web/database-manager.js +67 -72
- package/dist/web/database-manager.js.map +1 -0
- package/dist/web/http-server.d.ts.map +1 -0
- package/dist/web/http-server.js +45 -86
- package/dist/web/http-server.js.map +1 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +20 -58
- package/dist/web/index.js.map +1 -0
- package/dist/web/middleware/async-handler.d.ts.map +1 -0
- package/dist/web/middleware/async-handler.js +1 -4
- package/dist/web/middleware/async-handler.js.map +1 -0
- package/dist/web/middleware/auth.d.ts.map +1 -0
- package/dist/web/middleware/auth.js +3 -6
- package/dist/web/middleware/auth.js.map +1 -0
- package/dist/web/middleware/error-handler.d.ts.map +1 -0
- package/dist/web/middleware/error-handler.js +4 -8
- package/dist/web/middleware/error-handler.js.map +1 -0
- package/dist/web/middleware/index.d.ts.map +1 -0
- package/dist/web/middleware/index.js +5 -17
- package/dist/web/middleware/index.js.map +1 -0
- package/dist/web/middleware/rate-limit.d.ts.map +1 -0
- package/dist/web/middleware/rate-limit.js +3 -8
- package/dist/web/middleware/rate-limit.js.map +1 -0
- package/dist/web/middleware/request-logger.d.ts.map +1 -0
- package/dist/web/middleware/request-logger.js +2 -6
- package/dist/web/middleware/request-logger.js.map +1 -0
- package/dist/web/types.d.ts.map +1 -0
- package/dist/web/types.js +1 -2
- package/dist/web/types.js.map +1 -0
- package/package.json +31 -35
- package/web-ui/dist/assets/CollectionsPage-BDmEfv3V.js +1 -0
- package/web-ui/dist/assets/FilesPage-pG9HmpgQ.js +1 -0
- package/web-ui/dist/assets/ReaderPage-CwMN03NU.js +28 -0
- package/web-ui/dist/assets/ReaderSettingsContext-CkSjqsRh.js +1 -0
- package/web-ui/dist/assets/SearchPage-DAltjnLL.js +1 -0
- package/web-ui/dist/assets/SettingsPage-C6J5BITP.js +1 -0
- package/web-ui/dist/assets/StatusPage-powRGmW3.js +1 -0
- package/web-ui/dist/assets/UploadPage-eyfSjL4u.js +8 -0
- package/web-ui/dist/assets/format-DOJ3IkRX.js +1 -0
- package/web-ui/dist/assets/index-BpwaiuGL.css +1 -0
- package/web-ui/dist/assets/index-D068MV_o.js +6 -0
- package/web-ui/dist/assets/link-indexer.worker-DGXNsXmZ.js +1 -0
- package/web-ui/dist/assets/motion-CKwJwI3J.js +9 -0
- package/web-ui/dist/assets/query-DPt-uCb6.js +1 -0
- package/web-ui/dist/assets/vendor-C2QPsZ3S.js +10 -0
- package/web-ui/dist/index.html +7 -2
- package/web-ui/dist/assets/index-SBHxoAwi.js +0 -120
- package/web-ui/dist/assets/index-ej8i4PGl.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-routes.d.ts","sourceRoot":"","sources":["../../src/web/api-routes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAA;AAKxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAgDhD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,gBAAgB,EAAE,SAAS,GAAG,cAAc,GAAG,MAAM,CAqTpF"}
|
package/dist/web/api-routes.js
CHANGED
|
@@ -1,29 +1,23 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// REST API routes for web frontend
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const express_1 = require("express");
|
|
10
|
-
const index_js_1 = require("../errors/index.js");
|
|
11
|
-
const index_js_2 = require("../explainability/index.js");
|
|
12
|
-
const index_js_3 = require("../flywheel/index.js");
|
|
13
|
-
const index_js_4 = require("./middleware/index.js");
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { Router as createRouter } from 'express';
|
|
4
|
+
import { RAGError, ValidationError } from '../errors/index.js';
|
|
5
|
+
import { explainChunkSimilarity } from '../explainability/index.js';
|
|
6
|
+
import { getFeedbackStore } from '../flywheel/index.js';
|
|
7
|
+
import { asyncHandler } from './middleware/index.js';
|
|
14
8
|
/**
|
|
15
9
|
* Extract text from a RAG server response with proper bounds checking
|
|
16
10
|
* @throws RAGError if the response format is invalid
|
|
17
11
|
*/
|
|
18
12
|
function extractResultText(result) {
|
|
19
13
|
if (!result.content || !Array.isArray(result.content) || result.content.length === 0) {
|
|
20
|
-
throw new
|
|
14
|
+
throw new RAGError('Malformed server response: missing content array', {
|
|
21
15
|
statusCode: 500,
|
|
22
16
|
});
|
|
23
17
|
}
|
|
24
18
|
const firstContent = result.content[0];
|
|
25
19
|
if (!firstContent || typeof firstContent.text !== 'string') {
|
|
26
|
-
throw new
|
|
20
|
+
throw new RAGError('Malformed server response: missing text in content', {
|
|
27
21
|
statusCode: 500,
|
|
28
22
|
});
|
|
29
23
|
}
|
|
@@ -33,8 +27,8 @@ function extractResultText(result) {
|
|
|
33
27
|
* Create API router with all endpoints
|
|
34
28
|
* @param serverOrAccessor - RAGServer instance or accessor function
|
|
35
29
|
*/
|
|
36
|
-
function createApiRouter(serverOrAccessor) {
|
|
37
|
-
const router = (
|
|
30
|
+
export function createApiRouter(serverOrAccessor) {
|
|
31
|
+
const router = createRouter();
|
|
38
32
|
// Helper to get server (supports both direct instance and accessor function)
|
|
39
33
|
const getServer = () => {
|
|
40
34
|
if (typeof serverOrAccessor === 'function') {
|
|
@@ -43,10 +37,10 @@ function createApiRouter(serverOrAccessor) {
|
|
|
43
37
|
return serverOrAccessor;
|
|
44
38
|
};
|
|
45
39
|
// POST /api/v1/search - Search documents
|
|
46
|
-
router.post('/search',
|
|
40
|
+
router.post('/search', asyncHandler(async (req, res) => {
|
|
47
41
|
const { query, limit } = req.body;
|
|
48
42
|
if (!query || typeof query !== 'string') {
|
|
49
|
-
throw new
|
|
43
|
+
throw new ValidationError('Query is required and must be a string');
|
|
50
44
|
}
|
|
51
45
|
const queryInput = { query };
|
|
52
46
|
if (limit !== undefined) {
|
|
@@ -58,27 +52,27 @@ function createApiRouter(serverOrAccessor) {
|
|
|
58
52
|
res.json({ results: data });
|
|
59
53
|
}));
|
|
60
54
|
// POST /api/v1/files/upload - Upload files (multipart)
|
|
61
|
-
router.post('/files/upload',
|
|
55
|
+
router.post('/files/upload', asyncHandler(async (req, res) => {
|
|
62
56
|
// File is attached by multer middleware
|
|
63
57
|
const file = req.file;
|
|
64
58
|
if (!file) {
|
|
65
|
-
throw new
|
|
59
|
+
throw new ValidationError('No file uploaded');
|
|
66
60
|
}
|
|
67
61
|
// Use the uploaded file path (convert to absolute)
|
|
68
62
|
const server = getServer();
|
|
69
|
-
const absolutePath =
|
|
63
|
+
const absolutePath = path.resolve(file.path);
|
|
70
64
|
const result = await server.handleIngestFile({ filePath: absolutePath });
|
|
71
65
|
const data = JSON.parse(extractResultText(result));
|
|
72
66
|
res.json(data);
|
|
73
67
|
}));
|
|
74
68
|
// POST /api/v1/data - Ingest content strings
|
|
75
|
-
router.post('/data',
|
|
69
|
+
router.post('/data', asyncHandler(async (req, res) => {
|
|
76
70
|
const { content, metadata } = req.body;
|
|
77
71
|
if (!content || typeof content !== 'string') {
|
|
78
|
-
throw new
|
|
72
|
+
throw new ValidationError('Content is required and must be a string');
|
|
79
73
|
}
|
|
80
74
|
if (!metadata || !metadata.source || !metadata.format) {
|
|
81
|
-
throw new
|
|
75
|
+
throw new ValidationError('Metadata with source and format is required');
|
|
82
76
|
}
|
|
83
77
|
const server = getServer();
|
|
84
78
|
const result = await server.handleIngestData({ content, metadata });
|
|
@@ -86,17 +80,17 @@ function createApiRouter(serverOrAccessor) {
|
|
|
86
80
|
res.json(data);
|
|
87
81
|
}));
|
|
88
82
|
// GET /api/v1/files - List ingested files
|
|
89
|
-
router.get('/files',
|
|
83
|
+
router.get('/files', asyncHandler(async (_req, res) => {
|
|
90
84
|
const server = getServer();
|
|
91
85
|
const result = await server.handleListFiles();
|
|
92
86
|
const data = JSON.parse(extractResultText(result));
|
|
93
87
|
res.json({ files: data });
|
|
94
88
|
}));
|
|
95
89
|
// DELETE /api/v1/files - Delete file/source
|
|
96
|
-
router.delete('/files',
|
|
90
|
+
router.delete('/files', asyncHandler(async (req, res) => {
|
|
97
91
|
const { filePath, source } = req.body;
|
|
98
92
|
if (!filePath && !source) {
|
|
99
|
-
throw new
|
|
93
|
+
throw new ValidationError('Either filePath or source is required');
|
|
100
94
|
}
|
|
101
95
|
const deleteInput = {};
|
|
102
96
|
if (filePath !== undefined) {
|
|
@@ -111,7 +105,7 @@ function createApiRouter(serverOrAccessor) {
|
|
|
111
105
|
res.json(data);
|
|
112
106
|
}));
|
|
113
107
|
// GET /api/v1/status - System status
|
|
114
|
-
router.get('/status',
|
|
108
|
+
router.get('/status', asyncHandler(async (_req, res) => {
|
|
115
109
|
const server = getServer();
|
|
116
110
|
const result = await server.handleStatus();
|
|
117
111
|
const data = JSON.parse(extractResultText(result));
|
|
@@ -128,10 +122,10 @@ function createApiRouter(serverOrAccessor) {
|
|
|
128
122
|
// Reader Feature Endpoints
|
|
129
123
|
// ============================================
|
|
130
124
|
// GET /api/v1/documents/chunks - Get all chunks for a document
|
|
131
|
-
router.get('/documents/chunks',
|
|
125
|
+
router.get('/documents/chunks', asyncHandler(async (req, res) => {
|
|
132
126
|
const filePath = req.query['filePath'];
|
|
133
127
|
if (!filePath || typeof filePath !== 'string') {
|
|
134
|
-
throw new
|
|
128
|
+
throw new ValidationError('filePath query parameter is required');
|
|
135
129
|
}
|
|
136
130
|
const server = getServer();
|
|
137
131
|
const result = await server.handleGetDocumentChunks(filePath);
|
|
@@ -139,25 +133,25 @@ function createApiRouter(serverOrAccessor) {
|
|
|
139
133
|
res.json({ chunks: data });
|
|
140
134
|
}));
|
|
141
135
|
// GET /api/v1/chunks/related - Get related chunks for a specific chunk
|
|
142
|
-
router.get('/chunks/related',
|
|
136
|
+
router.get('/chunks/related', asyncHandler(async (req, res) => {
|
|
143
137
|
const filePath = req.query['filePath'];
|
|
144
138
|
const chunkIndexStr = req.query['chunkIndex'];
|
|
145
139
|
const limitStr = req.query['limit'];
|
|
146
140
|
const excludeSameDocStr = req.query['excludeSameDoc'];
|
|
147
141
|
const includeExplanationStr = req.query['includeExplanation'];
|
|
148
142
|
if (!filePath || typeof filePath !== 'string') {
|
|
149
|
-
throw new
|
|
143
|
+
throw new ValidationError('filePath query parameter is required');
|
|
150
144
|
}
|
|
151
145
|
if (!chunkIndexStr) {
|
|
152
|
-
throw new
|
|
146
|
+
throw new ValidationError('chunkIndex query parameter is required');
|
|
153
147
|
}
|
|
154
148
|
const chunkIndex = Number.parseInt(chunkIndexStr, 10);
|
|
155
149
|
if (Number.isNaN(chunkIndex) || chunkIndex < 0) {
|
|
156
|
-
throw new
|
|
150
|
+
throw new ValidationError('chunkIndex must be a non-negative integer');
|
|
157
151
|
}
|
|
158
152
|
const limit = limitStr ? Number.parseInt(limitStr, 10) : undefined;
|
|
159
153
|
if (limit !== undefined && (Number.isNaN(limit) || limit < 1 || limit > 20)) {
|
|
160
|
-
throw new
|
|
154
|
+
throw new ValidationError('limit must be between 1 and 20');
|
|
161
155
|
}
|
|
162
156
|
const excludeSameDocument = excludeSameDocStr !== 'false';
|
|
163
157
|
const includeExplanation = includeExplanationStr === 'true';
|
|
@@ -173,7 +167,7 @@ function createApiRouter(serverOrAccessor) {
|
|
|
173
167
|
const sourceText = sourceChunk?.text || '';
|
|
174
168
|
const dataWithExplanation = data.map((chunk) => ({
|
|
175
169
|
...chunk,
|
|
176
|
-
explanation:
|
|
170
|
+
explanation: explainChunkSimilarity(sourceText, chunk.text, chunk.filePath === filePath, chunk.score),
|
|
177
171
|
}));
|
|
178
172
|
res.json({ related: dataWithExplanation });
|
|
179
173
|
}
|
|
@@ -182,22 +176,22 @@ function createApiRouter(serverOrAccessor) {
|
|
|
182
176
|
}
|
|
183
177
|
}));
|
|
184
178
|
// POST /api/v1/chunks/batch-related - Batch get related chunks
|
|
185
|
-
router.post('/chunks/batch-related',
|
|
179
|
+
router.post('/chunks/batch-related', asyncHandler(async (req, res) => {
|
|
186
180
|
const { chunks, limit } = req.body;
|
|
187
181
|
if (!chunks || !Array.isArray(chunks) || chunks.length === 0) {
|
|
188
|
-
throw new
|
|
182
|
+
throw new ValidationError('chunks array is required and must not be empty');
|
|
189
183
|
}
|
|
190
184
|
// Validate each chunk
|
|
191
185
|
for (const chunk of chunks) {
|
|
192
186
|
if (!chunk.filePath || typeof chunk.filePath !== 'string') {
|
|
193
|
-
throw new
|
|
187
|
+
throw new ValidationError('Each chunk must have a filePath string');
|
|
194
188
|
}
|
|
195
189
|
if (typeof chunk.chunkIndex !== 'number' || chunk.chunkIndex < 0) {
|
|
196
|
-
throw new
|
|
190
|
+
throw new ValidationError('Each chunk must have a non-negative chunkIndex');
|
|
197
191
|
}
|
|
198
192
|
}
|
|
199
193
|
if (limit !== undefined && (typeof limit !== 'number' || limit < 1 || limit > 20)) {
|
|
200
|
-
throw new
|
|
194
|
+
throw new ValidationError('limit must be between 1 and 20');
|
|
201
195
|
}
|
|
202
196
|
const server = getServer();
|
|
203
197
|
const result = await server.handleBatchFindRelatedChunks(chunks, limit);
|
|
@@ -205,22 +199,22 @@ function createApiRouter(serverOrAccessor) {
|
|
|
205
199
|
res.json({ results: data });
|
|
206
200
|
}));
|
|
207
201
|
// POST /api/v1/feedback - Record a feedback event
|
|
208
|
-
router.post('/feedback',
|
|
202
|
+
router.post('/feedback', asyncHandler(async (req, res) => {
|
|
209
203
|
const { type, source, target } = req.body;
|
|
210
204
|
// Validate event type
|
|
211
205
|
const validTypes = ['pin', 'unpin', 'dismiss_inferred', 'click_related'];
|
|
212
206
|
if (!type || !validTypes.includes(type)) {
|
|
213
|
-
throw new
|
|
207
|
+
throw new ValidationError(`type must be one of: ${validTypes.join(', ')}`);
|
|
214
208
|
}
|
|
215
209
|
// Validate source
|
|
216
210
|
if (!source || typeof source.filePath !== 'string' || typeof source.chunkIndex !== 'number') {
|
|
217
|
-
throw new
|
|
211
|
+
throw new ValidationError('source must have filePath (string) and chunkIndex (number)');
|
|
218
212
|
}
|
|
219
213
|
// Validate target
|
|
220
214
|
if (!target || typeof target.filePath !== 'string' || typeof target.chunkIndex !== 'number') {
|
|
221
|
-
throw new
|
|
215
|
+
throw new ValidationError('target must have filePath (string) and chunkIndex (number)');
|
|
222
216
|
}
|
|
223
|
-
const feedbackStore =
|
|
217
|
+
const feedbackStore = getFeedbackStore();
|
|
224
218
|
feedbackStore.recordEvent({
|
|
225
219
|
type,
|
|
226
220
|
source,
|
|
@@ -231,7 +225,7 @@ function createApiRouter(serverOrAccessor) {
|
|
|
231
225
|
}));
|
|
232
226
|
// GET /api/v1/feedback/stats - Get feedback statistics
|
|
233
227
|
router.get('/feedback/stats', (_req, res) => {
|
|
234
|
-
const feedbackStore =
|
|
228
|
+
const feedbackStore = getFeedbackStore();
|
|
235
229
|
const stats = feedbackStore.getStats();
|
|
236
230
|
res.json(stats);
|
|
237
231
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-routes.js","sourceRoot":"","sources":["../../src/web/api-routes.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAyC,MAAM,sBAAsB,CAAA;AAE9F,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAGpD;;;GAGG;AACH,SAAS,iBAAiB,CAAC,MAA8C;IACvE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrF,MAAM,IAAI,QAAQ,CAAC,kDAAkD,EAAE;YACrE,UAAU,EAAE,GAAG;SAChB,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACtC,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3D,MAAM,IAAI,QAAQ,CAAC,oDAAoD,EAAE;YACvE,UAAU,EAAE,GAAG;SAChB,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,CAAA;AAC1B,CAAC;AA6BD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,gBAA4C;IAC1E,MAAM,MAAM,GAAG,YAAY,EAAE,CAAA;IAE7B,6EAA6E;IAC7E,MAAM,SAAS,GAAG,GAAc,EAAE;QAChC,IAAI,OAAO,gBAAgB,KAAK,UAAU,EAAE,CAAC;YAC3C,OAAO,gBAAgB,EAAE,CAAA;QAC3B,CAAC;QACD,OAAO,gBAAgB,CAAA;IACzB,CAAC,CAAA;IAED,yCAAyC;IACzC,MAAM,CAAC,IAAI,CACT,SAAS,EACT,YAAY,CAAC,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QACjD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,IAAqB,CAAA;QAElD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,IAAI,eAAe,CAAC,wCAAwC,CAAC,CAAA;QACrE,CAAC;QAED,MAAM,UAAU,GAAsC,EAAE,KAAK,EAAE,CAAA;QAC/D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,UAAU,CAAC,KAAK,GAAG,KAAK,CAAA;QAC1B,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAA;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAA;QAClD,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7B,CAAC,CAAC,CACH,CAAA;IAED,uDAAuD;IACvD,MAAM,CAAC,IAAI,CACT,eAAe,EACf,YAAY,CAAC,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QACjD,wCAAwC;QACxC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,eAAe,CAAC,kBAAkB,CAAC,CAAA;QAC/C,CAAC;QAED,mDAAmD;QACnD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAA;QACxE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAA;QAClD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC,CAAC,CACH,CAAA;IAED,6CAA6C;IAC7C,MAAM,CAAC,IAAI,CACT,OAAO,EACP,YAAY,CAAC,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QACjD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,IAAyB,CAAA;QAE3D,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,IAAI,eAAe,CAAC,0CAA0C,CAAC,CAAA;QACvE,CAAC;QAED,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACtD,MAAM,IAAI,eAAe,CAAC,6CAA6C,CAAC,CAAA;QAC1E,CAAC;QAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAA;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAA;QAClD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC,CAAC,CACH,CAAA;IAED,0CAA0C;IAC1C,MAAM,CAAC,GAAG,CACR,QAAQ,EACR,YAAY,CAAC,KAAK,EAAE,IAAa,EAAE,GAAa,EAAE,EAAE;QAClD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAA;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAA;QAClD,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3B,CAAC,CAAC,CACH,CAAA;IAED,4CAA4C;IAC5C,MAAM,CAAC,MAAM,CACX,QAAQ,EACR,YAAY,CAAC,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QACjD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAyB,CAAA;QAE1D,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,IAAI,eAAe,CAAC,uCAAuC,CAAC,CAAA;QACpE,CAAC;QAED,MAAM,WAAW,GAA2C,EAAE,CAAA;QAC9D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACjC,CAAC;QACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,WAAW,CAAC,MAAM,GAAG,MAAM,CAAA;QAC7B,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAA;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAA;QAClD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC,CAAC,CACH,CAAA;IAED,qCAAqC;IACrC,MAAM,CAAC,GAAG,CACR,SAAS,EACT,YAAY,CAAC,KAAK,EAAE,IAAa,EAAE,GAAa,EAAE,EAAE;QAClD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAA;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAA;QAClD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC,CAAC,CACH,CAAA;IAED,mEAAmE;IACnE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;QACrD,GAAG,CAAC,IAAI,CAAC;YACP,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,+CAA+C;IAC/C,2BAA2B;IAC3B,+CAA+C;IAE/C,+DAA+D;IAC/D,MAAM,CAAC,GAAG,CACR,mBAAmB,EACnB,YAAY,CAAC,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QACjD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAuB,CAAA;QAE5D,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,IAAI,eAAe,CAAC,sCAAsC,CAAC,CAAA;QACnE,CAAC;QAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAA;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAA;QAClD,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5B,CAAC,CAAC,CACH,CAAA;IAED,uEAAuE;IACvE,MAAM,CAAC,GAAG,CACR,iBAAiB,EACjB,YAAY,CAAC,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QACjD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAuB,CAAA;QAC5D,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAuB,CAAA;QACnE,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAuB,CAAA;QACzD,MAAM,iBAAiB,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAuB,CAAA;QAC3E,MAAM,qBAAqB,GAAG,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAuB,CAAA;QAEnF,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,IAAI,eAAe,CAAC,sCAAsC,CAAC,CAAA;QACnE,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,eAAe,CAAC,wCAAwC,CAAC,CAAA;QACrE,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;QACrD,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,eAAe,CAAC,2CAA2C,CAAC,CAAA;QACxE,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAClE,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC;YAC5E,MAAM,IAAI,eAAe,CAAC,gCAAgC,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,mBAAmB,GAAG,iBAAiB,KAAK,OAAO,CAAA;QACzD,MAAM,kBAAkB,GAAG,qBAAqB,KAAK,MAAM,CAAA;QAE3D,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,uBAAuB,CACjD,QAAQ,EACR,UAAU,EACV,KAAK,EACL,mBAAmB,CACpB,CAAA;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAM/C,CAAA;QAEF,yDAAyD;QACzD,IAAI,kBAAkB,EAAE,CAAC;YACvB,uCAAuC;YACvC,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAA;YACxE,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAGlE,CAAA;YACF,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,CAAA;YACzE,MAAM,UAAU,GAAG,WAAW,EAAE,IAAI,IAAI,EAAE,CAAA;YAE1C,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC/C,GAAG,KAAK;gBACR,WAAW,EAAE,sBAAsB,CACjC,UAAU,EACV,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAC3B,KAAK,CAAC,KAAK,CACZ;aACF,CAAC,CAAC,CAAA;YACH,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAA;QAC5C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC,CAAC,CACH,CAAA;IAED,+DAA+D;IAC/D,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,YAAY,CAAC,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QACjD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,IAG7B,CAAA;QAED,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,eAAe,CAAC,gDAAgD,CAAC,CAAA;QAC7E,CAAC;QAED,sBAAsB;QACtB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC1D,MAAM,IAAI,eAAe,CAAC,wCAAwC,CAAC,CAAA;YACrE,CAAC;YACD,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;gBACjE,MAAM,IAAI,eAAe,CAAC,gDAAgD,CAAC,CAAA;YAC7E,CAAC;QACH,CAAC;QAED,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC;YAClF,MAAM,IAAI,eAAe,CAAC,gCAAgC,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QACvE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAA;QAClD,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7B,CAAC,CAAC,CACH,CAAA;IAeD,kDAAkD;IAClD,MAAM,CAAC,IAAI,CACT,WAAW,EACX,YAAY,CAAC,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QACjD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAuB,CAAA;QAE5D,sBAAsB;QACtB,MAAM,UAAU,GAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,eAAe,CAAC,CAAA;QAC7F,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,eAAe,CAAC,wBAAwB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC5E,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC5F,MAAM,IAAI,eAAe,CAAC,4DAA4D,CAAC,CAAA;QACzF,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC5F,MAAM,IAAI,eAAe,CAAC,4DAA4D,CAAC,CAAA;QACzF,CAAC;QAED,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAA;QACxC,aAAa,CAAC,WAAW,CAAC;YACxB,IAAI;YACJ,MAAM;YACN,MAAM;YACN,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC,CAAA;QAEF,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7B,CAAC,CAAC,CACH,CAAA;IAED,uDAAuD;IACvD,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;QAC7D,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAA;QACxC,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAA;QACtC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-routes.d.ts","sourceRoot":"","sources":["../../src/web/config-routes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAA;AAGxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AA4D5D;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM,CA4MrE"}
|
|
@@ -1,132 +1,129 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// REST API routes for database configuration
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const index_js_1 = require("../errors/index.js");
|
|
7
|
-
const index_js_2 = require("./middleware/index.js");
|
|
2
|
+
import { Router as createRouter } from 'express';
|
|
3
|
+
import { ValidationError } from '../errors/index.js';
|
|
4
|
+
import { asyncHandler } from './middleware/index.js';
|
|
8
5
|
/**
|
|
9
6
|
* Create config API router with all endpoints
|
|
10
7
|
*/
|
|
11
|
-
function createConfigRouter(dbManager) {
|
|
12
|
-
const router = (
|
|
8
|
+
export function createConfigRouter(dbManager) {
|
|
9
|
+
const router = createRouter();
|
|
13
10
|
// GET /api/v1/config/current - Get current database configuration
|
|
14
|
-
router.get('/current',
|
|
11
|
+
router.get('/current', asyncHandler(async (_req, res) => {
|
|
15
12
|
const config = await dbManager.getCurrentConfig();
|
|
16
13
|
res.json(config);
|
|
17
14
|
}));
|
|
18
15
|
// GET /api/v1/config/databases - List recent databases
|
|
19
|
-
router.get('/databases',
|
|
16
|
+
router.get('/databases', asyncHandler(async (_req, res) => {
|
|
20
17
|
const databases = await dbManager.getRecentDatabases();
|
|
21
18
|
res.json({ databases });
|
|
22
19
|
}));
|
|
23
20
|
// POST /api/v1/config/databases/switch - Switch to different database
|
|
24
|
-
router.post('/databases/switch',
|
|
21
|
+
router.post('/databases/switch', asyncHandler(async (req, res) => {
|
|
25
22
|
const { dbPath } = req.body;
|
|
26
23
|
if (!dbPath || typeof dbPath !== 'string') {
|
|
27
|
-
throw new
|
|
24
|
+
throw new ValidationError('dbPath is required and must be a string');
|
|
28
25
|
}
|
|
29
26
|
await dbManager.switchDatabase(dbPath);
|
|
30
27
|
const config = await dbManager.getCurrentConfig();
|
|
31
28
|
res.json({ success: true, config });
|
|
32
29
|
}));
|
|
33
30
|
// POST /api/v1/config/databases/create - Create new database
|
|
34
|
-
router.post('/databases/create',
|
|
31
|
+
router.post('/databases/create', asyncHandler(async (req, res) => {
|
|
35
32
|
const { dbPath, name, modelName } = req.body;
|
|
36
33
|
if (!dbPath || typeof dbPath !== 'string') {
|
|
37
|
-
throw new
|
|
34
|
+
throw new ValidationError('dbPath is required and must be a string');
|
|
38
35
|
}
|
|
39
36
|
await dbManager.createDatabase({ dbPath, name, modelName });
|
|
40
37
|
const config = await dbManager.getCurrentConfig();
|
|
41
38
|
res.json({ success: true, config });
|
|
42
39
|
}));
|
|
43
40
|
// POST /api/v1/config/databases/scan - Scan directory for databases
|
|
44
|
-
router.post('/databases/scan',
|
|
41
|
+
router.post('/databases/scan', asyncHandler(async (req, res) => {
|
|
45
42
|
const { scanPath } = req.body;
|
|
46
43
|
if (!scanPath || typeof scanPath !== 'string') {
|
|
47
|
-
throw new
|
|
44
|
+
throw new ValidationError('scanPath is required and must be a string');
|
|
48
45
|
}
|
|
49
46
|
const databases = await dbManager.scanForDatabases(scanPath);
|
|
50
47
|
res.json({ databases });
|
|
51
48
|
}));
|
|
52
49
|
// DELETE /api/v1/config/databases - Delete a database
|
|
53
|
-
router.delete('/databases',
|
|
50
|
+
router.delete('/databases', asyncHandler(async (req, res) => {
|
|
54
51
|
const { dbPath, deleteFiles } = req.body;
|
|
55
52
|
if (!dbPath || typeof dbPath !== 'string') {
|
|
56
|
-
throw new
|
|
53
|
+
throw new ValidationError('dbPath is required and must be a string');
|
|
57
54
|
}
|
|
58
55
|
await dbManager.deleteDatabase(dbPath, deleteFiles ?? false);
|
|
59
56
|
const databases = await dbManager.getRecentDatabases();
|
|
60
57
|
res.json({ success: true, databases });
|
|
61
58
|
}));
|
|
62
59
|
// GET /api/v1/config/allowed-roots - List all effective allowed roots
|
|
63
|
-
router.get('/allowed-roots',
|
|
60
|
+
router.get('/allowed-roots', asyncHandler(async (_req, res) => {
|
|
64
61
|
const info = await dbManager.getAllowedRootsInfo();
|
|
65
62
|
res.json(info);
|
|
66
63
|
}));
|
|
67
64
|
// POST /api/v1/config/allowed-roots - Add a new allowed root
|
|
68
|
-
router.post('/allowed-roots',
|
|
65
|
+
router.post('/allowed-roots', asyncHandler(async (req, res) => {
|
|
69
66
|
const { path: rootPath } = req.body;
|
|
70
67
|
if (!rootPath || typeof rootPath !== 'string') {
|
|
71
|
-
throw new
|
|
68
|
+
throw new ValidationError('path is required and must be a string');
|
|
72
69
|
}
|
|
73
70
|
await dbManager.addUserAllowedRoot(rootPath);
|
|
74
71
|
const info = await dbManager.getAllowedRootsInfo();
|
|
75
72
|
res.json({ success: true, ...info });
|
|
76
73
|
}));
|
|
77
74
|
// DELETE /api/v1/config/allowed-roots - Remove an allowed root
|
|
78
|
-
router.delete('/allowed-roots',
|
|
75
|
+
router.delete('/allowed-roots', asyncHandler(async (req, res) => {
|
|
79
76
|
const { path: rootPath } = req.body;
|
|
80
77
|
if (!rootPath || typeof rootPath !== 'string') {
|
|
81
|
-
throw new
|
|
78
|
+
throw new ValidationError('path is required and must be a string');
|
|
82
79
|
}
|
|
83
80
|
await dbManager.removeUserAllowedRoot(rootPath);
|
|
84
81
|
const info = await dbManager.getAllowedRootsInfo();
|
|
85
82
|
res.json({ success: true, ...info });
|
|
86
83
|
}));
|
|
87
84
|
// GET /api/v1/config/browse - List directory contents for folder browser
|
|
88
|
-
router.get('/browse',
|
|
85
|
+
router.get('/browse', asyncHandler(async (req, res) => {
|
|
89
86
|
const dirPath = req.query['path'];
|
|
90
87
|
const showHidden = req.query['showHidden'] === 'true';
|
|
91
88
|
if (!dirPath || typeof dirPath !== 'string') {
|
|
92
|
-
throw new
|
|
89
|
+
throw new ValidationError('path query parameter is required');
|
|
93
90
|
}
|
|
94
91
|
const entries = await dbManager.listDirectory(dirPath, showHidden);
|
|
95
92
|
res.json({ entries, path: dirPath });
|
|
96
93
|
}));
|
|
97
94
|
// GET /api/v1/config/models - List available embedding models
|
|
98
|
-
router.get('/models',
|
|
95
|
+
router.get('/models', asyncHandler(async (_req, res) => {
|
|
99
96
|
const models = dbManager.getAvailableModels();
|
|
100
97
|
res.json({ models });
|
|
101
98
|
}));
|
|
102
99
|
// GET /api/v1/config/export - Export configuration as JSON
|
|
103
|
-
router.get('/export',
|
|
100
|
+
router.get('/export', asyncHandler(async (_req, res) => {
|
|
104
101
|
const config = await dbManager.exportConfig();
|
|
105
102
|
res.json(config);
|
|
106
103
|
}));
|
|
107
104
|
// POST /api/v1/config/import - Import configuration from JSON
|
|
108
|
-
router.post('/import',
|
|
105
|
+
router.post('/import', asyncHandler(async (req, res) => {
|
|
109
106
|
const { config } = req.body;
|
|
110
107
|
if (!config || typeof config !== 'object') {
|
|
111
|
-
throw new
|
|
108
|
+
throw new ValidationError('config is required and must be an object');
|
|
112
109
|
}
|
|
113
110
|
await dbManager.importConfig(config);
|
|
114
111
|
const info = await dbManager.getAllowedRootsInfo();
|
|
115
112
|
res.json({ success: true, ...info });
|
|
116
113
|
}));
|
|
117
114
|
// GET /api/v1/config/hybrid-weight - Get current hybrid search weight
|
|
118
|
-
router.get('/hybrid-weight',
|
|
115
|
+
router.get('/hybrid-weight', asyncHandler(async (_req, res) => {
|
|
119
116
|
const weight = dbManager.getHybridWeight();
|
|
120
117
|
res.json({ weight });
|
|
121
118
|
}));
|
|
122
119
|
// PUT /api/v1/config/hybrid-weight - Set hybrid search weight
|
|
123
|
-
router.put('/hybrid-weight',
|
|
120
|
+
router.put('/hybrid-weight', asyncHandler(async (req, res) => {
|
|
124
121
|
const { weight } = req.body;
|
|
125
122
|
if (typeof weight !== 'number') {
|
|
126
|
-
throw new
|
|
123
|
+
throw new ValidationError('weight is required and must be a number');
|
|
127
124
|
}
|
|
128
125
|
if (weight < 0 || weight > 1) {
|
|
129
|
-
throw new
|
|
126
|
+
throw new ValidationError('weight must be between 0.0 and 1.0');
|
|
130
127
|
}
|
|
131
128
|
dbManager.setHybridWeight(weight);
|
|
132
129
|
res.json({ success: true, weight });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-routes.js","sourceRoot":"","sources":["../../src/web/config-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-manager.d.ts","sourceRoot":"","sources":["../../src/web/database-manager.ts"],"names":[],"mappings":"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"}
|