alepha 0.22.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 (869) 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 +242 -230
  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 -1109
  58. package/dist/api/users/index.d.ts.map +1 -1
  59. package/dist/api/users/index.js +454 -369
  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 +169 -157
  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 +244 -475
  102. package/dist/cli/core/index.d.ts.map +1 -1
  103. package/dist/cli/core/index.js +308 -383
  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 +20 -39
  110. package/dist/cli/i18n/index.d.ts.map +1 -1
  111. package/dist/cli/i18n/index.js +51 -17
  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 +383 -410
  118. package/dist/cli/platform-lib/index.d.ts.map +1 -1
  119. package/dist/cli/platform-lib/index.js +300 -258
  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 +82 -194
  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 +36 -90
  183. package/dist/mcp/index.d.ts.map +1 -1
  184. package/dist/mcp/index.js +65 -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 -6
  219. package/dist/react/form/index.d.ts.map +1 -1
  220. package/dist/react/form/index.js +107 -71
  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 +47 -5
  227. package/dist/react/i18n/index.d.ts.map +1 -1
  228. package/dist/react/i18n/index.js +116 -12
  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 +188 -29
  234. package/dist/react/router/index.browser.js.map +1 -1
  235. package/dist/react/router/index.d.ts +480 -372
  236. package/dist/react/router/index.d.ts.map +1 -1
  237. package/dist/react/router/index.js +261 -47
  238. package/dist/react/router/index.js.map +1 -1
  239. package/dist/react/sitemap/index.browser.js +35 -0
  240. package/dist/react/sitemap/index.browser.js.map +1 -0
  241. package/dist/react/sitemap/index.d.ts +91 -0
  242. package/dist/react/sitemap/index.d.ts.map +1 -0
  243. package/dist/react/sitemap/index.js +131 -0
  244. package/dist/react/sitemap/index.js.map +1 -0
  245. package/dist/react/testing/index.d.ts +4 -5
  246. package/dist/react/testing/index.d.ts.map +1 -1
  247. package/dist/react/testing/index.js +41 -15
  248. package/dist/react/testing/index.js.map +1 -1
  249. package/dist/react/testing/{chunk-BpyX8vjI.js → rolldown-runtime-Bl3dcgcQ.js} +1 -1
  250. package/dist/react/ui/index.d.ts +35 -34
  251. package/dist/react/ui/index.d.ts.map +1 -1
  252. package/dist/react/ui/index.js +12 -17
  253. package/dist/react/ui/index.js.map +1 -1
  254. package/dist/redis/index.bun.js +5 -5
  255. package/dist/redis/index.bun.js.map +1 -1
  256. package/dist/redis/index.d.ts +6 -7
  257. package/dist/redis/index.d.ts.map +1 -1
  258. package/dist/redis/index.js +6 -6
  259. package/dist/redis/index.js.map +1 -1
  260. package/dist/retry/index.d.ts +0 -1
  261. package/dist/retry/index.d.ts.map +1 -1
  262. package/dist/retry/index.js.map +1 -1
  263. package/dist/router/index.d.ts.map +1 -1
  264. package/dist/router/index.js.map +1 -1
  265. package/dist/scheduler/index.d.ts +4 -12
  266. package/dist/scheduler/index.d.ts.map +1 -1
  267. package/dist/scheduler/index.js +9 -4
  268. package/dist/scheduler/index.js.map +1 -1
  269. package/dist/scheduler/index.workerd.js +9 -4
  270. package/dist/scheduler/index.workerd.js.map +1 -1
  271. package/dist/security/index.browser.js +30 -28
  272. package/dist/security/index.browser.js.map +1 -1
  273. package/dist/security/index.d.ts +113 -44
  274. package/dist/security/index.d.ts.map +1 -1
  275. package/dist/security/index.js +452 -37
  276. package/dist/security/index.js.map +1 -1
  277. package/dist/server/auth/index.browser.js +19 -19
  278. package/dist/server/auth/index.browser.js.map +1 -1
  279. package/dist/server/auth/index.d.ts +215 -187
  280. package/dist/server/auth/index.d.ts.map +1 -1
  281. package/dist/server/auth/index.js +1145 -86
  282. package/dist/server/auth/index.js.map +1 -1
  283. package/dist/server/cookies/index.browser.js +103 -5
  284. package/dist/server/cookies/index.browser.js.map +1 -1
  285. package/dist/server/cookies/index.d.ts +86 -4
  286. package/dist/server/cookies/index.d.ts.map +1 -1
  287. package/dist/server/cookies/index.js +121 -8
  288. package/dist/server/cookies/index.js.map +1 -1
  289. package/dist/server/core/index.browser.js +22 -27
  290. package/dist/server/core/index.browser.js.map +1 -1
  291. package/dist/server/core/index.d.ts +134 -85
  292. package/dist/server/core/index.d.ts.map +1 -1
  293. package/dist/server/core/index.js +130 -118
  294. package/dist/server/core/index.js.map +1 -1
  295. package/dist/server/cors/index.d.ts +9 -10
  296. package/dist/server/cors/index.d.ts.map +1 -1
  297. package/dist/server/cors/index.js +14 -26
  298. package/dist/server/cors/index.js.map +1 -1
  299. package/dist/server/etag/index.d.ts +2 -3
  300. package/dist/server/etag/index.d.ts.map +1 -1
  301. package/dist/server/etag/index.js.map +1 -1
  302. package/dist/server/health/index.d.ts +18 -19
  303. package/dist/server/health/index.d.ts.map +1 -1
  304. package/dist/server/health/index.js +6 -6
  305. package/dist/server/health/index.js.map +1 -1
  306. package/dist/server/links/index.browser.js +15 -18
  307. package/dist/server/links/index.browser.js.map +1 -1
  308. package/dist/server/links/index.d.ts +66 -67
  309. package/dist/server/links/index.d.ts.map +1 -1
  310. package/dist/server/links/index.js +29 -32
  311. package/dist/server/links/index.js.map +1 -1
  312. package/dist/server/metrics/index.d.ts +0 -1
  313. package/dist/server/metrics/index.d.ts.map +1 -1
  314. package/dist/server/metrics/index.js +10 -3
  315. package/dist/server/metrics/index.js.map +1 -1
  316. package/dist/server/proxy/index.d.ts +0 -1
  317. package/dist/server/proxy/index.d.ts.map +1 -1
  318. package/dist/server/proxy/index.js.map +1 -1
  319. package/dist/server/rate-limit/index.d.ts +8 -9
  320. package/dist/server/rate-limit/index.d.ts.map +1 -1
  321. package/dist/server/rate-limit/index.js +6 -12
  322. package/dist/server/rate-limit/index.js.map +1 -1
  323. package/dist/server/static/index.d.ts +0 -1
  324. package/dist/server/static/index.d.ts.map +1 -1
  325. package/dist/server/static/index.js.map +1 -1
  326. package/dist/server/swagger/index.d.ts +4 -4
  327. package/dist/server/swagger/index.d.ts.map +1 -1
  328. package/dist/server/swagger/index.js +37 -25
  329. package/dist/server/swagger/index.js.map +1 -1
  330. package/dist/sms/index.d.ts +0 -1
  331. package/dist/sms/index.d.ts.map +1 -1
  332. package/dist/sms/index.js.map +1 -1
  333. package/dist/system/index.browser.js.map +1 -1
  334. package/dist/system/index.d.ts +0 -1
  335. package/dist/system/index.d.ts.map +1 -1
  336. package/dist/system/index.js +2 -1
  337. package/dist/system/index.js.map +1 -1
  338. package/dist/system/index.workerd.js.map +1 -1
  339. package/dist/topic/core/index.d.ts +19 -20
  340. package/dist/topic/core/index.d.ts.map +1 -1
  341. package/dist/topic/core/index.js +8 -8
  342. package/dist/topic/core/index.js.map +1 -1
  343. package/dist/topic/redis/index.d.ts +3 -4
  344. package/dist/topic/redis/index.d.ts.map +1 -1
  345. package/dist/topic/redis/index.js +2 -2
  346. package/dist/topic/redis/index.js.map +1 -1
  347. package/package.json +36 -36
  348. package/src/api/audits/__tests__/AuditJobs.spec.ts +83 -0
  349. package/src/api/audits/__tests__/AuditService.spec.ts +139 -1
  350. package/src/api/audits/controllers/AdminAuditController.ts +41 -41
  351. package/src/api/audits/entities/audits.ts +22 -22
  352. package/src/api/audits/index.ts +6 -1
  353. package/src/api/audits/jobs/AuditJobs.ts +29 -0
  354. package/src/api/audits/parameters/AuditParameters.ts +51 -0
  355. package/src/api/audits/primitives/$audit.ts +24 -0
  356. package/src/api/audits/schemas/auditQuerySchema.ts +13 -13
  357. package/src/api/audits/schemas/createAuditSchema.ts +18 -18
  358. package/src/api/audits/services/AuditService.ts +79 -7
  359. package/src/api/files/__tests__/FileController.spec.ts +5 -5
  360. package/src/api/files/__tests__/FileJobs.spec.ts +6 -0
  361. package/src/api/files/controllers/FileController.ts +25 -25
  362. package/src/api/files/entities/files.ts +15 -15
  363. package/src/api/files/schemas/fileCreatorSummarySchema.ts +7 -7
  364. package/src/api/files/schemas/fileQuerySchema.ts +9 -9
  365. package/src/api/files/schemas/fileResourceSchema.ts +7 -9
  366. package/src/api/files/schemas/storageStatsSchema.ts +13 -13
  367. package/src/api/jobs/__tests__/$job-hardening.spec.ts +289 -0
  368. package/src/api/jobs/__tests__/$job.spec.ts +18 -18
  369. package/src/api/jobs/controllers/AdminJobController.ts +8 -8
  370. package/src/api/jobs/entities/jobExecutionEntity.ts +29 -19
  371. package/src/api/jobs/providers/JobProvider.ts +128 -12
  372. package/src/api/jobs/providers/JobQueueProvider.ts +2 -2
  373. package/src/api/jobs/schemas/jobConfigAtom.ts +22 -22
  374. package/src/api/jobs/schemas/jobExecutionQuerySchema.ts +6 -6
  375. package/src/api/jobs/schemas/jobExecutionResourceSchema.ts +11 -15
  376. package/src/api/jobs/schemas/jobRegistrationSchema.ts +20 -19
  377. package/src/api/jobs/schemas/triggerJobSchema.ts +3 -3
  378. package/src/api/jobs/services/JobService.ts +6 -6
  379. package/src/api/keys/__tests__/ApiKeyService.spec.ts +2 -2
  380. package/src/api/keys/controllers/AdminApiKeyController.ts +10 -10
  381. package/src/api/keys/entities/apiKeyEntity.ts +15 -15
  382. package/src/api/keys/schemas/adminApiKeyQuerySchema.ts +4 -4
  383. package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +15 -15
  384. package/src/api/keys/schemas/createApiKeyBodySchema.ts +5 -5
  385. package/src/api/keys/schemas/createApiKeyResponseSchema.ts +9 -9
  386. package/src/api/keys/schemas/listApiKeyResponseSchema.ts +13 -13
  387. package/src/api/keys/schemas/revokeApiKeyParamsSchema.ts +3 -3
  388. package/src/api/keys/schemas/revokeApiKeyResponseSchema.ts +3 -3
  389. package/src/api/notifications/__tests__/AlephaApiNotifications.spec.ts +2 -2
  390. package/src/api/notifications/controllers/AdminNotificationController.ts +38 -14
  391. package/src/api/notifications/jobs/NotificationJobs.ts +7 -6
  392. package/src/api/notifications/primitives/$notification.ts +43 -4
  393. package/src/api/notifications/schemas/notificationContactPreferencesSchema.ts +4 -4
  394. package/src/api/notifications/schemas/notificationContactSchema.ts +7 -7
  395. package/src/api/notifications/schemas/notificationDetailResourceSchema.ts +9 -11
  396. package/src/api/notifications/schemas/notificationPayloadSchema.ts +11 -9
  397. package/src/api/notifications/schemas/notificationQuerySchema.ts +6 -6
  398. package/src/api/notifications/schemas/notificationResourceSchema.ts +14 -14
  399. package/src/api/notifications/services/NotificationSenderService.ts +38 -2
  400. package/src/api/oauth/__tests__/OAuthClientService.spec.ts +42 -0
  401. package/src/api/oauth/__tests__/OAuthController.spec.ts +128 -0
  402. package/src/api/oauth/controllers/OAuthController.ts +132 -12
  403. package/src/api/oauth/entities/oauthClientEntity.ts +29 -12
  404. package/src/api/oauth/helpers/oauthMetadata.ts +1 -0
  405. package/src/api/oauth/helpers/oidcMetadata.ts +19 -0
  406. package/src/api/oauth/index.ts +1 -0
  407. package/src/api/oauth/schemas/authorizeDecisionBodySchema.ts +12 -11
  408. package/src/api/oauth/schemas/authorizeQuerySchema.ts +12 -10
  409. package/src/api/oauth/schemas/registerClientBodySchema.ts +10 -11
  410. package/src/api/oauth/schemas/tokenRequestBodySchema.ts +9 -8
  411. package/src/api/oauth/services/OAuthClientService.ts +228 -15
  412. package/src/api/organizations/controllers/AdminOrganizationController.ts +8 -8
  413. package/src/api/organizations/entities/organizations.ts +6 -6
  414. package/src/api/organizations/schemas/createOrganizationSchema.ts +5 -5
  415. package/src/api/organizations/schemas/organizationQuerySchema.ts +4 -4
  416. package/src/api/organizations/schemas/updateOrganizationSchema.ts +1 -2
  417. package/src/api/parameters/__tests__/$parameter.spec.ts +229 -50
  418. package/src/api/parameters/controllers/AdminParameterController.ts +9 -12
  419. package/src/api/parameters/entities/parameters.ts +29 -16
  420. package/src/api/parameters/primitives/$parameter.ts +3 -3
  421. package/src/api/parameters/schemas/activateParameterBodySchema.ts +4 -4
  422. package/src/api/parameters/schemas/createParameterVersionBodySchema.ts +15 -15
  423. package/src/api/parameters/schemas/parameterCreatorSummarySchema.ts +7 -7
  424. package/src/api/parameters/schemas/parameterCurrentResponseSchema.ts +7 -7
  425. package/src/api/parameters/schemas/parameterHistoryResponseSchema.ts +3 -3
  426. package/src/api/parameters/schemas/parameterNameParamSchema.ts +2 -3
  427. package/src/api/parameters/schemas/parameterNamesResponseSchema.ts +3 -3
  428. package/src/api/parameters/schemas/parameterResponseSchema.ts +3 -3
  429. package/src/api/parameters/schemas/parameterStatusSchema.ts +2 -2
  430. package/src/api/parameters/schemas/parameterTreeNodeSchema.ts +6 -6
  431. package/src/api/parameters/schemas/parameterVersionParamSchema.ts +5 -6
  432. package/src/api/parameters/schemas/parameterVersionResponseSchema.ts +3 -3
  433. package/src/api/parameters/schemas/rollbackParameterBodySchema.ts +6 -9
  434. package/src/api/parameters/services/ParameterProvider.ts +152 -65
  435. package/src/api/payments/controllers/AdminPaymentController.ts +7 -7
  436. package/src/api/payments/controllers/MockCheckoutController.ts +79 -28
  437. package/src/api/payments/controllers/PaymentController.ts +4 -4
  438. package/src/api/payments/entities/paymentIntents.ts +11 -11
  439. package/src/api/payments/entities/paymentMethods.ts +11 -11
  440. package/src/api/payments/entities/refunds.ts +9 -9
  441. package/src/api/payments/providers/PaymentProvider.ts +18 -0
  442. package/src/api/payments/schemas/intentSchemas.ts +25 -25
  443. package/src/api/payments/schemas/paymentMethodSchemas.ts +3 -3
  444. package/src/api/payments/services/PaymentService.ts +60 -3
  445. package/src/api/subscriptions/__tests__/SubscriptionService.spec.ts +14 -0
  446. package/src/api/subscriptions/controllers/AdminSubscriptionController.ts +11 -11
  447. package/src/api/subscriptions/controllers/SubscriptionController.ts +5 -4
  448. package/src/api/subscriptions/entities/subscriptionEvents.ts +15 -15
  449. package/src/api/subscriptions/entities/subscriptions.ts +22 -22
  450. package/src/api/subscriptions/notifications/SubscriptionNotifications.ts +22 -22
  451. package/src/api/subscriptions/schemas/cancelSubscriptionSchema.ts +4 -4
  452. package/src/api/subscriptions/schemas/changePlanSchema.ts +5 -5
  453. package/src/api/subscriptions/schemas/createSubscriptionSchema.ts +14 -7
  454. package/src/api/subscriptions/schemas/entitlementsSchema.ts +10 -10
  455. package/src/api/subscriptions/schemas/mrrSchema.ts +9 -9
  456. package/src/api/subscriptions/schemas/planDefinitionSchema.ts +21 -21
  457. package/src/api/subscriptions/schemas/planResourceSchema.ts +19 -19
  458. package/src/api/subscriptions/schemas/subscriptionQuerySchema.ts +8 -8
  459. package/src/api/subscriptions/schemas/subscriptionSettingsSchema.ts +7 -7
  460. package/src/api/subscriptions/schemas/subscriptionStatsSchema.ts +17 -17
  461. package/src/api/subscriptions/services/SubscriptionConfig.ts +2 -2
  462. package/src/api/users/__tests__/ApiKeys-integration.spec.ts +11 -11
  463. package/src/api/users/atoms/realmAuthSettingsAtom.ts +111 -119
  464. package/src/api/users/controllers/AdminIdentityController.ts +29 -19
  465. package/src/api/users/controllers/AdminSessionController.ts +37 -27
  466. package/src/api/users/controllers/AdminUserController.ts +75 -53
  467. package/src/api/users/controllers/MySessionController.ts +125 -0
  468. package/src/api/users/controllers/RealmController.ts +9 -9
  469. package/src/api/users/controllers/UserController.ts +55 -55
  470. package/src/api/users/entities/identities.ts +8 -8
  471. package/src/api/users/entities/sessions.ts +17 -17
  472. package/src/api/users/entities/users.ts +17 -17
  473. package/src/api/users/index.ts +3 -0
  474. package/src/api/users/notifications/UserNotifications.ts +76 -24
  475. package/src/api/users/primitives/$realm.ts +12 -0
  476. package/src/api/users/schemas/completePasswordResetRequestSchema.ts +8 -12
  477. package/src/api/users/schemas/completeRegistrationRequestSchema.ts +17 -20
  478. package/src/api/users/schemas/createUserSchema.ts +2 -2
  479. package/src/api/users/schemas/identityQuerySchema.ts +4 -4
  480. package/src/api/users/schemas/identityResourceSchema.ts +3 -2
  481. package/src/api/users/schemas/loginSchema.ts +4 -4
  482. package/src/api/users/schemas/passwordResetIntentResponseSchema.ts +6 -8
  483. package/src/api/users/schemas/realmConfigSchema.ts +10 -10
  484. package/src/api/users/schemas/registerQuerySchema.ts +6 -6
  485. package/src/api/users/schemas/registerRequestSchema.ts +21 -43
  486. package/src/api/users/schemas/registerResponseSchema.ts +2 -2
  487. package/src/api/users/schemas/registerSchema.ts +13 -31
  488. package/src/api/users/schemas/registrationIntentResponseSchema.ts +19 -23
  489. package/src/api/users/schemas/resetPasswordSchema.ts +10 -17
  490. package/src/api/users/schemas/sessionQuerySchema.ts +3 -3
  491. package/src/api/users/schemas/sessionResourceSchema.ts +25 -25
  492. package/src/api/users/schemas/updateUserSchema.ts +3 -4
  493. package/src/api/users/schemas/userQuerySchema.ts +7 -7
  494. package/src/api/users/services/RegistrationService.ts +25 -11
  495. package/src/api/users/services/UserService.ts +12 -6
  496. package/src/api/verifications/__tests__/CodeVerification.spec.ts +63 -101
  497. package/src/api/verifications/__tests__/LinkVerification.spec.ts +23 -92
  498. package/src/api/verifications/controllers/VerificationController.ts +13 -27
  499. package/src/api/verifications/entities/verifications.ts +13 -14
  500. package/src/api/verifications/schemas/requestVerificationCodeResponseSchema.ts +17 -14
  501. package/src/api/verifications/schemas/validateVerificationCodeResponseSchema.ts +9 -10
  502. package/src/api/verifications/schemas/verificationSettingsSchema.ts +65 -66
  503. package/src/api/verifications/schemas/verificationTypeEnumSchema.ts +2 -2
  504. package/src/api/verifications/services/VerificationService.ts +12 -0
  505. package/src/background/__tests__/BackgroundTaskProvider.spec.ts +36 -0
  506. package/src/batch/__tests__/$batch.spec.ts +22 -22
  507. package/src/batch/__tests__/startup-buffering.spec.ts +9 -9
  508. package/src/bin/index.ts +1 -1
  509. package/src/bucket/__tests__/TenantScopedBucket.spec.ts +60 -0
  510. package/src/bucket/providers/LocalFileStorageProvider.ts +14 -6
  511. package/src/bucket/providers/MemoryFileStorageProvider.ts +18 -7
  512. package/src/bucket/providers/R2FileStorageProvider.ts +14 -6
  513. package/src/bucket/providers/S3FileStorageProvider.ts +31 -15
  514. package/src/cache/core/primitives/$cache.ts +7 -10
  515. package/src/cache/database/entities/cacheEntries.ts +16 -27
  516. package/src/cache/database/providers/DatabaseCacheProvider.ts +15 -13
  517. package/src/cache/redis/providers/RedisCacheProvider.ts +6 -6
  518. package/src/captcha/providers/TurnstileCaptchaProvider.ts +4 -4
  519. package/src/cli/core/__tests__/BuildCloudflareTask.spec.ts +178 -0
  520. package/src/cli/core/__tests__/BuildDockerTask.spec.ts +0 -2
  521. package/src/cli/core/__tests__/DbCommand.spec.ts +108 -0
  522. package/src/cli/core/atoms/appEntryOptions.ts +5 -5
  523. package/src/cli/core/atoms/buildOptions.ts +76 -88
  524. package/src/cli/core/atoms/changelogOptions.ts +3 -3
  525. package/src/cli/core/atoms/devOptions.ts +3 -3
  526. package/src/cli/core/commands/build.ts +36 -49
  527. package/src/cli/core/commands/db.ts +171 -83
  528. package/src/cli/core/commands/dev.ts +8 -8
  529. package/src/cli/core/commands/gen/changelog.ts +12 -14
  530. package/src/cli/core/commands/gen/env.ts +6 -6
  531. package/src/cli/core/commands/gen/openapi.ts +6 -6
  532. package/src/cli/core/commands/init.ts +28 -33
  533. package/src/cli/core/commands/pack.ts +10 -10
  534. package/src/cli/core/commands/root.ts +7 -8
  535. package/src/cli/core/commands/test.ts +17 -20
  536. package/src/cli/core/index.ts +0 -3
  537. package/src/cli/core/tasks/BuildCloudflareTask.ts +138 -245
  538. package/src/cli/core/tasks/BuildPrerenderTask.ts +44 -7
  539. package/src/cli/core/templates/apiHelloResponseSchemaTs.ts +4 -4
  540. package/src/cli/devtools/atoms/devtoolsOptions.ts +6 -6
  541. package/src/cli/i18n/__tests__/I18nCheckService.spec.ts +48 -0
  542. package/src/cli/i18n/atoms/i18nOptions.ts +8 -8
  543. package/src/cli/i18n/services/I18nCheckService.ts +65 -11
  544. package/src/cli/platform/commands/SecretsCommand.ts +24 -25
  545. package/src/cli/platform/commands/platform.ts +40 -46
  546. package/src/cli/platform/index.ts +1 -1
  547. package/src/cli/platform-lib/__tests__/CloudflareAdapter.spec.ts +0 -4
  548. package/src/cli/platform-lib/__tests__/PlatformInspector.spec.ts +10 -3
  549. package/src/cli/platform-lib/__tests__/VercelAdapter.spec.ts +0 -2
  550. package/src/cli/platform-lib/adapters/CloudflareAdapter.ts +141 -50
  551. package/src/cli/platform-lib/adapters/VercelAdapter.ts +6 -11
  552. package/src/cli/platform-lib/atoms/platformOptions.ts +46 -25
  553. package/src/cli/platform-lib/schemas/cloudflare.ts +87 -87
  554. package/src/cli/platform-lib/schemas/platform.ts +51 -51
  555. package/src/cli/platform-lib/schemas/vercel.ts +28 -28
  556. package/src/cli/platform-lib/services/CloudflareApi.ts +5 -5
  557. package/src/cli/platform-lib/services/VercelApi.ts +4 -4
  558. package/src/cli/platform-lib/services/VercelCli.ts +6 -15
  559. package/src/cli/platform-lib/services/WranglerApi.ts +6 -15
  560. package/src/cli/vendor/atoms/vendorOptions.ts +9 -9
  561. package/src/cli/vendor/commands/VendorCommand.ts +11 -12
  562. package/src/command/__tests__/$command.spec.ts +82 -83
  563. package/src/command/__tests__/Asker.spec.ts +6 -13
  564. package/src/command/__tests__/CliProvider.spec.ts +136 -149
  565. package/src/command/__tests__/Runner.spec.ts +86 -110
  566. package/src/command/helpers/Asker.ts +23 -58
  567. package/src/command/helpers/Runner.ts +34 -110
  568. package/src/command/index.ts +4 -9
  569. package/src/command/primitives/$command.ts +10 -10
  570. package/src/command/providers/CliProvider.ts +183 -161
  571. package/src/core/Alepha.ts +62 -13
  572. package/src/core/__tests__/$atom.spec.ts +52 -3
  573. package/src/core/__tests__/$computed.spec.ts +129 -0
  574. package/src/core/__tests__/$env.spec.ts +13 -13
  575. package/src/core/__tests__/$inject.spec.ts +4 -4
  576. package/src/core/__tests__/$module.spec.ts +1 -1
  577. package/src/core/__tests__/Alepha-graph.spec.ts +1 -1
  578. package/src/core/__tests__/Alepha-parseEnv.spec.ts +32 -32
  579. package/src/core/__tests__/Alepha-start.spec.ts +3 -3
  580. package/src/core/__tests__/CodecManager.spec.ts +113 -94
  581. package/src/core/__tests__/KeylessJsonSchemaCodec.spec.ts +138 -138
  582. package/src/core/__tests__/SchemaValidator.spec.ts +43 -44
  583. package/src/core/__tests__/StateManager.persist.browser.spec.ts +87 -0
  584. package/src/core/__tests__/StateManager.spec.ts +423 -0
  585. package/src/core/__tests__/TypeBox-usecases.spec.ts +8 -8
  586. package/src/core/__tests__/TypeProvider.spec.ts +314 -309
  587. package/src/core/__tests__/dump.spec.ts +6 -6
  588. package/src/core/__tests__/pagination.spec.ts +4 -4
  589. package/src/core/__tests__/scoped-after-start.spec.ts +43 -0
  590. package/src/core/errors/TypeBoxError.ts +10 -4
  591. package/src/core/helpers/FileLike.ts +5 -5
  592. package/src/core/helpers/coerceStrings.ts +70 -0
  593. package/src/core/helpers/jsonSchemaToZod.ts +112 -0
  594. package/src/core/index.shared.ts +4 -1
  595. package/src/core/primitives/$atom.ts +95 -27
  596. package/src/core/primitives/$computed.ts +148 -0
  597. package/src/core/primitives/$env.ts +5 -5
  598. package/src/core/primitives/$state.ts +1 -1
  599. package/src/core/providers/AlsProvider.ts +26 -0
  600. package/src/core/providers/CodecManager.ts +1 -2
  601. package/src/core/providers/JsonSchemaCodec.ts +1 -2
  602. package/src/core/providers/KeylessJsonSchemaCodec.ts +82 -57
  603. package/src/core/providers/SchemaValidator.ts +48 -158
  604. package/src/core/providers/StateManager.ts +383 -9
  605. package/src/core/providers/TypeProvider.ts +80 -734
  606. package/src/core/providers/ZodProvider.ts +380 -0
  607. package/src/core/providers/zodAugment.ts +69 -0
  608. package/src/core/schemas/pageQuerySchema.ts +19 -21
  609. package/src/core/schemas/pageSchema.ts +47 -57
  610. package/src/crypto/__tests__/SecretProvider.spec.ts +31 -0
  611. package/src/crypto/providers/SecretProvider.ts +16 -10
  612. package/src/datetime/primitives/$throttle.ts +6 -1
  613. package/src/email/brevo/providers/BrevoEmailProvider.ts +4 -4
  614. package/src/email/cloudflare/providers/CloudflareEmailProvider.ts +6 -6
  615. package/src/email/core/index.ts +7 -2
  616. package/src/email/core/primitives/$email.ts +5 -1
  617. package/src/email/core/providers/LocalEmailProvider.ts +5 -5
  618. package/src/email/smtp/providers/NodemailerEmailProvider.ts +41 -52
  619. package/src/fake/__tests__/FakeProvider.spec.ts +110 -110
  620. package/src/fake/__tests__/keyName.example.ts +21 -21
  621. package/src/fake/__tests__/keyName.spec.ts +41 -41
  622. package/src/fake/__tests__/module.example.ts +8 -8
  623. package/src/fake/providers/FakeProvider.ts +122 -121
  624. package/src/lock/core/__tests__/lock-mutual-exclusion.spec.ts +44 -0
  625. package/src/lock/core/index.ts +1 -0
  626. package/src/lock/core/primitives/$lock.ts +13 -6
  627. package/src/logger/__tests__/CliFormatterProvider.spec.ts +76 -0
  628. package/src/logger/__tests__/Logger.spec.ts +49 -0
  629. package/src/logger/index.ts +25 -18
  630. package/src/logger/providers/CliFormatterProvider.ts +75 -0
  631. package/src/logger/schemas/logEntrySchema.ts +10 -10
  632. package/src/logger/services/Logger.ts +18 -0
  633. package/src/mcp/__tests__/$prompt.spec.ts +21 -23
  634. package/src/mcp/__tests__/$tool.spec.ts +22 -22
  635. package/src/mcp/__tests__/McpServerProvider.spec.ts +82 -11
  636. package/src/mcp/__tests__/StreamableHttpMcpTransport.spec.ts +2 -2
  637. package/src/mcp/__tests__/integration.spec.ts +33 -33
  638. package/src/mcp/primitives/$prompt.ts +11 -9
  639. package/src/mcp/primitives/$tool.ts +27 -86
  640. package/src/mcp/providers/McpServerProvider.ts +55 -0
  641. package/src/mcp/transports/StreamableHttpMcpTransport.ts +7 -7
  642. package/src/orm/__tests__/$repository-tests.ts +133 -27
  643. package/src/orm/__tests__/$repository.spec.ts +23 -0
  644. package/src/orm/__tests__/$transactional-tests.ts +4 -4
  645. package/src/orm/__tests__/ModelBuilder-tests.ts +28 -28
  646. package/src/orm/__tests__/ModelBuilder.spec.ts +124 -106
  647. package/src/orm/__tests__/QueryManager.spec.ts +5 -5
  648. package/src/orm/__tests__/delete-returning-tests.ts +11 -11
  649. package/src/orm/__tests__/deletedAt-tests.ts +3 -3
  650. package/src/orm/__tests__/enums.spec.ts +29 -25
  651. package/src/orm/__tests__/execute-tests.ts +8 -8
  652. package/src/orm/__tests__/fixtures/bigEntitySchema.ts +48 -48
  653. package/src/orm/__tests__/fixtures/userEntitySchema.ts +6 -6
  654. package/src/orm/__tests__/joins-tests.ts +30 -30
  655. package/src/orm/__tests__/organization-tests.ts +105 -3
  656. package/src/orm/__tests__/organization.spec.ts +46 -0
  657. package/src/orm/__tests__/orm-errors.spec.ts +10 -10
  658. package/src/orm/__tests__/orm-next-tests.ts +29 -29
  659. package/src/orm/__tests__/orm-showcase-tests.ts +9 -9
  660. package/src/orm/__tests__/primaryKey.spec.ts +4 -4
  661. package/src/orm/__tests__/query-date-encoding-tests.ts +17 -17
  662. package/src/orm/__tests__/ref-auto-onDelete.spec.ts +14 -14
  663. package/src/orm/__tests__/references.spec.ts +7 -7
  664. package/src/orm/__tests__/security.spec.ts +17 -17
  665. package/src/orm/__tests__/string-operators-tests.ts +5 -5
  666. package/src/orm/__tests__/timestamps-tests.ts +14 -14
  667. package/src/orm/__tests__/validation-tests.ts +5 -5
  668. package/src/orm/core/__tests__/BunSqliteProvider.bun.spec.ts +8 -8
  669. package/src/orm/core/constants/PG_SYMBOLS.ts +13 -1
  670. package/src/orm/core/entities/alephaSequences.ts +8 -8
  671. package/src/orm/core/helpers/pgAttr.ts +4 -4
  672. package/src/orm/core/primitives/$entity.ts +10 -6
  673. package/src/orm/core/providers/DatabaseTypeProvider.ts +46 -53
  674. package/src/orm/core/providers/drivers/BunSqliteProvider.ts +8 -8
  675. package/src/orm/core/providers/drivers/CloudflareD1Provider.ts +3 -5
  676. package/src/orm/core/providers/drivers/NodeSqliteProvider.ts +8 -8
  677. package/src/orm/core/schemas/databaseEnvSchema.ts +4 -4
  678. package/src/orm/core/schemas/insertSchema.ts +14 -18
  679. package/src/orm/core/schemas/legacyIdSchema.ts +2 -2
  680. package/src/orm/core/schemas/updateSchema.ts +10 -16
  681. package/src/orm/core/services/PgRelationManager.ts +2 -2
  682. package/src/orm/core/services/QueryManager.ts +13 -2
  683. package/src/orm/core/services/Repository.ts +88 -33
  684. package/src/orm/core/services/SqliteModelBuilder.ts +38 -45
  685. package/src/orm/postgres/__tests__/BunPostgresProvider.bun.spec.ts +4 -4
  686. package/src/orm/postgres/providers/CloudflareHyperdriveProvider.ts +4 -6
  687. package/src/orm/postgres/schemas/postgresEnvSchema.ts +6 -6
  688. package/src/orm/postgres/services/PostgresModelBuilder.ts +127 -114
  689. package/src/queue/core/__tests__/$consumer.spec.ts +4 -4
  690. package/src/queue/core/__tests__/WorkerProvider.spec.ts +4 -4
  691. package/src/queue/core/__tests__/shared.ts +6 -6
  692. package/src/queue/core/primitives/$consumer.ts +5 -5
  693. package/src/queue/core/primitives/$queue.ts +44 -61
  694. package/src/queue/core/providers/CloudflareQueueProvider.ts +6 -0
  695. package/src/queue/core/providers/WorkerProvider.ts +17 -14
  696. package/src/queue/redis/providers/RedisQueueProvider.ts +3 -3
  697. package/src/react/core/__tests__/ErrorBoundary.browser.spec.tsx +92 -0
  698. package/src/react/core/__tests__/Router.spec.tsx +4 -4
  699. package/src/react/core/__tests__/useComputed.browser.spec.tsx +192 -0
  700. package/src/react/core/__tests__/useQuery.browser.spec.tsx +48 -0
  701. package/src/react/core/__tests__/useSelector.browser.spec.tsx +105 -0
  702. package/src/react/core/__tests__/useStore.browser.spec.tsx +113 -0
  703. package/src/react/core/components/ErrorBoundary.tsx +42 -0
  704. package/src/react/core/hooks/useAction.ts +56 -19
  705. package/src/react/core/hooks/useComputed.ts +91 -0
  706. package/src/react/core/hooks/useSelector.ts +67 -0
  707. package/src/react/core/hooks/useStore.ts +36 -17
  708. package/src/react/core/index.ts +3 -0
  709. package/src/react/core/utils/shallowEqual.ts +36 -0
  710. package/src/react/form/__tests__/FormModel-submit-loading.spec.ts +71 -0
  711. package/src/react/form/__tests__/form-submitting-reactive.browser.spec.tsx +96 -0
  712. package/src/react/form/__tests__/useForm.browser.spec.tsx +54 -54
  713. package/src/react/form/errors/FormValidationError.ts +0 -2
  714. package/src/react/form/hooks/useForm.ts +19 -4
  715. package/src/react/form/hooks/useFormQuerySync.ts +0 -0
  716. package/src/react/form/services/FormModel.ts +124 -86
  717. package/src/react/form/services/parseField.ts +66 -27
  718. package/src/react/i18n/__tests__/I18nProvider.spec.ts +89 -0
  719. package/src/react/i18n/__tests__/Localize.spec.tsx +1 -1
  720. package/src/react/i18n/__tests__/locale-routing.spec.ts +107 -0
  721. package/src/react/i18n/providers/I18nProvider.ts +173 -14
  722. package/src/react/router/__tests__/$page.browser.spec.tsx +19 -19
  723. package/src/react/router/__tests__/$page.spec.tsx +21 -21
  724. package/src/react/router/__tests__/ReactBrowserProvider.browser.spec.ts +87 -1
  725. package/src/react/router/__tests__/RouterLocaleProvider.spec.ts +127 -0
  726. package/src/react/router/atoms/ssrManifestAtom.ts +16 -16
  727. package/src/react/router/components/NestedView.tsx +11 -3
  728. package/src/react/router/hooks/useQueryParams.ts +1 -1
  729. package/src/react/router/index.browser.ts +4 -0
  730. package/src/react/router/index.shared.ts +1 -0
  731. package/src/react/router/index.ts +9 -0
  732. package/src/react/router/primitives/$page.ts +2 -2
  733. package/src/react/router/providers/ReactBrowserProvider.ts +64 -13
  734. package/src/react/router/providers/ReactBrowserRouterProvider.ts +15 -1
  735. package/src/react/router/providers/ReactPageProvider.ts +38 -13
  736. package/src/react/router/providers/ReactServerProvider.ts +105 -16
  737. package/src/react/router/providers/RootComponentsProvider.ts +13 -0
  738. package/src/react/router/providers/RouterLocaleProvider.ts +125 -0
  739. package/src/react/router/providers/__tests__/RootComponentsProvider.spec.ts +15 -0
  740. package/src/react/router/providers/__tests__/rootComponents.ssr.browser.spec.tsx +67 -0
  741. package/src/react/sitemap/__tests__/$sitemap.spec.ts +131 -0
  742. package/src/react/sitemap/index.browser.ts +21 -0
  743. package/src/react/sitemap/index.ts +25 -0
  744. package/src/react/sitemap/primitives/$sitemap.browser.ts +26 -0
  745. package/src/react/sitemap/primitives/$sitemap.ts +196 -0
  746. package/src/react/ui/atoms/uiAtom.ts +6 -6
  747. package/src/react/ui/atoms/uiThemeListAtom.ts +7 -7
  748. package/src/react/ui/hooks/useColorMode.ts +11 -4
  749. package/src/react/ui/services/SchemaControl.ts +4 -4
  750. package/src/redis/providers/BunRedisProvider.ts +19 -11
  751. package/src/redis/providers/NodeRedisProvider.ts +3 -3
  752. package/src/scheduler/primitives/$scheduler.ts +21 -8
  753. package/src/security/__tests__/assertRealmScope.spec.ts +29 -0
  754. package/src/security/atoms/currentTenantAtom.ts +6 -6
  755. package/src/security/atoms/currentUserAtom.ts +2 -2
  756. package/src/security/primitives/$issuer.ts +24 -2
  757. package/src/security/providers/JwtProvider.ts +100 -0
  758. package/src/security/providers/SecurityProvider.ts +43 -2
  759. package/src/security/schemas/permissionSchema.ts +19 -19
  760. package/src/security/schemas/roleSchema.ts +22 -28
  761. package/src/security/schemas/userAccountInfoSchema.ts +47 -37
  762. package/src/server/auth/__tests__/appleClientSecret.spec.ts +34 -0
  763. package/src/server/auth/__tests__/federationRedirectReplay.spec.ts +44 -0
  764. package/src/server/auth/helpers/appleClientSecret.ts +24 -0
  765. package/src/server/auth/helpers/jtiReplayGuard.ts +41 -0
  766. package/src/server/auth/helpers/safeRedirectPath.ts +19 -0
  767. package/src/server/auth/index.ts +1 -0
  768. package/src/server/auth/primitives/$auth.ts +6 -6
  769. package/src/server/auth/primitives/$authApple.ts +10 -10
  770. package/src/server/auth/primitives/$authFacebook.ts +10 -10
  771. package/src/server/auth/primitives/$authFranceConnect.ts +10 -10
  772. package/src/server/auth/primitives/$authGithub.ts +10 -10
  773. package/src/server/auth/primitives/$authGoogle.ts +10 -10
  774. package/src/server/auth/primitives/$authMicrosoft.ts +14 -14
  775. package/src/server/auth/providers/ServerAuthProvider.ts +67 -52
  776. package/src/server/auth/schemas/authenticationProviderSchema.ts +9 -12
  777. package/src/server/auth/schemas/tokenResponseSchema.ts +2 -2
  778. package/src/server/auth/schemas/tokensSchema.ts +16 -16
  779. package/src/server/auth/schemas/userinfoResponseSchema.ts +3 -3
  780. package/src/server/cookies/__tests__/AtomCookieBinding.spec.ts +80 -0
  781. package/src/server/cookies/__tests__/AtomCookiePersistence.browser.spec.ts +169 -0
  782. package/src/server/cookies/__tests__/AtomCookiePersistence.spec.ts +294 -0
  783. package/src/server/cookies/__tests__/ServerCookiesProvider.spec.ts +82 -12
  784. package/src/server/cookies/index.browser.ts +4 -1
  785. package/src/server/cookies/index.ts +8 -1
  786. package/src/server/cookies/primitives/$cookie.browser.ts +1 -1
  787. package/src/server/cookies/primitives/$cookie.ts +16 -0
  788. package/src/server/cookies/providers/AtomCookiePersistence.browser.ts +133 -0
  789. package/src/server/cookies/providers/AtomCookiePersistence.ts +148 -0
  790. package/src/server/cookies/providers/ServerCookiesProvider.ts +32 -4
  791. package/src/server/cookies/services/CookieParser.ts +6 -1
  792. package/src/server/core/__tests__/$action.spec.ts +13 -13
  793. package/src/server/core/__tests__/$middleware.spec.ts +10 -10
  794. package/src/server/core/__tests__/$route.spec.ts +9 -9
  795. package/src/server/core/__tests__/$sse.spec.ts +26 -26
  796. package/src/server/core/__tests__/BunHttpServerProvider.bun.spec.ts +6 -6
  797. package/src/server/core/__tests__/HttpClient.spec.ts +2 -2
  798. package/src/server/core/__tests__/NodeHttpServerProvider.spec.ts +15 -3
  799. package/src/server/core/__tests__/ServerBodyParserProvider.spec.ts +14 -14
  800. package/src/server/core/__tests__/ServerMultipartProvider.spec.ts +33 -33
  801. package/src/server/core/__tests__/ServerRouterProvider-errorHandler.spec.ts +5 -1
  802. package/src/server/core/__tests__/ServerRouterProvider-getRoutes.spec.ts +25 -25
  803. package/src/server/core/__tests__/ServerRouterProvider-serializationError.spec.ts +9 -5
  804. package/src/server/core/__tests__/ServerRouterProvider-validationError.spec.ts +56 -24
  805. package/src/server/core/errors/ValidationError.ts +6 -3
  806. package/src/server/core/helpers/isMultipart.ts +2 -1
  807. package/src/server/core/index.ts +5 -2
  808. package/src/server/core/interfaces/ServerRequest.ts +14 -14
  809. package/src/server/core/primitives/$action.ts +26 -36
  810. package/src/server/core/primitives/$route.ts +27 -0
  811. package/src/server/core/primitives/$sse.ts +3 -3
  812. package/src/server/core/providers/BunHttpServerProvider.ts +8 -9
  813. package/src/server/core/providers/NodeHttpServerProvider.ts +8 -9
  814. package/src/server/core/providers/ServerBodyParserProvider.ts +20 -12
  815. package/src/server/core/providers/ServerCompressProvider.ts +9 -10
  816. package/src/server/core/providers/ServerHelmetProvider.ts +26 -27
  817. package/src/server/core/providers/ServerMultipartProvider.ts +19 -19
  818. package/src/server/core/providers/ServerRouterProvider.ts +44 -15
  819. package/src/server/core/schemas/errorSchema.ts +20 -25
  820. package/src/server/core/schemas/okSchema.ts +9 -14
  821. package/src/server/core/services/HttpClient.ts +13 -1
  822. package/src/server/core/services/ServerRequestParser.ts +6 -6
  823. package/src/server/cors/providers/ServerCorsProvider.ts +26 -28
  824. package/src/server/health/schemas/healthSchema.ts +6 -6
  825. package/src/server/links/__tests__/$remote.spec.ts +3 -3
  826. package/src/server/links/__tests__/BatchEndpoint.spec.ts +9 -9
  827. package/src/server/links/__tests__/LinkProvider.spec.ts +9 -9
  828. package/src/server/links/__tests__/ServerLinksProvider.spec.ts +23 -23
  829. package/src/server/links/__tests__/fixtures/CrudApp.ts +21 -21
  830. package/src/server/links/atoms/apiLinksAtom.ts +2 -2
  831. package/src/server/links/atoms/linkOptionsAtom.ts +6 -6
  832. package/src/server/links/primitives/$remote.ts +3 -3
  833. package/src/server/links/providers/LinkProvider.ts +3 -3
  834. package/src/server/links/providers/ServerLinksProvider.ts +20 -20
  835. package/src/server/links/schemas/apiLinksResponseSchema.ts +23 -23
  836. package/src/server/proxy/__tests__/$proxy.spec.ts +9 -9
  837. package/src/server/proxy/providers/ServerProxyProvider.ts +5 -0
  838. package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +18 -20
  839. package/src/server/swagger/__tests__/$swagger.spec.ts +91 -94
  840. package/src/server/swagger/__tests__/ui.spec.ts +3 -3
  841. package/src/server/swagger/providers/ServerSwaggerProvider.ts +66 -43
  842. package/src/system/__tests__/NodeShellProvider.spec.ts +46 -0
  843. package/src/system/providers/NodeShellProvider.ts +4 -1
  844. package/src/topic/core/__tests__/$subscriber.spec.ts +4 -4
  845. package/src/topic/core/__tests__/shared.ts +8 -8
  846. package/src/topic/core/primitives/$subscriber.ts +5 -5
  847. package/src/topic/core/primitives/$topic.ts +14 -14
  848. package/src/topic/redis/providers/RedisTopicProvider.ts +3 -3
  849. package/dist/container/core/index.d.ts +0 -236
  850. package/dist/container/core/index.d.ts.map +0 -1
  851. package/dist/container/core/index.js +0 -231
  852. package/dist/container/core/index.js.map +0 -1
  853. package/dist/container/core/index.workerd.js +0 -192
  854. package/dist/container/core/index.workerd.js.map +0 -1
  855. package/src/cli/core/tasks/BuildSitemapTask.ts +0 -130
  856. package/src/command/helpers/PrettyAsker.ts +0 -256
  857. package/src/command/helpers/PrettyPrint.ts +0 -332
  858. package/src/container/core/__tests__/$container.spec.ts +0 -83
  859. package/src/container/core/index.ts +0 -50
  860. package/src/container/core/index.workerd.ts +0 -53
  861. package/src/container/core/interfaces/ContainerOptions.ts +0 -69
  862. package/src/container/core/primitives/$container.ts +0 -100
  863. package/src/container/core/providers/CloudflareContainerProvider.ts +0 -70
  864. package/src/container/core/providers/ContainerProvider.ts +0 -92
  865. package/src/container/core/providers/MockContainerProvider.ts +0 -62
  866. package/src/container/core/providers/NodeContainerProvider.ts +0 -53
  867. package/src/core/__tests__/jsonSchemaToTypeBox.spec.ts +0 -771
  868. package/src/core/helpers/jsonSchemaToTypeBox.ts +0 -359
  869. /package/dist/orm/core/{chunk-B4FMCO8f.js → rolldown-runtime-B4FMCO8f.js} +0 -0
