@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 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/middleware/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,483 @@
1
+ /**
2
+ * Validation Middleware
3
+ * Request validation using Zod schemas with TypeScript support
4
+ *
5
+ * Features:
6
+ * - Request body, params, and query validation
7
+ * - Detailed field-level error reporting
8
+ * - Custom error messages
9
+ * - Async validation support
10
+ * - Schema composition and reuse
11
+ * - Full TypeScript type inference
12
+ */
13
+ import { z, ZodError } from "zod";
14
+ /**
15
+ * Default validation options
16
+ */
17
+ const defaultOptions = {
18
+ abortEarly: false,
19
+ stripUnknown: true,
20
+ convert: true,
21
+ allowUnknown: false,
22
+ };
23
+ /**
24
+ * Format validation errors into a consistent structure
25
+ */
26
+ function formatValidationErrors(error) {
27
+ return error.errors.map((err) => ({
28
+ field: err.path.join("."),
29
+ message: err.message,
30
+ }));
31
+ }
32
+ /**
33
+ * Create a user-friendly error message
34
+ */
35
+ function createErrorMessage(errors, context) {
36
+ if (errors.length === 1) {
37
+ return `${context}: ${errors[0].message}`;
38
+ }
39
+ const fieldList = errors.map((e) => e.field).join(", ");
40
+ return `${context}: Multiple validation errors in fields: ${fieldList}`;
41
+ }
42
+ /**
43
+ * Validation schemas for different endpoints
44
+ */
45
+ export const schemas = {
46
+ // Template validation
47
+ template: z.object({
48
+ id: z
49
+ .string()
50
+ .regex(/^[a-zA-Z0-9_-]+$/, "ID must contain only letters, numbers, underscores, and hyphens"),
51
+ name: z.string().min(1, "Name is required").max(100),
52
+ description: z.string().max(500).optional(),
53
+ manufacturer: z.string().min(1, "Manufacturer is required"),
54
+ model: z.string().optional(),
55
+ protocol: z.enum(["modbus", "bacnet"]).default("modbus"),
56
+ metadata: z
57
+ .object({
58
+ manufacturer: z.string().optional(),
59
+ models: z
60
+ .array(z.object({
61
+ name: z.string(),
62
+ variants: z.array(z.string()).optional(),
63
+ }))
64
+ .optional(),
65
+ category: z.string().optional(),
66
+ tags: z.array(z.string()).optional(),
67
+ source: z.string().optional(),
68
+ lastUpdated: z.string().datetime().optional(),
69
+ version: z.string().optional(),
70
+ author: z.string().optional(),
71
+ })
72
+ .optional(),
73
+ data_points: z
74
+ .array(z.object({
75
+ name: z.string(),
76
+ address: z.number().int().min(0).max(65535),
77
+ type: z.enum(["coil", "discrete", "holding", "input"]),
78
+ dataType: z.enum([
79
+ "uint16",
80
+ "int16",
81
+ "uint32",
82
+ "int32",
83
+ "float32",
84
+ "string",
85
+ "bool",
86
+ "bits",
87
+ ]),
88
+ writable: z.boolean().default(false),
89
+ unit: z.string().optional(),
90
+ min: z.number().optional(),
91
+ max: z.number().optional(),
92
+ scaling_factor: z.number().default(1),
93
+ description: z.string().optional(),
94
+ simulation_type: z
95
+ .enum(["static", "random", "csv", "function"])
96
+ .optional(),
97
+ initial_value: z.any().optional(),
98
+ csv_file: z.string().optional(),
99
+ function_code: z.string().optional(),
100
+ update_interval: z.number().int().min(100).optional(),
101
+ }))
102
+ .min(1, "At least one data point is required"),
103
+ devices: z
104
+ .array(z.object({
105
+ name: z.string(),
106
+ device_type: z.string(),
107
+ description: z.string().optional(),
108
+ unit_id: z.number().int().min(1).max(247).optional(),
109
+ data_points: z.array(z.any()).optional(),
110
+ }))
111
+ .optional(),
112
+ attachments: z
113
+ .array(z.object({
114
+ id: z.string(),
115
+ name: z.string(),
116
+ size: z.number(),
117
+ mimeType: z.string(),
118
+ uploadedAt: z.string().datetime(),
119
+ }))
120
+ .optional(),
121
+ intelligent: z.boolean().optional(),
122
+ state_machine: z
123
+ .object({
124
+ states: z.array(z.object({
125
+ name: z.string(),
126
+ values: z.record(z.any()),
127
+ transitions: z.array(z.any()),
128
+ })),
129
+ initial_state: z.string(),
130
+ current_state: z.string().optional(),
131
+ })
132
+ .optional(),
133
+ data_links: z
134
+ .array(z.object({
135
+ source: z.string(),
136
+ targets: z.array(z.string()),
137
+ transform: z.string().optional(),
138
+ }))
139
+ .optional(),
140
+ }),
141
+ // Template update validation (partial)
142
+ templateUpdate: z
143
+ .object({
144
+ name: z.string().min(1).max(100).optional(),
145
+ description: z.string().max(500).optional(),
146
+ manufacturer: z.string().min(1).optional(),
147
+ model: z.string().optional(),
148
+ metadata: z.any().optional(),
149
+ data_points: z.array(z.any()).optional(),
150
+ devices: z.array(z.any()).optional(),
151
+ attachments: z.array(z.any()).optional(),
152
+ intelligent: z.boolean().optional(),
153
+ state_machine: z.any().optional(),
154
+ data_links: z.array(z.any()).optional(),
155
+ })
156
+ .refine((obj) => Object.keys(obj).length > 0, {
157
+ message: "At least one field must be provided for update",
158
+ }),
159
+ // Simulator validation
160
+ simulator: z.object({
161
+ id: z.string().uuid(),
162
+ name: z.string().min(1).max(100),
163
+ templateId: z.string(),
164
+ config: z.object({
165
+ port: z.number().int().min(1).max(65535),
166
+ host: z.string().default("0.0.0.0"),
167
+ unitId: z.number().int().min(1).max(247).default(1),
168
+ protocol: z.enum(["modbus", "bacnet"]),
169
+ }),
170
+ autoStart: z.boolean().default(false),
171
+ }),
172
+ // Settings validation
173
+ settings: z.object({
174
+ api: z
175
+ .object({
176
+ port: z.number().int().min(1024).max(65535),
177
+ host: z.string(),
178
+ cors: z.object({
179
+ enabled: z.boolean(),
180
+ origins: z.array(z.string()),
181
+ }),
182
+ })
183
+ .optional(),
184
+ simulator: z
185
+ .object({
186
+ defaultPort: z.number().int().min(1024).max(65535),
187
+ autoRestart: z.boolean(),
188
+ maxInstances: z.number().int().min(1).max(100),
189
+ })
190
+ .optional(),
191
+ logging: z
192
+ .object({
193
+ level: z.enum(["error", "warn", "info", "debug"]),
194
+ file: z.boolean(),
195
+ console: z.boolean(),
196
+ maxSize: z.string().regex(/^\d+[kmg]b?$/i),
197
+ maxFiles: z.string(),
198
+ })
199
+ .optional(),
200
+ ui: z
201
+ .object({
202
+ theme: z.enum(["light", "dark", "auto"]),
203
+ language: z.enum(["en", "es", "fr", "de"]),
204
+ dateFormat: z.string(),
205
+ })
206
+ .optional(),
207
+ }),
208
+ // Common ID validation
209
+ id: z.object({
210
+ id: z.string().min(1, "ID is required"),
211
+ }),
212
+ // Pagination validation
213
+ pagination: z.object({
214
+ page: z.number().int().min(1).default(1),
215
+ limit: z.number().int().min(1).max(100).default(20),
216
+ sort: z.string().optional(),
217
+ order: z.enum(["asc", "desc"]).default("asc"),
218
+ }),
219
+ // Search/filter validation
220
+ filter: z.object({
221
+ search: z.string().max(100).optional(),
222
+ tags: z.array(z.string()).optional(),
223
+ category: z.string().optional(),
224
+ protocol: z.enum(["modbus", "bacnet"]).optional(),
225
+ status: z.enum(["active", "inactive", "error"]).optional(),
226
+ }),
227
+ };
228
+ /**
229
+ * Create a validation middleware for request body
230
+ */
231
+ export function validate(schema, options) {
232
+ const opts = { ...defaultOptions, ...options };
233
+ return (req, res, next) => {
234
+ try {
235
+ const value = schema.parse(req.body);
236
+ // Replace request body with validated and sanitized value
237
+ if (opts.stripUnknown) {
238
+ req.body = value;
239
+ }
240
+ next();
241
+ }
242
+ catch (_error) {
243
+ if (_error instanceof ZodError) {
244
+ const errors = formatValidationErrors(_error);
245
+ const message = createErrorMessage(errors, "Invalid request");
246
+ return res.status(400).json({
247
+ success: false,
248
+ error: "Validation failed",
249
+ message,
250
+ errors,
251
+ timestamp: new Date().toISOString(),
252
+ });
253
+ }
254
+ next(_error);
255
+ }
256
+ };
257
+ }
258
+ /**
259
+ * Validate request parameters
260
+ */
261
+ export function validateParams(schema, options) {
262
+ const opts = { ...defaultOptions, ...options };
263
+ return (req, res, next) => {
264
+ try {
265
+ const value = schema.parse(req.params);
266
+ if (opts.stripUnknown) {
267
+ req.params = value;
268
+ }
269
+ next();
270
+ }
271
+ catch (_error) {
272
+ if (_error instanceof ZodError) {
273
+ const errors = formatValidationErrors(_error);
274
+ const message = createErrorMessage(errors, "Invalid parameters");
275
+ return res.status(400).json({
276
+ success: false,
277
+ error: "Invalid parameters",
278
+ message,
279
+ errors,
280
+ timestamp: new Date().toISOString(),
281
+ });
282
+ }
283
+ next(_error);
284
+ }
285
+ };
286
+ }
287
+ /**
288
+ * Validate query parameters
289
+ */
290
+ export function validateQuery(schema, options) {
291
+ const opts = { ...defaultOptions, ...options };
292
+ return (req, res, next) => {
293
+ try {
294
+ const value = schema.parse(req.query);
295
+ if (opts.stripUnknown) {
296
+ req.query = value;
297
+ }
298
+ next();
299
+ }
300
+ catch (_error) {
301
+ if (_error instanceof ZodError) {
302
+ const errors = formatValidationErrors(_error);
303
+ const message = createErrorMessage(errors, "Invalid query");
304
+ return res.status(400).json({
305
+ success: false,
306
+ error: "Invalid query parameters",
307
+ message,
308
+ errors,
309
+ timestamp: new Date().toISOString(),
310
+ });
311
+ }
312
+ next(_error);
313
+ }
314
+ };
315
+ }
316
+ /**
317
+ * Combined validation for body, params, and query
318
+ */
319
+ export function validateRequest(schemas, options) {
320
+ const opts = { ...defaultOptions, ...options };
321
+ return (req, res, next) => {
322
+ const errors = [];
323
+ // Validate body
324
+ if (schemas.body) {
325
+ try {
326
+ const value = schemas.body.parse(req.body);
327
+ if (opts.stripUnknown) {
328
+ req.body = value;
329
+ }
330
+ }
331
+ catch (_error) {
332
+ if (_error instanceof ZodError) {
333
+ errors.push(...formatValidationErrors(_error));
334
+ }
335
+ }
336
+ }
337
+ // Validate params
338
+ if (schemas.params) {
339
+ try {
340
+ const value = schemas.params.parse(req.params);
341
+ if (opts.stripUnknown) {
342
+ req.params = value;
343
+ }
344
+ }
345
+ catch (_error) {
346
+ if (_error instanceof ZodError) {
347
+ errors.push(...formatValidationErrors(_error));
348
+ }
349
+ }
350
+ }
351
+ // Validate query
352
+ if (schemas.query) {
353
+ try {
354
+ const value = schemas.query.parse(req.query);
355
+ if (opts.stripUnknown) {
356
+ req.query = value;
357
+ }
358
+ }
359
+ catch (_error) {
360
+ if (_error instanceof ZodError) {
361
+ errors.push(...formatValidationErrors(_error));
362
+ }
363
+ }
364
+ }
365
+ if (errors.length > 0) {
366
+ const message = createErrorMessage(errors, "Request validation failed");
367
+ return res.status(400).json({
368
+ success: false,
369
+ error: "Validation failed",
370
+ message,
371
+ errors,
372
+ timestamp: new Date().toISOString(),
373
+ });
374
+ }
375
+ next();
376
+ };
377
+ }
378
+ /**
379
+ * Async validation wrapper for custom validation logic
380
+ */
381
+ export function validateAsync(validationFn) {
382
+ return async (req, res, next) => {
383
+ try {
384
+ await validationFn(req);
385
+ next();
386
+ }
387
+ catch (_error) {
388
+ const validationError = {
389
+ field: _error.field || "unknown",
390
+ message: _error.message || "Validation failed",
391
+ };
392
+ res.status(400).json({
393
+ success: false,
394
+ error: "Validation failed",
395
+ message: _error.message,
396
+ errors: [validationError],
397
+ timestamp: new Date().toISOString(),
398
+ });
399
+ }
400
+ };
401
+ }
402
+ /**
403
+ * Create a conditional validation middleware
404
+ */
405
+ export function validateIf(condition, schema, options) {
406
+ return (req, res, next) => {
407
+ if (condition(req)) {
408
+ return validate(schema, options)(req, res, next);
409
+ }
410
+ next();
411
+ };
412
+ }
413
+ /**
414
+ * Schema composition helpers using Zod's built-in methods
415
+ */
416
+ export const compose = {
417
+ /**
418
+ * Merge multiple schemas
419
+ */
420
+ merge: (schema1, schema2) => {
421
+ if (schema1 instanceof z.ZodObject && schema2 instanceof z.ZodObject) {
422
+ return schema1.merge(schema2);
423
+ }
424
+ return z.intersection(schema1, schema2);
425
+ },
426
+ /**
427
+ * Make all fields optional
428
+ */
429
+ partial: (schema) => {
430
+ return schema.partial();
431
+ },
432
+ /**
433
+ * Make specific fields required
434
+ */
435
+ require: (schema, fields) => {
436
+ const partialSchema = schema.partial();
437
+ const requiredOverrides = {};
438
+ fields.forEach((field) => {
439
+ const fieldSchema = schema.shape[field];
440
+ if (fieldSchema) {
441
+ requiredOverrides[field] = fieldSchema;
442
+ }
443
+ });
444
+ return partialSchema.extend(requiredOverrides);
445
+ },
446
+ /**
447
+ * Pick specific fields from a schema
448
+ */
449
+ pick: (schema, fields) => {
450
+ const picked = {};
451
+ fields.forEach((field) => {
452
+ if (schema.shape[field]) {
453
+ picked[field] = schema.shape[field];
454
+ }
455
+ });
456
+ return z.object(picked);
457
+ },
458
+ /**
459
+ * Omit specific fields from a schema
460
+ */
461
+ omit: (schema, fields) => {
462
+ return schema.omit(fields.reduce((acc, field) => {
463
+ acc[field] = true;
464
+ return acc;
465
+ }, {}));
466
+ },
467
+ };
468
+ /**
469
+ * Export Zod for direct use
470
+ */
471
+ export { z, z as zod };
472
+ export default {
473
+ validate,
474
+ validateParams,
475
+ validateQuery,
476
+ validateRequest,
477
+ validateAsync,
478
+ validateIf,
479
+ schemas,
480
+ compose,
481
+ z,
482
+ };
483
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/middleware/validation.ts"],"names":[],"mappings":"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"}