@zintrust/core 0.1.49 → 0.1.51

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 (350) hide show
  1. package/bin/z.js +0 -0
  2. package/bin/zin.js +0 -0
  3. package/bin/zintrust.js +0 -0
  4. package/bin/zt.js +0 -0
  5. package/package.json +1 -9
  6. package/src/boot/bootstrap.js +2 -6
  7. package/src/boot/registry/runtime.d.ts.map +1 -1
  8. package/src/boot/registry/runtime.js +6 -1
  9. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
  10. package/src/cli/scaffolding/ProjectScaffolder.js +27 -50
  11. package/src/cli/scaffolding/env.d.ts +2 -0
  12. package/src/cli/scaffolding/env.d.ts.map +1 -0
  13. package/src/cli/scaffolding/env.js +549 -0
  14. package/src/cli/utils/EnvFileLoader.js +1 -1
  15. package/src/config/index.d.ts +1 -1
  16. package/src/config/index.d.ts.map +1 -1
  17. package/src/config/index.js +30 -10
  18. package/src/config/logger.d.ts.map +1 -1
  19. package/src/config/logger.js +56 -9
  20. package/src/index.d.ts +0 -2
  21. package/src/index.d.ts.map +1 -1
  22. package/src/index.js +3 -5
  23. package/src/proxy/d1/ZintrustD1Proxy.d.ts +2 -2
  24. package/src/proxy/d1/ZintrustD1Proxy.d.ts.map +1 -1
  25. package/src/proxy/d1/ZintrustD1Proxy.js +39 -2
  26. package/src/proxy/kv/ZintrustKvProxy.d.ts +2 -2
  27. package/src/proxy/kv/ZintrustKvProxy.d.ts.map +1 -1
  28. package/src/proxy/kv/ZintrustKvProxy.js +38 -2
  29. package/src/runtime/PluginAutoImports.js +1 -1
  30. package/src/runtime/WorkersModule.d.ts.map +1 -1
  31. package/src/runtime/WorkersModule.js +66 -0
  32. package/src/security/JwtManager.js +1 -1
  33. package/app/Controllers/AuthController.d.ts +0 -10
  34. package/app/Controllers/AuthController.d.ts.map +0 -1
  35. package/app/Controllers/AuthController.js +0 -223
  36. package/app/Controllers/UserController.d.ts +0 -9
  37. package/app/Controllers/UserController.d.ts.map +0 -1
  38. package/app/Controllers/UserController.js +0 -8
  39. package/app/Controllers/UserQueryBuilderController.d.ts +0 -16
  40. package/app/Controllers/UserQueryBuilderController.d.ts.map +0 -1
  41. package/app/Controllers/UserQueryBuilderController.js +0 -404
  42. package/app/Middleware/ProfilerMiddleware.d.ts +0 -12
  43. package/app/Middleware/ProfilerMiddleware.d.ts.map +0 -1
  44. package/app/Middleware/ProfilerMiddleware.js +0 -47
  45. package/app/Middleware/index.d.ts +0 -59
  46. package/app/Middleware/index.d.ts.map +0 -1
  47. package/app/Middleware/index.js +0 -215
  48. package/app/Models/Post.d.ts +0 -14
  49. package/app/Models/Post.d.ts.map +0 -1
  50. package/app/Models/Post.js +0 -27
  51. package/app/Models/User.d.ts +0 -14
  52. package/app/Models/User.d.ts.map +0 -1
  53. package/app/Models/User.js +0 -44
  54. package/app/Schedules/JobTracking.d.ts +0 -3
  55. package/app/Schedules/JobTracking.d.ts.map +0 -1
  56. package/app/Schedules/JobTracking.js +0 -13
  57. package/app/Schedules/index.d.ts +0 -2
  58. package/app/Schedules/index.d.ts.map +0 -1
  59. package/app/Schedules/index.js +0 -1
  60. package/app/Toolkit/Broadcast/sendBroadcast.d.ts +0 -6
  61. package/app/Toolkit/Broadcast/sendBroadcast.d.ts.map +0 -1
  62. package/app/Toolkit/Broadcast/sendBroadcast.js +0 -5
  63. package/app/Toolkit/Mail/sendWelcomeEmail.d.ts +0 -6
  64. package/app/Toolkit/Mail/sendWelcomeEmail.d.ts.map +0 -1
  65. package/app/Toolkit/Mail/sendWelcomeEmail.js +0 -20
  66. package/app/Toolkit/Notification/sendSlackNotification.d.ts +0 -8
  67. package/app/Toolkit/Notification/sendSlackNotification.d.ts.map +0 -1
  68. package/app/Toolkit/Notification/sendSlackNotification.js +0 -5
  69. package/app/Toolkit/Notification/sendSms.d.ts +0 -6
  70. package/app/Toolkit/Notification/sendSms.d.ts.map +0 -1
  71. package/app/Toolkit/Notification/sendSms.js +0 -5
  72. package/app/Types/controller.d.ts +0 -44
  73. package/app/Types/controller.d.ts.map +0 -1
  74. package/app/Types/controller.js +0 -1
  75. package/config/broadcast.d.ts +0 -38
  76. package/config/broadcast.d.ts.map +0 -1
  77. package/config/broadcast.js +0 -37
  78. package/config/cache.d.ts +0 -40
  79. package/config/cache.d.ts.map +0 -1
  80. package/config/cache.js +0 -39
  81. package/config/database.d.ts +0 -58
  82. package/config/database.d.ts.map +0 -1
  83. package/config/database.js +0 -65
  84. package/config/mail.d.ts +0 -51
  85. package/config/mail.d.ts.map +0 -1
  86. package/config/mail.js +0 -69
  87. package/config/middleware.d.ts +0 -11
  88. package/config/middleware.d.ts.map +0 -1
  89. package/config/middleware.js +0 -30
  90. package/config/notification.d.ts +0 -33
  91. package/config/notification.d.ts.map +0 -1
  92. package/config/notification.js +0 -33
  93. package/config/queue.d.ts +0 -55
  94. package/config/queue.d.ts.map +0 -1
  95. package/config/queue.js +0 -87
  96. package/config/storage.d.ts +0 -59
  97. package/config/storage.d.ts.map +0 -1
  98. package/config/storage.js +0 -59
  99. package/config/workers.d.ts +0 -54
  100. package/config/workers.d.ts.map +0 -1
  101. package/config/workers.js +0 -83
  102. package/packages/cloudflare-d1-proxy/src/index.d.ts +0 -48
  103. package/packages/cloudflare-d1-proxy/src/index.d.ts.map +0 -1
  104. package/packages/cloudflare-d1-proxy/src/index.js +0 -387
  105. package/packages/cloudflare-kv-proxy/src/index.d.ts +0 -44
  106. package/packages/cloudflare-kv-proxy/src/index.d.ts.map +0 -1
  107. package/packages/cloudflare-kv-proxy/src/index.js +0 -325
  108. package/packages/queue-monitor/src/QueueMonitoringService.d.ts +0 -35
  109. package/packages/queue-monitor/src/QueueMonitoringService.d.ts.map +0 -1
  110. package/packages/queue-monitor/src/QueueMonitoringService.js +0 -194
  111. package/packages/queue-monitor/src/connection.d.ts +0 -3
  112. package/packages/queue-monitor/src/connection.d.ts.map +0 -1
  113. package/packages/queue-monitor/src/connection.js +0 -1
  114. package/packages/queue-monitor/src/dashboard-ui.d.ts +0 -7
  115. package/packages/queue-monitor/src/dashboard-ui.d.ts.map +0 -1
  116. package/packages/queue-monitor/src/dashboard-ui.js +0 -997
  117. package/packages/queue-monitor/src/driver.d.ts +0 -15
  118. package/packages/queue-monitor/src/driver.d.ts.map +0 -1
  119. package/packages/queue-monitor/src/driver.js +0 -115
  120. package/packages/queue-monitor/src/index.d.ts +0 -71
  121. package/packages/queue-monitor/src/index.d.ts.map +0 -1
  122. package/packages/queue-monitor/src/index.js +0 -296
  123. package/packages/queue-monitor/src/metrics.d.ts +0 -27
  124. package/packages/queue-monitor/src/metrics.d.ts.map +0 -1
  125. package/packages/queue-monitor/src/metrics.js +0 -92
  126. package/packages/queue-monitor/src/worker.d.ts +0 -8
  127. package/packages/queue-monitor/src/worker.d.ts.map +0 -1
  128. package/packages/queue-monitor/src/worker.js +0 -35
  129. package/packages/queue-redis/src/BullMQRedisQueue.d.ts +0 -26
  130. package/packages/queue-redis/src/BullMQRedisQueue.d.ts.map +0 -1
  131. package/packages/queue-redis/src/BullMQRedisQueue.js +0 -463
  132. package/packages/queue-redis/src/HttpQueueDriver.d.ts +0 -18
  133. package/packages/queue-redis/src/HttpQueueDriver.d.ts.map +0 -1
  134. package/packages/queue-redis/src/HttpQueueDriver.js +0 -249
  135. package/packages/queue-redis/src/QueueHttpGateway.d.ts +0 -16
  136. package/packages/queue-redis/src/QueueHttpGateway.d.ts.map +0 -1
  137. package/packages/queue-redis/src/QueueHttpGateway.js +0 -217
  138. package/packages/queue-redis/src/RedisPublishClient.d.ts +0 -14
  139. package/packages/queue-redis/src/RedisPublishClient.d.ts.map +0 -1
  140. package/packages/queue-redis/src/RedisPublishClient.js +0 -251
  141. package/packages/queue-redis/src/index.d.ts +0 -12
  142. package/packages/queue-redis/src/index.d.ts.map +0 -1
  143. package/packages/queue-redis/src/index.js +0 -10
  144. package/packages/queue-redis/src/register.d.ts +0 -6
  145. package/packages/queue-redis/src/register.d.ts.map +0 -1
  146. package/packages/queue-redis/src/register.js +0 -21
  147. package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.d.ts +0 -11
  148. package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.d.ts.map +0 -1
  149. package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.js +0 -32
  150. package/packages/workers/migrations/20260123180000_create_queue_jobs_table.d.ts +0 -11
  151. package/packages/workers/migrations/20260123180000_create_queue_jobs_table.d.ts.map +0 -1
  152. package/packages/workers/migrations/20260123180000_create_queue_jobs_table.js +0 -46
  153. package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.d.ts +0 -7
  154. package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.d.ts.map +0 -1
  155. package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.js +0 -44
  156. package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.d.ts +0 -7
  157. package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.d.ts.map +0 -1
  158. package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.js +0 -104
  159. package/packages/workers/src/AnomalyDetection.d.ts +0 -107
  160. package/packages/workers/src/AnomalyDetection.d.ts.map +0 -1
  161. package/packages/workers/src/AnomalyDetection.js +0 -329
  162. package/packages/workers/src/AutoScaler.d.ts +0 -128
  163. package/packages/workers/src/AutoScaler.d.ts.map +0 -1
  164. package/packages/workers/src/AutoScaler.js +0 -425
  165. package/packages/workers/src/BroadcastWorker.d.ts +0 -24
  166. package/packages/workers/src/BroadcastWorker.d.ts.map +0 -1
  167. package/packages/workers/src/BroadcastWorker.js +0 -24
  168. package/packages/workers/src/CanaryController.d.ts +0 -104
  169. package/packages/workers/src/CanaryController.d.ts.map +0 -1
  170. package/packages/workers/src/CanaryController.js +0 -424
  171. package/packages/workers/src/ChaosEngineering.d.ts +0 -80
  172. package/packages/workers/src/ChaosEngineering.d.ts.map +0 -1
  173. package/packages/workers/src/ChaosEngineering.js +0 -229
  174. package/packages/workers/src/CircuitBreaker.d.ts +0 -107
  175. package/packages/workers/src/CircuitBreaker.d.ts.map +0 -1
  176. package/packages/workers/src/CircuitBreaker.js +0 -374
  177. package/packages/workers/src/ClusterLock.d.ts +0 -91
  178. package/packages/workers/src/ClusterLock.d.ts.map +0 -1
  179. package/packages/workers/src/ClusterLock.js +0 -397
  180. package/packages/workers/src/ComplianceManager.d.ts +0 -178
  181. package/packages/workers/src/ComplianceManager.d.ts.map +0 -1
  182. package/packages/workers/src/ComplianceManager.js +0 -556
  183. package/packages/workers/src/DatacenterOrchestrator.d.ts +0 -134
  184. package/packages/workers/src/DatacenterOrchestrator.d.ts.map +0 -1
  185. package/packages/workers/src/DatacenterOrchestrator.js +0 -404
  186. package/packages/workers/src/DeadLetterQueue.d.ts +0 -123
  187. package/packages/workers/src/DeadLetterQueue.d.ts.map +0 -1
  188. package/packages/workers/src/DeadLetterQueue.js +0 -544
  189. package/packages/workers/src/HealthMonitor.d.ts +0 -43
  190. package/packages/workers/src/HealthMonitor.d.ts.map +0 -1
  191. package/packages/workers/src/HealthMonitor.js +0 -312
  192. package/packages/workers/src/MultiQueueWorker.d.ts +0 -90
  193. package/packages/workers/src/MultiQueueWorker.d.ts.map +0 -1
  194. package/packages/workers/src/MultiQueueWorker.js +0 -282
  195. package/packages/workers/src/NotificationWorker.d.ts +0 -24
  196. package/packages/workers/src/NotificationWorker.d.ts.map +0 -1
  197. package/packages/workers/src/NotificationWorker.js +0 -23
  198. package/packages/workers/src/Observability.d.ts +0 -154
  199. package/packages/workers/src/Observability.d.ts.map +0 -1
  200. package/packages/workers/src/Observability.js +0 -538
  201. package/packages/workers/src/PluginManager.d.ts +0 -124
  202. package/packages/workers/src/PluginManager.d.ts.map +0 -1
  203. package/packages/workers/src/PluginManager.js +0 -392
  204. package/packages/workers/src/PriorityQueue.d.ts +0 -118
  205. package/packages/workers/src/PriorityQueue.d.ts.map +0 -1
  206. package/packages/workers/src/PriorityQueue.js +0 -276
  207. package/packages/workers/src/ResourceMonitor.d.ts +0 -165
  208. package/packages/workers/src/ResourceMonitor.d.ts.map +0 -1
  209. package/packages/workers/src/ResourceMonitor.js +0 -632
  210. package/packages/workers/src/SLAMonitor.d.ts +0 -111
  211. package/packages/workers/src/SLAMonitor.d.ts.map +0 -1
  212. package/packages/workers/src/SLAMonitor.js +0 -274
  213. package/packages/workers/src/WorkerFactory.d.ts +0 -218
  214. package/packages/workers/src/WorkerFactory.d.ts.map +0 -1
  215. package/packages/workers/src/WorkerFactory.js +0 -2253
  216. package/packages/workers/src/WorkerInit.d.ts +0 -86
  217. package/packages/workers/src/WorkerInit.d.ts.map +0 -1
  218. package/packages/workers/src/WorkerInit.js +0 -307
  219. package/packages/workers/src/WorkerMetrics.d.ts +0 -116
  220. package/packages/workers/src/WorkerMetrics.d.ts.map +0 -1
  221. package/packages/workers/src/WorkerMetrics.js +0 -570
  222. package/packages/workers/src/WorkerRegistry.d.ts +0 -152
  223. package/packages/workers/src/WorkerRegistry.d.ts.map +0 -1
  224. package/packages/workers/src/WorkerRegistry.js +0 -396
  225. package/packages/workers/src/WorkerShutdown.d.ts +0 -70
  226. package/packages/workers/src/WorkerShutdown.d.ts.map +0 -1
  227. package/packages/workers/src/WorkerShutdown.js +0 -185
  228. package/packages/workers/src/WorkerVersioning.d.ts +0 -108
  229. package/packages/workers/src/WorkerVersioning.d.ts.map +0 -1
  230. package/packages/workers/src/WorkerVersioning.js +0 -300
  231. package/packages/workers/src/config/workerConfig.d.ts +0 -5
  232. package/packages/workers/src/config/workerConfig.d.ts.map +0 -1
  233. package/packages/workers/src/config/workerConfig.js +0 -25
  234. package/packages/workers/src/createQueueWorker.d.ts +0 -26
  235. package/packages/workers/src/createQueueWorker.d.ts.map +0 -1
  236. package/packages/workers/src/createQueueWorker.js +0 -367
  237. package/packages/workers/src/dashboard/index.d.ts +0 -2
  238. package/packages/workers/src/dashboard/index.d.ts.map +0 -1
  239. package/packages/workers/src/dashboard/index.js +0 -1
  240. package/packages/workers/src/dashboard/types.d.ts +0 -123
  241. package/packages/workers/src/dashboard/types.d.ts.map +0 -1
  242. package/packages/workers/src/dashboard/types.js +0 -1
  243. package/packages/workers/src/dashboard/workers-api.d.ts +0 -5
  244. package/packages/workers/src/dashboard/workers-api.d.ts.map +0 -1
  245. package/packages/workers/src/dashboard/workers-api.js +0 -738
  246. package/packages/workers/src/helper/index.d.ts +0 -6
  247. package/packages/workers/src/helper/index.d.ts.map +0 -1
  248. package/packages/workers/src/helper/index.js +0 -10
  249. package/packages/workers/src/http/WorkerApiController.d.ts +0 -39
  250. package/packages/workers/src/http/WorkerApiController.d.ts.map +0 -1
  251. package/packages/workers/src/http/WorkerApiController.js +0 -313
  252. package/packages/workers/src/http/WorkerController.d.ts +0 -375
  253. package/packages/workers/src/http/WorkerController.d.ts.map +0 -1
  254. package/packages/workers/src/http/WorkerController.js +0 -1454
  255. package/packages/workers/src/http/WorkerMonitoringService.d.ts +0 -12
  256. package/packages/workers/src/http/WorkerMonitoringService.d.ts.map +0 -1
  257. package/packages/workers/src/http/WorkerMonitoringService.js +0 -89
  258. package/packages/workers/src/http/middleware/CustomValidation.d.ts +0 -93
  259. package/packages/workers/src/http/middleware/CustomValidation.d.ts.map +0 -1
  260. package/packages/workers/src/http/middleware/CustomValidation.js +0 -270
  261. package/packages/workers/src/http/middleware/DatacenterValidator.d.ts +0 -4
  262. package/packages/workers/src/http/middleware/DatacenterValidator.d.ts.map +0 -1
  263. package/packages/workers/src/http/middleware/DatacenterValidator.js +0 -94
  264. package/packages/workers/src/http/middleware/EditWorkerValidation.d.ts +0 -8
  265. package/packages/workers/src/http/middleware/EditWorkerValidation.d.ts.map +0 -1
  266. package/packages/workers/src/http/middleware/EditWorkerValidation.js +0 -56
  267. package/packages/workers/src/http/middleware/FeaturesValidator.d.ts +0 -4
  268. package/packages/workers/src/http/middleware/FeaturesValidator.d.ts.map +0 -1
  269. package/packages/workers/src/http/middleware/FeaturesValidator.js +0 -61
  270. package/packages/workers/src/http/middleware/InfrastructureValidator.d.ts +0 -32
  271. package/packages/workers/src/http/middleware/InfrastructureValidator.d.ts.map +0 -1
  272. package/packages/workers/src/http/middleware/InfrastructureValidator.js +0 -226
  273. package/packages/workers/src/http/middleware/OptionsValidator.d.ts +0 -4
  274. package/packages/workers/src/http/middleware/OptionsValidator.d.ts.map +0 -1
  275. package/packages/workers/src/http/middleware/OptionsValidator.js +0 -112
  276. package/packages/workers/src/http/middleware/PayloadSanitizer.d.ts +0 -8
  277. package/packages/workers/src/http/middleware/PayloadSanitizer.d.ts.map +0 -1
  278. package/packages/workers/src/http/middleware/PayloadSanitizer.js +0 -42
  279. package/packages/workers/src/http/middleware/ProcessorPathSanitizer.d.ts +0 -4
  280. package/packages/workers/src/http/middleware/ProcessorPathSanitizer.d.ts.map +0 -1
  281. package/packages/workers/src/http/middleware/ProcessorPathSanitizer.js +0 -140
  282. package/packages/workers/src/http/middleware/QueueNameSanitizer.d.ts +0 -4
  283. package/packages/workers/src/http/middleware/QueueNameSanitizer.d.ts.map +0 -1
  284. package/packages/workers/src/http/middleware/QueueNameSanitizer.js +0 -45
  285. package/packages/workers/src/http/middleware/ValidateDriver.d.ts +0 -8
  286. package/packages/workers/src/http/middleware/ValidateDriver.d.ts.map +0 -1
  287. package/packages/workers/src/http/middleware/ValidateDriver.js +0 -20
  288. package/packages/workers/src/http/middleware/VersionSanitizer.d.ts +0 -4
  289. package/packages/workers/src/http/middleware/VersionSanitizer.d.ts.map +0 -1
  290. package/packages/workers/src/http/middleware/VersionSanitizer.js +0 -25
  291. package/packages/workers/src/http/middleware/WorkerNameSanitizer.d.ts +0 -4
  292. package/packages/workers/src/http/middleware/WorkerNameSanitizer.d.ts.map +0 -1
  293. package/packages/workers/src/http/middleware/WorkerNameSanitizer.js +0 -46
  294. package/packages/workers/src/http/middleware/WorkerValidationChain.d.ts +0 -28
  295. package/packages/workers/src/http/middleware/WorkerValidationChain.d.ts.map +0 -1
  296. package/packages/workers/src/http/middleware/WorkerValidationChain.js +0 -186
  297. package/packages/workers/src/index.d.ts +0 -47
  298. package/packages/workers/src/index.d.ts.map +0 -1
  299. package/packages/workers/src/index.js +0 -48
  300. package/packages/workers/src/routes/workers.d.ts +0 -13
  301. package/packages/workers/src/routes/workers.d.ts.map +0 -1
  302. package/packages/workers/src/routes/workers.js +0 -126
  303. package/packages/workers/src/storage/WorkerStore.d.ts +0 -52
  304. package/packages/workers/src/storage/WorkerStore.d.ts.map +0 -1
  305. package/packages/workers/src/storage/WorkerStore.js +0 -259
  306. package/packages/workers/src/telemetry/api/TelemetryAPI.d.ts +0 -47
  307. package/packages/workers/src/telemetry/api/TelemetryAPI.d.ts.map +0 -1
  308. package/packages/workers/src/telemetry/api/TelemetryAPI.js +0 -219
  309. package/packages/workers/src/telemetry/api/TelemetryMonitoringService.d.ts +0 -18
  310. package/packages/workers/src/telemetry/api/TelemetryMonitoringService.d.ts.map +0 -1
  311. package/packages/workers/src/telemetry/api/TelemetryMonitoringService.js +0 -140
  312. package/packages/workers/src/telemetry/components/AlertPanel.d.ts +0 -2
  313. package/packages/workers/src/telemetry/components/AlertPanel.d.ts.map +0 -1
  314. package/packages/workers/src/telemetry/components/AlertPanel.js +0 -13
  315. package/packages/workers/src/telemetry/components/CostTracking.d.ts +0 -2
  316. package/packages/workers/src/telemetry/components/CostTracking.d.ts.map +0 -1
  317. package/packages/workers/src/telemetry/components/CostTracking.js +0 -14
  318. package/packages/workers/src/telemetry/components/ResourceUsageChart.d.ts +0 -2
  319. package/packages/workers/src/telemetry/components/ResourceUsageChart.d.ts.map +0 -1
  320. package/packages/workers/src/telemetry/components/ResourceUsageChart.js +0 -11
  321. package/packages/workers/src/telemetry/components/WorkerHealthChart.d.ts +0 -2
  322. package/packages/workers/src/telemetry/components/WorkerHealthChart.d.ts.map +0 -1
  323. package/packages/workers/src/telemetry/components/WorkerHealthChart.js +0 -11
  324. package/packages/workers/src/telemetry/index.d.ts +0 -16
  325. package/packages/workers/src/telemetry/index.d.ts.map +0 -1
  326. package/packages/workers/src/telemetry/index.js +0 -60
  327. package/packages/workers/src/telemetry/routes/dashboard.d.ts +0 -7
  328. package/packages/workers/src/telemetry/routes/dashboard.d.ts.map +0 -1
  329. package/packages/workers/src/telemetry/routes/dashboard.js +0 -608
  330. package/packages/workers/src/type.d.ts +0 -77
  331. package/packages/workers/src/type.d.ts.map +0 -1
  332. package/packages/workers/src/type.js +0 -1
  333. package/packages/workers/src/ui/router/EmbeddedAssets.d.ts +0 -5
  334. package/packages/workers/src/ui/router/EmbeddedAssets.d.ts.map +0 -1
  335. package/packages/workers/src/ui/router/EmbeddedAssets.js +0 -13
  336. package/packages/workers/src/ui/router/ui.d.ts +0 -4
  337. package/packages/workers/src/ui/router/ui.d.ts.map +0 -1
  338. package/packages/workers/src/ui/router/ui.js +0 -208
  339. package/packages/workers/src/ui/types/worker-ui.d.ts +0 -230
  340. package/packages/workers/src/ui/types/worker-ui.d.ts.map +0 -1
  341. package/packages/workers/src/ui/types/worker-ui.js +0 -5
  342. package/routes/api.d.ts +0 -7
  343. package/routes/api.d.ts.map +0 -1
  344. package/routes/api.js +0 -136
  345. package/routes/broadcast.d.ts +0 -9
  346. package/routes/broadcast.d.ts.map +0 -1
  347. package/routes/broadcast.js +0 -27
  348. package/routes/storage.d.ts +0 -4
  349. package/routes/storage.d.ts.map +0 -1
  350. package/routes/storage.js +0 -35
