@chrishdx/llm-dev-server 1.0.0 → 1.1.1
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/backend/dist/cli.js +1 -34
- package/backend/dist/cli.js.map +1 -1
- package/backend/dist/controllers/AuthController.d.ts +1 -0
- package/backend/dist/controllers/AuthController.d.ts.map +1 -1
- package/backend/dist/controllers/AuthController.js +72 -0
- package/backend/dist/controllers/AuthController.js.map +1 -1
- package/backend/dist/controllers/ConversationController.d.ts +5 -0
- package/backend/dist/controllers/ConversationController.d.ts.map +1 -1
- package/backend/dist/controllers/ConversationController.js +26 -0
- package/backend/dist/controllers/ConversationController.js.map +1 -1
- package/backend/dist/controllers/JobController.js +2 -2
- package/backend/dist/controllers/JobController.js.map +1 -1
- package/backend/dist/index.js +1 -1
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/middleware/auth.middleware.d.ts +2 -1
- package/backend/dist/middleware/auth.middleware.d.ts.map +1 -1
- package/backend/dist/middleware/auth.middleware.js +67 -16
- package/backend/dist/middleware/auth.middleware.js.map +1 -1
- package/backend/dist/middleware/authelia.middleware.d.ts.map +1 -1
- package/backend/dist/middleware/authelia.middleware.js +39 -12
- package/backend/dist/middleware/authelia.middleware.js.map +1 -1
- package/backend/dist/models/ApiKey.d.ts +32 -0
- package/backend/dist/models/ApiKey.d.ts.map +1 -0
- package/backend/dist/models/ApiKey.js +86 -0
- package/backend/dist/models/ApiKey.js.map +1 -0
- package/backend/dist/models/Webhook.d.ts +33 -0
- package/backend/dist/models/Webhook.d.ts.map +1 -0
- package/backend/dist/models/Webhook.js +85 -0
- package/backend/dist/models/Webhook.js.map +1 -0
- package/backend/dist/models/index.d.ts +4 -0
- package/backend/dist/models/index.d.ts.map +1 -1
- package/backend/dist/models/index.js +7 -1
- package/backend/dist/models/index.js.map +1 -1
- package/backend/dist/routes/apiKeys.routes.d.ts +3 -0
- package/backend/dist/routes/apiKeys.routes.d.ts.map +1 -0
- package/backend/dist/routes/apiKeys.routes.js +129 -0
- package/backend/dist/routes/apiKeys.routes.js.map +1 -0
- package/backend/dist/routes/auth.routes.d.ts.map +1 -1
- package/backend/dist/routes/auth.routes.js +2 -0
- package/backend/dist/routes/auth.routes.js.map +1 -1
- package/backend/dist/routes/conversation.routes.d.ts.map +1 -1
- package/backend/dist/routes/conversation.routes.js +1 -0
- package/backend/dist/routes/conversation.routes.js.map +1 -1
- package/backend/dist/routes/filesystem.routes.d.ts.map +1 -1
- package/backend/dist/routes/filesystem.routes.js +21 -0
- package/backend/dist/routes/filesystem.routes.js.map +1 -1
- package/backend/dist/routes/index.d.ts.map +1 -1
- package/backend/dist/routes/index.js +4 -0
- package/backend/dist/routes/index.js.map +1 -1
- package/backend/dist/routes/webhooks.routes.d.ts +3 -0
- package/backend/dist/routes/webhooks.routes.d.ts.map +1 -0
- package/backend/dist/routes/webhooks.routes.js +204 -0
- package/backend/dist/routes/webhooks.routes.js.map +1 -0
- package/backend/dist/services/ApiKeyService.d.ts +52 -0
- package/backend/dist/services/ApiKeyService.d.ts.map +1 -0
- package/backend/dist/services/ApiKeyService.js +149 -0
- package/backend/dist/services/ApiKeyService.js.map +1 -0
- package/backend/dist/services/WebhookService.d.ts +56 -0
- package/backend/dist/services/WebhookService.d.ts.map +1 -0
- package/backend/dist/services/WebhookService.js +179 -0
- package/backend/dist/services/WebhookService.js.map +1 -0
- package/backend/dist/services/conversation/ConversationService.d.ts +20 -0
- package/backend/dist/services/conversation/ConversationService.d.ts.map +1 -1
- package/backend/dist/services/conversation/ConversationService.js +43 -0
- package/backend/dist/services/conversation/ConversationService.js.map +1 -1
- package/backend/dist/services/job/JobService.d.ts +1 -1
- package/backend/dist/services/job/JobService.d.ts.map +1 -1
- package/backend/dist/services/job/JobService.js +18 -1
- package/backend/dist/services/job/JobService.js.map +1 -1
- package/backend/dist/services/llm/ClaudeProvider.d.ts +8 -0
- package/backend/dist/services/llm/ClaudeProvider.d.ts.map +1 -1
- package/backend/dist/services/llm/ClaudeProvider.js +129 -10
- package/backend/dist/services/llm/ClaudeProvider.js.map +1 -1
- package/backend/dist/services/llm/CodexProvider.d.ts.map +1 -1
- package/backend/dist/services/llm/CodexProvider.js +29 -3
- package/backend/dist/services/llm/CodexProvider.js.map +1 -1
- package/backend/dist/services/llm/GeminiProvider.d.ts +4 -0
- package/backend/dist/services/llm/GeminiProvider.d.ts.map +1 -1
- package/backend/dist/services/llm/GeminiProvider.js +61 -1
- package/backend/dist/services/llm/GeminiProvider.js.map +1 -1
- package/backend/dist/utils/crypto.js +2 -35
- package/backend/dist/utils/crypto.js.map +1 -1
- package/backend/dist/utils/git.d.ts +11 -0
- package/backend/dist/utils/git.d.ts.map +1 -0
- package/backend/dist/utils/git.js +93 -0
- package/backend/dist/utils/git.js.map +1 -0
- package/backend/public/assets/index-C5FA1UMN.js +189 -0
- package/backend/public/index.html +1 -1
- package/package.json +1 -1
- package/shared/dist/types/conversation.d.ts +16 -0
- package/shared/dist/types/conversation.d.ts.map +1 -1
- package/shared/dist/types/job.d.ts +1 -1
- package/shared/dist/types/job.d.ts.map +1 -1
- package/backend/public/assets/index-C207-KqP.js +0 -188
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem.routes.js","sourceRoot":"","sources":["../../src/routes/filesystem.routes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"filesystem.routes.js","sourceRoot":"","sources":["../../src/routes/filesystem.routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAoBxB,eAAe,MAAM,CAAC"}
|
|
@@ -8,11 +8,15 @@ const auth_routes_1 = __importDefault(require("./auth.routes"));
|
|
|
8
8
|
const job_routes_1 = __importDefault(require("./job.routes"));
|
|
9
9
|
const conversation_routes_1 = __importDefault(require("./conversation.routes"));
|
|
10
10
|
const filesystem_routes_1 = __importDefault(require("./filesystem.routes"));
|
|
11
|
+
const apiKeys_routes_1 = __importDefault(require("./apiKeys.routes"));
|
|
12
|
+
const webhooks_routes_1 = __importDefault(require("./webhooks.routes"));
|
|
11
13
|
const router = (0, express_1.Router)();
|
|
12
14
|
router.use("/auth", auth_routes_1.default);
|
|
13
15
|
router.use("/jobs", job_routes_1.default);
|
|
14
16
|
router.use("/conversations", conversation_routes_1.default);
|
|
15
17
|
router.use("/filesystem", filesystem_routes_1.default);
|
|
18
|
+
router.use("/keys", apiKeys_routes_1.default);
|
|
19
|
+
router.use("/webhooks", webhooks_routes_1.default);
|
|
16
20
|
router.get("/health", (req, res) => {
|
|
17
21
|
res.json({
|
|
18
22
|
data: {
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":";;;;;AAAA,qCAAiC;AACjC,gEAAuC;AACvC,8DAAqC;AACrC,gFAAuD;AACvD,4EAAmD;AACnD,sEAA6C;AAC7C,wEAA+C;AAE/C,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;AAC5C,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,wBAAa,CAAC,CAAC;AACnC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,yBAAc,CAAC,CAAC;AAExC,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":"webhooks.routes.d.ts","sourceRoot":"","sources":["../../src/routes/webhooks.routes.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA8OxB,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,204 @@
|
|
|
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_middleware_1 = require("../middleware/auth.middleware");
|
|
8
|
+
const WebhookService_1 = require("../services/WebhookService");
|
|
9
|
+
const validators_1 = require("../utils/validators");
|
|
10
|
+
const joi_1 = __importDefault(require("joi"));
|
|
11
|
+
const logger_1 = __importDefault(require("../utils/logger"));
|
|
12
|
+
const router = (0, express_1.Router)();
|
|
13
|
+
// Valid webhook events
|
|
14
|
+
const validEvents = [
|
|
15
|
+
"job.created",
|
|
16
|
+
"job.updated",
|
|
17
|
+
"job.completed",
|
|
18
|
+
"job.failed",
|
|
19
|
+
"job.cancelled",
|
|
20
|
+
"conversation.created",
|
|
21
|
+
"conversation.updated",
|
|
22
|
+
"message.created",
|
|
23
|
+
"message.streaming",
|
|
24
|
+
"message.completed",
|
|
25
|
+
"tool.called",
|
|
26
|
+
"tool.completed",
|
|
27
|
+
];
|
|
28
|
+
// Validation schemas
|
|
29
|
+
const createWebhookSchema = joi_1.default.object({
|
|
30
|
+
name: joi_1.default.string().min(1).max(100).required().messages({
|
|
31
|
+
"string.min": "Name muss mindestens 1 Zeichen lang sein",
|
|
32
|
+
"string.max": "Name darf maximal 100 Zeichen lang sein",
|
|
33
|
+
"any.required": "Name ist erforderlich",
|
|
34
|
+
}),
|
|
35
|
+
url: joi_1.default.string().uri().required().messages({
|
|
36
|
+
"string.uri": "Ungültige URL",
|
|
37
|
+
"any.required": "URL ist erforderlich",
|
|
38
|
+
}),
|
|
39
|
+
events: joi_1.default.array()
|
|
40
|
+
.items(joi_1.default.string().valid(...validEvents))
|
|
41
|
+
.min(1)
|
|
42
|
+
.required()
|
|
43
|
+
.messages({
|
|
44
|
+
"array.min": "Mindestens ein Event muss ausgewählt werden",
|
|
45
|
+
"any.required": "Events sind erforderlich",
|
|
46
|
+
}),
|
|
47
|
+
});
|
|
48
|
+
const updateWebhookSchema = joi_1.default.object({
|
|
49
|
+
name: joi_1.default.string().min(1).max(100).optional(),
|
|
50
|
+
url: joi_1.default.string().uri().optional(),
|
|
51
|
+
events: joi_1.default.array()
|
|
52
|
+
.items(joi_1.default.string().valid(...validEvents))
|
|
53
|
+
.min(1)
|
|
54
|
+
.optional(),
|
|
55
|
+
active: joi_1.default.boolean().optional(),
|
|
56
|
+
});
|
|
57
|
+
/**
|
|
58
|
+
* GET /api/webhooks/events - List available webhook events
|
|
59
|
+
*/
|
|
60
|
+
router.get("/events", auth_middleware_1.authMiddleware, async (req, res) => {
|
|
61
|
+
res.json({
|
|
62
|
+
data: {
|
|
63
|
+
events: validEvents,
|
|
64
|
+
descriptions: {
|
|
65
|
+
"job.created": "Wird ausgelöst wenn ein neuer Job erstellt wird",
|
|
66
|
+
"job.updated": "Wird ausgelöst wenn ein Job aktualisiert wird",
|
|
67
|
+
"job.completed": "Wird ausgelöst wenn ein Job erfolgreich abgeschlossen wird",
|
|
68
|
+
"job.failed": "Wird ausgelöst wenn ein Job fehlschlägt",
|
|
69
|
+
"job.cancelled": "Wird ausgelöst wenn ein Job abgebrochen wird",
|
|
70
|
+
"conversation.created": "Wird ausgelöst wenn eine neue Konversation erstellt wird",
|
|
71
|
+
"conversation.updated": "Wird ausgelöst wenn eine Konversation aktualisiert wird",
|
|
72
|
+
"message.created": "Wird ausgelöst wenn eine Nachricht erstellt wird",
|
|
73
|
+
"message.streaming": "Wird während des Streamings von LLM-Antworten ausgelöst",
|
|
74
|
+
"message.completed": "Wird ausgelöst wenn eine LLM-Antwort vollständig ist",
|
|
75
|
+
"tool.called": "Wird ausgelöst wenn ein Tool aufgerufen wird",
|
|
76
|
+
"tool.completed": "Wird ausgelöst wenn ein Tool-Aufruf abgeschlossen ist",
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
/**
|
|
82
|
+
* POST /api/webhooks - Create new webhook
|
|
83
|
+
* Returns the secret only once!
|
|
84
|
+
*/
|
|
85
|
+
router.post("/", auth_middleware_1.authMiddleware, async (req, res) => {
|
|
86
|
+
try {
|
|
87
|
+
const { name, url, events } = (0, validators_1.validate)(createWebhookSchema, req.body);
|
|
88
|
+
const result = await WebhookService_1.WebhookService.createWebhook(req.user.userId, name, url, events);
|
|
89
|
+
res.status(201).json({
|
|
90
|
+
data: {
|
|
91
|
+
...result.webhook,
|
|
92
|
+
secret: result.secret, // Only shown here, never again!
|
|
93
|
+
message: "Bewahren Sie das Secret sicher auf. Es wird nur einmal angezeigt!",
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
99
|
+
logger_1.default.error("Failed to create webhook:", message);
|
|
100
|
+
res.status(400).json({ error: "Fehler beim Erstellen des Webhooks", message });
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
/**
|
|
104
|
+
* GET /api/webhooks - List all webhooks for current user
|
|
105
|
+
*/
|
|
106
|
+
router.get("/", auth_middleware_1.authMiddleware, async (req, res) => {
|
|
107
|
+
try {
|
|
108
|
+
const webhooks = await WebhookService_1.WebhookService.listWebhooks(req.user.userId);
|
|
109
|
+
res.json({ data: webhooks });
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
113
|
+
logger_1.default.error("Failed to list webhooks:", message);
|
|
114
|
+
res.status(500).json({ error: "Fehler beim Abrufen der Webhooks", message });
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
/**
|
|
118
|
+
* PATCH /api/webhooks/:id - Update webhook
|
|
119
|
+
*/
|
|
120
|
+
router.patch("/:id", auth_middleware_1.authMiddleware, async (req, res) => {
|
|
121
|
+
try {
|
|
122
|
+
const updates = (0, validators_1.validate)(updateWebhookSchema, req.body);
|
|
123
|
+
const webhook = await WebhookService_1.WebhookService.updateWebhook(req.user.userId, req.params.id, updates);
|
|
124
|
+
if (!webhook) {
|
|
125
|
+
res.status(404).json({ error: "Webhook nicht gefunden" });
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
res.json({ data: webhook });
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
132
|
+
logger_1.default.error("Failed to update webhook:", message);
|
|
133
|
+
res.status(400).json({ error: "Fehler beim Aktualisieren des Webhooks", message });
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
/**
|
|
137
|
+
* DELETE /api/webhooks/:id - Delete webhook
|
|
138
|
+
*/
|
|
139
|
+
router.delete("/:id", auth_middleware_1.authMiddleware, async (req, res) => {
|
|
140
|
+
try {
|
|
141
|
+
const success = await WebhookService_1.WebhookService.deleteWebhook(req.user.userId, req.params.id);
|
|
142
|
+
if (!success) {
|
|
143
|
+
res.status(404).json({ error: "Webhook nicht gefunden" });
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
res.json({ data: { message: "Webhook wurde gelöscht" } });
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
150
|
+
logger_1.default.error("Failed to delete webhook:", message);
|
|
151
|
+
res.status(500).json({ error: "Fehler beim Löschen des Webhooks", message });
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
/**
|
|
155
|
+
* POST /api/webhooks/:id/regenerate-secret - Regenerate webhook secret
|
|
156
|
+
*/
|
|
157
|
+
router.post("/:id/regenerate-secret", auth_middleware_1.authMiddleware, async (req, res) => {
|
|
158
|
+
try {
|
|
159
|
+
const secret = await WebhookService_1.WebhookService.regenerateSecret(req.user.userId, req.params.id);
|
|
160
|
+
if (!secret) {
|
|
161
|
+
res.status(404).json({ error: "Webhook nicht gefunden" });
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
res.json({
|
|
165
|
+
data: {
|
|
166
|
+
secret,
|
|
167
|
+
message: "Neues Secret generiert. Bewahren Sie es sicher auf!",
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
173
|
+
logger_1.default.error("Failed to regenerate webhook secret:", message);
|
|
174
|
+
res.status(500).json({
|
|
175
|
+
error: "Fehler beim Generieren des neuen Secrets",
|
|
176
|
+
message,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
/**
|
|
181
|
+
* POST /api/webhooks/:id/test - Test webhook
|
|
182
|
+
*/
|
|
183
|
+
router.post("/:id/test", auth_middleware_1.authMiddleware, async (req, res) => {
|
|
184
|
+
try {
|
|
185
|
+
// Trigger a test event
|
|
186
|
+
await WebhookService_1.WebhookService.triggerEvent(req.user.userId, "job.created", {
|
|
187
|
+
test: true,
|
|
188
|
+
message: "Dies ist ein Test-Webhook",
|
|
189
|
+
timestamp: new Date().toISOString(),
|
|
190
|
+
});
|
|
191
|
+
res.json({
|
|
192
|
+
data: {
|
|
193
|
+
message: "Test-Webhook wurde gesendet",
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
199
|
+
logger_1.default.error("Failed to test webhook:", message);
|
|
200
|
+
res.status(500).json({ error: "Fehler beim Testen des Webhooks", message });
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
exports.default = router;
|
|
204
|
+
//# sourceMappingURL=webhooks.routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhooks.routes.js","sourceRoot":"","sources":["../../src/routes/webhooks.routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface GeneratedApiKey {
|
|
2
|
+
key: string;
|
|
3
|
+
keyId: string;
|
|
4
|
+
keyPrefix: string;
|
|
5
|
+
name: string;
|
|
6
|
+
expiresAt: Date | null;
|
|
7
|
+
}
|
|
8
|
+
export interface ApiKeyInfo {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
keyPrefix: string;
|
|
12
|
+
lastUsedAt: Date | null;
|
|
13
|
+
expiresAt: Date | null;
|
|
14
|
+
revokedAt: Date | null;
|
|
15
|
+
createdAt: Date;
|
|
16
|
+
isValid: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare class ApiKeyService {
|
|
19
|
+
/**
|
|
20
|
+
* Generate a new API key
|
|
21
|
+
* Returns the full key only once - it cannot be retrieved later!
|
|
22
|
+
*/
|
|
23
|
+
static createKey(userId: string, name: string, expiresAt?: Date): Promise<GeneratedApiKey>;
|
|
24
|
+
/**
|
|
25
|
+
* Validate an API key and return the associated user ID
|
|
26
|
+
* Also updates lastUsedAt timestamp
|
|
27
|
+
*/
|
|
28
|
+
static validateKey(key: string): Promise<{
|
|
29
|
+
userId: string;
|
|
30
|
+
keyId: string;
|
|
31
|
+
} | null>;
|
|
32
|
+
/**
|
|
33
|
+
* List all API keys for a user (without secrets)
|
|
34
|
+
*/
|
|
35
|
+
static listKeys(userId: string): Promise<ApiKeyInfo[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Revoke an API key
|
|
38
|
+
*/
|
|
39
|
+
static revokeKey(userId: string, keyId: string): Promise<boolean>;
|
|
40
|
+
/**
|
|
41
|
+
* Update API key metadata (name, expiration)
|
|
42
|
+
*/
|
|
43
|
+
static updateKey(userId: string, keyId: string, updates: {
|
|
44
|
+
name?: string;
|
|
45
|
+
expiresAt?: Date | null;
|
|
46
|
+
}): Promise<ApiKeyInfo | null>;
|
|
47
|
+
/**
|
|
48
|
+
* Delete an API key permanently
|
|
49
|
+
*/
|
|
50
|
+
static deleteKey(userId: string, keyId: string): Promise<boolean>;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=ApiKeyService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiKeyService.d.ts","sourceRoot":"","sources":["../../src/services/ApiKeyService.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,aAAa;IACxB;;;OAGG;WACU,SAAS,CACpB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,IAAI,GACf,OAAO,CAAC,eAAe,CAAC;IAgC3B;;;OAGG;WACU,WAAW,CACtB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IA0CpD;;OAEG;WACU,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAkB5D;;OAEG;WACU,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAevE;;OAEG;WACU,SAAS,CACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE,GAClD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAuB7B;;OAEG;WACU,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAOxE"}
|
|
@@ -0,0 +1,149 @@
|
|
|
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.ApiKeyService = void 0;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
const ApiKey_1 = require("../models/ApiKey");
|
|
9
|
+
const crypto_2 = require("../utils/crypto");
|
|
10
|
+
const logger_1 = __importDefault(require("../utils/logger"));
|
|
11
|
+
const API_KEY_PREFIX = "sk-";
|
|
12
|
+
const API_KEY_BYTES = 32; // 256 bits of entropy
|
|
13
|
+
class ApiKeyService {
|
|
14
|
+
/**
|
|
15
|
+
* Generate a new API key
|
|
16
|
+
* Returns the full key only once - it cannot be retrieved later!
|
|
17
|
+
*/
|
|
18
|
+
static async createKey(userId, name, expiresAt) {
|
|
19
|
+
// Generate random key bytes
|
|
20
|
+
const keyBytes = crypto_1.default.randomBytes(API_KEY_BYTES);
|
|
21
|
+
const keyBase64 = keyBytes.toString("base64url");
|
|
22
|
+
const fullKey = `${API_KEY_PREFIX}${keyBase64}`;
|
|
23
|
+
// Create prefix for display (first 8 chars of the random part)
|
|
24
|
+
const keyPrefix = `${API_KEY_PREFIX}${keyBase64.substring(0, 8)}`;
|
|
25
|
+
// Hash the key for storage (we never store the plain key)
|
|
26
|
+
const keyHash = await (0, crypto_2.hashPassword)(fullKey);
|
|
27
|
+
// Create the key record
|
|
28
|
+
const apiKey = await ApiKey_1.ApiKey.create({
|
|
29
|
+
userId,
|
|
30
|
+
name,
|
|
31
|
+
keyHash,
|
|
32
|
+
keyPrefix,
|
|
33
|
+
expiresAt: expiresAt || null,
|
|
34
|
+
});
|
|
35
|
+
logger_1.default.info(`API key created: ${keyPrefix}... for user ${userId}`);
|
|
36
|
+
return {
|
|
37
|
+
key: fullKey, // Only returned here, never again!
|
|
38
|
+
keyId: apiKey.id,
|
|
39
|
+
keyPrefix,
|
|
40
|
+
name,
|
|
41
|
+
expiresAt: expiresAt || null,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Validate an API key and return the associated user ID
|
|
46
|
+
* Also updates lastUsedAt timestamp
|
|
47
|
+
*/
|
|
48
|
+
static async validateKey(key) {
|
|
49
|
+
// Basic format check
|
|
50
|
+
if (!key.startsWith(API_KEY_PREFIX)) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
// Extract prefix for efficient lookup
|
|
54
|
+
const keyBase64 = key.substring(API_KEY_PREFIX.length);
|
|
55
|
+
const keyPrefix = `${API_KEY_PREFIX}${keyBase64.substring(0, 8)}`;
|
|
56
|
+
// Find all keys with matching prefix (should be very few)
|
|
57
|
+
const potentialKeys = await ApiKey_1.ApiKey.findAll({
|
|
58
|
+
where: {
|
|
59
|
+
keyPrefix,
|
|
60
|
+
revokedAt: null,
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
// Check each potential key
|
|
64
|
+
for (const apiKey of potentialKeys) {
|
|
65
|
+
// Check if key matches
|
|
66
|
+
const matches = await (0, crypto_2.comparePassword)(key, apiKey.keyHash);
|
|
67
|
+
if (!matches)
|
|
68
|
+
continue;
|
|
69
|
+
// Check if expired
|
|
70
|
+
if (apiKey.expiresAt && new Date() > apiKey.expiresAt) {
|
|
71
|
+
logger_1.default.warn(`Attempted use of expired API key: ${keyPrefix}...`);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
// Update last used timestamp
|
|
75
|
+
await apiKey.update({ lastUsedAt: new Date() });
|
|
76
|
+
return {
|
|
77
|
+
userId: apiKey.userId,
|
|
78
|
+
keyId: apiKey.id,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* List all API keys for a user (without secrets)
|
|
85
|
+
*/
|
|
86
|
+
static async listKeys(userId) {
|
|
87
|
+
const keys = await ApiKey_1.ApiKey.findAll({
|
|
88
|
+
where: { userId },
|
|
89
|
+
order: [["createdAt", "DESC"]],
|
|
90
|
+
});
|
|
91
|
+
return keys.map((key) => ({
|
|
92
|
+
id: key.id,
|
|
93
|
+
name: key.name,
|
|
94
|
+
keyPrefix: key.keyPrefix,
|
|
95
|
+
lastUsedAt: key.lastUsedAt,
|
|
96
|
+
expiresAt: key.expiresAt,
|
|
97
|
+
revokedAt: key.revokedAt,
|
|
98
|
+
createdAt: key.createdAt,
|
|
99
|
+
isValid: key.isValid(),
|
|
100
|
+
}));
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Revoke an API key
|
|
104
|
+
*/
|
|
105
|
+
static async revokeKey(userId, keyId) {
|
|
106
|
+
const key = await ApiKey_1.ApiKey.findOne({
|
|
107
|
+
where: { id: keyId, userId },
|
|
108
|
+
});
|
|
109
|
+
if (!key) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
await key.update({ revokedAt: new Date() });
|
|
113
|
+
logger_1.default.info(`API key revoked: ${key.keyPrefix}... for user ${userId}`);
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Update API key metadata (name, expiration)
|
|
118
|
+
*/
|
|
119
|
+
static async updateKey(userId, keyId, updates) {
|
|
120
|
+
const key = await ApiKey_1.ApiKey.findOne({
|
|
121
|
+
where: { id: keyId, userId },
|
|
122
|
+
});
|
|
123
|
+
if (!key) {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
await key.update(updates);
|
|
127
|
+
return {
|
|
128
|
+
id: key.id,
|
|
129
|
+
name: key.name,
|
|
130
|
+
keyPrefix: key.keyPrefix,
|
|
131
|
+
lastUsedAt: key.lastUsedAt,
|
|
132
|
+
expiresAt: key.expiresAt,
|
|
133
|
+
revokedAt: key.revokedAt,
|
|
134
|
+
createdAt: key.createdAt,
|
|
135
|
+
isValid: key.isValid(),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Delete an API key permanently
|
|
140
|
+
*/
|
|
141
|
+
static async deleteKey(userId, keyId) {
|
|
142
|
+
const deleted = await ApiKey_1.ApiKey.destroy({
|
|
143
|
+
where: { id: keyId, userId },
|
|
144
|
+
});
|
|
145
|
+
return deleted > 0;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
exports.ApiKeyService = ApiKeyService;
|
|
149
|
+
//# sourceMappingURL=ApiKeyService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiKeyService.js","sourceRoot":"","sources":["../../src/services/ApiKeyService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { WebhookEvent } from "../models/Webhook";
|
|
2
|
+
export interface WebhookPayload {
|
|
3
|
+
event: WebhookEvent;
|
|
4
|
+
timestamp: string;
|
|
5
|
+
data: Record<string, unknown>;
|
|
6
|
+
}
|
|
7
|
+
export interface WebhookInfo {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
url: string;
|
|
11
|
+
events: WebhookEvent[];
|
|
12
|
+
active: boolean;
|
|
13
|
+
lastTriggeredAt: Date | null;
|
|
14
|
+
lastStatusCode: number | null;
|
|
15
|
+
failureCount: number;
|
|
16
|
+
createdAt: Date;
|
|
17
|
+
}
|
|
18
|
+
export declare class WebhookService {
|
|
19
|
+
/**
|
|
20
|
+
* Create a new webhook
|
|
21
|
+
*/
|
|
22
|
+
static createWebhook(userId: string, name: string, url: string, events: WebhookEvent[]): Promise<{
|
|
23
|
+
webhook: WebhookInfo;
|
|
24
|
+
secret: string;
|
|
25
|
+
}>;
|
|
26
|
+
/**
|
|
27
|
+
* List all webhooks for a user
|
|
28
|
+
*/
|
|
29
|
+
static listWebhooks(userId: string): Promise<WebhookInfo[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Update webhook
|
|
32
|
+
*/
|
|
33
|
+
static updateWebhook(userId: string, webhookId: string, updates: {
|
|
34
|
+
name?: string;
|
|
35
|
+
url?: string;
|
|
36
|
+
events?: WebhookEvent[];
|
|
37
|
+
active?: boolean;
|
|
38
|
+
}): Promise<WebhookInfo | null>;
|
|
39
|
+
/**
|
|
40
|
+
* Delete webhook
|
|
41
|
+
*/
|
|
42
|
+
static deleteWebhook(userId: string, webhookId: string): Promise<boolean>;
|
|
43
|
+
/**
|
|
44
|
+
* Regenerate webhook secret
|
|
45
|
+
*/
|
|
46
|
+
static regenerateSecret(userId: string, webhookId: string): Promise<string | null>;
|
|
47
|
+
/**
|
|
48
|
+
* Trigger webhooks for an event
|
|
49
|
+
*/
|
|
50
|
+
static triggerEvent(userId: string, event: WebhookEvent, data: Record<string, unknown>): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Send webhook with HMAC signature
|
|
53
|
+
*/
|
|
54
|
+
private static sendWebhook;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=WebhookService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebhookService.d.ts","sourceRoot":"","sources":["../../src/services/WebhookService.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAK1D,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,IAAI,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,qBAAa,cAAc;IACzB;;OAEG;WACU,aAAa,CACxB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,YAAY,EAAE,GACrB,OAAO,CAAC;QAAE,OAAO,EAAE,WAAW,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA8BpD;;OAEG;WACU,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAmBjE;;OAEG;WACU,aAAa,CACxB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAClF,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAwB9B;;OAEG;WACU,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ/E;;OAEG;WACU,gBAAgB,CAC3B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAezB;;OAEG;WACU,YAAY,CACvB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC;IA0BhB;;OAEG;mBACkB,WAAW;CAoDjC"}
|