alepha 0.23.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (845) hide show
  1. package/assets/swagger-ui/swagger-ui-bundle.js +1 -1
  2. package/assets/swagger-ui/swagger-ui-standalone-preset.js +1 -1
  3. package/dist/api/audits/index.browser.js +49 -52
  4. package/dist/api/audits/index.browser.js.map +1 -1
  5. package/dist/api/audits/index.d.ts +629 -565
  6. package/dist/api/audits/index.d.ts.map +1 -1
  7. package/dist/api/audits/index.js +206 -98
  8. package/dist/api/audits/index.js.map +1 -1
  9. package/dist/api/files/index.browser.js +44 -44
  10. package/dist/api/files/index.browser.js.map +1 -1
  11. package/dist/api/files/index.d.ts +292 -293
  12. package/dist/api/files/index.d.ts.map +1 -1
  13. package/dist/api/files/index.js +61 -64
  14. package/dist/api/files/index.js.map +1 -1
  15. package/dist/api/jobs/index.browser.js +61 -59
  16. package/dist/api/jobs/index.browser.js.map +1 -1
  17. package/dist/api/jobs/index.d.ts +546 -347
  18. package/dist/api/jobs/index.d.ts.map +1 -1
  19. package/dist/api/jobs/index.js +165 -86
  20. package/dist/api/jobs/index.js.map +1 -1
  21. package/dist/api/keys/index.d.ts +247 -235
  22. package/dist/api/keys/index.d.ts.map +1 -1
  23. package/dist/api/keys/index.js +63 -66
  24. package/dist/api/keys/index.js.map +1 -1
  25. package/dist/api/notifications/index.browser.js +40 -38
  26. package/dist/api/notifications/index.browser.js.map +1 -1
  27. package/dist/api/notifications/index.d.ts +339 -209
  28. package/dist/api/notifications/index.d.ts.map +1 -1
  29. package/dist/api/notifications/index.js +108 -60
  30. package/dist/api/notifications/index.js.map +1 -1
  31. package/dist/api/oauth/index.d.ts +190 -78
  32. package/dist/api/oauth/index.d.ts.map +1 -1
  33. package/dist/api/oauth/index.js +290 -68
  34. package/dist/api/oauth/index.js.map +1 -1
  35. package/dist/api/organizations/index.browser.js +14 -14
  36. package/dist/api/organizations/index.browser.js.map +1 -1
  37. package/dist/api/organizations/index.d.ts +158 -134
  38. package/dist/api/organizations/index.d.ts.map +1 -1
  39. package/dist/api/organizations/index.js +18 -18
  40. package/dist/api/organizations/index.js.map +1 -1
  41. package/dist/api/parameters/index.browser.js +74 -53
  42. package/dist/api/parameters/index.browser.js.map +1 -1
  43. package/dist/api/parameters/index.d.ts +607 -513
  44. package/dist/api/parameters/index.d.ts.map +1 -1
  45. package/dist/api/parameters/index.js +205 -127
  46. package/dist/api/parameters/index.js.map +1 -1
  47. package/dist/api/payments/index.d.ts +652 -449
  48. package/dist/api/payments/index.d.ts.map +1 -1
  49. package/dist/api/payments/index.js +159 -93
  50. package/dist/api/payments/index.js.map +1 -1
  51. package/dist/api/subscriptions/index.d.ts +1032 -762
  52. package/dist/api/subscriptions/index.d.ts.map +1 -1
  53. package/dist/api/subscriptions/index.js +166 -185
  54. package/dist/api/subscriptions/index.js.map +1 -1
  55. package/dist/api/users/index.browser.js +48 -71
  56. package/dist/api/users/index.browser.js.map +1 -1
  57. package/dist/api/users/index.d.ts +1297 -1143
  58. package/dist/api/users/index.d.ts.map +1 -1
  59. package/dist/api/users/index.js +456 -392
  60. package/dist/api/users/index.js.map +1 -1
  61. package/dist/api/verifications/index.browser.js +17 -17
  62. package/dist/api/verifications/index.browser.js.map +1 -1
  63. package/dist/api/verifications/index.d.ts +167 -155
  64. package/dist/api/verifications/index.d.ts.map +1 -1
  65. package/dist/api/verifications/index.js +47 -95
  66. package/dist/api/verifications/index.js.map +1 -1
  67. package/dist/background/index.d.ts +0 -1
  68. package/dist/background/index.d.ts.map +1 -1
  69. package/dist/background/index.js.map +1 -1
  70. package/dist/background/index.workerd.js.map +1 -1
  71. package/dist/batch/index.d.ts +0 -1
  72. package/dist/batch/index.d.ts.map +1 -1
  73. package/dist/batch/index.js.map +1 -1
  74. package/dist/bin/index.js +1 -1
  75. package/dist/bin/index.js.map +1 -1
  76. package/dist/bucket/index.d.ts +27 -32
  77. package/dist/bucket/index.d.ts.map +1 -1
  78. package/dist/bucket/index.js +56 -26
  79. package/dist/bucket/index.js.map +1 -1
  80. package/dist/bucket/index.workerd.js +52 -24
  81. package/dist/bucket/index.workerd.js.map +1 -1
  82. package/dist/cache/core/index.d.ts +4 -6
  83. package/dist/cache/core/index.d.ts.map +1 -1
  84. package/dist/cache/core/index.js +4 -10
  85. package/dist/cache/core/index.js.map +1 -1
  86. package/dist/cache/core/index.workerd.js +4 -10
  87. package/dist/cache/core/index.workerd.js.map +1 -1
  88. package/dist/cache/database/index.d.ts +22 -23
  89. package/dist/cache/database/index.d.ts.map +1 -1
  90. package/dist/cache/database/index.js +11 -20
  91. package/dist/cache/database/index.js.map +1 -1
  92. package/dist/cache/redis/index.d.ts +3 -4
  93. package/dist/cache/redis/index.d.ts.map +1 -1
  94. package/dist/cache/redis/index.js +2 -2
  95. package/dist/cache/redis/index.js.map +1 -1
  96. package/dist/captcha/index.d.ts.map +1 -1
  97. package/dist/captcha/index.js +4 -4
  98. package/dist/captcha/index.js.map +1 -1
  99. package/dist/cli/config/index.d.ts +0 -1
  100. package/dist/cli/config/index.d.ts.map +1 -1
  101. package/dist/cli/core/index.d.ts +205 -442
  102. package/dist/cli/core/index.d.ts.map +1 -1
  103. package/dist/cli/core/index.js +259 -284
  104. package/dist/cli/core/index.js.map +1 -1
  105. package/dist/cli/devtools/index.d.ts +3 -9
  106. package/dist/cli/devtools/index.d.ts.map +1 -1
  107. package/dist/cli/devtools/index.js +3 -3
  108. package/dist/cli/devtools/index.js.map +1 -1
  109. package/dist/cli/i18n/index.d.ts +8 -34
  110. package/dist/cli/i18n/index.d.ts.map +1 -1
  111. package/dist/cli/i18n/index.js +6 -6
  112. package/dist/cli/i18n/index.js.map +1 -1
  113. package/dist/cli/platform/index.d.ts +89 -82
  114. package/dist/cli/platform/index.d.ts.map +1 -1
  115. package/dist/cli/platform/index.js +27 -33
  116. package/dist/cli/platform/index.js.map +1 -1
  117. package/dist/cli/platform-lib/index.d.ts +351 -404
  118. package/dist/cli/platform-lib/index.d.ts.map +1 -1
  119. package/dist/cli/platform-lib/index.js +218 -239
  120. package/dist/cli/platform-lib/index.js.map +1 -1
  121. package/dist/cli/vendor/index.d.ts +17 -41
  122. package/dist/cli/vendor/index.d.ts.map +1 -1
  123. package/dist/cli/vendor/index.js +10 -13
  124. package/dist/cli/vendor/index.js.map +1 -1
  125. package/dist/command/index.d.ts +83 -195
  126. package/dist/command/index.d.ts.map +1 -1
  127. package/dist/command/index.js +160 -563
  128. package/dist/command/index.js.map +1 -1
  129. package/dist/core/index.browser.js +845 -859
  130. package/dist/core/index.browser.js.map +1 -1
  131. package/dist/core/index.d.ts +787 -527
  132. package/dist/core/index.d.ts.map +1 -1
  133. package/dist/core/index.js +845 -859
  134. package/dist/core/index.js.map +1 -1
  135. package/dist/core/index.native.js +845 -859
  136. package/dist/core/index.native.js.map +1 -1
  137. package/dist/core/index.workerd.js +845 -859
  138. package/dist/core/index.workerd.js.map +1 -1
  139. package/dist/crypto/index.browser.js +1 -1
  140. package/dist/crypto/index.browser.js.map +1 -1
  141. package/dist/crypto/index.d.ts +3 -4
  142. package/dist/crypto/index.d.ts.map +1 -1
  143. package/dist/crypto/index.js +6 -3
  144. package/dist/crypto/index.js.map +1 -1
  145. package/dist/datetime/index.d.ts +12 -2
  146. package/dist/datetime/index.d.ts.map +1 -1
  147. package/dist/datetime/index.js +6 -1
  148. package/dist/datetime/index.js.map +1 -1
  149. package/dist/email/brevo/index.d.ts +0 -1
  150. package/dist/email/brevo/index.d.ts.map +1 -1
  151. package/dist/email/brevo/index.js +4 -4
  152. package/dist/email/brevo/index.js.map +1 -1
  153. package/dist/email/cloudflare/index.d.ts +0 -1
  154. package/dist/email/cloudflare/index.d.ts.map +1 -1
  155. package/dist/email/cloudflare/index.js +2 -2
  156. package/dist/email/cloudflare/index.js.map +1 -1
  157. package/dist/email/core/index.d.ts +15 -7
  158. package/dist/email/core/index.d.ts.map +1 -1
  159. package/dist/email/core/index.js +14 -5
  160. package/dist/email/core/index.js.map +1 -1
  161. package/dist/email/core/index.workerd.js +5 -1
  162. package/dist/email/core/index.workerd.js.map +1 -1
  163. package/dist/email/smtp/index.d.ts +8 -9
  164. package/dist/email/smtp/index.d.ts.map +1 -1
  165. package/dist/email/smtp/index.js +702 -479
  166. package/dist/email/smtp/index.js.map +1 -1
  167. package/dist/fake/index.d.ts +1580 -1238
  168. package/dist/fake/index.d.ts.map +1 -1
  169. package/dist/fake/index.js +11728 -32131
  170. package/dist/fake/index.js.map +1 -1
  171. package/dist/lock/core/index.d.ts +13 -9
  172. package/dist/lock/core/index.d.ts.map +1 -1
  173. package/dist/lock/core/index.js +5 -5
  174. package/dist/lock/core/index.js.map +1 -1
  175. package/dist/lock/redis/index.d.ts +0 -1
  176. package/dist/lock/redis/index.d.ts.map +1 -1
  177. package/dist/lock/redis/index.js.map +1 -1
  178. package/dist/logger/index.d.ts +81 -69
  179. package/dist/logger/index.d.ts.map +1 -1
  180. package/dist/logger/index.js +123 -56
  181. package/dist/logger/index.js.map +1 -1
  182. package/dist/mcp/index.d.ts +27 -90
  183. package/dist/mcp/index.d.ts.map +1 -1
  184. package/dist/mcp/index.js +42 -70
  185. package/dist/mcp/index.js.map +1 -1
  186. package/dist/orm/core/index.browser.js +54 -40
  187. package/dist/orm/core/index.browser.js.map +1 -1
  188. package/dist/orm/core/index.bun.js +140 -106
  189. package/dist/orm/core/index.bun.js.map +1 -1
  190. package/dist/orm/core/index.d.ts +145 -150
  191. package/dist/orm/core/index.d.ts.map +1 -1
  192. package/dist/orm/core/index.js +144 -109
  193. package/dist/orm/core/index.js.map +1 -1
  194. package/dist/orm/postgres/index.bun.js +64 -54
  195. package/dist/orm/postgres/index.bun.js.map +1 -1
  196. package/dist/orm/postgres/index.d.ts +36 -76
  197. package/dist/orm/postgres/index.d.ts.map +1 -1
  198. package/dist/orm/postgres/index.js +67 -57
  199. package/dist/orm/postgres/index.js.map +1 -1
  200. package/dist/queue/core/index.d.ts +62 -75
  201. package/dist/queue/core/index.d.ts.map +1 -1
  202. package/dist/queue/core/index.js +48 -71
  203. package/dist/queue/core/index.js.map +1 -1
  204. package/dist/queue/core/index.workerd.js +48 -71
  205. package/dist/queue/core/index.workerd.js.map +1 -1
  206. package/dist/queue/redis/index.d.ts +3 -4
  207. package/dist/queue/redis/index.d.ts.map +1 -1
  208. package/dist/queue/redis/index.js +2 -2
  209. package/dist/queue/redis/index.js.map +1 -1
  210. package/dist/react/auth/index.browser.js.map +1 -1
  211. package/dist/react/auth/index.d.ts +7 -4
  212. package/dist/react/auth/index.d.ts.map +1 -1
  213. package/dist/react/auth/index.js.map +1 -1
  214. package/dist/react/core/index.d.ts +87 -5
  215. package/dist/react/core/index.d.ts.map +1 -1
  216. package/dist/react/core/index.js +170 -23
  217. package/dist/react/core/index.js.map +1 -1
  218. package/dist/react/form/index.d.ts +4 -5
  219. package/dist/react/form/index.d.ts.map +1 -1
  220. package/dist/react/form/index.js +91 -56
  221. package/dist/react/form/index.js.map +1 -1
  222. package/dist/react/head/index.browser.js.map +1 -1
  223. package/dist/react/head/index.d.ts +0 -1
  224. package/dist/react/head/index.d.ts.map +1 -1
  225. package/dist/react/head/index.js.map +1 -1
  226. package/dist/react/i18n/index.d.ts +4 -5
  227. package/dist/react/i18n/index.d.ts.map +1 -1
  228. package/dist/react/i18n/index.js +2 -2
  229. package/dist/react/i18n/index.js.map +1 -1
  230. package/dist/react/intro/index.d.ts +1 -4
  231. package/dist/react/intro/index.d.ts.map +1 -1
  232. package/dist/react/intro/index.js.map +1 -1
  233. package/dist/react/router/index.browser.js +60 -24
  234. package/dist/react/router/index.browser.js.map +1 -1
  235. package/dist/react/router/index.d.ts +378 -377
  236. package/dist/react/router/index.d.ts.map +1 -1
  237. package/dist/react/router/index.js +77 -41
  238. package/dist/react/router/index.js.map +1 -1
  239. package/dist/react/sitemap/index.d.ts +0 -1
  240. package/dist/react/sitemap/index.d.ts.map +1 -1
  241. package/dist/react/sitemap/index.js.map +1 -1
  242. package/dist/react/testing/index.d.ts +4 -5
  243. package/dist/react/testing/index.d.ts.map +1 -1
  244. package/dist/react/testing/index.js +41 -15
  245. package/dist/react/testing/index.js.map +1 -1
  246. package/dist/react/testing/{chunk-BpyX8vjI.js → rolldown-runtime-Bl3dcgcQ.js} +1 -1
  247. package/dist/react/ui/index.d.ts +35 -34
  248. package/dist/react/ui/index.d.ts.map +1 -1
  249. package/dist/react/ui/index.js +12 -17
  250. package/dist/react/ui/index.js.map +1 -1
  251. package/dist/redis/index.bun.js +5 -5
  252. package/dist/redis/index.bun.js.map +1 -1
  253. package/dist/redis/index.d.ts +6 -7
  254. package/dist/redis/index.d.ts.map +1 -1
  255. package/dist/redis/index.js +6 -6
  256. package/dist/redis/index.js.map +1 -1
  257. package/dist/retry/index.d.ts +0 -1
  258. package/dist/retry/index.d.ts.map +1 -1
  259. package/dist/retry/index.js.map +1 -1
  260. package/dist/router/index.d.ts.map +1 -1
  261. package/dist/router/index.js.map +1 -1
  262. package/dist/scheduler/index.d.ts +4 -12
  263. package/dist/scheduler/index.d.ts.map +1 -1
  264. package/dist/scheduler/index.js +9 -4
  265. package/dist/scheduler/index.js.map +1 -1
  266. package/dist/scheduler/index.workerd.js +9 -4
  267. package/dist/scheduler/index.workerd.js.map +1 -1
  268. package/dist/security/index.browser.js +30 -28
  269. package/dist/security/index.browser.js.map +1 -1
  270. package/dist/security/index.d.ts +113 -44
  271. package/dist/security/index.d.ts.map +1 -1
  272. package/dist/security/index.js +452 -37
  273. package/dist/security/index.js.map +1 -1
  274. package/dist/server/auth/index.browser.js +19 -19
  275. package/dist/server/auth/index.browser.js.map +1 -1
  276. package/dist/server/auth/index.d.ts +198 -274
  277. package/dist/server/auth/index.d.ts.map +1 -1
  278. package/dist/server/auth/index.js +83 -621
  279. package/dist/server/auth/index.js.map +1 -1
  280. package/dist/server/cookies/index.browser.js +103 -5
  281. package/dist/server/cookies/index.browser.js.map +1 -1
  282. package/dist/server/cookies/index.d.ts +72 -5
  283. package/dist/server/cookies/index.d.ts.map +1 -1
  284. package/dist/server/cookies/index.js +103 -9
  285. package/dist/server/cookies/index.js.map +1 -1
  286. package/dist/server/core/index.browser.js +22 -27
  287. package/dist/server/core/index.browser.js.map +1 -1
  288. package/dist/server/core/index.d.ts +116 -85
  289. package/dist/server/core/index.d.ts.map +1 -1
  290. package/dist/server/core/index.js +105 -118
  291. package/dist/server/core/index.js.map +1 -1
  292. package/dist/server/cors/index.d.ts +9 -10
  293. package/dist/server/cors/index.d.ts.map +1 -1
  294. package/dist/server/cors/index.js +14 -26
  295. package/dist/server/cors/index.js.map +1 -1
  296. package/dist/server/etag/index.d.ts +2 -3
  297. package/dist/server/etag/index.d.ts.map +1 -1
  298. package/dist/server/etag/index.js.map +1 -1
  299. package/dist/server/health/index.d.ts +18 -19
  300. package/dist/server/health/index.d.ts.map +1 -1
  301. package/dist/server/health/index.js +6 -6
  302. package/dist/server/health/index.js.map +1 -1
  303. package/dist/server/links/index.browser.js +15 -18
  304. package/dist/server/links/index.browser.js.map +1 -1
  305. package/dist/server/links/index.d.ts +66 -67
  306. package/dist/server/links/index.d.ts.map +1 -1
  307. package/dist/server/links/index.js +29 -32
  308. package/dist/server/links/index.js.map +1 -1
  309. package/dist/server/metrics/index.d.ts +0 -1
  310. package/dist/server/metrics/index.d.ts.map +1 -1
  311. package/dist/server/metrics/index.js +10 -3
  312. package/dist/server/metrics/index.js.map +1 -1
  313. package/dist/server/proxy/index.d.ts +0 -1
  314. package/dist/server/proxy/index.d.ts.map +1 -1
  315. package/dist/server/proxy/index.js.map +1 -1
  316. package/dist/server/rate-limit/index.d.ts +8 -9
  317. package/dist/server/rate-limit/index.d.ts.map +1 -1
  318. package/dist/server/rate-limit/index.js +6 -12
  319. package/dist/server/rate-limit/index.js.map +1 -1
  320. package/dist/server/static/index.d.ts +0 -1
  321. package/dist/server/static/index.d.ts.map +1 -1
  322. package/dist/server/static/index.js.map +1 -1
  323. package/dist/server/swagger/index.d.ts +4 -4
  324. package/dist/server/swagger/index.d.ts.map +1 -1
  325. package/dist/server/swagger/index.js +37 -25
  326. package/dist/server/swagger/index.js.map +1 -1
  327. package/dist/sms/index.d.ts +0 -1
  328. package/dist/sms/index.d.ts.map +1 -1
  329. package/dist/sms/index.js.map +1 -1
  330. package/dist/system/index.browser.js.map +1 -1
  331. package/dist/system/index.d.ts +0 -1
  332. package/dist/system/index.d.ts.map +1 -1
  333. package/dist/system/index.js +2 -1
  334. package/dist/system/index.js.map +1 -1
  335. package/dist/system/index.workerd.js.map +1 -1
  336. package/dist/topic/core/index.d.ts +19 -20
  337. package/dist/topic/core/index.d.ts.map +1 -1
  338. package/dist/topic/core/index.js +8 -8
  339. package/dist/topic/core/index.js.map +1 -1
  340. package/dist/topic/redis/index.d.ts +3 -4
  341. package/dist/topic/redis/index.d.ts.map +1 -1
  342. package/dist/topic/redis/index.js +2 -2
  343. package/dist/topic/redis/index.js.map +1 -1
  344. package/package.json +22 -35
  345. package/src/api/audits/__tests__/AuditJobs.spec.ts +83 -0
  346. package/src/api/audits/__tests__/AuditService.spec.ts +139 -1
  347. package/src/api/audits/controllers/AdminAuditController.ts +41 -41
  348. package/src/api/audits/entities/audits.ts +22 -22
  349. package/src/api/audits/index.ts +6 -1
  350. package/src/api/audits/jobs/AuditJobs.ts +29 -0
  351. package/src/api/audits/parameters/AuditParameters.ts +51 -0
  352. package/src/api/audits/primitives/$audit.ts +24 -0
  353. package/src/api/audits/schemas/auditQuerySchema.ts +13 -13
  354. package/src/api/audits/schemas/createAuditSchema.ts +18 -18
  355. package/src/api/audits/services/AuditService.ts +79 -7
  356. package/src/api/files/__tests__/FileController.spec.ts +5 -5
  357. package/src/api/files/__tests__/FileJobs.spec.ts +6 -0
  358. package/src/api/files/controllers/FileController.ts +25 -25
  359. package/src/api/files/entities/files.ts +15 -15
  360. package/src/api/files/schemas/fileCreatorSummarySchema.ts +7 -7
  361. package/src/api/files/schemas/fileQuerySchema.ts +9 -9
  362. package/src/api/files/schemas/fileResourceSchema.ts +7 -9
  363. package/src/api/files/schemas/storageStatsSchema.ts +13 -13
  364. package/src/api/jobs/__tests__/$job-hardening.spec.ts +289 -0
  365. package/src/api/jobs/__tests__/$job.spec.ts +18 -18
  366. package/src/api/jobs/controllers/AdminJobController.ts +8 -8
  367. package/src/api/jobs/entities/jobExecutionEntity.ts +29 -19
  368. package/src/api/jobs/providers/JobProvider.ts +128 -12
  369. package/src/api/jobs/providers/JobQueueProvider.ts +2 -2
  370. package/src/api/jobs/schemas/jobConfigAtom.ts +22 -22
  371. package/src/api/jobs/schemas/jobExecutionQuerySchema.ts +6 -6
  372. package/src/api/jobs/schemas/jobExecutionResourceSchema.ts +11 -15
  373. package/src/api/jobs/schemas/jobRegistrationSchema.ts +20 -19
  374. package/src/api/jobs/schemas/triggerJobSchema.ts +3 -3
  375. package/src/api/jobs/services/JobService.ts +6 -6
  376. package/src/api/keys/__tests__/ApiKeyService.spec.ts +2 -2
  377. package/src/api/keys/controllers/AdminApiKeyController.ts +10 -10
  378. package/src/api/keys/entities/apiKeyEntity.ts +15 -15
  379. package/src/api/keys/schemas/adminApiKeyQuerySchema.ts +4 -4
  380. package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +15 -15
  381. package/src/api/keys/schemas/createApiKeyBodySchema.ts +5 -5
  382. package/src/api/keys/schemas/createApiKeyResponseSchema.ts +9 -9
  383. package/src/api/keys/schemas/listApiKeyResponseSchema.ts +13 -13
  384. package/src/api/keys/schemas/revokeApiKeyParamsSchema.ts +3 -3
  385. package/src/api/keys/schemas/revokeApiKeyResponseSchema.ts +3 -3
  386. package/src/api/notifications/__tests__/AlephaApiNotifications.spec.ts +2 -2
  387. package/src/api/notifications/controllers/AdminNotificationController.ts +38 -14
  388. package/src/api/notifications/jobs/NotificationJobs.ts +7 -6
  389. package/src/api/notifications/primitives/$notification.ts +43 -4
  390. package/src/api/notifications/schemas/notificationContactPreferencesSchema.ts +4 -4
  391. package/src/api/notifications/schemas/notificationContactSchema.ts +7 -7
  392. package/src/api/notifications/schemas/notificationDetailResourceSchema.ts +9 -11
  393. package/src/api/notifications/schemas/notificationPayloadSchema.ts +11 -9
  394. package/src/api/notifications/schemas/notificationQuerySchema.ts +6 -6
  395. package/src/api/notifications/schemas/notificationResourceSchema.ts +14 -14
  396. package/src/api/notifications/services/NotificationSenderService.ts +38 -2
  397. package/src/api/oauth/__tests__/OAuthClientService.spec.ts +42 -0
  398. package/src/api/oauth/__tests__/OAuthController.spec.ts +128 -0
  399. package/src/api/oauth/controllers/OAuthController.ts +132 -12
  400. package/src/api/oauth/entities/oauthClientEntity.ts +29 -12
  401. package/src/api/oauth/helpers/oauthMetadata.ts +1 -0
  402. package/src/api/oauth/helpers/oidcMetadata.ts +19 -0
  403. package/src/api/oauth/index.ts +1 -0
  404. package/src/api/oauth/schemas/authorizeDecisionBodySchema.ts +12 -11
  405. package/src/api/oauth/schemas/authorizeQuerySchema.ts +12 -10
  406. package/src/api/oauth/schemas/registerClientBodySchema.ts +10 -11
  407. package/src/api/oauth/schemas/tokenRequestBodySchema.ts +9 -8
  408. package/src/api/oauth/services/OAuthClientService.ts +228 -15
  409. package/src/api/organizations/controllers/AdminOrganizationController.ts +8 -8
  410. package/src/api/organizations/entities/organizations.ts +6 -6
  411. package/src/api/organizations/schemas/createOrganizationSchema.ts +5 -5
  412. package/src/api/organizations/schemas/organizationQuerySchema.ts +4 -4
  413. package/src/api/organizations/schemas/updateOrganizationSchema.ts +1 -2
  414. package/src/api/parameters/__tests__/$parameter.spec.ts +229 -50
  415. package/src/api/parameters/controllers/AdminParameterController.ts +9 -12
  416. package/src/api/parameters/entities/parameters.ts +29 -16
  417. package/src/api/parameters/primitives/$parameter.ts +3 -3
  418. package/src/api/parameters/schemas/activateParameterBodySchema.ts +4 -4
  419. package/src/api/parameters/schemas/createParameterVersionBodySchema.ts +15 -15
  420. package/src/api/parameters/schemas/parameterCreatorSummarySchema.ts +7 -7
  421. package/src/api/parameters/schemas/parameterCurrentResponseSchema.ts +7 -7
  422. package/src/api/parameters/schemas/parameterHistoryResponseSchema.ts +3 -3
  423. package/src/api/parameters/schemas/parameterNameParamSchema.ts +2 -3
  424. package/src/api/parameters/schemas/parameterNamesResponseSchema.ts +3 -3
  425. package/src/api/parameters/schemas/parameterResponseSchema.ts +3 -3
  426. package/src/api/parameters/schemas/parameterStatusSchema.ts +2 -2
  427. package/src/api/parameters/schemas/parameterTreeNodeSchema.ts +6 -6
  428. package/src/api/parameters/schemas/parameterVersionParamSchema.ts +5 -6
  429. package/src/api/parameters/schemas/parameterVersionResponseSchema.ts +3 -3
  430. package/src/api/parameters/schemas/rollbackParameterBodySchema.ts +6 -9
  431. package/src/api/parameters/services/ParameterProvider.ts +152 -65
  432. package/src/api/payments/controllers/AdminPaymentController.ts +7 -7
  433. package/src/api/payments/controllers/MockCheckoutController.ts +79 -28
  434. package/src/api/payments/controllers/PaymentController.ts +4 -4
  435. package/src/api/payments/entities/paymentIntents.ts +11 -11
  436. package/src/api/payments/entities/paymentMethods.ts +11 -11
  437. package/src/api/payments/entities/refunds.ts +9 -9
  438. package/src/api/payments/providers/PaymentProvider.ts +18 -0
  439. package/src/api/payments/schemas/intentSchemas.ts +25 -25
  440. package/src/api/payments/schemas/paymentMethodSchemas.ts +3 -3
  441. package/src/api/payments/services/PaymentService.ts +60 -3
  442. package/src/api/subscriptions/__tests__/SubscriptionService.spec.ts +14 -0
  443. package/src/api/subscriptions/controllers/AdminSubscriptionController.ts +11 -11
  444. package/src/api/subscriptions/controllers/SubscriptionController.ts +5 -4
  445. package/src/api/subscriptions/entities/subscriptionEvents.ts +15 -15
  446. package/src/api/subscriptions/entities/subscriptions.ts +22 -22
  447. package/src/api/subscriptions/notifications/SubscriptionNotifications.ts +22 -22
  448. package/src/api/subscriptions/schemas/cancelSubscriptionSchema.ts +4 -4
  449. package/src/api/subscriptions/schemas/changePlanSchema.ts +5 -5
  450. package/src/api/subscriptions/schemas/createSubscriptionSchema.ts +14 -7
  451. package/src/api/subscriptions/schemas/entitlementsSchema.ts +10 -10
  452. package/src/api/subscriptions/schemas/mrrSchema.ts +9 -9
  453. package/src/api/subscriptions/schemas/planDefinitionSchema.ts +21 -21
  454. package/src/api/subscriptions/schemas/planResourceSchema.ts +19 -19
  455. package/src/api/subscriptions/schemas/subscriptionQuerySchema.ts +8 -8
  456. package/src/api/subscriptions/schemas/subscriptionSettingsSchema.ts +7 -7
  457. package/src/api/subscriptions/schemas/subscriptionStatsSchema.ts +17 -17
  458. package/src/api/subscriptions/services/SubscriptionConfig.ts +2 -2
  459. package/src/api/users/__tests__/ApiKeys-integration.spec.ts +11 -11
  460. package/src/api/users/atoms/realmAuthSettingsAtom.ts +111 -119
  461. package/src/api/users/controllers/AdminIdentityController.ts +29 -19
  462. package/src/api/users/controllers/AdminSessionController.ts +37 -27
  463. package/src/api/users/controllers/AdminUserController.ts +75 -53
  464. package/src/api/users/controllers/MySessionController.ts +125 -0
  465. package/src/api/users/controllers/RealmController.ts +9 -10
  466. package/src/api/users/controllers/UserController.ts +55 -55
  467. package/src/api/users/entities/identities.ts +8 -8
  468. package/src/api/users/entities/sessions.ts +17 -17
  469. package/src/api/users/entities/users.ts +17 -17
  470. package/src/api/users/index.ts +3 -0
  471. package/src/api/users/notifications/UserNotifications.ts +76 -24
  472. package/src/api/users/primitives/$realm.ts +12 -26
  473. package/src/api/users/providers/RealmProvider.ts +0 -15
  474. package/src/api/users/schemas/completePasswordResetRequestSchema.ts +8 -12
  475. package/src/api/users/schemas/completeRegistrationRequestSchema.ts +17 -20
  476. package/src/api/users/schemas/createUserSchema.ts +2 -2
  477. package/src/api/users/schemas/identityQuerySchema.ts +4 -4
  478. package/src/api/users/schemas/identityResourceSchema.ts +3 -2
  479. package/src/api/users/schemas/loginSchema.ts +4 -4
  480. package/src/api/users/schemas/passwordResetIntentResponseSchema.ts +6 -8
  481. package/src/api/users/schemas/realmConfigSchema.ts +10 -24
  482. package/src/api/users/schemas/registerQuerySchema.ts +6 -6
  483. package/src/api/users/schemas/registerRequestSchema.ts +21 -43
  484. package/src/api/users/schemas/registerResponseSchema.ts +2 -2
  485. package/src/api/users/schemas/registerSchema.ts +13 -31
  486. package/src/api/users/schemas/registrationIntentResponseSchema.ts +19 -23
  487. package/src/api/users/schemas/resetPasswordSchema.ts +10 -17
  488. package/src/api/users/schemas/sessionQuerySchema.ts +3 -3
  489. package/src/api/users/schemas/sessionResourceSchema.ts +25 -25
  490. package/src/api/users/schemas/updateUserSchema.ts +3 -4
  491. package/src/api/users/schemas/userQuerySchema.ts +7 -7
  492. package/src/api/users/services/RegistrationService.ts +25 -11
  493. package/src/api/users/services/UserService.ts +12 -6
  494. package/src/api/verifications/__tests__/CodeVerification.spec.ts +63 -101
  495. package/src/api/verifications/__tests__/LinkVerification.spec.ts +23 -92
  496. package/src/api/verifications/controllers/VerificationController.ts +13 -27
  497. package/src/api/verifications/entities/verifications.ts +13 -14
  498. package/src/api/verifications/schemas/requestVerificationCodeResponseSchema.ts +17 -14
  499. package/src/api/verifications/schemas/validateVerificationCodeResponseSchema.ts +9 -10
  500. package/src/api/verifications/schemas/verificationSettingsSchema.ts +65 -66
  501. package/src/api/verifications/schemas/verificationTypeEnumSchema.ts +2 -2
  502. package/src/api/verifications/services/VerificationService.ts +12 -0
  503. package/src/background/__tests__/BackgroundTaskProvider.spec.ts +36 -0
  504. package/src/batch/__tests__/$batch.spec.ts +22 -22
  505. package/src/batch/__tests__/startup-buffering.spec.ts +9 -9
  506. package/src/bin/index.ts +1 -1
  507. package/src/bucket/__tests__/TenantScopedBucket.spec.ts +60 -0
  508. package/src/bucket/providers/LocalFileStorageProvider.ts +14 -6
  509. package/src/bucket/providers/MemoryFileStorageProvider.ts +18 -7
  510. package/src/bucket/providers/R2FileStorageProvider.ts +14 -6
  511. package/src/bucket/providers/S3FileStorageProvider.ts +31 -15
  512. package/src/cache/core/primitives/$cache.ts +7 -10
  513. package/src/cache/database/entities/cacheEntries.ts +16 -27
  514. package/src/cache/database/providers/DatabaseCacheProvider.ts +15 -13
  515. package/src/cache/redis/providers/RedisCacheProvider.ts +6 -6
  516. package/src/captcha/providers/TurnstileCaptchaProvider.ts +4 -4
  517. package/src/cli/core/__tests__/BuildCloudflareTask.spec.ts +178 -0
  518. package/src/cli/core/__tests__/BuildDockerTask.spec.ts +0 -2
  519. package/src/cli/core/__tests__/DbCommand.spec.ts +108 -0
  520. package/src/cli/core/atoms/appEntryOptions.ts +5 -5
  521. package/src/cli/core/atoms/buildOptions.ts +76 -76
  522. package/src/cli/core/atoms/changelogOptions.ts +3 -3
  523. package/src/cli/core/atoms/devOptions.ts +3 -3
  524. package/src/cli/core/commands/build.ts +36 -39
  525. package/src/cli/core/commands/db.ts +171 -83
  526. package/src/cli/core/commands/dev.ts +8 -8
  527. package/src/cli/core/commands/gen/changelog.ts +12 -14
  528. package/src/cli/core/commands/gen/env.ts +6 -6
  529. package/src/cli/core/commands/gen/openapi.ts +6 -6
  530. package/src/cli/core/commands/init.ts +28 -33
  531. package/src/cli/core/commands/pack.ts +10 -10
  532. package/src/cli/core/commands/root.ts +7 -8
  533. package/src/cli/core/commands/test.ts +17 -20
  534. package/src/cli/core/tasks/BuildCloudflareTask.ts +103 -230
  535. package/src/cli/core/templates/apiHelloResponseSchemaTs.ts +4 -4
  536. package/src/cli/devtools/atoms/devtoolsOptions.ts +6 -6
  537. package/src/cli/i18n/atoms/i18nOptions.ts +8 -8
  538. package/src/cli/platform/commands/SecretsCommand.ts +24 -25
  539. package/src/cli/platform/commands/platform.ts +40 -46
  540. package/src/cli/platform/index.ts +1 -1
  541. package/src/cli/platform-lib/__tests__/CloudflareAdapter.spec.ts +0 -4
  542. package/src/cli/platform-lib/__tests__/PlatformInspector.spec.ts +10 -3
  543. package/src/cli/platform-lib/__tests__/VercelAdapter.spec.ts +0 -2
  544. package/src/cli/platform-lib/adapters/CloudflareAdapter.ts +13 -14
  545. package/src/cli/platform-lib/adapters/VercelAdapter.ts +6 -11
  546. package/src/cli/platform-lib/atoms/platformOptions.ts +46 -25
  547. package/src/cli/platform-lib/schemas/cloudflare.ts +87 -87
  548. package/src/cli/platform-lib/schemas/platform.ts +51 -51
  549. package/src/cli/platform-lib/schemas/vercel.ts +28 -28
  550. package/src/cli/platform-lib/services/CloudflareApi.ts +5 -5
  551. package/src/cli/platform-lib/services/VercelApi.ts +4 -4
  552. package/src/cli/platform-lib/services/VercelCli.ts +6 -15
  553. package/src/cli/platform-lib/services/WranglerApi.ts +6 -15
  554. package/src/cli/vendor/atoms/vendorOptions.ts +9 -9
  555. package/src/cli/vendor/commands/VendorCommand.ts +11 -12
  556. package/src/command/__tests__/$command.spec.ts +82 -83
  557. package/src/command/__tests__/Asker.spec.ts +6 -13
  558. package/src/command/__tests__/CliProvider.spec.ts +136 -149
  559. package/src/command/__tests__/Runner.spec.ts +86 -110
  560. package/src/command/helpers/Asker.ts +23 -58
  561. package/src/command/helpers/Runner.ts +34 -110
  562. package/src/command/index.ts +4 -9
  563. package/src/command/primitives/$command.ts +10 -10
  564. package/src/command/providers/CliProvider.ts +183 -161
  565. package/src/core/Alepha.ts +62 -13
  566. package/src/core/__tests__/$atom.spec.ts +52 -3
  567. package/src/core/__tests__/$computed.spec.ts +129 -0
  568. package/src/core/__tests__/$env.spec.ts +13 -13
  569. package/src/core/__tests__/$inject.spec.ts +4 -4
  570. package/src/core/__tests__/$module.spec.ts +1 -1
  571. package/src/core/__tests__/Alepha-graph.spec.ts +1 -1
  572. package/src/core/__tests__/Alepha-parseEnv.spec.ts +32 -32
  573. package/src/core/__tests__/Alepha-start.spec.ts +3 -3
  574. package/src/core/__tests__/CodecManager.spec.ts +113 -94
  575. package/src/core/__tests__/KeylessJsonSchemaCodec.spec.ts +138 -138
  576. package/src/core/__tests__/SchemaValidator.spec.ts +43 -44
  577. package/src/core/__tests__/StateManager.persist.browser.spec.ts +87 -0
  578. package/src/core/__tests__/StateManager.spec.ts +423 -0
  579. package/src/core/__tests__/TypeBox-usecases.spec.ts +8 -8
  580. package/src/core/__tests__/TypeProvider.spec.ts +314 -309
  581. package/src/core/__tests__/dump.spec.ts +6 -6
  582. package/src/core/__tests__/pagination.spec.ts +4 -4
  583. package/src/core/__tests__/scoped-after-start.spec.ts +43 -0
  584. package/src/core/errors/TypeBoxError.ts +10 -4
  585. package/src/core/helpers/FileLike.ts +5 -5
  586. package/src/core/helpers/coerceStrings.ts +70 -0
  587. package/src/core/helpers/jsonSchemaToZod.ts +112 -0
  588. package/src/core/index.shared.ts +4 -1
  589. package/src/core/primitives/$atom.ts +95 -27
  590. package/src/core/primitives/$computed.ts +148 -0
  591. package/src/core/primitives/$env.ts +5 -5
  592. package/src/core/primitives/$state.ts +1 -1
  593. package/src/core/providers/AlsProvider.ts +26 -0
  594. package/src/core/providers/CodecManager.ts +1 -2
  595. package/src/core/providers/JsonSchemaCodec.ts +1 -2
  596. package/src/core/providers/KeylessJsonSchemaCodec.ts +82 -57
  597. package/src/core/providers/SchemaValidator.ts +48 -158
  598. package/src/core/providers/StateManager.ts +383 -9
  599. package/src/core/providers/TypeProvider.ts +80 -734
  600. package/src/core/providers/ZodProvider.ts +380 -0
  601. package/src/core/providers/zodAugment.ts +69 -0
  602. package/src/core/schemas/pageQuerySchema.ts +19 -21
  603. package/src/core/schemas/pageSchema.ts +47 -57
  604. package/src/crypto/__tests__/SecretProvider.spec.ts +31 -0
  605. package/src/crypto/providers/SecretProvider.ts +16 -10
  606. package/src/datetime/primitives/$throttle.ts +6 -1
  607. package/src/email/brevo/providers/BrevoEmailProvider.ts +4 -4
  608. package/src/email/cloudflare/providers/CloudflareEmailProvider.ts +6 -6
  609. package/src/email/core/index.ts +7 -2
  610. package/src/email/core/primitives/$email.ts +5 -1
  611. package/src/email/core/providers/LocalEmailProvider.ts +5 -5
  612. package/src/email/smtp/providers/NodemailerEmailProvider.ts +41 -52
  613. package/src/fake/__tests__/FakeProvider.spec.ts +110 -110
  614. package/src/fake/__tests__/keyName.example.ts +21 -21
  615. package/src/fake/__tests__/keyName.spec.ts +41 -41
  616. package/src/fake/__tests__/module.example.ts +8 -8
  617. package/src/fake/providers/FakeProvider.ts +122 -121
  618. package/src/lock/core/__tests__/lock-mutual-exclusion.spec.ts +44 -0
  619. package/src/lock/core/index.ts +1 -0
  620. package/src/lock/core/primitives/$lock.ts +13 -6
  621. package/src/logger/__tests__/CliFormatterProvider.spec.ts +76 -0
  622. package/src/logger/__tests__/Logger.spec.ts +49 -0
  623. package/src/logger/index.ts +25 -18
  624. package/src/logger/providers/CliFormatterProvider.ts +75 -0
  625. package/src/logger/schemas/logEntrySchema.ts +10 -10
  626. package/src/logger/services/Logger.ts +18 -0
  627. package/src/mcp/__tests__/$prompt.spec.ts +21 -23
  628. package/src/mcp/__tests__/$tool.spec.ts +22 -22
  629. package/src/mcp/__tests__/McpServerProvider.spec.ts +11 -11
  630. package/src/mcp/__tests__/StreamableHttpMcpTransport.spec.ts +2 -2
  631. package/src/mcp/__tests__/integration.spec.ts +33 -33
  632. package/src/mcp/primitives/$prompt.ts +11 -9
  633. package/src/mcp/primitives/$tool.ts +27 -86
  634. package/src/mcp/transports/StreamableHttpMcpTransport.ts +7 -7
  635. package/src/orm/__tests__/$repository-tests.ts +133 -27
  636. package/src/orm/__tests__/$repository.spec.ts +23 -0
  637. package/src/orm/__tests__/$transactional-tests.ts +4 -4
  638. package/src/orm/__tests__/ModelBuilder-tests.ts +28 -28
  639. package/src/orm/__tests__/ModelBuilder.spec.ts +124 -106
  640. package/src/orm/__tests__/QueryManager.spec.ts +5 -5
  641. package/src/orm/__tests__/delete-returning-tests.ts +11 -11
  642. package/src/orm/__tests__/deletedAt-tests.ts +3 -3
  643. package/src/orm/__tests__/enums.spec.ts +29 -25
  644. package/src/orm/__tests__/execute-tests.ts +8 -8
  645. package/src/orm/__tests__/fixtures/bigEntitySchema.ts +48 -48
  646. package/src/orm/__tests__/fixtures/userEntitySchema.ts +6 -6
  647. package/src/orm/__tests__/joins-tests.ts +30 -30
  648. package/src/orm/__tests__/organization-tests.ts +105 -3
  649. package/src/orm/__tests__/organization.spec.ts +46 -0
  650. package/src/orm/__tests__/orm-errors.spec.ts +10 -10
  651. package/src/orm/__tests__/orm-next-tests.ts +29 -29
  652. package/src/orm/__tests__/orm-showcase-tests.ts +9 -9
  653. package/src/orm/__tests__/primaryKey.spec.ts +4 -4
  654. package/src/orm/__tests__/query-date-encoding-tests.ts +17 -17
  655. package/src/orm/__tests__/ref-auto-onDelete.spec.ts +14 -14
  656. package/src/orm/__tests__/references.spec.ts +7 -7
  657. package/src/orm/__tests__/security.spec.ts +17 -17
  658. package/src/orm/__tests__/string-operators-tests.ts +5 -5
  659. package/src/orm/__tests__/timestamps-tests.ts +14 -14
  660. package/src/orm/__tests__/validation-tests.ts +5 -5
  661. package/src/orm/core/__tests__/BunSqliteProvider.bun.spec.ts +8 -8
  662. package/src/orm/core/constants/PG_SYMBOLS.ts +13 -1
  663. package/src/orm/core/entities/alephaSequences.ts +8 -8
  664. package/src/orm/core/helpers/pgAttr.ts +4 -4
  665. package/src/orm/core/primitives/$entity.ts +10 -6
  666. package/src/orm/core/providers/DatabaseTypeProvider.ts +46 -53
  667. package/src/orm/core/providers/drivers/BunSqliteProvider.ts +8 -8
  668. package/src/orm/core/providers/drivers/CloudflareD1Provider.ts +3 -5
  669. package/src/orm/core/providers/drivers/NodeSqliteProvider.ts +8 -8
  670. package/src/orm/core/schemas/databaseEnvSchema.ts +4 -4
  671. package/src/orm/core/schemas/insertSchema.ts +14 -18
  672. package/src/orm/core/schemas/legacyIdSchema.ts +2 -2
  673. package/src/orm/core/schemas/updateSchema.ts +10 -16
  674. package/src/orm/core/services/PgRelationManager.ts +2 -2
  675. package/src/orm/core/services/QueryManager.ts +13 -2
  676. package/src/orm/core/services/Repository.ts +88 -33
  677. package/src/orm/core/services/SqliteModelBuilder.ts +38 -45
  678. package/src/orm/postgres/__tests__/BunPostgresProvider.bun.spec.ts +4 -4
  679. package/src/orm/postgres/providers/CloudflareHyperdriveProvider.ts +4 -6
  680. package/src/orm/postgres/schemas/postgresEnvSchema.ts +6 -6
  681. package/src/orm/postgres/services/PostgresModelBuilder.ts +127 -114
  682. package/src/queue/core/__tests__/$consumer.spec.ts +4 -4
  683. package/src/queue/core/__tests__/WorkerProvider.spec.ts +4 -4
  684. package/src/queue/core/__tests__/shared.ts +6 -6
  685. package/src/queue/core/primitives/$consumer.ts +5 -5
  686. package/src/queue/core/primitives/$queue.ts +44 -61
  687. package/src/queue/core/providers/CloudflareQueueProvider.ts +6 -0
  688. package/src/queue/core/providers/WorkerProvider.ts +17 -14
  689. package/src/queue/redis/providers/RedisQueueProvider.ts +3 -3
  690. package/src/react/core/__tests__/ErrorBoundary.browser.spec.tsx +92 -0
  691. package/src/react/core/__tests__/Router.spec.tsx +4 -4
  692. package/src/react/core/__tests__/useComputed.browser.spec.tsx +192 -0
  693. package/src/react/core/__tests__/useQuery.browser.spec.tsx +48 -0
  694. package/src/react/core/__tests__/useSelector.browser.spec.tsx +105 -0
  695. package/src/react/core/__tests__/useStore.browser.spec.tsx +113 -0
  696. package/src/react/core/components/ErrorBoundary.tsx +42 -0
  697. package/src/react/core/hooks/useAction.ts +56 -19
  698. package/src/react/core/hooks/useComputed.ts +91 -0
  699. package/src/react/core/hooks/useSelector.ts +67 -0
  700. package/src/react/core/hooks/useStore.ts +36 -17
  701. package/src/react/core/index.ts +3 -0
  702. package/src/react/core/utils/shallowEqual.ts +36 -0
  703. package/src/react/form/__tests__/FormModel-submit-loading.spec.ts +2 -2
  704. package/src/react/form/__tests__/form-submitting-reactive.browser.spec.tsx +5 -5
  705. package/src/react/form/__tests__/useForm.browser.spec.tsx +54 -54
  706. package/src/react/form/errors/FormValidationError.ts +0 -2
  707. package/src/react/form/hooks/useForm.ts +19 -4
  708. package/src/react/form/hooks/useFormQuerySync.ts +0 -0
  709. package/src/react/form/services/FormModel.ts +67 -47
  710. package/src/react/form/services/parseField.ts +66 -27
  711. package/src/react/i18n/__tests__/Localize.spec.tsx +1 -1
  712. package/src/react/i18n/providers/I18nProvider.ts +2 -2
  713. package/src/react/router/__tests__/$page.browser.spec.tsx +19 -19
  714. package/src/react/router/__tests__/$page.spec.tsx +21 -21
  715. package/src/react/router/__tests__/ReactBrowserProvider.browser.spec.ts +87 -1
  716. package/src/react/router/atoms/ssrManifestAtom.ts +16 -16
  717. package/src/react/router/components/NestedView.tsx +11 -3
  718. package/src/react/router/hooks/useQueryParams.ts +1 -1
  719. package/src/react/router/primitives/$page.ts +2 -2
  720. package/src/react/router/providers/ReactBrowserProvider.ts +64 -13
  721. package/src/react/router/providers/ReactPageProvider.ts +26 -12
  722. package/src/react/router/providers/ReactServerProvider.ts +13 -15
  723. package/src/react/sitemap/__tests__/$sitemap.spec.ts +2 -2
  724. package/src/react/ui/atoms/uiAtom.ts +6 -6
  725. package/src/react/ui/atoms/uiThemeListAtom.ts +7 -7
  726. package/src/react/ui/hooks/useColorMode.ts +11 -4
  727. package/src/react/ui/services/SchemaControl.ts +4 -4
  728. package/src/redis/providers/BunRedisProvider.ts +19 -11
  729. package/src/redis/providers/NodeRedisProvider.ts +3 -3
  730. package/src/scheduler/primitives/$scheduler.ts +21 -8
  731. package/src/security/__tests__/assertRealmScope.spec.ts +29 -0
  732. package/src/security/atoms/currentTenantAtom.ts +6 -6
  733. package/src/security/atoms/currentUserAtom.ts +2 -2
  734. package/src/security/primitives/$issuer.ts +24 -2
  735. package/src/security/providers/JwtProvider.ts +100 -0
  736. package/src/security/providers/SecurityProvider.ts +43 -2
  737. package/src/security/schemas/permissionSchema.ts +19 -19
  738. package/src/security/schemas/roleSchema.ts +22 -28
  739. package/src/security/schemas/userAccountInfoSchema.ts +47 -37
  740. package/src/server/auth/index.ts +0 -3
  741. package/src/server/auth/primitives/$auth.ts +6 -6
  742. package/src/server/auth/primitives/$authApple.ts +10 -10
  743. package/src/server/auth/primitives/$authFacebook.ts +10 -10
  744. package/src/server/auth/primitives/$authFranceConnect.ts +10 -10
  745. package/src/server/auth/primitives/$authGithub.ts +10 -10
  746. package/src/server/auth/primitives/$authGoogle.ts +10 -10
  747. package/src/server/auth/primitives/$authMicrosoft.ts +14 -14
  748. package/src/server/auth/providers/ServerAuthProvider.ts +49 -48
  749. package/src/server/auth/schemas/authenticationProviderSchema.ts +9 -12
  750. package/src/server/auth/schemas/tokenResponseSchema.ts +2 -2
  751. package/src/server/auth/schemas/tokensSchema.ts +16 -16
  752. package/src/server/auth/schemas/userinfoResponseSchema.ts +3 -3
  753. package/src/server/cookies/__tests__/AtomCookieBinding.spec.ts +80 -0
  754. package/src/server/cookies/__tests__/AtomCookiePersistence.browser.spec.ts +169 -0
  755. package/src/server/cookies/__tests__/AtomCookiePersistence.spec.ts +294 -0
  756. package/src/server/cookies/__tests__/ServerCookiesProvider.spec.ts +14 -14
  757. package/src/server/cookies/index.browser.ts +4 -1
  758. package/src/server/cookies/index.ts +8 -1
  759. package/src/server/cookies/primitives/$cookie.browser.ts +1 -1
  760. package/src/server/cookies/primitives/$cookie.ts +16 -0
  761. package/src/server/cookies/providers/AtomCookiePersistence.browser.ts +133 -0
  762. package/src/server/cookies/providers/AtomCookiePersistence.ts +148 -0
  763. package/src/server/cookies/providers/ServerCookiesProvider.ts +13 -5
  764. package/src/server/cookies/services/CookieParser.ts +6 -1
  765. package/src/server/core/__tests__/$action.spec.ts +13 -13
  766. package/src/server/core/__tests__/$middleware.spec.ts +10 -10
  767. package/src/server/core/__tests__/$route.spec.ts +9 -9
  768. package/src/server/core/__tests__/$sse.spec.ts +26 -26
  769. package/src/server/core/__tests__/BunHttpServerProvider.bun.spec.ts +6 -6
  770. package/src/server/core/__tests__/HttpClient.spec.ts +2 -2
  771. package/src/server/core/__tests__/NodeHttpServerProvider.spec.ts +15 -3
  772. package/src/server/core/__tests__/ServerBodyParserProvider.spec.ts +14 -14
  773. package/src/server/core/__tests__/ServerMultipartProvider.spec.ts +33 -33
  774. package/src/server/core/__tests__/ServerRouterProvider-errorHandler.spec.ts +5 -1
  775. package/src/server/core/__tests__/ServerRouterProvider-getRoutes.spec.ts +25 -25
  776. package/src/server/core/__tests__/ServerRouterProvider-serializationError.spec.ts +9 -5
  777. package/src/server/core/__tests__/ServerRouterProvider-validationError.spec.ts +56 -24
  778. package/src/server/core/errors/ValidationError.ts +6 -3
  779. package/src/server/core/helpers/isMultipart.ts +2 -1
  780. package/src/server/core/index.ts +5 -2
  781. package/src/server/core/interfaces/ServerRequest.ts +6 -14
  782. package/src/server/core/primitives/$action.ts +26 -36
  783. package/src/server/core/primitives/$sse.ts +3 -3
  784. package/src/server/core/providers/BunHttpServerProvider.ts +8 -9
  785. package/src/server/core/providers/NodeHttpServerProvider.ts +8 -9
  786. package/src/server/core/providers/ServerBodyParserProvider.ts +20 -12
  787. package/src/server/core/providers/ServerCompressProvider.ts +9 -10
  788. package/src/server/core/providers/ServerHelmetProvider.ts +26 -27
  789. package/src/server/core/providers/ServerMultipartProvider.ts +19 -19
  790. package/src/server/core/providers/ServerRouterProvider.ts +44 -15
  791. package/src/server/core/schemas/errorSchema.ts +20 -25
  792. package/src/server/core/schemas/okSchema.ts +9 -14
  793. package/src/server/core/services/HttpClient.ts +13 -1
  794. package/src/server/core/services/ServerRequestParser.ts +6 -6
  795. package/src/server/cors/providers/ServerCorsProvider.ts +26 -28
  796. package/src/server/health/schemas/healthSchema.ts +6 -6
  797. package/src/server/links/__tests__/$remote.spec.ts +3 -3
  798. package/src/server/links/__tests__/BatchEndpoint.spec.ts +9 -9
  799. package/src/server/links/__tests__/LinkProvider.spec.ts +9 -9
  800. package/src/server/links/__tests__/ServerLinksProvider.spec.ts +23 -23
  801. package/src/server/links/__tests__/fixtures/CrudApp.ts +21 -21
  802. package/src/server/links/atoms/apiLinksAtom.ts +2 -2
  803. package/src/server/links/atoms/linkOptionsAtom.ts +6 -6
  804. package/src/server/links/primitives/$remote.ts +3 -3
  805. package/src/server/links/providers/LinkProvider.ts +3 -3
  806. package/src/server/links/providers/ServerLinksProvider.ts +20 -20
  807. package/src/server/links/schemas/apiLinksResponseSchema.ts +23 -23
  808. package/src/server/proxy/__tests__/$proxy.spec.ts +9 -9
  809. package/src/server/proxy/providers/ServerProxyProvider.ts +5 -0
  810. package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +18 -20
  811. package/src/server/swagger/__tests__/$swagger.spec.ts +91 -94
  812. package/src/server/swagger/__tests__/ui.spec.ts +3 -3
  813. package/src/server/swagger/providers/ServerSwaggerProvider.ts +66 -43
  814. package/src/system/__tests__/NodeShellProvider.spec.ts +46 -0
  815. package/src/system/providers/NodeShellProvider.ts +4 -1
  816. package/src/topic/core/__tests__/$subscriber.spec.ts +4 -4
  817. package/src/topic/core/__tests__/shared.ts +8 -8
  818. package/src/topic/core/primitives/$subscriber.ts +5 -5
  819. package/src/topic/core/primitives/$topic.ts +14 -14
  820. package/src/topic/redis/providers/RedisTopicProvider.ts +3 -3
  821. package/dist/container/core/index.d.ts +0 -236
  822. package/dist/container/core/index.d.ts.map +0 -1
  823. package/dist/container/core/index.js +0 -231
  824. package/dist/container/core/index.js.map +0 -1
  825. package/dist/container/core/index.workerd.js +0 -192
  826. package/dist/container/core/index.workerd.js.map +0 -1
  827. package/src/command/helpers/PrettyAsker.ts +0 -256
  828. package/src/command/helpers/PrettyPrint.ts +0 -332
  829. package/src/container/core/__tests__/$container.spec.ts +0 -83
  830. package/src/container/core/index.ts +0 -50
  831. package/src/container/core/index.workerd.ts +0 -53
  832. package/src/container/core/interfaces/ContainerOptions.ts +0 -69
  833. package/src/container/core/primitives/$container.ts +0 -100
  834. package/src/container/core/providers/CloudflareContainerProvider.ts +0 -70
  835. package/src/container/core/providers/ContainerProvider.ts +0 -92
  836. package/src/container/core/providers/MockContainerProvider.ts +0 -62
  837. package/src/container/core/providers/NodeContainerProvider.ts +0 -53
  838. package/src/core/__tests__/jsonSchemaToTypeBox.spec.ts +0 -771
  839. package/src/core/helpers/jsonSchemaToTypeBox.ts +0 -359
  840. package/src/server/auth/__tests__/authFederationClient.spec.ts +0 -40
  841. package/src/server/auth/__tests__/federationAssertion.spec.ts +0 -146
  842. package/src/server/auth/helpers/federationAssertion.ts +0 -74
  843. package/src/server/auth/primitives/$authFederationBroker.ts +0 -273
  844. package/src/server/auth/primitives/$authFederationClient.ts +0 -89
  845. /package/dist/orm/core/{chunk-B4FMCO8f.js → rolldown-runtime-B4FMCO8f.js} +0 -0
