@chrishdx/llm-dev-server 1.0.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/LICENSE +21 -0
- package/README.md +164 -0
- package/backend/bin/llm-dev-server.js +3 -0
- package/backend/dist/cli.d.ts +15 -0
- package/backend/dist/cli.d.ts.map +1 -0
- package/backend/dist/cli.js +326 -0
- package/backend/dist/cli.js.map +1 -0
- package/backend/dist/config/database.d.ts +10 -0
- package/backend/dist/config/database.d.ts.map +1 -0
- package/backend/dist/config/database.js +61 -0
- package/backend/dist/config/database.js.map +1 -0
- package/backend/dist/config/environment.d.ts +20 -0
- package/backend/dist/config/environment.d.ts.map +1 -0
- package/backend/dist/config/environment.js +77 -0
- package/backend/dist/config/environment.js.map +1 -0
- package/backend/dist/controllers/AuthController.d.ts +18 -0
- package/backend/dist/controllers/AuthController.d.ts.map +1 -0
- package/backend/dist/controllers/AuthController.js +282 -0
- package/backend/dist/controllers/AuthController.js.map +1 -0
- package/backend/dist/controllers/ConversationController.d.ts +44 -0
- package/backend/dist/controllers/ConversationController.d.ts.map +1 -0
- package/backend/dist/controllers/ConversationController.js +193 -0
- package/backend/dist/controllers/ConversationController.js.map +1 -0
- package/backend/dist/controllers/JobController.d.ts +49 -0
- package/backend/dist/controllers/JobController.d.ts.map +1 -0
- package/backend/dist/controllers/JobController.js +227 -0
- package/backend/dist/controllers/JobController.js.map +1 -0
- package/backend/dist/index.d.ts +2 -0
- package/backend/dist/index.d.ts.map +1 -0
- package/backend/dist/index.js +160 -0
- package/backend/dist/index.js.map +1 -0
- package/backend/dist/middleware/auth.middleware.d.ts +25 -0
- package/backend/dist/middleware/auth.middleware.d.ts.map +1 -0
- package/backend/dist/middleware/auth.middleware.js +116 -0
- package/backend/dist/middleware/auth.middleware.js.map +1 -0
- package/backend/dist/middleware/authelia.middleware.d.ts +26 -0
- package/backend/dist/middleware/authelia.middleware.d.ts.map +1 -0
- package/backend/dist/middleware/authelia.middleware.js +165 -0
- package/backend/dist/middleware/authelia.middleware.js.map +1 -0
- package/backend/dist/middleware/error.middleware.d.ts +23 -0
- package/backend/dist/middleware/error.middleware.d.ts.map +1 -0
- package/backend/dist/middleware/error.middleware.js +59 -0
- package/backend/dist/middleware/error.middleware.js.map +1 -0
- package/backend/dist/models/AuthToken.d.ts +42 -0
- package/backend/dist/models/AuthToken.d.ts.map +1 -0
- package/backend/dist/models/AuthToken.js +97 -0
- package/backend/dist/models/AuthToken.js.map +1 -0
- package/backend/dist/models/Conversation.d.ts +36 -0
- package/backend/dist/models/Conversation.d.ts.map +1 -0
- package/backend/dist/models/Conversation.js +100 -0
- package/backend/dist/models/Conversation.js.map +1 -0
- package/backend/dist/models/FileOperation.d.ts +36 -0
- package/backend/dist/models/FileOperation.d.ts.map +1 -0
- package/backend/dist/models/FileOperation.js +117 -0
- package/backend/dist/models/FileOperation.js.map +1 -0
- package/backend/dist/models/Job.d.ts +48 -0
- package/backend/dist/models/Job.d.ts.map +1 -0
- package/backend/dist/models/Job.js +87 -0
- package/backend/dist/models/Job.js.map +1 -0
- package/backend/dist/models/Message.d.ts +38 -0
- package/backend/dist/models/Message.d.ts.map +1 -0
- package/backend/dist/models/Message.js +87 -0
- package/backend/dist/models/Message.js.map +1 -0
- package/backend/dist/models/User.d.ts +26 -0
- package/backend/dist/models/User.d.ts.map +1 -0
- package/backend/dist/models/User.js +67 -0
- package/backend/dist/models/User.js.map +1 -0
- package/backend/dist/models/index.d.ts +13 -0
- package/backend/dist/models/index.d.ts.map +1 -0
- package/backend/dist/models/index.js +24 -0
- package/backend/dist/models/index.js.map +1 -0
- package/backend/dist/routes/auth.routes.d.ts +3 -0
- package/backend/dist/routes/auth.routes.d.ts.map +1 -0
- package/backend/dist/routes/auth.routes.js +27 -0
- package/backend/dist/routes/auth.routes.js.map +1 -0
- package/backend/dist/routes/conversation.routes.d.ts +3 -0
- package/backend/dist/routes/conversation.routes.d.ts.map +1 -0
- package/backend/dist/routes/conversation.routes.js +17 -0
- package/backend/dist/routes/conversation.routes.js.map +1 -0
- package/backend/dist/routes/filesystem.routes.d.ts +3 -0
- package/backend/dist/routes/filesystem.routes.d.ts.map +1 -0
- package/backend/dist/routes/filesystem.routes.js +64 -0
- package/backend/dist/routes/filesystem.routes.js.map +1 -0
- package/backend/dist/routes/index.d.ts +3 -0
- package/backend/dist/routes/index.d.ts.map +1 -0
- package/backend/dist/routes/index.js +27 -0
- package/backend/dist/routes/index.js.map +1 -0
- package/backend/dist/routes/job.routes.d.ts +3 -0
- package/backend/dist/routes/job.routes.d.ts.map +1 -0
- package/backend/dist/routes/job.routes.js +18 -0
- package/backend/dist/routes/job.routes.js.map +1 -0
- package/backend/dist/services/auth/BaseAuthService.d.ts +49 -0
- package/backend/dist/services/auth/BaseAuthService.d.ts.map +1 -0
- package/backend/dist/services/auth/BaseAuthService.js +97 -0
- package/backend/dist/services/auth/BaseAuthService.js.map +1 -0
- package/backend/dist/services/auth/ClaudeAuthService.d.ts +69 -0
- package/backend/dist/services/auth/ClaudeAuthService.d.ts.map +1 -0
- package/backend/dist/services/auth/ClaudeAuthService.js +401 -0
- package/backend/dist/services/auth/ClaudeAuthService.js.map +1 -0
- package/backend/dist/services/auth/CodexAuthService.d.ts +37 -0
- package/backend/dist/services/auth/CodexAuthService.d.ts.map +1 -0
- package/backend/dist/services/auth/CodexAuthService.js +186 -0
- package/backend/dist/services/auth/CodexAuthService.js.map +1 -0
- package/backend/dist/services/auth/GeminiAuthService.d.ts +50 -0
- package/backend/dist/services/auth/GeminiAuthService.d.ts.map +1 -0
- package/backend/dist/services/auth/GeminiAuthService.js +284 -0
- package/backend/dist/services/auth/GeminiAuthService.js.map +1 -0
- package/backend/dist/services/auth/JwtService.d.ts +27 -0
- package/backend/dist/services/auth/JwtService.d.ts.map +1 -0
- package/backend/dist/services/auth/JwtService.js +65 -0
- package/backend/dist/services/auth/JwtService.js.map +1 -0
- package/backend/dist/services/auth/TokenRefreshService.d.ts +36 -0
- package/backend/dist/services/auth/TokenRefreshService.d.ts.map +1 -0
- package/backend/dist/services/auth/TokenRefreshService.js +178 -0
- package/backend/dist/services/auth/TokenRefreshService.js.map +1 -0
- package/backend/dist/services/conversation/ConversationService.d.ts +89 -0
- package/backend/dist/services/conversation/ConversationService.d.ts.map +1 -0
- package/backend/dist/services/conversation/ConversationService.js +255 -0
- package/backend/dist/services/conversation/ConversationService.js.map +1 -0
- package/backend/dist/services/job/JobService.d.ts +83 -0
- package/backend/dist/services/job/JobService.d.ts.map +1 -0
- package/backend/dist/services/job/JobService.js +213 -0
- package/backend/dist/services/job/JobService.js.map +1 -0
- package/backend/dist/services/job/WorkingDirectoryService.d.ts +73 -0
- package/backend/dist/services/job/WorkingDirectoryService.d.ts.map +1 -0
- package/backend/dist/services/job/WorkingDirectoryService.js +289 -0
- package/backend/dist/services/job/WorkingDirectoryService.js.map +1 -0
- package/backend/dist/services/llm/ClaudeProvider.d.ts +16 -0
- package/backend/dist/services/llm/ClaudeProvider.d.ts.map +1 -0
- package/backend/dist/services/llm/ClaudeProvider.js +229 -0
- package/backend/dist/services/llm/ClaudeProvider.js.map +1 -0
- package/backend/dist/services/llm/CodexProvider.d.ts +15 -0
- package/backend/dist/services/llm/CodexProvider.d.ts.map +1 -0
- package/backend/dist/services/llm/CodexProvider.js +301 -0
- package/backend/dist/services/llm/CodexProvider.js.map +1 -0
- package/backend/dist/services/llm/GeminiProvider.d.ts +17 -0
- package/backend/dist/services/llm/GeminiProvider.d.ts.map +1 -0
- package/backend/dist/services/llm/GeminiProvider.js +190 -0
- package/backend/dist/services/llm/GeminiProvider.js.map +1 -0
- package/backend/dist/services/llm/LLMProviderBase.d.ts +76 -0
- package/backend/dist/services/llm/LLMProviderBase.d.ts.map +1 -0
- package/backend/dist/services/llm/LLMProviderBase.js +34 -0
- package/backend/dist/services/llm/LLMProviderBase.js.map +1 -0
- package/backend/dist/services/llm/ProviderFactory.d.ts +17 -0
- package/backend/dist/services/llm/ProviderFactory.d.ts.map +1 -0
- package/backend/dist/services/llm/ProviderFactory.js +58 -0
- package/backend/dist/services/llm/ProviderFactory.js.map +1 -0
- package/backend/dist/utils/crypto.d.ts +33 -0
- package/backend/dist/utils/crypto.d.ts.map +1 -0
- package/backend/dist/utils/crypto.js +165 -0
- package/backend/dist/utils/crypto.js.map +1 -0
- package/backend/dist/utils/logger.d.ts +4 -0
- package/backend/dist/utils/logger.d.ts.map +1 -0
- package/backend/dist/utils/logger.js +44 -0
- package/backend/dist/utils/logger.js.map +1 -0
- package/backend/dist/utils/validators.d.ts +22 -0
- package/backend/dist/utils/validators.d.ts.map +1 -0
- package/backend/dist/utils/validators.js +127 -0
- package/backend/dist/utils/validators.js.map +1 -0
- package/backend/package.json +45 -0
- package/backend/public/assets/index-C207-KqP.js +188 -0
- package/backend/public/index.html +12 -0
- package/package.json +96 -0
- package/shared/dist/index.d.ts +5 -0
- package/shared/dist/index.d.ts.map +1 -0
- package/shared/dist/index.js +25 -0
- package/shared/dist/index.js.map +1 -0
- package/shared/dist/types/api.d.ts +27 -0
- package/shared/dist/types/api.d.ts.map +1 -0
- package/shared/dist/types/api.js +3 -0
- package/shared/dist/types/api.js.map +1 -0
- package/shared/dist/types/auth.d.ts +62 -0
- package/shared/dist/types/auth.d.ts.map +1 -0
- package/shared/dist/types/auth.js +3 -0
- package/shared/dist/types/auth.js.map +1 -0
- package/shared/dist/types/conversation.d.ts +98 -0
- package/shared/dist/types/conversation.d.ts.map +1 -0
- package/shared/dist/types/conversation.js +3 -0
- package/shared/dist/types/conversation.js.map +1 -0
- package/shared/dist/types/job.d.ts +93 -0
- package/shared/dist/types/job.d.ts.map +1 -0
- package/shared/dist/types/job.js +3 -0
- package/shared/dist/types/job.js.map +1 -0
- package/shared/package.json +15 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.GeminiProvider = void 0;
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const readline_1 = __importDefault(require("readline"));
|
|
10
|
+
const LLMProviderBase_1 = require("./LLMProviderBase");
|
|
11
|
+
const models_1 = require("../../models");
|
|
12
|
+
const environment_1 = __importDefault(require("../../config/environment"));
|
|
13
|
+
const logger_1 = __importDefault(require("../../utils/logger"));
|
|
14
|
+
class GeminiProvider extends LLMProviderBase_1.LLMProviderBase {
|
|
15
|
+
constructor(providerConfig) {
|
|
16
|
+
super(providerConfig);
|
|
17
|
+
// Use absolute path for gemini home
|
|
18
|
+
this.geminiHome = path_1.default.resolve(environment_1.default.DATA_DIR, "gemini");
|
|
19
|
+
}
|
|
20
|
+
async initialize() {
|
|
21
|
+
logger_1.default.info(`Initializing Gemini provider for working directory: ${this.config.workingDirectory}`);
|
|
22
|
+
// Set environment for Gemini CLI
|
|
23
|
+
// Gemini CLI looks for credentials in HOME/.gemini
|
|
24
|
+
this.env = {
|
|
25
|
+
...process.env,
|
|
26
|
+
HOME: this.geminiHome,
|
|
27
|
+
};
|
|
28
|
+
// Verify auth token exists
|
|
29
|
+
const token = await models_1.AuthToken.findByPk(this.config.tokenId);
|
|
30
|
+
if (!token || token.provider !== "gemini") {
|
|
31
|
+
throw new Error("Invalid Gemini auth token");
|
|
32
|
+
}
|
|
33
|
+
// Use session ID from config if provided
|
|
34
|
+
if (this.config.sessionId) {
|
|
35
|
+
this.currentSessionId = this.config.sessionId;
|
|
36
|
+
}
|
|
37
|
+
logger_1.default.info("Gemini provider initialized");
|
|
38
|
+
}
|
|
39
|
+
async sendMessage(params) {
|
|
40
|
+
const { content, systemPrompt, onChunk } = params;
|
|
41
|
+
// Build CLI arguments
|
|
42
|
+
const args = ["--output-format", onChunk ? "stream-json" : "json"];
|
|
43
|
+
// Only specify model if it's not "default" - let Gemini use its default
|
|
44
|
+
if (this.config.model && this.config.model !== "default") {
|
|
45
|
+
args.push("--model", this.config.model);
|
|
46
|
+
}
|
|
47
|
+
if (this.currentSessionId) {
|
|
48
|
+
args.push("--resume", this.currentSessionId);
|
|
49
|
+
}
|
|
50
|
+
// Spawn Gemini CLI
|
|
51
|
+
const cliPath = this.resolveGeminiCli();
|
|
52
|
+
const child = (0, child_process_1.spawn)("node", [cliPath, ...args], {
|
|
53
|
+
env: this.env,
|
|
54
|
+
cwd: this.config.workingDirectory,
|
|
55
|
+
});
|
|
56
|
+
// Write prompt to stdin
|
|
57
|
+
if (child.stdin) {
|
|
58
|
+
const fullPrompt = systemPrompt
|
|
59
|
+
? `${systemPrompt}\n\n${content}`
|
|
60
|
+
: content;
|
|
61
|
+
child.stdin.write(fullPrompt);
|
|
62
|
+
child.stdin.end();
|
|
63
|
+
}
|
|
64
|
+
if (onChunk) {
|
|
65
|
+
return this.handleStreamingResponse(child, onChunk);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
return this.handleJsonResponse(child);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async handleJsonResponse(child) {
|
|
72
|
+
let stdout = "";
|
|
73
|
+
let stderr = "";
|
|
74
|
+
child.stdout?.on("data", (data) => {
|
|
75
|
+
stdout += data.toString();
|
|
76
|
+
});
|
|
77
|
+
child.stderr?.on("data", (data) => {
|
|
78
|
+
stderr += data.toString();
|
|
79
|
+
});
|
|
80
|
+
return new Promise((resolve, reject) => {
|
|
81
|
+
child.on("close", (code) => {
|
|
82
|
+
if (code !== 0) {
|
|
83
|
+
logger_1.default.error("Gemini CLI failed:", stderr);
|
|
84
|
+
reject(new Error(`Gemini CLI exited with code ${code}: ${stderr}`));
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
const output = JSON.parse(stdout);
|
|
89
|
+
if (output.session_id) {
|
|
90
|
+
this.currentSessionId = output.session_id;
|
|
91
|
+
}
|
|
92
|
+
const result = {
|
|
93
|
+
content: output.response || "",
|
|
94
|
+
tokenUsage: {
|
|
95
|
+
input: output.stats?.input_tokens || 0,
|
|
96
|
+
output: output.stats?.output_tokens || 0,
|
|
97
|
+
total: (output.stats?.input_tokens || 0) +
|
|
98
|
+
(output.stats?.output_tokens || 0),
|
|
99
|
+
},
|
|
100
|
+
sessionId: this.currentSessionId,
|
|
101
|
+
};
|
|
102
|
+
this.messageCount++;
|
|
103
|
+
resolve(result);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
107
|
+
reject(new Error(`Failed to parse Gemini response: ${message}`));
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
child.on("error", (error) => {
|
|
111
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
112
|
+
reject(new Error(`Failed to spawn Gemini CLI: ${message}`));
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
async handleStreamingResponse(child, onChunk) {
|
|
117
|
+
let fullContent = "";
|
|
118
|
+
let sessionId;
|
|
119
|
+
let usage = { input: 0, output: 0, total: 0 };
|
|
120
|
+
const rl = readline_1.default.createInterface({
|
|
121
|
+
input: child.stdout,
|
|
122
|
+
crlfDelay: Infinity,
|
|
123
|
+
});
|
|
124
|
+
for await (const line of rl) {
|
|
125
|
+
try {
|
|
126
|
+
const event = JSON.parse(line);
|
|
127
|
+
if (event.type === "init" && event.session_id) {
|
|
128
|
+
sessionId = event.session_id;
|
|
129
|
+
this.currentSessionId = sessionId;
|
|
130
|
+
}
|
|
131
|
+
else if (event.type === "message") {
|
|
132
|
+
const chunk = event.content || "";
|
|
133
|
+
fullContent += chunk;
|
|
134
|
+
onChunk(chunk);
|
|
135
|
+
}
|
|
136
|
+
else if (event.type === "error") {
|
|
137
|
+
throw new Error(event.message || "Gemini execution failed");
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
142
|
+
if (message?.includes("failed")) {
|
|
143
|
+
throw error;
|
|
144
|
+
}
|
|
145
|
+
logger_1.default.warn("Failed to parse Gemini streaming event:", line);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
this.messageCount++;
|
|
149
|
+
return {
|
|
150
|
+
content: fullContent,
|
|
151
|
+
tokenUsage: usage,
|
|
152
|
+
sessionId,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
async resumeSession(sessionId) {
|
|
156
|
+
this.currentSessionId = sessionId;
|
|
157
|
+
logger_1.default.info(`Resumed Gemini session: ${sessionId}`);
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
async endSession() {
|
|
161
|
+
this.currentSessionId = undefined;
|
|
162
|
+
logger_1.default.info("Ended Gemini session");
|
|
163
|
+
}
|
|
164
|
+
async getStatus() {
|
|
165
|
+
return {
|
|
166
|
+
ready: true,
|
|
167
|
+
sessionId: this.currentSessionId,
|
|
168
|
+
messageCount: this.messageCount,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
async cleanup() {
|
|
172
|
+
this.currentSessionId = undefined;
|
|
173
|
+
this.messageCount = 0;
|
|
174
|
+
}
|
|
175
|
+
resolveGeminiCli() {
|
|
176
|
+
if (environment_1.default.GEMINI_CLI_PATH) {
|
|
177
|
+
return environment_1.default.GEMINI_CLI_PATH;
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
// require.resolve already returns the full path to dist/index.js
|
|
181
|
+
return require.resolve("@google/gemini-cli");
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
throw new Error("Gemini CLI not found. Install it with: npm install @google/gemini-cli");
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
exports.GeminiProvider = GeminiProvider;
|
|
189
|
+
exports.default = GeminiProvider;
|
|
190
|
+
//# sourceMappingURL=GeminiProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiProvider.js","sourceRoot":"","sources":["../../../src/services/llm/GeminiProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { LLMProvider } from '../../models';
|
|
2
|
+
export interface LLMProviderConfig {
|
|
3
|
+
provider: LLMProvider;
|
|
4
|
+
tokenId: string;
|
|
5
|
+
workingDirectory: string;
|
|
6
|
+
model?: string;
|
|
7
|
+
sessionId?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface SendMessageParams {
|
|
10
|
+
content: string;
|
|
11
|
+
systemPrompt?: string;
|
|
12
|
+
attachments?: string[];
|
|
13
|
+
onChunk?: (chunk: string) => void;
|
|
14
|
+
}
|
|
15
|
+
export interface SendMessageResult {
|
|
16
|
+
content: string;
|
|
17
|
+
toolCalls?: any[];
|
|
18
|
+
tokenUsage: {
|
|
19
|
+
input: number;
|
|
20
|
+
output: number;
|
|
21
|
+
total: number;
|
|
22
|
+
};
|
|
23
|
+
sessionId?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface ProviderStatus {
|
|
26
|
+
ready: boolean;
|
|
27
|
+
sessionId?: string;
|
|
28
|
+
messageCount: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Base interface for all LLM providers
|
|
32
|
+
*/
|
|
33
|
+
export declare abstract class LLMProviderBase {
|
|
34
|
+
protected config: LLMProviderConfig;
|
|
35
|
+
protected env: Record<string, string | undefined>;
|
|
36
|
+
protected messageCount: number;
|
|
37
|
+
constructor(config: LLMProviderConfig);
|
|
38
|
+
/**
|
|
39
|
+
* Initialize the provider
|
|
40
|
+
*/
|
|
41
|
+
abstract initialize(): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Send a message to the LLM
|
|
44
|
+
*/
|
|
45
|
+
abstract sendMessage(params: SendMessageParams): Promise<SendMessageResult>;
|
|
46
|
+
/**
|
|
47
|
+
* Resume a previous session
|
|
48
|
+
*/
|
|
49
|
+
abstract resumeSession(sessionId: string): Promise<boolean>;
|
|
50
|
+
/**
|
|
51
|
+
* End the current session
|
|
52
|
+
*/
|
|
53
|
+
abstract endSession(): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Get provider status
|
|
56
|
+
*/
|
|
57
|
+
abstract getStatus(): Promise<ProviderStatus>;
|
|
58
|
+
/**
|
|
59
|
+
* Cleanup resources
|
|
60
|
+
*/
|
|
61
|
+
abstract cleanup(): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Get provider name
|
|
64
|
+
*/
|
|
65
|
+
getProvider(): LLMProvider;
|
|
66
|
+
/**
|
|
67
|
+
* Get working directory
|
|
68
|
+
*/
|
|
69
|
+
getWorkingDirectory(): string;
|
|
70
|
+
/**
|
|
71
|
+
* Get model
|
|
72
|
+
*/
|
|
73
|
+
getModel(): string | undefined;
|
|
74
|
+
}
|
|
75
|
+
export default LLMProviderBase;
|
|
76
|
+
//# sourceMappingURL=LLMProviderBase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LLMProviderBase.d.ts","sourceRoot":"","sources":["../../../src/services/llm/LLMProviderBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,WAAW,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;IAClB,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,8BAAsB,eAAe;IACnC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACpC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAClD,SAAS,CAAC,YAAY,EAAE,MAAM,CAAK;gBAEvB,MAAM,EAAE,iBAAiB;IAKrC;;OAEG;IACH,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAE3E;;OAEG;IACH,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAE3D;;OAEG;IACH,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC;IAE7C;;OAEG;IACH,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAEjC;;OAEG;IACH,WAAW,IAAI,WAAW;IAI1B;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;OAEG;IACH,QAAQ,IAAI,MAAM,GAAG,SAAS;CAG/B;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LLMProviderBase = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Base interface for all LLM providers
|
|
6
|
+
*/
|
|
7
|
+
class LLMProviderBase {
|
|
8
|
+
constructor(config) {
|
|
9
|
+
this.messageCount = 0;
|
|
10
|
+
this.config = config;
|
|
11
|
+
this.env = { ...process.env };
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Get provider name
|
|
15
|
+
*/
|
|
16
|
+
getProvider() {
|
|
17
|
+
return this.config.provider;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get working directory
|
|
21
|
+
*/
|
|
22
|
+
getWorkingDirectory() {
|
|
23
|
+
return this.config.workingDirectory;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get model
|
|
27
|
+
*/
|
|
28
|
+
getModel() {
|
|
29
|
+
return this.config.model;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.LLMProviderBase = LLMProviderBase;
|
|
33
|
+
exports.default = LLMProviderBase;
|
|
34
|
+
//# sourceMappingURL=LLMProviderBase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LLMProviderBase.js","sourceRoot":"","sources":["../../../src/services/llm/LLMProviderBase.ts"],"names":[],"mappings":";;;AAkCA;;GAEG;AACH,MAAsB,eAAe;IAKnC,YAAY,MAAyB;QAF3B,iBAAY,GAAW,CAAC,CAAC;QAGjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAChC,CAAC;IAgCD;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAC3B,CAAC;CACF;AA5DD,0CA4DC;AAED,kBAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { LLMProviderBase, LLMProviderConfig } from './LLMProviderBase';
|
|
2
|
+
import { LLMProvider } from '../../models';
|
|
3
|
+
/**
|
|
4
|
+
* Factory for creating LLM provider instances
|
|
5
|
+
*/
|
|
6
|
+
export declare class ProviderFactory {
|
|
7
|
+
/**
|
|
8
|
+
* Create and initialize a provider instance
|
|
9
|
+
*/
|
|
10
|
+
static create(config: LLMProviderConfig): Promise<LLMProviderBase>;
|
|
11
|
+
/**
|
|
12
|
+
* Check if a provider is available
|
|
13
|
+
*/
|
|
14
|
+
static isAvailable(provider: LLMProvider): boolean;
|
|
15
|
+
}
|
|
16
|
+
export default ProviderFactory;
|
|
17
|
+
//# sourceMappingURL=ProviderFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProviderFactory.d.ts","sourceRoot":"","sources":["../../../src/services/llm/ProviderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAIvE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C;;GAEG;AACH,qBAAa,eAAe;IAC1B;;OAEG;WACU,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC;IAqBxE;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO;CAmBnD;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProviderFactory = void 0;
|
|
4
|
+
const ClaudeProvider_1 = require("./ClaudeProvider");
|
|
5
|
+
const CodexProvider_1 = require("./CodexProvider");
|
|
6
|
+
const GeminiProvider_1 = require("./GeminiProvider");
|
|
7
|
+
/**
|
|
8
|
+
* Factory for creating LLM provider instances
|
|
9
|
+
*/
|
|
10
|
+
class ProviderFactory {
|
|
11
|
+
/**
|
|
12
|
+
* Create and initialize a provider instance
|
|
13
|
+
*/
|
|
14
|
+
static async create(config) {
|
|
15
|
+
let provider;
|
|
16
|
+
switch (config.provider) {
|
|
17
|
+
case 'claude':
|
|
18
|
+
provider = new ClaudeProvider_1.ClaudeProvider(config);
|
|
19
|
+
break;
|
|
20
|
+
case 'codex':
|
|
21
|
+
provider = new CodexProvider_1.CodexProvider(config);
|
|
22
|
+
break;
|
|
23
|
+
case 'gemini':
|
|
24
|
+
provider = new GeminiProvider_1.GeminiProvider(config);
|
|
25
|
+
break;
|
|
26
|
+
default:
|
|
27
|
+
throw new Error(`Unknown provider: ${config.provider}`);
|
|
28
|
+
}
|
|
29
|
+
await provider.initialize();
|
|
30
|
+
return provider;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Check if a provider is available
|
|
34
|
+
*/
|
|
35
|
+
static isAvailable(provider) {
|
|
36
|
+
try {
|
|
37
|
+
switch (provider) {
|
|
38
|
+
case 'claude':
|
|
39
|
+
require.resolve('@anthropic-ai/claude-agent-sdk');
|
|
40
|
+
return true;
|
|
41
|
+
case 'codex':
|
|
42
|
+
require.resolve('@openai/codex-sdk');
|
|
43
|
+
return true;
|
|
44
|
+
case 'gemini':
|
|
45
|
+
require.resolve('@google/gemini-cli');
|
|
46
|
+
return true;
|
|
47
|
+
default:
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.ProviderFactory = ProviderFactory;
|
|
57
|
+
exports.default = ProviderFactory;
|
|
58
|
+
//# sourceMappingURL=ProviderFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProviderFactory.js","sourceRoot":"","sources":["../../../src/services/llm/ProviderFactory.ts"],"names":[],"mappings":";;;AACA,qDAAkD;AAClD,mDAAgD;AAChD,qDAAkD;AAGlD;;GAEG;AACH,MAAa,eAAe;IAC1B;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAyB;QAC3C,IAAI,QAAyB,CAAC;QAE9B,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;YACxB,KAAK,QAAQ;gBACX,QAAQ,GAAG,IAAI,+BAAc,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAM;YACR,KAAK,OAAO;gBACV,QAAQ,GAAG,IAAI,6BAAa,CAAC,MAAM,CAAC,CAAC;gBACrC,MAAM;YACR,KAAK,QAAQ;gBACX,QAAQ,GAAG,IAAI,+BAAc,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAAqB;QACtC,IAAI,CAAC;YACH,QAAQ,QAAQ,EAAE,CAAC;gBACjB,KAAK,QAAQ;oBACX,OAAO,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;oBAClD,OAAO,IAAI,CAAC;gBACd,KAAK,OAAO;oBACV,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;oBACrC,OAAO,IAAI,CAAC;gBACd,KAAK,QAAQ;oBACX,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;oBACtC,OAAO,IAAI,CAAC;gBACd;oBACE,OAAO,KAAK,CAAC;YACjB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF;AA/CD,0CA+CC;AAED,kBAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encrypt a string using AES-256-GCM
|
|
3
|
+
*/
|
|
4
|
+
export declare function encrypt(text: string): string;
|
|
5
|
+
/**
|
|
6
|
+
* Decrypt a string using AES-256-GCM
|
|
7
|
+
*/
|
|
8
|
+
export declare function decrypt(encryptedData: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Generate a random hex string
|
|
11
|
+
*/
|
|
12
|
+
export declare function generateRandomHex(bytes?: number): string;
|
|
13
|
+
/**
|
|
14
|
+
* Generate PKCE code verifier (for OAuth)
|
|
15
|
+
*/
|
|
16
|
+
export declare function generateCodeVerifier(): string;
|
|
17
|
+
/**
|
|
18
|
+
* Generate PKCE code challenge from verifier
|
|
19
|
+
*/
|
|
20
|
+
export declare function generateCodeChallenge(verifier: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Hash a password using bcrypt (async wrapper)
|
|
23
|
+
*/
|
|
24
|
+
export declare function hashPassword(password: string): Promise<string>;
|
|
25
|
+
/**
|
|
26
|
+
* Compare password with hash
|
|
27
|
+
*/
|
|
28
|
+
export declare function comparePassword(password: string, hash: string): Promise<boolean>;
|
|
29
|
+
/**
|
|
30
|
+
* Decode JWT without verification (for extracting claims)
|
|
31
|
+
*/
|
|
32
|
+
export declare function decodeJWT(token: string): any;
|
|
33
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"AA4BA;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkB5C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAwBrD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,GAAE,MAAW,GAAG,MAAM,CAE5D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK9D;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIpE;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAa5C"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.encrypt = encrypt;
|
|
40
|
+
exports.decrypt = decrypt;
|
|
41
|
+
exports.generateRandomHex = generateRandomHex;
|
|
42
|
+
exports.generateCodeVerifier = generateCodeVerifier;
|
|
43
|
+
exports.generateCodeChallenge = generateCodeChallenge;
|
|
44
|
+
exports.hashPassword = hashPassword;
|
|
45
|
+
exports.comparePassword = comparePassword;
|
|
46
|
+
exports.decodeJWT = decodeJWT;
|
|
47
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
48
|
+
const ALGORITHM = 'aes-256-gcm';
|
|
49
|
+
const IV_LENGTH = 16;
|
|
50
|
+
const SALT_LENGTH = 64;
|
|
51
|
+
const TAG_LENGTH = 16;
|
|
52
|
+
const KEY_LENGTH = 32;
|
|
53
|
+
/**
|
|
54
|
+
* Get encryption key from environment variable
|
|
55
|
+
*/
|
|
56
|
+
function getEncryptionKey() {
|
|
57
|
+
const key = process.env.ENCRYPTION_KEY;
|
|
58
|
+
if (!key) {
|
|
59
|
+
throw new Error('ENCRYPTION_KEY environment variable is not set');
|
|
60
|
+
}
|
|
61
|
+
// If key is hex string, convert to buffer
|
|
62
|
+
if (key.length === KEY_LENGTH * 2) {
|
|
63
|
+
return Buffer.from(key, 'hex');
|
|
64
|
+
}
|
|
65
|
+
// Otherwise, derive key from string using PBKDF2
|
|
66
|
+
const salt = crypto_1.default.createHash('sha256').update(key).digest();
|
|
67
|
+
return crypto_1.default.pbkdf2Sync(key, salt, 100000, KEY_LENGTH, 'sha256');
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Encrypt a string using AES-256-GCM
|
|
71
|
+
*/
|
|
72
|
+
function encrypt(text) {
|
|
73
|
+
try {
|
|
74
|
+
const key = getEncryptionKey();
|
|
75
|
+
const iv = crypto_1.default.randomBytes(IV_LENGTH);
|
|
76
|
+
const cipher = crypto_1.default.createCipheriv(ALGORITHM, key, iv);
|
|
77
|
+
let encrypted = cipher.update(text, 'utf8', 'hex');
|
|
78
|
+
encrypted += cipher.final('hex');
|
|
79
|
+
const tag = cipher.getAuthTag();
|
|
80
|
+
// Format: iv:tag:encrypted
|
|
81
|
+
return `${iv.toString('hex')}:${tag.toString('hex')}:${encrypted}`;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
85
|
+
throw new Error(`Encryption failed: ${message}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Decrypt a string using AES-256-GCM
|
|
90
|
+
*/
|
|
91
|
+
function decrypt(encryptedData) {
|
|
92
|
+
try {
|
|
93
|
+
const key = getEncryptionKey();
|
|
94
|
+
const parts = encryptedData.split(':');
|
|
95
|
+
if (parts.length !== 3) {
|
|
96
|
+
throw new Error('Invalid encrypted data format');
|
|
97
|
+
}
|
|
98
|
+
const iv = Buffer.from(parts[0], 'hex');
|
|
99
|
+
const tag = Buffer.from(parts[1], 'hex');
|
|
100
|
+
const encrypted = parts[2];
|
|
101
|
+
const decipher = crypto_1.default.createDecipheriv(ALGORITHM, key, iv);
|
|
102
|
+
decipher.setAuthTag(tag);
|
|
103
|
+
let decrypted = decipher.update(encrypted, 'hex', 'utf8');
|
|
104
|
+
decrypted += decipher.final('utf8');
|
|
105
|
+
return decrypted;
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
109
|
+
throw new Error(`Decryption failed: ${message}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Generate a random hex string
|
|
114
|
+
*/
|
|
115
|
+
function generateRandomHex(bytes = 32) {
|
|
116
|
+
return crypto_1.default.randomBytes(bytes).toString('hex');
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Generate PKCE code verifier (for OAuth)
|
|
120
|
+
*/
|
|
121
|
+
function generateCodeVerifier() {
|
|
122
|
+
return crypto_1.default.randomBytes(32).toString('base64url');
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Generate PKCE code challenge from verifier
|
|
126
|
+
*/
|
|
127
|
+
function generateCodeChallenge(verifier) {
|
|
128
|
+
return crypto_1.default
|
|
129
|
+
.createHash('sha256')
|
|
130
|
+
.update(verifier)
|
|
131
|
+
.digest('base64url');
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Hash a password using bcrypt (async wrapper)
|
|
135
|
+
*/
|
|
136
|
+
async function hashPassword(password) {
|
|
137
|
+
const bcrypt = await Promise.resolve().then(() => __importStar(require('bcrypt')));
|
|
138
|
+
const saltRounds = 10;
|
|
139
|
+
return bcrypt.hash(password, saltRounds);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Compare password with hash
|
|
143
|
+
*/
|
|
144
|
+
async function comparePassword(password, hash) {
|
|
145
|
+
const bcrypt = await Promise.resolve().then(() => __importStar(require('bcrypt')));
|
|
146
|
+
return bcrypt.compare(password, hash);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Decode JWT without verification (for extracting claims)
|
|
150
|
+
*/
|
|
151
|
+
function decodeJWT(token) {
|
|
152
|
+
try {
|
|
153
|
+
const parts = token.split('.');
|
|
154
|
+
if (parts.length !== 3) {
|
|
155
|
+
throw new Error('Invalid JWT format');
|
|
156
|
+
}
|
|
157
|
+
const payload = Buffer.from(parts[1], 'base64url').toString('utf8');
|
|
158
|
+
return JSON.parse(payload);
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
162
|
+
throw new Error(`JWT decode failed: ${message}`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAwB9B,QAAA,MAAM,MAAM,gBAUV,CAAC;AAwBH,eAAe,MAAM,CAAC"}
|