@superdangerous/app-framework 4.9.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 +652 -0
- package/dist/api/logsRouter.d.ts +20 -0
- package/dist/api/logsRouter.d.ts.map +1 -0
- package/dist/api/logsRouter.js +515 -0
- package/dist/api/logsRouter.js.map +1 -0
- package/dist/cli/dev-server.d.ts +7 -0
- package/dist/cli/dev-server.d.ts.map +1 -0
- package/dist/cli/dev-server.js +640 -0
- package/dist/cli/dev-server.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +26 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/StandardServer.d.ts +129 -0
- package/dist/core/StandardServer.d.ts.map +1 -0
- package/dist/core/StandardServer.js +453 -0
- package/dist/core/StandardServer.js.map +1 -0
- package/dist/core/apiResponse.d.ts +69 -0
- package/dist/core/apiResponse.d.ts.map +1 -0
- package/dist/core/apiResponse.js +127 -0
- package/dist/core/apiResponse.js.map +1 -0
- package/dist/core/healthCheck.d.ts +160 -0
- package/dist/core/healthCheck.d.ts.map +1 -0
- package/dist/core/healthCheck.js +398 -0
- package/dist/core/healthCheck.js.map +1 -0
- package/dist/core/index.d.ts +40 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +40 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/logger.d.ts +117 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +826 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/portUtils.d.ts +71 -0
- package/dist/core/portUtils.d.ts.map +1 -0
- package/dist/core/portUtils.js +240 -0
- package/dist/core/portUtils.js.map +1 -0
- package/dist/core/storageService.d.ts +119 -0
- package/dist/core/storageService.d.ts.map +1 -0
- package/dist/core/storageService.js +405 -0
- package/dist/core/storageService.js.map +1 -0
- package/dist/desktop/bundler.d.ts +40 -0
- package/dist/desktop/bundler.d.ts.map +1 -0
- package/dist/desktop/bundler.js +176 -0
- package/dist/desktop/bundler.js.map +1 -0
- package/dist/desktop/index.d.ts +25 -0
- package/dist/desktop/index.d.ts.map +1 -0
- package/dist/desktop/index.js +15 -0
- package/dist/desktop/index.js.map +1 -0
- package/dist/desktop/native-modules.d.ts +66 -0
- package/dist/desktop/native-modules.d.ts.map +1 -0
- package/dist/desktop/native-modules.js +200 -0
- package/dist/desktop/native-modules.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/LogCategories.d.ts +87 -0
- package/dist/logging/LogCategories.d.ts.map +1 -0
- package/dist/logging/LogCategories.js +205 -0
- package/dist/logging/LogCategories.js.map +1 -0
- package/dist/middleware/aiErrorHandler.d.ts +31 -0
- package/dist/middleware/aiErrorHandler.d.ts.map +1 -0
- package/dist/middleware/aiErrorHandler.js +181 -0
- package/dist/middleware/aiErrorHandler.js.map +1 -0
- package/dist/middleware/auth.d.ts +101 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +230 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/cors.d.ts +56 -0
- package/dist/middleware/cors.d.ts.map +1 -0
- package/dist/middleware/cors.js +123 -0
- package/dist/middleware/cors.js.map +1 -0
- package/dist/middleware/errorHandler.d.ts +13 -0
- package/dist/middleware/errorHandler.d.ts.map +1 -0
- package/dist/middleware/errorHandler.js +85 -0
- package/dist/middleware/errorHandler.js.map +1 -0
- package/dist/middleware/fileUpload.d.ts +62 -0
- package/dist/middleware/fileUpload.d.ts.map +1 -0
- package/dist/middleware/fileUpload.js +175 -0
- package/dist/middleware/fileUpload.js.map +1 -0
- package/dist/middleware/health.d.ts +48 -0
- package/dist/middleware/health.d.ts.map +1 -0
- package/dist/middleware/health.js +143 -0
- package/dist/middleware/health.js.map +1 -0
- package/dist/middleware/index.d.ts +20 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +18 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/openapi.d.ts +64 -0
- package/dist/middleware/openapi.d.ts.map +1 -0
- package/dist/middleware/openapi.js +258 -0
- package/dist/middleware/openapi.js.map +1 -0
- package/dist/middleware/requestLogging.d.ts +22 -0
- package/dist/middleware/requestLogging.d.ts.map +1 -0
- package/dist/middleware/requestLogging.js +61 -0
- package/dist/middleware/requestLogging.js.map +1 -0
- package/dist/middleware/session.d.ts +84 -0
- package/dist/middleware/session.d.ts.map +1 -0
- package/dist/middleware/session.js +189 -0
- package/dist/middleware/session.js.map +1 -0
- package/dist/middleware/validation.d.ts +1337 -0
- package/dist/middleware/validation.d.ts.map +1 -0
- package/dist/middleware/validation.js +483 -0
- package/dist/middleware/validation.js.map +1 -0
- package/dist/services/aiService.d.ts +180 -0
- package/dist/services/aiService.d.ts.map +1 -0
- package/dist/services/aiService.js +547 -0
- package/dist/services/aiService.js.map +1 -0
- package/dist/services/conversationStorage.d.ts +38 -0
- package/dist/services/conversationStorage.d.ts.map +1 -0
- package/dist/services/conversationStorage.js +158 -0
- package/dist/services/conversationStorage.js.map +1 -0
- package/dist/services/crossPlatformBuffer.d.ts +84 -0
- package/dist/services/crossPlatformBuffer.d.ts.map +1 -0
- package/dist/services/crossPlatformBuffer.js +246 -0
- package/dist/services/crossPlatformBuffer.js.map +1 -0
- package/dist/services/index.d.ts +17 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +18 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/networkService.d.ts +81 -0
- package/dist/services/networkService.d.ts.map +1 -0
- package/dist/services/networkService.js +268 -0
- package/dist/services/networkService.js.map +1 -0
- package/dist/services/queueService.d.ts +112 -0
- package/dist/services/queueService.d.ts.map +1 -0
- package/dist/services/queueService.js +338 -0
- package/dist/services/queueService.js.map +1 -0
- package/dist/services/settingsService.d.ts +135 -0
- package/dist/services/settingsService.d.ts.map +1 -0
- package/dist/services/settingsService.js +425 -0
- package/dist/services/settingsService.js.map +1 -0
- package/dist/services/systemMonitor.d.ts +208 -0
- package/dist/services/systemMonitor.d.ts.map +1 -0
- package/dist/services/systemMonitor.js +693 -0
- package/dist/services/systemMonitor.js.map +1 -0
- package/dist/services/updateService.d.ts +78 -0
- package/dist/services/updateService.d.ts.map +1 -0
- package/dist/services/updateService.js +252 -0
- package/dist/services/updateService.js.map +1 -0
- package/dist/services/websocketEvents.d.ts +372 -0
- package/dist/services/websocketEvents.d.ts.map +1 -0
- package/dist/services/websocketEvents.js +338 -0
- package/dist/services/websocketEvents.js.map +1 -0
- package/dist/services/websocketServer.d.ts +80 -0
- package/dist/services/websocketServer.d.ts.map +1 -0
- package/dist/services/websocketServer.js +299 -0
- package/dist/services/websocketServer.js.map +1 -0
- package/dist/settings/SettingsSchema.d.ts +151 -0
- package/dist/settings/SettingsSchema.d.ts.map +1 -0
- package/dist/settings/SettingsSchema.js +424 -0
- package/dist/settings/SettingsSchema.js.map +1 -0
- package/dist/testing/TestServer.d.ts +69 -0
- package/dist/testing/TestServer.d.ts.map +1 -0
- package/dist/testing/TestServer.js +250 -0
- package/dist/testing/TestServer.js.map +1 -0
- package/dist/types/index.d.ts +137 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/appPaths.d.ts +74 -0
- package/dist/utils/appPaths.d.ts.map +1 -0
- package/dist/utils/appPaths.js +162 -0
- package/dist/utils/appPaths.js.map +1 -0
- package/dist/utils/fs-utils.d.ts +50 -0
- package/dist/utils/fs-utils.d.ts.map +1 -0
- package/dist/utils/fs-utils.js +114 -0
- package/dist/utils/fs-utils.js.map +1 -0
- package/dist/utils/index.d.ts +12 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/standardConfig.d.ts +61 -0
- package/dist/utils/standardConfig.d.ts.map +1 -0
- package/dist/utils/standardConfig.js +109 -0
- package/dist/utils/standardConfig.js.map +1 -0
- package/dist/utils/startupBanner.d.ts +34 -0
- package/dist/utils/startupBanner.d.ts.map +1 -0
- package/dist/utils/startupBanner.js +169 -0
- package/dist/utils/startupBanner.js.map +1 -0
- package/dist/utils/startupLogger.d.ts +45 -0
- package/dist/utils/startupLogger.d.ts.map +1 -0
- package/dist/utils/startupLogger.js +200 -0
- package/dist/utils/startupLogger.js.map +1 -0
- package/package.json +151 -0
- package/src/api/logsRouter.ts +600 -0
- package/src/cli/dev-server.ts +803 -0
- package/src/cli/index.ts +31 -0
- package/src/core/StandardServer.ts +587 -0
- package/src/core/apiResponse.ts +202 -0
- package/src/core/healthCheck.ts +565 -0
- package/src/core/index.ts +80 -0
- package/src/core/logger.ts +1092 -0
- package/src/core/portUtils.ts +319 -0
- package/src/core/storageService.ts +595 -0
- package/src/desktop/bundler.ts +271 -0
- package/src/desktop/index.ts +18 -0
- package/src/desktop/native-modules.ts +289 -0
- package/src/index.ts +142 -0
- package/src/logging/LogCategories.ts +302 -0
- package/src/middleware/aiErrorHandler.ts +278 -0
- package/src/middleware/auth.ts +329 -0
- package/src/middleware/cors.ts +187 -0
- package/src/middleware/errorHandler.ts +103 -0
- package/src/middleware/fileUpload.ts +252 -0
- package/src/middleware/health.ts +206 -0
- package/src/middleware/index.ts +71 -0
- package/src/middleware/openapi.ts +305 -0
- package/src/middleware/requestLogging.ts +92 -0
- package/src/middleware/session.ts +238 -0
- package/src/middleware/validation.ts +603 -0
- package/src/services/aiService.ts +789 -0
- package/src/services/conversationStorage.ts +232 -0
- package/src/services/crossPlatformBuffer.ts +341 -0
- package/src/services/index.ts +47 -0
- package/src/services/networkService.ts +351 -0
- package/src/services/queueService.ts +446 -0
- package/src/services/settingsService.ts +549 -0
- package/src/services/systemMonitor.ts +936 -0
- package/src/services/updateService.ts +334 -0
- package/src/services/websocketEvents.ts +409 -0
- package/src/services/websocketServer.ts +394 -0
- package/src/settings/SettingsSchema.ts +664 -0
- package/src/testing/TestServer.ts +312 -0
- package/src/types/index.ts +154 -0
- package/src/utils/appPaths.ts +196 -0
- package/src/utils/fs-utils.ts +130 -0
- package/src/utils/index.ts +15 -0
- package/src/utils/standardConfig.ts +178 -0
- package/src/utils/startupBanner.ts +287 -0
- package/src/utils/startupLogger.ts +268 -0
- package/ui/dist/index.d.mts +1221 -0
- package/ui/dist/index.d.ts +1221 -0
- package/ui/dist/index.js +73 -0
- package/ui/dist/index.js.map +1 -0
- package/ui/dist/index.mjs +73 -0
- package/ui/dist/index.mjs.map +1 -0
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Log Categories System
|
|
3
|
+
* Provides a declarative way to define log categories with automatic UI generation
|
|
4
|
+
*/
|
|
5
|
+
export const LogLevels = {
|
|
6
|
+
error: {
|
|
7
|
+
name: "error",
|
|
8
|
+
color: "text-red-600 dark:text-red-400",
|
|
9
|
+
badge: "bg-red-600 text-white",
|
|
10
|
+
priority: 0,
|
|
11
|
+
},
|
|
12
|
+
warn: {
|
|
13
|
+
name: "warn",
|
|
14
|
+
color: "text-amber-600 dark:text-amber-400",
|
|
15
|
+
badge: "bg-amber-500 text-white",
|
|
16
|
+
priority: 1,
|
|
17
|
+
},
|
|
18
|
+
info: {
|
|
19
|
+
name: "info",
|
|
20
|
+
color: "text-blue-600 dark:text-blue-400",
|
|
21
|
+
badge: "bg-blue-600 text-white",
|
|
22
|
+
priority: 2,
|
|
23
|
+
},
|
|
24
|
+
debug: {
|
|
25
|
+
name: "debug",
|
|
26
|
+
color: "text-gray-600 dark:text-gray-400",
|
|
27
|
+
badge: "bg-gray-600 text-white",
|
|
28
|
+
priority: 3,
|
|
29
|
+
},
|
|
30
|
+
verbose: {
|
|
31
|
+
name: "verbose",
|
|
32
|
+
color: "text-gray-500 dark:text-gray-500",
|
|
33
|
+
badge: "bg-gray-500 text-white",
|
|
34
|
+
priority: 4,
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Default log viewer configuration
|
|
39
|
+
*/
|
|
40
|
+
export const defaultLogViewerConfig = {
|
|
41
|
+
categories: [
|
|
42
|
+
{
|
|
43
|
+
id: "system",
|
|
44
|
+
label: "System",
|
|
45
|
+
description: "Core system operations",
|
|
46
|
+
enabled: true,
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
id: "api",
|
|
50
|
+
label: "API",
|
|
51
|
+
description: "API requests and responses",
|
|
52
|
+
enabled: true,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
id: "auth",
|
|
56
|
+
label: "Authentication",
|
|
57
|
+
description: "Authentication and authorization",
|
|
58
|
+
enabled: true,
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
id: "database",
|
|
62
|
+
label: "Database",
|
|
63
|
+
description: "Database operations",
|
|
64
|
+
enabled: true,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
id: "service",
|
|
68
|
+
label: "Services",
|
|
69
|
+
description: "Background services",
|
|
70
|
+
enabled: true,
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
defaultLevel: "info",
|
|
74
|
+
maxLogEntries: 1000,
|
|
75
|
+
enableRealtime: true,
|
|
76
|
+
enableExport: true,
|
|
77
|
+
enableArchives: true,
|
|
78
|
+
archiveRetentionDays: 7,
|
|
79
|
+
horizontalScroll: true,
|
|
80
|
+
timestampFormat: "YYYY-MM-DD HH:mm:ss.SSS",
|
|
81
|
+
showCategories: true,
|
|
82
|
+
showMetadata: true,
|
|
83
|
+
theme: "system",
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Helper to parse log entries from different formats
|
|
87
|
+
*/
|
|
88
|
+
export function parseLogEntry(raw) {
|
|
89
|
+
try {
|
|
90
|
+
if (typeof raw === "string") {
|
|
91
|
+
// Try to parse JSON log format
|
|
92
|
+
if (raw.trim().startsWith("{")) {
|
|
93
|
+
return JSON.parse(raw);
|
|
94
|
+
}
|
|
95
|
+
// Parse text log format: "2023-10-20 10:30:45.123 [INFO] [Category] Message"
|
|
96
|
+
const match = raw.match(/^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3})\s+\[(\w+)\]\s+(?:\[([^\]]+)\]\s+)?(.*)$/);
|
|
97
|
+
if (match) {
|
|
98
|
+
const [, timestamp, level, category, message] = match;
|
|
99
|
+
return {
|
|
100
|
+
id: `${Date.now()}-${Math.random()}`,
|
|
101
|
+
timestamp: timestamp || "",
|
|
102
|
+
level: (level?.toLowerCase() || "info"),
|
|
103
|
+
category: category || "",
|
|
104
|
+
message: message || "",
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else if (typeof raw === "object") {
|
|
109
|
+
return raw;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch (_error) {
|
|
113
|
+
console.error("Failed to parse log entry:", _error);
|
|
114
|
+
}
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Helper to format log entries for display
|
|
119
|
+
*/
|
|
120
|
+
export function formatLogEntry(entry, format = "full") {
|
|
121
|
+
if (format === "compact") {
|
|
122
|
+
return `${entry.timestamp} [${entry.level.toUpperCase()}] ${entry.message}`;
|
|
123
|
+
}
|
|
124
|
+
let formatted = `${entry.timestamp} [${entry.level.toUpperCase()}]`;
|
|
125
|
+
if (entry.category) {
|
|
126
|
+
formatted += ` [${entry.category}]`;
|
|
127
|
+
}
|
|
128
|
+
formatted += ` ${entry.message}`;
|
|
129
|
+
if (entry.metadata && Object.keys(entry.metadata).length > 0) {
|
|
130
|
+
formatted += "\n Metadata: " + JSON.stringify(entry.metadata, null, 2);
|
|
131
|
+
}
|
|
132
|
+
if (entry.stack) {
|
|
133
|
+
formatted += "\n Stack: " + entry.stack;
|
|
134
|
+
}
|
|
135
|
+
return formatted;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Calculate log statistics
|
|
139
|
+
*/
|
|
140
|
+
export function calculateLogStats(entries) {
|
|
141
|
+
const stats = {
|
|
142
|
+
total: entries.length,
|
|
143
|
+
byLevel: {},
|
|
144
|
+
byCategory: {},
|
|
145
|
+
errorRate: 0,
|
|
146
|
+
warnRate: 0,
|
|
147
|
+
};
|
|
148
|
+
for (const entry of entries) {
|
|
149
|
+
// Count by level
|
|
150
|
+
stats.byLevel[entry.level] = (stats.byLevel[entry.level] || 0) + 1;
|
|
151
|
+
// Count by category
|
|
152
|
+
if (entry.category) {
|
|
153
|
+
stats.byCategory[entry.category] =
|
|
154
|
+
(stats.byCategory[entry.category] || 0) + 1;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// Calculate rates
|
|
158
|
+
if (stats.total > 0) {
|
|
159
|
+
stats.errorRate = (stats.byLevel.error || 0) / stats.total;
|
|
160
|
+
stats.warnRate = (stats.byLevel.warn || 0) / stats.total;
|
|
161
|
+
}
|
|
162
|
+
return stats;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Filter log entries
|
|
166
|
+
*/
|
|
167
|
+
export function filterLogEntries(entries, filter) {
|
|
168
|
+
return entries.filter((entry) => {
|
|
169
|
+
// Filter by level
|
|
170
|
+
if (filter.levels &&
|
|
171
|
+
filter.levels.length > 0 &&
|
|
172
|
+
!filter.levels.includes(entry.level)) {
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
// Filter by category
|
|
176
|
+
if (filter.categories &&
|
|
177
|
+
filter.categories.length > 0 &&
|
|
178
|
+
entry.category &&
|
|
179
|
+
!filter.categories.includes(entry.category)) {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
// Filter by search term
|
|
183
|
+
if (filter.search) {
|
|
184
|
+
const searchLower = filter.search.toLowerCase();
|
|
185
|
+
const inMessage = entry.message.toLowerCase().includes(searchLower);
|
|
186
|
+
const inCategory = entry.category?.toLowerCase().includes(searchLower);
|
|
187
|
+
const inMetadata = entry.metadata
|
|
188
|
+
? JSON.stringify(entry.metadata).toLowerCase().includes(searchLower)
|
|
189
|
+
: false;
|
|
190
|
+
if (!inMessage && !inCategory && !inMetadata) {
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Filter by date range
|
|
195
|
+
const entryDate = new Date(entry.timestamp);
|
|
196
|
+
if (filter.startDate && entryDate < filter.startDate) {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
if (filter.endDate && entryDate > filter.endDate) {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
return true;
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=LogCategories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogCategories.js","sourceRoot":"","sources":["../../src/logging/LogCategories.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Error Handler Middleware
|
|
3
|
+
* Provides user-friendly error messages for AI API errors
|
|
4
|
+
*/
|
|
5
|
+
import { Request, Response, NextFunction } from "express";
|
|
6
|
+
import { ApiResponse } from "../types/index.js";
|
|
7
|
+
import { AIError } from "../services/aiService.js";
|
|
8
|
+
/**
|
|
9
|
+
* AI-specific error handler middleware
|
|
10
|
+
*/
|
|
11
|
+
export declare function aiErrorHandler(err: any, _req: Request, res: Response<ApiResponse<any>>, next: NextFunction): void;
|
|
12
|
+
/**
|
|
13
|
+
* Rate limit handler for AI endpoints
|
|
14
|
+
*/
|
|
15
|
+
export declare function aiRateLimitHandler(_req: Request, res: Response<ApiResponse<any>>): void;
|
|
16
|
+
/**
|
|
17
|
+
* Create AI error with user-friendly message
|
|
18
|
+
*/
|
|
19
|
+
export declare function createAIError(message: string, userMessage: string, status?: number, details?: string[], action?: string): AIError;
|
|
20
|
+
/**
|
|
21
|
+
* Wrap async AI handlers with error handling
|
|
22
|
+
*/
|
|
23
|
+
export declare function wrapAIHandler(handler: (req: Request, res: Response, next: NextFunction) => Promise<void>): (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
24
|
+
declare const _default: {
|
|
25
|
+
aiErrorHandler: typeof aiErrorHandler;
|
|
26
|
+
aiRateLimitHandler: typeof aiRateLimitHandler;
|
|
27
|
+
createAIError: typeof createAIError;
|
|
28
|
+
wrapAIHandler: typeof wrapAIHandler;
|
|
29
|
+
};
|
|
30
|
+
export default _default;
|
|
31
|
+
//# sourceMappingURL=aiErrorHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aiErrorHandler.d.ts","sourceRoot":"","sources":["../../src/middleware/aiErrorHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAmBnD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAC/B,IAAI,EAAE,YAAY,GACjB,IAAI,CAkLN;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAC9B,IAAI,CAMN;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,MAAY,EACpB,OAAO,CAAC,EAAE,MAAM,EAAE,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAOT;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,IAE7D,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAgB9D;;;;;;;AAED,wBAKE"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Error Handler Middleware
|
|
3
|
+
* Provides user-friendly error messages for AI API errors
|
|
4
|
+
*/
|
|
5
|
+
import { createLogger } from "../core/index.js";
|
|
6
|
+
import { sendError, sendUnauthorized } from "../core/apiResponse.js";
|
|
7
|
+
import { AIError } from "../services/aiService.js";
|
|
8
|
+
let logger; // Will be initialized when needed
|
|
9
|
+
function ensureLogger() {
|
|
10
|
+
if (!logger) {
|
|
11
|
+
logger = createLogger("AIError");
|
|
12
|
+
}
|
|
13
|
+
return logger;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* AI-specific error handler middleware
|
|
17
|
+
*/
|
|
18
|
+
export function aiErrorHandler(err, _req, res, next) {
|
|
19
|
+
// Only handle AI-related errors
|
|
20
|
+
if (!_req.path.startsWith("/api/ai/")) {
|
|
21
|
+
return next(err);
|
|
22
|
+
}
|
|
23
|
+
ensureLogger().error("AI Error:", {
|
|
24
|
+
path: _req.path,
|
|
25
|
+
method: _req.method,
|
|
26
|
+
error: err.message,
|
|
27
|
+
status: err.statusCode || err.status,
|
|
28
|
+
stack: err.stack,
|
|
29
|
+
errorType: err.errorType,
|
|
30
|
+
provider: err.provider,
|
|
31
|
+
});
|
|
32
|
+
// Handle our custom AIError instances
|
|
33
|
+
if (err instanceof AIError) {
|
|
34
|
+
const response = {
|
|
35
|
+
error: err.message,
|
|
36
|
+
code: err.errorType,
|
|
37
|
+
};
|
|
38
|
+
// Add provider-specific information
|
|
39
|
+
if (err.provider) {
|
|
40
|
+
response.details = [`Provider: ${err.provider}`];
|
|
41
|
+
}
|
|
42
|
+
// Handle specific error types
|
|
43
|
+
switch (err.errorType) {
|
|
44
|
+
case "AUTH_ERROR":
|
|
45
|
+
sendUnauthorized(res, err.message);
|
|
46
|
+
return;
|
|
47
|
+
case "RATE_LIMIT":
|
|
48
|
+
sendError(res, err.message, 429, { retryAfter: 60 });
|
|
49
|
+
return;
|
|
50
|
+
case "SERVICE_UNAVAILABLE":
|
|
51
|
+
sendError(res, err.message, 503);
|
|
52
|
+
return;
|
|
53
|
+
case "TIMEOUT":
|
|
54
|
+
sendError(res, err.message, 408);
|
|
55
|
+
return;
|
|
56
|
+
default:
|
|
57
|
+
sendError(res, err.message, err.statusCode, response);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Handle legacy structured AI errors with user-friendly messages
|
|
62
|
+
if (err.userMessage) {
|
|
63
|
+
const response = {
|
|
64
|
+
error: err.userMessage,
|
|
65
|
+
};
|
|
66
|
+
if (err.details) {
|
|
67
|
+
response.details = err.details;
|
|
68
|
+
}
|
|
69
|
+
if (err.actionRequired) {
|
|
70
|
+
response.action = err.actionRequired;
|
|
71
|
+
}
|
|
72
|
+
if (err.code) {
|
|
73
|
+
response.code = err.code;
|
|
74
|
+
}
|
|
75
|
+
sendError(res, err.userMessage, err.status || 500, {
|
|
76
|
+
details: err.details,
|
|
77
|
+
action: err.actionRequired,
|
|
78
|
+
code: err.code,
|
|
79
|
+
});
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// Handle OpenAI specific errors
|
|
83
|
+
if (err.message && err.message.includes("401")) {
|
|
84
|
+
sendUnauthorized(res, "OpenAI API authentication failed: Invalid or missing API key. Check your OpenAI API key configuration");
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (err.message && err.message.includes("429")) {
|
|
88
|
+
sendError(res, "OpenAI API rate limit exceeded: Too many requests. Please wait a moment before trying again", 429);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (err.message && err.message.includes("insufficient_quota")) {
|
|
92
|
+
sendError(res, "OpenAI API quota exceeded: Your account has insufficient quota. Check your OpenAI account billing and usage limits", 402);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// Handle Anthropic specific errors
|
|
96
|
+
if (err.message && err.message.includes("anthropic")) {
|
|
97
|
+
if (err.message.includes("401")) {
|
|
98
|
+
sendUnauthorized(res, "Anthropic API authentication failed: Invalid or missing API key");
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (err.message.includes("rate")) {
|
|
102
|
+
sendError(res, "Anthropic API rate limit exceeded: Too many requests", 429);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Handle JSON parse errors
|
|
107
|
+
if (err.message && err.message.includes("JSON")) {
|
|
108
|
+
sendError(res, "Failed to generate valid template format: The AI response was not in the expected format", 500);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
// Handle missing required fields
|
|
112
|
+
if (err.message && err.message.includes("missing required fields")) {
|
|
113
|
+
sendError(res, "Generated template is incomplete: Missing required fields", 500);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
// Handle API key errors
|
|
117
|
+
if (err.message && err.message.includes("API key")) {
|
|
118
|
+
sendUnauthorized(res, "AI API key not configured: Please configure your API key");
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
// Handle timeout errors
|
|
122
|
+
if (err.message &&
|
|
123
|
+
(err.message.includes("timeout") || err.message.includes("ETIMEDOUT"))) {
|
|
124
|
+
sendError(res, "AI request timed out: The request took too long to complete", 504);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
// Handle network errors
|
|
128
|
+
if (err.message &&
|
|
129
|
+
(err.message.includes("ECONNREFUSED") || err.message.includes("ENOTFOUND"))) {
|
|
130
|
+
sendError(res, "AI service unavailable: Cannot connect to AI service", 503);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
// Default error response
|
|
134
|
+
sendError(res, err.message || "An error occurred while processing your AI request", err.status || 500);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Rate limit handler for AI endpoints
|
|
138
|
+
*/
|
|
139
|
+
export function aiRateLimitHandler(_req, res) {
|
|
140
|
+
sendError(res, "Too many AI requests: Rate limit exceeded. Please wait a moment before trying again", 429);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Create AI error with user-friendly message
|
|
144
|
+
*/
|
|
145
|
+
export function createAIError(message, userMessage, status = 500, details, action) {
|
|
146
|
+
const error = new AIError(message, status, "CUSTOM_ERROR", "unknown");
|
|
147
|
+
// Additional legacy properties for compatibility
|
|
148
|
+
error.userMessage = userMessage;
|
|
149
|
+
error.details = details;
|
|
150
|
+
error.actionRequired = action;
|
|
151
|
+
return error;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Wrap async AI handlers with error handling
|
|
155
|
+
*/
|
|
156
|
+
export function wrapAIHandler(handler) {
|
|
157
|
+
return async (req, res, next) => {
|
|
158
|
+
try {
|
|
159
|
+
await handler(req, res, next);
|
|
160
|
+
}
|
|
161
|
+
catch (_error) {
|
|
162
|
+
// Convert to AI error if needed
|
|
163
|
+
if (!_error.userMessage && _error.response?.data) {
|
|
164
|
+
// Handle API response errors
|
|
165
|
+
const apiError = _error.response.data;
|
|
166
|
+
_error.userMessage =
|
|
167
|
+
apiError.error?.message || apiError.message || "AI request failed";
|
|
168
|
+
_error.status = _error.response.status;
|
|
169
|
+
_error.details = apiError.error?.details || [apiError.error?.type];
|
|
170
|
+
}
|
|
171
|
+
next(_error);
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
export default {
|
|
176
|
+
aiErrorHandler,
|
|
177
|
+
aiRateLimitHandler,
|
|
178
|
+
createAIError,
|
|
179
|
+
wrapAIHandler,
|
|
180
|
+
};
|
|
181
|
+
//# sourceMappingURL=aiErrorHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aiErrorHandler.js","sourceRoot":"","sources":["../../src/middleware/aiErrorHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication Middleware
|
|
3
|
+
* Generic authentication utilities for Express applications
|
|
4
|
+
*/
|
|
5
|
+
import { Request, Response, NextFunction } from "express";
|
|
6
|
+
declare global {
|
|
7
|
+
namespace Express {
|
|
8
|
+
interface Request {
|
|
9
|
+
user?: {
|
|
10
|
+
id: string;
|
|
11
|
+
username: string;
|
|
12
|
+
roles?: string[];
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
declare module "express-session" {
|
|
18
|
+
interface SessionData {
|
|
19
|
+
authenticated?: boolean;
|
|
20
|
+
username?: string;
|
|
21
|
+
userId?: string;
|
|
22
|
+
roles?: string[];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export interface AuthConfig {
|
|
26
|
+
loginPath?: string;
|
|
27
|
+
apiPrefix?: string;
|
|
28
|
+
excludePaths?: string[];
|
|
29
|
+
onUnauthorized?: (req: Request, res: Response) => void;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Creates authentication middleware with configuration
|
|
33
|
+
*/
|
|
34
|
+
export declare function createAuthMiddleware(config?: AuthConfig): (req: Request, res: Response, next: NextFunction) => void;
|
|
35
|
+
/**
|
|
36
|
+
* Login handler factory
|
|
37
|
+
*/
|
|
38
|
+
export interface LoginCredentials {
|
|
39
|
+
username: string;
|
|
40
|
+
password: string;
|
|
41
|
+
}
|
|
42
|
+
export interface AuthService {
|
|
43
|
+
validateCredentials: (credentials: LoginCredentials) => Promise<{
|
|
44
|
+
valid: boolean;
|
|
45
|
+
user?: {
|
|
46
|
+
id: string;
|
|
47
|
+
username: string;
|
|
48
|
+
roles?: string[];
|
|
49
|
+
};
|
|
50
|
+
error?: string;
|
|
51
|
+
}>;
|
|
52
|
+
}
|
|
53
|
+
export declare function createLoginHandler(authService: AuthService): (req: Request, res: Response) => Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Logout handler factory
|
|
56
|
+
*/
|
|
57
|
+
export declare function createLogoutHandler(): (req: Request, res: Response) => void;
|
|
58
|
+
/**
|
|
59
|
+
* Auth check handler
|
|
60
|
+
*/
|
|
61
|
+
export declare function createAuthCheckHandler(): (req: Request, res: Response) => void;
|
|
62
|
+
/**
|
|
63
|
+
* Role-based access control middleware
|
|
64
|
+
*/
|
|
65
|
+
export declare function requireRole(roles: string | string[]): (req: Request, res: Response, next: NextFunction) => void;
|
|
66
|
+
/**
|
|
67
|
+
* Simple in-memory auth service for development
|
|
68
|
+
*/
|
|
69
|
+
export declare class SimpleAuthService implements AuthService {
|
|
70
|
+
private users;
|
|
71
|
+
constructor(users?: Array<{
|
|
72
|
+
username: string;
|
|
73
|
+
password: string;
|
|
74
|
+
id?: string;
|
|
75
|
+
roles?: string[];
|
|
76
|
+
}>);
|
|
77
|
+
validateCredentials(credentials: LoginCredentials): Promise<{
|
|
78
|
+
valid: boolean;
|
|
79
|
+
error: string;
|
|
80
|
+
user?: undefined;
|
|
81
|
+
} | {
|
|
82
|
+
valid: boolean;
|
|
83
|
+
user: {
|
|
84
|
+
id: string;
|
|
85
|
+
username: string;
|
|
86
|
+
roles: string[] | undefined;
|
|
87
|
+
};
|
|
88
|
+
error?: undefined;
|
|
89
|
+
}>;
|
|
90
|
+
addUser(username: string, password: string, roles?: string[]): void;
|
|
91
|
+
}
|
|
92
|
+
declare const _default: {
|
|
93
|
+
createAuthMiddleware: typeof createAuthMiddleware;
|
|
94
|
+
createLoginHandler: typeof createLoginHandler;
|
|
95
|
+
createLogoutHandler: typeof createLogoutHandler;
|
|
96
|
+
createAuthCheckHandler: typeof createAuthCheckHandler;
|
|
97
|
+
requireRole: typeof requireRole;
|
|
98
|
+
SimpleAuthService: typeof SimpleAuthService;
|
|
99
|
+
};
|
|
100
|
+
export default _default;
|
|
101
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAa1D,OAAO,CAAC,MAAM,CAAC;IAEb,UAAU,OAAO,CAAC;QAChB,UAAU,OAAO;YACf,IAAI,CAAC,EAAE;gBACL,EAAE,EAAE,MAAM,CAAC;gBACX,QAAQ,EAAE,MAAM,CAAC;gBACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;aAClB,CAAC;SACH;KACF;CACF;AAGD,OAAO,QAAQ,iBAAiB,CAAC;IAC/B,UAAU,WAAW;QACnB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;KAClB;CACF;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAC;CACxD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,UAAe,IASxD,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,MAAM,YAAY,KACjB,IAAI,CAmCR;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,mBAAmB,EAAE,CAAC,WAAW,EAAE,gBAAgB,KAAK,OAAO,CAAC;QAC9D,KAAK,EAAE,OAAO,CAAC;QACf,IAAI,CAAC,EAAE;YACL,EAAE,EAAE,MAAM,CAAC;YACX,QAAQ,EAAE,MAAM,CAAC;YACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;SAClB,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,WAAW,IAC3C,KAAK,OAAO,EAAE,KAAK,QAAQ,KAAG,OAAO,CAAC,IAAI,CAAC,CAmD1D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,KACzB,KAAK,OAAO,EAAE,KAAK,QAAQ,KAAG,IAAI,CAoB3C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,KAC5B,KAAK,OAAO,EAAE,KAAK,QAAQ,KAAG,IAAI,CAe3C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,IAG1C,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAuB/D;AAED;;GAEG;AACH,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,KAAK,CAGX;gBAGA,KAAK,GAAE,KAAK,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;KAClB,CAAM;IAyBH,mBAAmB,CAAC,WAAW,EAAE,gBAAgB;;;;;;;;;;;;;IAoBvD,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE;CAO7D;;;;;;;;;AAED,wBAOE"}
|