@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.
Files changed (141) hide show
  1. package/README.md +86 -14
  2. package/dist/bin/install-skills.d.ts.map +1 -0
  3. package/dist/bin/install-skills.js +16 -17
  4. package/dist/bin/install-skills.js.map +1 -0
  5. package/dist/chunker/index.d.ts.map +1 -0
  6. package/dist/chunker/index.js +1 -5
  7. package/dist/chunker/index.js.map +1 -0
  8. package/dist/chunker/semantic-chunker.d.ts.map +1 -0
  9. package/dist/chunker/semantic-chunker.js +9 -13
  10. package/dist/chunker/semantic-chunker.js.map +1 -0
  11. package/dist/chunker/sentence-splitter.d.ts.map +1 -0
  12. package/dist/chunker/sentence-splitter.js +1 -4
  13. package/dist/chunker/sentence-splitter.js.map +1 -0
  14. package/dist/embedder/index.d.ts +10 -0
  15. package/dist/embedder/index.d.ts.map +1 -0
  16. package/dist/embedder/index.js +58 -32
  17. package/dist/embedder/index.js.map +1 -0
  18. package/dist/errors/index.d.ts.map +1 -0
  19. package/dist/errors/index.js +10 -17
  20. package/dist/errors/index.js.map +1 -0
  21. package/dist/explainability/index.d.ts.map +1 -0
  22. package/dist/explainability/index.js +1 -5
  23. package/dist/explainability/index.js.map +1 -0
  24. package/dist/explainability/keywords.d.ts.map +1 -0
  25. package/dist/explainability/keywords.js +1 -4
  26. package/dist/explainability/keywords.js.map +1 -0
  27. package/dist/flywheel/feedback.d.ts.map +1 -0
  28. package/dist/flywheel/feedback.js +15 -19
  29. package/dist/flywheel/feedback.js.map +1 -0
  30. package/dist/flywheel/index.d.ts.map +1 -0
  31. package/dist/flywheel/index.js +1 -5
  32. package/dist/flywheel/index.js.map +1 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +86 -64
  35. package/dist/index.js.map +1 -0
  36. package/dist/parser/html-parser.d.ts.map +1 -0
  37. package/dist/parser/html-parser.js +7 -13
  38. package/dist/parser/html-parser.js.map +1 -0
  39. package/dist/parser/index.d.ts.map +1 -0
  40. package/dist/parser/index.js +44 -52
  41. package/dist/parser/index.js.map +1 -0
  42. package/dist/parser/pdf-filter.d.ts.map +1 -0
  43. package/dist/parser/pdf-filter.js +10 -16
  44. package/dist/parser/pdf-filter.js.map +1 -0
  45. package/dist/query/index.d.ts.map +1 -0
  46. package/dist/query/index.js +1 -8
  47. package/dist/query/index.js.map +1 -0
  48. package/dist/query/parser.d.ts.map +1 -0
  49. package/dist/query/parser.js +5 -12
  50. package/dist/query/parser.js.map +1 -0
  51. package/dist/server/index.d.ts +6 -0
  52. package/dist/server/index.d.ts.map +1 -0
  53. package/dist/server/index.js +106 -95
  54. package/dist/server/index.js.map +1 -0
  55. package/dist/server/raw-data-utils.d.ts.map +1 -0
  56. package/dist/server/raw-data-utils.js +21 -33
  57. package/dist/server/raw-data-utils.js.map +1 -0
  58. package/dist/server/remote-transport.d.ts +31 -0
  59. package/dist/server/remote-transport.d.ts.map +1 -0
  60. package/dist/server/remote-transport.js +177 -0
  61. package/dist/server/remote-transport.js.map +1 -0
  62. package/dist/server/schemas.d.ts.map +1 -0
  63. package/dist/server/schemas.js +35 -38
  64. package/dist/server/schemas.js.map +1 -0
  65. package/dist/utils/config-parsers.d.ts.map +1 -0
  66. package/dist/utils/config-parsers.js +3 -8
  67. package/dist/utils/config-parsers.js.map +1 -0
  68. package/dist/utils/config.d.ts.map +1 -0
  69. package/dist/utils/config.js +12 -19
  70. package/dist/utils/config.js.map +1 -0
  71. package/dist/utils/embedding-device-cli.d.ts +12 -0
  72. package/dist/utils/embedding-device-cli.d.ts.map +1 -0
  73. package/dist/utils/embedding-device-cli.js +61 -0
  74. package/dist/utils/embedding-device-cli.js.map +1 -0
  75. package/dist/utils/file-utils.d.ts.map +1 -0
  76. package/dist/utils/file-utils.js +12 -18
  77. package/dist/utils/file-utils.js.map +1 -0
  78. package/dist/utils/math.d.ts.map +1 -0
  79. package/dist/utils/math.js +2 -6
  80. package/dist/utils/math.js.map +1 -0
  81. package/dist/utils/process-handlers.d.ts.map +1 -0
  82. package/dist/utils/process-handlers.js +5 -10
  83. package/dist/utils/process-handlers.js.map +1 -0
  84. package/dist/vectordb/index.d.ts.map +1 -0
  85. package/dist/vectordb/index.js +39 -45
  86. package/dist/vectordb/index.js.map +1 -0
  87. package/dist/web/api-routes.d.ts.map +1 -0
  88. package/dist/web/api-routes.js +41 -47
  89. package/dist/web/api-routes.js.map +1 -0
  90. package/dist/web/config-routes.d.ts.map +1 -0
  91. package/dist/web/config-routes.js +30 -33
  92. package/dist/web/config-routes.js.map +1 -0
  93. package/dist/web/database-manager.d.ts.map +1 -0
  94. package/dist/web/database-manager.js +67 -72
  95. package/dist/web/database-manager.js.map +1 -0
  96. package/dist/web/http-server.d.ts.map +1 -0
  97. package/dist/web/http-server.js +56 -89
  98. package/dist/web/http-server.js.map +1 -0
  99. package/dist/web/index.d.ts.map +1 -0
  100. package/dist/web/index.js +31 -59
  101. package/dist/web/index.js.map +1 -0
  102. package/dist/web/middleware/async-handler.d.ts.map +1 -0
  103. package/dist/web/middleware/async-handler.js +1 -4
  104. package/dist/web/middleware/async-handler.js.map +1 -0
  105. package/dist/web/middleware/auth.d.ts.map +1 -0
  106. package/dist/web/middleware/auth.js +3 -6
  107. package/dist/web/middleware/auth.js.map +1 -0
  108. package/dist/web/middleware/error-handler.d.ts.map +1 -0
  109. package/dist/web/middleware/error-handler.js +4 -8
  110. package/dist/web/middleware/error-handler.js.map +1 -0
  111. package/dist/web/middleware/index.d.ts.map +1 -0
  112. package/dist/web/middleware/index.js +5 -17
  113. package/dist/web/middleware/index.js.map +1 -0
  114. package/dist/web/middleware/rate-limit.d.ts.map +1 -0
  115. package/dist/web/middleware/rate-limit.js +3 -8
  116. package/dist/web/middleware/rate-limit.js.map +1 -0
  117. package/dist/web/middleware/request-logger.d.ts.map +1 -0
  118. package/dist/web/middleware/request-logger.js +2 -6
  119. package/dist/web/middleware/request-logger.js.map +1 -0
  120. package/dist/web/types.d.ts.map +1 -0
  121. package/dist/web/types.js +1 -2
  122. package/dist/web/types.js.map +1 -0
  123. package/package.json +31 -35
  124. package/web-ui/dist/assets/CollectionsPage-BDmEfv3V.js +1 -0
  125. package/web-ui/dist/assets/FilesPage-pG9HmpgQ.js +1 -0
  126. package/web-ui/dist/assets/ReaderPage-CwMN03NU.js +28 -0
  127. package/web-ui/dist/assets/ReaderSettingsContext-CkSjqsRh.js +1 -0
  128. package/web-ui/dist/assets/SearchPage-DAltjnLL.js +1 -0
  129. package/web-ui/dist/assets/SettingsPage-C6J5BITP.js +1 -0
  130. package/web-ui/dist/assets/StatusPage-powRGmW3.js +1 -0
  131. package/web-ui/dist/assets/UploadPage-eyfSjL4u.js +8 -0
  132. package/web-ui/dist/assets/format-DOJ3IkRX.js +1 -0
  133. package/web-ui/dist/assets/index-BpwaiuGL.css +1 -0
  134. package/web-ui/dist/assets/index-D068MV_o.js +6 -0
  135. package/web-ui/dist/assets/link-indexer.worker-DGXNsXmZ.js +1 -0
  136. package/web-ui/dist/assets/motion-CKwJwI3J.js +9 -0
  137. package/web-ui/dist/assets/query-DPt-uCb6.js +1 -0
  138. package/web-ui/dist/assets/vendor-C2QPsZ3S.js +10 -0
  139. package/web-ui/dist/index.html +7 -2
  140. package/web-ui/dist/assets/index-SBHxoAwi.js +0 -120
  141. package/web-ui/dist/assets/index-ej8i4PGl.css +0 -1
