alepha 0.15.1 → 0.15.3

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 (523) hide show
  1. package/README.md +68 -80
  2. package/dist/api/audits/index.d.ts +10 -33
  3. package/dist/api/audits/index.d.ts.map +1 -1
  4. package/dist/api/audits/index.js +10 -33
  5. package/dist/api/audits/index.js.map +1 -1
  6. package/dist/api/files/index.d.ts +10 -3
  7. package/dist/api/files/index.d.ts.map +1 -1
  8. package/dist/api/files/index.js +10 -3
  9. package/dist/api/files/index.js.map +1 -1
  10. package/dist/api/jobs/index.d.ts +162 -155
  11. package/dist/api/jobs/index.d.ts.map +1 -1
  12. package/dist/api/jobs/index.js +10 -3
  13. package/dist/api/jobs/index.js.map +1 -1
  14. package/dist/api/keys/index.d.ts +413 -0
  15. package/dist/api/keys/index.d.ts.map +1 -0
  16. package/dist/api/keys/index.js +476 -0
  17. package/dist/api/keys/index.js.map +1 -0
  18. package/dist/api/notifications/index.d.ts +10 -4
  19. package/dist/api/notifications/index.d.ts.map +1 -1
  20. package/dist/api/notifications/index.js +10 -4
  21. package/dist/api/notifications/index.js.map +1 -1
  22. package/dist/api/parameters/index.d.ts +43 -50
  23. package/dist/api/parameters/index.d.ts.map +1 -1
  24. package/dist/api/parameters/index.js +30 -37
  25. package/dist/api/parameters/index.js.map +1 -1
  26. package/dist/api/users/index.d.ts +1081 -760
  27. package/dist/api/users/index.d.ts.map +1 -1
  28. package/dist/api/users/index.js +2539 -218
  29. package/dist/api/users/index.js.map +1 -1
  30. package/dist/api/verifications/index.d.ts +138 -132
  31. package/dist/api/verifications/index.d.ts.map +1 -1
  32. package/dist/api/verifications/index.js +12 -4
  33. package/dist/api/verifications/index.js.map +1 -1
  34. package/dist/batch/index.d.ts +20 -40
  35. package/dist/batch/index.d.ts.map +1 -1
  36. package/dist/batch/index.js +31 -44
  37. package/dist/batch/index.js.map +1 -1
  38. package/dist/bucket/index.d.ts +440 -8
  39. package/dist/bucket/index.d.ts.map +1 -1
  40. package/dist/bucket/index.js +1861 -12
  41. package/dist/bucket/index.js.map +1 -1
  42. package/dist/cache/core/index.d.ts +179 -7
  43. package/dist/cache/core/index.d.ts.map +1 -1
  44. package/dist/cache/core/index.js +213 -7
  45. package/dist/cache/core/index.js.map +1 -1
  46. package/dist/cache/redis/index.d.ts +1 -0
  47. package/dist/cache/redis/index.d.ts.map +1 -1
  48. package/dist/cache/redis/index.js +4 -0
  49. package/dist/cache/redis/index.js.map +1 -1
  50. package/dist/cli/index.d.ts +638 -5645
  51. package/dist/cli/index.d.ts.map +1 -1
  52. package/dist/cli/index.js +2550 -368
  53. package/dist/cli/index.js.map +1 -1
  54. package/dist/command/index.d.ts +203 -45
  55. package/dist/command/index.d.ts.map +1 -1
  56. package/dist/command/index.js +2060 -71
  57. package/dist/command/index.js.map +1 -1
  58. package/dist/core/index.browser.js +70 -40
  59. package/dist/core/index.browser.js.map +1 -1
  60. package/dist/core/index.d.ts +34 -13
  61. package/dist/core/index.d.ts.map +1 -1
  62. package/dist/core/index.js +90 -40
  63. package/dist/core/index.js.map +1 -1
  64. package/dist/core/index.native.js +70 -40
  65. package/dist/core/index.native.js.map +1 -1
  66. package/dist/datetime/index.d.ts +15 -0
  67. package/dist/datetime/index.d.ts.map +1 -1
  68. package/dist/datetime/index.js +15 -0
  69. package/dist/datetime/index.js.map +1 -1
  70. package/dist/email/index.d.ts +323 -20
  71. package/dist/email/index.d.ts.map +1 -1
  72. package/dist/email/index.js +1857 -7
  73. package/dist/email/index.js.map +1 -1
  74. package/dist/fake/index.d.ts +90 -8
  75. package/dist/fake/index.d.ts.map +1 -1
  76. package/dist/fake/index.js +91 -20
  77. package/dist/fake/index.js.map +1 -1
  78. package/dist/lock/core/index.d.ts +11 -4
  79. package/dist/lock/core/index.d.ts.map +1 -1
  80. package/dist/lock/core/index.js +11 -4
  81. package/dist/lock/core/index.js.map +1 -1
  82. package/dist/logger/index.d.ts +17 -66
  83. package/dist/logger/index.d.ts.map +1 -1
  84. package/dist/logger/index.js +14 -63
  85. package/dist/logger/index.js.map +1 -1
  86. package/dist/mcp/index.d.ts +10 -30
  87. package/dist/mcp/index.d.ts.map +1 -1
  88. package/dist/mcp/index.js +12 -35
  89. package/dist/mcp/index.js.map +1 -1
  90. package/dist/orm/index.browser.js +3 -3
  91. package/dist/orm/index.browser.js.map +1 -1
  92. package/dist/orm/index.bun.js +39 -20
  93. package/dist/orm/index.bun.js.map +1 -1
  94. package/dist/orm/index.d.ts +517 -540
  95. package/dist/orm/index.d.ts.map +1 -1
  96. package/dist/orm/index.js +58 -71
  97. package/dist/orm/index.js.map +1 -1
  98. package/dist/queue/core/index.d.ts +18 -10
  99. package/dist/queue/core/index.d.ts.map +1 -1
  100. package/dist/queue/core/index.js +14 -6
  101. package/dist/queue/core/index.js.map +1 -1
  102. package/dist/react/auth/index.browser.js +108 -0
  103. package/dist/react/auth/index.browser.js.map +1 -0
  104. package/dist/react/auth/index.d.ts +100 -0
  105. package/dist/react/auth/index.d.ts.map +1 -0
  106. package/dist/react/auth/index.js +145 -0
  107. package/dist/react/auth/index.js.map +1 -0
  108. package/dist/react/core/index.d.ts +469 -0
  109. package/dist/react/core/index.d.ts.map +1 -0
  110. package/dist/react/core/index.js +464 -0
  111. package/dist/react/core/index.js.map +1 -0
  112. package/dist/react/form/index.d.ts +232 -0
  113. package/dist/react/form/index.d.ts.map +1 -0
  114. package/dist/react/form/index.js +432 -0
  115. package/dist/react/form/index.js.map +1 -0
  116. package/dist/react/head/index.browser.js +423 -0
  117. package/dist/react/head/index.browser.js.map +1 -0
  118. package/dist/react/head/index.d.ts +288 -0
  119. package/dist/react/head/index.d.ts.map +1 -0
  120. package/dist/react/head/index.js +465 -0
  121. package/dist/react/head/index.js.map +1 -0
  122. package/dist/react/i18n/index.d.ts +175 -0
  123. package/dist/react/i18n/index.d.ts.map +1 -0
  124. package/dist/react/i18n/index.js +224 -0
  125. package/dist/react/i18n/index.js.map +1 -0
  126. package/dist/react/router/index.browser.js +1974 -0
  127. package/dist/react/router/index.browser.js.map +1 -0
  128. package/dist/react/router/index.d.ts +1956 -0
  129. package/dist/react/router/index.d.ts.map +1 -0
  130. package/dist/react/router/index.js +4722 -0
  131. package/dist/react/router/index.js.map +1 -0
  132. package/dist/react/websocket/index.d.ts +117 -0
  133. package/dist/react/websocket/index.d.ts.map +1 -0
  134. package/dist/react/websocket/index.js +107 -0
  135. package/dist/react/websocket/index.js.map +1 -0
  136. package/dist/redis/index.bun.js +4 -0
  137. package/dist/redis/index.bun.js.map +1 -1
  138. package/dist/redis/index.d.ts +41 -44
  139. package/dist/redis/index.d.ts.map +1 -1
  140. package/dist/redis/index.js +16 -25
  141. package/dist/redis/index.js.map +1 -1
  142. package/dist/retry/index.d.ts +11 -2
  143. package/dist/retry/index.d.ts.map +1 -1
  144. package/dist/retry/index.js +11 -2
  145. package/dist/retry/index.js.map +1 -1
  146. package/dist/scheduler/index.d.ts +11 -2
  147. package/dist/scheduler/index.d.ts.map +1 -1
  148. package/dist/scheduler/index.js +11 -2
  149. package/dist/scheduler/index.js.map +1 -1
  150. package/dist/security/index.d.ts +140 -49
  151. package/dist/security/index.d.ts.map +1 -1
  152. package/dist/security/index.js +164 -32
  153. package/dist/security/index.js.map +1 -1
  154. package/dist/server/auth/index.d.ts +12 -7
  155. package/dist/server/auth/index.d.ts.map +1 -1
  156. package/dist/server/auth/index.js +12 -7
  157. package/dist/server/auth/index.js.map +1 -1
  158. package/dist/server/cache/index.d.ts +7 -22
  159. package/dist/server/cache/index.d.ts.map +1 -1
  160. package/dist/server/cache/index.js +7 -22
  161. package/dist/server/cache/index.js.map +1 -1
  162. package/dist/server/compress/index.d.ts +10 -2
  163. package/dist/server/compress/index.d.ts.map +1 -1
  164. package/dist/server/compress/index.js +10 -2
  165. package/dist/server/compress/index.js.map +1 -1
  166. package/dist/server/cookies/index.d.ts +40 -16
  167. package/dist/server/cookies/index.d.ts.map +1 -1
  168. package/dist/server/cookies/index.js +7 -5
  169. package/dist/server/cookies/index.js.map +1 -1
  170. package/dist/server/core/index.d.ts +124 -23
  171. package/dist/server/core/index.d.ts.map +1 -1
  172. package/dist/server/core/index.js +231 -14
  173. package/dist/server/core/index.js.map +1 -1
  174. package/dist/server/cors/index.d.ts +13 -23
  175. package/dist/server/cors/index.d.ts.map +1 -1
  176. package/dist/server/cors/index.js +7 -21
  177. package/dist/server/cors/index.js.map +1 -1
  178. package/dist/server/health/index.d.ts +8 -2
  179. package/dist/server/health/index.d.ts.map +1 -1
  180. package/dist/server/health/index.js +8 -2
  181. package/dist/server/health/index.js.map +1 -1
  182. package/dist/server/helmet/index.d.ts +11 -3
  183. package/dist/server/helmet/index.d.ts.map +1 -1
  184. package/dist/server/helmet/index.js +11 -3
  185. package/dist/server/helmet/index.js.map +1 -1
  186. package/dist/server/links/index.d.ts +11 -6
  187. package/dist/server/links/index.d.ts.map +1 -1
  188. package/dist/server/links/index.js +11 -6
  189. package/dist/server/links/index.js.map +1 -1
  190. package/dist/server/metrics/index.d.ts +10 -3
  191. package/dist/server/metrics/index.d.ts.map +1 -1
  192. package/dist/server/metrics/index.js +10 -3
  193. package/dist/server/metrics/index.js.map +1 -1
  194. package/dist/server/multipart/index.d.ts +9 -3
  195. package/dist/server/multipart/index.d.ts.map +1 -1
  196. package/dist/server/multipart/index.js +9 -3
  197. package/dist/server/multipart/index.js.map +1 -1
  198. package/dist/server/proxy/index.d.ts +8 -2
  199. package/dist/server/proxy/index.d.ts.map +1 -1
  200. package/dist/server/proxy/index.js +8 -2
  201. package/dist/server/proxy/index.js.map +1 -1
  202. package/dist/server/rate-limit/index.d.ts +30 -35
  203. package/dist/server/rate-limit/index.d.ts.map +1 -1
  204. package/dist/server/rate-limit/index.js +18 -55
  205. package/dist/server/rate-limit/index.js.map +1 -1
  206. package/dist/server/static/index.d.ts +137 -4
  207. package/dist/server/static/index.d.ts.map +1 -1
  208. package/dist/server/static/index.js +1853 -5
  209. package/dist/server/static/index.js.map +1 -1
  210. package/dist/server/swagger/index.d.ts +309 -6
  211. package/dist/server/swagger/index.d.ts.map +1 -1
  212. package/dist/server/swagger/index.js +1854 -6
  213. package/dist/server/swagger/index.js.map +1 -1
  214. package/dist/sms/index.d.ts +309 -7
  215. package/dist/sms/index.d.ts.map +1 -1
  216. package/dist/sms/index.js +1856 -7
  217. package/dist/sms/index.js.map +1 -1
  218. package/dist/system/index.browser.js +1218 -0
  219. package/dist/system/index.browser.js.map +1 -0
  220. package/dist/{file → system}/index.d.ts +343 -16
  221. package/dist/system/index.d.ts.map +1 -0
  222. package/dist/{file → system}/index.js +419 -22
  223. package/dist/system/index.js.map +1 -0
  224. package/dist/thread/index.d.ts +11 -2
  225. package/dist/thread/index.d.ts.map +1 -1
  226. package/dist/thread/index.js +11 -2
  227. package/dist/thread/index.js.map +1 -1
  228. package/dist/topic/core/index.d.ts +12 -5
  229. package/dist/topic/core/index.d.ts.map +1 -1
  230. package/dist/topic/core/index.js +12 -5
  231. package/dist/topic/core/index.js.map +1 -1
  232. package/dist/vite/index.d.ts +5 -6272
  233. package/dist/vite/index.d.ts.map +1 -1
  234. package/dist/vite/index.js +23 -10
  235. package/dist/vite/index.js.map +1 -1
  236. package/dist/websocket/index.d.ts +12 -8
  237. package/dist/websocket/index.d.ts.map +1 -1
  238. package/dist/websocket/index.js +12 -8
  239. package/dist/websocket/index.js.map +1 -1
  240. package/package.json +82 -11
  241. package/src/api/audits/index.ts +10 -33
  242. package/src/api/files/__tests__/$bucket.spec.ts +1 -1
  243. package/src/api/files/controllers/AdminFileStatsController.spec.ts +1 -1
  244. package/src/api/files/controllers/FileController.spec.ts +1 -1
  245. package/src/api/files/index.ts +10 -3
  246. package/src/api/files/jobs/FileJobs.spec.ts +1 -1
  247. package/src/api/files/services/FileService.spec.ts +1 -1
  248. package/src/api/jobs/index.ts +10 -3
  249. package/src/api/keys/controllers/AdminApiKeyController.ts +75 -0
  250. package/src/api/keys/controllers/ApiKeyController.ts +103 -0
  251. package/src/api/keys/entities/apiKeyEntity.ts +41 -0
  252. package/src/api/keys/index.ts +49 -0
  253. package/src/api/keys/schemas/adminApiKeyQuerySchema.ts +7 -0
  254. package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +17 -0
  255. package/src/api/keys/schemas/createApiKeyBodySchema.ts +7 -0
  256. package/src/api/keys/schemas/createApiKeyResponseSchema.ts +11 -0
  257. package/src/api/keys/schemas/listApiKeyResponseSchema.ts +15 -0
  258. package/src/api/keys/schemas/revokeApiKeyParamsSchema.ts +5 -0
  259. package/src/api/keys/schemas/revokeApiKeyResponseSchema.ts +5 -0
  260. package/src/api/keys/services/ApiKeyService.spec.ts +553 -0
  261. package/src/api/keys/services/ApiKeyService.ts +306 -0
  262. package/src/api/logs/TODO.md +55 -0
  263. package/src/api/notifications/index.ts +10 -4
  264. package/src/api/parameters/index.ts +9 -30
  265. package/src/api/parameters/primitives/$config.ts +12 -4
  266. package/src/api/parameters/services/ConfigStore.ts +9 -3
  267. package/src/api/users/__tests__/ApiKeys-integration.spec.ts +1035 -0
  268. package/src/api/users/__tests__/ApiKeys.spec.ts +401 -0
  269. package/src/api/users/index.ts +14 -3
  270. package/src/api/users/primitives/$realm.ts +33 -5
  271. package/src/api/users/providers/RealmProvider.ts +1 -12
  272. package/src/api/users/services/SessionService.ts +1 -1
  273. package/src/api/verifications/controllers/VerificationController.ts +2 -0
  274. package/src/api/verifications/index.ts +10 -4
  275. package/src/batch/index.ts +9 -36
  276. package/src/batch/primitives/$batch.ts +0 -8
  277. package/src/batch/providers/BatchProvider.ts +29 -2
  278. package/src/bucket/__tests__/shared.ts +1 -1
  279. package/src/bucket/index.ts +13 -6
  280. package/src/bucket/primitives/$bucket.ts +1 -1
  281. package/src/bucket/providers/LocalFileStorageProvider.ts +1 -1
  282. package/src/bucket/providers/MemoryFileStorageProvider.ts +1 -1
  283. package/src/cache/core/__tests__/shared.ts +30 -0
  284. package/src/cache/core/index.ts +11 -6
  285. package/src/cache/core/primitives/$cache.spec.ts +5 -0
  286. package/src/cache/core/providers/CacheProvider.ts +17 -0
  287. package/src/cache/core/providers/MemoryCacheProvider.ts +300 -1
  288. package/src/cache/redis/__tests__/cache-redis.spec.ts +5 -0
  289. package/src/cache/redis/providers/RedisCacheProvider.ts +9 -0
  290. package/src/cli/apps/AlephaCli.ts +1 -14
  291. package/src/cli/apps/AlephaPackageBuilderCli.ts +10 -1
  292. package/src/cli/atoms/buildOptions.ts +99 -9
  293. package/src/cli/commands/build.ts +150 -37
  294. package/src/cli/commands/db.ts +22 -18
  295. package/src/cli/commands/deploy.ts +1 -1
  296. package/src/cli/commands/dev.ts +1 -20
  297. package/src/cli/commands/gen/env.ts +5 -2
  298. package/src/cli/commands/gen/openapi.ts +5 -2
  299. package/src/cli/commands/init.spec.ts +588 -0
  300. package/src/cli/commands/init.ts +115 -58
  301. package/src/cli/commands/lint.ts +7 -1
  302. package/src/cli/commands/typecheck.ts +11 -0
  303. package/src/cli/providers/AppEntryProvider.ts +1 -1
  304. package/src/cli/providers/ViteBuildProvider.ts +8 -50
  305. package/src/cli/providers/ViteDevServerProvider.ts +35 -16
  306. package/src/cli/services/AlephaCliUtils.ts +52 -121
  307. package/src/cli/services/PackageManagerUtils.ts +129 -11
  308. package/src/cli/services/ProjectScaffolder.spec.ts +97 -0
  309. package/src/cli/services/ProjectScaffolder.ts +148 -81
  310. package/src/cli/services/ViteUtils.ts +82 -0
  311. package/src/cli/{assets/claudeMd.ts → templates/agentMd.ts} +37 -24
  312. package/src/cli/templates/apiAppSecurityTs.ts +11 -0
  313. package/src/cli/templates/apiIndexTs.ts +30 -0
  314. package/src/cli/templates/gitignore.ts +39 -0
  315. package/src/cli/{assets → templates}/mainCss.ts +11 -2
  316. package/src/cli/templates/mainServerTs.ts +33 -0
  317. package/src/cli/templates/webAppRouterTs.ts +74 -0
  318. package/src/cli/templates/webHelloComponentTsx.ts +30 -0
  319. package/src/command/helpers/Runner.spec.ts +139 -0
  320. package/src/command/helpers/Runner.ts +7 -22
  321. package/src/command/index.ts +12 -4
  322. package/src/command/providers/CliProvider.spec.ts +1392 -0
  323. package/src/command/providers/CliProvider.ts +320 -47
  324. package/src/core/Alepha.ts +34 -27
  325. package/src/core/__tests__/Alepha-start.spec.ts +4 -4
  326. package/src/core/helpers/jsonSchemaToTypeBox.spec.ts +771 -0
  327. package/src/core/helpers/jsonSchemaToTypeBox.ts +62 -10
  328. package/src/core/index.shared.ts +1 -0
  329. package/src/core/index.ts +20 -0
  330. package/src/core/providers/EventManager.spec.ts +0 -71
  331. package/src/core/providers/EventManager.ts +3 -15
  332. package/src/core/providers/Json.ts +2 -14
  333. package/src/datetime/index.ts +15 -0
  334. package/src/email/index.ts +10 -5
  335. package/src/email/providers/LocalEmailProvider.spec.ts +1 -1
  336. package/src/email/providers/LocalEmailProvider.ts +1 -1
  337. package/src/fake/__tests__/keyName.example.ts +1 -1
  338. package/src/fake/__tests__/keyName.spec.ts +5 -5
  339. package/src/fake/index.ts +9 -6
  340. package/src/fake/providers/FakeProvider.spec.ts +258 -40
  341. package/src/fake/providers/FakeProvider.ts +133 -19
  342. package/src/lock/core/index.ts +11 -4
  343. package/src/logger/index.ts +17 -66
  344. package/src/mcp/index.ts +10 -27
  345. package/src/mcp/transports/SseMcpTransport.ts +0 -11
  346. package/src/orm/__tests__/PostgresProvider.spec.ts +2 -2
  347. package/src/orm/index.browser.ts +2 -2
  348. package/src/orm/index.bun.ts +5 -3
  349. package/src/orm/index.ts +23 -53
  350. package/src/orm/providers/drivers/BunSqliteProvider.ts +5 -1
  351. package/src/orm/providers/drivers/CloudflareD1Provider.ts +57 -30
  352. package/src/orm/providers/drivers/DatabaseProvider.ts +9 -1
  353. package/src/orm/providers/drivers/NodeSqliteProvider.ts +4 -1
  354. package/src/orm/services/Repository.ts +7 -3
  355. package/src/queue/core/index.ts +14 -6
  356. package/src/react/auth/__tests__/$auth.spec.ts +202 -0
  357. package/src/react/auth/hooks/useAuth.ts +32 -0
  358. package/src/react/auth/index.browser.ts +13 -0
  359. package/src/react/auth/index.shared.ts +2 -0
  360. package/src/react/auth/index.ts +48 -0
  361. package/src/react/auth/providers/ReactAuthProvider.ts +16 -0
  362. package/src/react/auth/services/ReactAuth.ts +135 -0
  363. package/src/react/core/__tests__/Router.spec.tsx +169 -0
  364. package/src/react/core/components/ClientOnly.tsx +49 -0
  365. package/src/react/core/components/ErrorBoundary.tsx +73 -0
  366. package/src/react/core/contexts/AlephaContext.ts +7 -0
  367. package/src/react/core/contexts/AlephaProvider.tsx +42 -0
  368. package/src/react/core/hooks/useAction.browser.spec.tsx +569 -0
  369. package/src/react/core/hooks/useAction.ts +480 -0
  370. package/src/react/core/hooks/useAlepha.ts +26 -0
  371. package/src/react/core/hooks/useClient.ts +17 -0
  372. package/src/react/core/hooks/useEvents.ts +51 -0
  373. package/src/react/core/hooks/useInject.ts +12 -0
  374. package/src/react/core/hooks/useStore.ts +52 -0
  375. package/src/react/core/index.ts +90 -0
  376. package/src/react/form/components/FormState.tsx +17 -0
  377. package/src/react/form/errors/FormValidationError.ts +18 -0
  378. package/src/react/form/hooks/useForm.browser.spec.tsx +366 -0
  379. package/src/react/form/hooks/useForm.ts +47 -0
  380. package/src/react/form/hooks/useFormState.ts +130 -0
  381. package/src/react/form/index.ts +44 -0
  382. package/src/react/form/services/FormModel.ts +614 -0
  383. package/src/react/head/helpers/SeoExpander.spec.ts +203 -0
  384. package/src/react/head/helpers/SeoExpander.ts +142 -0
  385. package/src/react/head/hooks/useHead.spec.tsx +288 -0
  386. package/src/react/head/hooks/useHead.ts +62 -0
  387. package/src/react/head/index.browser.ts +26 -0
  388. package/src/react/head/index.ts +44 -0
  389. package/src/react/head/interfaces/Head.ts +105 -0
  390. package/src/react/head/primitives/$head.ts +25 -0
  391. package/src/react/head/providers/BrowserHeadProvider.browser.spec.ts +196 -0
  392. package/src/react/head/providers/BrowserHeadProvider.ts +212 -0
  393. package/src/react/head/providers/HeadProvider.ts +168 -0
  394. package/src/react/head/providers/ServerHeadProvider.ts +31 -0
  395. package/src/react/i18n/__tests__/integration.spec.tsx +239 -0
  396. package/src/react/i18n/components/Localize.spec.tsx +357 -0
  397. package/src/react/i18n/components/Localize.tsx +35 -0
  398. package/src/react/i18n/hooks/useI18n.browser.spec.tsx +438 -0
  399. package/src/react/i18n/hooks/useI18n.ts +18 -0
  400. package/src/react/i18n/index.ts +41 -0
  401. package/src/react/i18n/primitives/$dictionary.ts +69 -0
  402. package/src/react/i18n/providers/I18nProvider.spec.ts +389 -0
  403. package/src/react/i18n/providers/I18nProvider.ts +278 -0
  404. package/src/react/router/__tests__/page-head-browser.browser.spec.ts +95 -0
  405. package/src/react/router/__tests__/page-head.spec.ts +48 -0
  406. package/src/react/router/__tests__/seo-head.spec.ts +125 -0
  407. package/src/react/router/atoms/ssrManifestAtom.ts +58 -0
  408. package/src/react/router/components/ErrorViewer.tsx +872 -0
  409. package/src/react/router/components/Link.tsx +23 -0
  410. package/src/react/router/components/NestedView.tsx +223 -0
  411. package/src/react/router/components/NotFound.tsx +30 -0
  412. package/src/react/router/constants/PAGE_PRELOAD_KEY.ts +6 -0
  413. package/src/react/router/contexts/RouterLayerContext.ts +12 -0
  414. package/src/react/router/errors/Redirection.ts +28 -0
  415. package/src/react/router/hooks/useActive.ts +52 -0
  416. package/src/react/router/hooks/useQueryParams.ts +63 -0
  417. package/src/react/router/hooks/useRouter.ts +20 -0
  418. package/src/react/router/hooks/useRouterState.ts +11 -0
  419. package/src/react/router/index.browser.ts +45 -0
  420. package/src/react/router/index.shared.ts +19 -0
  421. package/src/react/router/index.ts +146 -0
  422. package/src/react/router/primitives/$page.browser.spec.tsx +851 -0
  423. package/src/react/router/primitives/$page.spec.tsx +676 -0
  424. package/src/react/router/primitives/$page.ts +489 -0
  425. package/src/react/router/providers/ReactBrowserProvider.ts +312 -0
  426. package/src/react/router/providers/ReactBrowserRendererProvider.ts +25 -0
  427. package/src/react/router/providers/ReactBrowserRouterProvider.ts +168 -0
  428. package/src/react/router/providers/ReactPageProvider.ts +726 -0
  429. package/src/react/router/providers/ReactPreloadProvider.spec.ts +142 -0
  430. package/src/react/router/providers/ReactPreloadProvider.ts +85 -0
  431. package/src/react/router/providers/ReactServerProvider.spec.tsx +316 -0
  432. package/src/react/router/providers/ReactServerProvider.ts +487 -0
  433. package/src/react/router/providers/ReactServerTemplateProvider.spec.ts +210 -0
  434. package/src/react/router/providers/ReactServerTemplateProvider.ts +542 -0
  435. package/src/react/router/providers/SSRManifestProvider.ts +334 -0
  436. package/src/react/router/services/ReactPageServerService.ts +48 -0
  437. package/src/react/router/services/ReactPageService.ts +27 -0
  438. package/src/react/router/services/ReactRouter.ts +262 -0
  439. package/src/react/websocket/hooks/useRoom.tsx +242 -0
  440. package/src/react/websocket/index.ts +7 -0
  441. package/src/redis/__tests__/redis.spec.ts +13 -0
  442. package/src/redis/index.ts +9 -25
  443. package/src/redis/providers/BunRedisProvider.ts +9 -0
  444. package/src/redis/providers/NodeRedisProvider.ts +8 -0
  445. package/src/redis/providers/RedisProvider.ts +16 -0
  446. package/src/retry/index.ts +11 -2
  447. package/src/router/index.ts +15 -0
  448. package/src/scheduler/index.ts +11 -2
  449. package/src/security/__tests__/BasicAuth.spec.ts +2 -0
  450. package/src/security/__tests__/ServerSecurityProvider.spec.ts +90 -5
  451. package/src/security/index.ts +15 -10
  452. package/src/security/interfaces/IssuerResolver.ts +27 -0
  453. package/src/security/primitives/$issuer.ts +55 -0
  454. package/src/security/providers/SecurityProvider.ts +179 -0
  455. package/src/security/providers/ServerBasicAuthProvider.ts +6 -2
  456. package/src/security/providers/ServerSecurityProvider.ts +63 -41
  457. package/src/server/auth/index.ts +12 -7
  458. package/src/server/cache/index.ts +7 -22
  459. package/src/server/compress/index.ts +10 -2
  460. package/src/server/cookies/index.ts +7 -5
  461. package/src/server/cookies/primitives/$cookie.ts +33 -11
  462. package/src/server/core/index.ts +16 -6
  463. package/src/server/core/interfaces/ServerRequest.ts +83 -1
  464. package/src/server/core/primitives/$action.spec.ts +1 -1
  465. package/src/server/core/primitives/$action.ts +8 -3
  466. package/src/server/core/providers/NodeHttpServerProvider.spec.ts +9 -3
  467. package/src/server/core/providers/NodeHttpServerProvider.ts +9 -3
  468. package/src/server/core/services/ServerRequestParser.spec.ts +520 -0
  469. package/src/server/core/services/ServerRequestParser.ts +306 -13
  470. package/src/server/cors/index.ts +7 -21
  471. package/src/server/cors/primitives/$cors.ts +6 -2
  472. package/src/server/health/index.ts +8 -2
  473. package/src/server/helmet/index.ts +11 -3
  474. package/src/server/links/index.ts +11 -6
  475. package/src/server/metrics/index.ts +10 -3
  476. package/src/server/multipart/index.ts +9 -3
  477. package/src/server/proxy/index.ts +8 -2
  478. package/src/server/rate-limit/index.ts +21 -25
  479. package/src/server/rate-limit/primitives/$rateLimit.ts +6 -2
  480. package/src/server/rate-limit/providers/ServerRateLimitProvider.spec.ts +38 -14
  481. package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +22 -56
  482. package/src/server/static/index.ts +8 -2
  483. package/src/server/static/providers/ServerStaticProvider.ts +1 -1
  484. package/src/server/swagger/index.ts +9 -4
  485. package/src/server/swagger/providers/ServerSwaggerProvider.ts +1 -1
  486. package/src/sms/index.ts +9 -5
  487. package/src/sms/providers/LocalSmsProvider.spec.ts +1 -1
  488. package/src/sms/providers/LocalSmsProvider.ts +1 -1
  489. package/src/system/index.browser.ts +36 -0
  490. package/src/system/index.ts +62 -0
  491. package/src/system/index.workerd.ts +1 -0
  492. package/src/{file → system}/providers/FileSystemProvider.ts +24 -0
  493. package/src/{file → system}/providers/MemoryFileSystemProvider.ts +116 -3
  494. package/src/system/providers/MemoryShellProvider.ts +164 -0
  495. package/src/{file → system}/providers/NodeFileSystemProvider.spec.ts +2 -2
  496. package/src/{file → system}/providers/NodeFileSystemProvider.ts +47 -2
  497. package/src/system/providers/NodeShellProvider.ts +184 -0
  498. package/src/system/providers/ShellProvider.ts +74 -0
  499. package/src/{file → system}/services/FileDetector.spec.ts +2 -2
  500. package/src/thread/index.ts +11 -2
  501. package/src/topic/core/index.ts +12 -5
  502. package/src/vite/tasks/buildClient.ts +2 -7
  503. package/src/vite/tasks/buildServer.ts +19 -13
  504. package/src/vite/tasks/generateCloudflare.ts +10 -7
  505. package/src/vite/tasks/generateDocker.ts +4 -0
  506. package/src/websocket/index.ts +12 -8
  507. package/dist/file/index.d.ts.map +0 -1
  508. package/dist/file/index.js.map +0 -1
  509. package/src/cli/assets/apiIndexTs.ts +0 -16
  510. package/src/cli/assets/mainServerTs.ts +0 -24
  511. package/src/cli/assets/webAppRouterTs.ts +0 -16
  512. package/src/cli/assets/webHelloComponentTsx.ts +0 -20
  513. package/src/cli/providers/ViteTemplateProvider.ts +0 -27
  514. package/src/file/index.ts +0 -43
  515. /package/src/cli/{assets → templates}/apiHelloControllerTs.ts +0 -0
  516. /package/src/cli/{assets → templates}/biomeJson.ts +0 -0
  517. /package/src/cli/{assets → templates}/dummySpecTs.ts +0 -0
  518. /package/src/cli/{assets → templates}/editorconfig.ts +0 -0
  519. /package/src/cli/{assets → templates}/mainBrowserTs.ts +0 -0
  520. /package/src/cli/{assets → templates}/tsconfigJson.ts +0 -0
  521. /package/src/cli/{assets → templates}/webIndexTs.ts +0 -0
  522. /package/src/{file → system}/errors/FileError.ts +0 -0
  523. /package/src/{file → system}/services/FileDetector.ts +0 -0
