@code-rag/api-server 0.1.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 (66) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -0
  3. package/dist/dashboard/data-collector.d.ts +61 -0
  4. package/dist/dashboard/data-collector.js +244 -0
  5. package/dist/dashboard/data-collector.js.map +1 -0
  6. package/dist/dashboard/data-collector.test.d.ts +1 -0
  7. package/dist/dashboard/data-collector.test.js +334 -0
  8. package/dist/dashboard/data-collector.test.js.map +1 -0
  9. package/dist/dashboard/index.d.ts +10 -0
  10. package/dist/dashboard/index.js +6 -0
  11. package/dist/dashboard/index.js.map +1 -0
  12. package/dist/dashboard/routes.d.ts +18 -0
  13. package/dist/dashboard/routes.js +150 -0
  14. package/dist/dashboard/routes.js.map +1 -0
  15. package/dist/dashboard/templates.d.ts +47 -0
  16. package/dist/dashboard/templates.js +591 -0
  17. package/dist/dashboard/templates.js.map +1 -0
  18. package/dist/dashboard/templates.test.d.ts +1 -0
  19. package/dist/dashboard/templates.test.js +408 -0
  20. package/dist/dashboard/templates.test.js.map +1 -0
  21. package/dist/dashboard/types.d.ts +119 -0
  22. package/dist/dashboard/types.js +4 -0
  23. package/dist/dashboard/types.js.map +1 -0
  24. package/dist/index.d.ts +21 -0
  25. package/dist/index.js +36 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/middleware/auth.d.ts +37 -0
  28. package/dist/middleware/auth.js +92 -0
  29. package/dist/middleware/auth.js.map +1 -0
  30. package/dist/middleware/rate-limit.d.ts +26 -0
  31. package/dist/middleware/rate-limit.js +79 -0
  32. package/dist/middleware/rate-limit.js.map +1 -0
  33. package/dist/openapi.d.ts +14 -0
  34. package/dist/openapi.js +363 -0
  35. package/dist/openapi.js.map +1 -0
  36. package/dist/routes/context.d.ts +15 -0
  37. package/dist/routes/context.js +84 -0
  38. package/dist/routes/context.js.map +1 -0
  39. package/dist/routes/history.d.ts +56 -0
  40. package/dist/routes/history.js +308 -0
  41. package/dist/routes/history.js.map +1 -0
  42. package/dist/routes/index-trigger.d.ts +21 -0
  43. package/dist/routes/index-trigger.js +47 -0
  44. package/dist/routes/index-trigger.js.map +1 -0
  45. package/dist/routes/search.d.ts +24 -0
  46. package/dist/routes/search.js +85 -0
  47. package/dist/routes/search.js.map +1 -0
  48. package/dist/routes/status.d.ts +14 -0
  49. package/dist/routes/status.js +37 -0
  50. package/dist/routes/status.js.map +1 -0
  51. package/dist/routes/team.d.ts +62 -0
  52. package/dist/routes/team.js +129 -0
  53. package/dist/routes/team.js.map +1 -0
  54. package/dist/routes/viewer.d.ts +78 -0
  55. package/dist/routes/viewer.js +387 -0
  56. package/dist/routes/viewer.js.map +1 -0
  57. package/dist/routes/viewer.test.d.ts +1 -0
  58. package/dist/routes/viewer.test.js +509 -0
  59. package/dist/routes/viewer.test.js.map +1 -0
  60. package/dist/server.d.ts +45 -0
  61. package/dist/server.js +227 -0
  62. package/dist/server.js.map +1 -0
  63. package/dist/server.test.d.ts +1 -0
  64. package/dist/server.test.js +620 -0
  65. package/dist/server.test.js.map +1 -0
  66. package/package.json +62 -0
