@visualprd/mcp-server 1.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 (58) hide show
  1. package/README.md +396 -0
  2. package/dist/cli.d.ts +9 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +27 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/index.d.ts +20 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +243 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/intelligence/context-optimizer.d.ts +93 -0
  11. package/dist/intelligence/context-optimizer.d.ts.map +1 -0
  12. package/dist/intelligence/context-optimizer.js +481 -0
  13. package/dist/intelligence/context-optimizer.js.map +1 -0
  14. package/dist/intelligence/error-analyzer.d.ts +49 -0
  15. package/dist/intelligence/error-analyzer.d.ts.map +1 -0
  16. package/dist/intelligence/error-analyzer.js +765 -0
  17. package/dist/intelligence/error-analyzer.js.map +1 -0
  18. package/dist/intelligence/gap-filler.d.ts +56 -0
  19. package/dist/intelligence/gap-filler.d.ts.map +1 -0
  20. package/dist/intelligence/gap-filler.js +410 -0
  21. package/dist/intelligence/gap-filler.js.map +1 -0
  22. package/dist/intelligence/guidance-generator.d.ts +43 -0
  23. package/dist/intelligence/guidance-generator.d.ts.map +1 -0
  24. package/dist/intelligence/guidance-generator.js +314 -0
  25. package/dist/intelligence/guidance-generator.js.map +1 -0
  26. package/dist/intelligence/index.d.ts +132 -0
  27. package/dist/intelligence/index.d.ts.map +1 -0
  28. package/dist/intelligence/index.js +683 -0
  29. package/dist/intelligence/index.js.map +1 -0
  30. package/dist/server-http.d.ts +9 -0
  31. package/dist/server-http.d.ts.map +1 -0
  32. package/dist/server-http.js +141 -0
  33. package/dist/server-http.js.map +1 -0
  34. package/dist/services/api-key-service.d.ts +68 -0
  35. package/dist/services/api-key-service.d.ts.map +1 -0
  36. package/dist/services/api-key-service.js +298 -0
  37. package/dist/services/api-key-service.js.map +1 -0
  38. package/dist/services/llm-client.d.ts +66 -0
  39. package/dist/services/llm-client.d.ts.map +1 -0
  40. package/dist/services/llm-client.js +141 -0
  41. package/dist/services/llm-client.js.map +1 -0
  42. package/dist/services/model-registry.d.ts +135 -0
  43. package/dist/services/model-registry.d.ts.map +1 -0
  44. package/dist/services/model-registry.js +276 -0
  45. package/dist/services/model-registry.js.map +1 -0
  46. package/dist/services/visualprd-client.d.ts +191 -0
  47. package/dist/services/visualprd-client.d.ts.map +1 -0
  48. package/dist/services/visualprd-client.js +805 -0
  49. package/dist/services/visualprd-client.js.map +1 -0
  50. package/dist/tools/index.d.ts +803 -0
  51. package/dist/tools/index.d.ts.map +1 -0
  52. package/dist/tools/index.js +570 -0
  53. package/dist/tools/index.js.map +1 -0
  54. package/dist/types/index.d.ts +497 -0
  55. package/dist/types/index.d.ts.map +1 -0
  56. package/dist/types/index.js +8 -0
  57. package/dist/types/index.js.map +1 -0
  58. package/package.json +48 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/intelligence/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * VisualPRD MCP Server - HTTP Wrapper
