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,6 +1,7 @@
1
- import { Alepha, t } from "alepha";
1
+ import { Alepha, jsonSchemaToZod, z } from "alepha";
2
2
  import { DateTimeProvider } from "alepha/datetime";
3
3
  import { AlephaOrmPostgres } from "alepha/orm/postgres";
4
+ import { currentTenantAtom } from "alepha/security";
4
5
  import { describe, expect, it } from "vitest";
5
6
  import {
6
7
  $parameter,
@@ -8,9 +9,9 @@ import {
8
9
  ParameterProvider,
9
10
  } from "../index.ts";
10
11
 
11
- const featureSchema = t.object({
12
- enableBeta: t.boolean(),
13
- maxUploadSize: t.number(),
12
+ const featureSchema = z.object({
13
+ enableBeta: z.boolean(),
14
+ maxUploadSize: z.number(),
14
15
  });
15
16
 
16
17
  describe("$parameter", () => {
@@ -578,9 +579,9 @@ describe("Cross-instance sync", () => {
578
579
 
579
580
  describe("Schema migration", () => {
580
581
  it("should keep valid value when schema is compatible", async () => {
581
- const schema = t.object({
582
- name: t.text(),
583
- age: t.optional(t.number()),
582
+ const schema = z.object({
583
+ name: z.text(),
584
+ age: z.number().optional(),
584
585
  });
585
586
 
586
587
  class AppConfig {
@@ -613,9 +614,9 @@ describe("Schema migration", () => {
613
614
  });
614
615
 
615
616
  it("should merge with defaults when adding a required field", async () => {
616
- const schema = t.object({
617
- name: t.text(),
618
- age: t.number(),
617
+ const schema = z.object({
618
+ name: z.text(),
619
+ age: z.number(),
619
620
  });
620
621
 
621
622
  class AppConfig {
@@ -650,11 +651,11 @@ describe("Schema migration", () => {
650
651
  });
651
652
 
652
653
  it("should reset to defaults when merge still invalid", async () => {
653
- const schema = t.object({
654
- items: t.array(
655
- t.object({
656
- x: t.number(),
657
- y: t.number(),
654
+ const schema = z.object({
655
+ items: z.array(
656
+ z.object({
657
+ x: z.number(),
658
+ y: z.number(),
658
659
  }),
659
660
  ),
660
661
  });
@@ -694,9 +695,9 @@ describe("Schema migration", () => {
694
695
  });
695
696
 
696
697
  it("should use migrate function when provided", async () => {
697
- const schema = t.object({
698
- name: t.text(),
699
- age: t.number(),
698
+ const schema = z.object({
699
+ name: z.text(),
700
+ age: z.number(),
700
701
  });
701
702
 
702
703
  class AppConfig {
@@ -736,9 +737,9 @@ describe("Schema migration", () => {
736
737
  });
737
738
 
738
739
  it("should fall through to merge when migrate returns invalid value", async () => {
739
- const schema = t.object({
740
- name: t.text(),
741
- age: t.number(),
740
+ const schema = z.object({
741
+ name: z.text(),
742
+ age: z.number(),
742
743
  });
743
744
 
744
745
  class AppConfig {
@@ -775,9 +776,9 @@ describe("Schema migration", () => {
775
776
  });
776
777
 
777
778
  it("should not migrate when schema hash matches", async () => {
778
- const schema = t.object({
779
- name: t.text(),
780
- age: t.number(),
779
+ const schema = z.object({
780
+ name: z.text(),
781
+ age: z.number(),
781
782
  });
782
783
 
783
784
  class AppConfig {
@@ -818,8 +819,8 @@ describe("Schema migration", () => {
818
819
  });
819
820
 
820
821
  it("should handle type change by resetting to defaults", async () => {
821
- const schema = t.object({
822
- name: t.number(),
822
+ const schema = z.object({
823
+ name: z.number(),
823
824
  });
824
825
 
825
826
  class AppConfig {
@@ -853,8 +854,8 @@ describe("Schema migration", () => {
853
854
  });
854
855
 
855
856
  it("should handle removed fields gracefully", async () => {
856
- const schema = t.object({
857
- name: t.text(),
857
+ const schema = z.object({
858
+ name: z.text(),
858
859
  });
859
860
 
860
861
  class AppConfig {
@@ -888,9 +889,9 @@ describe("Schema migration", () => {
888
889
  });
889
890
 
890
891
  it("should not migrate when there is no DB value", async () => {
891
- const schema = t.object({
892
- name: t.text(),
893
- age: t.number(),
892
+ const schema = z.object({
893
+ name: z.text(),
894
+ age: z.number(),
894
895
  });
895
896
 
896
897
  class AppConfig {
@@ -916,9 +917,9 @@ describe("Schema migration", () => {
916
917
  });
917
918
 
918
919
  it("should handle migrate function that throws", async () => {
919
- const schema = t.object({
920
- name: t.text(),
921
- age: t.number(),
920
+ const schema = z.object({
921
+ name: z.text(),
922
+ age: z.number(),
922
923
  });
923
924
 
924
925
  class AppConfig {
@@ -950,9 +951,9 @@ describe("Schema migration", () => {
950
951
  });
951
952
 
952
953
  it("should notify subscribers after auto-migration", async () => {
953
- const schema = t.object({
954
- name: t.text(),
955
- age: t.number(),
954
+ const schema = z.object({
955
+ name: z.text(),
956
+ age: z.number(),
956
957
  });
957
958
 
958
959
  class Config {
@@ -979,8 +980,9 @@ describe("Schema migration", () => {
979
980
  config.param.sub((v) => received.push(v));
980
981
 
981
982
  // Now save a value with old schema hash to trigger migration
982
- // Reset migrationChecked to allow re-migration
983
- (provider as any).migrationChecked.delete("migrate.notify.sub");
983
+ // Reset migrationChecked to allow re-migration. The value caches are now
984
+ // keyed `${org}:${name}` — no org atom in this test → the `~global` org.
985
+ (provider as any).migrationChecked.delete("~global:migrate.notify.sub");
984
986
  await provider.save(
985
987
  "migrate.notify.sub",
986
988
  { name: "alice" },
@@ -998,9 +1000,9 @@ describe("Schema migration", () => {
998
1000
  });
999
1001
 
1000
1002
  it("should handle completely new shape by resetting to defaults", async () => {
1001
- const schema = t.object({
1002
- width: t.number(),
1003
- height: t.number(),
1003
+ const schema = z.object({
1004
+ width: z.number(),
1005
+ height: z.number(),
1004
1006
  });
1005
1007
 
1006
1008
  class Config {
@@ -1034,9 +1036,9 @@ describe("Schema migration", () => {
1034
1036
  });
1035
1037
 
1036
1038
  it("should only migrate once per lifecycle in Node.js", async () => {
1037
- const schema = t.object({
1038
- name: t.text(),
1039
- count: t.number(),
1039
+ const schema = z.object({
1040
+ name: z.text(),
1041
+ count: z.number(),
1040
1042
  });
1041
1043
 
1042
1044
  class Config {
@@ -1421,6 +1423,44 @@ describe("getCurrentWithDefault", () => {
1421
1423
  });
1422
1424
  expect(result.schema).not.toBeNull();
1423
1425
  });
1426
+
1427
+ it("should return the schema as JSON Schema, not a raw ZodObject", async () => {
1428
+ // Regression: the parameter's `schema` is a live `ZodObject`. It must be
1429
+ // serialized to JSON Schema before transport — otherwise the action's
1430
+ // `schema: z.json()` response validation rejects it ("expected record,
1431
+ // received ZodObject at /schema"), 500-ing the admin Parameters UI when an
1432
+ // item is opened. The UI rebuilds its form by round-tripping the value back
1433
+ // through `jsonSchemaToZod` (the inverse of `z.toJSONSchema`).
1434
+ class AppConfig {
1435
+ features = $parameter({
1436
+ name: "gwd.schema.json",
1437
+ schema: featureSchema,
1438
+ default: { enableBeta: false, maxUploadSize: 10485760 },
1439
+ });
1440
+ }
1441
+
1442
+ const alepha = Alepha.create().with(AlephaOrmPostgres);
1443
+ alepha.with(AlephaApiParameters);
1444
+ alepha.with(AppConfig);
1445
+ await alepha.start();
1446
+
1447
+ const provider = alepha.inject(ParameterProvider);
1448
+ const result = await provider.getCurrentWithDefault("gwd.schema.json");
1449
+
1450
+ // A plain JSON-Schema record describing the parameter shape — never the
1451
+ // Zod instance (which would have `_zod`/`def`, not `type`/`properties`).
1452
+ expect(z.schema.isObject(result.schema as never)).toBe(false);
1453
+ expect((result.schema as { type?: string }).type).toBe("object");
1454
+ expect(
1455
+ Object.keys((result.schema as { properties?: object }).properties ?? {}),
1456
+ ).toEqual(expect.arrayContaining(["enableBeta", "maxUploadSize"]));
1457
+
1458
+ // Round-trips back to a working Zod schema for the admin form.
1459
+ const rebuilt = jsonSchemaToZod(result.schema);
1460
+ expect(
1461
+ rebuilt.safeParse({ enableBeta: true, maxUploadSize: 42 }).success,
1462
+ ).toBe(true);
1463
+ });
1424
1464
  });
1425
1465
 
1426
1466
  // ---------------------------------------------------------------------------
@@ -1654,7 +1694,8 @@ describe("set with scheduled activation", () => {
1654
1694
 
1655
1695
  // cachedNext should be populated
1656
1696
  const providerAny = provider as any;
1657
- const cachedNext = providerAny.cachedNext.get("set.sched.cache");
1697
+ // Value caches are keyed `${org}:${name}`; no org atom here → `~global`.
1698
+ const cachedNext = providerAny.cachedNext.get("~global:set.sched.cache");
1658
1699
  expect(cachedNext).not.toBeUndefined();
1659
1700
  expect(cachedNext.content).toEqual({
1660
1701
  enableBeta: true,
@@ -1878,11 +1919,11 @@ describe("reloadNextInBackground", () => {
1878
1919
  });
1879
1920
 
1880
1921
  // ---------------------------------------------------------------------------
1881
- // 10. ParameterTreeNode schema uses t.any() for children
1922
+ // 10. ParameterTreeNode schema uses z.any() for children
1882
1923
  // ---------------------------------------------------------------------------
1883
1924
 
1884
1925
  describe("ParameterTreeNode children structure", () => {
1885
- it("should produce correctly typed children at runtime despite t.any() schema", async () => {
1926
+ it("should produce correctly typed children at runtime despite z.any() schema", async () => {
1886
1927
  const alepha = Alepha.create().with(AlephaOrmPostgres);
1887
1928
  alepha.with(AlephaApiParameters);
1888
1929
  await alepha.start();
@@ -2013,7 +2054,7 @@ describe("$parameter.name fallback", () => {
2013
2054
  it("should use ClassName.propertyKey when name option is omitted", async () => {
2014
2055
  class MySettings {
2015
2056
  theme = $parameter({
2016
- schema: t.object({ dark: t.boolean() }),
2057
+ schema: z.object({ dark: z.boolean() }),
2017
2058
  default: { dark: false },
2018
2059
  });
2019
2060
  }
@@ -2031,7 +2072,7 @@ describe("$parameter.name fallback", () => {
2031
2072
  class MySettings {
2032
2073
  theme = $parameter({
2033
2074
  name: "app.ui.theme",
2034
- schema: t.object({ dark: t.boolean() }),
2075
+ schema: z.object({ dark: z.boolean() }),
2035
2076
  default: { dark: false },
2036
2077
  });
2037
2078
  }
@@ -2246,3 +2287,141 @@ describe("set idempotency", () => {
2246
2287
  expect(received.length).toBe(0);
2247
2288
  });
2248
2289
  });
2290
+
2291
+ describe("$parameter multi-tenant isolation", () => {
2292
+ it("partitions stored values + caches by the active org (no cross-tenant read/write)", async () => {
2293
+ class AppConfig {
2294
+ settings = $parameter({
2295
+ name: "club.settings",
2296
+ schema: featureSchema,
2297
+ default: { enableBeta: false, maxUploadSize: 1 },
2298
+ });
2299
+ }
2300
+
2301
+ const alepha = Alepha.create().with(AlephaOrmPostgres);
2302
+ alepha.with(AlephaApiParameters);
2303
+ alepha.with(AppConfig);
2304
+ await alepha.start();
2305
+
2306
+ const config = alepha.inject(AppConfig);
2307
+ const orgA = "00000000-0000-0000-0000-0000000000aa";
2308
+ const orgB = "00000000-0000-0000-0000-0000000000bb";
2309
+
2310
+ // Org A writes its own value.
2311
+ alepha.store.set(currentTenantAtom, { id: orgA });
2312
+ await config.settings.set({ enableBeta: true, maxUploadSize: 10 });
2313
+ expect(await config.settings.get()).toEqual({
2314
+ enableBeta: true,
2315
+ maxUploadSize: 10,
2316
+ });
2317
+
2318
+ // Org B sees ONLY its default — never org A's value (the bug this fixes).
2319
+ alepha.store.set(currentTenantAtom, { id: orgB });
2320
+ expect(await config.settings.get()).toEqual({
2321
+ enableBeta: false,
2322
+ maxUploadSize: 1,
2323
+ });
2324
+
2325
+ // Org B writes its own; org A is untouched.
2326
+ await config.settings.set({ enableBeta: false, maxUploadSize: 99 });
2327
+ expect(await config.settings.get()).toEqual({
2328
+ enableBeta: false,
2329
+ maxUploadSize: 99,
2330
+ });
2331
+
2332
+ alepha.store.set(currentTenantAtom, { id: orgA });
2333
+ expect(await config.settings.get()).toEqual({
2334
+ enableBeta: true,
2335
+ maxUploadSize: 10,
2336
+ });
2337
+
2338
+ await alepha.stop();
2339
+ });
2340
+
2341
+ it("revalidates a stale cache after PARAMETERS_CACHE_TTL_MS (cross-isolate write)", async () => {
2342
+ class AppConfig {
2343
+ flags = $parameter({
2344
+ name: "app.ttlRevalidation.flags",
2345
+ schema: featureSchema,
2346
+ default: { enableBeta: false, maxUploadSize: 1 },
2347
+ });
2348
+ }
2349
+
2350
+ // Writes a new version to the DB WITHOUT touching this instance's
2351
+ // in-memory cache — exactly what a `set()` handled by ANOTHER worker
2352
+ // isolate looks like from here (the sync topic rides the in-memory
2353
+ // queue, so it never crosses isolates).
2354
+ class TestableProvider extends ParameterProvider {
2355
+ writeBehindCache(name: string, value: Record<string, unknown>) {
2356
+ return this.save(name, value, this.schemaHashes.get(name) ?? "", {});
2357
+ }
2358
+ }
2359
+
2360
+ const alepha = Alepha.create({
2361
+ env: { ...process.env, PARAMETERS_CACHE_TTL_MS: "50" },
2362
+ });
2363
+ alepha.with({ provide: ParameterProvider, use: TestableProvider });
2364
+ alepha.with(AlephaOrmPostgres);
2365
+ alepha.with(AlephaApiParameters);
2366
+ alepha.with(AppConfig);
2367
+ await alepha.start();
2368
+
2369
+ const config = alepha.inject(AppConfig);
2370
+ await config.flags.set({ enableBeta: false, maxUploadSize: 1 });
2371
+ expect((await config.flags.get()).enableBeta).toBe(false);
2372
+
2373
+ const provider = alepha.inject(ParameterProvider) as TestableProvider;
2374
+ await provider.writeBehindCache("app.ttlRevalidation.flags", {
2375
+ enableBeta: true,
2376
+ maxUploadSize: 2,
2377
+ });
2378
+
2379
+ // Within the TTL the (stale) cache still serves.
2380
+ expect((await config.flags.get()).enableBeta).toBe(false);
2381
+
2382
+ // Past the TTL, get() re-reads the DB and converges.
2383
+ await new Promise((r) => setTimeout(r, 80));
2384
+ expect((await config.flags.get()).enableBeta).toBe(true);
2385
+
2386
+ await alepha.stop();
2387
+ });
2388
+
2389
+ it("keeps the historical never-revalidate behaviour when the TTL is 0", async () => {
2390
+ class AppConfig {
2391
+ flags = $parameter({
2392
+ name: "app.ttlZero.flags",
2393
+ schema: featureSchema,
2394
+ default: { enableBeta: false, maxUploadSize: 1 },
2395
+ });
2396
+ }
2397
+
2398
+ class TestableProvider extends ParameterProvider {
2399
+ writeBehindCache(name: string, value: Record<string, unknown>) {
2400
+ return this.save(name, value, this.schemaHashes.get(name) ?? "", {});
2401
+ }
2402
+ }
2403
+
2404
+ const alepha = Alepha.create({
2405
+ env: { ...process.env, PARAMETERS_CACHE_TTL_MS: "0" },
2406
+ });
2407
+ alepha.with({ provide: ParameterProvider, use: TestableProvider });
2408
+ alepha.with(AlephaOrmPostgres);
2409
+ alepha.with(AlephaApiParameters);
2410
+ alepha.with(AppConfig);
2411
+ await alepha.start();
2412
+
2413
+ const config = alepha.inject(AppConfig);
2414
+ await config.flags.set({ enableBeta: false, maxUploadSize: 1 });
2415
+
2416
+ const provider = alepha.inject(ParameterProvider) as TestableProvider;
2417
+ await provider.writeBehindCache("app.ttlZero.flags", {
2418
+ enableBeta: true,
2419
+ maxUploadSize: 2,
2420
+ });
2421
+
2422
+ await new Promise((r) => setTimeout(r, 80));
2423
+ expect((await config.flags.get()).enableBeta).toBe(false);
2424
+
2425
+ await alepha.stop();
2426
+ });
2427
+ });
@@ -1,4 +1,4 @@
1
- import { $inject, Alepha, AlephaError, t } from "alepha";
1
+ import { $inject, Alepha, AlephaError, z } from "alepha";
2
2
  import { $secure } from "alepha/security";
3
3
  import { $action, okSchema } from "alepha/server";
4
4
  import { ParameterAudits } from "../audits/ParameterAudits.ts";
@@ -43,7 +43,7 @@ export class AdminParameterController {
43
43
  path: "/parameters/tree",
44
44
  method: "GET",
45
45
  schema: {
46
- response: t.array(parameterTreeNodeSchema),
46
+ response: z.array(parameterTreeNodeSchema),
47
47
  },
48
48
  handler: async () => {
49
49
  return this.provider.getParameterTree();
@@ -80,9 +80,9 @@ export class AdminParameterController {
80
80
  method: "GET",
81
81
  schema: {
82
82
  params: parameterNameParamSchema,
83
- query: t.object({
84
- limit: t.optional(t.integer({ minimum: 1, maximum: 100 })),
85
- offset: t.optional(t.integer({ minimum: 0 })),
83
+ query: z.object({
84
+ limit: z.integer().min(1).max(100).optional(),
85
+ offset: z.integer().min(0).optional(),
86
86
  }),
87
87
  response: parameterHistoryResponseSchema,
88
88
  },
@@ -305,14 +305,11 @@ export class AdminParameterController {
305
305
  path: "/parameters/delete",
306
306
  method: "POST",
307
307
  schema: {
308
- body: t.object({
309
- names: t.array(t.string({ minLength: 1 }), {
310
- minItems: 1,
311
- maxItems: 1000,
312
- }),
308
+ body: z.object({
309
+ names: z.array(z.string().min(1)).min(1).max(1000),
313
310
  }),
314
- response: t.object({
315
- deleted: t.array(t.string()),
311
+ response: z.object({
312
+ deleted: z.array(z.string()),
316
313
  }),
317
314
  },
318
315
  handler: async ({ body }) => {
@@ -1,4 +1,4 @@
1
- import { type Static, t } from "alepha";
1
+ import { type Static, z } from "alepha";
2
2
  import { $entity, db } from "alepha/orm";
3
3
 
4
4
  /**
@@ -12,73 +12,86 @@ import { $entity, db } from "alepha/orm";
12
12
  */
13
13
  export const parameters = $entity({
14
14
  name: "parameters",
15
- schema: t.object({
16
- id: db.primaryKey(t.uuid()),
15
+ schema: z.object({
16
+ id: db.primaryKey(z.uuid()),
17
17
  createdAt: db.createdAt(),
18
18
  updatedAt: db.updatedAt(),
19
19
 
20
+ /**
21
+ * Tenant scope. NULLABLE on purpose (backward compatible): single-tenant
22
+ * apps keep writing org-less (NULL) rows with the historic global
23
+ * semantics. In a MULTI-TENANT process (e.g. one pooled worker serving
24
+ * many orgs), the active tenant is stamped by the Repository
25
+ * (`stampOrganization`) and reads/writes auto-filter by it — so one org's
26
+ * `app.settings`/`portal.site`/… can never be read or overwritten by
27
+ * another. The provider's in-memory value caches are keyed by org too.
28
+ */
29
+ organizationId: db.organization(),
30
+
20
31
  /**
21
32
  * Configuration name using dot notation for tree hierarchy.
22
33
  * Examples: "app.features", "app.pricing.tiers", "system.limits"
23
34
  */
24
- name: t.text(),
35
+ name: z.text(),
25
36
 
26
37
  /**
27
38
  * The configuration content as JSON.
28
39
  */
29
- content: t.json(),
40
+ content: z.json(),
30
41
 
31
42
  /**
32
43
  * Schema version hash for detecting schema changes.
33
44
  * Used for auto-migration when schema evolves.
34
45
  */
35
- schemaHash: t.text(),
46
+ schemaHash: z.text(),
36
47
 
37
48
  /**
38
49
  * When this version should become active.
39
50
  * Default is immediate (now).
40
51
  */
41
- activationDate: t.datetime(),
52
+ activationDate: z.datetime(),
42
53
 
43
54
  /**
44
55
  * Version number for this configuration.
45
56
  * Auto-incremented per config name.
46
57
  */
47
- version: t.integer(),
58
+ version: z.integer(),
48
59
 
49
60
  /**
50
61
  * Optional description of changes in this version.
51
62
  */
52
- changeDescription: t.optional(t.text()),
63
+ changeDescription: z.text().optional(),
53
64
 
54
65
  /**
55
66
  * Optional tags for filtering/categorization.
56
67
  */
57
- tags: t.optional(t.array(t.text())),
68
+ tags: z.array(z.text()).optional(),
58
69
 
59
70
  /**
60
71
  * Creator user ID (if available).
61
72
  */
62
- creatorId: t.optional(t.uuid()),
73
+ creatorId: z.uuid().optional(),
63
74
 
64
75
  /**
65
76
  * Creator display name for audit trail.
66
77
  */
67
- creatorName: t.optional(t.text()),
78
+ creatorName: z.text().optional(),
68
79
 
69
80
  /**
70
81
  * Previous content before this change (for rollback reference).
71
82
  */
72
- previousContent: t.optional(t.json()),
83
+ previousContent: z.json().optional(),
73
84
 
74
85
  /**
75
86
  * Migration log if schema changed.
76
87
  */
77
- migrationLog: t.optional(t.text()),
88
+ migrationLog: z.text().optional(),
78
89
  }),
79
90
  indexes: [
80
- { columns: ["name", "activationDate"] },
81
- { columns: ["name", "version"], unique: true },
91
+ { columns: ["organizationId", "name", "activationDate"] },
92
+ // Version numbering is per-(org, name): two tenants each own an
93
+ // independent v1/v2/… of the same parameter name.
94
+ { columns: ["organizationId", "name", "version"], unique: true },
82
95
  { columns: ["activationDate"] },
83
96
  ],
84
97
  });
@@ -26,9 +26,9 @@ import { ParameterProvider } from "../services/ParameterProvider.ts";
26
26
  * class AppConfig {
27
27
  * features = $parameter({
28
28
  * name: "app.features.flags",
29
- * schema: t.object({
30
- * enableBeta: t.boolean(),
31
- * maxUploadSize: t.number()
29
+ * schema: z.object({
30
+ * enableBeta: z.boolean(),
31
+ * maxUploadSize: z.number()
32
32
  * }),
33
33
  * default: { enableBeta: false, maxUploadSize: 10485760 }
34
34
  * });
@@ -1,4 +1,4 @@
1
- import { type Static, t } from "alepha";
1
+ import type { Static } from "alepha";
2
2
  import { parameters } from "../entities/parameters.ts";
3
3
 
4
4
  /**
@@ -7,8 +7,8 @@ import { parameters } from "../entities/parameters.ts";
7
7
  * Creator fields are omitted; the controller captures the authenticated user
8
8
  * server-side.
9
9
  */
10
- export const activateParameterBodySchema = t.pick(parameters.schema, [
11
- "version",
12
- ]);
10
+ export const activateParameterBodySchema = parameters.schema.pick({
11
+ version: true,
12
+ });
13
13
 
14
14
  export type ActivateParameterBody = Static<typeof activateParameterBodySchema>;
@@ -1,26 +1,26 @@
1
- import { type Static, t } from "alepha";
1
+ import { type Static, z } from "alepha";
2
2
  import { parameters } from "../entities/parameters.ts";
3
3
 
4
4
  /**
5
5
  * Create parameter version body schema.
6
- * Uses t.pick to derive from entity, with required fields made non-optional.
6
+ * Uses z.pick to derive from entity, with required fields made non-optional.
7
7
  *
8
8
  * Creator fields are intentionally omitted: the controller captures the
9
9
  * authenticated user server-side, so they cannot be spoofed by the client.
10
10
  */
11
- export const createParameterVersionBodySchema = t.extend(
12
- t.pick(parameters.schema, [
13
- "content",
14
- "schemaHash",
15
- "changeDescription",
16
- "tags",
17
- ]),
18
- {
19
- activationDate: t.optional(
20
- t.datetime({ description: "When to activate (default: now)" }),
21
- ),
22
- },
23
- );
11
+ export const createParameterVersionBodySchema = parameters.schema
12
+ .pick({
13
+ content: true,
14
+ schemaHash: true,
15
+ changeDescription: true,
16
+ tags: true,
17
+ })
18
+ .extend({
19
+ activationDate: z
20
+ .datetime()
21
+ .describe("When to activate (default: now)")
22
+ .optional(),
23
+ });
24
24
 
25
25
  export type CreateParameterVersionBody = Static<
26
26
  typeof createParameterVersionBodySchema
@@ -1,4 +1,4 @@
1
- import { type Static, t } from "alepha";
1
+ import { type Static, z } from "alepha";
2
2
 
3
3
  /**
4
4
  * Slim view of a parameter version's creator, embedded by the admin history
@@ -12,12 +12,12 @@ import { type Static, t } from "alepha";
12
12
  * realm — comes back with `creator` undefined. Callers fall back to the raw
13
13
  * `creatorId`.
14
14
  */
15
- export const parameterCreatorSummarySchema = t.object({
16
- id: t.uuid(),
17
- email: t.optional(t.string({ format: "email" })),
18
- username: t.optional(t.shortText({ minLength: 3, maxLength: 30 })),
19
- firstName: t.optional(t.string()),
20
- lastName: t.optional(t.string()),
15
+ export const parameterCreatorSummarySchema = z.object({
16
+ id: z.uuid(),
17
+ email: z.string().meta({ format: "email" }).optional(),
18
+ username: z.shortText({ minLength: 3, maxLength: 30 }).optional(),
19
+ firstName: z.string().optional(),
20
+ lastName: z.string().optional(),
21
21
  });
22
22
 
23
23
  export type ParameterCreatorSummary = Static<