package/README.md CHANGED
@@ -1,116 +1,104 @@
1
1
  <div align="center">
2
- <h1 >
2
+ <h1>
3
3
  <img
4
- src="https://raw.githubusercontent.com/feunard/alepha/main/apps/docs/public/icon-512.png"
5
- width="128"
6
- height="128"
7
- alt="Logo"
4
+ src="https://raw.githubusercontent.com/feunard/alepha/main/apps/docs/public/icon-512.png"
5
+ width="128"
6
+ height="128"
7
+ alt="Alepha logo"
8
8
  valign="middle"
9
9
  />
10
10
  Alepha
11
11
  </h1>
12
- <p style="max-width: 512px">
13
- Easy mode for building TypeScript applications.
14
- </p>
15
- <a href="https://www.npmjs.com/package/alepha"><img src="https://img.shields.io/npm/v/alepha.svg" alt="npm"/></a>
16
- <a href="https://www.npmjs.com/package/alepha"><img src="https://img.shields.io/npm/l/alepha.svg" alt="npm"/></a>
17
- <a href="https://codecov.io/gh/feunard/alepha"><img src="https://codecov.io/gh/feunard/alepha/graph/badge.svg?token=ZDLWI514CP" alt="npm"/></a>
18
- <a href="https://www.npmjs.com/package/alepha"><img src="https://img.shields.io/npm/dt/alepha.svg" alt="npm"/></a>
19
- <a href="https://github.com/feunard/alepha"><img src="https://img.shields.io/github/stars/feunard/alepha.svg?style=social" alt="GitHub stars"/></a>
12
+ <p>TypeScript Framework Made Easy</p>
13
+ <a href="https://www.npmjs.com/package/alepha"><img src="https://img.shields.io/npm/v/alepha.svg" alt="npm version"/></a>
14
+ <a href="https://www.npmjs.com/package/alepha"><img src="https://img.shields.io/npm/l/alepha.svg" alt="license"/></a>
15
+ <a href="https://codecov.io/gh/feunard/alepha"><img src="https://codecov.io/gh/feunard/alepha/graph/badge.svg?token=ZDLWI514CP" alt="coverage"/></a>
16
+ <a href="https://www.npmjs.com/package/alepha"><img src="https://img.shields.io/npm/dt/alepha.svg" alt="downloads"/></a>
20
17
  </div>