4
+ *
5
+ * Exposes the MCP server tools via a simple HTTP API for testing and
6
+ * Chrome extension integration.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=server-http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-http.d.ts","sourceRoot":"","sources":["../src/server-http.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}
@@ -0,0 +1,141 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * VisualPRD MCP Server - HTTP Wrapper
5
+ *
6
+ * Exposes the MCP server tools via a simple HTTP API for testing and
7
+ * Chrome extension integration.
8
+ */
9
+ var __importDefault = (this && this.__importDefault) || function (mod) {
10
+ return (mod && mod.__esModule) ? mod : { "default": mod };
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ const http_1 = __importDefault(require("http"));
14
+ const url_1 = require("url");
15
+ const visualprd_client_js_1 = require("./services/visualprd-client.js");
16
+ const index_js_1 = require("./intelligence/index.js");
17
+ const index_js_2 = require("./tools/index.js");
18
+ // Cache for project-specific handlers
19
+ const handlerCache = new Map();
20
+ // Default configuration from environment
21
+ const defaultConfig = {
22
+ projectId: process.env.VISUALPRD_PROJECT_ID || process.env.PROJECT_ID || '',
23
+ apiKey: process.env.VISUALPRD_API_KEY || '',
24
+ apiUrl: process.env.VISUALPRD_API_URL || 'https://api.visualprd.com',
25
+ };
26
+ /**
27
+ * Get or create tool handlers for a specific project
28
+ */
29
+ function getHandlersForProject(projectId) {
30
+ if (handlerCache.has(projectId)) {
31
+ return handlerCache.get(projectId);
32
+ }
33
+ console.log(`[HTTP] Initializing services for project: ${projectId}`);
34
+ const config = { ...defaultConfig, projectId };
35
+ const client = new visualprd_client_js_1.VisualPRDClient(config);
36
+ const intelligence = new index_js_1.IntelligenceLayer(client);
37
+ const handlers = new index_js_2.ToolHandlers(intelligence); // Correctly initialized with intelligence layer
38
+ handlerCache.set(projectId, handlers);
39
+ return handlers;
40
+ }
41
+ /**
42
+ * Parse JSON body from request
43
+ */
44
+ function getBody(req) {
45
+ return new Promise((resolve, reject) => {
46
+ let body = '';
47
+ req.on('data', chunk => {
48
+ body += chunk.toString();
49
+ });
50
+ req.on('end', () => {
51
+ try {
52
+ resolve(body ? JSON.parse(body) : {});
53
+ }
54
+ catch (error) {
55
+ reject(error);
56
+ }
57
+ });
58
+ req.on('error', reject);
59
+ });
60
+ }
61
+ /**
62
+ * Send JSON response
63
+ */
64
+ function sendJson(res, status, data) {
65
+ res.writeHead(status, {
66
+ 'Content-Type': 'application/json',
67
+ 'Access-Control-Allow-Origin': '*',
68
+ 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
69
+ 'Access-Control-Allow-Headers': 'Content-Type, visualprd-project-id, visualprd-user-id',
70
+ });
71
+ res.end(JSON.stringify(data));
72
+ }
73
+ // Create HTTP Server
74
+ const server = http_1.default.createServer(async (req, res) => {
75
+ // CORS Preflight
76
+ if (req.method === 'OPTIONS') {
77
+ res.writeHead(204, {
78
+ 'Access-Control-Allow-Origin': '*',
79
+ 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
80
+ 'Access-Control-Allow-Headers': 'Content-Type, visualprd-project-id, visualprd-user-id',
81
+ });
82
+ res.end();
83
+ return;
84
+ }
85
+ const url = new url_1.URL(req.url || '/', `http://${req.headers.host}`);
86
+ const path = url.pathname;
87
+ console.log(`[HTTP] ${req.method} ${path}`);
88
+ try {
89
+ // Health Check
90
+ if (req.method === 'GET' && path === '/health') {
91
+ return sendJson(res, 200, { status: 'ok', healthy: true });
92
+ }
93
+ // List Tools
94
+ if (req.method === 'GET' && path === '/mcp/tools') {
95
+ return sendJson(res, 200, { tools: index_js_2.ToolDefinitions });
96
+ }
97
+ // Execute Tool
98
+ // Matches /mcp/:toolName
99
+ const match = path.match(/^\/mcp\/([a-zA-Z0-9_]+)$/);
100
+ if (req.method === 'POST' && match) {
101
+ const toolName = match[1];
102
+ const body = await getBody(req);
103
+ // Determine Project ID
104
+ const projectId = req.headers['visualprd-project-id'] || defaultConfig.projectId;
105
+ if (!projectId) {
106
+ return sendJson(res, 400, {
107
+ error: true,
108
+ message: 'Project ID is required. Set VISUALPRD_PROJECT_ID env var or provide visualprd-project-id header.'
109
+ });
110
+ }
111
+ const handlers = getHandlersForProject(projectId);
112
+ console.log(`[HTTP] Executing tool ${toolName} for project ${projectId}`);
113
+ const result = await handlers.handleToolCall(toolName, body);
114
+ return sendJson(res, 200, result);
115
+ }
116
+ // Not Found
117
+ sendJson(res, 404, { error: true, message: 'Route not found' });
118
+ }
119
+ catch (error) {
120
+ console.error(`[HTTP] Error:`, error);
121
+ sendJson(res, 500, {
122
+ error: true,
123
+ message: error.message || 'Internal Server Error',
124
+ stack: process.env.NODE_ENV === 'development' ? error.stack : undefined
125
+ });
126
+ }
127
+ });
128
+ // Start Server
129
+ const PORT = process.env.PORT || 8080;
130
+ server.listen(PORT, () => {
131
+ console.log(`
132
+ VisualPRD MCP HTTP Server running on port ${PORT}
133
+ ------------------------------------------------
134
+ Health Check: GET http://localhost:${PORT}/health
135
+ Tools List: GET http://localhost:${PORT}/mcp/tools
136
+ Execute Tool: POST http://localhost:${PORT}/mcp/:toolName
137
+
138
+ Default Project ID: ${defaultConfig.projectId || '(none)'}
139
+ `);
140
+ });
141
+ //# sourceMappingURL=server-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-http.js","sourceRoot":"","sources":["../src/server-http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * API Key Service
3
+ *
4
+ * Manages API key retrieval for the MCP server.
5
+ * Fetches keys from Firestore based on user type:
6
+ * - Platform key: For free/whitelisted users (from adminConfig/paymentCredentials)
7
+ * - BYOK key: For paid users (from users/{userId}/developerPlan.openRouterApiKey)
8
+ *
9
+ * Uses the same encryption as billing-service.ts (AES-256-GCM)
10
+ */
11
+ export type UserKeyMode = 'platform' | 'byok';
12
+ export interface ApiKeyResult {
13
+ apiKey: string;
14
+ mode: UserKeyMode;
15
+ source: 'firestore' | 'env';
16
+ }
17
+ export interface ApiKeyServiceConfig {
18
+ encryptionKey?: string;
19
+ }
20
+ /**
21
+ * API Key Service for MCP
22
+ * Fetches appropriate API keys based on user subscription status
23
+ */
24
+ export declare class ApiKeyService {
25
+ private db;
26
+ private encryptionKey;
27
+ private cachedPlatformKey;
28
+ private cacheTimestamp;
29
+ private readonly CACHE_TTL_MS;
30
+ constructor(config?: ApiKeyServiceConfig);
31
+ /**
32
+ * Get the appropriate API key for a user
33
+ * Order of preference:
34
+ * 1. User's BYOK key (if active subscription)
35
+ * 2. Platform key (from adminConfig)
36
+ * 3. Environment variable fallback
37
+ */
38
+ getApiKeyForUser(userId: string): Promise<ApiKeyResult>;
39
+ /**
40
+ * Get user's BYOK API key if they have an active subscription
41
+ */
42
+ private getUserByokKey;
43
+ /**
44
+ * Check if user is whitelisted for platform key access
45
+ */
46
+ private isUserWhitelisted;
47
+ /**
48
+ * Get platform OpenRouter API key from adminConfig
49
+ */
50
+ getPlatformApiKey(): Promise<string | null>;
51
+ /**
52
+ * Detect current environment
53
+ */
54
+ private getEnvironment;
55
+ /**
56
+ * Decrypt an API key (compatible with billing-service.ts)
57
+ */
58
+ private decryptApiKey;
59
+ /**
60
+ * Parse encryption key from string
61
+ */
62
+ private parseEncryptionKey;
63
+ /**
64
+ * Clear cached keys
65
+ */
66
+ clearCache(): void;
67
+ }
68
+ //# sourceMappingURL=api-key-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-key-service.d.ts","sourceRoot":"","sources":["../../src/services/api-key-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;AAE9C,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,WAAW,GAAG,KAAK,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,qBAAa,aAAa;IACtB,OAAO,CAAC,EAAE,CAA4B;IACtC,OAAO,CAAC,aAAa,CAAuB;IAG5C,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;gBAElC,MAAM,CAAC,EAAE,mBAAmB;IAcxC;;;;;;OAMG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA6C7D;;OAEG;YACW,cAAc;IAoC5B;;OAEG;YACW,iBAAiB;IAwC/B;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAgCjD;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,OAAO,CAAC,aAAa;IA+BrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;OAEG;IACH,UAAU,IAAI,IAAI;CAIrB"}
@@ -0,0 +1,298 @@
1
+ "use strict";
2
+ /**
3
+ * API Key Service
4
+ *
5
+ * Manages API key retrieval for the MCP server.
6
+ * Fetches keys from Firestore based on user type:
7
+ * - Platform key: For free/whitelisted users (from adminConfig/paymentCredentials)
8
+ * - BYOK key: For paid users (from users/{userId}/developerPlan.openRouterApiKey)
9
+ *
10
+ * Uses the same encryption as billing-service.ts (AES-256-GCM)
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ var __importDefault = (this && this.__importDefault) || function (mod) {
46
+ return (mod && mod.__esModule) ? mod : { "default": mod };
47
+ };
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ exports.ApiKeyService = void 0;
50
+ const admin = __importStar(require("firebase-admin"));
51
+ const crypto_1 = __importDefault(require("crypto"));
52
+ const ENCRYPTION_PREFIX = 'gcm:v1:';
53
+ const AES_IV_LENGTH = 12;
54
+ const AES_TAG_LENGTH = 16;
55
+ /**
56
+ * API Key Service for MCP
57
+ * Fetches appropriate API keys based on user subscription status
58
+ */
59
+ class ApiKeyService {
60
+ db;
61
+ encryptionKey = null;
62
+ // Cache for platform key
63
+ cachedPlatformKey = null;
64
+ cacheTimestamp = 0;
65
+ CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes
66
+ constructor(config) {
67
+ // Initialize Firebase Admin if not already initialized
68
+ if (!admin.apps.length) {
69
+ admin.initializeApp();
70
+ }
71
+ this.db = admin.firestore();
72
+ // Parse encryption key
73
+ const keySource = config?.encryptionKey ?? process.env['BYOK_ENCRYPTION_KEY'];
74
+ if (keySource) {
75
+ this.encryptionKey = this.parseEncryptionKey(keySource);
76
+ }
77
+ }
78
+ /**
79
+ * Get the appropriate API key for a user
80
+ * Order of preference:
81
+ * 1. User's BYOK key (if active subscription)
82
+ * 2. Platform key (from adminConfig)
83
+ * 3. Environment variable fallback
84
+ */
85
+ async getApiKeyForUser(userId) {
86
+ try {
87
+ // 1. Check if user has active BYOK subscription
88
+ const byokKey = await this.getUserByokKey(userId);
89
+ if (byokKey) {
90
+ console.error(`[ApiKeyService] Using BYOK key for user ${userId}`);
91
+ return {
92
+ apiKey: byokKey,
93
+ mode: 'byok',
94
+ source: 'firestore',
95
+ };
96
+ }
97
+ // 2. Check if user is whitelisted for platform key
98
+ const isWhitelisted = await this.isUserWhitelisted(userId);
99
+ if (isWhitelisted) {
100
+ const platformKey = await this.getPlatformApiKey();
101
+ if (platformKey) {
102
+ console.error(`[ApiKeyService] Using platform key for whitelisted user ${userId}`);
103
+ return {
104
+ apiKey: platformKey,
105
+ mode: 'platform',
106
+ source: 'firestore',
107
+ };
108
+ }
109
+ }
110
+ // 3. Fallback to environment variable
111
+ const envKey = process.env['OPENROUTER_API_KEY'];
112
+ if (envKey) {
113
+ console.error('[ApiKeyService] Using environment variable fallback');
114
+ return {
115
+ apiKey: envKey,
116
+ mode: 'platform',
117
+ source: 'env',
118
+ };
119
+ }
120
+ throw new Error('No API key available for this user');
121
+ }
122
+ catch (error) {
123
+ console.error('[ApiKeyService] Error getting API key:', error);
124
+ throw error;
125
+ }
126
+ }
127
+ /**
128
+ * Get user's BYOK API key if they have an active subscription
129
+ */
130
+ async getUserByokKey(userId) {
131
+ try {
132
+ const userDoc = await this.db.collection('users').doc(userId).get();
133
+ if (!userDoc.exists) {
134
+ return null;
135
+ }
136
+ const userData = userDoc.data();
137
+ const developerPlan = userData?.developerPlan;
138
+ // Check if BYOK subscription is active
139
+ if (!developerPlan?.enabled || !developerPlan?.isActive) {
140
+ return null;
141
+ }
142
+ // Check expiration
143
+ if (developerPlan.expiresAt) {
144
+ const expiresAt = developerPlan.expiresAt.toDate?.() || new Date(developerPlan.expiresAt);
145
+ if (expiresAt < new Date()) {
146
+ return null; // Expired
147
+ }
148
+ }
149
+ // Get and decrypt the API key
150
+ const encryptedKey = developerPlan.openRouterApiKey;
151
+ if (!encryptedKey) {
152
+ return null;
153
+ }
154
+ return this.decryptApiKey(encryptedKey);
155
+ }
156
+ catch (error) {
157
+ console.error('[ApiKeyService] Error getting BYOK key:', error);
158
+ return null;
159
+ }
160
+ }
161
+ /**
162
+ * Check if user is whitelisted for platform key access
163
+ */
164
+ async isUserWhitelisted(userId) {
165
+ try {
166
+ // Get user's email
167
+ const userDoc = await this.db.collection('users').doc(userId).get();
168
+ if (!userDoc.exists) {
169
+ return false;
170
+ }
171
+ const email = userDoc.data()?.email?.toLowerCase();
172
+ if (!email) {
173
+ return false;
174
+ }
175
+ // Check whitelist
176
+ const whitelistDoc = await this.db.doc(`admin/whitelist/users/${email}`).get();
177
+ if (!whitelistDoc.exists) {
178
+ return false;
179
+ }
180
+ const entry = whitelistDoc.data();
181
+ if (!entry?.isActive) {
182
+ return false;
183
+ }
184
+ // Check expiration
185
+ if (entry.expiresAt) {
186
+ const expiresAt = entry.expiresAt.toDate?.() || new Date(entry.expiresAt);
187
+ if (expiresAt < new Date()) {
188
+ return false;
189
+ }
190
+ }
191
+ // Check if usePlatformKey is enabled
192
+ return entry.usePlatformKey !== false;
193
+ }
194
+ catch (error) {
195
+ console.error('[ApiKeyService] Error checking whitelist:', error);
196
+ return false;
197
+ }
198
+ }
199
+ /**
200
+ * Get platform OpenRouter API key from adminConfig
201
+ */
202
+ async getPlatformApiKey() {
203
+ // Check cache first
204
+ if (this.cachedPlatformKey && (Date.now() - this.cacheTimestamp) < this.CACHE_TTL_MS) {
205
+ return this.cachedPlatformKey;
206
+ }
207
+ try {
208
+ const doc = await this.db.doc('adminConfig/paymentCredentials').get();
209
+ if (!doc.exists) {
210
+ return null;
211
+ }
212
+ const data = doc.data();
213
+ const env = this.getEnvironment();
214
+ const openRouterConfig = data?.openRouter?.[env];
215
+ if (openRouterConfig?.apiKey) {
216
+ const decryptedKey = this.decryptApiKey(openRouterConfig.apiKey);
217
+ if (decryptedKey) {
218
+ this.cachedPlatformKey = decryptedKey;
219
+ this.cacheTimestamp = Date.now();
220
+ return decryptedKey;
221
+ }
222
+ }
223
+ return null;
224
+ }
225
+ catch (error) {
226
+ console.error('[ApiKeyService] Error getting platform key:', error);
227
+ return null;
228
+ }
229
+ }
230
+ /**
231
+ * Detect current environment
232
+ */
233
+ getEnvironment() {
234
+ const projectId = process.env['GCLOUD_PROJECT'] ||
235
+ process.env['FIREBASE_PROJECT_ID'] ||
236
+ process.env['GCP_PROJECT'];
237
+ if (projectId?.includes('staging')) {
238
+ return 'staging';
239
+ }
240
+ return 'production';
241
+ }
242
+ /**
243
+ * Decrypt an API key (compatible with billing-service.ts)
244
+ */
245
+ decryptApiKey(value) {
246
+ if (!value) {
247
+ return null;
248
+ }
249
+ // If not encrypted, return as-is
250
+ if (!value.startsWith(ENCRYPTION_PREFIX)) {
251
+ return value;
252
+ }
253
+ if (!this.encryptionKey) {
254
+ console.error('[ApiKeyService] Cannot decrypt - no encryption key configured');
255
+ return null;
256
+ }
257
+ try {
258
+ const payload = Buffer.from(value.slice(ENCRYPTION_PREFIX.length), 'base64');
259
+ const iv = payload.subarray(0, AES_IV_LENGTH);
260
+ const authTag = payload.subarray(AES_IV_LENGTH, AES_IV_LENGTH + AES_TAG_LENGTH);
261
+ const ciphertext = payload.subarray(AES_IV_LENGTH + AES_TAG_LENGTH);
262
+ const decipher = crypto_1.default.createDecipheriv('aes-256-gcm', this.encryptionKey, iv);
263
+ decipher.setAuthTag(authTag);
264
+ const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
265
+ return decrypted.toString('utf8');
266
+ }
267
+ catch (error) {
268
+ console.error('[ApiKeyService] Decryption failed:', error);
269
+ return null;
270
+ }
271
+ }
272
+ /**
273
+ * Parse encryption key from string
274
+ */
275
+ parseEncryptionKey(source) {
276
+ const base64 = Buffer.from(source, 'base64');
277
+ if (base64.length === 32) {
278
+ return base64;
279
+ }
280
+ const hex = Buffer.from(source, 'hex');
281
+ if (hex.length === 32) {
282
+ return hex;
283
+ }
284
+ if (source.length === 32) {
285
+ return Buffer.from(source, 'utf8');
286
+ }
287
+ throw new Error('Encryption key must be 32 bytes');
288
+ }
289
+ /**
290
+ * Clear cached keys
291
+ */
292
+ clearCache() {
293
+ this.cachedPlatformKey = null;
294
+ this.cacheTimestamp = 0;
295
+ }
296
+ }
297
+ exports.ApiKeyService = ApiKeyService;
298
+ //# sourceMappingURL=api-key-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-key-service.js","sourceRoot":"","sources":["../../src/services/api-key-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * LLM Client
3
+ *
4
+ * Handles communication with LLM APIs via OpenRouter.
5
+ * Supports dynamic model switching for intelligent guidance.
6
+ */
7
+ export interface LLMConfig {
8
+ apiKey: string;
9
+ model: string;
10
+ baseUrl?: string;
11
+ maxTokens?: number;
12
+ temperature?: number;
13
+ }
14
+ export interface LLMMessage {
15
+ role: 'system' | 'user' | 'assistant';
16
+ content: string;
17
+ }
18
+ export interface LLMCompletionResult {
19
+ content: string;
20
+ model: string;
21
+ tokensUsed: {
22
+ prompt: number;
23
+ completion: number;
24
+ total: number;
25
+ };
26
+ finishReason: string;
27
+ }
28
+ export declare class LLMClient {
29
+ private config;
30
+ constructor(config: Partial<LLMConfig>);
31
+ /**
32
+ * Update the model dynamically (for real-time switching)
33
+ */
34
+ setModel(model: string): void;
35
+ /**
36
+ * Get the current model
37
+ */
38
+ getModel(): string;
39
+ /**
40
+ * Send a completion request to the LLM
41
+ */
42
+ complete(messages: LLMMessage[], options?: {
43
+ maxTokens?: number;
44
+ temperature?: number;
45
+ jsonMode?: boolean;
46
+ }): Promise<LLMCompletionResult>;
47
+ /**
48
+ * Analyze data with a structured JSON response
49
+ */
50
+ analyzeJSON<T = any>(systemPrompt: string, userPrompt: string, options?: {
51
+ maxTokens?: number;
52
+ }): Promise<{
53
+ result: T;
54
+ tokensUsed: number;
55
+ }>;
56
+ /**
57
+ * Simple text generation for guidance
58
+ */
59
+ generateText(systemPrompt: string, userPrompt: string, options?: {
60
+ maxTokens?: number;
61
+ }): Promise<{
62
+ text: string;
63
+ tokensUsed: number;
64
+ }>;
65
+ }
66
+ //# sourceMappingURL=llm-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/services/llm-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;CACxB;AASD,qBAAa,SAAS;IAClB,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC;IAUtC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACG,QAAQ,CACV,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAC3E,OAAO,CAAC,mBAAmB,CAAC;IA8D/B;;OAEG;IACG,WAAW,CAAC,CAAC,GAAG,GAAG,EACrB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACjC,OAAO,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAoC7C;;OAEG;IACG,YAAY,CACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACjC,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAanD"}