alepha 0.13.6 → 0.13.8

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 (487) hide show
  1. package/README.md +5 -2
  2. package/assets/swagger-ui/swagger-ui-bundle.js +1 -1
  3. package/assets/swagger-ui/swagger-ui-standalone-preset.js +1 -1
  4. package/assets/swagger-ui/swagger-ui.css +1 -1
  5. package/dist/api/audits/index.browser.js +116 -0
  6. package/dist/api/audits/index.browser.js.map +1 -0
  7. package/dist/api/audits/index.d.ts +1194 -0
  8. package/dist/api/audits/index.js +674 -0
  9. package/dist/api/audits/index.js.map +1 -0
  10. package/dist/{api-files → api/files}/index.browser.js +5 -5
  11. package/dist/api/files/index.browser.js.map +1 -0
  12. package/dist/{api-files → api/files}/index.d.ts +16 -9
  13. package/dist/{api-files → api/files}/index.js +10 -10
  14. package/dist/api/files/index.js.map +1 -0
  15. package/dist/{api-jobs → api/jobs}/index.browser.js +5 -5
  16. package/dist/api/jobs/index.browser.js.map +1 -0
  17. package/dist/{api-jobs → api/jobs}/index.d.ts +35 -35
  18. package/dist/{api-jobs → api/jobs}/index.js +9 -9
  19. package/dist/api/jobs/index.js.map +1 -0
  20. package/dist/{api-notifications → api/notifications}/index.browser.js +11 -11
  21. package/dist/api/notifications/index.browser.js.map +1 -0
  22. package/dist/api/notifications/index.d.ts +327 -0
  23. package/dist/{api-notifications → api/notifications}/index.js +11 -11
  24. package/dist/api/notifications/index.js.map +1 -0
  25. package/dist/api/parameters/index.browser.js +60 -0
  26. package/dist/api/parameters/index.browser.js.map +1 -0
  27. package/dist/api/parameters/index.d.ts +761 -0
  28. package/dist/api/parameters/index.js +877 -0
  29. package/dist/api/parameters/index.js.map +1 -0
  30. package/dist/{api-users → api/users}/index.browser.js +6 -6
  31. package/dist/api/users/index.browser.js.map +1 -0
  32. package/dist/{api-users → api/users}/index.d.ts +259 -247
  33. package/dist/{api-users → api/users}/index.js +125 -112
  34. package/dist/api/users/index.js.map +1 -0
  35. package/dist/{api-verifications → api/verifications}/index.browser.js +5 -5
  36. package/dist/api/verifications/index.browser.js.map +1 -0
  37. package/dist/api/verifications/index.d.ts +248 -0
  38. package/dist/{api-verifications → api/verifications}/index.js +13 -12
  39. package/dist/api/verifications/index.js.map +1 -0
  40. package/dist/bin/index.js +1 -0
  41. package/dist/bin/index.js.map +1 -1
  42. package/dist/cache/{index.d.ts → core/index.d.ts} +4 -4
  43. package/dist/cache/{index.js → core/index.js} +5 -5
  44. package/dist/cache/core/index.js.map +1 -0
  45. package/dist/{cache-redis → cache/redis}/index.d.ts +2 -2
  46. package/dist/{cache-redis → cache/redis}/index.js +2 -2
  47. package/dist/cache/redis/index.js.map +1 -0
  48. package/dist/cli/index.d.ts +71 -9
  49. package/dist/cli/index.js +280 -79
  50. package/dist/cli/index.js.map +1 -1
  51. package/dist/command/index.d.ts +63 -2
  52. package/dist/command/index.js +30 -3
  53. package/dist/command/index.js.map +1 -1
  54. package/dist/core/index.browser.js +241 -61
  55. package/dist/core/index.browser.js.map +1 -1
  56. package/dist/core/index.d.ts +170 -90
  57. package/dist/core/index.js +264 -67
  58. package/dist/core/index.js.map +1 -1
  59. package/dist/core/index.native.js +248 -65
  60. package/dist/core/index.native.js.map +1 -1
  61. package/dist/email/index.js +15 -10554
  62. package/dist/email/index.js.map +1 -1
  63. package/dist/lock/{index.d.ts → core/index.d.ts} +5 -5
  64. package/dist/lock/{index.js → core/index.js} +5 -5
  65. package/dist/lock/core/index.js.map +1 -0
  66. package/dist/{lock-redis → lock/redis}/index.d.ts +2 -2
  67. package/dist/{lock-redis → lock/redis}/index.js +2 -2
  68. package/dist/lock/redis/index.js.map +1 -0
  69. package/dist/logger/index.d.ts +4 -4
  70. package/dist/logger/index.js +77 -72
  71. package/dist/logger/index.js.map +1 -1
  72. package/dist/orm/index.d.ts +5 -1
  73. package/dist/orm/index.js +24 -7
  74. package/dist/orm/index.js.map +1 -1
  75. package/dist/queue/core/index.d.ts +548 -0
  76. package/dist/queue/core/index.js +391 -0
  77. package/dist/queue/core/index.js.map +1 -0
  78. package/dist/queue/redis/index.d.ts +28 -0
  79. package/dist/queue/redis/index.js +43 -0
  80. package/dist/queue/redis/index.js.map +1 -0
  81. package/dist/scheduler/index.d.ts +7 -7
  82. package/dist/scheduler/index.js +1 -393
  83. package/dist/scheduler/index.js.map +1 -1
  84. package/dist/security/index.d.ts +1 -1
  85. package/dist/security/index.js +2 -1413
  86. package/dist/security/index.js.map +1 -1
  87. package/dist/{server-auth → server/auth}/index.browser.js +6 -6
  88. package/dist/server/auth/index.browser.js.map +1 -0
  89. package/dist/{server-auth → server/auth}/index.d.ts +175 -164
  90. package/dist/server/auth/index.js +742 -0
  91. package/dist/server/auth/index.js.map +1 -0
  92. package/dist/{server-cache → server/cache}/index.d.ts +2 -2
  93. package/dist/{server-cache → server/cache}/index.js +2 -2
  94. package/dist/server/cache/index.js.map +1 -0
  95. package/dist/{server-compress → server/compress}/index.d.ts +2 -2
  96. package/dist/{server-compress → server/compress}/index.js +2 -2
  97. package/dist/server/compress/index.js.map +1 -0
  98. package/dist/{server-cookies → server/cookies}/index.browser.js +3 -3
  99. package/dist/server/cookies/index.browser.js.map +1 -0
  100. package/dist/{server-cookies → server/cookies}/index.d.ts +4 -4
  101. package/dist/{server-cookies → server/cookies}/index.js +9 -5
  102. package/dist/server/cookies/index.js.map +1 -0
  103. package/dist/server/{index.browser.js → core/index.browser.js} +14 -14
  104. package/dist/server/core/index.browser.js.map +1 -0
  105. package/dist/server/{index.d.ts → core/index.d.ts} +46 -37
  106. package/dist/server/{index.js → core/index.js} +47 -33
  107. package/dist/server/core/index.js.map +1 -0
  108. package/dist/{server-cors → server/cors}/index.d.ts +3 -3
  109. package/dist/{server-cors → server/cors}/index.js +3 -3
  110. package/dist/server/cors/index.js.map +1 -0
  111. package/dist/{server-health → server/health}/index.d.ts +3 -3
  112. package/dist/{server-health → server/health}/index.js +3 -3
  113. package/dist/server/health/index.js.map +1 -0
  114. package/dist/{server-helmet → server/helmet}/index.d.ts +2 -2
  115. package/dist/{server-helmet → server/helmet}/index.js +2 -2
  116. package/dist/server/helmet/index.js.map +1 -0
  117. package/dist/{server-links → server/links}/index.browser.js +5 -5
  118. package/dist/server/links/index.browser.js.map +1 -0
  119. package/dist/{server-links → server/links}/index.d.ts +40 -40
  120. package/dist/{server-links → server/links}/index.js +7 -7
  121. package/dist/server/links/index.js.map +1 -0
  122. package/dist/{server-metrics → server/metrics}/index.d.ts +2 -2
  123. package/dist/server/metrics/index.js +74 -0
  124. package/dist/server/metrics/index.js.map +1 -0
  125. package/dist/{server-multipart → server/multipart}/index.d.ts +2 -2
  126. package/dist/{server-multipart → server/multipart}/index.js +2 -2
  127. package/dist/server/multipart/index.js.map +1 -0
  128. package/dist/{server-proxy → server/proxy}/index.d.ts +3 -3
  129. package/dist/{server-proxy → server/proxy}/index.js +3 -3
  130. package/dist/server/proxy/index.js.map +1 -0
  131. package/dist/{server-rate-limit → server/rate-limit}/index.d.ts +4 -4
  132. package/dist/{server-rate-limit → server/rate-limit}/index.js +4 -4
  133. package/dist/server/rate-limit/index.js.map +1 -0
  134. package/dist/{server-security → server/security}/index.browser.js +1 -1
  135. package/dist/server/security/index.browser.js.map +1 -0
  136. package/dist/{server-security → server/security}/index.d.ts +4 -4
  137. package/dist/{server-security → server/security}/index.js +4 -4
  138. package/dist/server/security/index.js.map +1 -0
  139. package/dist/{server-static → server/static}/index.d.ts +3 -3
  140. package/dist/{server-static → server/static}/index.js +3 -3
  141. package/dist/server/static/index.js.map +1 -0
  142. package/dist/{server-swagger → server/swagger}/index.d.ts +3 -3
  143. package/dist/{server-swagger → server/swagger}/index.js +4 -4
  144. package/dist/server/swagger/index.js.map +1 -0
  145. package/dist/thread/index.js +2 -2
  146. package/dist/thread/index.js.map +1 -1
  147. package/dist/topic/{index.d.ts → core/index.d.ts} +6 -6
  148. package/dist/topic/{index.js → core/index.js} +6 -6
  149. package/dist/topic/core/index.js.map +1 -0
  150. package/dist/{topic-redis → topic/redis}/index.d.ts +2 -2
  151. package/dist/{topic-redis → topic/redis}/index.js +2 -2
  152. package/dist/topic/redis/index.js.map +1 -0
  153. package/dist/vite/index.d.ts +13 -2
  154. package/dist/vite/index.js +114 -50
  155. package/dist/vite/index.js.map +1 -1
  156. package/dist/websocket/index.browser.js +3 -3
  157. package/dist/websocket/index.browser.js.map +1 -1
  158. package/dist/websocket/index.js +4 -4
  159. package/dist/websocket/index.js.map +1 -1
  160. package/package.json +160 -156
  161. package/src/api/audits/controllers/AuditController.ts +186 -0
  162. package/src/api/audits/entities/audits.ts +132 -0
  163. package/src/api/audits/index.browser.ts +18 -0
  164. package/src/api/audits/index.ts +58 -0
  165. package/src/api/audits/primitives/$audit.ts +159 -0
  166. package/src/api/audits/schemas/auditQuerySchema.ts +23 -0
  167. package/src/api/audits/schemas/auditResourceSchema.ts +9 -0
  168. package/src/api/audits/schemas/createAuditSchema.ts +27 -0
  169. package/src/api/audits/services/AuditService.ts +412 -0
  170. package/src/{api-files → api/files}/index.ts +1 -0
  171. package/src/api/parameters/controllers/ConfigController.ts +324 -0
  172. package/src/api/parameters/entities/parameters.ts +113 -0
  173. package/src/api/parameters/index.ts +60 -0
  174. package/src/api/parameters/primitives/$config.ts +351 -0
  175. package/src/api/parameters/schedulers/ConfigActivationScheduler.ts +30 -0
  176. package/src/api/parameters/services/ConfigStore.ts +491 -0
  177. package/src/{api-users → api/users}/atoms/realmAuthSettingsAtom.ts +19 -0
  178. package/src/{api-users → api/users}/controllers/UserRealmController.ts +0 -2
  179. package/src/{api-users → api/users}/index.ts +2 -0
  180. package/src/{api-users → api/users}/primitives/$userRealm.ts +18 -3
  181. package/src/{api-users → api/users}/providers/UserRealmProvider.ts +12 -10
  182. package/src/{api-users → api/users}/services/RegistrationService.ts +2 -1
  183. package/src/{api-users → api/users}/services/SessionService.ts +4 -0
  184. package/src/{api-users → api/users}/services/UserService.ts +3 -0
  185. package/src/{api-verifications → api/verifications}/index.ts +9 -1
  186. package/src/bin/index.ts +1 -0
  187. package/src/cli/apps/AlephaPackageBuilderCli.ts +73 -48
  188. package/src/cli/assets/appRouterTs.ts +1 -1
  189. package/src/cli/assets/biomeJson.ts +2 -2
  190. package/src/cli/assets/dummySpecTs.ts +7 -0
  191. package/src/cli/assets/editorconfig.ts +13 -0
  192. package/src/cli/assets/indexHtml.ts +1 -1
  193. package/src/cli/assets/mainBrowserTs.ts +1 -1
  194. package/src/cli/assets/mainTs.ts +14 -0
  195. package/src/cli/assets/viteConfigTs.ts +1 -1
  196. package/src/cli/commands/BiomeCommands.ts +2 -0
  197. package/src/cli/commands/CoreCommands.ts +38 -15
  198. package/src/cli/commands/VerifyCommands.ts +6 -2
  199. package/src/cli/commands/ViteCommands.ts +28 -18
  200. package/src/cli/services/AlephaCliUtils.ts +243 -37
  201. package/src/command/helpers/Asker.ts +0 -1
  202. package/src/command/primitives/$command.ts +67 -0
  203. package/src/command/providers/CliProvider.ts +39 -8
  204. package/src/core/Alepha.ts +40 -30
  205. package/src/core/helpers/jsonSchemaToTypeBox.ts +307 -0
  206. package/src/core/index.shared.ts +1 -0
  207. package/src/core/index.ts +30 -3
  208. package/src/core/providers/EventManager.ts +1 -1
  209. package/src/core/providers/SchemaValidator.ts +1 -1
  210. package/src/core/providers/StateManager.ts +23 -12
  211. package/src/core/providers/TypeProvider.ts +26 -34
  212. package/src/logger/index.ts +8 -6
  213. package/src/logger/primitives/$logger.ts +1 -1
  214. package/src/logger/providers/{SimpleFormatterProvider.ts → PrettyFormatterProvider.ts} +10 -1
  215. package/src/orm/index.ts +6 -0
  216. package/src/orm/services/PgRelationManager.ts +2 -2
  217. package/src/orm/services/PostgresModelBuilder.ts +11 -7
  218. package/src/orm/services/Repository.ts +16 -7
  219. package/src/orm/services/SqliteModelBuilder.ts +10 -0
  220. package/src/queue/{index.ts → core/index.ts} +2 -3
  221. package/src/queue/{primitives → core/primitives}/$queue.ts +17 -162
  222. package/src/queue/core/providers/MemoryQueueProvider.ts +19 -0
  223. package/src/queue/core/providers/QueueProvider.ts +23 -0
  224. package/src/queue/core/providers/WorkerProvider.ts +244 -0
  225. package/src/queue/redis/providers/RedisQueueProvider.ts +31 -0
  226. package/src/{server-auth → server/auth}/primitives/$auth.ts +7 -0
  227. package/src/{server-auth → server/auth}/providers/ServerAuthProvider.ts +51 -8
  228. package/src/{server-cookies → server/cookies}/index.ts +2 -1
  229. package/src/server/{index.ts → core/index.ts} +7 -0
  230. package/src/server/{primitives → core/primitives}/$action.ts +10 -1
  231. package/src/server/{providers → core/providers}/ServerBodyParserProvider.ts +11 -5
  232. package/src/server/{providers → core/providers}/ServerRouterProvider.ts +13 -7
  233. package/src/{server-rate-limit → server/rate-limit}/index.ts +1 -1
  234. package/src/{server-swagger → server/swagger}/providers/ServerSwaggerProvider.ts +1 -0
  235. package/src/thread/primitives/$thread.ts +2 -2
  236. package/src/vite/index.ts +0 -2
  237. package/src/vite/tasks/buildServer.ts +3 -4
  238. package/src/vite/tasks/copyAssets.ts +32 -8
  239. package/src/vite/tasks/generateCloudflare.ts +35 -19
  240. package/src/vite/tasks/generateDocker.ts +18 -4
  241. package/src/vite/tasks/generateSitemap.ts +5 -7
  242. package/src/vite/tasks/generateVercel.ts +76 -41
  243. package/src/vite/tasks/runAlepha.ts +16 -1
  244. package/src/websocket/providers/NodeWebSocketServerProvider.ts +3 -11
  245. package/src/websocket/services/WebSocketClient.ts +3 -3
  246. package/dist/api-files/index.browser.js.map +0 -1
  247. package/dist/api-files/index.js.map +0 -1
  248. package/dist/api-jobs/index.browser.js.map +0 -1
  249. package/dist/api-jobs/index.js.map +0 -1
  250. package/dist/api-notifications/index.browser.js.map +0 -1
  251. package/dist/api-notifications/index.d.ts +0 -327
  252. package/dist/api-notifications/index.js.map +0 -1
  253. package/dist/api-parameters/index.browser.js +0 -29
  254. package/dist/api-parameters/index.browser.js.map +0 -1
  255. package/dist/api-parameters/index.d.ts +0 -83
  256. package/dist/api-parameters/index.js +0 -63
  257. package/dist/api-parameters/index.js.map +0 -1
  258. package/dist/api-users/index.browser.js.map +0 -1
  259. package/dist/api-users/index.js.map +0 -1
  260. package/dist/api-verifications/index.browser.js.map +0 -1
  261. package/dist/api-verifications/index.d.ts +0 -229
  262. package/dist/api-verifications/index.js.map +0 -1
  263. package/dist/cache/index.js.map +0 -1
  264. package/dist/cache-redis/index.js.map +0 -1
  265. package/dist/cli/dist-BlfFtOk2.js +0 -2770
  266. package/dist/cli/dist-BlfFtOk2.js.map +0 -1
  267. package/dist/lock/index.js.map +0 -1
  268. package/dist/lock-redis/index.js.map +0 -1
  269. package/dist/queue/index.d.ts +0 -1265
  270. package/dist/queue/index.js +0 -1037
  271. package/dist/queue/index.js.map +0 -1
  272. package/dist/queue-redis/index.d.ts +0 -82
  273. package/dist/queue-redis/index.js +0 -872
  274. package/dist/queue-redis/index.js.map +0 -1
  275. package/dist/server/index.browser.js.map +0 -1
  276. package/dist/server/index.js.map +0 -1
  277. package/dist/server-auth/index.browser.js.map +0 -1
  278. package/dist/server-auth/index.js +0 -1943
  279. package/dist/server-auth/index.js.map +0 -1
  280. package/dist/server-cache/index.js.map +0 -1
  281. package/dist/server-compress/index.js.map +0 -1
  282. package/dist/server-cookies/index.browser.js.map +0 -1
  283. package/dist/server-cookies/index.js.map +0 -1
  284. package/dist/server-cors/index.js.map +0 -1
  285. package/dist/server-health/index.js.map +0 -1
  286. package/dist/server-helmet/index.js.map +0 -1
  287. package/dist/server-links/index.browser.js.map +0 -1
  288. package/dist/server-links/index.js.map +0 -1
  289. package/dist/server-metrics/index.js +0 -4532
  290. package/dist/server-metrics/index.js.map +0 -1
  291. package/dist/server-multipart/index.js.map +0 -1
  292. package/dist/server-proxy/index.js.map +0 -1
  293. package/dist/server-rate-limit/index.js.map +0 -1
  294. package/dist/server-security/index.browser.js.map +0 -1
  295. package/dist/server-security/index.js.map +0 -1
  296. package/dist/server-static/index.js.map +0 -1
  297. package/dist/server-swagger/index.js.map +0 -1
  298. package/dist/topic/index.js.map +0 -1
  299. package/dist/topic-redis/index.js.map +0 -1
  300. package/src/api-parameters/controllers/ParameterController.ts +0 -45
  301. package/src/api-parameters/entities/parameters.ts +0 -30
  302. package/src/api-parameters/index.ts +0 -21
  303. package/src/api-parameters/primitives/$config.ts +0 -79
  304. package/src/api-parameters/services/ParameterStore.ts +0 -23
  305. package/src/queue/interfaces/QueueJob.ts +0 -459
  306. package/src/queue/providers/MemoryQueueProvider.ts +0 -850
  307. package/src/queue/providers/QueueProvider.ts +0 -319
  308. package/src/queue/providers/WorkerProvider.ts +0 -344
  309. package/src/queue-redis/providers/RedisQueueProvider.ts +0 -1209
  310. /package/src/{api-files → api/files}/controllers/FileController.ts +0 -0
  311. /package/src/{api-files → api/files}/controllers/StorageStatsController.ts +0 -0
  312. /package/src/{api-files → api/files}/entities/files.ts +0 -0
  313. /package/src/{api-files → api/files}/index.browser.ts +0 -0
  314. /package/src/{api-files → api/files}/jobs/FileJobs.ts +0 -0
  315. /package/src/{api-files → api/files}/schemas/fileQuerySchema.ts +0 -0
  316. /package/src/{api-files → api/files}/schemas/fileResourceSchema.ts +0 -0
  317. /package/src/{api-files → api/files}/schemas/storageStatsSchema.ts +0 -0
  318. /package/src/{api-files → api/files}/services/FileService.ts +0 -0
  319. /package/src/{api-jobs → api/jobs}/controllers/JobController.ts +0 -0
  320. /package/src/{api-jobs → api/jobs}/entities/jobExecutions.ts +0 -0
  321. /package/src/{api-jobs → api/jobs}/index.browser.ts +0 -0
  322. /package/src/{api-jobs → api/jobs}/index.ts +0 -0
  323. /package/src/{api-jobs → api/jobs}/primitives/$job.ts +0 -0
  324. /package/src/{api-jobs → api/jobs}/providers/JobProvider.ts +0 -0
  325. /package/src/{api-jobs → api/jobs}/schemas/jobExecutionQuerySchema.ts +0 -0
  326. /package/src/{api-jobs → api/jobs}/schemas/jobExecutionResourceSchema.ts +0 -0
  327. /package/src/{api-jobs → api/jobs}/schemas/triggerJobSchema.ts +0 -0
  328. /package/src/{api-jobs → api/jobs}/services/JobService.ts +0 -0
  329. /package/src/{api-notifications → api/notifications}/controllers/NotificationController.ts +0 -0
  330. /package/src/{api-notifications → api/notifications}/entities/notifications.ts +0 -0
  331. /package/src/{api-notifications → api/notifications}/index.browser.ts +0 -0
  332. /package/src/{api-notifications → api/notifications}/index.ts +0 -0
  333. /package/src/{api-notifications → api/notifications}/jobs/NotificationJobs.ts +0 -0
  334. /package/src/{api-notifications → api/notifications}/primitives/$notification.ts +0 -0
  335. /package/src/{api-notifications → api/notifications}/queues/NotificationQueues.ts +0 -0
  336. /package/src/{api-notifications → api/notifications}/schemas/notificationContactPreferencesSchema.ts +0 -0
  337. /package/src/{api-notifications → api/notifications}/schemas/notificationContactSchema.ts +0 -0
  338. /package/src/{api-notifications → api/notifications}/schemas/notificationCreateSchema.ts +0 -0
  339. /package/src/{api-notifications → api/notifications}/schemas/notificationQuerySchema.ts +0 -0
  340. /package/src/{api-notifications → api/notifications}/services/NotificationSenderService.ts +0 -0
  341. /package/src/{api-notifications → api/notifications}/services/NotificationService.ts +0 -0
  342. /package/src/{api-parameters → api/parameters}/index.browser.ts +0 -0
  343. /package/src/{api-users → api/users}/controllers/IdentityController.ts +0 -0
  344. /package/src/{api-users → api/users}/controllers/SessionController.ts +0 -0
  345. /package/src/{api-users → api/users}/controllers/UserController.ts +0 -0
  346. /package/src/{api-users → api/users}/entities/identities.ts +0 -0
  347. /package/src/{api-users → api/users}/entities/sessions.ts +0 -0
  348. /package/src/{api-users → api/users}/entities/users.ts +0 -0
  349. /package/src/{api-users → api/users}/index.browser.ts +0 -0
  350. /package/src/{api-users → api/users}/notifications/UserNotifications.ts +0 -0
  351. /package/src/{api-users → api/users}/schemas/completePasswordResetRequestSchema.ts +0 -0
  352. /package/src/{api-users → api/users}/schemas/completeRegistrationRequestSchema.ts +0 -0
  353. /package/src/{api-users → api/users}/schemas/createUserSchema.ts +0 -0
  354. /package/src/{api-users → api/users}/schemas/identityQuerySchema.ts +0 -0
  355. /package/src/{api-users → api/users}/schemas/identityResourceSchema.ts +0 -0
  356. /package/src/{api-users → api/users}/schemas/loginSchema.ts +0 -0
  357. /package/src/{api-users → api/users}/schemas/passwordResetIntentResponseSchema.ts +0 -0
  358. /package/src/{api-users → api/users}/schemas/registerQuerySchema.ts +0 -0
  359. /package/src/{api-users → api/users}/schemas/registerRequestSchema.ts +0 -0
  360. /package/src/{api-users → api/users}/schemas/registerResponseSchema.ts +0 -0
  361. /package/src/{api-users → api/users}/schemas/registerSchema.ts +0 -0
  362. /package/src/{api-users → api/users}/schemas/registrationIntentResponseSchema.ts +0 -0
  363. /package/src/{api-users → api/users}/schemas/resetPasswordSchema.ts +0 -0
  364. /package/src/{api-users → api/users}/schemas/sessionQuerySchema.ts +0 -0
  365. /package/src/{api-users → api/users}/schemas/sessionResourceSchema.ts +0 -0
  366. /package/src/{api-users → api/users}/schemas/updateUserSchema.ts +0 -0
  367. /package/src/{api-users → api/users}/schemas/userQuerySchema.ts +0 -0
  368. /package/src/{api-users → api/users}/schemas/userRealmConfigSchema.ts +0 -0
  369. /package/src/{api-users → api/users}/schemas/userResourceSchema.ts +0 -0
  370. /package/src/{api-users → api/users}/services/CredentialService.ts +0 -0
  371. /package/src/{api-users → api/users}/services/IdentityService.ts +0 -0
  372. /package/src/{api-users → api/users}/services/SessionCrudService.ts +0 -0
  373. /package/src/{api-verifications → api/verifications}/controllers/VerificationController.ts +0 -0
  374. /package/src/{api-verifications → api/verifications}/entities/verifications.ts +0 -0
  375. /package/src/{api-verifications → api/verifications}/index.browser.ts +0 -0
  376. /package/src/{api-verifications → api/verifications}/jobs/VerificationJobs.ts +0 -0
  377. /package/src/{api-verifications → api/verifications}/parameters/VerificationParameters.ts +0 -0
  378. /package/src/{api-verifications → api/verifications}/schemas/requestVerificationCodeResponseSchema.ts +0 -0
  379. /package/src/{api-verifications → api/verifications}/schemas/validateVerificationCodeResponseSchema.ts +0 -0
  380. /package/src/{api-verifications → api/verifications}/schemas/verificationSettingsSchema.ts +0 -0
  381. /package/src/{api-verifications → api/verifications}/schemas/verificationTypeEnumSchema.ts +0 -0
  382. /package/src/{api-verifications → api/verifications}/services/VerificationService.ts +0 -0
  383. /package/src/cache/{errors → core/errors}/CacheError.ts +0 -0
  384. /package/src/cache/{index.ts → core/index.ts} +0 -0
  385. /package/src/cache/{primitives → core/primitives}/$cache.ts +0 -0
  386. /package/src/cache/{providers → core/providers}/CacheProvider.ts +0 -0
  387. /package/src/cache/{providers → core/providers}/MemoryCacheProvider.ts +0 -0
  388. /package/src/{cache-redis → cache/redis}/index.ts +0 -0
  389. /package/src/{cache-redis → cache/redis}/providers/RedisCacheProvider.ts +0 -0
  390. /package/src/lock/{index.ts → core/index.ts} +0 -0
  391. /package/src/lock/{primitives → core/primitives}/$lock.ts +0 -0
  392. /package/src/lock/{providers → core/providers}/LockProvider.ts +0 -0
  393. /package/src/lock/{providers → core/providers}/LockTopicProvider.ts +0 -0
  394. /package/src/lock/{providers → core/providers}/MemoryLockProvider.ts +0 -0
  395. /package/src/{lock-redis → lock/redis}/index.ts +0 -0
  396. /package/src/{lock-redis → lock/redis}/providers/RedisLockProvider.ts +0 -0
  397. /package/src/queue/{primitives → core/primitives}/$consumer.ts +0 -0
  398. /package/src/{queue-redis → queue/redis}/index.ts +0 -0
  399. /package/src/{server-auth → server/auth}/constants/routes.ts +0 -0
  400. /package/src/{server-auth → server/auth}/index.browser.ts +0 -0
  401. /package/src/{server-auth → server/auth}/index.shared.ts +0 -0
  402. /package/src/{server-auth → server/auth}/index.ts +0 -0
  403. /package/src/{server-auth → server/auth}/primitives/$authApple.ts +0 -0
  404. /package/src/{server-auth → server/auth}/primitives/$authCredentials.ts +0 -0
  405. /package/src/{server-auth → server/auth}/primitives/$authGithub.ts +0 -0
  406. /package/src/{server-auth → server/auth}/primitives/$authGoogle.ts +0 -0
  407. /package/src/{server-auth → server/auth}/schemas/authenticationProviderSchema.ts +0 -0
  408. /package/src/{server-auth → server/auth}/schemas/tokenResponseSchema.ts +0 -0
  409. /package/src/{server-auth → server/auth}/schemas/tokensSchema.ts +0 -0
  410. /package/src/{server-auth → server/auth}/schemas/userinfoResponseSchema.ts +0 -0
  411. /package/src/{server-cache → server/cache}/index.ts +0 -0
  412. /package/src/{server-cache → server/cache}/providers/ServerCacheProvider.ts +0 -0
  413. /package/src/{server-compress → server/compress}/index.ts +0 -0
  414. /package/src/{server-compress → server/compress}/providers/ServerCompressProvider.ts +0 -0
  415. /package/src/{server-cookies → server/cookies}/index.browser.ts +0 -0
  416. /package/src/{server-cookies → server/cookies}/primitives/$cookie.browser.ts +0 -0
  417. /package/src/{server-cookies → server/cookies}/primitives/$cookie.ts +0 -0
  418. /package/src/{server-cookies → server/cookies}/providers/ServerCookiesProvider.ts +0 -0
  419. /package/src/{server-cookies → server/cookies}/services/CookieParser.ts +0 -0
  420. /package/src/server/{constants → core/constants}/routeMethods.ts +0 -0
  421. /package/src/server/{errors → core/errors}/BadRequestError.ts +0 -0
  422. /package/src/server/{errors → core/errors}/ConflictError.ts +0 -0
  423. /package/src/server/{errors → core/errors}/ForbiddenError.ts +0 -0
  424. /package/src/server/{errors → core/errors}/HttpError.ts +0 -0
  425. /package/src/server/{errors → core/errors}/NotFoundError.ts +0 -0
  426. /package/src/server/{errors → core/errors}/UnauthorizedError.ts +0 -0
  427. /package/src/server/{errors → core/errors}/ValidationError.ts +0 -0
  428. /package/src/server/{helpers → core/helpers}/ServerReply.ts +0 -0
  429. /package/src/server/{helpers → core/helpers}/isMultipart.ts +0 -0
  430. /package/src/server/{index.browser.ts → core/index.browser.ts} +0 -0
  431. /package/src/server/{index.shared.ts → core/index.shared.ts} +0 -0
  432. /package/src/server/{interfaces → core/interfaces}/ServerRequest.ts +0 -0
  433. /package/src/server/{primitives → core/primitives}/$route.ts +0 -0
  434. /package/src/server/{providers → core/providers}/BunHttpServerProvider.ts +0 -0
  435. /package/src/server/{providers → core/providers}/NodeHttpServerProvider.ts +0 -0
  436. /package/src/server/{providers → core/providers}/ServerLoggerProvider.ts +0 -0
  437. /package/src/server/{providers → core/providers}/ServerNotReadyProvider.ts +0 -0
  438. /package/src/server/{providers → core/providers}/ServerProvider.ts +0 -0
  439. /package/src/server/{providers → core/providers}/ServerTimingProvider.ts +0 -0
  440. /package/src/server/{schemas → core/schemas}/errorSchema.ts +0 -0
  441. /package/src/server/{schemas → core/schemas}/okSchema.ts +0 -0
  442. /package/src/server/{services → core/services}/HttpClient.ts +0 -0
  443. /package/src/server/{services → core/services}/ServerRequestParser.ts +0 -0
  444. /package/src/server/{services → core/services}/UserAgentParser.ts +0 -0
  445. /package/src/{server-cors → server/cors}/index.ts +0 -0
  446. /package/src/{server-cors → server/cors}/primitives/$cors.ts +0 -0
  447. /package/src/{server-cors → server/cors}/providers/ServerCorsProvider.ts +0 -0
  448. /package/src/{server-health → server/health}/index.ts +0 -0
  449. /package/src/{server-health → server/health}/providers/ServerHealthProvider.ts +0 -0
  450. /package/src/{server-health → server/health}/schemas/healthSchema.ts +0 -0
  451. /package/src/{server-helmet → server/helmet}/index.ts +0 -0
  452. /package/src/{server-helmet → server/helmet}/providers/ServerHelmetProvider.ts +0 -0
  453. /package/src/{server-links → server/links}/index.browser.ts +0 -0
  454. /package/src/{server-links → server/links}/index.ts +0 -0
  455. /package/src/{server-links → server/links}/primitives/$client.ts +0 -0
  456. /package/src/{server-links → server/links}/primitives/$remote.ts +0 -0
  457. /package/src/{server-links → server/links}/providers/LinkProvider.ts +0 -0
  458. /package/src/{server-links → server/links}/providers/RemotePrimitiveProvider.ts +0 -0
  459. /package/src/{server-links → server/links}/providers/ServerLinksProvider.ts +0 -0
  460. /package/src/{server-links → server/links}/schemas/apiLinksResponseSchema.ts +0 -0
  461. /package/src/{server-metrics → server/metrics}/index.ts +0 -0
  462. /package/src/{server-metrics → server/metrics}/providers/ServerMetricsProvider.ts +0 -0
  463. /package/src/{server-multipart → server/multipart}/index.ts +0 -0
  464. /package/src/{server-multipart → server/multipart}/providers/ServerMultipartProvider.ts +0 -0
  465. /package/src/{server-proxy → server/proxy}/index.ts +0 -0
  466. /package/src/{server-proxy → server/proxy}/primitives/$proxy.ts +0 -0
  467. /package/src/{server-proxy → server/proxy}/providers/ServerProxyProvider.ts +0 -0
  468. /package/src/{server-rate-limit → server/rate-limit}/primitives/$rateLimit.ts +0 -0
  469. /package/src/{server-rate-limit → server/rate-limit}/providers/ServerRateLimitProvider.ts +0 -0
  470. /package/src/{server-security → server/security}/index.browser.ts +0 -0
  471. /package/src/{server-security → server/security}/index.ts +0 -0
  472. /package/src/{server-security → server/security}/primitives/$basicAuth.ts +0 -0
  473. /package/src/{server-security → server/security}/providers/ServerBasicAuthProvider.ts +0 -0
  474. /package/src/{server-security → server/security}/providers/ServerSecurityProvider.ts +0 -0
  475. /package/src/{server-static → server/static}/index.ts +0 -0
  476. /package/src/{server-static → server/static}/primitives/$serve.ts +0 -0
  477. /package/src/{server-static → server/static}/providers/ServerStaticProvider.ts +0 -0
  478. /package/src/{server-swagger → server/swagger}/index.ts +0 -0
  479. /package/src/{server-swagger → server/swagger}/primitives/$swagger.ts +0 -0
  480. /package/src/topic/{errors → core/errors}/TopicTimeoutError.ts +0 -0
  481. /package/src/topic/{index.ts → core/index.ts} +0 -0
  482. /package/src/topic/{primitives → core/primitives}/$subscriber.ts +0 -0
  483. /package/src/topic/{primitives → core/primitives}/$topic.ts +0 -0
  484. /package/src/topic/{providers → core/providers}/MemoryTopicProvider.ts +0 -0
  485. /package/src/topic/{providers → core/providers}/TopicProvider.ts +0 -0
  486. /package/src/{topic-redis → topic/redis}/index.ts +0 -0
  487. /package/src/{topic-redis → topic/redis}/providers/RedisTopicProvider.ts +0 -0