@@ -1,4 +1,4 @@
1
- import { Alepha, AlephaError, t } from "alepha";
1
+ import { Alepha, AlephaError, z } from "alepha";
2
2
  import { LockProvider, MemoryLockProvider } from "alepha/lock";
3
3
  import { $repository } from "alepha/orm";
4
4
  import { AlephaOrmPostgres } from "alepha/orm/postgres";
@@ -50,7 +50,7 @@ describe("$job — registration validation", () => {
50
50
  class App {
51
51
  bad = $job({
52
52
  cron: "* * * * *",
53
- schema: t.object({ id: t.text() }),
53
+ schema: z.object({ id: z.text() }),
54
54
  handler: async () => {},
55
55
  });
56
56
  }
@@ -172,7 +172,7 @@ describe("$job — queue mode (outbox)", () => {
172
172
  class App {
173
173
  executions = $repository(jobExecutionEntity);
174
174
  work = $job({
175
- schema: t.object({ n: t.integer() }),
175
+ schema: z.object({ n: z.integer() }),
176
176
  handler: async ({ payload }) => {
177
177
  received = payload;
178
178
  },
@@ -196,7 +196,7 @@ describe("$job — queue mode (outbox)", () => {
196
196
  class App {
197
197
  executions = $repository(jobExecutionEntity);
198
198
  work = $job({
199
- schema: t.object({ n: t.integer() }),
199
+ schema: z.object({ n: z.integer() }),
200
200
  record: "all",
201
201
  handler: async () => {},
202
202
  });
@@ -219,7 +219,7 @@ describe("$job — queue mode (outbox)", () => {
219
219
  const alepha = makeApp();
220
220
  class App {
221
221
  work = $job({
222
- schema: t.object({ v: t.integer() }),
222
+ schema: z.object({ v: z.integer() }),
223
223
  handler: async () => {},
224
224
  });
225
225
  }
@@ -246,7 +246,7 @@ describe("$job — queue mode (outbox)", () => {
246
246
  class App {
247
247
  executions = $repository(jobExecutionEntity);
248
248
  work = $job({
249
- schema: t.object({ v: t.integer() }),
249
+ schema: z.object({ v: z.integer() }),
250
250
  handler: async () => {
251
251
  calls++;
252
252
  },
@@ -271,7 +271,7 @@ describe("$job — queue mode (outbox)", () => {
271
271
  const seen: number[] = [];
272
272
  class App {
273
273
  work = $job({
274
- schema: t.object({ n: t.integer() }),
274
+ schema: z.object({ n: z.integer() }),
275
275
  handler: async ({ payload }) => {
276
276
  seen.push(payload.n);
277
277
  },
@@ -301,7 +301,7 @@ describe("$job — queue mode (outbox)", () => {
301
301
  class App {
302
302
  executions = $repository(jobExecutionEntity);
303
303
  work = $job({
304
- schema: t.object({ v: t.integer() }),
304
+ schema: z.object({ v: z.integer() }),
305
305
  retry: { retries: 2 },
306
306
  handler: async () => {
307
307
  attempts++;
@@ -336,7 +336,7 @@ describe("$job — queue mode (outbox)", () => {
336
336
  class App {
337
337
  executions = $repository(jobExecutionEntity);
338
338
  work = $job({
339
- schema: t.object({ v: t.integer() }),
339
+ schema: z.object({ v: z.integer() }),
340
340
  // no retry config → 1 attempt
341
341
  handler: async () => {
342
342
  throw new Error("dead");
@@ -365,7 +365,7 @@ describe("$job — cancel", () => {
365
365
  class App {
366
366
  executions = $repository(jobExecutionEntity);
367
367
  work = $job({
368
- schema: t.object({ v: t.integer() }),
368
+ schema: z.object({ v: z.integer() }),
369
369
  handler: async () => {},
370
370
  });
371
371
  }
@@ -393,7 +393,7 @@ describe("$job — admin service", () => {
393
393
  handler: async () => {},
394
394
  });
395
395
  queueB = $job({
396
- schema: t.object({ v: t.integer() }),
396
+ schema: z.object({ v: z.integer() }),
397
397
  handler: async () => {},
398
398
  });
399
399
  }
@@ -417,7 +417,7 @@ describe("$job — admin service", () => {
417
417
  const alepha = makeAppDirect();
418
418
  class App {
419
419
  worker = $job({
420
- schema: t.object({ v: t.integer() }),
420
+ schema: z.object({ v: z.integer() }),
421
421
  handler: async () => {},
422
422
  });
423
423
  }
@@ -443,7 +443,7 @@ describe("$job — direct mode (no AlephaApiJobsQueue)", () => {
443
443
  class App {
444
444
  executions = $repository(jobExecutionEntity);
445
445
  work = $job({
446
- schema: t.object({ n: t.integer() }),
446
+ schema: z.object({ n: z.integer() }),
447
447
  handler: async ({ payload }) => {
448
448
  received = payload;
449
449
  },
@@ -477,7 +477,7 @@ describe("$job — direct mode (no AlephaApiJobsQueue)", () => {
477
477
  class App {
478
478
  executions = $repository(jobExecutionEntity);
479
479
  work = $job({
480
- schema: t.object({ n: t.integer() }),
480
+ schema: z.object({ n: z.integer() }),
481
481
  retry: { retries: 2 },
482
482
  handler: async () => {
483
483
  throw new Error("nope");
@@ -616,7 +616,7 @@ describe("$job — retry semantics", () => {
616
616
  class App {
617
617
  executions = $repository(jobExecutionEntity);
618
618
  work = $job({
619
- schema: t.object({ v: t.integer() }),
619
+ schema: z.object({ v: z.integer() }),
620
620
  retry: { retries: 2 },
621
621
  handler: async () => {
622
622
  attempts++;
@@ -675,7 +675,7 @@ describe("$job — cancel race", () => {
675
675
  class App {
676
676
  executions = $repository(jobExecutionEntity);
677
677
  slow = $job({
678
- schema: t.object({ v: t.integer() }),
678
+ schema: z.object({ v: z.integer() }),
679
679
  retry: { retries: 0 },
680
680
  handler: async ({ signal }) => {
681
681
  // Wait for cancellation, then throw — without the guard this throw
@@ -784,7 +784,7 @@ describe("$job — dispatchMany (queue mode)", () => {
784
784
  const alepha = makeApp();
785
785
  class App {
786
786
  bulk = $job({
787
- schema: t.object({ n: t.integer() }),
787
+ schema: z.object({ n: z.integer() }),
788
788
  handler: async () => {},
789
789
  });
790
790
  }
@@ -828,7 +828,7 @@ describe("$job — admin resource shape", () => {
828
828
  const alepha = makeApp();
829
829
  class App {
830
830
  work = $job({
831
- schema: t.object({ v: t.integer() }),
831
+ schema: z.object({ v: z.integer() }),
832
832
  priority: "high",
833
833
  record: "all",
834
834
  handler: async () => {},
@@ -1,4 +1,4 @@
1
- import { $inject, t } from "alepha";
1
+ import { $inject, z } from "alepha";
2
2
  import { $secure } from "alepha/security";
3
3
  import { $action, okSchema } from "alepha/server";
4
4
  import { jobExecutionQuerySchema } from "../schemas/jobExecutionQuerySchema.ts";
@@ -20,7 +20,7 @@ export class AdminJobController {
20
20
  group: this.group,
21
21
  use: [$secure({ permissions: ["admin:job:read"] })],
22
22
  schema: {
23
- response: t.array(jobRegistrationSchema),
23
+ response: z.array(jobRegistrationSchema),
24
24
  },
25
25
  handler: () => this.jobService.listJobs(),
26
26
  });
@@ -30,9 +30,9 @@ export class AdminJobController {
30
30
  group: this.group,
31
31
  use: [$secure({ permissions: ["admin:job:read"] })],
32
32
  schema: {
33
- params: t.object({ name: t.text() }),
33
+ params: z.object({ name: z.text() }),
34
34
  query: jobExecutionQuerySchema,
35
- response: t.array(jobExecutionResourceSchema),
35
+ response: z.array(jobExecutionResourceSchema),
36
36
  },
37
37
  handler: ({ params, query }) =>
38
38
  this.jobService.getExecutions(params.name, query),
@@ -43,7 +43,7 @@ export class AdminJobController {
43
43
  group: this.group,
44
44
  use: [$secure({ permissions: ["admin:job:read"] })],
45
45
  schema: {
46
- params: t.object({ id: t.uuid() }),
46
+ params: z.object({ id: z.uuid() }),
47
47
  response: jobExecutionResourceSchema,
48
48
  },
49
49
  handler: ({ params }) => this.jobService.getExecution(params.id),
@@ -55,7 +55,7 @@ export class AdminJobController {
55
55
  group: this.group,
56
56
  use: [$secure({ permissions: ["admin:job:trigger"] })],
57
57
  schema: {
58
- params: t.object({ name: t.text() }),
58
+ params: z.object({ name: z.text() }),
59
59
  body: triggerJobSchema,
60
60
  response: okSchema,
61
61
  },
@@ -73,7 +73,7 @@ export class AdminJobController {
73
73
  group: this.group,
74
74
  use: [$secure({ permissions: ["admin:job:trigger"] })],
75
75
  schema: {
76
- params: t.object({ id: t.uuid() }),
76
+ params: z.object({ id: z.uuid() }),
77
77
  response: okSchema,
78
78
  },
79
79
  handler: ({ params, user }) =>
@@ -89,7 +89,7 @@ export class AdminJobController {
89
89
  group: this.group,
90
90
  use: [$secure({ permissions: ["admin:job:cancel"] })],
91
91
  schema: {
92
- params: t.object({ id: t.uuid() }),
92
+ params: z.object({ id: z.uuid() }),
93
93
  response: okSchema,
94
94
  },
95
95
  handler: ({ params, user }) =>
@@ -1,4 +1,4 @@
1
- import { type Static, t } from "alepha";
1
+ import { type Static, z } from "alepha";
2
2
  import { logEntrySchema } from "alepha/logger";
3
3
  import { $entity, db } from "alepha/orm";
4
4
 
@@ -21,36 +21,46 @@ import { $entity, db } from "alepha/orm";
21
21
  */
22
22
  export const jobExecutionEntity = $entity({
23
23
  name: "job_executions",
24
- schema: t.object({
25
- id: db.primaryKey(t.uuid()),
24
+ schema: z.object({
25
+ id: db.primaryKey(z.uuid()),
26
26
  createdAt: db.createdAt(),
27
27
  updatedAt: db.updatedAt(),
28
28
 
29
- jobName: t.text(),
30
- key: t.optional(t.nullable(t.text())),
29
+ jobName: z.text(),
30
+ key: z.text().nullable().optional(),
31
+
32
+ /**
33
+ * Owning tenant for this execution, when it was pushed in (or for) a tenant
34
+ * context. Used to org-scope tenant-facing views — notably the notification
35
+ * admin list, which is backed by this outbox. Nullable: cron / global / non-
36
+ * tenant pushes carry none. Deliberately NOT `db.organization()`: the job
37
+ * worker + sweep must see every org's rows, so this stays a plain,
38
+ * non-auto-scoping column rather than an auto-filtered one.
39
+ */
40
+ organizationId: z.uuid().nullable().optional(),
31
41
 
32
42
  status: db.default(
33
- t.enum(["pending", "running", "scheduled", "ok", "error", "cancelled"]),
43
+ z.enum(["pending", "running", "scheduled", "ok", "error", "cancelled"]),
34
44
  "pending",
35
45
  ),
36
- priority: db.default(t.integer({ minimum: 0, maximum: 3 }), 2),
46
+ priority: db.default(z.integer().min(0).max(3), 2),
37
47
 
38
- attempt: db.default(t.integer(), 0),
39
- maxAttempts: db.default(t.integer(), 1),
48
+ attempt: db.default(z.integer(), 0),
49
+ maxAttempts: db.default(z.integer(), 1),
40
50
 
41
- payload: t.optional(t.record(t.text(), t.any())),
51
+ payload: z.record(z.text(), z.any()).optional(),
42
52
 
43
- scheduledAt: t.optional(t.datetime()),
44
- startedAt: t.optional(t.datetime()),
45
- completedAt: t.optional(t.datetime()),
53
+ scheduledAt: z.datetime().optional(),
54
+ startedAt: z.datetime().optional(),
55
+ completedAt: z.datetime().optional(),
46
56
 
47
- error: t.optional(t.text()),
48
- logs: t.optional(t.array(logEntrySchema)),
57
+ error: z.text().optional(),
58
+ logs: z.array(logEntrySchema).optional(),
49
59
 
50
- triggeredBy: t.optional(t.text()),
51
- triggeredByName: t.optional(t.text()),
52
- cancelledBy: t.optional(t.text()),
53
- cancelledByName: t.optional(t.text()),
60
+ triggeredBy: z.text().optional(),
61
+ triggeredByName: z.text().optional(),
62
+ cancelledBy: z.text().optional(),
63
+ cancelledByName: z.text().optional(),
54
64
  }),
55
65
  indexes: [
56
66
  { columns: ["jobName", "status", "scheduledAt"] },
@@ -12,7 +12,11 @@ import { DateTimeProvider, type DurationLike } from "alepha/datetime";
12
12
  import { LockProvider } from "alepha/lock";
13
13
  import type { LogEntry } from "alepha/logger";
14
14
  import { $logger } from "alepha/logger";
15
- import { $repository, DbEntityNotFoundError } from "alepha/orm";
15
+ import {
16
+ $repository,
17
+ DbConflictError,
18
+ DbEntityNotFoundError,
19
+ } from "alepha/orm";
16
20
  import { CronProvider } from "alepha/scheduler";
17
21
  import {
18
22
  type JobStatus,
@@ -49,6 +53,13 @@ export interface PushOptions {
49
53
  scheduledAt?: Date;
50
54
  triggeredBy?: string;
51
55
  triggeredByName?: string;
56
+ /**
57
+ * Owning tenant for this execution. Persisted on the row so tenant-facing
58
+ * views (e.g. the notification admin list) can org-scope it. Plumbed through
59
+ * verbatim — callers in a tenant context pass it explicitly (the resolved
60
+ * tenant), cron/global pushes leave it undefined.
61
+ */
62
+ organizationId?: string;
52
63
  }
53
64
 
54
65
  export interface PushManyItem<T extends TSchema = TSchema> {
@@ -615,7 +626,7 @@ export class JobProvider {
615
626
  if (existing.length > 0) {
616
627
  return existing[0].id;
617
628
  }
618
- const execution = await this.executions.create({
629
+ const { id: executionId, created } = await this.createKeyedExecution({
619
630
  jobName: name,
620
631
  key: options.key,
621
632
  payload: validated as Record<string, unknown>,
@@ -625,13 +636,18 @@ export class JobProvider {
625
636
  scheduledAt,
626
637
  triggeredBy: options.triggeredBy,
627
638
  triggeredByName: options.triggeredByName,
639
+ organizationId: options.organizationId,
628
640
  });
641
+ if (!created) {
642
+ // Lost the race to a concurrent same-key push — the winner dispatches.
643
+ return executionId;
644
+ }
629
645
  if (status === "pending") {
630
- await this.dispatch(name, execution.id);
646
+ await this.dispatch(name, executionId);
631
647
  } else if (status === "scheduled" && scheduledAt) {
632
- this.scheduleOptimisticDispatch(name, execution.id, scheduledAt);
648
+ this.scheduleOptimisticDispatch(name, executionId, scheduledAt);
633
649
  }
634
- return execution.id;
650
+ return executionId;
635
651
  }
636
652
 
637
653
  const execution = await this.executions.create({
@@ -643,6 +659,7 @@ export class JobProvider {
643
659
  scheduledAt,
644
660
  triggeredBy: options?.triggeredBy,
645
661
  triggeredByName: options?.triggeredByName,
662
+ organizationId: options?.organizationId,
646
663
  });
647
664
 
648
665
  if (status === "pending") {
@@ -653,11 +670,94 @@ export class JobProvider {
653
670
  return execution.id;
654
671
  }
655
672
 
673
+ /**
674
+ * How long a `running` row may go without a lease renewal before the
675
+ * sweep assumes the instance running it crashed. Shared by the sweep's
676
+ * crash detection and the heartbeat cadence so the two can't drift.
677
+ */
678
+ protected crashThresholdMs(registration: JobRuntimeRegistration): number {
679
+ return registration.options.timeout
680
+ ? this.dt.duration(registration.options.timeout).as("milliseconds") * 2
681
+ : this.config.runTimeout;
682
+ }
683
+
684
+ /**
685
+ * While a handler runs, keep the row's `updatedAt` fresh so another
686
+ * instance's sweep can tell a long-running job from a crashed one — the
687
+ * sweep treats `max(startedAt, updatedAt)` as the lease. Self-stops when
688
+ * the row leaves `running` (finished, cancelled, swept elsewhere).
689
+ */
690
+ protected startLeaseHeartbeat(
691
+ executionId: string,
692
+ registration: JobRuntimeRegistration,
693
+ ): ReturnType<typeof setInterval> {
694
+ const intervalMs = Math.max(
695
+ 250,
696
+ Math.floor(this.crashThresholdMs(registration) / 3),
697
+ );
698
+ const timer = setInterval(() => {
699
+ void (async () => {
700
+ try {
701
+ await this.executions.updateOne(
702
+ { id: { eq: executionId }, status: { eq: "running" } },
703
+ { status: "running" },
704
+ );
705
+ } catch {
706
+ clearInterval(timer);
707
+ }
708
+ })();
709
+ }, intervalMs);
710
+ return timer;
711
+ }
712
+
713
+ /**
714
+ * Insert a keyed execution row, resolving the dedup pre-check/insert
715
+ * race: a concurrent same-key push can land between the read and this
716
+ * insert, so a unique violation on (jobName, key) is settled by
717
+ * returning the winner's row instead of throwing.
718
+ */
719
+ protected async createKeyedExecution(fields: {
720
+ jobName: string;
721
+ key: string;
722
+ payload?: Record<string, unknown>;
723
+ status: JobStatus;
724
+ priority: number;
725
+ maxAttempts: number;
726
+ scheduledAt?: string;
727
+ triggeredBy?: string;
728
+ triggeredByName?: string;
729
+ organizationId?: string;
730
+ }): Promise<{ id: string; created: boolean }> {
731
+ try {
732
+ const execution = await this.executions.create(fields);
733
+ return { id: execution.id, created: true };
734
+ } catch (e) {
735
+ if (e instanceof DbConflictError) {
736
+ const winner = await this.executions.findMany({
737
+ where: { jobName: { eq: fields.jobName }, key: { eq: fields.key } },
738
+ limit: 1,
739
+ });
740
+ if (winner.length > 0) {
741
+ return { id: winner[0].id, created: false };
742
+ }
743
+ }
744
+ throw e;
745
+ }
746
+ }
747
+
748
+ /**
749
+ * Ceiling for the optimistic local timer. Past one day the sweep is the
750
+ * delivery mechanism anyway, and a 32-bit `setTimeout` overflows at
751
+ * ~24.85 days — an unclamped timer would fire immediately and run the
752
+ * job weeks early.
753
+ */
754
+ protected readonly maxOptimisticDelayMs = 24 * 60 * 60 * 1000;
755
+
656
756
  /**
657
757
  * Fire a local setTimeout so delayed/retrying rows dispatch as close to
658
758
  * `scheduledAt` as possible, rather than waiting for the next sweep tick.
659
- * No-op on stateless runtimes where timers won't survive (the sweep
660
- * handles those).
759
+ * No-op on stateless runtimes where timers won't survive, and for delays
760
+ * beyond `maxOptimisticDelayMs` (the sweep handles both).
661
761
  */
662
762
  protected scheduleOptimisticDispatch(
663
763
  jobName: string,
@@ -668,6 +768,9 @@ export class JobProvider {
668
768
  0,
669
769
  new Date(scheduledAt).getTime() - this.dt.nowMillis(),
670
770
  );
771
+ if (delayMs > this.maxOptimisticDelayMs) {
772
+ return;
773
+ }
671
774
  this.dt.createTimeout(() => {
672
775
  void this.dispatchScheduled(jobName, executionId);
673
776
  }, delayMs);
@@ -912,6 +1015,7 @@ export class JobProvider {
912
1015
  const ms = this.dt.duration(opts.timeout).as("milliseconds");
913
1016
  timeoutId = setTimeout(() => abortController.abort(), ms);
914
1017
  }
1018
+ const leaseTimer = this.startLeaseHeartbeat(executionId, registration);
915
1019
 
916
1020
  const now = this.dt.now();
917
1021
 
@@ -988,6 +1092,7 @@ export class JobProvider {
988
1092
  { context: contextId },
989
1093
  );
990
1094
  } finally {
1095
+ clearInterval(leaseTimer);
991
1096
  this.perExecutionLogs.delete(contextId);
992
1097
  }
993
1098
  }
@@ -1164,13 +1269,18 @@ export class JobProvider {
1164
1269
  const reg = this.jobs.get(exec.jobName);
1165
1270
  if (!reg) continue;
1166
1271
  if (this.abortControllers.has(exec.id)) continue; // still alive locally
1167
- const crashThresholdMs = reg.options.timeout
1168
- ? this.dt.duration(reg.options.timeout).as("milliseconds") * 2
1169
- : this.config.runTimeout;
1272
+ const crashThresholdMs = this.crashThresholdMs(reg);
1170
1273
  const startedAtMs = exec.startedAt
1171
1274
  ? new Date(exec.startedAt).getTime()
1172
1275
  : 0;
1173
- if (startedAtMs > 0 && nowMs - startedAtMs > crashThresholdMs) {
1276
+ // The lease is whichever is fresher: the claim (startedAt) or the
1277
+ // last heartbeat (updatedAt). A legitimately long-running job on
1278
+ // another instance keeps renewing; only a stale lease is a crash.
1279
+ const heartbeatMs = exec.updatedAt
1280
+ ? new Date(exec.updatedAt).getTime()
1281
+ : 0;
1282
+ const lastAliveMs = Math.max(startedAtMs, heartbeatMs);
1283
+ if (lastAliveMs > 0 && nowMs - lastAliveMs > crashThresholdMs) {
1174
1284
  this.log.warn(
1175
1285
  `Sweep: marking crashed ${exec.jobName} (${exec.id}) as failed`,
1176
1286
  );
@@ -1200,6 +1310,8 @@ export class JobProvider {
1200
1310
  * Move a row from `scheduled` → `pending` and dispatch it.
1201
1311
  * Used by the optimistic retry/delay timer. If the sweep has already moved
1202
1312
  * the row, or another worker has claimed it, the UPDATE guard fails silently.
1313
+ * The `scheduledAt <= now` condition keeps a stray early timer (clock skew,
1314
+ * timer overflow) from promoting a row ahead of schedule.
1203
1315
  */
1204
1316
  protected async dispatchScheduled(
1205
1317
  jobName: string,
@@ -1208,7 +1320,11 @@ export class JobProvider {
1208
1320
  if (this.stopping) return;
1209
1321
  try {
1210
1322
  await this.executions.updateOne(
1211
- { id: { eq: executionId }, status: { eq: "scheduled" } },
1323
+ {
1324
+ id: { eq: executionId },
1325
+ status: { eq: "scheduled" },
1326
+ scheduledAt: { lte: this.dt.nowISOString() },
1327
+ },
1212
1328
  { status: "pending" },
1213
1329
  );
1214
1330
  await this.dispatchSafe(jobName, executionId);
@@ -1,4 +1,4 @@
1
- import { $inject, Alepha, t } from "alepha";
1
+ import { $inject, Alepha, z } from "alepha";
2
2
  import { $queue } from "alepha/queue";
3
3
  import { JobDispatcher } from "./JobDispatcher.ts";
4
4
  import { JobProvider } from "./JobProvider.ts";
@@ -31,7 +31,7 @@ export class JobQueueProvider extends JobDispatcher {
31
31
 
32
32
  protected readonly queue = $queue({
33
33
  name: "api:jobs:dispatch",
34
- schema: t.object({ jobName: t.text(), executionId: t.text() }),
34
+ schema: z.object({ jobName: z.text(), executionId: z.text() }),
35
35
  handler: async (msg) => {
36
36
  await this.getJobProvider().processExecution(
37
37
  msg.payload.jobName,
@@ -1,37 +1,37 @@
1
- import { $atom, type Static, t } from "alepha";
1
+ import { $atom, type Static, z } from "alepha";
2
2
 
3
3
  export const jobConfig = $atom({
4
4
  name: "alepha.jobs",
5
5
  description: "Configuration for the $job primitive.",
6
- schema: t.object({
7
- sweepCron: t.text({
6
+ schema: z.object({
7
+ sweepCron: z.text({
8
8
  description:
9
9
  "Cron expression for the sweep tick. Must be minute-granular at minimum (cron resolution). On Cloudflare Workers this expression is emitted into wrangler.jsonc by the build.",
10
10
  }),
11
- trimCron: t.text({
11
+ trimCron: z.text({
12
12
  description:
13
13
  "Cron expression for the ring-buffer trim tick (per-job keepLastSuccess/keepLastError enforcement). Decoupled from `sweepCron` because trim is bounded by job execution rate, not retry latency — running it every sweep is wasted work for most apps.",
14
14
  }),
15
- staleThreshold: t.integer({
16
- description: "Pending age (ms) before the sweep re-dispatches it.",
17
- }),
18
- runTimeout: t.integer({
19
- description:
15
+ staleThreshold: z
16
+ .integer()
17
+ .describe("Pending age (ms) before the sweep re-dispatches it."),
18
+ runTimeout: z
19
+ .integer()
20
+ .describe(
20
21
  "Running age (ms) before assumed crash (fallback when no per-job timeout).",
21
- }),
22
- keepLastSuccess: t.integer({
23
- description:
22
+ ),
23
+ keepLastSuccess: z
24
+ .integer()
25
+ .describe(
24
26
  "Max successful rows to keep per job. Set 0 to disable and delete on success.",
25
- }),
26
- keepLastError: t.integer({
27
- description: "Max error rows to keep per job.",
28
- }),
29
- logMaxEntries: t.integer({
30
- description: "Max log entries captured per execution.",
31
- }),
32
- drainTimeout: t.integer({
33
- description: "Max time (ms) to wait for in-flight jobs during shutdown.",
34
- }),
27
+ ),
28
+ keepLastError: z.integer().describe("Max error rows to keep per job."),
29
+ logMaxEntries: z
30
+ .integer()
31
+ .describe("Max log entries captured per execution."),
32
+ drainTimeout: z
33
+ .integer()
34
+ .describe("Max time (ms) to wait for in-flight jobs during shutdown."),
35
35
  }),
36
36
  default: {
37
37
  sweepCron: "*/15 * * * *",
@@ -1,10 +1,10 @@
1
- import { type Static, t } from "alepha";
1
+ import { type Static, z } from "alepha";
2
2
 
3
- export const jobExecutionQuerySchema = t.object({
4
- status: t.optional(
5
- t.enum(["pending", "running", "scheduled", "ok", "error", "cancelled"]),
6
- ),
7
- limit: t.optional(t.integer({ minimum: 1, maximum: 200, default: 20 })),
3
+ export const jobExecutionQuerySchema = z.object({
4
+ status: z
5
+ .enum(["pending", "running", "scheduled", "ok", "error", "cancelled"])
6
+ .optional(),
7
+ limit: z.integer().min(1).max(200).default(20).optional(),
8
8
  });
9
9
 
10
10
  export type JobExecutionQuery = Static<typeof jobExecutionQuerySchema>;
@@ -1,4 +1,4 @@
1
- import { type Static, t } from "alepha";
1
+ import { type Static, z } from "alepha";
2
2
  import { jobExecutionEntity } from "../entities/jobExecutionEntity.ts";
3
3
 
4
4
  /**
@@ -11,22 +11,18 @@ import { jobExecutionEntity } from "../entities/jobExecutionEntity.ts";
11
11
  * `JobService` is responsible for the int → string transform.
12
12
  * - `can` derives the available admin actions from the row's status.
13
13
  */
14
- export const jobExecutionResourceSchema = t.extend(
15
- // `t.extend` composes (interface-extends), it does not override: the base
16
- // `priority` (integer) would still be enforced alongside the enum below and
17
- // reject the int→string transform. Drop it from the base first.
18
- t.omit(jobExecutionEntity.schema, ["priority"]),
19
- {
20
- priority: t.enum(["critical", "high", "normal", "low"]),
21
- can: t.object({
22
- retry: t.boolean(),
23
- cancel: t.boolean(),
14
+ export const jobExecutionResourceSchema = jobExecutionEntity.schema
15
+ .omit({ priority: true })
16
+ .extend({
17
+ priority: z.enum(["critical", "high", "normal", "low"]),
18
+ can: z.object({
19
+ retry: z.boolean(),
20
+ cancel: z.boolean(),
24
21
  }),
25
- },
26
- {
22
+ })
23
+ .meta({
27
24
  title: "JobExecutionResource",
28
25
  description: "A job execution row with derived actions.",
29
- },
30
- );
26
+ });
31
27
 
32
28
  export type JobExecutionResource = Static<typeof jobExecutionResourceSchema>;