@robthepcguy/rag-vault 1.5.2 → 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 +56 -89
- package/dist/web/http-server.js.map +1 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +31 -59
- 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
package/dist/web/http-server.js
CHANGED
|
@@ -1,58 +1,17 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// HTTP server for web frontend
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}) : function(o, v) {
|
|
17
|
-
o["default"] = v;
|
|
18
|
-
});
|
|
19
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
-
var ownKeys = function(o) {
|
|
21
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
-
var ar = [];
|
|
23
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
-
return ar;
|
|
25
|
-
};
|
|
26
|
-
return ownKeys(o);
|
|
27
|
-
};
|
|
28
|
-
return function (mod) {
|
|
29
|
-
if (mod && mod.__esModule) return mod;
|
|
30
|
-
var result = {};
|
|
31
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
-
__setModuleDefault(result, mod);
|
|
33
|
-
return result;
|
|
34
|
-
};
|
|
35
|
-
})();
|
|
36
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
-
};
|
|
39
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.createHttpServerWithManager = createHttpServerWithManager;
|
|
41
|
-
exports.createHttpServer = createHttpServer;
|
|
42
|
-
exports.startServer = startServer;
|
|
43
|
-
const node_crypto_1 = require("node:crypto");
|
|
44
|
-
const node_fs_1 = require("node:fs");
|
|
45
|
-
const promises_1 = require("node:fs/promises");
|
|
46
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
47
|
-
const compression_1 = __importDefault(require("compression"));
|
|
48
|
-
const cors_1 = __importDefault(require("cors"));
|
|
49
|
-
const express_1 = __importDefault(require("express"));
|
|
50
|
-
const file_type_1 = require("file-type");
|
|
51
|
-
const helmet_1 = __importDefault(require("helmet"));
|
|
52
|
-
const multer_1 = __importDefault(require("multer"));
|
|
53
|
-
const api_routes_js_1 = require("./api-routes.js");
|
|
54
|
-
const config_routes_js_1 = require("./config-routes.js");
|
|
55
|
-
const index_js_1 = require("./middleware/index.js");
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { mkdir, readFile } from 'node:fs/promises';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import compression from 'compression';
|
|
7
|
+
import cors from 'cors';
|
|
8
|
+
import express from 'express';
|
|
9
|
+
import { fileTypeFromBuffer } from 'file-type';
|
|
10
|
+
import helmet from 'helmet';
|
|
11
|
+
import multer from 'multer';
|
|
12
|
+
import { createApiRouter } from './api-routes.js';
|
|
13
|
+
import { createConfigRouter } from './config-routes.js';
|
|
14
|
+
import { apiKeyAuth, createRateLimiter, createRequestLogger, errorHandler, getRateLimitConfigFromEnv, isRequestLoggingEnabled, notFoundHandler, } from './middleware/index.js';
|
|
56
15
|
// ============================================
|
|
57
16
|
// Constants
|
|
58
17
|
// ============================================
|
|
@@ -68,11 +27,11 @@ const DEFAULT_CORS_ORIGINS = [
|
|
|
68
27
|
/** File size limit for uploads (100MB) */
|
|
69
28
|
const FILE_SIZE_LIMIT_BYTES = 100 * 1024 * 1024;
|
|
70
29
|
/** Default request timeout (30 seconds) */
|
|
71
|
-
const DEFAULT_REQUEST_TIMEOUT_MS =
|
|
30
|
+
const DEFAULT_REQUEST_TIMEOUT_MS = 30_000;
|
|
72
31
|
/** Upload/ingest timeout (5 minutes - embedding models can be slow) */
|
|
73
|
-
const UPLOAD_TIMEOUT_MS =
|
|
32
|
+
const UPLOAD_TIMEOUT_MS = 300_000;
|
|
74
33
|
/** Minimum allowed request timeout (1 second) */
|
|
75
|
-
const MIN_REQUEST_TIMEOUT_MS =
|
|
34
|
+
const MIN_REQUEST_TIMEOUT_MS = 1_000;
|
|
76
35
|
/**
|
|
77
36
|
* Get request timeout from environment variable or use default
|
|
78
37
|
* @returns Request timeout in milliseconds
|
|
@@ -103,20 +62,20 @@ const ALLOWED_MIME_TYPES = [
|
|
|
103
62
|
/**
|
|
104
63
|
* Create and configure Express app with DatabaseManager
|
|
105
64
|
*/
|
|
106
|
-
async function createHttpServerWithManager(dbManager, config) {
|
|
65
|
+
export async function createHttpServerWithManager(dbManager, config) {
|
|
107
66
|
// Create server accessor
|
|
108
67
|
const serverAccessor = () => {
|
|
109
68
|
return dbManager.getServer();
|
|
110
69
|
};
|
|
111
70
|
// Create config router to add before error handlers
|
|
112
|
-
const configRouter =
|
|
71
|
+
const configRouter = createConfigRouter(dbManager);
|
|
113
72
|
const app = await createHttpServerInternal(serverAccessor, config, configRouter);
|
|
114
73
|
return app;
|
|
115
74
|
}
|
|
116
75
|
/**
|
|
117
76
|
* Create and configure Express app (legacy - direct RAGServer)
|
|
118
77
|
*/
|
|
119
|
-
async function createHttpServer(ragServer, config) {
|
|
78
|
+
export async function createHttpServer(ragServer, config) {
|
|
120
79
|
return createHttpServerInternal(() => ragServer, config);
|
|
121
80
|
}
|
|
122
81
|
/**
|
|
@@ -128,8 +87,8 @@ async function createHttpServer(ragServer, config) {
|
|
|
128
87
|
*/
|
|
129
88
|
async function validateFileContent(filePath) {
|
|
130
89
|
try {
|
|
131
|
-
const buffer = await
|
|
132
|
-
const type = await
|
|
90
|
+
const buffer = await readFile(filePath);
|
|
91
|
+
const type = await fileTypeFromBuffer(buffer);
|
|
133
92
|
// Allow text files which may not have magic bytes
|
|
134
93
|
if (!type) {
|
|
135
94
|
// Check if it's likely a text file by looking for common text patterns
|
|
@@ -188,9 +147,9 @@ function parseCorsOrigins(env) {
|
|
|
188
147
|
.filter(Boolean);
|
|
189
148
|
}
|
|
190
149
|
async function createHttpServerInternal(serverAccessor, config, configRouter) {
|
|
191
|
-
const app = (
|
|
150
|
+
const app = express();
|
|
192
151
|
// Security headers (helmet)
|
|
193
|
-
app.use((
|
|
152
|
+
app.use(helmet({
|
|
194
153
|
contentSecurityPolicy: {
|
|
195
154
|
directives: {
|
|
196
155
|
defaultSrc: ["'self'"],
|
|
@@ -202,42 +161,42 @@ async function createHttpServerInternal(serverAccessor, config, configRouter) {
|
|
|
202
161
|
},
|
|
203
162
|
}));
|
|
204
163
|
// Response compression
|
|
205
|
-
app.use((
|
|
164
|
+
app.use(compression());
|
|
206
165
|
// Request timeout for API routes (configurable via REQUEST_TIMEOUT_MS env var)
|
|
207
166
|
// Upload/ingest routes automatically get longer timeout (5 min) for slow embedding models
|
|
208
167
|
app.use('/api', requestTimeout(getRequestTimeoutMs()));
|
|
209
168
|
// CORS configuration
|
|
210
169
|
// CORS_ORIGINS env var: comma-separated list of allowed origins, or "*" for all
|
|
211
170
|
const corsOrigins = parseCorsOrigins(process.env['CORS_ORIGINS']);
|
|
212
|
-
app.use((
|
|
171
|
+
app.use(cors({
|
|
213
172
|
origin: corsOrigins,
|
|
214
173
|
methods: ['GET', 'POST', 'DELETE', 'OPTIONS'],
|
|
215
174
|
allowedHeaders: ['Content-Type', 'Authorization', 'X-API-Key'],
|
|
216
175
|
}));
|
|
217
176
|
// JSON body parser with size limit to prevent DoS
|
|
218
177
|
const jsonLimit = process.env['JSON_BODY_LIMIT'] || DEFAULT_JSON_LIMIT;
|
|
219
|
-
app.use(
|
|
178
|
+
app.use(express.json({ limit: jsonLimit }));
|
|
220
179
|
// Request ID tracking for tracing and debugging
|
|
221
180
|
app.use((req, res, next) => {
|
|
222
|
-
const requestId = req.headers['x-request-id'] ||
|
|
181
|
+
const requestId = req.headers['x-request-id'] || randomUUID();
|
|
223
182
|
res.setHeader('X-Request-ID', requestId);
|
|
224
183
|
next();
|
|
225
184
|
});
|
|
226
185
|
// Request logging (enabled when REQUEST_LOGGING=true)
|
|
227
|
-
if (
|
|
228
|
-
app.use(
|
|
186
|
+
if (isRequestLoggingEnabled()) {
|
|
187
|
+
app.use(createRequestLogger());
|
|
229
188
|
}
|
|
230
189
|
// Rate limiting (configurable via RATE_LIMIT_* env vars)
|
|
231
|
-
const rateLimitConfig =
|
|
232
|
-
app.use('/api',
|
|
190
|
+
const rateLimitConfig = getRateLimitConfigFromEnv();
|
|
191
|
+
app.use('/api', createRateLimiter(rateLimitConfig));
|
|
233
192
|
// API Key authentication (enabled when RAG_API_KEY env var is set)
|
|
234
|
-
app.use('/api',
|
|
193
|
+
app.use('/api', apiKeyAuth);
|
|
235
194
|
// Ensure upload directory exists
|
|
236
|
-
if (!
|
|
237
|
-
await
|
|
195
|
+
if (!existsSync(config.uploadDir)) {
|
|
196
|
+
await mkdir(config.uploadDir, { recursive: true });
|
|
238
197
|
}
|
|
239
198
|
// Configure multer for file uploads
|
|
240
|
-
const storage =
|
|
199
|
+
const storage = multer.diskStorage({
|
|
241
200
|
destination: (_req, _file, cb) => {
|
|
242
201
|
cb(null, config.uploadDir);
|
|
243
202
|
},
|
|
@@ -248,7 +207,7 @@ async function createHttpServerInternal(serverAccessor, config, configRouter) {
|
|
|
248
207
|
cb(null, `${timestamp}-${safeName}`);
|
|
249
208
|
},
|
|
250
209
|
});
|
|
251
|
-
const upload = (
|
|
210
|
+
const upload = multer({
|
|
252
211
|
storage,
|
|
253
212
|
limits: {
|
|
254
213
|
fileSize: FILE_SIZE_LIMIT_BYTES,
|
|
@@ -265,7 +224,7 @@ async function createHttpServerInternal(serverAccessor, config, configRouter) {
|
|
|
265
224
|
'.jsonl',
|
|
266
225
|
'.ndjson',
|
|
267
226
|
];
|
|
268
|
-
const ext =
|
|
227
|
+
const ext = path.extname(file.originalname).toLowerCase();
|
|
269
228
|
if (ALLOWED_MIME_TYPES.includes(file.mimetype) || allowedExtensions.includes(ext)) {
|
|
270
229
|
cb(null, true);
|
|
271
230
|
}
|
|
@@ -275,7 +234,7 @@ async function createHttpServerInternal(serverAccessor, config, configRouter) {
|
|
|
275
234
|
},
|
|
276
235
|
});
|
|
277
236
|
// API routes
|
|
278
|
-
const apiRouter =
|
|
237
|
+
const apiRouter = createApiRouter(serverAccessor);
|
|
279
238
|
// Apply multer middleware to upload endpoint with magic byte validation
|
|
280
239
|
app.use('/api/v1/files/upload', upload.single('file'), async (req, res, next) => {
|
|
281
240
|
// Multer adds file to req.file
|
|
@@ -285,7 +244,7 @@ async function createHttpServerInternal(serverAccessor, config, configRouter) {
|
|
|
285
244
|
const isValid = await validateFileContent(file.path);
|
|
286
245
|
if (!isValid) {
|
|
287
246
|
// Delete the uploaded file
|
|
288
|
-
const { unlink } = await
|
|
247
|
+
const { unlink } = await import('node:fs/promises');
|
|
289
248
|
try {
|
|
290
249
|
await unlink(file.path);
|
|
291
250
|
}
|
|
@@ -308,30 +267,38 @@ async function createHttpServerInternal(serverAccessor, config, configRouter) {
|
|
|
308
267
|
app.use('/api/v1/config', configRouter);
|
|
309
268
|
}
|
|
310
269
|
// Serve static files in production
|
|
311
|
-
if (config.staticDir &&
|
|
312
|
-
app.use(
|
|
270
|
+
if (config.staticDir && existsSync(config.staticDir)) {
|
|
271
|
+
app.use(express.static(config.staticDir));
|
|
313
272
|
// SPA fallback - serve index.html for all non-API routes
|
|
314
273
|
app.get('*', (req, res) => {
|
|
315
274
|
if (!req.path.startsWith('/api/')) {
|
|
316
|
-
res.sendFile(
|
|
275
|
+
res.sendFile(path.join(config.staticDir, 'index.html'));
|
|
317
276
|
}
|
|
318
277
|
});
|
|
319
278
|
}
|
|
320
279
|
// 404 handler for API routes
|
|
321
|
-
app.use('/api/*',
|
|
280
|
+
app.use('/api/*', notFoundHandler);
|
|
322
281
|
// Error handling middleware
|
|
323
|
-
app.use(
|
|
282
|
+
app.use(errorHandler);
|
|
324
283
|
return app;
|
|
325
284
|
}
|
|
326
285
|
/**
|
|
327
286
|
* Start HTTP server
|
|
328
287
|
*/
|
|
329
|
-
function startServer(app, port) {
|
|
330
|
-
return new Promise((resolve) => {
|
|
331
|
-
app.listen(port
|
|
288
|
+
export function startServer(app, port) {
|
|
289
|
+
return new Promise((resolve, reject) => {
|
|
290
|
+
const server = app.listen(port);
|
|
291
|
+
const onError = (error) => {
|
|
292
|
+
server.off('listening', onListening);
|
|
293
|
+
reject(error);
|
|
294
|
+
};
|
|
295
|
+
const onListening = () => {
|
|
296
|
+
server.off('error', onError);
|
|
332
297
|
console.log(`Web server running at http://localhost:${port}`);
|
|
333
298
|
resolve();
|
|
334
|
-
}
|
|
299
|
+
};
|
|
300
|
+
server.once('error', onError);
|
|
301
|
+
server.once('listening', onListening);
|
|
335
302
|
});
|
|
336
303
|
}
|
|
337
304
|
//# sourceMappingURL=http-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../../src/web/http-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":""}
|
package/dist/web/index.js
CHANGED
|
@@ -1,92 +1,60 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
2
|
// Entry point for RAG Web Server
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
Object.defineProperty(o, k2, desc);
|
|
11
|
-
}) : (function(o, m, k, k2) {
|
|
12
|
-
if (k2 === undefined) k2 = k;
|
|
13
|
-
o[k2] = m[k];
|
|
14
|
-
}));
|
|
15
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
16
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
17
|
-
}) : function(o, v) {
|
|
18
|
-
o["default"] = v;
|
|
19
|
-
});
|
|
20
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
21
|
-
var ownKeys = function(o) {
|
|
22
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
23
|
-
var ar = [];
|
|
24
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
25
|
-
return ar;
|
|
26
|
-
};
|
|
27
|
-
return ownKeys(o);
|
|
28
|
-
};
|
|
29
|
-
return function (mod) {
|
|
30
|
-
if (mod && mod.__esModule) return mod;
|
|
31
|
-
var result = {};
|
|
32
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
33
|
-
__setModuleDefault(result, mod);
|
|
34
|
-
return result;
|
|
35
|
-
};
|
|
36
|
-
})();
|
|
37
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
38
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
39
|
-
};
|
|
40
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
-
const node_fs_1 = require("node:fs");
|
|
42
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
43
|
-
const config_js_1 = require("../utils/config.js");
|
|
44
|
-
const process_handlers_js_1 = require("../utils/process-handlers.js");
|
|
45
|
-
const index_js_1 = require("./middleware/index.js");
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { buildRAGConfig, validateAllowedScanRoots, validateRAGConfig } from '../utils/config.js';
|
|
6
|
+
import { onShutdown, setupGracefulShutdown, setupProcessHandlers, } from '../utils/process-handlers.js';
|
|
7
|
+
import { stopRateLimiterCleanup } from './middleware/index.js';
|
|
46
8
|
// Setup global error handlers
|
|
47
|
-
|
|
9
|
+
setupProcessHandlers();
|
|
48
10
|
// Setup graceful shutdown
|
|
49
|
-
|
|
11
|
+
setupGracefulShutdown();
|
|
50
12
|
// Register rate limiter cleanup for graceful shutdown
|
|
51
|
-
|
|
13
|
+
onShutdown(() => {
|
|
52
14
|
console.error('Cleaning up rate limiter...');
|
|
53
|
-
|
|
15
|
+
stopRateLimiterCleanup();
|
|
54
16
|
});
|
|
17
|
+
function isErrnoException(error) {
|
|
18
|
+
return (typeof error === 'object' &&
|
|
19
|
+
error !== null &&
|
|
20
|
+
'code' in error &&
|
|
21
|
+
typeof error.code === 'string');
|
|
22
|
+
}
|
|
55
23
|
/**
|
|
56
24
|
* Entry point - Start RAG Web Server
|
|
57
25
|
*/
|
|
58
26
|
async function main() {
|
|
27
|
+
const port = Number.parseInt(process.env['WEB_PORT'] || '3000', 10);
|
|
59
28
|
try {
|
|
60
29
|
// Dynamic imports to avoid loading heavy modules at CLI parse time
|
|
61
|
-
const { RAGServer } = await
|
|
62
|
-
const { createHttpServerWithManager, startServer } = await
|
|
63
|
-
const { DatabaseManager } = await
|
|
30
|
+
const { RAGServer } = await import('../server/index.js');
|
|
31
|
+
const { createHttpServerWithManager, startServer } = await import('./http-server.js');
|
|
32
|
+
const { DatabaseManager } = await import('./database-manager.js');
|
|
64
33
|
// Configuration from environment
|
|
65
|
-
const port = Number.parseInt(process.env['WEB_PORT'] || '3000', 10);
|
|
66
34
|
const uploadDir = process.env['UPLOAD_DIR'] || './uploads/';
|
|
67
35
|
// Determine static files directory
|
|
68
36
|
// Check multiple locations: cwd for dev, package dir for npx/global install
|
|
69
37
|
let staticDir;
|
|
70
38
|
const cwd = process.cwd();
|
|
71
39
|
// __dirname points to dist/web/ when compiled, so go up to package root
|
|
72
|
-
const packageDir =
|
|
40
|
+
const packageDir = path.resolve(__dirname, '../..');
|
|
73
41
|
const possiblePaths = [
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
42
|
+
path.resolve(cwd, 'web-ui/dist'), // Dev: running from repo root
|
|
43
|
+
path.resolve(packageDir, 'web-ui/dist'), // npx/global: relative to package
|
|
44
|
+
path.resolve(cwd, 'dist/web-ui'), // Legacy prod path
|
|
77
45
|
];
|
|
78
46
|
// Find first existing path
|
|
79
47
|
for (const p of possiblePaths) {
|
|
80
|
-
if (
|
|
48
|
+
if (existsSync(p)) {
|
|
81
49
|
staticDir = p;
|
|
82
50
|
break;
|
|
83
51
|
}
|
|
84
52
|
}
|
|
85
53
|
// Build and validate RAG config from environment
|
|
86
|
-
const config =
|
|
87
|
-
|
|
54
|
+
const config = buildRAGConfig();
|
|
55
|
+
validateRAGConfig(config);
|
|
88
56
|
// Validate allowed scan roots (logs warnings for non-existent paths)
|
|
89
|
-
|
|
57
|
+
validateAllowedScanRoots();
|
|
90
58
|
console.log('Starting RAG Web Server...');
|
|
91
59
|
console.log('Configuration:', { ...config, port, uploadDir, staticDir });
|
|
92
60
|
// Create DatabaseManager with server factory
|
|
@@ -113,6 +81,10 @@ async function main() {
|
|
|
113
81
|
}
|
|
114
82
|
}
|
|
115
83
|
catch (error) {
|
|
84
|
+
if (isErrnoException(error) && error.code === 'EADDRINUSE') {
|
|
85
|
+
console.error(`Port ${port} is already in use. Close the other RAG Vault web server or run with a different port (example: WEB_PORT=3001 npx @robthepcguy/rag-vault web).`);
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
116
88
|
console.error('Failed to start RAG Web Server:', error);
|
|
117
89
|
process.exit(1);
|
|
118
90
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-handler.d.ts","sourceRoot":"","sources":["../../../src/web/middleware/async-handler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAE9D;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAE7F;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,CAQhE"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Express async handler wrapper
|
|
3
2
|
// Eliminates try/catch boilerplate in route handlers
|
|
4
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
-
exports.asyncHandler = asyncHandler;
|
|
6
3
|
/**
|
|
7
4
|
* Wraps an async route handler to automatically catch errors
|
|
8
5
|
* and pass them to Express error middleware
|
|
@@ -13,7 +10,7 @@ exports.asyncHandler = asyncHandler;
|
|
|
13
10
|
* res.json({ results })
|
|
14
11
|
* }))
|
|
15
12
|
*/
|
|
16
|
-
function asyncHandler(handler) {
|
|
13
|
+
export function asyncHandler(handler) {
|
|
17
14
|
return async (req, res, next) => {
|
|
18
15
|
try {
|
|
19
16
|
await handler(req, res, next);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-handler.js","sourceRoot":"","sources":["../../../src/web/middleware/async-handler.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,qDAAqD;AASrD;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,OAAqB;IAChD,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAiB,EAAE;QAC9E,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,CAAA;QACb,CAAC;IACH,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/web/middleware/auth.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAE9D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAoChF"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// API Key authentication middleware
|
|
3
|
-
|
|
4
|
-
exports.apiKeyAuth = apiKeyAuth;
|
|
5
|
-
const node_crypto_1 = require("node:crypto");
|
|
2
|
+
import { timingSafeEqual } from 'node:crypto';
|
|
6
3
|
/**
|
|
7
4
|
* API Key authentication middleware
|
|
8
5
|
*
|
|
@@ -22,7 +19,7 @@ const node_crypto_1 = require("node:crypto");
|
|
|
22
19
|
* headers: { 'Authorization': 'Bearer your-secret-key' }
|
|
23
20
|
* })
|
|
24
21
|
*/
|
|
25
|
-
function apiKeyAuth(req, res, next) {
|
|
22
|
+
export function apiKeyAuth(req, res, next) {
|
|
26
23
|
const configuredKey = process.env['RAG_API_KEY'];
|
|
27
24
|
// If no API key configured, skip authentication (local-only mode)
|
|
28
25
|
if (!configuredKey) {
|
|
@@ -76,6 +73,6 @@ function safeCompare(a, b) {
|
|
|
76
73
|
bufB.copy(padB);
|
|
77
74
|
// Use Node.js timing-safe comparison and verify original lengths match
|
|
78
75
|
// lengthsMatch is already computed, so no timing leak from && evaluation
|
|
79
|
-
return
|
|
76
|
+
return timingSafeEqual(padA, padB) && lengthsMatch;
|
|
80
77
|
}
|
|
81
78
|
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/web/middleware/auth.ts"],"names":[],"mappings":"AAAA,oCAAoC;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAG7C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,UAAU,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IACxE,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IAEhD,kEAAkE;IAClE,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,IAAI,EAAE,CAAA;QACN,OAAM;IACR,CAAC;IAED,+BAA+B;IAC/B,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IAC/C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAExC,IAAI,WAA+B,CAAA;IAEnC,IAAI,UAAU,EAAE,CAAC;QACf,oDAAoD;QACpD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAC7D,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACf,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QACvC,WAAW,GAAG,OAAO,CAAA;IACvB,CAAC;IAED,gDAAgD;IAChD,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,cAAc;YACrB,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,+DAA+D;SACzE,CAAC,CAAA;QACF,OAAM;IACR,CAAC;IAED,IAAI,EAAE,CAAA;AACR,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,WAAW,CAAC,CAAS,EAAE,CAAS;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAE3B,mEAAmE;IACnE,2DAA2D;IAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAA;IAEhD,yEAAyE;IACzE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACjD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACjC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEf,uEAAuE;IACvE,yEAAyE;IACzE,OAAO,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,YAAY,CAAA;AACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../../src/web/middleware/error-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAY9D;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CA2BhG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,CAElE"}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Express error handling middleware
|
|
3
|
-
|
|
4
|
-
exports.errorHandler = errorHandler;
|
|
5
|
-
exports.notFoundHandler = notFoundHandler;
|
|
6
|
-
const index_js_1 = require("../../errors/index.js");
|
|
2
|
+
import { RAGError } from '../../errors/index.js';
|
|
7
3
|
/**
|
|
8
4
|
* Express error handling middleware
|
|
9
5
|
*
|
|
@@ -17,7 +13,7 @@ const index_js_1 = require("../../errors/index.js");
|
|
|
17
13
|
* // Add as the last middleware
|
|
18
14
|
* app.use(errorHandler)
|
|
19
15
|
*/
|
|
20
|
-
function errorHandler(err, _req, res, _next) {
|
|
16
|
+
export function errorHandler(err, _req, res, _next) {
|
|
21
17
|
// Log the error
|
|
22
18
|
console.error('Request error:', err);
|
|
23
19
|
// Build error response
|
|
@@ -25,7 +21,7 @@ function errorHandler(err, _req, res, _next) {
|
|
|
25
21
|
error: err.message,
|
|
26
22
|
};
|
|
27
23
|
let statusCode = 500;
|
|
28
|
-
if (err instanceof
|
|
24
|
+
if (err instanceof RAGError) {
|
|
29
25
|
statusCode = err.statusCode;
|
|
30
26
|
response.code = err.code;
|
|
31
27
|
// Only include details in non-production
|
|
@@ -44,7 +40,7 @@ function errorHandler(err, _req, res, _next) {
|
|
|
44
40
|
/**
|
|
45
41
|
* 404 Not Found handler
|
|
46
42
|
*/
|
|
47
|
-
function notFoundHandler(_req, res) {
|
|
43
|
+
export function notFoundHandler(_req, res) {
|
|
48
44
|
res.status(404).json({ error: 'Not found' });
|
|
49
45
|
}
|
|
50
46
|
//# sourceMappingURL=error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../../src/web/middleware/error-handler.ts"],"names":[],"mappings":"AAAA,oCAAoC;AAGpC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAWhD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,GAAU,EAAE,IAAa,EAAE,GAAa,EAAE,KAAmB;IACxF,gBAAgB;IAChB,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAA;IAEpC,uBAAuB;IACvB,MAAM,QAAQ,GAAkB;QAC9B,KAAK,EAAE,GAAG,CAAC,OAAO;KACnB,CAAA;IAED,IAAI,UAAU,GAAG,GAAG,CAAA;IAEpB,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;QAC5B,UAAU,GAAG,GAAG,CAAC,UAAU,CAAA;QAC3B,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;QAExB,yCAAyC;QACzC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,YAAY,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAC5D,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAA;QAChC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,wDAAwD;QACxD,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,YAAY,EAAE,CAAC;YAC7C,QAAQ,CAAC,KAAK,GAAG,uBAAuB,CAAA;QAC1C,CAAC;IACH,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAa,EAAE,GAAa;IAC1D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;AAC9C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/web/middleware/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAClE,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -1,19 +1,7 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Web middleware exports
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
Object.defineProperty(exports, "asyncHandler", { enumerable: true, get: function () { return async_handler_js_1.asyncHandler; } });
|
|
9
|
-
var error_handler_js_1 = require("./error-handler.js");
|
|
10
|
-
Object.defineProperty(exports, "errorHandler", { enumerable: true, get: function () { return error_handler_js_1.errorHandler; } });
|
|
11
|
-
Object.defineProperty(exports, "notFoundHandler", { enumerable: true, get: function () { return error_handler_js_1.notFoundHandler; } });
|
|
12
|
-
var rate_limit_js_1 = require("./rate-limit.js");
|
|
13
|
-
Object.defineProperty(exports, "createRateLimiter", { enumerable: true, get: function () { return rate_limit_js_1.createRateLimiter; } });
|
|
14
|
-
Object.defineProperty(exports, "getRateLimitConfigFromEnv", { enumerable: true, get: function () { return rate_limit_js_1.getRateLimitConfigFromEnv; } });
|
|
15
|
-
Object.defineProperty(exports, "stopRateLimiterCleanup", { enumerable: true, get: function () { return rate_limit_js_1.stopRateLimiterCleanup; } });
|
|
16
|
-
var request_logger_js_1 = require("./request-logger.js");
|
|
17
|
-
Object.defineProperty(exports, "createRequestLogger", { enumerable: true, get: function () { return request_logger_js_1.createRequestLogger; } });
|
|
18
|
-
Object.defineProperty(exports, "isRequestLoggingEnabled", { enumerable: true, get: function () { return request_logger_js_1.isRequestLoggingEnabled; } });
|
|
2
|
+
export { apiKeyAuth } from './auth.js';
|
|
3
|
+
export { asyncHandler } from './async-handler.js';
|
|
4
|
+
export { errorHandler, notFoundHandler } from './error-handler.js';
|
|
5
|
+
export { createRateLimiter, getRateLimitConfigFromEnv, stopRateLimiterCleanup, } from './rate-limit.js';
|
|
6
|
+
export { createRequestLogger, isRequestLoggingEnabled } from './request-logger.js';
|
|
19
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/web/middleware/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AAEzB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAClE,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../../src/web/middleware/rate-limit.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAQ9D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAmBD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,IAuC7D,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAkC/D;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,IAAI,eAAe,CAY3D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAM7C"}
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Simple in-memory rate limiting middleware
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.createRateLimiter = createRateLimiter;
|
|
5
|
-
exports.getRateLimitConfigFromEnv = getRateLimitConfigFromEnv;
|
|
6
|
-
exports.stopRateLimiterCleanup = stopRateLimiterCleanup;
|
|
7
2
|
// Track active cleanup interval for graceful shutdown
|
|
8
3
|
let cleanupInterval = null;
|
|
9
4
|
// Track if rate limiter has been created (for warning)
|
|
@@ -25,7 +20,7 @@ const DEFAULT_CONFIG = {
|
|
|
25
20
|
* @example
|
|
26
21
|
* app.use('/api', createRateLimiter({ windowMs: 60000, maxRequests: 100 }))
|
|
27
22
|
*/
|
|
28
|
-
function createRateLimiter(config = {}) {
|
|
23
|
+
export function createRateLimiter(config = {}) {
|
|
29
24
|
const { windowMs, maxRequests, message } = { ...DEFAULT_CONFIG, ...config };
|
|
30
25
|
// Warn if rate limiter is being recreated (potential memory leak)
|
|
31
26
|
if (rateLimiterCreated) {
|
|
@@ -95,7 +90,7 @@ function createRateLimiter(config = {}) {
|
|
|
95
90
|
* - RATE_LIMIT_WINDOW_MS: Time window in milliseconds (default: 60000)
|
|
96
91
|
* - RATE_LIMIT_MAX_REQUESTS: Max requests per window (default: 100)
|
|
97
92
|
*/
|
|
98
|
-
function getRateLimitConfigFromEnv() {
|
|
93
|
+
export function getRateLimitConfigFromEnv() {
|
|
99
94
|
const windowMs = Number.parseInt(process.env['RATE_LIMIT_WINDOW_MS'] || '60000', 10);
|
|
100
95
|
const maxRequests = Number.parseInt(process.env['RATE_LIMIT_MAX_REQUESTS'] || '100', 10);
|
|
101
96
|
const config = {
|
|
@@ -113,7 +108,7 @@ function getRateLimitConfigFromEnv() {
|
|
|
113
108
|
* Call this during graceful shutdown to prevent memory leaks.
|
|
114
109
|
* Safe to call multiple times or when no interval is active.
|
|
115
110
|
*/
|
|
116
|
-
function stopRateLimiterCleanup() {
|
|
111
|
+
export function stopRateLimiterCleanup() {
|
|
117
112
|
if (cleanupInterval) {
|
|
118
113
|
clearInterval(cleanupInterval);
|
|
119
114
|
cleanupInterval = null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../../src/web/middleware/rate-limit.ts"],"names":[],"mappings":"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"}
|