@@ -0,0 +1,186 @@
1
+ import { $inject, t } from "alepha";
2
+ import { pg } from "alepha/orm";
3
+ import { $action } from "alepha/server";
4
+ import { auditQuerySchema } from "../schemas/auditQuerySchema.ts";
5
+ import { auditResourceSchema } from "../schemas/auditResourceSchema.ts";
6
+ import { createAuditSchema } from "../schemas/createAuditSchema.ts";
7
+ import { AuditService } from "../services/AuditService.ts";
8
+
9
+ /**
10
+ * REST API controller for audit log management.
11
+ *
12
+ * Provides endpoints for:
13
+ * - Querying audit logs with filtering
14
+ * - Creating audit entries
15
+ * - Getting audit statistics
16
+ * - Viewing registered audit types
17
+ */
18
+ export class AuditController {
19
+ protected readonly url = "/audits";
20
+ protected readonly group = "audits";
21
+ protected readonly auditService = $inject(AuditService);
22
+
23
+ /**
24
+ * Find audit entries with filtering and pagination.
25
+ */
26
+ public readonly findAudits = $action({
27
+ path: this.url,
28
+ group: this.group,
29
+ description: "Find audit entries with filtering and pagination",
30
+ schema: {
31
+ query: auditQuerySchema,
32
+ response: pg.page(auditResourceSchema),
33
+ },
34
+ handler: ({ query }) => this.auditService.find(query),
35
+ });
36
+
37
+ /**
38
+ * Get a single audit entry by ID.
39
+ */
40
+ public readonly getAudit = $action({
41
+ path: `${this.url}/:id`,
42
+ group: this.group,
43
+ description: "Get a single audit entry by ID",
44
+ schema: {
45
+ params: t.object({
46
+ id: t.text(),
47
+ }),
48
+ response: auditResourceSchema,
49
+ },
50
+ handler: ({ params }) => this.auditService.getById(params.id),
51
+ });
52
+
53
+ /**
54
+ * Create a new audit entry.
55
+ */
56
+ public readonly createAudit = $action({
57
+ method: "POST",
58
+ path: this.url,
59
+ group: this.group,
60
+ description: "Create a new audit entry",
61
+ schema: {
62
+ body: createAuditSchema,
63
+ response: auditResourceSchema,
64
+ },
65
+ handler: ({ body }) => this.auditService.create(body),
66
+ });
67
+
68
+ /**
69
+ * Get audit entries for a specific user.
70
+ */
71
+ public readonly findByUser = $action({
72
+ path: `${this.url}/user/:userId`,
73
+ group: this.group,
74
+ description: "Get audit entries for a specific user",
75
+ schema: {
76
+ params: t.object({
77
+ userId: t.uuid(),
78
+ }),
79
+ query: t.omit(auditQuerySchema, ["userId"]),
80
+ response: pg.page(auditResourceSchema),
81
+ },
82
+ handler: ({ params, query }) =>
83
+ this.auditService.findByUser(params.userId, query),
84
+ });
85
+
86
+ /**
87
+ * Get audit entries for a specific resource.
88
+ */
89
+ public readonly findByResource = $action({
90
+ path: `${this.url}/resource/:resourceType/:resourceId`,
91
+ group: this.group,
92
+ description: "Get audit entries for a specific resource",
93
+ schema: {
94
+ params: t.object({
95
+ resourceType: t.text(),
96
+ resourceId: t.text(),
97
+ }),
98
+ query: t.omit(auditQuerySchema, ["resourceType", "resourceId"]),
99
+ response: pg.page(auditResourceSchema),
100
+ },
101
+ handler: ({ params, query }) =>
102
+ this.auditService.findByResource(
103
+ params.resourceType,
104
+ params.resourceId,
105
+ query,
106
+ ),
107
+ });
108
+
109
+ /**
110
+ * Get audit statistics.
111
+ */
112
+ public readonly getStats = $action({
113
+ path: `${this.url}/stats`,
114
+ group: this.group,
115
+ description: "Get audit statistics for a time period",
116
+ schema: {
117
+ query: t.object({
118
+ from: t.optional(t.datetime()),
119
+ to: t.optional(t.datetime()),
120
+ userRealm: t.optional(t.text()),
121
+ }),
122
+ response: t.object({
123
+ total: t.integer(),
124
+ byType: t.record(t.text(), t.integer()),
125
+ bySeverity: t.object({
126
+ info: t.integer(),
127
+ warning: t.integer(),
128
+ critical: t.integer(),
129
+ }),
130
+ successRate: t.number(),
131
+ recentFailures: t.array(auditResourceSchema),
132
+ }),
133
+ },
134
+ handler: ({ query }) =>
135
+ this.auditService.getStats({
136
+ from: query.from ? new Date(query.from) : undefined,
137
+ to: query.to ? new Date(query.to) : undefined,
138
+ userRealm: query.userRealm,
139
+ }),
140
+ });
141
+
142
+ /**
143
+ * Get registered audit types.
144
+ */
145
+ public readonly getTypes = $action({
146
+ path: `${this.url}/types`,
147
+ group: this.group,
148
+ description: "Get all registered audit types",
149
+ schema: {
150
+ response: t.array(
151
+ t.object({
152
+ type: t.text(),
153
+ description: t.optional(t.text()),
154
+ actions: t.array(t.text()),
155
+ }),
156
+ ),
157
+ },
158
+ handler: () => this.auditService.getRegisteredTypes(),
159
+ });
160
+
161
+ /**
162
+ * Get distinct values for filters.
163
+ */
164
+ public readonly getFilterOptions = $action({
165
+ path: `${this.url}/filters`,
166
+ group: this.group,
167
+ description: "Get distinct values for audit filters",
168
+ schema: {
169
+ response: t.object({
170
+ types: t.array(t.text()),
171
+ actions: t.array(t.text()),
172
+ resourceTypes: t.array(t.text()),
173
+ userRealms: t.array(t.text()),
174
+ }),
175
+ },
176
+ handler: async () => {
177
+ const types = this.auditService.getRegisteredTypes();
178
+ return {
179
+ types: types.map((t) => t.type),
180
+ actions: types.flatMap((t) => t.actions),
181
+ resourceTypes: ["user", "session", "file", "order", "payment"],
182
+ userRealms: ["default"],
183
+ };
184
+ },
185
+ });
186
+ }
@@ -0,0 +1,132 @@
1
+ import type { Static } from "alepha";
2
+ import { t } from "alepha";
3
+ import { $entity, pg } from "alepha/orm";
4
+
5
+ /**
6
+ * Audit severity levels for categorizing events.
7
+ */
8
+ export const auditSeveritySchema = t.enum(["info", "warning", "critical"], {
9
+ default: "info",
10
+ description: "Severity level of the audit event",
11
+ });
12
+
13
+ export type AuditSeverity = Static<typeof auditSeveritySchema>;
14
+
15
+ /**
16
+ * Audit log entity for tracking important system events.
17
+ *
18
+ * Stores comprehensive audit information including:
19
+ * - Who performed the action (userId, userRealm)
20
+ * - What happened (type, action, resource)
21
+ * - When it happened (createdAt)
22
+ * - Context and details (metadata, ipAddress, userAgent)
23
+ */
24
+ export const audits = $entity({
25
+ name: "audits",
26
+ schema: t.object({
27
+ id: pg.primaryKey(t.bigint()),
28
+ createdAt: pg.createdAt(),
29
+
30
+ /**
31
+ * Audit event type (e.g., "auth", "user", "payment", "system").
32
+ * Used for categorizing and filtering audit events.
33
+ */
34
+ type: t.text({
35
+ description: "Audit event type (e.g., auth, user, payment, system)",
36
+ }),
37
+
38
+ /**
39
+ * Specific action performed (e.g., "login", "logout", "create", "update", "delete").
40
+ */
41
+ action: t.text({
42
+ description: "Specific action performed (e.g., login, create, update)",
43
+ }),
44
+
45
+ /**
46
+ * Severity level of the event.
47
+ */
48
+ severity: pg.default(auditSeveritySchema, "info"),
49
+
50
+ /**
51
+ * User ID who performed the action (null for system events).
52
+ */
53
+ userId: t.optional(t.uuid()),
54
+
55
+ /**
56
+ * User realm for multi-tenant support.
57
+ */
58
+ userRealm: t.optional(t.text()),
59
+
60
+ /**
61
+ * User email at the time of the event (denormalized for history).
62
+ */
63
+ userEmail: t.optional(t.email()),
64
+
65
+ /**
66
+ * Resource type affected (e.g., "user", "order", "file").
67
+ */
68
+ resourceType: t.optional(t.text()),
69
+
70
+ /**
71
+ * Resource ID affected.
72
+ */
73
+ resourceId: t.optional(t.text()),
74
+
75
+ /**
76
+ * Human-readable description of the event.
77
+ */
78
+ description: t.optional(t.text()),
79
+
80
+ /**
81
+ * Additional metadata/context as JSON.
82
+ */
83
+ metadata: t.optional(t.json()),
84
+
85
+ /**
86
+ * Client IP address.
87
+ */
88
+ ipAddress: t.optional(t.text()),
89
+
90
+ /**
91
+ * Client user agent.
92
+ */
93
+ userAgent: t.optional(t.text()),
94
+
95
+ /**
96
+ * Session ID if applicable.
97
+ */
98
+ sessionId: t.optional(t.uuid()),
99
+
100
+ /**
101
+ * Request ID for correlation.
102
+ */
103
+ requestId: t.optional(t.text()),
104
+
105
+ /**
106
+ * Whether the action was successful.
107
+ */
108
+ success: pg.default(t.boolean(), true),
109
+
110
+ /**
111
+ * Error message if the action failed.
112
+ */
113
+ errorMessage: t.optional(t.text()),
114
+ }),
115
+ indexes: [
116
+ "createdAt",
117
+ "type",
118
+ "action",
119
+ "userId",
120
+ "userRealm",
121
+ "resourceType",
122
+ "resourceId",
123
+ "severity",
124
+ { columns: ["type", "action"] },
125
+ { columns: ["userId", "createdAt"] },
126
+ { columns: ["userRealm", "createdAt"] },
127
+ ],
128
+ });
129
+
130
+ export const auditEntitySchema = audits.schema;
131
+ export const auditEntityInsertSchema = audits.insertSchema;
132
+ export type AuditEntity = Static<typeof audits.schema>;
@@ -0,0 +1,18 @@
1
+ // Browser exports for api-audits module
2
+ // Only exports types and schemas that are safe for browser usage
3
+
4
+ export type { AuditController } from "./controllers/AuditController.ts";
5
+ export * from "./entities/audits.ts";
6
+ export type {
7
+ AuditLogOptions,
8
+ AuditPrimitive,
9
+ AuditPrimitiveOptions,
10
+ } from "./primitives/$audit.ts";
11
+ export * from "./schemas/auditQuerySchema.ts";
12
+ export * from "./schemas/auditResourceSchema.ts";
13
+ export * from "./schemas/createAuditSchema.ts";
14
+ export type {
15
+ AuditService,
16
+ AuditStats,
17
+ AuditTypeDefinition,
18
+ } from "./services/AuditService.ts";
@@ -0,0 +1,58 @@
1
+ import { $module } from "alepha";
2
+ import { AuditController } from "./controllers/AuditController.ts";
3
+ import { AuditService } from "./services/AuditService.ts";
4
+
5
+ // ---------------------------------------------------------------------------------------------------------------------
6
+
7
+ export * from "./controllers/AuditController.ts";
8
+ export * from "./entities/audits.ts";
9
+ export * from "./primitives/$audit.ts";
10
+ export * from "./schemas/auditQuerySchema.ts";
11
+ export * from "./schemas/auditResourceSchema.ts";
12
+ export * from "./schemas/createAuditSchema.ts";
13
+ export * from "./services/AuditService.ts";
14
+
15
+ // ---------------------------------------------------------------------------------------------------------------------
16
+
17
+ /**
18
+ * Provides audit logging API endpoints for Alepha applications.
19
+ *
20
+ * This module includes:
21
+ * - Audit log CRUD operations
22
+ * - Filtering and searching audit events
23
+ * - Audit statistics and analytics
24
+ * - `$audit` primitive for domain-specific audit types
25
+ *
26
+ * @module alepha.api.audits
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * // In your app module
31
+ * import { AlephaApiAudits } from "alepha/api/audits";
32
+ *
33
+ * const App = $module({
34
+ * name: "app",
35
+ * services: [AlephaApiAudits, ...],
36
+ * });
37
+ *
38
+ * // Create domain-specific audit types
39
+ * class PaymentAudits {
40
+ * audit = $audit({
41
+ * type: "payment",
42
+ * actions: ["create", "refund", "cancel"],
43
+ * });
44
+ *
45
+ * async onPaymentCreated(paymentId: string, userId: string) {
46
+ * await this.audit.log("create", {
47
+ * userId,
48
+ * resourceType: "payment",
49
+ * resourceId: paymentId,
50
+ * });
51
+ * }
52
+ * }
53
+ * ```
54
+ */
55
+ export const AlephaApiAudits = $module({
56
+ name: "alepha.api.audits",
57
+ services: [AuditService, AuditController],
58
+ });
@@ -0,0 +1,159 @@
1
+ import { $inject, createPrimitive, KIND, Primitive } from "alepha";
2
+ import {
3
+ AuditService,
4
+ type AuditTypeDefinition,
5
+ } from "../services/AuditService.ts";
6
+
7
+ /**
8
+ * Options for creating an audit type primitive.
9
+ */
10
+ export interface AuditPrimitiveOptions {
11
+ /**
12
+ * Unique audit type identifier (e.g., "auth", "payment", "order").
13
+ */
14
+ type: string;
15
+
16
+ /**
17
+ * Human-readable description of this audit type.
18
+ */
19
+ description?: string;
20
+
21
+ /**
22
+ * List of allowed actions for this audit type.
23
+ */
24
+ actions: string[];
25
+ }
26
+
27
+ /**
28
+ * Audit type primitive for registering domain-specific audit events.
29
+ *
30
+ * Provides a type-safe way to define and log audit events within a specific domain.
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * class PaymentAudits {
35
+ * audit = $audit({
36
+ * type: "payment",
37
+ * description: "Payment-related audit events",
38
+ * actions: ["create", "refund", "cancel", "dispute"],
39
+ * });
40
+ *
41
+ * async logPaymentCreated(paymentId: string, userId: string, amount: number) {
42
+ * await this.audit.log("create", {
43
+ * userId,
44
+ * resourceType: "payment",
45
+ * resourceId: paymentId,
46
+ * description: `Payment of ${amount} created`,
47
+ * metadata: { amount },
48
+ * });
49
+ * }
50
+ * }
51
+ * ```
52
+ */
53
+ export class AuditPrimitive extends Primitive<AuditPrimitiveOptions> {
54
+ protected readonly auditService = $inject(AuditService);
55
+
56
+ /**
57
+ * The audit type identifier.
58
+ */
59
+ public get type(): string {
60
+ return this.options.type;
61
+ }
62
+
63
+ /**
64
+ * The audit type description.
65
+ */
66
+ public get description(): string | undefined {
67
+ return this.options.description;
68
+ }
69
+
70
+ /**
71
+ * The allowed actions for this audit type.
72
+ */
73
+ public get actions(): string[] {
74
+ return this.options.actions;
75
+ }
76
+
77
+ /**
78
+ * Log an audit event for this type.
79
+ */
80
+ public async log(
81
+ action: string,
82
+ options: AuditLogOptions = {},
83
+ ): Promise<void> {
84
+ await this.auditService.record(this.options.type, action, options);
85
+ }
86
+
87
+ /**
88
+ * Log a successful audit event.
89
+ */
90
+ public async logSuccess(
91
+ action: string,
92
+ options: Omit<AuditLogOptions, "success"> = {},
93
+ ): Promise<void> {
94
+ await this.log(action, { ...options, success: true });
95
+ }
96
+
97
+ /**
98
+ * Log a failed audit event.
99
+ */
100
+ public async logFailure(
101
+ action: string,
102
+ errorMessage: string,
103
+ options: Omit<AuditLogOptions, "success" | "errorMessage"> = {},
104
+ ): Promise<void> {
105
+ await this.log(action, { ...options, success: false, errorMessage });
106
+ }
107
+
108
+ /**
109
+ * Called during initialization to register this audit type.
110
+ */
111
+ protected onInit(): void {
112
+ const definition: AuditTypeDefinition = {
113
+ type: this.options.type,
114
+ description: this.options.description,
115
+ actions: this.options.actions,
116
+ };
117
+ this.auditService.registerType(definition);
118
+ }
119
+ }
120
+
121
+ /**
122
+ * Options for logging an audit event.
123
+ */
124
+ export interface AuditLogOptions {
125
+ severity?: "info" | "warning" | "critical";
126
+ userId?: string;
127
+ userRealm?: string;
128
+ userEmail?: string;
129
+ resourceType?: string;
130
+ resourceId?: string;
131
+ description?: string;
132
+ metadata?: Record<string, unknown>;
133
+ ipAddress?: string;
134
+ userAgent?: string;
135
+ sessionId?: string;
136
+ requestId?: string;
137
+ success?: boolean;
138
+ errorMessage?: string;
139
+ }
140
+
141
+ /**
142
+ * Create an audit type primitive.
143
+ *
144
+ * @example
145
+ * ```ts
146
+ * class OrderAudits {
147
+ * audit = $audit({
148
+ * type: "order",
149
+ * description: "Order management events",
150
+ * actions: ["create", "update", "cancel", "fulfill", "ship"],
151
+ * });
152
+ * }
153
+ * ```
154
+ */
155
+ export const $audit = (options: AuditPrimitiveOptions) => {
156
+ return createPrimitive(AuditPrimitive, options);
157
+ };
158
+
159
+ $audit[KIND] = AuditPrimitive;
@@ -0,0 +1,23 @@
1
+ import type { Static } from "alepha";
2
+ import { t } from "alepha";
3
+ import { pageQuerySchema } from "alepha/orm";
4
+ import { auditSeveritySchema } from "../entities/audits.ts";
5
+
6
+ /**
7
+ * Query schema for searching and filtering audit logs.
8
+ */
9
+ export const auditQuerySchema = t.extend(pageQuerySchema, {
10
+ type: t.optional(t.text({ description: "Filter by audit type" })),
11
+ action: t.optional(t.text({ description: "Filter by action" })),
12
+ severity: t.optional(auditSeveritySchema),
13
+ userId: t.optional(t.uuid({ description: "Filter by user ID" })),
14
+ userRealm: t.optional(t.text({ description: "Filter by user realm" })),
15
+ resourceType: t.optional(t.text({ description: "Filter by resource type" })),
16
+ resourceId: t.optional(t.text({ description: "Filter by resource ID" })),
17
+ success: t.optional(t.boolean({ description: "Filter by success status" })),
18
+ from: t.optional(t.datetime({ description: "Start date filter" })),
19
+ to: t.optional(t.datetime({ description: "End date filter" })),
20
+ search: t.optional(t.text({ description: "Search in description" })),
21
+ });
22
+
23
+ export type AuditQuery = Static<typeof auditQuerySchema>;
@@ -0,0 +1,9 @@
1
+ import type { Static } from "alepha";
2
+ import { audits } from "../entities/audits.ts";
3
+
4
+ /**
5
+ * Resource schema for audit log responses.
6
+ */
7
+ export const auditResourceSchema = audits.schema;
8
+
9
+ export type AuditResource = Static<typeof auditResourceSchema>;
@@ -0,0 +1,27 @@
1
+ import type { Static } from "alepha";
2
+ import { t } from "alepha";
3
+ import { auditSeveritySchema } from "../entities/audits.ts";
4
+
5
+ /**
6
+ * Schema for creating a new audit log entry.
7
+ */
8
+ export const createAuditSchema = t.object({
9
+ type: t.text({ description: "Audit event type" }),
10
+ action: t.text({ description: "Specific action performed" }),
11
+ severity: t.optional(auditSeveritySchema),
12
+ userId: t.optional(t.uuid()),
13
+ userRealm: t.optional(t.text()),
14
+ userEmail: t.optional(t.email()),
15
+ resourceType: t.optional(t.text()),
16
+ resourceId: t.optional(t.text()),
17
+ description: t.optional(t.text()),
18
+ metadata: t.optional(t.json()),
19
+ ipAddress: t.optional(t.text()),
20
+ userAgent: t.optional(t.text()),
21
+ sessionId: t.optional(t.uuid()),
22
+ requestId: t.optional(t.text()),
23
+ success: t.optional(t.boolean()),
24
+ errorMessage: t.optional(t.text()),
25
+ });
26
+
27
+ export type CreateAudit = Static<typeof createAuditSchema>;