package/dist/server.js ADDED
@@ -0,0 +1,227 @@
1
+ import express from 'express';
2
+ import { createServer } from 'node:http';
3
+ import { loadConfig, OllamaEmbeddingProvider, LanceDBStore, BM25Index, HybridSearch, DependencyGraph, ContextExpander, CrossEncoderReRanker, } from '@code-rag/core';
4
+ import { readFile } from 'node:fs/promises';
5
+ import { join, resolve } from 'node:path';
6
+ import { parseApiKeys, createAuthMiddleware } from './middleware/auth.js';
7
+ import { createRateLimitMiddleware, parseRateLimitConfig } from './middleware/rate-limit.js';
8
+ import { createSearchRouter } from './routes/search.js';
9
+ import { createContextRouter } from './routes/context.js';
10
+ import { createStatusRouter } from './routes/status.js';
11
+ import { createIndexTriggerRouter } from './routes/index-trigger.js';
12
+ import { createTeamRouter, createTeamState } from './routes/team.js';
13
+ import { createHistoryRouter, HistoryStore } from './routes/history.js';
14
+ import { createOpenAPISpec } from './openapi.js';
15
+ import { DashboardDataCollector } from './dashboard/data-collector.js';
16
+ import { createDashboardRouter } from './dashboard/routes.js';
17
+ import { createViewerRouter } from './routes/viewer.js';
18
+ export const API_SERVER_VERSION = '0.1.0';
19
+ export class ApiServer {
20
+ app;
21
+ rootDir;
22
+ port;
23
+ httpServer = null;
24
+ // Core services (populated after initialize())
25
+ config = null;
26
+ store = null;
27
+ hybridSearch = null;
28
+ contextExpander = null;
29
+ reranker = null;
30
+ graph = null;
31
+ // Dashboard data collector
32
+ dataCollector;
33
+ constructor(options) {
34
+ this.rootDir = options.rootDir;
35
+ this.port = options.port;
36
+ const apiKeys = options.apiKeys ?? parseApiKeys(process.env['CODERAG_API_KEYS']);
37
+ const rateLimitConfig = parseRateLimitConfig(process.env);
38
+ const corsOrigin = options.corsOrigin ?? '*';
39
+ this.app = express();
40
+ // --- Global Middleware ---
41
+ // CORS
42
+ this.app.use((_req, res, next) => {
43
+ res.setHeader('Access-Control-Allow-Origin', corsOrigin);
44
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
45
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-API-Key');
46
+ if (_req.method === 'OPTIONS') {
47
+ res.status(204).end();
48
+ return;
49
+ }
50
+ next();
51
+ });
52
+ // JSON body parser
53
+ this.app.use(express.json());
54
+ // --- Unauthenticated Routes ---
55
+ // Health check (no auth required)
56
+ this.app.get('/health', (_req, res) => {
57
+ res.json({ status: 'ok', timestamp: new Date().toISOString() });
58
+ });
59
+ // OpenAPI spec (no auth required)
60
+ this.app.get('/api/openapi.json', (_req, res) => {
61
+ res.json(createOpenAPISpec());
62
+ });
63
+ // --- Authenticated Routes ---
64
+ // Auth middleware
65
+ this.app.use('/api/v1', createAuthMiddleware(apiKeys));
66
+ // Rate limiting (after auth so we can track per-key)
67
+ this.app.use('/api/v1', createRateLimitMiddleware(rateLimitConfig));
68
+ // Mount routes (deps are mutable references resolved at request time)
69
+ const searchDeps = {
70
+ get hybridSearch() { return self.hybridSearch; },
71
+ get reranker() { return self.reranker; },
72
+ };
73
+ const contextDeps = {
74
+ get hybridSearch() { return self.hybridSearch; },
75
+ get contextExpander() { return self.contextExpander; },
76
+ };
77
+ const statusDeps = {
78
+ get store() { return self.store; },
79
+ get config() { return self.config; },
80
+ };
81
+ const indexDeps = {
82
+ onIndex: options.onIndex ?? null,
83
+ };
84
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
85
+ const self = this;
86
+ this.app.use('/api/v1/search', createSearchRouter(searchDeps));
87
+ this.app.use('/api/v1/context', createContextRouter(contextDeps));
88
+ this.app.use('/api/v1/status', createStatusRouter(statusDeps));
89
+ this.app.use('/api/v1/index', createIndexTriggerRouter(indexDeps));
90
+ // Team shared context routes
91
+ const teamState = createTeamState();
92
+ this.app.use('/api/v1/team', createTeamRouter({
93
+ storageProvider: null,
94
+ teamState,
95
+ }));
96
+ // History and bookmarks routes
97
+ const historyStore = new HistoryStore();
98
+ this.app.use('/api/v1', createHistoryRouter({ historyStore }));
99
+ // Viewer routes (read-only visualization API)
100
+ this.app.use('/api/v1/viewer', createViewerRouter({
101
+ getStore: () => self.store,
102
+ getConfig: () => self.config,
103
+ getHybridSearch: () => self.hybridSearch,
104
+ getGraph: () => self.graph,
105
+ }));
106
+ // --- Dashboard ---
107
+ this.dataCollector = new DashboardDataCollector({
108
+ getStore: () => self.store,
109
+ getConfig: () => self.config,
110
+ apiKeys,
111
+ });
112
+ // Request tracking middleware (all routes)
113
+ this.app.use((req, _res, next) => {
114
+ const authReq = req;
115
+ this.dataCollector.recordRequest(req.method, req.path, authReq.apiKey?.key ?? null);
116
+ next();
117
+ });
118
+ // Mount dashboard (admin-only, handles its own auth)
119
+ this.app.use('/dashboard', createDashboardRouter({
120
+ dataCollector: this.dataCollector,
121
+ onIndex: options.onIndex ?? null,
122
+ getConfig: () => self.config,
123
+ apiKeys,
124
+ }));
125
+ }
126
+ /**
127
+ * Initialize all core services: load config, connect LanceDB, build indices.
128
+ * The server still starts even if initialization errors occur.
129
+ */
130
+ async initialize() {
131
+ try {
132
+ const configResult = await loadConfig(this.rootDir);
133
+ if (configResult.isErr()) {
134
+ // eslint-disable-next-line no-console
135
+ console.error(`[api-server] Config load failed: ${configResult.error.message}`);
136
+ return;
137
+ }
138
+ this.config = configResult.value;
139
+ // Create embedding provider
140
+ const embeddingProvider = new OllamaEmbeddingProvider({
141
+ model: this.config.embedding.model,
142
+ dimensions: this.config.embedding.dimensions,
143
+ });
144
+ // Create LanceDB store
145
+ const storagePath = resolve(this.rootDir, this.config.storage.path);
146
+ if (!storagePath.startsWith(resolve(this.rootDir))) {
147
+ // eslint-disable-next-line no-console
148
+ console.error('[api-server] Storage path escapes project root');
149
+ return;
150
+ }
151
+ this.store = new LanceDBStore(storagePath, this.config.embedding.dimensions);
152
+ await this.store.connect();
153
+ // Load BM25 index
154
+ let bm25Index = new BM25Index();
155
+ const bm25Path = join(storagePath, 'bm25-index.json');
156
+ try {
157
+ const bm25Data = await readFile(bm25Path, 'utf-8');
158
+ bm25Index = BM25Index.deserialize(bm25Data);
159
+ }
160
+ catch {
161
+ // No saved BM25 index, start empty
162
+ }
163
+ // Create HybridSearch
164
+ this.hybridSearch = new HybridSearch(this.store, bm25Index, embeddingProvider, this.config.search);
165
+ // Create re-ranker if enabled
166
+ if (this.config.reranker?.enabled) {
167
+ this.reranker = new CrossEncoderReRanker({
168
+ model: this.config.reranker.model,
169
+ topN: this.config.reranker.topN,
170
+ });
171
+ }
172
+ // Load dependency graph
173
+ let graph = new DependencyGraph();
174
+ const graphPath = join(storagePath, 'graph.json');
175
+ try {
176
+ const graphData = await readFile(graphPath, 'utf-8');
177
+ const parsed = JSON.parse(graphData);
178
+ graph = DependencyGraph.fromJSON(parsed);
179
+ }
180
+ catch {
181
+ // No saved graph, start empty
182
+ }
183
+ // Store graph for viewer API
184
+ this.graph = graph;
185
+ // Create context expander
186
+ const chunkLookup = (_chunkId) => undefined;
187
+ this.contextExpander = new ContextExpander(graph, chunkLookup);
188
+ }
189
+ catch (error) {
190
+ const message = error instanceof Error ? error.message : 'Unknown error';
191
+ // eslint-disable-next-line no-console
192
+ console.error(`[api-server] Initialization failed: ${message}`);
193
+ }
194
+ }
195
+ /**
196
+ * Start listening on the configured port.
197
+ */
198
+ async start() {
199
+ this.httpServer = createServer(this.app);
200
+ return new Promise((resolvePromise, reject) => {
201
+ this.httpServer.on('error', reject);
202
+ this.httpServer.listen(this.port, () => {
203
+ resolvePromise();
204
+ });
205
+ });
206
+ }
207
+ /**
208
+ * Gracefully shut down the HTTP server.
209
+ */
210
+ async close() {
211
+ if (this.httpServer) {
212
+ await new Promise((resolvePromise, reject) => {
213
+ this.httpServer.close((closeErr) => {
214
+ if (closeErr)
215
+ reject(closeErr);
216
+ else
217
+ resolvePromise();
218
+ });
219
+ });
220
+ this.httpServer = null;
221
+ }
222
+ }
223
+ /** Expose Express app for testing with supertest. */
224
+ getApp() {
225
+ return this.app;
226
+ }
227
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};