@@ -1,223 +0,0 @@
1
- /**
2
- * Auth Controller
3
- * Minimal, real auth endpoints backing the example API routes.
4
- */
5
- import { Auth } from '../../src/auth/Auth.js';
6
- import { isUndefinedOrNull } from '../../src/helper/index.js';
7
- import { User } from '../Models/User.js';
8
- import { getString } from '../../src/common/utility.js';
9
- import { Logger } from '../../src/config/logger.js';
10
- import { getValidatedBody } from '../../src/http/ValidationHelper.js';
11
- import { JwtManager } from '../../src/security/JwtManager.js';
12
- const pickPublicUser = (row) => {
13
- return {
14
- id: row.id,
15
- name: getString(row.name),
16
- email: getString(row.email),
17
- };
18
- };
19
- /**
20
- * Authenticates a user by email and password.
21
- * Validates credentials against the database and returns a JWT access token on success.
22
- * Logs all authentication attempts for security auditing.
23
- * @param req - HTTP request containing email and password
24
- * @param res - HTTP response to send authentication result
25
- * @returns Promise that resolves after sending the response
26
- */
27
- async function login(req, res) {
28
- const body = getValidatedBody(req);
29
- if (!body) {
30
- Logger.error('AuthController.login: validation middleware did not populate req.validated.body');
31
- return res.setStatus(500).json({ error: 'Internal server error' });
32
- }
33
- const email = getString(body['email']);
34
- const password = getString(body['password']);
35
- const ipAddress = req.getRaw().socket.remoteAddress ?? 'unknown';
36
- try {
37
- const existing = await User.where('email', '=', email).limit(1).first();
38
- if (existing === null) {
39
- Logger.warn('AuthController.login: failed login attempt', {
40
- email,
41
- ip: ipAddress,
42
- reason: 'user_not_found',
43
- timestamp: new Date().toISOString(),
44
- });
45
- res.setStatus(401).json({ error: 'Invalid credentials' });
46
- return;
47
- }
48
- const passwordHash = getString(existing.password);
49
- const ok = await Auth.compare(password, passwordHash);
50
- if (!ok) {
51
- Logger.warn('AuthController.login: failed login attempt', {
52
- email,
53
- ip: ipAddress,
54
- reason: 'invalid_password',
55
- timestamp: new Date().toISOString(),
56
- });
57
- res.setStatus(401).json({ error: 'Invalid credentials' });
58
- return;
59
- }
60
- const user = pickPublicUser(existing);
61
- const subject = (() => {
62
- const id = user.id;
63
- if (typeof id === 'string' && id.length > 0)
64
- return id;
65
- if (typeof id === 'number' && Number.isFinite(id))
66
- return String(id);
67
- return undefined;
68
- })();
69
- // Bulletproof Auth (device binding) expects a device id header to match a JWT claim.
70
- // For the example app, we mint a stable device id derived from the subject.
71
- // Production apps should issue a per-device id and manage a per-device signing secret.
72
- const deviceId = isUndefinedOrNull(subject) ? undefined : `dev-${subject}`;
73
- const token = await JwtManager.signAccessToken({
74
- sub: subject,
75
- email,
76
- ...(isUndefinedOrNull(deviceId) ? {} : { deviceId }),
77
- });
78
- Logger.info('AuthController.login: successful login', {
79
- userId: subject,
80
- email,
81
- ip: ipAddress,
82
- timestamp: new Date().toISOString(),
83
- });
84
- res.json({
85
- token,
86
- token_type: 'Bearer',
87
- ...(isUndefinedOrNull(deviceId) ? {} : { deviceId }),
88
- user,
89
- });
90
- }
91
- catch (error) {
92
- Logger.error('AuthController.login: unexpected error', {
93
- email,
94
- ip: ipAddress,
95
- error: error instanceof Error ? error.message : String(error),
96
- timestamp: new Date().toISOString(),
97
- });
98
- res.setStatus(500).json({ error: 'Login failed' });
99
- }
100
- }
101
- /**
102
- * Registers a new user with name, email, and password.
103
- * Validates email uniqueness, hashes password, and stores user in database.
104
- * Returns 201 on success, 409 if email already exists.
105
- * @param req - HTTP request containing name, email, and password
106
- * @param res - HTTP response to send registration result
107
- * @returns Promise that resolves after sending the response
108
- */
109
- async function register(req, res) {
110
- const body = getValidatedBody(req);
111
- if (!body) {
112
- Logger.error('AuthController.register: validation middleware did not populate req.validated.body');
113
- res.setStatus(500).json({ error: 'Internal server error' });
114
- return;
115
- }
116
- const name = getString(body['name']);
117
- const email = getString(body['email']);
118
- const password = getString(body['password']);
119
- const ipAddress = req.getRaw().socket.remoteAddress ?? 'unknown';
120
- try {
121
- const existing = await User.where('email', '=', email).limit(1).first();
122
- if (existing !== null) {
123
- Logger.warn('AuthController.register: duplicate email attempt', {
124
- email,
125
- ip: ipAddress,
126
- timestamp: new Date().toISOString(),
127
- });
128
- res.setStatus(409).json({ error: 'Email already registered' });
129
- return;
130
- }
131
- const passwordHash = await Auth.hash(password);
132
- const result = await User.query().insert({
133
- name,
134
- email,
135
- password: passwordHash,
136
- });
137
- let insertedUserId = result.id;
138
- if (insertedUserId === null || insertedUserId === undefined) {
139
- const inserted = await User.where('email', '=', email).limit(1).first();
140
- if (inserted?.id !== null && inserted?.id !== undefined) {
141
- insertedUserId = inserted.id;
142
- }
143
- }
144
- if (insertedUserId !== null && insertedUserId !== undefined) {
145
- Logger.info('AuthController.register: successful registration', {
146
- user_id: insertedUserId,
147
- email,
148
- ip: ipAddress,
149
- timestamp: new Date().toISOString(),
150
- });
151
- res.setStatus(201).json({ message: 'Registered' });
152
- }
153
- else {
154
- Logger.error('Failed to retrieve inserted user ID', {
155
- email,
156
- ip: ipAddress,
157
- });
158
- res.setStatus(500).json({ error: 'Registration failed' });
159
- }
160
- return;
161
- }
162
- catch (error) {
163
- Logger.error('AuthController.register failed', error);
164
- res.setStatus(500).json({ error: 'Registration failed' });
165
- }
166
- }
167
- /**
168
- * Logs out the current user by revoking their JWT token.
169
- * Extracts authorization header and marks token as revoked.
170
- * Requires persistent token revocation store for stateless JWT validation.
171
- * @param req - HTTP request containing authorization header with JWT token
172
- * @param res - HTTP response to send logout confirmation
173
- * @returns Promise that resolves after sending the response
174
- */
175
- async function logout(req, res) {
176
- const authHeader = typeof req.getHeader === 'function' ? req.getHeader('authorization') : undefined;
177
- await JwtManager.logout(authHeader);
178
- res.json({ message: 'Logged out' });
179
- }
180
- /**
181
- * Logs out the current user from all devices by removing all active sessions for their subject.
182
- *
183
- * With session allowlist enforcement, deleting a user's session records causes any previously issued
184
- * tokens to become unauthorized (401) immediately.
185
- */
186
- async function logoutAll(req, res) {
187
- const sub = typeof req.user?.sub === 'string' ? req.user.sub.trim() : '';
188
- if (sub === '') {
189
- res.setStatus(401).json({ error: 'Unauthorized' });
190
- return;
191
- }
192
- await JwtManager.logoutAll(sub);
193
- res.json({ message: 'Logged out everywhere' });
194
- }
195
- /**
196
- * Refreshes the user's JWT access token.
197
- * Generates a new token with the same claims as the current user.
198
- * Returns 401 if user is not authenticated.
199
- * @param req - HTTP request with user populated by authentication middleware
200
- * @param res - HTTP response to send refreshed token
201
- * @returns Promise that resolves after sending the response
202
- */
203
- async function refresh(req, res) {
204
- const user = req.user;
205
- if (user === undefined) {
206
- res.setStatus(401).json({ error: 'Unauthorized' });
207
- return;
208
- }
209
- const token = await JwtManager.signAccessToken(user);
210
- res.json({ token, token_type: 'Bearer' });
211
- }
212
- export const AuthController = Object.freeze({
213
- create() {
214
- return {
215
- login,
216
- register,
217
- logout,
218
- logoutAll,
219
- refresh,
220
- };
221
- },
222
- });
223
- export default AuthController;
@@ -1,9 +0,0 @@
1
- /**
2
- * User Controller (compat)
3
- *
4
- * This file remains for backwards-compatibility. The actual implementation is
5
- * QueryBuilder-backed and lives in UserQueryBuilderController.
6
- */
7
- export { UserQueryBuilderController as UserController, UserQueryBuilderController, } from '../Controllers/UserQueryBuilderController';
8
- export { UserQueryBuilderController as default } from '../Controllers/UserQueryBuilderController';
9
- //# sourceMappingURL=UserController.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UserController.d.ts","sourceRoot":"","sources":["../../../app/Controllers/UserController.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,0BAA0B,IAAI,cAAc,EAC5C,0BAA0B,GAC3B,MAAM,6CAA6C,CAAC;AAErD,OAAO,EAAE,0BAA0B,IAAI,OAAO,EAAE,MAAM,6CAA6C,CAAC"}
@@ -1,8 +0,0 @@
1
- /**
2
- * User Controller (compat)
3
- *
4
- * This file remains for backwards-compatibility. The actual implementation is
5
- * QueryBuilder-backed and lives in UserQueryBuilderController.
6
- */
7
- export { UserQueryBuilderController as UserController, UserQueryBuilderController, } from '../Controllers/UserQueryBuilderController.js';
8
- export { UserQueryBuilderController as default } from '../Controllers/UserQueryBuilderController.js';
@@ -1,16 +0,0 @@
1
- /**
2
- * User QueryBuilder Controller
3
- * QueryBuilder-backed controller for the users resource.
4
- */
5
- import type { IUserController } from '../Types/controller';
6
- /**
7
- * User QueryBuilder Controller Factory
8
- */
9
- export declare const UserQueryBuilderController: {
10
- /**
11
- * Create a new user controller instance
12
- */
13
- create(): IUserController;
14
- };
15
- export default UserQueryBuilderController;
16
- //# sourceMappingURL=UserQueryBuilderController.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UserQueryBuilderController.d.ts","sourceRoot":"","sources":["../../../app/Controllers/UserQueryBuilderController.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAmC,MAAM,uBAAuB,CAAC;AAkc9F;;GAEG;AACH,eAAO,MAAM,0BAA0B;IACrC;;OAEG;cACO,eAAe;CAG1B,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
@@ -1,404 +0,0 @@
1
- /**
2
- * User QueryBuilder Controller
3
- * QueryBuilder-backed controller for the users resource.
4
- */
5
- import { Logger, QueryBuilder, Sanitizer, Schema, Validator, getValidatedBody, nowIso, randomBytes, useDatabase, } from '../../src/index.js';
6
- const isValidationError = (error) => {
7
- if (typeof error !== 'object' || error === null)
8
- return false;
9
- const maybe = error;
10
- return maybe.name === 'ValidationError' && typeof maybe.toObject === 'function';
11
- };
12
- const isSanitizerError = (error) => {
13
- if (typeof error !== 'object' || error === null)
14
- return false;
15
- const maybe = error;
16
- return maybe.name === 'SanitizerError';
17
- };
18
- const toJsonRecord = (value) => {
19
- if (typeof value !== 'object' || value === null)
20
- return {};
21
- if (Array.isArray(value))
22
- return {};
23
- return value;
24
- };
25
- const resolveBody = (req) => {
26
- return toJsonRecord(getValidatedBody(req) ?? req.body ?? {});
27
- };
28
- const getParamCompat = (req, name) => {
29
- try {
30
- const anyReq = req;
31
- if (typeof anyReq.getParam === 'function')
32
- return anyReq.getParam(name);
33
- }
34
- catch {
35
- // ignore
36
- }
37
- const anyReq = req;
38
- const params = anyReq.params;
39
- if (typeof params === 'object' && params !== null)
40
- return params[name];
41
- return undefined;
42
- };
43
- const requireSelf = (req, res, userId) => {
44
- if (typeof userId !== 'string' || userId.length === 0) {
45
- res.status(400).json({ error: 'Missing user id' });
46
- return false;
47
- }
48
- const subject = typeof req.user?.sub === 'string' ? req.user.sub : undefined;
49
- if (subject === undefined || subject.length === 0) {
50
- res.status(401).json({ error: 'Unauthorized' });
51
- return false;
52
- }
53
- if (subject !== userId) {
54
- res.status(403).json({ error: 'Forbidden' });
55
- return false;
56
- }
57
- return true;
58
- };
59
- const randomInt = (min, max) => {
60
- const lo = Math.ceil(min);
61
- const hi = Math.floor(max);
62
- return Math.floor(lo + Math.random() * (hi - lo + 1)); // NOSONAR is just a test utility
63
- };
64
- const randomName = () => {
65
- const first = ['Alex', 'Jordan', 'Taylor', 'Sam', 'Casey', 'Riley', 'Morgan'];
66
- const last = ['Lee', 'Kim', 'Patel', 'Garcia', 'Brown', 'Nguyen', 'Smith'];
67
- return `${first[randomInt(0, first.length - 1)]} ${last[randomInt(0, last.length - 1)]}`;
68
- };
69
- const randomEmail = () => {
70
- const n = randomInt(10000, 99999);
71
- return `user${n}@example.com`;
72
- };
73
- const randomPassword = () => {
74
- // Not cryptographically perfect UX-wise, but avoids hard-coded credentials.
75
- // `base64url` keeps it URL-safe and reasonably short.
76
- return randomBytes(12).toString('base64url');
77
- };
78
- const pickAllowed = (body, allowed) => {
79
- const out = {};
80
- for (const [k, v] of Object.entries(body)) {
81
- if (allowed.has(k))
82
- out[k] = v;
83
- }
84
- return out;
85
- };
86
- const hasUnknownKeys = (body, allowed) => {
87
- for (const k of Object.keys(body)) {
88
- if (!allowed.has(k))
89
- return k;
90
- }
91
- return null;
92
- };
93
- const sanitizeUserUpdateBody = (updateBody) => {
94
- const sanitizedUpdateBody = {};
95
- if ('name' in updateBody) {
96
- sanitizedUpdateBody['name'] = Sanitizer.nameText(updateBody['name']).trim();
97
- }
98
- if ('email' in updateBody) {
99
- sanitizedUpdateBody['email'] = Sanitizer.email(updateBody['email']).trim().toLowerCase();
100
- }
101
- if ('password' in updateBody) {
102
- sanitizedUpdateBody['password'] = Sanitizer.safePasswordChars(updateBody['password']);
103
- }
104
- return sanitizedUpdateBody;
105
- };
106
- const buildUserUpdateSchema = () => {
107
- return Schema.create()
108
- .custom('name', (v) => v === undefined || typeof v === 'string', 'name must be a string')
109
- .minLength('name', 1)
110
- .custom('email', (v) => v === undefined || typeof v === 'string', 'email must be a string')
111
- .custom('password', (v) => v === undefined || typeof v === 'string', 'password must be a string')
112
- .minLength('password', 8);
113
- };
114
- const buildUserStoreSchema = () => {
115
- return Schema.create()
116
- .custom('name', (v) => typeof v === 'string', 'name must be a string')
117
- .minLength('name', 1)
118
- .custom('email', (v) => typeof v === 'string', 'email must be a string')
119
- .email('email')
120
- .custom('password', (v) => typeof v === 'string', 'password must be a string')
121
- .minLength('password', 8);
122
- };
123
- /**
124
- * User Controller Methods
125
- */
126
- const userControllerMethods = {
127
- /**
128
- * List all users
129
- * GET /users
130
- */
131
- async index(req, res) {
132
- try {
133
- const subject = typeof req.user?.sub === 'string' ? req.user.sub : undefined;
134
- if (subject === undefined || subject.length === 0) {
135
- res.status(401).json({ error: 'Unauthorized' });
136
- return;
137
- }
138
- const db = useDatabase();
139
- const users = await QueryBuilder.create('users', db)
140
- .select('id', 'name', 'email', 'created_at', 'updated_at')
141
- .where('id', '=', subject)
142
- .limit(1)
143
- .get();
144
- res.json({ data: users });
145
- }
146
- catch (error) {
147
- Logger.error('Error fetching users:', error);
148
- res.status(500).json({ error: 'Failed to fetch users' });
149
- }
150
- },
151
- /**
152
- * Show a specific user
153
- * GET /users/:id
154
- */
155
- async show(req, res) {
156
- try {
157
- const db = useDatabase();
158
- const rawId = getParamCompat(req, 'id');
159
- const id = Sanitizer.digitsOnly(rawId); // Zero trust protection for db id
160
- if (typeof id !== 'string' || id.length === 0) {
161
- // ✅ Good
162
- res.status(400).json({ error: 'Missing user id' });
163
- return;
164
- }
165
- if (!requireSelf(req, res, id))
166
- return;
167
- const user = await QueryBuilder.create('users', db)
168
- .select('id', 'name', 'email', 'created_at', 'updated_at')
169
- .where('id', '=', id)
170
- .limit(1)
171
- .first();
172
- if (user === null) {
173
- res.status(404).json({ error: 'User not found' });
174
- return;
175
- }
176
- res.json({ data: user });
177
- }
178
- catch (error) {
179
- if (isSanitizerError(error)) {
180
- res.status(400).json({ error: error.message });
181
- return;
182
- }
183
- Logger.error('Error fetching user:', error);
184
- res.status(500).json({ error: 'Failed to fetch user' });
185
- }
186
- },
187
- /**
188
- * Show create form
189
- * GET /users/create
190
- */
191
- async create(_req, res) {
192
- res.json({ form: 'Create User Form' });
193
- },
194
- /**
195
- * Store a new user
196
- * POST /users
197
- */
198
- async store(req, res) {
199
- try {
200
- // Use validated body if available (already sanitized by middleware), otherwise fallback to raw
201
- const body = resolveBody(req);
202
- const required = ['name', 'email', 'password'];
203
- const missing = {};
204
- for (const key of required) {
205
- const val = body[key];
206
- if (typeof val !== 'string' || val.trim() === '') {
207
- missing[key] = ['Required'];
208
- }
209
- }
210
- if (Object.keys(missing).length > 0) {
211
- res.status(422).json({ errors: missing });
212
- return;
213
- }
214
- // Trust middleware for sanitization if validation passed.
215
- // If we are here, validation ostensibly passed or we are in a context where we must self-validate.
216
- // To satisfy defense-in-depth without double-sanitization bottleneck:
217
- // We assume body is safe-ish if it came from resolved validated body.
218
- // But to be explicit and type-safe, we cast or read fields directly.
219
- const db = useDatabase();
220
- const ts = nowIso();
221
- // Apply bulletproof sanitization for defense-in-depth
222
- const name = Sanitizer.nameText(body['name']);
223
- const email = Sanitizer.email(body['email']);
224
- const password = Sanitizer.safePasswordChars(body['password']);
225
- Validator.validate({ name, email, password }, buildUserStoreSchema());
226
- await QueryBuilder.create('users', db).insert({
227
- name,
228
- email,
229
- password, // Hashing should be handled by model/service or here if raw
230
- created_at: ts,
231
- updated_at: ts,
232
- });
233
- res.status(201).json({ message: 'User created' });
234
- }
235
- catch (error) {
236
- if (isSanitizerError(error)) {
237
- res.status(400).json({ error: error.message });
238
- return;
239
- }
240
- if (isValidationError(error)) {
241
- res.status(422).json({ errors: error.toObject?.() ?? {} });
242
- return;
243
- }
244
- Logger.error('Error creating user:', error);
245
- res.status(500).json({ error: 'Failed to create user' });
246
- }
247
- },
248
- /**
249
- * Fill users table with random users
250
- * POST /users/fill
251
- */
252
- async fill(req, res) {
253
- try {
254
- const body = resolveBody(req);
255
- const countVal = body['count'];
256
- // Ensure count is a number (middleware validation handles this, but we double check or default)
257
- let count = typeof countVal === 'number' ? countVal : 10;
258
- if (count < 1)
259
- count = 1;
260
- if (count > 100)
261
- count = 100;
262
- const db = useDatabase();
263
- const ts = nowIso();
264
- // Optimize: Bulk insert instead of N+1 inserts to reduce IO bottleneck and memory overhead
265
- const users = Array.from({ length: count }, () => ({
266
- name: randomName(),
267
- email: randomEmail(),
268
- password: randomPassword(),
269
- created_at: ts,
270
- updated_at: ts,
271
- }));
272
- await QueryBuilder.create('users', db).insert(users);
273
- res.status(201).json({ message: 'Users filled', count });
274
- }
275
- catch (error) {
276
- Logger.error('Error filling users:', error);
277
- res.status(500).json({ error: 'Failed to fill users' });
278
- }
279
- },
280
- /**
281
- * Show edit form
282
- * GET /users/:id/edit
283
- */
284
- async edit(_req, res) {
285
- try {
286
- res.json({ form: 'Edit User Form' });
287
- }
288
- catch (error) {
289
- Logger.error('Error loading edit form:', error);
290
- res.status(500).json({ error: 'Failed to load edit form' });
291
- }
292
- },
293
- /**
294
- * Update a user
295
- * PUT /users/:id
296
- */
297
- async update(req, res) {
298
- // NOSONAR bulletproof sanitization requires explicit validation steps
299
- try {
300
- const db = useDatabase();
301
- const rawId = getParamCompat(req, 'id');
302
- const id = Sanitizer.digitsOnly(rawId);
303
- if (typeof id !== 'string' || id.length === 0) {
304
- res.status(400).json({ error: 'Missing user id' });
305
- return;
306
- }
307
- if (!requireSelf(req, res, id))
308
- return;
309
- const allowed = new Set(['name', 'email', 'password']);
310
- const body = resolveBody(req);
311
- const unknown = hasUnknownKeys(body, allowed);
312
- if (unknown !== null) {
313
- res.status(422).json({ errors: { [unknown]: ['Unknown field'] } });
314
- return;
315
- }
316
- const updateBody = pickAllowed(body, allowed);
317
- if (Object.keys(updateBody).length === 0) {
318
- res.status(422).json({ errors: { body: ['No fields to update'] } });
319
- return;
320
- }
321
- const sanitizedUpdateBody = sanitizeUserUpdateBody(updateBody);
322
- Validator.validate(sanitizedUpdateBody, buildUserUpdateSchema());
323
- const existing = await QueryBuilder.create('users', db)
324
- .select('id')
325
- .where('id', '=', id)
326
- .limit(1)
327
- .first();
328
- if (existing === null) {
329
- res.status(404).json({ error: 'User not found' });
330
- return;
331
- }
332
- const ts = nowIso();
333
- await QueryBuilder.create('users', db)
334
- .where('id', '=', id)
335
- .update({ ...sanitizedUpdateBody, updated_at: ts });
336
- const user = await QueryBuilder.create('users', db)
337
- .select('id', 'name', 'email', 'created_at', 'updated_at')
338
- .where('id', '=', id)
339
- .limit(1)
340
- .first();
341
- res.json({ message: 'User updated', user });
342
- }
343
- catch (error) {
344
- if (isSanitizerError(error)) {
345
- res.status(400).json({ error: error.message });
346
- return;
347
- }
348
- if (isValidationError(error)) {
349
- res.status(422).json({ errors: error.toObject?.() ?? {} });
350
- return;
351
- }
352
- Logger.error('Error updating user:', error);
353
- res.status(500).json({ error: 'Failed to update user' });
354
- }
355
- },
356
- /**
357
- * Delete a user
358
- * DELETE /users/:id
359
- */
360
- async destroy(req, res) {
361
- try {
362
- const db = useDatabase();
363
- const rawId = getParamCompat(req, 'id');
364
- const id = Sanitizer.digitsOnly(rawId);
365
- if (typeof id !== 'string' || id.length === 0) {
366
- res.status(400).json({ error: 'Missing user id' });
367
- return;
368
- }
369
- if (!requireSelf(req, res, id))
370
- return;
371
- const existing = await QueryBuilder.create('users', db)
372
- .select('id')
373
- .where('id', '=', id)
374
- .limit(1)
375
- .first();
376
- if (existing === null) {
377
- res.status(404).json({ error: 'User not found' });
378
- return;
379
- }
380
- await QueryBuilder.create('users', db).where('id', '=', id).delete();
381
- res.json({ message: 'User deleted' });
382
- }
383
- catch (error) {
384
- if (isSanitizerError(error)) {
385
- res.status(400).json({ error: error.message });
386
- return;
387
- }
388
- Logger.error('Error deleting user:', error);
389
- res.status(500).json({ error: 'Failed to delete user' });
390
- }
391
- },
392
- };
393
- /**
394
- * User QueryBuilder Controller Factory
395
- */
396
- export const UserQueryBuilderController = {
397
- /**
398
- * Create a new user controller instance
399
- */
400
- create() {
401
- return userControllerMethods;
402
- },
403
- };
404
- export default UserQueryBuilderController;
@@ -1,12 +0,0 @@
1
- /**
2
- * Profiler Middleware
3
- * Enables request profiling when ENABLE_PROFILER environment variable is set
4
- */
5
- import type { Middleware } from '../../src/middleware/MiddlewareStack';
6
- /**
7
- * ProfilerMiddleware wraps request execution with performance profiling
8
- * Enabled via ENABLE_PROFILER=true environment variable
9
- * Attaches profiling report to response headers
10
- */
11
- export declare const ProfilerMiddleware: Middleware;
12
- //# sourceMappingURL=ProfilerMiddleware.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProfilerMiddleware.d.ts","sourceRoot":"","sources":["../../../app/Middleware/ProfilerMiddleware.ts"],"names":[],"mappings":"AACA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAG9D;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,UAwChC,CAAC"}