@@ -1,58 +1,17 @@
1
- "use strict";
2
1
  // HTTP server for web frontend
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
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 = 30000;
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 = 300000;
32
+ const UPLOAD_TIMEOUT_MS = 300_000;
74
33
  /** Minimum allowed request timeout (1 second) */
75
- const MIN_REQUEST_TIMEOUT_MS = 1000;
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 = (0, config_routes_js_1.createConfigRouter)(dbManager);
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 (0, promises_1.readFile)(filePath);
132
- const type = await (0, file_type_1.fileTypeFromBuffer)(buffer);
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 = (0, express_1.default)();
150
+ const app = express();
192
151
  // Security headers (helmet)
193
- app.use((0, helmet_1.default)({
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((0, compression_1.default)());
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((0, cors_1.default)({
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(express_1.default.json({ limit: jsonLimit }));
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'] || (0, node_crypto_1.randomUUID)();
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 ((0, index_js_1.isRequestLoggingEnabled)()) {
228
- app.use((0, index_js_1.createRequestLogger)());
186
+ if (isRequestLoggingEnabled()) {
187
+ app.use(createRequestLogger());
229
188
  }
230
189
  // Rate limiting (configurable via RATE_LIMIT_* env vars)
231
- const rateLimitConfig = (0, index_js_1.getRateLimitConfigFromEnv)();
232
- app.use('/api', (0, index_js_1.createRateLimiter)(rateLimitConfig));
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', index_js_1.apiKeyAuth);
193
+ app.use('/api', apiKeyAuth);
235
194
  // Ensure upload directory exists
236
- if (!(0, node_fs_1.existsSync)(config.uploadDir)) {
237
- await (0, promises_1.mkdir)(config.uploadDir, { recursive: true });
195
+ if (!existsSync(config.uploadDir)) {
196
+ await mkdir(config.uploadDir, { recursive: true });
238
197
  }
239
198
  // Configure multer for file uploads
240
- const storage = multer_1.default.diskStorage({
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 = (0, multer_1.default)({
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 = node_path_1.default.extname(file.originalname).toLowerCase();
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 = (0, api_routes_js_1.createApiRouter)(serverAccessor);
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 Promise.resolve().then(() => __importStar(require('node:fs/promises')));
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 && (0, node_fs_1.existsSync)(config.staticDir)) {
312
- app.use(express_1.default.static(config.staticDir));
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(node_path_1.default.join(config.staticDir, 'index.html'));
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/*', index_js_1.notFoundHandler);
280
+ app.use('/api/*', notFoundHandler);
322
281
  // Error handling middleware
323
- app.use(index_js_1.errorHandler);
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
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
- if (k2 === undefined) k2 = k;
6
- var desc = Object.getOwnPropertyDescriptor(m, k);
7
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
- desc = { enumerable: true, get: function() { return m[k]; } };
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
- (0, process_handlers_js_1.setupProcessHandlers)();
9
+ setupProcessHandlers();
48
10
  // Setup graceful shutdown
49
- (0, process_handlers_js_1.setupGracefulShutdown)();
11
+ setupGracefulShutdown();
50
12
  // Register rate limiter cleanup for graceful shutdown
51
- (0, process_handlers_js_1.onShutdown)(() => {
13
+ onShutdown(() => {
52
14
  console.error('Cleaning up rate limiter...');
53
- (0, index_js_1.stopRateLimiterCleanup)();
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 Promise.resolve().then(() => __importStar(require('../server/index.js')));
62
- const { createHttpServerWithManager, startServer } = await Promise.resolve().then(() => __importStar(require('./http-server.js')));
63
- const { DatabaseManager } = await Promise.resolve().then(() => __importStar(require('./database-manager.js')));
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 = node_path_1.default.resolve(__dirname, '../..');
40
+ const packageDir = path.resolve(__dirname, '../..');
73
41
  const possiblePaths = [
74
- node_path_1.default.resolve(cwd, 'web-ui/dist'), // Dev: running from repo root
75
- node_path_1.default.resolve(packageDir, 'web-ui/dist'), // npx/global: relative to package
76
- node_path_1.default.resolve(cwd, 'dist/web-ui'), // Legacy prod path
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 ((0, node_fs_1.existsSync)(p)) {
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 = (0, config_js_1.buildRAGConfig)();
87
- (0, config_js_1.validateRAGConfig)(config);
54
+ const config = buildRAGConfig();
55
+ validateRAGConfig(config);
88
56
  // Validate allowed scan roots (logs warnings for non-existent paths)
89
- (0, config_js_1.validateAllowedScanRoots)();
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
- Object.defineProperty(exports, "__esModule", { value: true });
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 (0, node_crypto_1.timingSafeEqual)(padA, padB) && lengthsMatch;
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
- Object.defineProperty(exports, "__esModule", { value: true });
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 index_js_1.RAGError) {
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
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.isRequestLoggingEnabled = exports.createRequestLogger = exports.stopRateLimiterCleanup = exports.getRateLimitConfigFromEnv = exports.createRateLimiter = exports.notFoundHandler = exports.errorHandler = exports.asyncHandler = exports.apiKeyAuth = void 0;
5
- var auth_js_1 = require("./auth.js");
6
- Object.defineProperty(exports, "apiKeyAuth", { enumerable: true, get: function () { return auth_js_1.apiKeyAuth; } });
7
- var async_handler_js_1 = require("./async-handler.js");
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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"}