21
18
 
22
19
  ## What is this?
23
20
 
24
- A full-stack TypeScript framework for building APIs, React apps with SSR, CLI tools, and more.
21
+ Full-stack TypeScript framework. Node.js and Bun, same code.
25
22
 
26
- - **Runs on Node.js and Bun** switch runtimes without changing code
27
- - **Zero config** sensible defaults, override when needed
28
- - **Type-safe everything** schemas validate at runtime, TypeScript catches the rest
29
- - **Single bundle deploy** no `node_modules` in production
23
+ You define your API with `$action`, your DB with `$entity`, jobs with `$queue`.
24
+ One schema handles database, validation, and TypeScript types.
25
+ The client gets full autocomplete without codegen.
26
+ Testing? Swap services with `.with()`, no mocking.
27
+ Deploy anywhere — Cloudflare, Vercel, Docker, bare metal.
30
28
 
31
- Check out the [documentation](https://alepha.dev) for the full picture.
29
+ ## Example
32
30
 
33
- ## Quick Start
34
-
35
- **Requirements:** [Node.js](https://nodejs.org/) v22+ or [Bun](https://bun.sh/)
36
-
37
- ### API Server
38
-
39
- ```bash
40
- npx alepha init my-api
41
- cd my-api
42
- ```
43
-
44
- Edit `src/api/controllers/HelloController.ts`:
45
-
46
- ```ts
31
+ ```tsx
32
+ // src/Api.ts
47
33
  import { t } from "alepha";
48
34
  import { $action } from "alepha/server";
49
- import { $swagger } from "alepha/server/swagger";
50
-
51
- export class HelloController {
52
- docs = $swagger();
53
-
54
- hello = $action({
55
- path: "/hello",
56
- schema: {
57
- query: t.object({
58
- name: t.optional(t.text()),
59
- }),
60
- response: t.object({
61
- message: t.text(),
62
- }),
35
+ import { $entity, $repository, db } from "alepha/orm";
36
+
37
+ const viewEntity = $entity({
38
+ name: "views",
39
+ schema: t.object({
40
+ id: db.primaryKey(),
41
+ createdAt: db.createdAt(),
42
+ }),
43
+ });
44
+
45
+ export class Api {
46
+ views = $repository(viewEntity);
47
+
48
+ inc = $action({
49
+ schema: { response: t.object({ count: t.number() }) }, // ← validates + generates OpenAPI
50
+ handler: async () => {
51
+ await this.views.create({});
52
+ return { count: await this.views.count() };
63
53
  },
64
- handler: ({ query }) => ({
65
- message: `Hello, ${query.name || "World"}!`,
66
- }),
67
54
  });
68
55
  }
69
56
  ```
70
57
 
71
- ```bash
72
- npm run dev
73
- # Open http://localhost:3000/docs/ for auto-generated API docs
74
- ```
58
+ ```tsx
59
+ // src/AppRouter.tsx
60
+ import { $client } from "alepha/server/links";
61
+ import { $page } from "alepha/react/router";
62
+ import type { Api } from "./Api.ts";
75
63
 
76
- Build and run in production:
64
+ export class AppRouter {
65
+ api = $client<Api>(); // ← fully typed, zero codegen
77
66
 
78
- ```bash
79
- npm run build
80
- node dist # or: bun dist
67
+ home = $page({
68
+ loader: () => this.api.inc(),
69
+ component: (props) => <div>Counter: {props.count}</div>,
70
+ });
71
+ }
81
72
  ```
82
73
 
83
- ### Full-Stack React
74
+ ## Getting Started
84
75
 
85
- In same directory, re-initialize with React support:
76
+ Requirements: [Node.js](https://nodejs.org/) 22+ or [Bun](https://bun.sh/) 1.3+
86
77
 
87
78
  ```bash
88
- npx alepha init --react
89
- ```
90
-
91
- Your `src/main.server.ts` wires everything together:
92
-
93
- ```ts
94
- import { Alepha, run } from "alepha";
95
- import { ApiModule } from "./api/index.ts";
96
- import { WebModule } from "./web/index.ts";
97
-
98
- const alepha = Alepha.create();
99
-
100
- alepha.with(ApiModule); // API endpoints
101
- alepha.with(WebModule); // React pages
79
+ npx alepha init my-app --api # API only
80
+ npx alepha init my-app --react # With React
81
+ npx alepha init my-app --admin # Full SaaS starter
82
+ npx alepha init my-app --admin --ai # + AI assistant context
102
83
 
103
- run(alepha);
84
+ cd my-app && npm run dev
104
85
  ```
105
86
 
106
- Start development server:
87
+ ## CLI
107
88
 
108
89
  ```bash
109
- npm run dev
110
- # Open http://localhost:3000/
90
+ alepha dev # Dev server with HMR
91
+ alepha lint # Format & lint code
92
+ alepha typecheck # TypeScript check
93
+ alepha test # Run tests
94
+ alepha build # Production build
95
+ alepha db generate # Generate migrations
96
+ alepha db migrate # Apply migrations
97
+ alepha db studio # Visual database browser
111
98
  ```
112
99
 
113
100
  ## Learn More
114
101
 
115
- - [Documentation](https://alepha.dev) — guides, concepts, API reference
116
- - [GitHub](https://github.com/feunard/alepha) — source code and issues
102
+ - [Documentation](https://alepha.dev)
103
+ - [llms.txt](https://alepha.dev/llms.txt) — for AI assistants
104
+ - [GitHub](https://github.com/feunard/alepha)
@@ -1040,42 +1040,19 @@ type AuditResource = Static<typeof auditResourceSchema>;
1040
1040
  //#endregion
1041
1041
  //#region ../../src/api/audits/index.d.ts
1042
1042
  /**
1043
- * Provides audit logging API endpoints for Alepha applications.
1043
+ * | type | quality | stability |
1044
+ * |------|---------|-----------|
1045
+ * | backend | standard | stable |
1044
1046
  *
1045
- * This module includes:
1046
- * - Audit log CRUD operations
1047
- * - Filtering and searching audit events
1048
- * - Audit statistics and analytics
1049
- * - `$audit` primitive for domain-specific audit types
1047
+ * Audit trail for compliance.
1050
1048
  *
1051
- * @module alepha.api.audits
1052
- *
1053
- * @example
1054
- * ```ts
1055
- * // In your app module
1056
- * import { AlephaApiAudits } from "alepha/api/audits";
1057
- *
1058
- * const App = $module({
1059
- * name: "app",
1060
- * services: [AlephaApiAudits, ...],
1061
- * });
1062
- *
1063
- * // Create domain-specific audit types
1064
- * class PaymentAudits {
1065
- * audit = $audit({
1066
- * type: "payment",
1067
- * actions: ["create", "refund", "cancel"],
1068
- * });
1049
+ * **Features:**
1050
+ * - Domain-specific audit types
1051
+ * - Audit event logging
1052
+ * - Filtering and searching
1053
+ * - User action tracking
1069
1054
  *
1070
- * async onPaymentCreated(paymentId: string, userId: string) {
1071
- * await this.audit.log("create", {
1072
- * userId,
1073
- * resourceType: "payment",
1074
- * resourceId: paymentId,
1075
- * });
1076
- * }
1077
- * }
1078
- * ```
1055
+ * @module alepha.api.audits
1079
1056
  */
1080
1057
  declare const AlephaApiAudits: alepha381.Service<alepha381.Module>;
1081
1058
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/orm/schemas/insertSchema.ts","../../../src/orm/schemas/updateSchema.ts","../../../src/orm/primitives/$entity.ts","../../../src/orm/constants/PG_SYMBOLS.ts","../../../src/orm/helpers/pgAttr.ts","../../../src/api/audits/entities/audits.ts","../../../src/api/audits/schemas/auditQuerySchema.ts","../../../src/api/audits/schemas/createAuditSchema.ts","../../../src/api/audits/services/AuditService.ts","../../../src/api/audits/controllers/AdminAuditController.ts","../../../src/api/audits/primitives/$audit.ts","../../../src/api/audits/schemas/auditResourceSchema.ts","../../../src/api/audits/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/orm/schemas/insertSchema.ts","../../../src/orm/schemas/updateSchema.ts","../../../src/orm/primitives/$entity.ts","../../../src/orm/constants/PG_SYMBOLS.ts","../../../src/orm/helpers/pgAttr.ts","../../../src/api/audits/entities/audits.ts","../../../src/api/audits/schemas/auditQuerySchema.ts","../../../src/api/audits/schemas/createAuditSchema.ts","../../../src/api/audits/services/AuditService.ts","../../../src/api/audits/controllers/AdminAuditController.ts","../../../src/api/audits/primitives/$audit.ts","../../../src/api/audits/schemas/auditResourceSchema.ts","../../../src/api/audits/index.ts"],"mappings":"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"}
@@ -627,42 +627,19 @@ $audit[KIND] = AuditPrimitive;
627
627
  //#endregion
628
628
  //#region ../../src/api/audits/index.ts
629
629
  /**
630
- * Provides audit logging API endpoints for Alepha applications.
630
+ * | type | quality | stability |
631
+ * |------|---------|-----------|
632
+ * | backend | standard | stable |
631
633
  *
632
- * This module includes:
633
- * - Audit log CRUD operations
634
- * - Filtering and searching audit events
635
- * - Audit statistics and analytics
636
- * - `$audit` primitive for domain-specific audit types
634
+ * Audit trail for compliance.
637
635
  *
638
- * @module alepha.api.audits
639
- *
640
- * @example
641
- * ```ts
642
- * // In your app module
643
- * import { AlephaApiAudits } from "alepha/api/audits";
644
- *
645
- * const App = $module({
646
- * name: "app",
647
- * services: [AlephaApiAudits, ...],
648
- * });
649
- *
650
- * // Create domain-specific audit types
651
- * class PaymentAudits {
652
- * audit = $audit({
653
- * type: "payment",
654
- * actions: ["create", "refund", "cancel"],
655
- * });
636
+ * **Features:**
637
+ * - Domain-specific audit types
638
+ * - Audit event logging
639
+ * - Filtering and searching
640
+ * - User action tracking
656
641
  *
657
- * async onPaymentCreated(paymentId: string, userId: string) {
658
- * await this.audit.log("create", {
659
- * userId,
660
- * resourceType: "payment",
661
- * resourceId: paymentId,
662
- * });
663
- * }
664
- * }
665
- * ```
642
+ * @module alepha.api.audits
666
643
  */
667
644
  const AlephaApiAudits = $module({
668
645
  name: "alepha.api.audits",
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/api/audits/entities/audits.ts","../../../src/api/audits/schemas/auditQuerySchema.ts","../../../src/api/audits/schemas/auditResourceSchema.ts","../../../src/api/audits/schemas/createAuditSchema.ts","../../../src/api/audits/services/AuditService.ts","../../../src/api/audits/controllers/AdminAuditController.ts","../../../src/api/audits/primitives/$audit.ts","../../../src/api/audits/index.ts"],"sourcesContent":["import type { Static } from \"alepha\";\nimport { t } from \"alepha\";\nimport { $entity, db } from \"alepha/orm\";\n\n/**\n * Audit severity levels for categorizing events.\n */\nexport const auditSeveritySchema = t.enum([\"info\", \"warning\", \"critical\"], {\n default: \"info\",\n description: \"Severity level of the audit event\",\n});\n\nexport type AuditSeverity = Static<typeof auditSeveritySchema>;\n\n/**\n * Audit log entity for tracking important system events.\n *\n * Stores comprehensive audit information including:\n * - Who performed the action (userId, userRealm)\n * - What happened (type, action, resource)\n * - When it happened (createdAt)\n * - Context and details (metadata, ipAddress, userAgent)\n */\nexport const audits = $entity({\n name: \"audits\",\n schema: t.object({\n id: db.primaryKey(t.bigint()),\n createdAt: db.createdAt(),\n\n /**\n * Audit event type (e.g., \"auth\", \"user\", \"payment\", \"system\").\n * Used for categorizing and filtering audit events.\n */\n type: t.text({\n description: \"Audit event type (e.g., auth, user, payment, system)\",\n }),\n\n /**\n * Specific action performed (e.g., \"login\", \"logout\", \"create\", \"update\", \"delete\").\n */\n action: t.text({\n description: \"Specific action performed (e.g., login, create, update)\",\n }),\n\n /**\n * Severity level of the event.\n */\n severity: db.default(auditSeveritySchema, \"info\"),\n\n /**\n * User ID who performed the action (null for system events).\n */\n userId: t.optional(t.uuid()),\n\n /**\n * User realm for multi-tenant support.\n */\n userRealm: t.optional(t.text()),\n\n /**\n * User email at the time of the event (denormalized for history).\n */\n userEmail: t.optional(t.email()),\n\n /**\n * Resource type affected (e.g., \"user\", \"order\", \"file\").\n */\n resourceType: t.optional(t.text()),\n\n /**\n * Resource ID affected.\n */\n resourceId: t.optional(t.text()),\n\n /**\n * Human-readable description of the event.\n */\n description: t.optional(t.text()),\n\n /**\n * Additional metadata/context as JSON.\n */\n metadata: t.optional(t.json()),\n\n /**\n * Client IP address.\n */\n ipAddress: t.optional(t.text()),\n\n /**\n * Client user agent.\n */\n userAgent: t.optional(t.text()),\n\n /**\n * Session ID if applicable.\n */\n sessionId: t.optional(t.uuid()),\n\n /**\n * Request ID for correlation.\n */\n requestId: t.optional(t.text()),\n\n /**\n * Whether the action was successful.\n */\n success: db.default(t.boolean(), true),\n\n /**\n * Error message if the action failed.\n */\n errorMessage: t.optional(t.text()),\n }),\n indexes: [\n \"createdAt\",\n \"type\",\n \"action\",\n \"userId\",\n \"userRealm\",\n \"resourceType\",\n \"resourceId\",\n \"severity\",\n { columns: [\"type\", \"action\"] },\n { columns: [\"userId\", \"createdAt\"] },\n { columns: [\"userRealm\", \"createdAt\"] },\n ],\n});\n\nexport const auditEntitySchema = audits.schema;\nexport const auditEntityInsertSchema = audits.insertSchema;\nexport type AuditEntity = Static<typeof audits.schema>;\n","import type { Static } from \"alepha\";\nimport { t } from \"alepha\";\nimport { pageQuerySchema } from \"alepha/orm\";\nimport { auditSeveritySchema } from \"../entities/audits.ts\";\n\n/**\n * Query schema for searching and filtering audit logs.\n */\nexport const auditQuerySchema = t.extend(pageQuerySchema, {\n type: t.optional(t.text({ description: \"Filter by audit type\" })),\n action: t.optional(t.text({ description: \"Filter by action\" })),\n severity: t.optional(auditSeveritySchema),\n userId: t.optional(t.uuid({ description: \"Filter by user ID\" })),\n userRealm: t.optional(t.text({ description: \"Filter by user realm\" })),\n resourceType: t.optional(t.text({ description: \"Filter by resource type\" })),\n resourceId: t.optional(t.text({ description: \"Filter by resource ID\" })),\n success: t.optional(t.boolean({ description: \"Filter by success status\" })),\n from: t.optional(t.datetime({ description: \"Start date filter\" })),\n to: t.optional(t.datetime({ description: \"End date filter\" })),\n search: t.optional(t.text({ description: \"Search in description\" })),\n});\n\nexport type AuditQuery = Static<typeof auditQuerySchema>;\n","import type { Static } from \"alepha\";\nimport { audits } from \"../entities/audits.ts\";\n\n/**\n * Resource schema for audit log responses.\n */\nexport const auditResourceSchema = audits.schema;\n\nexport type AuditResource = Static<typeof auditResourceSchema>;\n","import type { Static } from \"alepha\";\nimport { t } from \"alepha\";\nimport { auditSeveritySchema } from \"../entities/audits.ts\";\n\n/**\n * Schema for creating a new audit log entry.\n */\nexport const createAuditSchema = t.object({\n type: t.text({ description: \"Audit event type\" }),\n action: t.text({ description: \"Specific action performed\" }),\n severity: t.optional(auditSeveritySchema),\n userId: t.optional(t.uuid()),\n userRealm: t.optional(t.text()),\n userEmail: t.optional(t.email()),\n resourceType: t.optional(t.text()),\n resourceId: t.optional(t.text()),\n description: t.optional(t.text()),\n metadata: t.optional(t.json()),\n ipAddress: t.optional(t.text()),\n userAgent: t.optional(t.text()),\n sessionId: t.optional(t.uuid()),\n requestId: t.optional(t.text()),\n success: t.optional(t.boolean()),\n errorMessage: t.optional(t.text()),\n});\n\nexport type CreateAudit = Static<typeof createAuditSchema>;\n","import { $inject, Alepha } from \"alepha\";\nimport { $logger } from \"alepha/logger\";\nimport { $repository, type Page } from \"alepha/orm\";\nimport type { ServerRequest } from \"alepha/server\";\nimport {\n type AuditEntity,\n type AuditSeverity,\n audits,\n} from \"../entities/audits.ts\";\nimport type { AuditQuery } from \"../schemas/auditQuerySchema.ts\";\nimport type { CreateAudit } from \"../schemas/createAuditSchema.ts\";\n\n/**\n * Registered audit type definition.\n */\nexport interface AuditTypeDefinition {\n type: string;\n description?: string;\n actions: string[];\n}\n\n/**\n * Service for managing audit logs.\n *\n * Provides methods for:\n * - Creating audit entries\n * - Querying audit history\n * - Aggregating audit statistics\n * - Managing registered audit types\n */\nexport class AuditService {\n protected readonly alepha = $inject(Alepha);\n protected readonly log = $logger();\n protected readonly repo = $repository(audits);\n\n /**\n * Registry of audit types and their allowed actions.\n */\n protected readonly auditTypes = new Map<string, AuditTypeDefinition>();\n\n /**\n * Register an audit type with its allowed actions.\n */\n public registerType(definition: AuditTypeDefinition): void {\n this.auditTypes.set(definition.type, definition);\n this.log.debug(\"Audit type registered\", {\n type: definition.type,\n actions: definition.actions,\n });\n }\n\n /**\n * Get all registered audit types.\n */\n public getRegisteredTypes(): AuditTypeDefinition[] {\n return Array.from(this.auditTypes.values());\n }\n\n /**\n * Get current request context if available.\n */\n protected getRequestContext(): ServerRequest | undefined {\n return this.alepha.context.get<ServerRequest>(\"request\");\n }\n\n /**\n * Create a new audit log entry.\n * Automatically populates ipAddress, userAgent, and requestId from the current request context.\n */\n public async create(data: CreateAudit): Promise<AuditEntity> {\n const request = this.getRequestContext();\n\n // Auto-populate from request context if not provided\n const contextData: Partial<CreateAudit> = {};\n\n if (request) {\n if (!data.ipAddress && request.ip) {\n contextData.ipAddress = request.ip;\n }\n if (!data.userAgent && request.headers[\"user-agent\"]) {\n contextData.userAgent = request.headers[\"user-agent\"];\n }\n if (!data.requestId && request.requestId) {\n contextData.requestId = request.requestId;\n }\n // Check for session in metadata\n if (!data.sessionId && request.metadata?.sessionId) {\n contextData.sessionId = request.metadata.sessionId;\n }\n // Extract user from request.user (set by ServerSecurityProvider)\n const user = request.user;\n if (user) {\n if (!data.userId && user.id) {\n contextData.userId = user.id;\n }\n if (!data.userEmail && user.email) {\n contextData.userEmail = user.email;\n }\n if (!data.userRealm && user.realm) {\n contextData.userRealm = user.realm;\n }\n }\n }\n\n this.log.trace(\"Creating audit entry\", {\n type: data.type,\n action: data.action,\n userId: data.userId ?? contextData.userId,\n });\n\n const entry = await this.repo.create({\n ...contextData,\n ...data,\n severity: data.severity ?? \"info\",\n success: data.success ?? true,\n });\n\n this.log.debug(\"Audit entry created\", {\n id: entry.id,\n type: data.type,\n action: data.action,\n });\n\n return entry;\n }\n\n /**\n * Record an audit event (convenience method).\n */\n public async record(\n type: string,\n action: string,\n options: Omit<CreateAudit, \"type\" | \"action\"> = {},\n ): Promise<AuditEntity> {\n return this.create({ type, action, ...options });\n }\n\n /**\n * Record an authentication event.\n */\n public async recordAuth(\n action:\n | \"login\"\n | \"logout\"\n | \"login_failed\"\n | \"token_refresh\"\n | \"mfa_setup\"\n | \"mfa_verify\",\n options: Omit<CreateAudit, \"type\" | \"action\"> = {},\n ): Promise<AuditEntity> {\n return this.create({\n type: \"auth\",\n action,\n severity: action === \"login_failed\" ? \"warning\" : \"info\",\n ...options,\n });\n }\n\n /**\n * Record a user management event.\n */\n public async recordUser(\n action:\n | \"create\"\n | \"update\"\n | \"delete\"\n | \"enable\"\n | \"disable\"\n | \"role_change\",\n options: Omit<CreateAudit, \"type\" | \"action\"> = {},\n ): Promise<AuditEntity> {\n return this.create({\n type: \"user\",\n action,\n resourceType: \"user\",\n ...options,\n });\n }\n\n /**\n * Record a data access event.\n */\n public async recordAccess(\n action: \"view\" | \"export\" | \"download\",\n options: Omit<CreateAudit, \"type\" | \"action\"> = {},\n ): Promise<AuditEntity> {\n return this.create({ type: \"access\", action, ...options });\n }\n\n /**\n * Record a security event.\n */\n public async recordSecurity(\n action:\n | \"permission_denied\"\n | \"suspicious_activity\"\n | \"rate_limited\"\n | \"blocked\",\n options: Omit<CreateAudit, \"type\" | \"action\"> = {},\n ): Promise<AuditEntity> {\n return this.create({\n type: \"security\",\n action,\n severity: \"warning\",\n ...options,\n });\n }\n\n /**\n * Record a system event.\n */\n public async recordSystem(\n action: \"startup\" | \"shutdown\" | \"config_change\" | \"maintenance\" | \"error\",\n options: Omit<CreateAudit, \"type\" | \"action\"> = {},\n ): Promise<AuditEntity> {\n return this.create({\n type: \"system\",\n action,\n severity: action === \"error\" ? \"critical\" : \"info\",\n ...options,\n });\n }\n\n /**\n * Find audit entries with filtering and pagination.\n */\n public async find(query: AuditQuery = {}): Promise<Page<AuditEntity>> {\n this.log.trace(\"Finding audit entries\", { query });\n\n query.sort ??= \"-createdAt\";\n\n const where = this.repo.createQueryWhere();\n\n if (query.type) {\n where.type = { eq: query.type };\n }\n\n if (query.action) {\n where.action = { eq: query.action };\n }\n\n if (query.severity) {\n where.severity = { eq: query.severity };\n }\n\n if (query.userId) {\n where.userId = { eq: query.userId };\n }\n\n if (query.userRealm) {\n where.userRealm = { eq: query.userRealm };\n }\n\n if (query.resourceType) {\n where.resourceType = { eq: query.resourceType };\n }\n\n if (query.resourceId) {\n where.resourceId = { eq: query.resourceId };\n }\n\n if (query.success !== undefined) {\n where.success = { eq: query.success };\n }\n\n if (query.from) {\n where.createdAt = { ...(where.createdAt as object), gte: query.from };\n }\n\n if (query.to) {\n where.createdAt = { ...(where.createdAt as object), lte: query.to };\n }\n\n if (query.search) {\n where.description = { like: `%${query.search}%` };\n }\n\n const result = await this.repo.paginate(query, { where }, { count: true });\n\n this.log.debug(\"Audit entries found\", {\n count: result.content.length,\n total: result.page.totalElements,\n });\n\n return result;\n }\n\n /**\n * Get audit entry by ID.\n */\n public async getById(id: string): Promise<AuditEntity> {\n return this.repo.findById(id);\n }\n\n /**\n * Get audit entries for a specific user.\n */\n public async findByUser(\n userId: string,\n query: Omit<AuditQuery, \"userId\"> = {},\n ): Promise<Page<AuditEntity>> {\n return this.find({ ...query, userId });\n }\n\n /**\n * Get audit entries for a specific resource.\n */\n public async findByResource(\n resourceType: string,\n resourceId: string,\n query: Omit<AuditQuery, \"resourceType\" | \"resourceId\"> = {},\n ): Promise<Page<AuditEntity>> {\n return this.find({ ...query, resourceType, resourceId });\n }\n\n /**\n * Get audit statistics for a time period.\n */\n public async getStats(\n options: { from?: Date; to?: Date; userRealm?: string } = {},\n ): Promise<AuditStats> {\n this.log.trace(\"Getting audit stats\", options);\n\n const where = this.repo.createQueryWhere();\n\n if (options.from) {\n where.createdAt = { gte: options.from.toISOString() };\n }\n\n if (options.to) {\n where.createdAt = {\n ...(where.createdAt as object),\n lte: options.to.toISOString(),\n };\n }\n\n if (options.userRealm) {\n where.userRealm = { eq: options.userRealm };\n }\n\n const all = await this.repo.findMany({ where });\n\n const stats: AuditStats = {\n total: all.length,\n byType: {},\n bySeverity: { info: 0, warning: 0, critical: 0 },\n successRate: 0,\n recentFailures: [],\n };\n\n let successCount = 0;\n\n for (const entry of all) {\n // Count by type\n stats.byType[entry.type] = (stats.byType[entry.type] || 0) + 1;\n\n // Count by severity\n const severity = entry.severity as AuditSeverity;\n stats.bySeverity[severity]++;\n\n // Count successes\n if (entry.success) {\n successCount++;\n }\n }\n\n stats.successRate = stats.total > 0 ? successCount / stats.total : 1;\n\n // Get recent failures\n const failures = all\n .filter((e) => !e.success)\n .sort(\n (a, b) =>\n new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime(),\n )\n .slice(0, 10);\n\n stats.recentFailures = failures;\n\n return stats;\n }\n\n /**\n * Delete old audit entries (for retention policy).\n */\n public async deleteOlderThan(date: Date): Promise<number> {\n this.log.info(\"Deleting old audit entries\", { olderThan: date });\n\n const old = await this.repo.findMany({\n where: { createdAt: { lt: date.toISOString() } },\n });\n\n for (const entry of old) {\n await this.repo.deleteById(entry.id);\n }\n\n this.log.info(\"Old audit entries deleted\", { count: old.length });\n\n return old.length;\n }\n}\n\n/**\n * Audit statistics summary.\n */\nexport interface AuditStats {\n total: number;\n byType: Record<string, number>;\n bySeverity: Record<AuditSeverity, number>;\n successRate: number;\n recentFailures: AuditEntity[];\n}\n","import { $inject, t } from \"alepha\";\nimport { $action } from \"alepha/server\";\nimport { auditQuerySchema } from \"../schemas/auditQuerySchema.ts\";\nimport { auditResourceSchema } from \"../schemas/auditResourceSchema.ts\";\nimport { createAuditSchema } from \"../schemas/createAuditSchema.ts\";\nimport { AuditService } from \"../services/AuditService.ts\";\n\n/**\n * REST API controller for audit log management.\n *\n * Provides endpoints for:\n * - Querying audit logs with filtering\n * - Creating audit entries\n * - Getting audit statistics\n * - Viewing registered audit types\n */\nexport class AdminAuditController {\n protected readonly url = \"/audits\";\n protected readonly group = \"admin:audits\";\n protected readonly auditService = $inject(AuditService);\n\n /**\n * Find audit entries with filtering and pagination.\n */\n public readonly findAudits = $action({\n path: this.url,\n group: this.group,\n description: \"Find audit entries with filtering and pagination\",\n schema: {\n query: auditQuerySchema,\n response: t.page(auditResourceSchema),\n },\n handler: ({ query }) => this.auditService.find(query),\n });\n\n /**\n * Get a single audit entry by ID.\n */\n public readonly getAudit = $action({\n path: `${this.url}/:id`,\n group: this.group,\n description: \"Get a single audit entry by ID\",\n schema: {\n params: t.object({\n id: t.text(),\n }),\n response: auditResourceSchema,\n },\n handler: ({ params }) => this.auditService.getById(params.id),\n });\n\n /**\n * Create a new audit entry.\n */\n public readonly createAudit = $action({\n method: \"POST\",\n path: this.url,\n group: this.group,\n description: \"Create a new audit entry\",\n schema: {\n body: createAuditSchema,\n response: auditResourceSchema,\n },\n handler: ({ body }) => this.auditService.create(body),\n });\n\n /**\n * Get audit entries for a specific user.\n */\n public readonly findByUser = $action({\n path: `${this.url}/user/:userId`,\n group: this.group,\n description: \"Get audit entries for a specific user\",\n schema: {\n params: t.object({\n userId: t.uuid(),\n }),\n query: t.omit(auditQuerySchema, [\"userId\"]),\n response: t.page(auditResourceSchema),\n },\n handler: ({ params, query }) =>\n this.auditService.findByUser(params.userId, query),\n });\n\n /**\n * Get audit entries for a specific resource.\n */\n public readonly findByResource = $action({\n path: `${this.url}/resource/:resourceType/:resourceId`,\n group: this.group,\n description: \"Get audit entries for a specific resource\",\n schema: {\n params: t.object({\n resourceType: t.text(),\n resourceId: t.text(),\n }),\n query: t.omit(auditQuerySchema, [\"resourceType\", \"resourceId\"]),\n response: t.page(auditResourceSchema),\n },\n handler: ({ params, query }) =>\n this.auditService.findByResource(\n params.resourceType,\n params.resourceId,\n query,\n ),\n });\n\n /**\n * Get audit statistics.\n */\n public readonly getStats = $action({\n path: `${this.url}/stats`,\n group: this.group,\n description: \"Get audit statistics for a time period\",\n schema: {\n query: t.object({\n from: t.optional(t.datetime()),\n to: t.optional(t.datetime()),\n userRealm: t.optional(t.text()),\n }),\n response: t.object({\n total: t.integer(),\n byType: t.record(t.text(), t.integer()),\n bySeverity: t.object({\n info: t.integer(),\n warning: t.integer(),\n critical: t.integer(),\n }),\n successRate: t.number(),\n recentFailures: t.array(auditResourceSchema),\n }),\n },\n handler: ({ query }) =>\n this.auditService.getStats({\n from: query.from ? new Date(query.from) : undefined,\n to: query.to ? new Date(query.to) : undefined,\n userRealm: query.userRealm,\n }),\n });\n\n /**\n * Get registered audit types.\n */\n public readonly getTypes = $action({\n path: `${this.url}/types`,\n group: this.group,\n description: \"Get all registered audit types\",\n schema: {\n response: t.array(\n t.object({\n type: t.text(),\n description: t.optional(t.text()),\n actions: t.array(t.text()),\n }),\n ),\n },\n handler: () => this.auditService.getRegisteredTypes(),\n });\n\n /**\n * Get distinct values for filters.\n */\n public readonly getFilterOptions = $action({\n path: `${this.url}/filters`,\n group: this.group,\n description: \"Get distinct values for audit filters\",\n schema: {\n response: t.object({\n types: t.array(t.text()),\n actions: t.array(t.text()),\n resourceTypes: t.array(t.text()),\n userRealms: t.array(t.text()),\n }),\n },\n handler: async () => {\n const types = this.auditService.getRegisteredTypes();\n return {\n types: types.map((t) => t.type),\n actions: types.flatMap((t) => t.actions),\n resourceTypes: [\"user\", \"session\", \"file\", \"order\", \"payment\"],\n userRealms: [\"default\"],\n };\n },\n });\n}\n","import { $inject, createPrimitive, KIND, Primitive } from \"alepha\";\nimport {\n AuditService,\n type AuditTypeDefinition,\n} from \"../services/AuditService.ts\";\n\n/**\n * Options for creating an audit type primitive.\n */\nexport interface AuditPrimitiveOptions {\n /**\n * Unique audit type identifier (e.g., \"auth\", \"payment\", \"order\").\n */\n type: string;\n\n /**\n * Human-readable description of this audit type.\n */\n description?: string;\n\n /**\n * List of allowed actions for this audit type.\n */\n actions: string[];\n}\n\n/**\n * Audit type primitive for registering domain-specific audit events.\n *\n * Provides a type-safe way to define and log audit events within a specific domain.\n *\n * @example\n * ```ts\n * class PaymentAudits {\n * audit = $audit({\n * type: \"payment\",\n * description: \"Payment-related audit events\",\n * actions: [\"create\", \"refund\", \"cancel\", \"dispute\"],\n * });\n *\n * async logPaymentCreated(paymentId: string, userId: string, amount: number) {\n * await this.audit.log(\"create\", {\n * userId,\n * resourceType: \"payment\",\n * resourceId: paymentId,\n * description: `Payment of ${amount} created`,\n * metadata: { amount },\n * });\n * }\n * }\n * ```\n */\nexport class AuditPrimitive extends Primitive<AuditPrimitiveOptions> {\n protected readonly auditService = $inject(AuditService);\n\n /**\n * The audit type identifier.\n */\n public get type(): string {\n return this.options.type;\n }\n\n /**\n * The audit type description.\n */\n public get description(): string | undefined {\n return this.options.description;\n }\n\n /**\n * The allowed actions for this audit type.\n */\n public get actions(): string[] {\n return this.options.actions;\n }\n\n /**\n * Log an audit event for this type.\n */\n public async log(\n action: string,\n options: AuditLogOptions = {},\n ): Promise<void> {\n await this.auditService.record(this.options.type, action, options);\n }\n\n /**\n * Log a successful audit event.\n */\n public async logSuccess(\n action: string,\n options: Omit<AuditLogOptions, \"success\"> = {},\n ): Promise<void> {\n await this.log(action, { ...options, success: true });\n }\n\n /**\n * Log a failed audit event.\n */\n public async logFailure(\n action: string,\n errorMessage: string,\n options: Omit<AuditLogOptions, \"success\" | \"errorMessage\"> = {},\n ): Promise<void> {\n await this.log(action, { ...options, success: false, errorMessage });\n }\n\n /**\n * Called during initialization to register this audit type.\n */\n protected onInit(): void {\n const definition: AuditTypeDefinition = {\n type: this.options.type,\n description: this.options.description,\n actions: this.options.actions,\n };\n this.auditService.registerType(definition);\n }\n}\n\n/**\n * Options for logging an audit event.\n */\nexport interface AuditLogOptions {\n severity?: \"info\" | \"warning\" | \"critical\";\n userId?: string;\n userRealm?: string;\n userEmail?: string;\n resourceType?: string;\n resourceId?: string;\n description?: string;\n metadata?: Record<string, unknown>;\n ipAddress?: string;\n userAgent?: string;\n sessionId?: string;\n requestId?: string;\n success?: boolean;\n errorMessage?: string;\n}\n\n/**\n * Create an audit type primitive.\n *\n * @example\n * ```ts\n * class OrderAudits {\n * audit = $audit({\n * type: \"order\",\n * description: \"Order management events\",\n * actions: [\"create\", \"update\", \"cancel\", \"fulfill\", \"ship\"],\n * });\n * }\n * ```\n */\nexport const $audit = (options: AuditPrimitiveOptions) => {\n return createPrimitive(AuditPrimitive, options);\n};\n\n$audit[KIND] = AuditPrimitive;\n","import { $module } from \"alepha\";\nimport { AdminAuditController } from \"./controllers/AdminAuditController.ts\";\nimport { AuditService } from \"./services/AuditService.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./controllers/AdminAuditController.ts\";\nexport * from \"./entities/audits.ts\";\nexport * from \"./primitives/$audit.ts\";\nexport * from \"./schemas/auditQuerySchema.ts\";\nexport * from \"./schemas/auditResourceSchema.ts\";\nexport * from \"./schemas/createAuditSchema.ts\";\nexport * from \"./services/AuditService.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Provides audit logging API endpoints for Alepha applications.\n *\n * This module includes:\n * - Audit log CRUD operations\n * - Filtering and searching audit events\n * - Audit statistics and analytics\n * - `$audit` primitive for domain-specific audit types\n *\n * @module alepha.api.audits\n *\n * @example\n * ```ts\n * // In your app module\n * import { AlephaApiAudits } from \"alepha/api/audits\";\n *\n * const App = $module({\n * name: \"app\",\n * services: [AlephaApiAudits, ...],\n * });\n *\n * // Create domain-specific audit types\n * class PaymentAudits {\n * audit = $audit({\n * type: \"payment\",\n * actions: [\"create\", \"refund\", \"cancel\"],\n * });\n *\n * async onPaymentCreated(paymentId: string, userId: string) {\n * await this.audit.log(\"create\", {\n * userId,\n * resourceType: \"payment\",\n * resourceId: paymentId,\n * });\n * }\n * }\n * ```\n */\nexport const AlephaApiAudits = $module({\n name: \"alepha.api.audits\",\n services: [AuditService, AdminAuditController],\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/api/audits/entities/audits.ts","../../../src/api/audits/schemas/auditQuerySchema.ts","../../../src/api/audits/schemas/auditResourceSchema.ts","../../../src/api/audits/schemas/createAuditSchema.ts","../../../src/api/audits/services/AuditService.ts","../../../src/api/audits/controllers/AdminAuditController.ts","../../../src/api/audits/primitives/$audit.ts","../../../src/api/audits/index.ts"],"sourcesContent":["import type { Static } from \"alepha\";\nimport { t } from \"alepha\";\nimport { $entity, db } from \"alepha/orm\";\n\n/**\n * Audit severity levels for categorizing events.\n */\nexport const auditSeveritySchema = t.enum([\"info\", \"warning\", \"critical\"], {\n default: \"info\",\n description: \"Severity level of the audit event\",\n});\n\nexport type AuditSeverity = Static<typeof auditSeveritySchema>;\n\n/**\n * Audit log entity for tracking important system events.\n *\n * Stores comprehensive audit information including:\n * - Who performed the action (userId, userRealm)\n * - What happened (type, action, resource)\n * - When it happened (createdAt)\n * - Context and details (metadata, ipAddress, userAgent)\n */\nexport const audits = $entity({\n name: \"audits\",\n schema: t.object({\n id: db.primaryKey(t.bigint()),\n createdAt: db.createdAt(),\n\n /**\n * Audit event type (e.g., \"auth\", \"user\", \"payment\", \"system\").\n * Used for categorizing and filtering audit events.\n */\n type: t.text({\n description: \"Audit event type (e.g., auth, user, payment, system)\",\n }),\n\n /**\n * Specific action performed (e.g., \"login\", \"logout\", \"create\", \"update\", \"delete\").\n */\n action: t.text({\n description: \"Specific action performed (e.g., login, create, update)\",\n }),\n\n /**\n * Severity level of the event.\n */\n severity: db.default(auditSeveritySchema, \"info\"),\n\n /**\n * User ID who performed the action (null for system events).\n */\n userId: t.optional(t.uuid()),\n\n /**\n * User realm for multi-tenant support.\n */\n userRealm: t.optional(t.text()),\n\n /**\n * User email at the time of the event (denormalized for history).\n */\n userEmail: t.optional(t.email()),\n\n /**\n * Resource type affected (e.g., \"user\", \"order\", \"file\").\n */\n resourceType: t.optional(t.text()),\n\n /**\n * Resource ID affected.\n */\n resourceId: t.optional(t.text()),\n\n /**\n * Human-readable description of the event.\n */\n description: t.optional(t.text()),\n\n /**\n * Additional metadata/context as JSON.\n */\n metadata: t.optional(t.json()),\n\n /**\n * Client IP address.\n */\n ipAddress: t.optional(t.text()),\n\n /**\n * Client user agent.\n */\n userAgent: t.optional(t.text()),\n\n /**\n * Session ID if applicable.\n */\n sessionId: t.optional(t.uuid()),\n\n /**\n * Request ID for correlation.\n */\n requestId: t.optional(t.text()),\n\n /**\n * Whether the action was successful.\n */\n success: db.default(t.boolean(), true),\n\n /**\n * Error message if the action failed.\n */\n errorMessage: t.optional(t.text()),\n }),\n indexes: [\n \"createdAt\",\n \"type\",\n \"action\",\n \"userId\",\n \"userRealm\",\n \"resourceType\",\n \"resourceId\",\n \"severity\",\n { columns: [\"type\", \"action\"] },\n { columns: [\"userId\", \"createdAt\"] },\n { columns: [\"userRealm\", \"createdAt\"] },\n ],\n});\n\nexport const auditEntitySchema = audits.schema;\nexport const auditEntityInsertSchema = audits.insertSchema;\nexport type AuditEntity = Static<typeof audits.schema>;\n","import type { Static } from \"alepha\";\nimport { t } from \"alepha\";\nimport { pageQuerySchema } from \"alepha/orm\";\nimport { auditSeveritySchema } from \"../entities/audits.ts\";\n\n/**\n * Query schema for searching and filtering audit logs.\n */\nexport const auditQuerySchema = t.extend(pageQuerySchema, {\n type: t.optional(t.text({ description: \"Filter by audit type\" })),\n action: t.optional(t.text({ description: \"Filter by action\" })),\n severity: t.optional(auditSeveritySchema),\n userId: t.optional(t.uuid({ description: \"Filter by user ID\" })),\n userRealm: t.optional(t.text({ description: \"Filter by user realm\" })),\n resourceType: t.optional(t.text({ description: \"Filter by resource type\" })),\n resourceId: t.optional(t.text({ description: \"Filter by resource ID\" })),\n success: t.optional(t.boolean({ description: \"Filter by success status\" })),\n from: t.optional(t.datetime({ description: \"Start date filter\" })),\n to: t.optional(t.datetime({ description: \"End date filter\" })),\n search: t.optional(t.text({ description: \"Search in description\" })),\n});\n\nexport type AuditQuery = Static<typeof auditQuerySchema>;\n","import type { Static } from \"alepha\";\nimport { audits } from \"../entities/audits.ts\";\n\n/**\n * Resource schema for audit log responses.\n */\nexport const auditResourceSchema = audits.schema;\n\nexport type AuditResource = Static<typeof auditResourceSchema>;\n","import type { Static } from \"alepha\";\nimport { t } from \"alepha\";\nimport { auditSeveritySchema } from \"../entities/audits.ts\";\n\n/**\n * Schema for creating a new audit log entry.\n */\nexport const createAuditSchema = t.object({\n type: t.text({ description: \"Audit event type\" }),\n action: t.text({ description: \"Specific action performed\" }),\n severity: t.optional(auditSeveritySchema),\n userId: t.optional(t.uuid()),\n userRealm: t.optional(t.text()),\n userEmail: t.optional(t.email()),\n resourceType: t.optional(t.text()),\n resourceId: t.optional(t.text()),\n description: t.optional(t.text()),\n metadata: t.optional(t.json()),\n ipAddress: t.optional(t.text()),\n userAgent: t.optional(t.text()),\n sessionId: t.optional(t.uuid()),\n requestId: t.optional(t.text()),\n success: t.optional(t.boolean()),\n errorMessage: t.optional(t.text()),\n});\n\nexport type CreateAudit = Static<typeof createAuditSchema>;\n","import { $inject, Alepha } from \"alepha\";\nimport { $logger } from \"alepha/logger\";\nimport { $repository, type Page } from \"alepha/orm\";\nimport type { ServerRequest } from \"alepha/server\";\nimport {\n type AuditEntity,\n type AuditSeverity,\n audits,\n} from \"../entities/audits.ts\";\nimport type { AuditQuery } from \"../schemas/auditQuerySchema.ts\";\nimport type { CreateAudit } from \"../schemas/createAuditSchema.ts\";\n\n/**\n * Registered audit type definition.\n */\nexport interface AuditTypeDefinition {\n type: string;\n description?: string;\n actions: string[];\n}\n\n/**\n * Service for managing audit logs.\n *\n * Provides methods for:\n * - Creating audit entries\n * - Querying audit history\n * - Aggregating audit statistics\n * - Managing registered audit types\n */\nexport class AuditService {\n protected readonly alepha = $inject(Alepha);\n protected readonly log = $logger();\n protected readonly repo = $repository(audits);\n\n /**\n * Registry of audit types and their allowed actions.\n */\n protected readonly auditTypes = new Map<string, AuditTypeDefinition>();\n\n /**\n * Register an audit type with its allowed actions.\n */\n public registerType(definition: AuditTypeDefinition): void {\n this.auditTypes.set(definition.type, definition);\n this.log.debug(\"Audit type registered\", {\n type: definition.type,\n actions: definition.actions,\n });\n }\n\n /**\n * Get all registered audit types.\n */\n public getRegisteredTypes(): AuditTypeDefinition[] {\n return Array.from(this.auditTypes.values());\n }\n\n /**\n * Get current request context if available.\n */\n protected getRequestContext(): ServerRequest | undefined {\n return this.alepha.context.get<ServerRequest>(\"request\");\n }\n\n /**\n * Create a new audit log entry.\n * Automatically populates ipAddress, userAgent, and requestId from the current request context.\n */\n public async create(data: CreateAudit): Promise<AuditEntity> {\n const request = this.getRequestContext();\n\n // Auto-populate from request context if not provided\n const contextData: Partial<CreateAudit> = {};\n\n if (request) {\n if (!data.ipAddress && request.ip) {\n contextData.ipAddress = request.ip;\n }\n if (!data.userAgent && request.headers[\"user-agent\"]) {\n contextData.userAgent = request.headers[\"user-agent\"];\n }\n if (!data.requestId && request.requestId) {\n contextData.requestId = request.requestId;\n }\n // Check for session in metadata\n if (!data.sessionId && request.metadata?.sessionId) {\n contextData.sessionId = request.metadata.sessionId;\n }\n // Extract user from request.user (set by ServerSecurityProvider)\n const user = request.user;\n if (user) {\n if (!data.userId && user.id) {\n contextData.userId = user.id;\n }\n if (!data.userEmail && user.email) {\n contextData.userEmail = user.email;\n }\n if (!data.userRealm && user.realm) {\n contextData.userRealm = user.realm;\n }\n }\n }\n\n this.log.trace(\"Creating audit entry\", {\n type: data.type,\n action: data.action,\n userId: data.userId ?? contextData.userId,\n });\n\n const entry = await this.repo.create({\n ...contextData,\n ...data,\n severity: data.severity ?? \"info\",\n success: data.success ?? true,\n });\n\n this.log.debug(\"Audit entry created\", {\n id: entry.id,\n type: data.type,\n action: data.action,\n });\n\n return entry;\n }\n\n /**\n * Record an audit event (convenience method).\n */\n public async record(\n type: string,\n action: string,\n options: Omit<CreateAudit, \"type\" | \"action\"> = {},\n ): Promise<AuditEntity> {\n return this.create({ type, action, ...options });\n }\n\n /**\n * Record an authentication event.\n */\n public async recordAuth(\n action:\n | \"login\"\n | \"logout\"\n | \"login_failed\"\n | \"token_refresh\"\n | \"mfa_setup\"\n | \"mfa_verify\",\n options: Omit<CreateAudit, \"type\" | \"action\"> = {},\n ): Promise<AuditEntity> {\n return this.create({\n type: \"auth\",\n action,\n severity: action === \"login_failed\" ? \"warning\" : \"info\",\n ...options,\n });\n }\n\n /**\n * Record a user management event.\n */\n public async recordUser(\n action:\n | \"create\"\n | \"update\"\n | \"delete\"\n | \"enable\"\n | \"disable\"\n | \"role_change\",\n options: Omit<CreateAudit, \"type\" | \"action\"> = {},\n ): Promise<AuditEntity> {\n return this.create({\n type: \"user\",\n action,\n resourceType: \"user\",\n ...options,\n });\n }\n\n /**\n * Record a data access event.\n */\n public async recordAccess(\n action: \"view\" | \"export\" | \"download\",\n options: Omit<CreateAudit, \"type\" | \"action\"> = {},\n ): Promise<AuditEntity> {\n return this.create({ type: \"access\", action, ...options });\n }\n\n /**\n * Record a security event.\n */\n public async recordSecurity(\n action:\n | \"permission_denied\"\n | \"suspicious_activity\"\n | \"rate_limited\"\n | \"blocked\",\n options: Omit<CreateAudit, \"type\" | \"action\"> = {},\n ): Promise<AuditEntity> {\n return this.create({\n type: \"security\",\n action,\n severity: \"warning\",\n ...options,\n });\n }\n\n /**\n * Record a system event.\n */\n public async recordSystem(\n action: \"startup\" | \"shutdown\" | \"config_change\" | \"maintenance\" | \"error\",\n options: Omit<CreateAudit, \"type\" | \"action\"> = {},\n ): Promise<AuditEntity> {\n return this.create({\n type: \"system\",\n action,\n severity: action === \"error\" ? \"critical\" : \"info\",\n ...options,\n });\n }\n\n /**\n * Find audit entries with filtering and pagination.\n */\n public async find(query: AuditQuery = {}): Promise<Page<AuditEntity>> {\n this.log.trace(\"Finding audit entries\", { query });\n\n query.sort ??= \"-createdAt\";\n\n const where = this.repo.createQueryWhere();\n\n if (query.type) {\n where.type = { eq: query.type };\n }\n\n if (query.action) {\n where.action = { eq: query.action };\n }\n\n if (query.severity) {\n where.severity = { eq: query.severity };\n }\n\n if (query.userId) {\n where.userId = { eq: query.userId };\n }\n\n if (query.userRealm) {\n where.userRealm = { eq: query.userRealm };\n }\n\n if (query.resourceType) {\n where.resourceType = { eq: query.resourceType };\n }\n\n if (query.resourceId) {\n where.resourceId = { eq: query.resourceId };\n }\n\n if (query.success !== undefined) {\n where.success = { eq: query.success };\n }\n\n if (query.from) {\n where.createdAt = { ...(where.createdAt as object), gte: query.from };\n }\n\n if (query.to) {\n where.createdAt = { ...(where.createdAt as object), lte: query.to };\n }\n\n if (query.search) {\n where.description = { like: `%${query.search}%` };\n }\n\n const result = await this.repo.paginate(query, { where }, { count: true });\n\n this.log.debug(\"Audit entries found\", {\n count: result.content.length,\n total: result.page.totalElements,\n });\n\n return result;\n }\n\n /**\n * Get audit entry by ID.\n */\n public async getById(id: string): Promise<AuditEntity> {\n return this.repo.findById(id);\n }\n\n /**\n * Get audit entries for a specific user.\n */\n public async findByUser(\n userId: string,\n query: Omit<AuditQuery, \"userId\"> = {},\n ): Promise<Page<AuditEntity>> {\n return this.find({ ...query, userId });\n }\n\n /**\n * Get audit entries for a specific resource.\n */\n public async findByResource(\n resourceType: string,\n resourceId: string,\n query: Omit<AuditQuery, \"resourceType\" | \"resourceId\"> = {},\n ): Promise<Page<AuditEntity>> {\n return this.find({ ...query, resourceType, resourceId });\n }\n\n /**\n * Get audit statistics for a time period.\n */\n public async getStats(\n options: { from?: Date; to?: Date; userRealm?: string } = {},\n ): Promise<AuditStats> {\n this.log.trace(\"Getting audit stats\", options);\n\n const where = this.repo.createQueryWhere();\n\n if (options.from) {\n where.createdAt = { gte: options.from.toISOString() };\n }\n\n if (options.to) {\n where.createdAt = {\n ...(where.createdAt as object),\n lte: options.to.toISOString(),\n };\n }\n\n if (options.userRealm) {\n where.userRealm = { eq: options.userRealm };\n }\n\n const all = await this.repo.findMany({ where });\n\n const stats: AuditStats = {\n total: all.length,\n byType: {},\n bySeverity: { info: 0, warning: 0, critical: 0 },\n successRate: 0,\n recentFailures: [],\n };\n\n let successCount = 0;\n\n for (const entry of all) {\n // Count by type\n stats.byType[entry.type] = (stats.byType[entry.type] || 0) + 1;\n\n // Count by severity\n const severity = entry.severity as AuditSeverity;\n stats.bySeverity[severity]++;\n\n // Count successes\n if (entry.success) {\n successCount++;\n }\n }\n\n stats.successRate = stats.total > 0 ? successCount / stats.total : 1;\n\n // Get recent failures\n const failures = all\n .filter((e) => !e.success)\n .sort(\n (a, b) =>\n new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime(),\n )\n .slice(0, 10);\n\n stats.recentFailures = failures;\n\n return stats;\n }\n\n /**\n * Delete old audit entries (for retention policy).\n */\n public async deleteOlderThan(date: Date): Promise<number> {\n this.log.info(\"Deleting old audit entries\", { olderThan: date });\n\n const old = await this.repo.findMany({\n where: { createdAt: { lt: date.toISOString() } },\n });\n\n for (const entry of old) {\n await this.repo.deleteById(entry.id);\n }\n\n this.log.info(\"Old audit entries deleted\", { count: old.length });\n\n return old.length;\n }\n}\n\n/**\n * Audit statistics summary.\n */\nexport interface AuditStats {\n total: number;\n byType: Record<string, number>;\n bySeverity: Record<AuditSeverity, number>;\n successRate: number;\n recentFailures: AuditEntity[];\n}\n","import { $inject, t } from \"alepha\";\nimport { $action } from \"alepha/server\";\nimport { auditQuerySchema } from \"../schemas/auditQuerySchema.ts\";\nimport { auditResourceSchema } from \"../schemas/auditResourceSchema.ts\";\nimport { createAuditSchema } from \"../schemas/createAuditSchema.ts\";\nimport { AuditService } from \"../services/AuditService.ts\";\n\n/**\n * REST API controller for audit log management.\n *\n * Provides endpoints for:\n * - Querying audit logs with filtering\n * - Creating audit entries\n * - Getting audit statistics\n * - Viewing registered audit types\n */\nexport class AdminAuditController {\n protected readonly url = \"/audits\";\n protected readonly group = \"admin:audits\";\n protected readonly auditService = $inject(AuditService);\n\n /**\n * Find audit entries with filtering and pagination.\n */\n public readonly findAudits = $action({\n path: this.url,\n group: this.group,\n description: \"Find audit entries with filtering and pagination\",\n schema: {\n query: auditQuerySchema,\n response: t.page(auditResourceSchema),\n },\n handler: ({ query }) => this.auditService.find(query),\n });\n\n /**\n * Get a single audit entry by ID.\n */\n public readonly getAudit = $action({\n path: `${this.url}/:id`,\n group: this.group,\n description: \"Get a single audit entry by ID\",\n schema: {\n params: t.object({\n id: t.text(),\n }),\n response: auditResourceSchema,\n },\n handler: ({ params }) => this.auditService.getById(params.id),\n });\n\n /**\n * Create a new audit entry.\n */\n public readonly createAudit = $action({\n method: \"POST\",\n path: this.url,\n group: this.group,\n description: \"Create a new audit entry\",\n schema: {\n body: createAuditSchema,\n response: auditResourceSchema,\n },\n handler: ({ body }) => this.auditService.create(body),\n });\n\n /**\n * Get audit entries for a specific user.\n */\n public readonly findByUser = $action({\n path: `${this.url}/user/:userId`,\n group: this.group,\n description: \"Get audit entries for a specific user\",\n schema: {\n params: t.object({\n userId: t.uuid(),\n }),\n query: t.omit(auditQuerySchema, [\"userId\"]),\n response: t.page(auditResourceSchema),\n },\n handler: ({ params, query }) =>\n this.auditService.findByUser(params.userId, query),\n });\n\n /**\n * Get audit entries for a specific resource.\n */\n public readonly findByResource = $action({\n path: `${this.url}/resource/:resourceType/:resourceId`,\n group: this.group,\n description: \"Get audit entries for a specific resource\",\n schema: {\n params: t.object({\n resourceType: t.text(),\n resourceId: t.text(),\n }),\n query: t.omit(auditQuerySchema, [\"resourceType\", \"resourceId\"]),\n response: t.page(auditResourceSchema),\n },\n handler: ({ params, query }) =>\n this.auditService.findByResource(\n params.resourceType,\n params.resourceId,\n query,\n ),\n });\n\n /**\n * Get audit statistics.\n */\n public readonly getStats = $action({\n path: `${this.url}/stats`,\n group: this.group,\n description: \"Get audit statistics for a time period\",\n schema: {\n query: t.object({\n from: t.optional(t.datetime()),\n to: t.optional(t.datetime()),\n userRealm: t.optional(t.text()),\n }),\n response: t.object({\n total: t.integer(),\n byType: t.record(t.text(), t.integer()),\n bySeverity: t.object({\n info: t.integer(),\n warning: t.integer(),\n critical: t.integer(),\n }),\n successRate: t.number(),\n recentFailures: t.array(auditResourceSchema),\n }),\n },\n handler: ({ query }) =>\n this.auditService.getStats({\n from: query.from ? new Date(query.from) : undefined,\n to: query.to ? new Date(query.to) : undefined,\n userRealm: query.userRealm,\n }),\n });\n\n /**\n * Get registered audit types.\n */\n public readonly getTypes = $action({\n path: `${this.url}/types`,\n group: this.group,\n description: \"Get all registered audit types\",\n schema: {\n response: t.array(\n t.object({\n type: t.text(),\n description: t.optional(t.text()),\n actions: t.array(t.text()),\n }),\n ),\n },\n handler: () => this.auditService.getRegisteredTypes(),\n });\n\n /**\n * Get distinct values for filters.\n */\n public readonly getFilterOptions = $action({\n path: `${this.url}/filters`,\n group: this.group,\n description: \"Get distinct values for audit filters\",\n schema: {\n response: t.object({\n types: t.array(t.text()),\n actions: t.array(t.text()),\n resourceTypes: t.array(t.text()),\n userRealms: t.array(t.text()),\n }),\n },\n handler: async () => {\n const types = this.auditService.getRegisteredTypes();\n return {\n types: types.map((t) => t.type),\n actions: types.flatMap((t) => t.actions),\n resourceTypes: [\"user\", \"session\", \"file\", \"order\", \"payment\"],\n userRealms: [\"default\"],\n };\n },\n });\n}\n","import { $inject, createPrimitive, KIND, Primitive } from \"alepha\";\nimport {\n AuditService,\n type AuditTypeDefinition,\n} from \"../services/AuditService.ts\";\n\n/**\n * Options for creating an audit type primitive.\n */\nexport interface AuditPrimitiveOptions {\n /**\n * Unique audit type identifier (e.g., \"auth\", \"payment\", \"order\").\n */\n type: string;\n\n /**\n * Human-readable description of this audit type.\n */\n description?: string;\n\n /**\n * List of allowed actions for this audit type.\n */\n actions: string[];\n}\n\n/**\n * Audit type primitive for registering domain-specific audit events.\n *\n * Provides a type-safe way to define and log audit events within a specific domain.\n *\n * @example\n * ```ts\n * class PaymentAudits {\n * audit = $audit({\n * type: \"payment\",\n * description: \"Payment-related audit events\",\n * actions: [\"create\", \"refund\", \"cancel\", \"dispute\"],\n * });\n *\n * async logPaymentCreated(paymentId: string, userId: string, amount: number) {\n * await this.audit.log(\"create\", {\n * userId,\n * resourceType: \"payment\",\n * resourceId: paymentId,\n * description: `Payment of ${amount} created`,\n * metadata: { amount },\n * });\n * }\n * }\n * ```\n */\nexport class AuditPrimitive extends Primitive<AuditPrimitiveOptions> {\n protected readonly auditService = $inject(AuditService);\n\n /**\n * The audit type identifier.\n */\n public get type(): string {\n return this.options.type;\n }\n\n /**\n * The audit type description.\n */\n public get description(): string | undefined {\n return this.options.description;\n }\n\n /**\n * The allowed actions for this audit type.\n */\n public get actions(): string[] {\n return this.options.actions;\n }\n\n /**\n * Log an audit event for this type.\n */\n public async log(\n action: string,\n options: AuditLogOptions = {},\n ): Promise<void> {\n await this.auditService.record(this.options.type, action, options);\n }\n\n /**\n * Log a successful audit event.\n */\n public async logSuccess(\n action: string,\n options: Omit<AuditLogOptions, \"success\"> = {},\n ): Promise<void> {\n await this.log(action, { ...options, success: true });\n }\n\n /**\n * Log a failed audit event.\n */\n public async logFailure(\n action: string,\n errorMessage: string,\n options: Omit<AuditLogOptions, \"success\" | \"errorMessage\"> = {},\n ): Promise<void> {\n await this.log(action, { ...options, success: false, errorMessage });\n }\n\n /**\n * Called during initialization to register this audit type.\n */\n protected onInit(): void {\n const definition: AuditTypeDefinition = {\n type: this.options.type,\n description: this.options.description,\n actions: this.options.actions,\n };\n this.auditService.registerType(definition);\n }\n}\n\n/**\n * Options for logging an audit event.\n */\nexport interface AuditLogOptions {\n severity?: \"info\" | \"warning\" | \"critical\";\n userId?: string;\n userRealm?: string;\n userEmail?: string;\n resourceType?: string;\n resourceId?: string;\n description?: string;\n metadata?: Record<string, unknown>;\n ipAddress?: string;\n userAgent?: string;\n sessionId?: string;\n requestId?: string;\n success?: boolean;\n errorMessage?: string;\n}\n\n/**\n * Create an audit type primitive.\n *\n * @example\n * ```ts\n * class OrderAudits {\n * audit = $audit({\n * type: \"order\",\n * description: \"Order management events\",\n * actions: [\"create\", \"update\", \"cancel\", \"fulfill\", \"ship\"],\n * });\n * }\n * ```\n */\nexport const $audit = (options: AuditPrimitiveOptions) => {\n return createPrimitive(AuditPrimitive, options);\n};\n\n$audit[KIND] = AuditPrimitive;\n","import { $module } from \"alepha\";\nimport { AdminAuditController } from \"./controllers/AdminAuditController.ts\";\nimport { AuditService } from \"./services/AuditService.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./controllers/AdminAuditController.ts\";\nexport * from \"./entities/audits.ts\";\nexport * from \"./primitives/$audit.ts\";\nexport * from \"./schemas/auditQuerySchema.ts\";\nexport * from \"./schemas/auditResourceSchema.ts\";\nexport * from \"./schemas/createAuditSchema.ts\";\nexport * from \"./services/AuditService.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * | type | quality | stability |\n * |------|---------|-----------|\n * | backend | standard | stable |\n *\n * Audit trail for compliance.\n *\n * **Features:**\n * - Domain-specific audit types\n * - Audit event logging\n * - Filtering and searching\n * - User action tracking\n *\n * @module alepha.api.audits\n */\nexport const AlephaApiAudits = $module({\n name: \"alepha.api.audits\",\n services: [AuditService, AdminAuditController],\n});\n"],"mappings":"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"}
@@ -651,10 +651,17 @@ declare module "alepha/bucket" {
651
651
  }
652
652
  }
653
653
  /**
654
- * Provides file management API endpoints for Alepha applications.
654
+ * | type | quality | stability |
655
+ * |------|---------|-----------|
656
+ * | backend | standard | stable |
655
657
  *
656
- * This module includes file upload, download, storage management,
657
- * and file metadata operations.
658
+ * File management endpoints.
659
+ *
660
+ * **Features:**
661
+ * - Upload/download endpoints
662
+ * - File metadata storage
663
+ * - TTL-based expiration
664
+ * - Storage statistics
658
665
  *
659
666
  * @module alepha.api.files
660
667
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/api/files/entities/files.ts","../../../src/api/files/schemas/fileQuerySchema.ts","../../../src/orm/schemas/insertSchema.ts","../../../src/orm/schemas/updateSchema.ts","../../../src/orm/primitives/$entity.ts","../../../src/orm/constants/PG_SYMBOLS.ts","../../../src/orm/helpers/pgAttr.ts","../../../src/api/files/schemas/fileResourceSchema.ts","../../../src/api/files/schemas/storageStatsSchema.ts","../../../src/api/files/services/FileService.ts","../../../src/api/files/controllers/AdminFileStatsController.ts","../../../src/api/files/controllers/FileController.ts","../../../src/api/files/jobs/FileJobs.ts","../../../src/api/files/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/api/files/entities/files.ts","../../../src/api/files/schemas/fileQuerySchema.ts","../../../src/orm/schemas/insertSchema.ts","../../../src/orm/schemas/updateSchema.ts","../../../src/orm/primitives/$entity.ts","../../../src/orm/constants/PG_SYMBOLS.ts","../../../src/orm/helpers/pgAttr.ts","../../../src/api/files/schemas/fileResourceSchema.ts","../../../src/api/files/schemas/storageStatsSchema.ts","../../../src/api/files/services/FileService.ts","../../../src/api/files/controllers/AdminFileStatsController.ts","../../../src/api/files/controllers/FileController.ts","../../../src/api/files/jobs/FileJobs.ts","../../../src/api/files/index.ts"],"mappings":"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"}
@@ -487,10 +487,17 @@ var FileJobs = class {
487
487
  //#endregion
488
488
  //#region ../../src/api/files/index.ts
489
489
  /**
490
- * Provides file management API endpoints for Alepha applications.
490
+ * | type | quality | stability |
491
+ * |------|---------|-----------|
492
+ * | backend | standard | stable |
491
493
  *
492
- * This module includes file upload, download, storage management,
493
- * and file metadata operations.
494
+ * File management endpoints.
495
+ *
496
+ * **Features:**
497
+ * - Upload/download endpoints
498
+ * - File metadata storage
499
+ * - TTL-based expiration
500
+ * - Storage statistics
494
501
  *
495
502
  * @module alepha.api.files
496
503
  */