@@ -1,4 +1,4 @@
1
- import { $inject, t } from "alepha";
1
+ import { $inject, z } from "alepha";
2
2
  import { $repository } from "alepha/orm";
3
3
  import { $secure } from "alepha/security";
4
4
  import { $action } from "alepha/server";
@@ -33,7 +33,7 @@ export class AdminAuditController {
33
33
  description: "Find audit entries with filtering and pagination",
34
34
  schema: {
35
35
  query: auditQuerySchema,
36
- response: t.page(auditResourceSchema),
36
+ response: z.page(auditResourceSchema),
37
37
  },
38
38
  handler: ({ query }) => this.auditService.find(query),
39
39
  });
@@ -47,8 +47,8 @@ export class AdminAuditController {
47
47
  use: [$secure({ permissions: ["admin:audit:read"] })],
48
48
  description: "Get a single audit entry by ID",
49
49
  schema: {
50
- params: t.object({
51
- id: t.text(),
50
+ params: z.object({
51
+ id: z.text(),
52
52
  }),
53
53
  response: auditResourceSchema,
54
54
  },
@@ -66,11 +66,11 @@ export class AdminAuditController {
66
66
  use: [$secure({ permissions: ["admin:audit:delete"] })],
67
67
  description: "Delete many audit entries",
68
68
  schema: {
69
- body: t.object({
70
- ids: t.array(t.text(), { minItems: 1, maxItems: 1000 }),
69
+ body: z.object({
70
+ ids: z.array(z.text()).min(1).max(1000),
71
71
  }),
72
- response: t.object({
73
- deleted: t.array(t.text()),
72
+ response: z.object({
73
+ deleted: z.array(z.text()),
74
74
  }),
75
75
  },
76
76
  handler: async ({ body }) => {
@@ -107,11 +107,11 @@ export class AdminAuditController {
107
107
  use: [$secure({ permissions: ["admin:audit:read"] })],
108
108
  description: "Get audit entries for a specific user",
109
109
  schema: {
110
- params: t.object({
111
- userId: t.uuid(),
110
+ params: z.object({
111
+ userId: z.uuid(),
112
112
  }),
113
- query: t.omit(auditQuerySchema, ["userId"]),
114
- response: t.page(auditResourceSchema),
113
+ query: auditQuerySchema.omit({ userId: true }),
114
+ response: z.page(auditResourceSchema),
115
115
  },
116
116
  handler: ({ params, query }) =>
117
117
  this.auditService.findByUser(params.userId, query),
@@ -126,12 +126,12 @@ export class AdminAuditController {
126
126
  use: [$secure({ permissions: ["admin:audit:read"] })],
127
127
  description: "Get audit entries for a specific resource",
128
128
  schema: {
129
- params: t.object({
130
- resourceType: t.text(),
131
- resourceId: t.text(),
129
+ params: z.object({
130
+ resourceType: z.text(),
131
+ resourceId: z.text(),
132
132
  }),
133
- query: t.omit(auditQuerySchema, ["resourceType", "resourceId"]),
134
- response: t.page(auditResourceSchema),
133
+ query: auditQuerySchema.omit({ resourceType: true, resourceId: true }),
134
+ response: z.page(auditResourceSchema),
135
135
  },
136
136
  handler: ({ params, query }) =>
137
137
  this.auditService.findByResource(
@@ -150,21 +150,21 @@ export class AdminAuditController {
150
150
  use: [$secure({ permissions: ["admin:audit:read"] })],
151
151
  description: "Get audit statistics for a time period",
152
152
  schema: {
153
- query: t.object({
154
- from: t.optional(t.datetime()),
155
- to: t.optional(t.datetime()),
156
- userRealm: t.optional(t.text()),
153
+ query: z.object({
154
+ from: z.datetime().optional(),
155
+ to: z.datetime().optional(),
156
+ userRealm: z.text().optional(),
157
157
  }),
158
- response: t.object({
159
- total: t.integer(),
160
- byType: t.record(t.text(), t.integer()),
161
- bySeverity: t.object({
162
- info: t.integer(),
163
- warning: t.integer(),
164
- critical: t.integer(),
158
+ response: z.object({
159
+ total: z.integer(),
160
+ byType: z.record(z.text(), z.integer()),
161
+ bySeverity: z.object({
162
+ info: z.integer(),
163
+ warning: z.integer(),
164
+ critical: z.integer(),
165
165
  }),
166
- successRate: t.number(),
167
- recentFailures: t.array(auditResourceSchema),
166
+ successRate: z.number(),
167
+ recentFailures: z.array(auditResourceSchema),
168
168
  }),
169
169
  },
170
170
  handler: ({ query }) =>
@@ -184,7 +184,7 @@ export class AdminAuditController {
184
184
  use: [$secure({ permissions: ["admin:audit:read"] })],
185
185
  description: "List distinct action names present in the audit log",
186
186
  schema: {
187
- response: t.array(t.text()),
187
+ response: z.array(z.text()),
188
188
  },
189
189
  handler: () => this.auditService.getDistinctActions(),
190
190
  });
@@ -198,11 +198,11 @@ export class AdminAuditController {
198
198
  use: [$secure({ permissions: ["admin:audit:read"] })],
199
199
  description: "Get all registered audit types",
200
200
  schema: {
201
- response: t.array(
202
- t.object({
203
- type: t.text(),
204
- description: t.optional(t.text()),
205
- actions: t.array(t.text()),
201
+ response: z.array(
202
+ z.object({
203
+ type: z.text(),
204
+ description: z.text().optional(),
205
+ actions: z.array(z.text()),
206
206
  }),
207
207
  ),
208
208
  },
@@ -218,11 +218,11 @@ export class AdminAuditController {
218
218
  use: [$secure({ permissions: ["admin:audit:read"] })],
219
219
  description: "Get distinct values for audit filters",
220
220
  schema: {
221
- response: t.object({
222
- types: t.array(t.text()),
223
- actions: t.array(t.text()),
224
- resourceTypes: t.array(t.text()),
225
- userRealms: t.array(t.text()),
221
+ response: z.object({
222
+ types: z.array(z.text()),
223
+ actions: z.array(z.text()),
224
+ resourceTypes: z.array(z.text()),
225
+ userRealms: z.array(z.text()),
226
226
  }),
227
227
  },
228
228
  handler: async () => {
@@ -1,14 +1,14 @@
1
1
  import type { Static } from "alepha";
2
- import { t } from "alepha";
2
+ import { z } from "alepha";
3
3
  import { $entity, db } from "alepha/orm";
4
4
 
5
5
  /**
6
6
  * Audit severity levels for categorizing events.
7
7
  */
8
- export const auditSeveritySchema = t.enum(["info", "warning", "critical"], {
9
- default: "info",
10
- description: "Severity level of the audit event",
11
- });
8
+ export const auditSeveritySchema = z
9
+ .enum(["info", "warning", "critical"])
10
+ .describe("Severity level of the audit event")
11
+ .default("info");
12
12
 
13
13
  export type AuditSeverity = Static<typeof auditSeveritySchema>;
14
14
 
@@ -23,8 +23,8 @@ export type AuditSeverity = Static<typeof auditSeveritySchema>;
23
23
  */
24
24
  export const audits = $entity({
25
25
  name: "audits",
26
- schema: t.object({
27
- id: db.primaryKey(t.bigint()),
26
+ schema: z.object({
27
+ id: db.primaryKey(z.bigint()),
28
28
  createdAt: db.createdAt(),
29
29
  organizationId: db.organization(),
30
30
 
@@ -32,14 +32,14 @@ export const audits = $entity({
32
32
  * Audit event type (e.g., "auth", "user", "payment", "system").
33
33
  * Used for categorizing and filtering audit events.
34
34
  */
35
- type: t.text({
35
+ type: z.text({
36
36
  description: "Audit event type (e.g., auth, user, payment, system)",
37
37
  }),
38
38
 
39
39
  /**
40
40
  * Specific action performed (e.g., "login", "logout", "create", "update", "delete").
41
41
  */
42
- action: t.text({
42
+ action: z.text({
43
43
  description: "Specific action performed (e.g., login, create, update)",
44
44
  }),
45
45
 
@@ -51,67 +51,67 @@ export const audits = $entity({
51
51
  /**
52
52
  * User ID who performed the action (null for system events).
53
53
  */
54
- userId: t.optional(t.uuid()),
54
+ userId: z.uuid().optional(),
55
55
 
56
56
  /**
57
57
  * User realm for multi-tenant support.
58
58
  */
59
- userRealm: t.optional(t.text()),
59
+ userRealm: z.text().optional(),
60
60
 
61
61
  /**
62
62
  * User email at the time of the event (denormalized for history).
63
63
  */
64
- userEmail: t.optional(t.email()),
64
+ userEmail: z.email().optional(),
65
65
 
66
66
  /**
67
67
  * Resource type affected (e.g., "user", "order", "file").
68
68
  */
69
- resourceType: t.optional(t.text()),
69
+ resourceType: z.text().optional(),
70
70
 
71
71
  /**
72
72
  * Resource ID affected.
73
73
  */
74
- resourceId: t.optional(t.text()),
74
+ resourceId: z.text().optional(),
75
75
 
76
76
  /**
77
77
  * Human-readable description of the event.
78
78
  */
79
- description: t.optional(t.text()),
79
+ description: z.text().optional(),
80
80
 
81
81
  /**
82
82
  * Additional metadata/context as JSON.
83
83
  */
84
- metadata: t.optional(t.json()),
84
+ metadata: z.json().optional(),
85
85
 
86
86
  /**
87
87
  * Client IP address.
88
88
  */
89
- ipAddress: t.optional(t.text()),
89
+ ipAddress: z.text().optional(),
90
90
 
91
91
  /**
92
92
  * Client user agent.
93
93
  */
94
- userAgent: t.optional(t.text()),
94
+ userAgent: z.text().optional(),
95
95
 
96
96
  /**
97
97
  * Session ID if applicable.
98
98
  */
99
- sessionId: t.optional(t.uuid()),
99
+ sessionId: z.uuid().optional(),
100
100
 
101
101
  /**
102
102
  * Request ID for correlation.
103
103
  */
104
- requestId: t.optional(t.text()),
104
+ requestId: z.text().optional(),
105
105
 
106
106
  /**
107
107
  * Whether the action was successful.
108
108
  */
109
- success: db.default(t.boolean(), true),
109
+ success: db.default(z.boolean(), true),
110
110
 
111
111
  /**
112
112
  * Error message if the action failed.
113
113
  */
114
- errorMessage: t.optional(t.text()),
114
+ errorMessage: z.text().optional(),
115
115
  }),
116
116
  indexes: [
117
117
  "createdAt",
@@ -1,11 +1,15 @@
1
1
  import { $module } from "alepha";
2
2
  import { AdminAuditController } from "./controllers/AdminAuditController.ts";
3
+ import { AuditJobs } from "./jobs/AuditJobs.ts";
4
+ import { AuditParameters } from "./parameters/AuditParameters.ts";
3
5
  import { AuditService } from "./services/AuditService.ts";
4
6
 
5
7
  // ---------------------------------------------------------------------------------------------------------------------
6
8
 
7
9
  export * from "./controllers/AdminAuditController.ts";
8
10
  export * from "./entities/audits.ts";
11
+ export * from "./jobs/AuditJobs.ts";
12
+ export * from "./parameters/AuditParameters.ts";
9
13
  export * from "./primitives/$audit.ts";
10
14
  export * from "./schemas/auditQuerySchema.ts";
11
15
  export * from "./schemas/auditResourceSchema.ts";
@@ -22,10 +26,11 @@ export * from "./services/AuditService.ts";
22
26
  * - Audit event logging
23
27
  * - Filtering and searching
24
28
  * - User action tracking
29
+ * - Retention policy with a default + per-type TTL ({@link AuditParameters}, {@link AuditJobs})
25
30
  *
26
31
  * @module alepha.api.audits
27
32
  */
28
33
  export const AlephaApiAudits = $module({
29
34
  name: "alepha.api.audits",
30
- services: [AuditService, AdminAuditController],
35
+ services: [AuditService, AdminAuditController, AuditParameters, AuditJobs],
31
36
  });
@@ -0,0 +1,29 @@
1
+ import { $inject } from "alepha";
2
+ import { $scheduler } from "alepha/scheduler";
3
+ import { AuditParameters } from "../parameters/AuditParameters.ts";
4
+ import { AuditService } from "../services/AuditService.ts";
5
+
6
+ /**
7
+ * Scheduled enforcement of the audit retention policy.
8
+ */
9
+ export class AuditJobs {
10
+ protected readonly auditService = $inject(AuditService);
11
+ protected readonly auditParameters = $inject(AuditParameters);
12
+
13
+ /**
14
+ * Delete audit entries that have outlived their retention window.
15
+ *
16
+ * Runs daily and applies each audit type's dedicated `retentionDays` plus the
17
+ * global default (`auditOptions.retentionDays`). A default of `0` disables
18
+ * cleanup for types without a dedicated retention.
19
+ */
20
+ public readonly cleanExpired = $scheduler({
21
+ name: "api:audits:cleanExpired",
22
+ cron: "0 3 * * *", // Daily at 03:00
23
+ description: "Delete expired audit entries (retention policy)",
24
+ handler: async ({ now }) => {
25
+ const defaultRetentionDays = this.auditParameters.get("retentionDays");
26
+ await this.auditService.deleteExpired(now.toDate(), defaultRetentionDays);
27
+ },
28
+ });
29
+ }
@@ -0,0 +1,51 @@
1
+ import { $atom, $state, type Static, z } from "alepha";
2
+
3
+ // ---------------------------------------------------------------------------------------------------------------------
4
+
5
+ /**
6
+ * Audit module configuration atom.
7
+ */
8
+ export const auditOptions = $atom({
9
+ name: "alepha.api.audits.options",
10
+ schema: z.object({
11
+ /**
12
+ * Default number of days audit entries are retained before the periodic
13
+ * cleanup job ({@link AuditJobs}) deletes them.
14
+ *
15
+ * Applies to every audit type that does not declare its own
16
+ * `retentionDays`. Set to `0` to disable automatic cleanup of those types
17
+ * entirely (keep them forever).
18
+ */
19
+ retentionDays: z
20
+ .integer()
21
+ .min(0)
22
+ .describe(
23
+ "Default days to retain audit entries before cleanup. 0 disables cleanup.",
24
+ )
25
+ .default(90),
26
+ }),
27
+ default: {
28
+ retentionDays: 90,
29
+ },
30
+ });
31
+
32
+ export type AuditOptions = Static<typeof auditOptions.schema>;
33
+
34
+ declare module "alepha" {
35
+ interface State {
36
+ [auditOptions.key]: AuditOptions;
37
+ }
38
+ }
39
+
40
+ // ---------------------------------------------------------------------------------------------------------------------
41
+
42
+ /**
43
+ * Typed accessor for audit module configuration ({@link auditOptions}).
44
+ */
45
+ export class AuditParameters {
46
+ protected readonly options = $state(auditOptions);
47
+
48
+ public get<K extends keyof AuditOptions>(key: K): AuditOptions[K] {
49
+ return this.options[key];
50
+ }
51
+ }
@@ -22,6 +22,22 @@ export interface AuditPrimitiveOptions {
22
22
  * List of allowed actions for this audit type.
23
23
  */
24
24
  actions: string[];
25
+
26
+ /**
27
+ * Number of days entries of this audit type are retained before the periodic
28
+ * cleanup job deletes them.
29
+ *
30
+ * Overrides the global default retention (see `auditOptions.retentionDays` in
31
+ * `AuditParameters`). Set to `0` to keep this type's entries forever,
32
+ * regardless of the global default. When omitted, the global default applies.
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * // Keep security audits for two years, ignoring the global default.
37
+ * $audit({ type: "security", actions: ["login"], retentionDays: 730 });
38
+ * ```
39
+ */
40
+ retentionDays?: number;
25
41
  }
26
42
 
27
43
  /**
@@ -74,6 +90,13 @@ export class AuditPrimitive extends Primitive<AuditPrimitiveOptions> {
74
90
  return this.options.actions;
75
91
  }
76
92
 
93
+ /**
94
+ * The dedicated retention (in days) for this audit type, if set.
95
+ */
96
+ public get retentionDays(): number | undefined {
97
+ return this.options.retentionDays;
98
+ }
99
+
77
100
  /**
78
101
  * Log an audit event for this type.
79
102
  */
@@ -113,6 +136,7 @@ export class AuditPrimitive extends Primitive<AuditPrimitiveOptions> {
113
136
  type: this.options.type,
114
137
  description: this.options.description,
115
138
  actions: this.options.actions,
139
+ retentionDays: this.options.retentionDays,
116
140
  };
117
141
  this.auditService.registerType(definition);
118
142
  }
@@ -1,23 +1,23 @@
1
1
  import type { Static } from "alepha";
2
- import { t } from "alepha";
2
+ import { z } from "alepha";
3
3
  import { pageQuerySchema } from "alepha/orm";
4
4
  import { auditSeveritySchema } from "../entities/audits.ts";
5
5
 
6
6
  /**
7
7
  * Query schema for searching and filtering audit logs.
8
8
  */
9
- export const auditQuerySchema = t.extend(pageQuerySchema, {
10
- type: t.optional(t.text({ description: "Filter by audit type" })),
11
- action: t.optional(t.text({ description: "Filter by action" })),
12
- severity: t.optional(auditSeveritySchema),
13
- userId: t.optional(t.uuid({ description: "Filter by user ID" })),
14
- userRealm: t.optional(t.text({ description: "Filter by user realm" })),
15
- resourceType: t.optional(t.text({ description: "Filter by resource type" })),
16
- resourceId: t.optional(t.text({ description: "Filter by resource ID" })),
17
- success: t.optional(t.boolean({ description: "Filter by success status" })),
18
- from: t.optional(t.datetime({ description: "Start date filter" })),
19
- to: t.optional(t.datetime({ description: "End date filter" })),
20
- search: t.optional(t.text({ description: "Search in description" })),
9
+ export const auditQuerySchema = pageQuerySchema.extend({
10
+ type: z.text({ description: "Filter by audit type" }).optional(),
11
+ action: z.text({ description: "Filter by action" }).optional(),
12
+ severity: auditSeveritySchema.optional(),
13
+ userId: z.uuid().describe("Filter by user ID").optional(),
14
+ userRealm: z.text({ description: "Filter by user realm" }).optional(),
15
+ resourceType: z.text({ description: "Filter by resource type" }).optional(),
16
+ resourceId: z.text({ description: "Filter by resource ID" }).optional(),
17
+ success: z.boolean().describe("Filter by success status").optional(),
18
+ from: z.datetime().describe("Start date filter").optional(),
19
+ to: z.datetime().describe("End date filter").optional(),
20
+ search: z.text({ description: "Search in description" }).optional(),
21
21
  });
22
22
 
23
23
  export type AuditQuery = Static<typeof auditQuerySchema>;
@@ -1,27 +1,27 @@
1
1
  import type { Static } from "alepha";
2
- import { t } from "alepha";
2
+ import { z } from "alepha";
3
3
  import { auditSeveritySchema } from "../entities/audits.ts";
4
4
 
5
5
  /**
6
6
  * Schema for creating a new audit log entry.
7
7
  */
8
- export const createAuditSchema = t.object({
9
- type: t.text({ description: "Audit event type" }),
10
- action: t.text({ description: "Specific action performed" }),
11
- severity: t.optional(auditSeveritySchema),
12
- userId: t.optional(t.uuid()),
13
- userRealm: t.optional(t.text()),
14
- userEmail: t.optional(t.email()),
15
- resourceType: t.optional(t.text()),
16
- resourceId: t.optional(t.text()),
17
- description: t.optional(t.text()),
18
- metadata: t.optional(t.json()),
19
- ipAddress: t.optional(t.text()),
20
- userAgent: t.optional(t.text()),
21
- sessionId: t.optional(t.uuid()),
22
- requestId: t.optional(t.text()),
23
- success: t.optional(t.boolean()),
24
- errorMessage: t.optional(t.text()),
8
+ export const createAuditSchema = z.object({
9
+ type: z.text({ description: "Audit event type" }),
10
+ action: z.text({ description: "Specific action performed" }),
11
+ severity: auditSeveritySchema.optional(),
12
+ userId: z.uuid().optional(),
13
+ userRealm: z.text().optional(),
14
+ userEmail: z.email().optional(),
15
+ resourceType: z.text().optional(),
16
+ resourceId: z.text().optional(),
17
+ description: z.text().optional(),
18
+ metadata: z.json().optional(),
19
+ ipAddress: z.text().optional(),
20
+ userAgent: z.text().optional(),
21
+ sessionId: z.uuid().optional(),
22
+ requestId: z.text().optional(),
23
+ success: z.boolean().optional(),
24
+ errorMessage: z.text().optional(),
25
25
  });
26
26
 
27
27
  export type CreateAudit = Static<typeof createAuditSchema>;
@@ -17,6 +17,14 @@ export interface AuditTypeDefinition {
17
17
  type: string;
18
18
  description?: string;
19
19
  actions: string[];
20
+
21
+ /**
22
+ * Dedicated retention (in days) for this audit type.
23
+ *
24
+ * Overrides the global default applied by the cleanup job. `0` keeps entries
25
+ * forever. When `undefined`, the global default retention applies.
26
+ */
27
+ retentionDays?: number;
20
28
  }
21
29
 
22
30
  /**
@@ -314,22 +322,86 @@ export class AuditService {
314
322
  }
315
323
 
316
324
  /**
317
- * Delete old audit entries (for retention policy).
325
+ * Delete audit entries created before the given date (retention policy).
326
+ *
327
+ * @returns number of deleted entries.
318
328
  */
319
329
  public async deleteOlderThan(date: Date): Promise<number> {
320
330
  this.log.info("Deleting old audit entries", { olderThan: date });
321
331
 
322
- const old = await this.repo.findMany({
323
- where: { createdAt: { lt: date.toISOString() } },
332
+ const deleted = await this.repo.deleteMany({
333
+ createdAt: { lt: date.toISOString() },
324
334
  });
325
335
 
326
- for (const entry of old) {
327
- await this.repo.deleteById(entry.id);
336
+ this.log.info("Old audit entries deleted", { count: deleted.length });
337
+
338
+ return deleted.length;
339
+ }
340
+
341
+ /**
342
+ * Delete audit entries that have outlived their retention window.
343
+ *
344
+ * Each registered audit type that declares a dedicated `retentionDays` is
345
+ * pruned using its own window; every other type — including unregistered or
346
+ * legacy types — falls back to `defaultRetentionDays`. A retention of `0`
347
+ * (per-type or default) keeps that scope forever.
348
+ *
349
+ * `now` is injected rather than read from the clock so the policy is
350
+ * deterministic and testable.
351
+ *
352
+ * @param now - reference "now" used to compute cutoff dates.
353
+ * @param defaultRetentionDays - global default for types without an override.
354
+ * @returns total number of deleted entries.
355
+ */
356
+ public async deleteExpired(
357
+ now: Date,
358
+ defaultRetentionDays: number,
359
+ ): Promise<number> {
360
+ const dayMs = 24 * 60 * 60 * 1000;
361
+ const cutoff = (days: number): string =>
362
+ new Date(now.getTime() - days * dayMs).toISOString();
363
+
364
+ // Audit types carrying their own retention window.
365
+ const overrides = this.getRegisteredTypes().filter(
366
+ (type) => type.retentionDays !== undefined,
367
+ );
368
+
369
+ let deleted = 0;
370
+
371
+ // 1) Per-type dedicated retention.
372
+ for (const type of overrides) {
373
+ const days = type.retentionDays as number;
374
+ if (days <= 0) {
375
+ continue; // keep this type forever
376
+ }
377
+ const ids = await this.repo.deleteMany({
378
+ type: { eq: type.type },
379
+ createdAt: { lt: cutoff(days) },
380
+ });
381
+ deleted += ids.length;
382
+ }
383
+
384
+ // 2) Global default for every other type.
385
+ if (defaultRetentionDays > 0) {
386
+ const overriddenTypes = overrides.map((type) => type.type);
387
+ const ids =
388
+ overriddenTypes.length > 0
389
+ ? await this.repo.deleteMany({
390
+ type: { notInArray: overriddenTypes },
391
+ createdAt: { lt: cutoff(defaultRetentionDays) },
392
+ })
393
+ : await this.repo.deleteMany({
394
+ createdAt: { lt: cutoff(defaultRetentionDays) },
395
+ });
396
+ deleted += ids.length;
328
397
  }
329
398
 
330
- this.log.info("Old audit entries deleted", { count: old.length });
399
+ this.log.info("Expired audit entries deleted", {
400
+ count: deleted,
401
+ defaultRetentionDays,
402
+ });
331
403
 
332
- return old.length;
404
+ return deleted;
333
405
  }
334
406
  }
335
407
 
@@ -476,13 +476,13 @@ describe("FileController", () => {
476
476
  expect(results.content.every((f) => f.creator === user1Id)).toBe(true);
477
477
  });
478
478
 
479
- it("should filter by date range", { retry: 3 }, async () => {
479
+ it("should filter by date range", async () => {
480
480
  const { service, ctrl, dtp } = await setup();
481
481
 
482
- const startTime = dtp.nowISOString();
483
-
484
- // ensure time difference
485
- await new Promise((resolve) => setTimeout(resolve, 1));
482
+ // createdAfter is exclusive, so sampling "now" here races the first
483
+ // upload: at millisecond precision both can land on the same tick and
484
+ // the file gets filtered out. Take a bound strictly below all uploads.
485
+ const startTime = dtp.now().subtract(1, "second").toISOString();
486
486
 
487
487
  await service.uploadFile(createFile("content", { name: "file1.txt" }));
488
488
  await service.uploadFile(createFile("content", { name: "file2.txt" }));
@@ -54,6 +54,12 @@ describe("FileJobRegistry", () => {
54
54
  expect(await list()).toHaveLength(3);
55
55
 
56
56
  await dtp.travel(2, "hours");
57
+
58
+ // Time-travel fires the hourly cron, whose purge handler runs asynchronously
59
+ // (CronProvider dispatches handlers fire-and-forget) and holds the scheduler
60
+ // lock while in flight. Let that settle so the manual trigger below isn't
61
+ // (correctly) deduped by the still-running travel-fired run.
62
+ await new Promise((resolve) => setTimeout(resolve, 50));
57
63
  await jobs.purgeFiles.trigger();
58
64
 
59
65
  expect(await list()).toHaveLength(2);