@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.
- package/README.md +396 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +27 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +243 -0
- package/dist/index.js.map +1 -0
- package/dist/intelligence/context-optimizer.d.ts +93 -0
- package/dist/intelligence/context-optimizer.d.ts.map +1 -0
- package/dist/intelligence/context-optimizer.js +481 -0
- package/dist/intelligence/context-optimizer.js.map +1 -0
- package/dist/intelligence/error-analyzer.d.ts +49 -0
- package/dist/intelligence/error-analyzer.d.ts.map +1 -0
- package/dist/intelligence/error-analyzer.js +765 -0
- package/dist/intelligence/error-analyzer.js.map +1 -0
- package/dist/intelligence/gap-filler.d.ts +56 -0
- package/dist/intelligence/gap-filler.d.ts.map +1 -0
- package/dist/intelligence/gap-filler.js +410 -0
- package/dist/intelligence/gap-filler.js.map +1 -0
- package/dist/intelligence/guidance-generator.d.ts +43 -0
- package/dist/intelligence/guidance-generator.d.ts.map +1 -0
- package/dist/intelligence/guidance-generator.js +314 -0
- package/dist/intelligence/guidance-generator.js.map +1 -0
- package/dist/intelligence/index.d.ts +132 -0
- package/dist/intelligence/index.d.ts.map +1 -0
- package/dist/intelligence/index.js +683 -0
- package/dist/intelligence/index.js.map +1 -0
- package/dist/server-http.d.ts +9 -0
- package/dist/server-http.d.ts.map +1 -0
- package/dist/server-http.js +141 -0
- package/dist/server-http.js.map +1 -0
- package/dist/services/api-key-service.d.ts +68 -0
- package/dist/services/api-key-service.d.ts.map +1 -0
- package/dist/services/api-key-service.js +298 -0
- package/dist/services/api-key-service.js.map +1 -0
- package/dist/services/llm-client.d.ts +66 -0
- package/dist/services/llm-client.d.ts.map +1 -0
- package/dist/services/llm-client.js +141 -0
- package/dist/services/llm-client.js.map +1 -0
- package/dist/services/model-registry.d.ts +135 -0
- package/dist/services/model-registry.d.ts.map +1 -0
- package/dist/services/model-registry.js +276 -0
- package/dist/services/model-registry.js.map +1 -0
- package/dist/services/visualprd-client.d.ts +191 -0
- package/dist/services/visualprd-client.d.ts.map +1 -0
- package/dist/services/visualprd-client.js +805 -0
- package/dist/services/visualprd-client.js.map +1 -0
- package/dist/tools/index.d.ts +803 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +570 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types/index.d.ts +497 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- 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 @@
|
|
|
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"}
|