@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,64 @@
|
|
|
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
|
+
const express_1 = require("express");
|
|
7
|
+
const WorkingDirectoryService_1 = require("../services/job/WorkingDirectoryService");
|
|
8
|
+
const auth_middleware_1 = require("../middleware/auth.middleware");
|
|
9
|
+
const logger_1 = __importDefault(require("../utils/logger"));
|
|
10
|
+
const router = (0, express_1.Router)();
|
|
11
|
+
router.use(auth_middleware_1.authMiddleware);
|
|
12
|
+
/**
|
|
13
|
+
* Browse server filesystem
|
|
14
|
+
* GET /api/filesystem/browse?path=/some/path
|
|
15
|
+
*/
|
|
16
|
+
router.get("/browse", async (req, res) => {
|
|
17
|
+
try {
|
|
18
|
+
const targetPath = req.query.path;
|
|
19
|
+
const result = await WorkingDirectoryService_1.WorkingDirectoryService.browse(targetPath);
|
|
20
|
+
res.json(result);
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
24
|
+
logger_1.default.error("Error browsing filesystem:", message);
|
|
25
|
+
res.status(400).json({ error: message });
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
/**
|
|
29
|
+
* Get available root directories
|
|
30
|
+
* GET /api/filesystem/roots
|
|
31
|
+
*/
|
|
32
|
+
router.get("/roots", async (req, res) => {
|
|
33
|
+
try {
|
|
34
|
+
const roots = WorkingDirectoryService_1.WorkingDirectoryService.getRoots();
|
|
35
|
+
res.json({ roots });
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
39
|
+
logger_1.default.error("Error getting roots:", message);
|
|
40
|
+
res.status(500).json({ error: message });
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
/**
|
|
44
|
+
* Create a new directory
|
|
45
|
+
* POST /api/filesystem/mkdir
|
|
46
|
+
*/
|
|
47
|
+
router.post("/mkdir", async (req, res) => {
|
|
48
|
+
try {
|
|
49
|
+
const { parentPath, name } = req.body;
|
|
50
|
+
if (!parentPath || !name) {
|
|
51
|
+
res.status(400).json({ error: "parentPath and name are required" });
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const newPath = await WorkingDirectoryService_1.WorkingDirectoryService.createDirectory(parentPath, name);
|
|
55
|
+
res.status(201).json({ path: newPath });
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
59
|
+
logger_1.default.error("Error creating directory:", message);
|
|
60
|
+
res.status(400).json({ error: message });
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
exports.default = router;
|
|
64
|
+
//# sourceMappingURL=filesystem.routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem.routes.js","sourceRoot":"","sources":["../../src/routes/filesystem.routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAkBxB,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
const express_1 = require("express");
|
|
7
|
+
const auth_routes_1 = __importDefault(require("./auth.routes"));
|
|
8
|
+
const job_routes_1 = __importDefault(require("./job.routes"));
|
|
9
|
+
const conversation_routes_1 = __importDefault(require("./conversation.routes"));
|
|
10
|
+
const filesystem_routes_1 = __importDefault(require("./filesystem.routes"));
|
|
11
|
+
const router = (0, express_1.Router)();
|
|
12
|
+
router.use("/auth", auth_routes_1.default);
|
|
13
|
+
router.use("/jobs", job_routes_1.default);
|
|
14
|
+
router.use("/conversations", conversation_routes_1.default);
|
|
15
|
+
router.use("/filesystem", filesystem_routes_1.default);
|
|
16
|
+
router.get("/health", (req, res) => {
|
|
17
|
+
res.json({
|
|
18
|
+
data: {
|
|
19
|
+
status: "ok",
|
|
20
|
+
timestamp: new Date().toISOString(),
|
|
21
|
+
version: "1.0.0",
|
|
22
|
+
uptime: process.uptime(),
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
exports.default = router;
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":";;;;;AAAA,qCAAiC;AACjC,gEAAuC;AACvC,8DAAqC;AACrC,gFAAuD;AACvD,4EAAmD;AAEnD,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;AAExB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAU,CAAC,CAAC;AAChC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,oBAAS,CAAC,CAAC;AAC/B,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,6BAAkB,CAAC,CAAC;AACjD,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,2BAAgB,CAAC,CAAC;AAE5C,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACjC,GAAG,CAAC,IAAI,CAAC;QACP,IAAI,EAAE;YACJ,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;SACzB;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,kBAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job.routes.d.ts","sourceRoot":"","sources":["../../src/routes/job.routes.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAaxB,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const express_1 = require("express");
|
|
4
|
+
const JobController_1 = require("../controllers/JobController");
|
|
5
|
+
const auth_middleware_1 = require("../middleware/auth.middleware");
|
|
6
|
+
const router = (0, express_1.Router)();
|
|
7
|
+
router.use(auth_middleware_1.authMiddleware);
|
|
8
|
+
router.post("/", JobController_1.JobController.create);
|
|
9
|
+
router.get("/", JobController_1.JobController.list);
|
|
10
|
+
router.get("/:jobId", JobController_1.JobController.get);
|
|
11
|
+
router.patch("/:jobId", JobController_1.JobController.update);
|
|
12
|
+
router.delete("/:jobId", JobController_1.JobController.delete);
|
|
13
|
+
router.get("/:jobId/status", JobController_1.JobController.getStatus);
|
|
14
|
+
router.post("/:jobId/cancel", JobController_1.JobController.cancel);
|
|
15
|
+
router.get("/:jobId/files", JobController_1.JobController.listFiles);
|
|
16
|
+
router.get("/:jobId/conversations", JobController_1.JobController.getConversations);
|
|
17
|
+
exports.default = router;
|
|
18
|
+
//# sourceMappingURL=job.routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job.routes.js","sourceRoot":"","sources":["../../src/routes/job.routes.ts"],"names":[],"mappings":";;AAAA,qCAAiC;AACjC,gEAA6D;AAC7D,mEAA+D;AAE/D,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;AACxB,MAAM,CAAC,GAAG,CAAC,gCAAc,CAAC,CAAC;AAE3B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,6BAAa,CAAC,MAAM,CAAC,CAAC;AACvC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,6BAAa,CAAC,IAAI,CAAC,CAAC;AACpC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,6BAAa,CAAC,GAAG,CAAC,CAAC;AACzC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,6BAAa,CAAC,MAAM,CAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,6BAAa,CAAC,MAAM,CAAC,CAAC;AAC/C,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,6BAAa,CAAC,SAAS,CAAC,CAAC;AACtD,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,6BAAa,CAAC,MAAM,CAAC,CAAC;AACpD,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,6BAAa,CAAC,SAAS,CAAC,CAAC;AACrD,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,6BAAa,CAAC,gBAAgB,CAAC,CAAC;AAEpE,kBAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { AuthToken, LLMProvider } from '../../models';
|
|
2
|
+
export interface OAuthLoginSession {
|
|
3
|
+
sessionId: string;
|
|
4
|
+
state: string;
|
|
5
|
+
codeVerifier: string;
|
|
6
|
+
provider: LLMProvider;
|
|
7
|
+
redirectUri?: string;
|
|
8
|
+
loginMode?: string;
|
|
9
|
+
localPort?: number;
|
|
10
|
+
expiresAt: Date;
|
|
11
|
+
}
|
|
12
|
+
export declare abstract class BaseAuthService {
|
|
13
|
+
protected provider: LLMProvider;
|
|
14
|
+
constructor(provider: LLMProvider);
|
|
15
|
+
/**
|
|
16
|
+
* Store OAuth login session in memory
|
|
17
|
+
*/
|
|
18
|
+
protected storeLoginSession(session: OAuthLoginSession): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Get OAuth login session
|
|
21
|
+
*/
|
|
22
|
+
protected getLoginSession(sessionId: string): Promise<OAuthLoginSession | null>;
|
|
23
|
+
/**
|
|
24
|
+
* Delete OAuth login session
|
|
25
|
+
*/
|
|
26
|
+
protected deleteLoginSession(sessionId: string): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Encrypt sensitive data
|
|
29
|
+
*/
|
|
30
|
+
protected encrypt(data: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Decrypt sensitive data
|
|
33
|
+
*/
|
|
34
|
+
protected decrypt(data: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Get active auth token for provider
|
|
37
|
+
*/
|
|
38
|
+
getActiveToken(): Promise<AuthToken | null>;
|
|
39
|
+
/**
|
|
40
|
+
* Deactivate all tokens for provider
|
|
41
|
+
*/
|
|
42
|
+
deactivateAllTokens(): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Delete token by ID
|
|
45
|
+
*/
|
|
46
|
+
deleteToken(tokenId: string): Promise<void>;
|
|
47
|
+
}
|
|
48
|
+
export default BaseAuthService;
|
|
49
|
+
//# sourceMappingURL=BaseAuthService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseAuthService.d.ts","sourceRoot":"","sources":["../../../src/services/auth/BaseAuthService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAItD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,WAAW,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;CACjB;AAKD,8BAAsB,eAAe;IACnC,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC;gBAEpB,QAAQ,EAAE,WAAW;IAIjC;;OAEG;cACa,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5E;;OAEG;cACa,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAgBrF;;OAEG;cACa,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpE;;OAEG;IACH,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIvC;;OAEG;IACH,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIvC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IASjD;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAa1C;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAUlD;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
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.BaseAuthService = void 0;
|
|
7
|
+
const models_1 = require("../../models");
|
|
8
|
+
const crypto_1 = require("../../utils/crypto");
|
|
9
|
+
const logger_1 = __importDefault(require("../../utils/logger"));
|
|
10
|
+
// In-memory storage for OAuth login sessions (15 minute TTL)
|
|
11
|
+
const loginSessions = new Map();
|
|
12
|
+
class BaseAuthService {
|
|
13
|
+
constructor(provider) {
|
|
14
|
+
this.provider = provider;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Store OAuth login session in memory
|
|
18
|
+
*/
|
|
19
|
+
async storeLoginSession(session) {
|
|
20
|
+
loginSessions.set(session.sessionId, session);
|
|
21
|
+
// Auto-cleanup after expiration
|
|
22
|
+
setTimeout(() => {
|
|
23
|
+
loginSessions.delete(session.sessionId);
|
|
24
|
+
}, 15 * 60 * 1000);
|
|
25
|
+
logger_1.default.debug(`Stored login session: ${session.sessionId}`);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get OAuth login session
|
|
29
|
+
*/
|
|
30
|
+
async getLoginSession(sessionId) {
|
|
31
|
+
const session = loginSessions.get(sessionId);
|
|
32
|
+
if (!session) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
// Check expiration
|
|
36
|
+
if (new Date() > session.expiresAt) {
|
|
37
|
+
loginSessions.delete(sessionId);
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
return session;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Delete OAuth login session
|
|
44
|
+
*/
|
|
45
|
+
async deleteLoginSession(sessionId) {
|
|
46
|
+
loginSessions.delete(sessionId);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Encrypt sensitive data
|
|
50
|
+
*/
|
|
51
|
+
encrypt(data) {
|
|
52
|
+
return (0, crypto_1.encrypt)(data);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Decrypt sensitive data
|
|
56
|
+
*/
|
|
57
|
+
decrypt(data) {
|
|
58
|
+
return (0, crypto_1.decrypt)(data);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get active auth token for provider
|
|
62
|
+
*/
|
|
63
|
+
async getActiveToken() {
|
|
64
|
+
return await models_1.AuthToken.findOne({
|
|
65
|
+
where: {
|
|
66
|
+
provider: this.provider,
|
|
67
|
+
isActive: true,
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Deactivate all tokens for provider
|
|
73
|
+
*/
|
|
74
|
+
async deactivateAllTokens() {
|
|
75
|
+
await models_1.AuthToken.update({ isActive: false }, {
|
|
76
|
+
where: {
|
|
77
|
+
provider: this.provider,
|
|
78
|
+
isActive: true,
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
logger_1.default.info(`Deactivated all ${this.provider} tokens`);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Delete token by ID
|
|
85
|
+
*/
|
|
86
|
+
async deleteToken(tokenId) {
|
|
87
|
+
const token = await models_1.AuthToken.findByPk(tokenId);
|
|
88
|
+
if (!token || token.provider !== this.provider) {
|
|
89
|
+
throw new Error('Token not found');
|
|
90
|
+
}
|
|
91
|
+
await token.destroy();
|
|
92
|
+
logger_1.default.info(`Deleted ${this.provider} token: ${tokenId}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
exports.BaseAuthService = BaseAuthService;
|
|
96
|
+
exports.default = BaseAuthService;
|
|
97
|
+
//# sourceMappingURL=BaseAuthService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseAuthService.js","sourceRoot":"","sources":["../../../src/services/auth/BaseAuthService.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAsD;AACtD,+CAAsD;AACtD,gEAAwC;AAaxC,6DAA6D;AAC7D,MAAM,aAAa,GAAG,IAAI,GAAG,EAA6B,CAAC;AAE3D,MAAsB,eAAe;IAGnC,YAAY,QAAqB;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,iBAAiB,CAAC,OAA0B;QAC1D,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE9C,gCAAgC;QAChC,UAAU,CAAC,GAAG,EAAE;YACd,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAEnB,gBAAM,CAAC,KAAK,CAAC,yBAAyB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,eAAe,CAAC,SAAiB;QAC/C,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mBAAmB;QACnB,IAAI,IAAI,IAAI,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;YACnC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,kBAAkB,CAAC,SAAiB;QAClD,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACO,OAAO,CAAC,IAAY;QAC5B,OAAO,IAAA,gBAAO,EAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED;;OAEG;IACO,OAAO,CAAC,IAAY;QAC5B,OAAO,IAAA,gBAAO,EAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,OAAO,MAAM,kBAAS,CAAC,OAAO,CAAC;YAC7B,KAAK,EAAE;gBACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI;aACf;SACF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB;QACvB,MAAM,kBAAS,CAAC,MAAM,CACpB,EAAE,QAAQ,EAAE,KAAK,EAAE,EACnB;YACE,KAAK,EAAE;gBACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI;aACf;SACF,CACF,CAAC;QACF,gBAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,QAAQ,SAAS,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,MAAM,KAAK,GAAG,MAAM,kBAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEhD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QACtB,gBAAM,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ,WAAW,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC;CACF;AAtGD,0CAsGC;AAED,kBAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { BaseAuthService } from './BaseAuthService';
|
|
2
|
+
import { AuthToken } from '../../models';
|
|
3
|
+
export declare class ClaudeAuthService extends BaseAuthService {
|
|
4
|
+
private claudeConfigDir;
|
|
5
|
+
constructor();
|
|
6
|
+
/**
|
|
7
|
+
* Parse various callback input formats (URL, query params, or raw code)
|
|
8
|
+
* Based on n8n plugin implementation
|
|
9
|
+
*/
|
|
10
|
+
static parseCallbackInput(input: string): {
|
|
11
|
+
code?: string;
|
|
12
|
+
state?: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Start Claude OAuth login flow
|
|
16
|
+
*/
|
|
17
|
+
startLogin(options: {
|
|
18
|
+
loginWithClaudeAi?: boolean;
|
|
19
|
+
}): Promise<{
|
|
20
|
+
loginUrl: string;
|
|
21
|
+
sessionId: string;
|
|
22
|
+
state: string;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* Complete Claude OAuth login flow
|
|
26
|
+
*/
|
|
27
|
+
completeLogin(params: {
|
|
28
|
+
sessionId: string;
|
|
29
|
+
code: string;
|
|
30
|
+
state: string;
|
|
31
|
+
}): Promise<AuthToken>;
|
|
32
|
+
/**
|
|
33
|
+
* Load credentials from file on server startup
|
|
34
|
+
*/
|
|
35
|
+
loadFromFile(): Promise<AuthToken | null>;
|
|
36
|
+
/**
|
|
37
|
+
* Refresh Claude access token
|
|
38
|
+
*/
|
|
39
|
+
refreshToken(token: AuthToken): Promise<{
|
|
40
|
+
accessToken: string;
|
|
41
|
+
refreshToken?: string;
|
|
42
|
+
expiresAt: Date;
|
|
43
|
+
}>;
|
|
44
|
+
/**
|
|
45
|
+
* Get current authentication status
|
|
46
|
+
*/
|
|
47
|
+
getStatus(): Promise<{
|
|
48
|
+
loggedIn: boolean;
|
|
49
|
+
tokenId?: string;
|
|
50
|
+
email?: string;
|
|
51
|
+
expiresAt?: Date;
|
|
52
|
+
hasInferenceScope?: boolean;
|
|
53
|
+
}>;
|
|
54
|
+
/**
|
|
55
|
+
* Start Claude OAuth login flow for manual code entry
|
|
56
|
+
* Uses official Anthropic static callback page for displaying authorization code
|
|
57
|
+
*/
|
|
58
|
+
startLoginWithRedirect(_redirectUri?: string, loginWithClaudeAi?: boolean): Promise<{
|
|
59
|
+
loginUrl: string;
|
|
60
|
+
state: string;
|
|
61
|
+
}>;
|
|
62
|
+
/**
|
|
63
|
+
* Complete Claude OAuth login with manual code entry
|
|
64
|
+
* Accepts full callback URL or just the authorization code
|
|
65
|
+
*/
|
|
66
|
+
completeLoginFromCallback(code: string, state: string): Promise<AuthToken>;
|
|
67
|
+
}
|
|
68
|
+
export default ClaudeAuthService;
|
|
69
|
+
//# sourceMappingURL=ClaudeAuthService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeAuthService.d.ts","sourceRoot":"","sources":["../../../src/services/auth/ClaudeAuthService.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAqCzC,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,OAAO,CAAC,eAAe,CAAS;;IAOhC;;;OAGG;IACH,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IA+D3E;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE;QACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,GAAG,OAAO,CAAC;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAuCF;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE;QAC1B,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,SAAS,CAAC;IAmFtB;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAqC/C;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;QAC5C,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,IAAI,CAAC;KACjB,CAAC;IAiCF;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC;QACzB,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,IAAI,CAAC;QACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,CAAC;IAgBF;;;OAGG;IACG,sBAAsB,CAC1B,YAAY,CAAC,EAAE,MAAM,EACrB,iBAAiB,UAAO,GACvB,OAAO,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAsCF;;;OAGG;IACG,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;CAoGjF;AAED,eAAe,iBAAiB,CAAC"}
|