@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.
Files changed (239) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +652 -0
  3. package/dist/api/logsRouter.d.ts +20 -0
  4. package/dist/api/logsRouter.d.ts.map +1 -0
  5. package/dist/api/logsRouter.js +515 -0
  6. package/dist/api/logsRouter.js.map +1 -0
  7. package/dist/cli/dev-server.d.ts +7 -0
  8. package/dist/cli/dev-server.d.ts.map +1 -0
  9. package/dist/cli/dev-server.js +640 -0
  10. package/dist/cli/dev-server.js.map +1 -0
  11. package/dist/cli/index.d.ts +7 -0
  12. package/dist/cli/index.d.ts.map +1 -0
  13. package/dist/cli/index.js +26 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/core/StandardServer.d.ts +129 -0
  16. package/dist/core/StandardServer.d.ts.map +1 -0
  17. package/dist/core/StandardServer.js +453 -0
  18. package/dist/core/StandardServer.js.map +1 -0
  19. package/dist/core/apiResponse.d.ts +69 -0
  20. package/dist/core/apiResponse.d.ts.map +1 -0
  21. package/dist/core/apiResponse.js +127 -0
  22. package/dist/core/apiResponse.js.map +1 -0
  23. package/dist/core/healthCheck.d.ts +160 -0
  24. package/dist/core/healthCheck.d.ts.map +1 -0
  25. package/dist/core/healthCheck.js +398 -0
  26. package/dist/core/healthCheck.js.map +1 -0
  27. package/dist/core/index.d.ts +40 -0
  28. package/dist/core/index.d.ts.map +1 -0
  29. package/dist/core/index.js +40 -0
  30. package/dist/core/index.js.map +1 -0
  31. package/dist/core/logger.d.ts +117 -0
  32. package/dist/core/logger.d.ts.map +1 -0
  33. package/dist/core/logger.js +826 -0
  34. package/dist/core/logger.js.map +1 -0
  35. package/dist/core/portUtils.d.ts +71 -0
  36. package/dist/core/portUtils.d.ts.map +1 -0
  37. package/dist/core/portUtils.js +240 -0
  38. package/dist/core/portUtils.js.map +1 -0
  39. package/dist/core/storageService.d.ts +119 -0
  40. package/dist/core/storageService.d.ts.map +1 -0
  41. package/dist/core/storageService.js +405 -0
  42. package/dist/core/storageService.js.map +1 -0
  43. package/dist/desktop/bundler.d.ts +40 -0
  44. package/dist/desktop/bundler.d.ts.map +1 -0
  45. package/dist/desktop/bundler.js +176 -0
  46. package/dist/desktop/bundler.js.map +1 -0
  47. package/dist/desktop/index.d.ts +25 -0
  48. package/dist/desktop/index.d.ts.map +1 -0
  49. package/dist/desktop/index.js +15 -0
  50. package/dist/desktop/index.js.map +1 -0
  51. package/dist/desktop/native-modules.d.ts +66 -0
  52. package/dist/desktop/native-modules.d.ts.map +1 -0
  53. package/dist/desktop/native-modules.js +200 -0
  54. package/dist/desktop/native-modules.js.map +1 -0
  55. package/dist/index.d.ts +29 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +39 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/logging/LogCategories.d.ts +87 -0
  60. package/dist/logging/LogCategories.d.ts.map +1 -0
  61. package/dist/logging/LogCategories.js +205 -0
  62. package/dist/logging/LogCategories.js.map +1 -0
  63. package/dist/middleware/aiErrorHandler.d.ts +31 -0
  64. package/dist/middleware/aiErrorHandler.d.ts.map +1 -0
  65. package/dist/middleware/aiErrorHandler.js +181 -0
  66. package/dist/middleware/aiErrorHandler.js.map +1 -0
  67. package/dist/middleware/auth.d.ts +101 -0
  68. package/dist/middleware/auth.d.ts.map +1 -0
  69. package/dist/middleware/auth.js +230 -0
  70. package/dist/middleware/auth.js.map +1 -0
  71. package/dist/middleware/cors.d.ts +56 -0
  72. package/dist/middleware/cors.d.ts.map +1 -0
  73. package/dist/middleware/cors.js +123 -0
  74. package/dist/middleware/cors.js.map +1 -0
  75. package/dist/middleware/errorHandler.d.ts +13 -0
  76. package/dist/middleware/errorHandler.d.ts.map +1 -0
  77. package/dist/middleware/errorHandler.js +85 -0
  78. package/dist/middleware/errorHandler.js.map +1 -0
  79. package/dist/middleware/fileUpload.d.ts +62 -0
  80. package/dist/middleware/fileUpload.d.ts.map +1 -0
  81. package/dist/middleware/fileUpload.js +175 -0
  82. package/dist/middleware/fileUpload.js.map +1 -0
  83. package/dist/middleware/health.d.ts +48 -0
  84. package/dist/middleware/health.d.ts.map +1 -0
  85. package/dist/middleware/health.js +143 -0
  86. package/dist/middleware/health.js.map +1 -0
  87. package/dist/middleware/index.d.ts +20 -0
  88. package/dist/middleware/index.d.ts.map +1 -0
  89. package/dist/middleware/index.js +18 -0
  90. package/dist/middleware/index.js.map +1 -0
  91. package/dist/middleware/openapi.d.ts +64 -0
  92. package/dist/middleware/openapi.d.ts.map +1 -0
  93. package/dist/middleware/openapi.js +258 -0
  94. package/dist/middleware/openapi.js.map +1 -0
  95. package/dist/middleware/requestLogging.d.ts +22 -0
  96. package/dist/middleware/requestLogging.d.ts.map +1 -0
  97. package/dist/middleware/requestLogging.js +61 -0
  98. package/dist/middleware/requestLogging.js.map +1 -0
  99. package/dist/middleware/session.d.ts +84 -0
  100. package/dist/middleware/session.d.ts.map +1 -0
  101. package/dist/middleware/session.js +189 -0
  102. package/dist/middleware/session.js.map +1 -0
  103. package/dist/middleware/validation.d.ts +1337 -0
  104. package/dist/middleware/validation.d.ts.map +1 -0
  105. package/dist/middleware/validation.js +483 -0
  106. package/dist/middleware/validation.js.map +1 -0
  107. package/dist/services/aiService.d.ts +180 -0
  108. package/dist/services/aiService.d.ts.map +1 -0
  109. package/dist/services/aiService.js +547 -0
  110. package/dist/services/aiService.js.map +1 -0
  111. package/dist/services/conversationStorage.d.ts +38 -0
  112. package/dist/services/conversationStorage.d.ts.map +1 -0
  113. package/dist/services/conversationStorage.js +158 -0
  114. package/dist/services/conversationStorage.js.map +1 -0
  115. package/dist/services/crossPlatformBuffer.d.ts +84 -0
  116. package/dist/services/crossPlatformBuffer.d.ts.map +1 -0
  117. package/dist/services/crossPlatformBuffer.js +246 -0
  118. package/dist/services/crossPlatformBuffer.js.map +1 -0
  119. package/dist/services/index.d.ts +17 -0
  120. package/dist/services/index.d.ts.map +1 -0
  121. package/dist/services/index.js +18 -0
  122. package/dist/services/index.js.map +1 -0
  123. package/dist/services/networkService.d.ts +81 -0
  124. package/dist/services/networkService.d.ts.map +1 -0
  125. package/dist/services/networkService.js +268 -0
  126. package/dist/services/networkService.js.map +1 -0
  127. package/dist/services/queueService.d.ts +112 -0
  128. package/dist/services/queueService.d.ts.map +1 -0
  129. package/dist/services/queueService.js +338 -0
  130. package/dist/services/queueService.js.map +1 -0
  131. package/dist/services/settingsService.d.ts +135 -0
  132. package/dist/services/settingsService.d.ts.map +1 -0
  133. package/dist/services/settingsService.js +425 -0
  134. package/dist/services/settingsService.js.map +1 -0
  135. package/dist/services/systemMonitor.d.ts +208 -0
  136. package/dist/services/systemMonitor.d.ts.map +1 -0
  137. package/dist/services/systemMonitor.js +693 -0
  138. package/dist/services/systemMonitor.js.map +1 -0
  139. package/dist/services/updateService.d.ts +78 -0
  140. package/dist/services/updateService.d.ts.map +1 -0
  141. package/dist/services/updateService.js +252 -0
  142. package/dist/services/updateService.js.map +1 -0
  143. package/dist/services/websocketEvents.d.ts +372 -0
  144. package/dist/services/websocketEvents.d.ts.map +1 -0
  145. package/dist/services/websocketEvents.js +338 -0
  146. package/dist/services/websocketEvents.js.map +1 -0
  147. package/dist/services/websocketServer.d.ts +80 -0
  148. package/dist/services/websocketServer.d.ts.map +1 -0
  149. package/dist/services/websocketServer.js +299 -0
  150. package/dist/services/websocketServer.js.map +1 -0
  151. package/dist/settings/SettingsSchema.d.ts +151 -0
  152. package/dist/settings/SettingsSchema.d.ts.map +1 -0
  153. package/dist/settings/SettingsSchema.js +424 -0
  154. package/dist/settings/SettingsSchema.js.map +1 -0
  155. package/dist/testing/TestServer.d.ts +69 -0
  156. package/dist/testing/TestServer.d.ts.map +1 -0
  157. package/dist/testing/TestServer.js +250 -0
  158. package/dist/testing/TestServer.js.map +1 -0
  159. package/dist/types/index.d.ts +137 -0
  160. package/dist/types/index.d.ts.map +1 -0
  161. package/dist/types/index.js +5 -0
  162. package/dist/types/index.js.map +1 -0
  163. package/dist/utils/appPaths.d.ts +74 -0
  164. package/dist/utils/appPaths.d.ts.map +1 -0
  165. package/dist/utils/appPaths.js +162 -0
  166. package/dist/utils/appPaths.js.map +1 -0
  167. package/dist/utils/fs-utils.d.ts +50 -0
  168. package/dist/utils/fs-utils.d.ts.map +1 -0
  169. package/dist/utils/fs-utils.js +114 -0
  170. package/dist/utils/fs-utils.js.map +1 -0
  171. package/dist/utils/index.d.ts +12 -0
  172. package/dist/utils/index.d.ts.map +1 -0
  173. package/dist/utils/index.js +10 -0
  174. package/dist/utils/index.js.map +1 -0
  175. package/dist/utils/standardConfig.d.ts +61 -0
  176. package/dist/utils/standardConfig.d.ts.map +1 -0
  177. package/dist/utils/standardConfig.js +109 -0
  178. package/dist/utils/standardConfig.js.map +1 -0
  179. package/dist/utils/startupBanner.d.ts +34 -0
  180. package/dist/utils/startupBanner.d.ts.map +1 -0
  181. package/dist/utils/startupBanner.js +169 -0
  182. package/dist/utils/startupBanner.js.map +1 -0
  183. package/dist/utils/startupLogger.d.ts +45 -0
  184. package/dist/utils/startupLogger.d.ts.map +1 -0
  185. package/dist/utils/startupLogger.js +200 -0
  186. package/dist/utils/startupLogger.js.map +1 -0
  187. package/package.json +151 -0
  188. package/src/api/logsRouter.ts +600 -0
  189. package/src/cli/dev-server.ts +803 -0
  190. package/src/cli/index.ts +31 -0
  191. package/src/core/StandardServer.ts +587 -0
  192. package/src/core/apiResponse.ts +202 -0
  193. package/src/core/healthCheck.ts +565 -0
  194. package/src/core/index.ts +80 -0
  195. package/src/core/logger.ts +1092 -0
  196. package/src/core/portUtils.ts +319 -0
  197. package/src/core/storageService.ts +595 -0
  198. package/src/desktop/bundler.ts +271 -0
  199. package/src/desktop/index.ts +18 -0
  200. package/src/desktop/native-modules.ts +289 -0
  201. package/src/index.ts +142 -0
  202. package/src/logging/LogCategories.ts +302 -0
  203. package/src/middleware/aiErrorHandler.ts +278 -0
  204. package/src/middleware/auth.ts +329 -0
  205. package/src/middleware/cors.ts +187 -0
  206. package/src/middleware/errorHandler.ts +103 -0
  207. package/src/middleware/fileUpload.ts +252 -0
  208. package/src/middleware/health.ts +206 -0
  209. package/src/middleware/index.ts +71 -0
  210. package/src/middleware/openapi.ts +305 -0
  211. package/src/middleware/requestLogging.ts +92 -0
  212. package/src/middleware/session.ts +238 -0
  213. package/src/middleware/validation.ts +603 -0
  214. package/src/services/aiService.ts +789 -0
  215. package/src/services/conversationStorage.ts +232 -0
  216. package/src/services/crossPlatformBuffer.ts +341 -0
  217. package/src/services/index.ts +47 -0
  218. package/src/services/networkService.ts +351 -0
  219. package/src/services/queueService.ts +446 -0
  220. package/src/services/settingsService.ts +549 -0
  221. package/src/services/systemMonitor.ts +936 -0
  222. package/src/services/updateService.ts +334 -0
  223. package/src/services/websocketEvents.ts +409 -0
  224. package/src/services/websocketServer.ts +394 -0
  225. package/src/settings/SettingsSchema.ts +664 -0
  226. package/src/testing/TestServer.ts +312 -0
  227. package/src/types/index.ts +154 -0
  228. package/src/utils/appPaths.ts +196 -0
  229. package/src/utils/fs-utils.ts +130 -0
  230. package/src/utils/index.ts +15 -0
  231. package/src/utils/standardConfig.ts +178 -0
  232. package/src/utils/startupBanner.ts +287 -0
  233. package/src/utils/startupLogger.ts +268 -0
  234. package/ui/dist/index.d.mts +1221 -0
  235. package/ui/dist/index.d.ts +1221 -0
  236. package/ui/dist/index.js +73 -0
  237. package/ui/dist/index.js.map +1 -0
  238. package/ui/dist/index.mjs +73 -0
  239. 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"}