alepha 0.23.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (845) hide show
  1. package/assets/swagger-ui/swagger-ui-bundle.js +1 -1
  2. package/assets/swagger-ui/swagger-ui-standalone-preset.js +1 -1
  3. package/dist/api/audits/index.browser.js +49 -52
  4. package/dist/api/audits/index.browser.js.map +1 -1
  5. package/dist/api/audits/index.d.ts +629 -565
  6. package/dist/api/audits/index.d.ts.map +1 -1
  7. package/dist/api/audits/index.js +206 -98
  8. package/dist/api/audits/index.js.map +1 -1
  9. package/dist/api/files/index.browser.js +44 -44
  10. package/dist/api/files/index.browser.js.map +1 -1
  11. package/dist/api/files/index.d.ts +292 -293
  12. package/dist/api/files/index.d.ts.map +1 -1
  13. package/dist/api/files/index.js +61 -64
  14. package/dist/api/files/index.js.map +1 -1
  15. package/dist/api/jobs/index.browser.js +61 -59
  16. package/dist/api/jobs/index.browser.js.map +1 -1
  17. package/dist/api/jobs/index.d.ts +546 -347
  18. package/dist/api/jobs/index.d.ts.map +1 -1
  19. package/dist/api/jobs/index.js +165 -86
  20. package/dist/api/jobs/index.js.map +1 -1
  21. package/dist/api/keys/index.d.ts +247 -235
  22. package/dist/api/keys/index.d.ts.map +1 -1
  23. package/dist/api/keys/index.js +63 -66
  24. package/dist/api/keys/index.js.map +1 -1
  25. package/dist/api/notifications/index.browser.js +40 -38
  26. package/dist/api/notifications/index.browser.js.map +1 -1
  27. package/dist/api/notifications/index.d.ts +339 -209
  28. package/dist/api/notifications/index.d.ts.map +1 -1
  29. package/dist/api/notifications/index.js +108 -60
  30. package/dist/api/notifications/index.js.map +1 -1
  31. package/dist/api/oauth/index.d.ts +190 -78
  32. package/dist/api/oauth/index.d.ts.map +1 -1
  33. package/dist/api/oauth/index.js +290 -68
  34. package/dist/api/oauth/index.js.map +1 -1
  35. package/dist/api/organizations/index.browser.js +14 -14
  36. package/dist/api/organizations/index.browser.js.map +1 -1
  37. package/dist/api/organizations/index.d.ts +158 -134
  38. package/dist/api/organizations/index.d.ts.map +1 -1
  39. package/dist/api/organizations/index.js +18 -18
  40. package/dist/api/organizations/index.js.map +1 -1
  41. package/dist/api/parameters/index.browser.js +74 -53
  42. package/dist/api/parameters/index.browser.js.map +1 -1
  43. package/dist/api/parameters/index.d.ts +607 -513
  44. package/dist/api/parameters/index.d.ts.map +1 -1
  45. package/dist/api/parameters/index.js +205 -127
  46. package/dist/api/parameters/index.js.map +1 -1
  47. package/dist/api/payments/index.d.ts +652 -449
  48. package/dist/api/payments/index.d.ts.map +1 -1
  49. package/dist/api/payments/index.js +159 -93
  50. package/dist/api/payments/index.js.map +1 -1
  51. package/dist/api/subscriptions/index.d.ts +1032 -762
  52. package/dist/api/subscriptions/index.d.ts.map +1 -1
  53. package/dist/api/subscriptions/index.js +166 -185
  54. package/dist/api/subscriptions/index.js.map +1 -1
  55. package/dist/api/users/index.browser.js +48 -71
  56. package/dist/api/users/index.browser.js.map +1 -1
  57. package/dist/api/users/index.d.ts +1297 -1143
  58. package/dist/api/users/index.d.ts.map +1 -1
  59. package/dist/api/users/index.js +456 -392
  60. package/dist/api/users/index.js.map +1 -1
  61. package/dist/api/verifications/index.browser.js +17 -17
  62. package/dist/api/verifications/index.browser.js.map +1 -1
  63. package/dist/api/verifications/index.d.ts +167 -155
  64. package/dist/api/verifications/index.d.ts.map +1 -1
  65. package/dist/api/verifications/index.js +47 -95
  66. package/dist/api/verifications/index.js.map +1 -1
  67. package/dist/background/index.d.ts +0 -1
  68. package/dist/background/index.d.ts.map +1 -1
  69. package/dist/background/index.js.map +1 -1
  70. package/dist/background/index.workerd.js.map +1 -1
  71. package/dist/batch/index.d.ts +0 -1
  72. package/dist/batch/index.d.ts.map +1 -1
  73. package/dist/batch/index.js.map +1 -1
  74. package/dist/bin/index.js +1 -1
  75. package/dist/bin/index.js.map +1 -1
  76. package/dist/bucket/index.d.ts +27 -32
  77. package/dist/bucket/index.d.ts.map +1 -1
  78. package/dist/bucket/index.js +56 -26
  79. package/dist/bucket/index.js.map +1 -1
  80. package/dist/bucket/index.workerd.js +52 -24
  81. package/dist/bucket/index.workerd.js.map +1 -1
  82. package/dist/cache/core/index.d.ts +4 -6
  83. package/dist/cache/core/index.d.ts.map +1 -1
  84. package/dist/cache/core/index.js +4 -10
  85. package/dist/cache/core/index.js.map +1 -1
  86. package/dist/cache/core/index.workerd.js +4 -10
  87. package/dist/cache/core/index.workerd.js.map +1 -1
  88. package/dist/cache/database/index.d.ts +22 -23
  89. package/dist/cache/database/index.d.ts.map +1 -1
  90. package/dist/cache/database/index.js +11 -20
  91. package/dist/cache/database/index.js.map +1 -1
  92. package/dist/cache/redis/index.d.ts +3 -4
  93. package/dist/cache/redis/index.d.ts.map +1 -1
  94. package/dist/cache/redis/index.js +2 -2
  95. package/dist/cache/redis/index.js.map +1 -1
  96. package/dist/captcha/index.d.ts.map +1 -1
  97. package/dist/captcha/index.js +4 -4
  98. package/dist/captcha/index.js.map +1 -1
  99. package/dist/cli/config/index.d.ts +0 -1
  100. package/dist/cli/config/index.d.ts.map +1 -1
  101. package/dist/cli/core/index.d.ts +205 -442
  102. package/dist/cli/core/index.d.ts.map +1 -1
  103. package/dist/cli/core/index.js +259 -284
  104. package/dist/cli/core/index.js.map +1 -1
  105. package/dist/cli/devtools/index.d.ts +3 -9
  106. package/dist/cli/devtools/index.d.ts.map +1 -1
  107. package/dist/cli/devtools/index.js +3 -3
  108. package/dist/cli/devtools/index.js.map +1 -1
  109. package/dist/cli/i18n/index.d.ts +8 -34
  110. package/dist/cli/i18n/index.d.ts.map +1 -1
  111. package/dist/cli/i18n/index.js +6 -6
  112. package/dist/cli/i18n/index.js.map +1 -1
  113. package/dist/cli/platform/index.d.ts +89 -82
  114. package/dist/cli/platform/index.d.ts.map +1 -1
  115. package/dist/cli/platform/index.js +27 -33
  116. package/dist/cli/platform/index.js.map +1 -1
  117. package/dist/cli/platform-lib/index.d.ts +351 -404
  118. package/dist/cli/platform-lib/index.d.ts.map +1 -1
  119. package/dist/cli/platform-lib/index.js +218 -239
  120. package/dist/cli/platform-lib/index.js.map +1 -1
  121. package/dist/cli/vendor/index.d.ts +17 -41
  122. package/dist/cli/vendor/index.d.ts.map +1 -1
  123. package/dist/cli/vendor/index.js +10 -13
  124. package/dist/cli/vendor/index.js.map +1 -1
  125. package/dist/command/index.d.ts +83 -195
  126. package/dist/command/index.d.ts.map +1 -1
  127. package/dist/command/index.js +160 -563
  128. package/dist/command/index.js.map +1 -1
  129. package/dist/core/index.browser.js +845 -859
  130. package/dist/core/index.browser.js.map +1 -1
  131. package/dist/core/index.d.ts +787 -527
  132. package/dist/core/index.d.ts.map +1 -1
  133. package/dist/core/index.js +845 -859
  134. package/dist/core/index.js.map +1 -1
  135. package/dist/core/index.native.js +845 -859
  136. package/dist/core/index.native.js.map +1 -1
  137. package/dist/core/index.workerd.js +845 -859
  138. package/dist/core/index.workerd.js.map +1 -1
  139. package/dist/crypto/index.browser.js +1 -1
  140. package/dist/crypto/index.browser.js.map +1 -1
  141. package/dist/crypto/index.d.ts +3 -4
  142. package/dist/crypto/index.d.ts.map +1 -1
  143. package/dist/crypto/index.js +6 -3
  144. package/dist/crypto/index.js.map +1 -1
  145. package/dist/datetime/index.d.ts +12 -2
  146. package/dist/datetime/index.d.ts.map +1 -1
  147. package/dist/datetime/index.js +6 -1
  148. package/dist/datetime/index.js.map +1 -1
  149. package/dist/email/brevo/index.d.ts +0 -1
  150. package/dist/email/brevo/index.d.ts.map +1 -1
  151. package/dist/email/brevo/index.js +4 -4
  152. package/dist/email/brevo/index.js.map +1 -1
  153. package/dist/email/cloudflare/index.d.ts +0 -1
  154. package/dist/email/cloudflare/index.d.ts.map +1 -1
  155. package/dist/email/cloudflare/index.js +2 -2
  156. package/dist/email/cloudflare/index.js.map +1 -1
  157. package/dist/email/core/index.d.ts +15 -7
  158. package/dist/email/core/index.d.ts.map +1 -1
  159. package/dist/email/core/index.js +14 -5
  160. package/dist/email/core/index.js.map +1 -1
  161. package/dist/email/core/index.workerd.js +5 -1
  162. package/dist/email/core/index.workerd.js.map +1 -1
  163. package/dist/email/smtp/index.d.ts +8 -9
  164. package/dist/email/smtp/index.d.ts.map +1 -1
  165. package/dist/email/smtp/index.js +702 -479
  166. package/dist/email/smtp/index.js.map +1 -1
  167. package/dist/fake/index.d.ts +1580 -1238
  168. package/dist/fake/index.d.ts.map +1 -1
  169. package/dist/fake/index.js +11728 -32131
  170. package/dist/fake/index.js.map +1 -1
  171. package/dist/lock/core/index.d.ts +13 -9
  172. package/dist/lock/core/index.d.ts.map +1 -1
  173. package/dist/lock/core/index.js +5 -5
  174. package/dist/lock/core/index.js.map +1 -1
  175. package/dist/lock/redis/index.d.ts +0 -1
  176. package/dist/lock/redis/index.d.ts.map +1 -1
  177. package/dist/lock/redis/index.js.map +1 -1
  178. package/dist/logger/index.d.ts +81 -69
  179. package/dist/logger/index.d.ts.map +1 -1
  180. package/dist/logger/index.js +123 -56
  181. package/dist/logger/index.js.map +1 -1
  182. package/dist/mcp/index.d.ts +27 -90
  183. package/dist/mcp/index.d.ts.map +1 -1
  184. package/dist/mcp/index.js +42 -70
  185. package/dist/mcp/index.js.map +1 -1
  186. package/dist/orm/core/index.browser.js +54 -40
  187. package/dist/orm/core/index.browser.js.map +1 -1
  188. package/dist/orm/core/index.bun.js +140 -106
  189. package/dist/orm/core/index.bun.js.map +1 -1
  190. package/dist/orm/core/index.d.ts +145 -150
  191. package/dist/orm/core/index.d.ts.map +1 -1
  192. package/dist/orm/core/index.js +144 -109
  193. package/dist/orm/core/index.js.map +1 -1
  194. package/dist/orm/postgres/index.bun.js +64 -54
  195. package/dist/orm/postgres/index.bun.js.map +1 -1
  196. package/dist/orm/postgres/index.d.ts +36 -76
  197. package/dist/orm/postgres/index.d.ts.map +1 -1
  198. package/dist/orm/postgres/index.js +67 -57
  199. package/dist/orm/postgres/index.js.map +1 -1
  200. package/dist/queue/core/index.d.ts +62 -75
  201. package/dist/queue/core/index.d.ts.map +1 -1
  202. package/dist/queue/core/index.js +48 -71
  203. package/dist/queue/core/index.js.map +1 -1
  204. package/dist/queue/core/index.workerd.js +48 -71
  205. package/dist/queue/core/index.workerd.js.map +1 -1
  206. package/dist/queue/redis/index.d.ts +3 -4
  207. package/dist/queue/redis/index.d.ts.map +1 -1
  208. package/dist/queue/redis/index.js +2 -2
  209. package/dist/queue/redis/index.js.map +1 -1
  210. package/dist/react/auth/index.browser.js.map +1 -1
  211. package/dist/react/auth/index.d.ts +7 -4
  212. package/dist/react/auth/index.d.ts.map +1 -1
  213. package/dist/react/auth/index.js.map +1 -1
  214. package/dist/react/core/index.d.ts +87 -5
  215. package/dist/react/core/index.d.ts.map +1 -1
  216. package/dist/react/core/index.js +170 -23
  217. package/dist/react/core/index.js.map +1 -1
  218. package/dist/react/form/index.d.ts +4 -5
  219. package/dist/react/form/index.d.ts.map +1 -1
  220. package/dist/react/form/index.js +91 -56
  221. package/dist/react/form/index.js.map +1 -1
  222. package/dist/react/head/index.browser.js.map +1 -1
  223. package/dist/react/head/index.d.ts +0 -1
  224. package/dist/react/head/index.d.ts.map +1 -1
  225. package/dist/react/head/index.js.map +1 -1
  226. package/dist/react/i18n/index.d.ts +4 -5
  227. package/dist/react/i18n/index.d.ts.map +1 -1
  228. package/dist/react/i18n/index.js +2 -2
  229. package/dist/react/i18n/index.js.map +1 -1
  230. package/dist/react/intro/index.d.ts +1 -4
  231. package/dist/react/intro/index.d.ts.map +1 -1
  232. package/dist/react/intro/index.js.map +1 -1
  233. package/dist/react/router/index.browser.js +60 -24
  234. package/dist/react/router/index.browser.js.map +1 -1
  235. package/dist/react/router/index.d.ts +378 -377
  236. package/dist/react/router/index.d.ts.map +1 -1
  237. package/dist/react/router/index.js +77 -41
  238. package/dist/react/router/index.js.map +1 -1
  239. package/dist/react/sitemap/index.d.ts +0 -1
  240. package/dist/react/sitemap/index.d.ts.map +1 -1
  241. package/dist/react/sitemap/index.js.map +1 -1
  242. package/dist/react/testing/index.d.ts +4 -5
  243. package/dist/react/testing/index.d.ts.map +1 -1
  244. package/dist/react/testing/index.js +41 -15
  245. package/dist/react/testing/index.js.map +1 -1
  246. package/dist/react/testing/{chunk-BpyX8vjI.js → rolldown-runtime-Bl3dcgcQ.js} +1 -1
  247. package/dist/react/ui/index.d.ts +35 -34
  248. package/dist/react/ui/index.d.ts.map +1 -1
  249. package/dist/react/ui/index.js +12 -17
  250. package/dist/react/ui/index.js.map +1 -1
  251. package/dist/redis/index.bun.js +5 -5
  252. package/dist/redis/index.bun.js.map +1 -1
  253. package/dist/redis/index.d.ts +6 -7
  254. package/dist/redis/index.d.ts.map +1 -1
  255. package/dist/redis/index.js +6 -6
  256. package/dist/redis/index.js.map +1 -1
  257. package/dist/retry/index.d.ts +0 -1
  258. package/dist/retry/index.d.ts.map +1 -1
  259. package/dist/retry/index.js.map +1 -1
  260. package/dist/router/index.d.ts.map +1 -1
  261. package/dist/router/index.js.map +1 -1
  262. package/dist/scheduler/index.d.ts +4 -12
  263. package/dist/scheduler/index.d.ts.map +1 -1
  264. package/dist/scheduler/index.js +9 -4
  265. package/dist/scheduler/index.js.map +1 -1
  266. package/dist/scheduler/index.workerd.js +9 -4
  267. package/dist/scheduler/index.workerd.js.map +1 -1
  268. package/dist/security/index.browser.js +30 -28
  269. package/dist/security/index.browser.js.map +1 -1
  270. package/dist/security/index.d.ts +113 -44
  271. package/dist/security/index.d.ts.map +1 -1
  272. package/dist/security/index.js +452 -37
  273. package/dist/security/index.js.map +1 -1
  274. package/dist/server/auth/index.browser.js +19 -19
  275. package/dist/server/auth/index.browser.js.map +1 -1
  276. package/dist/server/auth/index.d.ts +198 -274
  277. package/dist/server/auth/index.d.ts.map +1 -1
  278. package/dist/server/auth/index.js +83 -621
  279. package/dist/server/auth/index.js.map +1 -1
  280. package/dist/server/cookies/index.browser.js +103 -5
  281. package/dist/server/cookies/index.browser.js.map +1 -1
  282. package/dist/server/cookies/index.d.ts +72 -5
  283. package/dist/server/cookies/index.d.ts.map +1 -1
  284. package/dist/server/cookies/index.js +103 -9
  285. package/dist/server/cookies/index.js.map +1 -1
  286. package/dist/server/core/index.browser.js +22 -27
  287. package/dist/server/core/index.browser.js.map +1 -1
  288. package/dist/server/core/index.d.ts +116 -85
  289. package/dist/server/core/index.d.ts.map +1 -1
  290. package/dist/server/core/index.js +105 -118
  291. package/dist/server/core/index.js.map +1 -1
  292. package/dist/server/cors/index.d.ts +9 -10
  293. package/dist/server/cors/index.d.ts.map +1 -1
  294. package/dist/server/cors/index.js +14 -26
  295. package/dist/server/cors/index.js.map +1 -1
  296. package/dist/server/etag/index.d.ts +2 -3
  297. package/dist/server/etag/index.d.ts.map +1 -1
  298. package/dist/server/etag/index.js.map +1 -1
  299. package/dist/server/health/index.d.ts +18 -19
  300. package/dist/server/health/index.d.ts.map +1 -1
  301. package/dist/server/health/index.js +6 -6
  302. package/dist/server/health/index.js.map +1 -1
  303. package/dist/server/links/index.browser.js +15 -18
  304. package/dist/server/links/index.browser.js.map +1 -1
  305. package/dist/server/links/index.d.ts +66 -67
  306. package/dist/server/links/index.d.ts.map +1 -1
  307. package/dist/server/links/index.js +29 -32
  308. package/dist/server/links/index.js.map +1 -1
  309. package/dist/server/metrics/index.d.ts +0 -1
  310. package/dist/server/metrics/index.d.ts.map +1 -1
  311. package/dist/server/metrics/index.js +10 -3
  312. package/dist/server/metrics/index.js.map +1 -1
  313. package/dist/server/proxy/index.d.ts +0 -1
  314. package/dist/server/proxy/index.d.ts.map +1 -1
  315. package/dist/server/proxy/index.js.map +1 -1
  316. package/dist/server/rate-limit/index.d.ts +8 -9
  317. package/dist/server/rate-limit/index.d.ts.map +1 -1
  318. package/dist/server/rate-limit/index.js +6 -12
  319. package/dist/server/rate-limit/index.js.map +1 -1
  320. package/dist/server/static/index.d.ts +0 -1
  321. package/dist/server/static/index.d.ts.map +1 -1
  322. package/dist/server/static/index.js.map +1 -1
  323. package/dist/server/swagger/index.d.ts +4 -4
  324. package/dist/server/swagger/index.d.ts.map +1 -1
  325. package/dist/server/swagger/index.js +37 -25
  326. package/dist/server/swagger/index.js.map +1 -1
  327. package/dist/sms/index.d.ts +0 -1
  328. package/dist/sms/index.d.ts.map +1 -1
  329. package/dist/sms/index.js.map +1 -1
  330. package/dist/system/index.browser.js.map +1 -1
  331. package/dist/system/index.d.ts +0 -1
  332. package/dist/system/index.d.ts.map +1 -1
  333. package/dist/system/index.js +2 -1
  334. package/dist/system/index.js.map +1 -1
  335. package/dist/system/index.workerd.js.map +1 -1
  336. package/dist/topic/core/index.d.ts +19 -20
  337. package/dist/topic/core/index.d.ts.map +1 -1
  338. package/dist/topic/core/index.js +8 -8
  339. package/dist/topic/core/index.js.map +1 -1
  340. package/dist/topic/redis/index.d.ts +3 -4
  341. package/dist/topic/redis/index.d.ts.map +1 -1
  342. package/dist/topic/redis/index.js +2 -2
  343. package/dist/topic/redis/index.js.map +1 -1
  344. package/package.json +22 -35
  345. package/src/api/audits/__tests__/AuditJobs.spec.ts +83 -0
  346. package/src/api/audits/__tests__/AuditService.spec.ts +139 -1
  347. package/src/api/audits/controllers/AdminAuditController.ts +41 -41
  348. package/src/api/audits/entities/audits.ts +22 -22
  349. package/src/api/audits/index.ts +6 -1
  350. package/src/api/audits/jobs/AuditJobs.ts +29 -0
  351. package/src/api/audits/parameters/AuditParameters.ts +51 -0
  352. package/src/api/audits/primitives/$audit.ts +24 -0
  353. package/src/api/audits/schemas/auditQuerySchema.ts +13 -13
  354. package/src/api/audits/schemas/createAuditSchema.ts +18 -18
  355. package/src/api/audits/services/AuditService.ts +79 -7
  356. package/src/api/files/__tests__/FileController.spec.ts +5 -5
  357. package/src/api/files/__tests__/FileJobs.spec.ts +6 -0
  358. package/src/api/files/controllers/FileController.ts +25 -25
  359. package/src/api/files/entities/files.ts +15 -15
  360. package/src/api/files/schemas/fileCreatorSummarySchema.ts +7 -7
  361. package/src/api/files/schemas/fileQuerySchema.ts +9 -9
  362. package/src/api/files/schemas/fileResourceSchema.ts +7 -9
  363. package/src/api/files/schemas/storageStatsSchema.ts +13 -13
  364. package/src/api/jobs/__tests__/$job-hardening.spec.ts +289 -0
  365. package/src/api/jobs/__tests__/$job.spec.ts +18 -18
  366. package/src/api/jobs/controllers/AdminJobController.ts +8 -8
  367. package/src/api/jobs/entities/jobExecutionEntity.ts +29 -19
  368. package/src/api/jobs/providers/JobProvider.ts +128 -12
  369. package/src/api/jobs/providers/JobQueueProvider.ts +2 -2
  370. package/src/api/jobs/schemas/jobConfigAtom.ts +22 -22
  371. package/src/api/jobs/schemas/jobExecutionQuerySchema.ts +6 -6
  372. package/src/api/jobs/schemas/jobExecutionResourceSchema.ts +11 -15
  373. package/src/api/jobs/schemas/jobRegistrationSchema.ts +20 -19
  374. package/src/api/jobs/schemas/triggerJobSchema.ts +3 -3
  375. package/src/api/jobs/services/JobService.ts +6 -6
  376. package/src/api/keys/__tests__/ApiKeyService.spec.ts +2 -2
  377. package/src/api/keys/controllers/AdminApiKeyController.ts +10 -10
  378. package/src/api/keys/entities/apiKeyEntity.ts +15 -15
  379. package/src/api/keys/schemas/adminApiKeyQuerySchema.ts +4 -4
  380. package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +15 -15
  381. package/src/api/keys/schemas/createApiKeyBodySchema.ts +5 -5
  382. package/src/api/keys/schemas/createApiKeyResponseSchema.ts +9 -9
  383. package/src/api/keys/schemas/listApiKeyResponseSchema.ts +13 -13
  384. package/src/api/keys/schemas/revokeApiKeyParamsSchema.ts +3 -3
  385. package/src/api/keys/schemas/revokeApiKeyResponseSchema.ts +3 -3
  386. package/src/api/notifications/__tests__/AlephaApiNotifications.spec.ts +2 -2
  387. package/src/api/notifications/controllers/AdminNotificationController.ts +38 -14
  388. package/src/api/notifications/jobs/NotificationJobs.ts +7 -6
  389. package/src/api/notifications/primitives/$notification.ts +43 -4
  390. package/src/api/notifications/schemas/notificationContactPreferencesSchema.ts +4 -4
  391. package/src/api/notifications/schemas/notificationContactSchema.ts +7 -7
  392. package/src/api/notifications/schemas/notificationDetailResourceSchema.ts +9 -11
  393. package/src/api/notifications/schemas/notificationPayloadSchema.ts +11 -9
  394. package/src/api/notifications/schemas/notificationQuerySchema.ts +6 -6
  395. package/src/api/notifications/schemas/notificationResourceSchema.ts +14 -14
  396. package/src/api/notifications/services/NotificationSenderService.ts +38 -2
  397. package/src/api/oauth/__tests__/OAuthClientService.spec.ts +42 -0
  398. package/src/api/oauth/__tests__/OAuthController.spec.ts +128 -0
  399. package/src/api/oauth/controllers/OAuthController.ts +132 -12
  400. package/src/api/oauth/entities/oauthClientEntity.ts +29 -12
  401. package/src/api/oauth/helpers/oauthMetadata.ts +1 -0
  402. package/src/api/oauth/helpers/oidcMetadata.ts +19 -0
  403. package/src/api/oauth/index.ts +1 -0
  404. package/src/api/oauth/schemas/authorizeDecisionBodySchema.ts +12 -11
  405. package/src/api/oauth/schemas/authorizeQuerySchema.ts +12 -10
  406. package/src/api/oauth/schemas/registerClientBodySchema.ts +10 -11
  407. package/src/api/oauth/schemas/tokenRequestBodySchema.ts +9 -8
  408. package/src/api/oauth/services/OAuthClientService.ts +228 -15
  409. package/src/api/organizations/controllers/AdminOrganizationController.ts +8 -8
  410. package/src/api/organizations/entities/organizations.ts +6 -6
  411. package/src/api/organizations/schemas/createOrganizationSchema.ts +5 -5
  412. package/src/api/organizations/schemas/organizationQuerySchema.ts +4 -4
  413. package/src/api/organizations/schemas/updateOrganizationSchema.ts +1 -2
  414. package/src/api/parameters/__tests__/$parameter.spec.ts +229 -50
  415. package/src/api/parameters/controllers/AdminParameterController.ts +9 -12
  416. package/src/api/parameters/entities/parameters.ts +29 -16
  417. package/src/api/parameters/primitives/$parameter.ts +3 -3
  418. package/src/api/parameters/schemas/activateParameterBodySchema.ts +4 -4
  419. package/src/api/parameters/schemas/createParameterVersionBodySchema.ts +15 -15
  420. package/src/api/parameters/schemas/parameterCreatorSummarySchema.ts +7 -7
  421. package/src/api/parameters/schemas/parameterCurrentResponseSchema.ts +7 -7
  422. package/src/api/parameters/schemas/parameterHistoryResponseSchema.ts +3 -3
  423. package/src/api/parameters/schemas/parameterNameParamSchema.ts +2 -3
  424. package/src/api/parameters/schemas/parameterNamesResponseSchema.ts +3 -3
  425. package/src/api/parameters/schemas/parameterResponseSchema.ts +3 -3
  426. package/src/api/parameters/schemas/parameterStatusSchema.ts +2 -2
  427. package/src/api/parameters/schemas/parameterTreeNodeSchema.ts +6 -6
  428. package/src/api/parameters/schemas/parameterVersionParamSchema.ts +5 -6
  429. package/src/api/parameters/schemas/parameterVersionResponseSchema.ts +3 -3
  430. package/src/api/parameters/schemas/rollbackParameterBodySchema.ts +6 -9
  431. package/src/api/parameters/services/ParameterProvider.ts +152 -65
  432. package/src/api/payments/controllers/AdminPaymentController.ts +7 -7
  433. package/src/api/payments/controllers/MockCheckoutController.ts +79 -28
  434. package/src/api/payments/controllers/PaymentController.ts +4 -4
  435. package/src/api/payments/entities/paymentIntents.ts +11 -11
  436. package/src/api/payments/entities/paymentMethods.ts +11 -11
  437. package/src/api/payments/entities/refunds.ts +9 -9
  438. package/src/api/payments/providers/PaymentProvider.ts +18 -0
  439. package/src/api/payments/schemas/intentSchemas.ts +25 -25
  440. package/src/api/payments/schemas/paymentMethodSchemas.ts +3 -3
  441. package/src/api/payments/services/PaymentService.ts +60 -3
  442. package/src/api/subscriptions/__tests__/SubscriptionService.spec.ts +14 -0
  443. package/src/api/subscriptions/controllers/AdminSubscriptionController.ts +11 -11
  444. package/src/api/subscriptions/controllers/SubscriptionController.ts +5 -4
  445. package/src/api/subscriptions/entities/subscriptionEvents.ts +15 -15
  446. package/src/api/subscriptions/entities/subscriptions.ts +22 -22
  447. package/src/api/subscriptions/notifications/SubscriptionNotifications.ts +22 -22
  448. package/src/api/subscriptions/schemas/cancelSubscriptionSchema.ts +4 -4
  449. package/src/api/subscriptions/schemas/changePlanSchema.ts +5 -5
  450. package/src/api/subscriptions/schemas/createSubscriptionSchema.ts +14 -7
  451. package/src/api/subscriptions/schemas/entitlementsSchema.ts +10 -10
  452. package/src/api/subscriptions/schemas/mrrSchema.ts +9 -9
  453. package/src/api/subscriptions/schemas/planDefinitionSchema.ts +21 -21
  454. package/src/api/subscriptions/schemas/planResourceSchema.ts +19 -19
  455. package/src/api/subscriptions/schemas/subscriptionQuerySchema.ts +8 -8
  456. package/src/api/subscriptions/schemas/subscriptionSettingsSchema.ts +7 -7
  457. package/src/api/subscriptions/schemas/subscriptionStatsSchema.ts +17 -17
  458. package/src/api/subscriptions/services/SubscriptionConfig.ts +2 -2
  459. package/src/api/users/__tests__/ApiKeys-integration.spec.ts +11 -11
  460. package/src/api/users/atoms/realmAuthSettingsAtom.ts +111 -119
  461. package/src/api/users/controllers/AdminIdentityController.ts +29 -19
  462. package/src/api/users/controllers/AdminSessionController.ts +37 -27
  463. package/src/api/users/controllers/AdminUserController.ts +75 -53
  464. package/src/api/users/controllers/MySessionController.ts +125 -0
  465. package/src/api/users/controllers/RealmController.ts +9 -10
  466. package/src/api/users/controllers/UserController.ts +55 -55
  467. package/src/api/users/entities/identities.ts +8 -8
  468. package/src/api/users/entities/sessions.ts +17 -17
  469. package/src/api/users/entities/users.ts +17 -17
  470. package/src/api/users/index.ts +3 -0
  471. package/src/api/users/notifications/UserNotifications.ts +76 -24
  472. package/src/api/users/primitives/$realm.ts +12 -26
  473. package/src/api/users/providers/RealmProvider.ts +0 -15
  474. package/src/api/users/schemas/completePasswordResetRequestSchema.ts +8 -12
  475. package/src/api/users/schemas/completeRegistrationRequestSchema.ts +17 -20
  476. package/src/api/users/schemas/createUserSchema.ts +2 -2
  477. package/src/api/users/schemas/identityQuerySchema.ts +4 -4
  478. package/src/api/users/schemas/identityResourceSchema.ts +3 -2
  479. package/src/api/users/schemas/loginSchema.ts +4 -4
  480. package/src/api/users/schemas/passwordResetIntentResponseSchema.ts +6 -8
  481. package/src/api/users/schemas/realmConfigSchema.ts +10 -24
  482. package/src/api/users/schemas/registerQuerySchema.ts +6 -6
  483. package/src/api/users/schemas/registerRequestSchema.ts +21 -43
  484. package/src/api/users/schemas/registerResponseSchema.ts +2 -2
  485. package/src/api/users/schemas/registerSchema.ts +13 -31
  486. package/src/api/users/schemas/registrationIntentResponseSchema.ts +19 -23
  487. package/src/api/users/schemas/resetPasswordSchema.ts +10 -17
  488. package/src/api/users/schemas/sessionQuerySchema.ts +3 -3
  489. package/src/api/users/schemas/sessionResourceSchema.ts +25 -25
  490. package/src/api/users/schemas/updateUserSchema.ts +3 -4
  491. package/src/api/users/schemas/userQuerySchema.ts +7 -7
  492. package/src/api/users/services/RegistrationService.ts +25 -11
  493. package/src/api/users/services/UserService.ts +12 -6
  494. package/src/api/verifications/__tests__/CodeVerification.spec.ts +63 -101
  495. package/src/api/verifications/__tests__/LinkVerification.spec.ts +23 -92
  496. package/src/api/verifications/controllers/VerificationController.ts +13 -27
  497. package/src/api/verifications/entities/verifications.ts +13 -14
  498. package/src/api/verifications/schemas/requestVerificationCodeResponseSchema.ts +17 -14
  499. package/src/api/verifications/schemas/validateVerificationCodeResponseSchema.ts +9 -10
  500. package/src/api/verifications/schemas/verificationSettingsSchema.ts +65 -66
  501. package/src/api/verifications/schemas/verificationTypeEnumSchema.ts +2 -2
  502. package/src/api/verifications/services/VerificationService.ts +12 -0
  503. package/src/background/__tests__/BackgroundTaskProvider.spec.ts +36 -0
  504. package/src/batch/__tests__/$batch.spec.ts +22 -22
  505. package/src/batch/__tests__/startup-buffering.spec.ts +9 -9
  506. package/src/bin/index.ts +1 -1
  507. package/src/bucket/__tests__/TenantScopedBucket.spec.ts +60 -0
  508. package/src/bucket/providers/LocalFileStorageProvider.ts +14 -6
  509. package/src/bucket/providers/MemoryFileStorageProvider.ts +18 -7
  510. package/src/bucket/providers/R2FileStorageProvider.ts +14 -6
  511. package/src/bucket/providers/S3FileStorageProvider.ts +31 -15
  512. package/src/cache/core/primitives/$cache.ts +7 -10
  513. package/src/cache/database/entities/cacheEntries.ts +16 -27
  514. package/src/cache/database/providers/DatabaseCacheProvider.ts +15 -13
  515. package/src/cache/redis/providers/RedisCacheProvider.ts +6 -6
  516. package/src/captcha/providers/TurnstileCaptchaProvider.ts +4 -4
  517. package/src/cli/core/__tests__/BuildCloudflareTask.spec.ts +178 -0
  518. package/src/cli/core/__tests__/BuildDockerTask.spec.ts +0 -2
  519. package/src/cli/core/__tests__/DbCommand.spec.ts +108 -0
  520. package/src/cli/core/atoms/appEntryOptions.ts +5 -5
  521. package/src/cli/core/atoms/buildOptions.ts +76 -76
  522. package/src/cli/core/atoms/changelogOptions.ts +3 -3
  523. package/src/cli/core/atoms/devOptions.ts +3 -3
  524. package/src/cli/core/commands/build.ts +36 -39
  525. package/src/cli/core/commands/db.ts +171 -83
  526. package/src/cli/core/commands/dev.ts +8 -8
  527. package/src/cli/core/commands/gen/changelog.ts +12 -14
  528. package/src/cli/core/commands/gen/env.ts +6 -6
  529. package/src/cli/core/commands/gen/openapi.ts +6 -6
  530. package/src/cli/core/commands/init.ts +28 -33
  531. package/src/cli/core/commands/pack.ts +10 -10
  532. package/src/cli/core/commands/root.ts +7 -8
  533. package/src/cli/core/commands/test.ts +17 -20
  534. package/src/cli/core/tasks/BuildCloudflareTask.ts +103 -230
  535. package/src/cli/core/templates/apiHelloResponseSchemaTs.ts +4 -4
  536. package/src/cli/devtools/atoms/devtoolsOptions.ts +6 -6
  537. package/src/cli/i18n/atoms/i18nOptions.ts +8 -8
  538. package/src/cli/platform/commands/SecretsCommand.ts +24 -25
  539. package/src/cli/platform/commands/platform.ts +40 -46
  540. package/src/cli/platform/index.ts +1 -1
  541. package/src/cli/platform-lib/__tests__/CloudflareAdapter.spec.ts +0 -4
  542. package/src/cli/platform-lib/__tests__/PlatformInspector.spec.ts +10 -3
  543. package/src/cli/platform-lib/__tests__/VercelAdapter.spec.ts +0 -2
  544. package/src/cli/platform-lib/adapters/CloudflareAdapter.ts +13 -14
  545. package/src/cli/platform-lib/adapters/VercelAdapter.ts +6 -11
  546. package/src/cli/platform-lib/atoms/platformOptions.ts +46 -25
  547. package/src/cli/platform-lib/schemas/cloudflare.ts +87 -87
  548. package/src/cli/platform-lib/schemas/platform.ts +51 -51
  549. package/src/cli/platform-lib/schemas/vercel.ts +28 -28
  550. package/src/cli/platform-lib/services/CloudflareApi.ts +5 -5
  551. package/src/cli/platform-lib/services/VercelApi.ts +4 -4
  552. package/src/cli/platform-lib/services/VercelCli.ts +6 -15
  553. package/src/cli/platform-lib/services/WranglerApi.ts +6 -15
  554. package/src/cli/vendor/atoms/vendorOptions.ts +9 -9
  555. package/src/cli/vendor/commands/VendorCommand.ts +11 -12
  556. package/src/command/__tests__/$command.spec.ts +82 -83
  557. package/src/command/__tests__/Asker.spec.ts +6 -13
  558. package/src/command/__tests__/CliProvider.spec.ts +136 -149
  559. package/src/command/__tests__/Runner.spec.ts +86 -110
  560. package/src/command/helpers/Asker.ts +23 -58
  561. package/src/command/helpers/Runner.ts +34 -110
  562. package/src/command/index.ts +4 -9
  563. package/src/command/primitives/$command.ts +10 -10
  564. package/src/command/providers/CliProvider.ts +183 -161
  565. package/src/core/Alepha.ts +62 -13
  566. package/src/core/__tests__/$atom.spec.ts +52 -3
  567. package/src/core/__tests__/$computed.spec.ts +129 -0
  568. package/src/core/__tests__/$env.spec.ts +13 -13
  569. package/src/core/__tests__/$inject.spec.ts +4 -4
  570. package/src/core/__tests__/$module.spec.ts +1 -1
  571. package/src/core/__tests__/Alepha-graph.spec.ts +1 -1
  572. package/src/core/__tests__/Alepha-parseEnv.spec.ts +32 -32
  573. package/src/core/__tests__/Alepha-start.spec.ts +3 -3
  574. package/src/core/__tests__/CodecManager.spec.ts +113 -94
  575. package/src/core/__tests__/KeylessJsonSchemaCodec.spec.ts +138 -138
  576. package/src/core/__tests__/SchemaValidator.spec.ts +43 -44
  577. package/src/core/__tests__/StateManager.persist.browser.spec.ts +87 -0
  578. package/src/core/__tests__/StateManager.spec.ts +423 -0
  579. package/src/core/__tests__/TypeBox-usecases.spec.ts +8 -8
  580. package/src/core/__tests__/TypeProvider.spec.ts +314 -309
  581. package/src/core/__tests__/dump.spec.ts +6 -6
  582. package/src/core/__tests__/pagination.spec.ts +4 -4
  583. package/src/core/__tests__/scoped-after-start.spec.ts +43 -0
  584. package/src/core/errors/TypeBoxError.ts +10 -4
  585. package/src/core/helpers/FileLike.ts +5 -5
  586. package/src/core/helpers/coerceStrings.ts +70 -0
  587. package/src/core/helpers/jsonSchemaToZod.ts +112 -0
  588. package/src/core/index.shared.ts +4 -1
  589. package/src/core/primitives/$atom.ts +95 -27
  590. package/src/core/primitives/$computed.ts +148 -0
  591. package/src/core/primitives/$env.ts +5 -5
  592. package/src/core/primitives/$state.ts +1 -1
  593. package/src/core/providers/AlsProvider.ts +26 -0
  594. package/src/core/providers/CodecManager.ts +1 -2
  595. package/src/core/providers/JsonSchemaCodec.ts +1 -2
  596. package/src/core/providers/KeylessJsonSchemaCodec.ts +82 -57
  597. package/src/core/providers/SchemaValidator.ts +48 -158
  598. package/src/core/providers/StateManager.ts +383 -9
  599. package/src/core/providers/TypeProvider.ts +80 -734
  600. package/src/core/providers/ZodProvider.ts +380 -0
  601. package/src/core/providers/zodAugment.ts +69 -0
  602. package/src/core/schemas/pageQuerySchema.ts +19 -21
  603. package/src/core/schemas/pageSchema.ts +47 -57
  604. package/src/crypto/__tests__/SecretProvider.spec.ts +31 -0
  605. package/src/crypto/providers/SecretProvider.ts +16 -10
  606. package/src/datetime/primitives/$throttle.ts +6 -1
  607. package/src/email/brevo/providers/BrevoEmailProvider.ts +4 -4
  608. package/src/email/cloudflare/providers/CloudflareEmailProvider.ts +6 -6
  609. package/src/email/core/index.ts +7 -2
  610. package/src/email/core/primitives/$email.ts +5 -1
  611. package/src/email/core/providers/LocalEmailProvider.ts +5 -5
  612. package/src/email/smtp/providers/NodemailerEmailProvider.ts +41 -52
  613. package/src/fake/__tests__/FakeProvider.spec.ts +110 -110
  614. package/src/fake/__tests__/keyName.example.ts +21 -21
  615. package/src/fake/__tests__/keyName.spec.ts +41 -41
  616. package/src/fake/__tests__/module.example.ts +8 -8
  617. package/src/fake/providers/FakeProvider.ts +122 -121
  618. package/src/lock/core/__tests__/lock-mutual-exclusion.spec.ts +44 -0
  619. package/src/lock/core/index.ts +1 -0
  620. package/src/lock/core/primitives/$lock.ts +13 -6
  621. package/src/logger/__tests__/CliFormatterProvider.spec.ts +76 -0
  622. package/src/logger/__tests__/Logger.spec.ts +49 -0
  623. package/src/logger/index.ts +25 -18
  624. package/src/logger/providers/CliFormatterProvider.ts +75 -0
  625. package/src/logger/schemas/logEntrySchema.ts +10 -10
  626. package/src/logger/services/Logger.ts +18 -0
  627. package/src/mcp/__tests__/$prompt.spec.ts +21 -23
  628. package/src/mcp/__tests__/$tool.spec.ts +22 -22
  629. package/src/mcp/__tests__/McpServerProvider.spec.ts +11 -11
  630. package/src/mcp/__tests__/StreamableHttpMcpTransport.spec.ts +2 -2
  631. package/src/mcp/__tests__/integration.spec.ts +33 -33
  632. package/src/mcp/primitives/$prompt.ts +11 -9
  633. package/src/mcp/primitives/$tool.ts +27 -86
  634. package/src/mcp/transports/StreamableHttpMcpTransport.ts +7 -7
  635. package/src/orm/__tests__/$repository-tests.ts +133 -27
  636. package/src/orm/__tests__/$repository.spec.ts +23 -0
  637. package/src/orm/__tests__/$transactional-tests.ts +4 -4
  638. package/src/orm/__tests__/ModelBuilder-tests.ts +28 -28
  639. package/src/orm/__tests__/ModelBuilder.spec.ts +124 -106
  640. package/src/orm/__tests__/QueryManager.spec.ts +5 -5
  641. package/src/orm/__tests__/delete-returning-tests.ts +11 -11
  642. package/src/orm/__tests__/deletedAt-tests.ts +3 -3
  643. package/src/orm/__tests__/enums.spec.ts +29 -25
  644. package/src/orm/__tests__/execute-tests.ts +8 -8
  645. package/src/orm/__tests__/fixtures/bigEntitySchema.ts +48 -48
  646. package/src/orm/__tests__/fixtures/userEntitySchema.ts +6 -6
  647. package/src/orm/__tests__/joins-tests.ts +30 -30
  648. package/src/orm/__tests__/organization-tests.ts +105 -3
  649. package/src/orm/__tests__/organization.spec.ts +46 -0
  650. package/src/orm/__tests__/orm-errors.spec.ts +10 -10
  651. package/src/orm/__tests__/orm-next-tests.ts +29 -29
  652. package/src/orm/__tests__/orm-showcase-tests.ts +9 -9
  653. package/src/orm/__tests__/primaryKey.spec.ts +4 -4
  654. package/src/orm/__tests__/query-date-encoding-tests.ts +17 -17
  655. package/src/orm/__tests__/ref-auto-onDelete.spec.ts +14 -14
  656. package/src/orm/__tests__/references.spec.ts +7 -7
  657. package/src/orm/__tests__/security.spec.ts +17 -17
  658. package/src/orm/__tests__/string-operators-tests.ts +5 -5
  659. package/src/orm/__tests__/timestamps-tests.ts +14 -14
  660. package/src/orm/__tests__/validation-tests.ts +5 -5
  661. package/src/orm/core/__tests__/BunSqliteProvider.bun.spec.ts +8 -8
  662. package/src/orm/core/constants/PG_SYMBOLS.ts +13 -1
  663. package/src/orm/core/entities/alephaSequences.ts +8 -8
  664. package/src/orm/core/helpers/pgAttr.ts +4 -4
  665. package/src/orm/core/primitives/$entity.ts +10 -6
  666. package/src/orm/core/providers/DatabaseTypeProvider.ts +46 -53
  667. package/src/orm/core/providers/drivers/BunSqliteProvider.ts +8 -8
  668. package/src/orm/core/providers/drivers/CloudflareD1Provider.ts +3 -5
  669. package/src/orm/core/providers/drivers/NodeSqliteProvider.ts +8 -8
  670. package/src/orm/core/schemas/databaseEnvSchema.ts +4 -4
  671. package/src/orm/core/schemas/insertSchema.ts +14 -18
  672. package/src/orm/core/schemas/legacyIdSchema.ts +2 -2
  673. package/src/orm/core/schemas/updateSchema.ts +10 -16
  674. package/src/orm/core/services/PgRelationManager.ts +2 -2
  675. package/src/orm/core/services/QueryManager.ts +13 -2
  676. package/src/orm/core/services/Repository.ts +88 -33
  677. package/src/orm/core/services/SqliteModelBuilder.ts +38 -45
  678. package/src/orm/postgres/__tests__/BunPostgresProvider.bun.spec.ts +4 -4
  679. package/src/orm/postgres/providers/CloudflareHyperdriveProvider.ts +4 -6
  680. package/src/orm/postgres/schemas/postgresEnvSchema.ts +6 -6
  681. package/src/orm/postgres/services/PostgresModelBuilder.ts +127 -114
  682. package/src/queue/core/__tests__/$consumer.spec.ts +4 -4
  683. package/src/queue/core/__tests__/WorkerProvider.spec.ts +4 -4
  684. package/src/queue/core/__tests__/shared.ts +6 -6
  685. package/src/queue/core/primitives/$consumer.ts +5 -5
  686. package/src/queue/core/primitives/$queue.ts +44 -61
  687. package/src/queue/core/providers/CloudflareQueueProvider.ts +6 -0
  688. package/src/queue/core/providers/WorkerProvider.ts +17 -14
  689. package/src/queue/redis/providers/RedisQueueProvider.ts +3 -3
  690. package/src/react/core/__tests__/ErrorBoundary.browser.spec.tsx +92 -0
  691. package/src/react/core/__tests__/Router.spec.tsx +4 -4
  692. package/src/react/core/__tests__/useComputed.browser.spec.tsx +192 -0
  693. package/src/react/core/__tests__/useQuery.browser.spec.tsx +48 -0
  694. package/src/react/core/__tests__/useSelector.browser.spec.tsx +105 -0
  695. package/src/react/core/__tests__/useStore.browser.spec.tsx +113 -0
  696. package/src/react/core/components/ErrorBoundary.tsx +42 -0
  697. package/src/react/core/hooks/useAction.ts +56 -19
  698. package/src/react/core/hooks/useComputed.ts +91 -0
  699. package/src/react/core/hooks/useSelector.ts +67 -0
  700. package/src/react/core/hooks/useStore.ts +36 -17
  701. package/src/react/core/index.ts +3 -0
  702. package/src/react/core/utils/shallowEqual.ts +36 -0
  703. package/src/react/form/__tests__/FormModel-submit-loading.spec.ts +2 -2
  704. package/src/react/form/__tests__/form-submitting-reactive.browser.spec.tsx +5 -5
  705. package/src/react/form/__tests__/useForm.browser.spec.tsx +54 -54
  706. package/src/react/form/errors/FormValidationError.ts +0 -2
  707. package/src/react/form/hooks/useForm.ts +19 -4
  708. package/src/react/form/hooks/useFormQuerySync.ts +0 -0
  709. package/src/react/form/services/FormModel.ts +67 -47
  710. package/src/react/form/services/parseField.ts +66 -27
  711. package/src/react/i18n/__tests__/Localize.spec.tsx +1 -1
  712. package/src/react/i18n/providers/I18nProvider.ts +2 -2
  713. package/src/react/router/__tests__/$page.browser.spec.tsx +19 -19
  714. package/src/react/router/__tests__/$page.spec.tsx +21 -21
  715. package/src/react/router/__tests__/ReactBrowserProvider.browser.spec.ts +87 -1
  716. package/src/react/router/atoms/ssrManifestAtom.ts +16 -16
  717. package/src/react/router/components/NestedView.tsx +11 -3
  718. package/src/react/router/hooks/useQueryParams.ts +1 -1
  719. package/src/react/router/primitives/$page.ts +2 -2
  720. package/src/react/router/providers/ReactBrowserProvider.ts +64 -13
  721. package/src/react/router/providers/ReactPageProvider.ts +26 -12
  722. package/src/react/router/providers/ReactServerProvider.ts +13 -15
  723. package/src/react/sitemap/__tests__/$sitemap.spec.ts +2 -2
  724. package/src/react/ui/atoms/uiAtom.ts +6 -6
  725. package/src/react/ui/atoms/uiThemeListAtom.ts +7 -7
  726. package/src/react/ui/hooks/useColorMode.ts +11 -4
  727. package/src/react/ui/services/SchemaControl.ts +4 -4
  728. package/src/redis/providers/BunRedisProvider.ts +19 -11
  729. package/src/redis/providers/NodeRedisProvider.ts +3 -3
  730. package/src/scheduler/primitives/$scheduler.ts +21 -8
  731. package/src/security/__tests__/assertRealmScope.spec.ts +29 -0
  732. package/src/security/atoms/currentTenantAtom.ts +6 -6
  733. package/src/security/atoms/currentUserAtom.ts +2 -2
  734. package/src/security/primitives/$issuer.ts +24 -2
  735. package/src/security/providers/JwtProvider.ts +100 -0
  736. package/src/security/providers/SecurityProvider.ts +43 -2
  737. package/src/security/schemas/permissionSchema.ts +19 -19
  738. package/src/security/schemas/roleSchema.ts +22 -28
  739. package/src/security/schemas/userAccountInfoSchema.ts +47 -37
  740. package/src/server/auth/index.ts +0 -3
  741. package/src/server/auth/primitives/$auth.ts +6 -6
  742. package/src/server/auth/primitives/$authApple.ts +10 -10
  743. package/src/server/auth/primitives/$authFacebook.ts +10 -10
  744. package/src/server/auth/primitives/$authFranceConnect.ts +10 -10
  745. package/src/server/auth/primitives/$authGithub.ts +10 -10
  746. package/src/server/auth/primitives/$authGoogle.ts +10 -10
  747. package/src/server/auth/primitives/$authMicrosoft.ts +14 -14
  748. package/src/server/auth/providers/ServerAuthProvider.ts +49 -48
  749. package/src/server/auth/schemas/authenticationProviderSchema.ts +9 -12
  750. package/src/server/auth/schemas/tokenResponseSchema.ts +2 -2
  751. package/src/server/auth/schemas/tokensSchema.ts +16 -16
  752. package/src/server/auth/schemas/userinfoResponseSchema.ts +3 -3
  753. package/src/server/cookies/__tests__/AtomCookieBinding.spec.ts +80 -0
  754. package/src/server/cookies/__tests__/AtomCookiePersistence.browser.spec.ts +169 -0
  755. package/src/server/cookies/__tests__/AtomCookiePersistence.spec.ts +294 -0
  756. package/src/server/cookies/__tests__/ServerCookiesProvider.spec.ts +14 -14
  757. package/src/server/cookies/index.browser.ts +4 -1
  758. package/src/server/cookies/index.ts +8 -1
  759. package/src/server/cookies/primitives/$cookie.browser.ts +1 -1
  760. package/src/server/cookies/primitives/$cookie.ts +16 -0
  761. package/src/server/cookies/providers/AtomCookiePersistence.browser.ts +133 -0
  762. package/src/server/cookies/providers/AtomCookiePersistence.ts +148 -0
  763. package/src/server/cookies/providers/ServerCookiesProvider.ts +13 -5
  764. package/src/server/cookies/services/CookieParser.ts +6 -1
  765. package/src/server/core/__tests__/$action.spec.ts +13 -13
  766. package/src/server/core/__tests__/$middleware.spec.ts +10 -10
  767. package/src/server/core/__tests__/$route.spec.ts +9 -9
  768. package/src/server/core/__tests__/$sse.spec.ts +26 -26
  769. package/src/server/core/__tests__/BunHttpServerProvider.bun.spec.ts +6 -6
  770. package/src/server/core/__tests__/HttpClient.spec.ts +2 -2
  771. package/src/server/core/__tests__/NodeHttpServerProvider.spec.ts +15 -3
  772. package/src/server/core/__tests__/ServerBodyParserProvider.spec.ts +14 -14
  773. package/src/server/core/__tests__/ServerMultipartProvider.spec.ts +33 -33
  774. package/src/server/core/__tests__/ServerRouterProvider-errorHandler.spec.ts +5 -1
  775. package/src/server/core/__tests__/ServerRouterProvider-getRoutes.spec.ts +25 -25
  776. package/src/server/core/__tests__/ServerRouterProvider-serializationError.spec.ts +9 -5
  777. package/src/server/core/__tests__/ServerRouterProvider-validationError.spec.ts +56 -24
  778. package/src/server/core/errors/ValidationError.ts +6 -3
  779. package/src/server/core/helpers/isMultipart.ts +2 -1
  780. package/src/server/core/index.ts +5 -2
  781. package/src/server/core/interfaces/ServerRequest.ts +6 -14
  782. package/src/server/core/primitives/$action.ts +26 -36
  783. package/src/server/core/primitives/$sse.ts +3 -3
  784. package/src/server/core/providers/BunHttpServerProvider.ts +8 -9
  785. package/src/server/core/providers/NodeHttpServerProvider.ts +8 -9
  786. package/src/server/core/providers/ServerBodyParserProvider.ts +20 -12
  787. package/src/server/core/providers/ServerCompressProvider.ts +9 -10
  788. package/src/server/core/providers/ServerHelmetProvider.ts +26 -27
  789. package/src/server/core/providers/ServerMultipartProvider.ts +19 -19
  790. package/src/server/core/providers/ServerRouterProvider.ts +44 -15
  791. package/src/server/core/schemas/errorSchema.ts +20 -25
  792. package/src/server/core/schemas/okSchema.ts +9 -14
  793. package/src/server/core/services/HttpClient.ts +13 -1
  794. package/src/server/core/services/ServerRequestParser.ts +6 -6
  795. package/src/server/cors/providers/ServerCorsProvider.ts +26 -28
  796. package/src/server/health/schemas/healthSchema.ts +6 -6
  797. package/src/server/links/__tests__/$remote.spec.ts +3 -3
  798. package/src/server/links/__tests__/BatchEndpoint.spec.ts +9 -9
  799. package/src/server/links/__tests__/LinkProvider.spec.ts +9 -9
  800. package/src/server/links/__tests__/ServerLinksProvider.spec.ts +23 -23
  801. package/src/server/links/__tests__/fixtures/CrudApp.ts +21 -21
  802. package/src/server/links/atoms/apiLinksAtom.ts +2 -2
  803. package/src/server/links/atoms/linkOptionsAtom.ts +6 -6
  804. package/src/server/links/primitives/$remote.ts +3 -3
  805. package/src/server/links/providers/LinkProvider.ts +3 -3
  806. package/src/server/links/providers/ServerLinksProvider.ts +20 -20
  807. package/src/server/links/schemas/apiLinksResponseSchema.ts +23 -23
  808. package/src/server/proxy/__tests__/$proxy.spec.ts +9 -9
  809. package/src/server/proxy/providers/ServerProxyProvider.ts +5 -0
  810. package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +18 -20
  811. package/src/server/swagger/__tests__/$swagger.spec.ts +91 -94
  812. package/src/server/swagger/__tests__/ui.spec.ts +3 -3
  813. package/src/server/swagger/providers/ServerSwaggerProvider.ts +66 -43
  814. package/src/system/__tests__/NodeShellProvider.spec.ts +46 -0
  815. package/src/system/providers/NodeShellProvider.ts +4 -1
  816. package/src/topic/core/__tests__/$subscriber.spec.ts +4 -4
  817. package/src/topic/core/__tests__/shared.ts +8 -8
  818. package/src/topic/core/primitives/$subscriber.ts +5 -5
  819. package/src/topic/core/primitives/$topic.ts +14 -14
  820. package/src/topic/redis/providers/RedisTopicProvider.ts +3 -3
  821. package/dist/container/core/index.d.ts +0 -236
  822. package/dist/container/core/index.d.ts.map +0 -1
  823. package/dist/container/core/index.js +0 -231
  824. package/dist/container/core/index.js.map +0 -1
  825. package/dist/container/core/index.workerd.js +0 -192
  826. package/dist/container/core/index.workerd.js.map +0 -1
  827. package/src/command/helpers/PrettyAsker.ts +0 -256
  828. package/src/command/helpers/PrettyPrint.ts +0 -332
  829. package/src/container/core/__tests__/$container.spec.ts +0 -83
  830. package/src/container/core/index.ts +0 -50
  831. package/src/container/core/index.workerd.ts +0 -53
  832. package/src/container/core/interfaces/ContainerOptions.ts +0 -69
  833. package/src/container/core/primitives/$container.ts +0 -100
  834. package/src/container/core/providers/CloudflareContainerProvider.ts +0 -70
  835. package/src/container/core/providers/ContainerProvider.ts +0 -92
  836. package/src/container/core/providers/MockContainerProvider.ts +0 -62
  837. package/src/container/core/providers/NodeContainerProvider.ts +0 -53
  838. package/src/core/__tests__/jsonSchemaToTypeBox.spec.ts +0 -771
  839. package/src/core/helpers/jsonSchemaToTypeBox.ts +0 -359
  840. package/src/server/auth/__tests__/authFederationClient.spec.ts +0 -40
  841. package/src/server/auth/__tests__/federationAssertion.spec.ts +0 -146
  842. package/src/server/auth/helpers/federationAssertion.ts +0 -74
  843. package/src/server/auth/primitives/$authFederationBroker.ts +0 -273
  844. package/src/server/auth/primitives/$authFederationClient.ts +0 -89
  845. /package/dist/orm/core/{chunk-B4FMCO8f.js → rolldown-runtime-B4FMCO8f.js} +0 -0
@@ -1,16 +1,16 @@
1
- import { type Static, t } from "alepha";
1
+ import { type Static, z } from "alepha";
2
2
  import { parameterResponseSchema } from "./parameterResponseSchema.ts";
3
3
 
4
4
  /**
5
5
  * Current parameter response schema.
6
6
  * Includes current version, next scheduled version, and defaults.
7
7
  */
8
- export const parameterCurrentResponseSchema = t.object({
9
- current: t.optional(parameterResponseSchema),
10
- next: t.optional(parameterResponseSchema),
11
- defaultValue: t.optional(t.json()),
12
- currentValue: t.optional(t.json()),
13
- schema: t.optional(t.json()),
8
+ export const parameterCurrentResponseSchema = z.object({
9
+ current: parameterResponseSchema.optional(),
10
+ next: parameterResponseSchema.optional(),
11
+ defaultValue: z.json().optional(),
12
+ currentValue: z.json().optional(),
13
+ schema: z.json().optional(),
14
14
  });
15
15
 
16
16
  export type ParameterCurrentResponse = Static<
@@ -1,11 +1,11 @@
1
- import { type Static, t } from "alepha";
1
+ import { type Static, z } from "alepha";
2
2
  import { parameterResponseSchema } from "./parameterResponseSchema.ts";
3
3
 
4
4
  /**
5
5
  * Parameter history response schema.
6
6
  */
7
- export const parameterHistoryResponseSchema = t.object({
8
- versions: t.array(parameterResponseSchema),
7
+ export const parameterHistoryResponseSchema = z.object({
8
+ versions: z.array(parameterResponseSchema),
9
9
  });
10
10
 
11
11
  export type ParameterHistoryResponse = Static<
@@ -1,8 +1,7 @@
1
- import { t } from "alepha";
2
1
  import { parameters } from "../entities/parameters.ts";
3
2
 
4
3
  /**
5
4
  * Parameter name param schema.
6
- * Uses t.pick from entity for consistency.
5
+ * Uses z.pick from entity for consistency.
7
6
  */
8
- export const parameterNameParamSchema = t.pick(parameters.schema, ["name"]);
7
+ export const parameterNameParamSchema = parameters.schema.pick({ name: true });
@@ -1,10 +1,10 @@
1
- import { type Static, t } from "alepha";
1
+ import { type Static, z } from "alepha";
2
2
 
3
3
  /**
4
4
  * Parameter names list response schema.
5
5
  */
6
- export const parameterNamesResponseSchema = t.object({
7
- names: t.array(t.text()),
6
+ export const parameterNamesResponseSchema = z.object({
7
+ names: z.array(z.text()),
8
8
  });
9
9
 
10
10
  export type ParameterNamesResponse = Static<
@@ -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
  import { parameterCreatorSummarySchema } from "./parameterCreatorSummarySchema.ts";
4
4
  import { parameterStatusSchema } from "./parameterStatusSchema.ts";
@@ -11,9 +11,9 @@ import { parameterStatusSchema } from "./parameterStatusSchema.ts";
11
11
  * `creator` is embedded on read via a best-effort left join on `creatorId`
12
12
  * (see `parameterCreatorSummarySchema`); it is not a stored column.
13
13
  */
14
- export const parameterResponseSchema = t.extend(parameters.schema, {
14
+ export const parameterResponseSchema = parameters.schema.extend({
15
15
  status: parameterStatusSchema,
16
- creator: t.optional(parameterCreatorSummarySchema),
16
+ creator: parameterCreatorSummarySchema.optional(),
17
17
  });
18
18
 
19
19
  export type ParameterResponse = Static<typeof parameterResponseSchema>;
@@ -1,9 +1,9 @@
1
- import { type Static, t } from "alepha";
1
+ import { type Static, z } from "alepha";
2
2
 
3
3
  /**
4
4
  * Parameter status enum schema.
5
5
  */
6
- export const parameterStatusSchema = t.enum([
6
+ export const parameterStatusSchema = z.enum([
7
7
  "expired",
8
8
  "current",
9
9
  "next",
@@ -1,13 +1,13 @@
1
- import { type Static, t } from "alepha";
1
+ import { type Static, z } from "alepha";
2
2
 
3
3
  /**
4
4
  * Tree node schema for parameter tree navigation.
5
5
  */
6
- export const parameterTreeNodeSchema = t.object({
7
- name: t.text(),
8
- path: t.text(),
9
- isLeaf: t.boolean(),
10
- children: t.array(t.any()),
6
+ export const parameterTreeNodeSchema = z.object({
7
+ name: z.text(),
8
+ path: z.text(),
9
+ isLeaf: z.boolean(),
10
+ children: z.array(z.any()),
11
11
  });
12
12
 
13
13
  export type ParameterTreeNode = Static<typeof parameterTreeNodeSchema>;
@@ -1,11 +1,10 @@
1
- import { t } from "alepha";
2
1
  import { parameters } from "../entities/parameters.ts";
3
2
 
4
3
  /**
5
4
  * Parameter name and version param schema.
6
- * Uses t.pick from entity for consistency.
5
+ * Uses z.pick from entity for consistency.
7
6
  */
8
- export const parameterVersionParamSchema = t.pick(parameters.schema, [
9
- "name",
10
- "version",
11
- ]);
7
+ export const parameterVersionParamSchema = parameters.schema.pick({
8
+ name: true,
9
+ version: true,
10
+ });
@@ -1,11 +1,11 @@
1
- import { type Static, t } from "alepha";
1
+ import { type Static, z } from "alepha";
2
2
  import { parameterResponseSchema } from "./parameterResponseSchema.ts";
3
3
 
4
4
  /**
5
5
  * Parameter version response schema.
6
6
  */
7
- export const parameterVersionResponseSchema = t.object({
8
- parameter: t.optional(parameterResponseSchema),
7
+ export const parameterVersionResponseSchema = z.object({
8
+ parameter: parameterResponseSchema.optional(),
9
9
  });
10
10
 
11
11
  export type ParameterVersionResponse = Static<
@@ -1,4 +1,4 @@
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
  /**
@@ -7,13 +7,10 @@ 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 rollbackParameterBodySchema = t.extend(
11
- t.pick(parameters.schema, ["changeDescription"]),
12
- {
13
- targetVersion: t.integer({
14
- description: "Version number to rollback to",
15
- }),
16
- },
17
- );
10
+ export const rollbackParameterBodySchema = parameters.schema
11
+ .pick({ changeDescription: true })
12
+ .extend({
13
+ targetVersion: z.integer().describe("Version number to rollback to"),
14
+ });
18
15
 
19
16
  export type RollbackParameterBody = Static<typeof rollbackParameterBodySchema>;
@@ -6,13 +6,14 @@ import {
6
6
  SchemaValidator,
7
7
  type Static,
8
8
  type TObject,
9
- t,
9
+ z,
10
10
  } from "alepha";
11
11
  import { CryptoProvider } from "alepha/crypto";
12
12
  import { DateTimeProvider } from "alepha/datetime";
13
13
  import { LockProvider } from "alepha/lock";
14
14
  import { $logger } from "alepha/logger";
15
15
  import { $repository, RepositoryProvider } from "alepha/orm";
16
+ import { currentTenantAtom, currentUserAtom } from "alepha/security";
16
17
  import { $topic } from "alepha/topic";
17
18
  import { type Parameter, parameters } from "../entities/parameters.ts";
18
19
  import type { ParameterPrimitive } from "../primitives/$parameter.ts";
@@ -64,7 +65,35 @@ export class ParameterProvider {
64
65
  protected _instanceId: string | undefined;
65
66
 
66
67
  /**
67
- * In-memory cache of registered parameter primitives.
68
+ * Resolve the active tenant for cache keying MIRRORS the Repository's
69
+ * `resolveOrganizationValue` (tenant atom → user org) so the in-memory
70
+ * value caches partition exactly the way the DB rows do. Returns a sentinel
71
+ * for the org-less (single-tenant / no-request) case.
72
+ *
73
+ * Why this matters: the DB table is now org-scoped, but these process-global
74
+ * Maps are keyed by parameter NAME — without folding the org into the key, a
75
+ * pooled multi-tenant worker would hand org A's cached `club.settings` to a
76
+ * request for org B. (Cross-instance topic sync + the `ready` preload run
77
+ * with no request atom → the sentinel key; they refresh only org-less rows,
78
+ * leaving per-org caches to lazy-load + the immediate local update on `set`.
79
+ * That is bounded staleness, never a cross-tenant read.)
80
+ */
81
+ protected orgKey(): string {
82
+ const tenant = this.alepha.store.get(currentTenantAtom);
83
+ if (tenant?.id) return tenant.id;
84
+ const user = this.alepha.store.get(currentUserAtom);
85
+ return user?.organization ?? "~global";
86
+ }
87
+
88
+ /** Per-org cache key for the value caches (`${org}:${name}`). */
89
+ protected cacheKey(name: string): string {
90
+ return `${this.orgKey()}:${name}`;
91
+ }
92
+
93
+ /**
94
+ * In-memory cache of registered parameter primitives. Keyed by NAME only —
95
+ * the `$parameter` definition (schema + default) is identical for every
96
+ * tenant; only the stored VALUE is per-org (see the value caches below).
68
97
  */
69
98
  protected readonly primitives = new Map<string, ParameterPrimitive<any>>();
70
99
 
@@ -86,6 +115,33 @@ export class ParameterProvider {
86
115
  */
87
116
  protected readonly loaded = new Set<string>();
88
117
 
118
+ /**
119
+ * Epoch millis of the last successful load (or local set) per cache key.
120
+ * Drives the serverless revalidation TTL (see `revalidateAfterMs`).
121
+ */
122
+ protected readonly loadedAt = new Map<string, number>();
123
+
124
+ /**
125
+ * How long a cached value may serve before `get()` re-reads the DB.
126
+ *
127
+ * The in-memory caches are PER ISOLATE. On serverless runtimes
128
+ * (Cloudflare Workers) many isolates serve the same app and the
129
+ * cross-instance `syncTopic` rides the queue provider — in-memory by
130
+ * default, so a `set()` handled by one isolate never reaches the others:
131
+ * without a TTL they serve the stale value until they are recycled.
132
+ *
133
+ * Defaults: 30 s on serverless, 0 (= never revalidate, the historical
134
+ * behaviour) elsewhere. Override with the `PARAMETERS_CACHE_TTL_MS` env.
135
+ */
136
+ protected get revalidateAfterMs(): number {
137
+ const raw = this.alepha.env.PARAMETERS_CACHE_TTL_MS as
138
+ | string
139
+ | number
140
+ | undefined;
141
+ if (raw !== undefined && raw !== "") return Number(raw);
142
+ return this.alepha.isServerless() ? 30_000 : 0;
143
+ }
144
+
89
145
  /**
90
146
  * Shared promises for deduplicating concurrent load() calls.
91
147
  */
@@ -137,9 +193,9 @@ export class ParameterProvider {
137
193
  public readonly syncTopic = $topic({
138
194
  name: "parameter:sync",
139
195
  schema: {
140
- payload: t.object({
141
- name: t.text(),
142
- instanceId: t.text(),
196
+ payload: z.object({
197
+ name: z.text(),
198
+ instanceId: z.text(),
143
199
  }),
144
200
  },
145
201
  handler: async ({ payload }) => {
@@ -170,27 +226,28 @@ export class ParameterProvider {
170
226
  * Checks if a cached next version has become current.
171
227
  */
172
228
  public async get(name: string): Promise<unknown> {
173
- if (!this.loaded.has(name)) {
174
- if (!this.loadPromises.has(name)) {
175
- this.loadPromises.set(name, this.doLoad(name));
229
+ const ck = this.cacheKey(name);
230
+ if (!this.loaded.has(ck) || this.isStale(ck)) {
231
+ if (!this.loadPromises.has(ck)) {
232
+ this.loadPromises.set(ck, this.doLoad(name));
176
233
  }
177
- await this.loadPromises.get(name);
234
+ await this.loadPromises.get(ck);
178
235
  }
179
236
 
180
237
  // Check if cached next has become current
181
- const cachedNext = this.cachedNext.get(name);
238
+ const cachedNext = this.cachedNext.get(ck);
182
239
  if (cachedNext) {
183
240
  const now = this.dateTimeProvider.now().toDate();
184
241
  if (new Date(cachedNext.activationDate) <= now) {
185
- this.cachedCurrent.set(name, cachedNext.content);
186
- this.cachedNext.delete(name);
242
+ this.cachedCurrent.set(ck, cachedNext.content);
243
+ this.cachedNext.delete(ck);
187
244
  this.reloadNextInBackground(name);
188
245
  }
189
246
  }
190
247
 
191
248
  const param = this.primitives.get(name);
192
- return this.cachedCurrent.has(name)
193
- ? this.cachedCurrent.get(name)
249
+ return this.cachedCurrent.has(ck)
250
+ ? this.cachedCurrent.get(ck)
194
251
  : param?.options.default;
195
252
  }
196
253
 
@@ -213,19 +270,32 @@ export class ParameterProvider {
213
270
  });
214
271
 
215
272
  // Update local cache
273
+ const ck = this.cacheKey(name);
216
274
  const now = this.dateTimeProvider.now().toDate();
217
275
  if (!options.activationDate || options.activationDate <= now) {
218
- const prev = this.cachedCurrent.get(name);
219
- this.cachedCurrent.set(name, value);
276
+ const prev = this.cachedCurrent.get(ck);
277
+ this.cachedCurrent.set(ck, value);
220
278
  if (JSON.stringify(prev) !== JSON.stringify(value)) {
221
279
  this.notifySubscribers(name);
222
280
  }
223
281
  } else {
224
- this.cachedNext.set(name, {
282
+ this.cachedNext.set(ck, {
225
283
  content: value,
226
284
  activationDate: options.activationDate.toISOString(),
227
285
  });
228
286
  }
287
+ // The writer is by definition fresh — restart its revalidation window.
288
+ this.loadedAt.set(ck, this.dateTimeProvider.nowMillis());
289
+ }
290
+
291
+ /** Whether the cached value outlived the revalidation TTL. */
292
+ protected isStale(ck: string): boolean {
293
+ const ttl = this.revalidateAfterMs;
294
+ if (ttl <= 0) return false;
295
+ const at = this.loadedAt.get(ck);
296
+ return at === undefined
297
+ ? true
298
+ : this.dateTimeProvider.nowMillis() - at > ttl;
229
299
  }
230
300
 
231
301
  /**
@@ -233,12 +303,13 @@ export class ParameterProvider {
233
303
  * Returns an unsubscribe function.
234
304
  */
235
305
  public sub(name: string, fn: (v: unknown) => void): () => void {
236
- if (!this.subscribers.has(name)) {
237
- this.subscribers.set(name, []);
306
+ const ck = this.cacheKey(name);
307
+ if (!this.subscribers.has(ck)) {
308
+ this.subscribers.set(ck, []);
238
309
  }
239
- this.subscribers.get(name)!.push(fn);
310
+ this.subscribers.get(ck)!.push(fn);
240
311
  return () => {
241
- const subs = this.subscribers.get(name);
312
+ const subs = this.subscribers.get(ck);
242
313
  if (subs) {
243
314
  const idx = subs.indexOf(fn);
244
315
  if (idx >= 0) {
@@ -253,8 +324,9 @@ export class ParameterProvider {
253
324
  * Deduplicates concurrent calls via shared promise.
254
325
  */
255
326
  public async load(name: string): Promise<void> {
256
- this.loadPromises.set(name, this.doLoad(name));
257
- await this.loadPromises.get(name);
327
+ const ck = this.cacheKey(name);
328
+ this.loadPromises.set(ck, this.doLoad(name));
329
+ await this.loadPromises.get(ck);
258
330
  }
259
331
 
260
332
  /**
@@ -262,8 +334,9 @@ export class ParameterProvider {
262
334
  * Synchronous access for admin API.
263
335
  */
264
336
  public getCachedCurrentContent(name: string): unknown {
265
- if (this.cachedCurrent.has(name)) {
266
- return this.cachedCurrent.get(name);
337
+ const ck = this.cacheKey(name);
338
+ if (this.cachedCurrent.has(ck)) {
339
+ return this.cachedCurrent.get(ck);
267
340
  }
268
341
  const param = this.primitives.get(name);
269
342
  return param?.options.default;
@@ -273,7 +346,7 @@ export class ParameterProvider {
273
346
  * Whether the parameter is using its default value (no DB value loaded).
274
347
  */
275
348
  public isUsingDefault(name: string): boolean {
276
- return !this.cachedCurrent.has(name);
349
+ return !this.cachedCurrent.has(this.cacheKey(name));
277
350
  }
278
351
 
279
352
  // ---------------------------------------------------------------------------
@@ -510,12 +583,7 @@ export class ParameterProvider {
510
583
  */
511
584
  public async delete(name: string): Promise<void> {
512
585
  await this.repo.deleteMany({ name: { eq: name } });
513
- this.cachedCurrent.delete(name);
514
- this.cachedNext.delete(name);
515
- this.loaded.delete(name);
516
- this.loadPromises.delete(name);
517
- this.loadGeneration.delete(name);
518
- this.migrationChecked.delete(name);
586
+ this.evictCaches(name);
519
587
  this.log.info("Parameter deleted", { name });
520
588
  }
521
589
 
@@ -526,17 +594,23 @@ export class ParameterProvider {
526
594
  if (names.length === 0) return [];
527
595
  await this.repo.deleteMany({ name: { inArray: names } });
528
596
  for (const name of names) {
529
- this.cachedCurrent.delete(name);
530
- this.cachedNext.delete(name);
531
- this.loaded.delete(name);
532
- this.loadPromises.delete(name);
533
- this.loadGeneration.delete(name);
534
- this.migrationChecked.delete(name);
597
+ this.evictCaches(name);
535
598
  }
536
599
  this.log.info("Parameters deleted", { count: names.length });
537
600
  return names;
538
601
  }
539
602
 
603
+ /** Drop every per-org value cache entry for `name` in the active org. */
604
+ protected evictCaches(name: string): void {
605
+ const ck = this.cacheKey(name);
606
+ this.cachedCurrent.delete(ck);
607
+ this.cachedNext.delete(ck);
608
+ this.loaded.delete(ck);
609
+ this.loadPromises.delete(ck);
610
+ this.loadGeneration.delete(ck);
611
+ this.migrationChecked.delete(ck);
612
+ }
613
+
540
614
  /**
541
615
  * Get a specific version of a parameter.
542
616
  */
@@ -608,7 +682,7 @@ export class ParameterProvider {
608
682
  next: ParameterWithStatus | null;
609
683
  defaultValue: unknown | null;
610
684
  currentValue: unknown | null;
611
- schema: TObject | null;
685
+ schema: Record<string, unknown> | null;
612
686
  }> {
613
687
  let { current, next } = await this.loadCurrentAndNext(name);
614
688
 
@@ -640,7 +714,13 @@ export class ParameterProvider {
640
714
 
641
715
  const defaultValue = param?.options.default ?? null;
642
716
  const currentValue = this.getCachedCurrentContent(name) ?? null;
643
- const schema = param?.schema ?? null;
717
+ // Serialize the Zod schema to JSON Schema for transport. `param.schema` is a
718
+ // live `ZodObject` instance, not a plain record, so it fails the response's
719
+ // `z.json()` validation ("expected record, received ZodObject") and the
720
+ // admin UI (which round-trips via `jsonSchemaToZod`) can't rebuild a form
721
+ // from it. Typebox schemas were already JSON Schema, hence this step was
722
+ // implicit before the Zod migration.
723
+ const schema = param?.schema ? z.toJSONSchema(param.schema) : null;
644
724
 
645
725
  return {
646
726
  current: current ? { ...current, status: "current" as const } : null,
@@ -684,18 +764,21 @@ export class ParameterProvider {
684
764
  * Fetches current and next from database, updates cache.
685
765
  */
686
766
  protected async doLoad(name: string): Promise<void> {
687
- const gen = (this.loadGeneration.get(name) ?? 0) + 1;
688
- this.loadGeneration.set(name, gen);
767
+ // Snapshot the org-scoped cache key at call time: the whole load runs in
768
+ // one request context, so the atom (hence `ck`) is stable here.
769
+ const ck = this.cacheKey(name);
770
+ const gen = (this.loadGeneration.get(ck) ?? 0) + 1;
771
+ this.loadGeneration.set(ck, gen);
689
772
 
690
773
  const { current, next } = await this.loadCurrentAndNext(name);
691
774
  const schemaHash = this.schemaHashes.get(name) ?? "";
692
775
 
693
776
  // Superseded by a newer load — discard results
694
- if (this.loadGeneration.get(name) !== gen) return;
777
+ if (this.loadGeneration.get(ck) !== gen) return;
695
778
 
696
779
  // Check if migration is needed
697
- if (current && !this.migrationChecked.has(name)) {
698
- this.migrationChecked.add(name);
780
+ if (current && !this.migrationChecked.has(ck)) {
781
+ this.migrationChecked.add(ck);
699
782
  const migration = this.migrateValue(
700
783
  name,
701
784
  current.content,
@@ -717,46 +800,48 @@ export class ParameterProvider {
717
800
  // Reload after migration to get the new current
718
801
  const updated = await this.loadCurrentAndNext(name);
719
802
  if (updated.current) {
720
- this.cachedCurrent.set(name, updated.current.content);
803
+ this.cachedCurrent.set(ck, updated.current.content);
721
804
  } else {
722
- this.cachedCurrent.delete(name);
805
+ this.cachedCurrent.delete(ck);
723
806
  }
724
807
  if (updated.next) {
725
- this.cachedNext.set(name, {
808
+ this.cachedNext.set(ck, {
726
809
  content: updated.next.content,
727
810
  activationDate: updated.next.activationDate,
728
811
  });
729
812
  } else {
730
- this.cachedNext.delete(name);
813
+ this.cachedNext.delete(ck);
731
814
  }
732
- this.loaded.add(name);
733
- this.loadPromises.delete(name);
815
+ this.loaded.add(ck);
816
+ this.loadedAt.set(ck, this.dateTimeProvider.nowMillis());
817
+ this.loadPromises.delete(ck);
734
818
  this.notifySubscribers(name);
735
819
  return;
736
820
  }
737
821
  }
738
822
 
739
- const prev = this.cachedCurrent.get(name);
740
- const hadPrev = this.cachedCurrent.has(name);
823
+ const prev = this.cachedCurrent.get(ck);
824
+ const hadPrev = this.cachedCurrent.has(ck);
741
825
  if (current) {
742
- this.cachedCurrent.set(name, current.content);
826
+ this.cachedCurrent.set(ck, current.content);
743
827
  } else {
744
- this.cachedCurrent.delete(name);
828
+ this.cachedCurrent.delete(ck);
745
829
  }
746
830
  if (next) {
747
- this.cachedNext.set(name, {
831
+ this.cachedNext.set(ck, {
748
832
  content: next.content,
749
833
  activationDate: next.activationDate,
750
834
  });
751
835
  } else {
752
- this.cachedNext.delete(name);
836
+ this.cachedNext.delete(ck);
753
837
  }
754
- this.loaded.add(name);
755
- this.loadPromises.delete(name);
838
+ this.loaded.add(ck);
839
+ this.loadedAt.set(ck, this.dateTimeProvider.nowMillis());
840
+ this.loadPromises.delete(ck);
756
841
 
757
842
  if (
758
843
  hadPrev &&
759
- JSON.stringify(prev) !== JSON.stringify(this.cachedCurrent.get(name))
844
+ JSON.stringify(prev) !== JSON.stringify(this.cachedCurrent.get(ck))
760
845
  ) {
761
846
  this.notifySubscribers(name);
762
847
  }
@@ -905,15 +990,16 @@ export class ParameterProvider {
905
990
  * Reload next version info in background (non-blocking).
906
991
  */
907
992
  protected reloadNextInBackground(name: string): void {
993
+ const ck = this.cacheKey(name);
908
994
  this.loadCurrentAndNext(name)
909
995
  .then(({ next }) => {
910
996
  if (next) {
911
- this.cachedNext.set(name, {
997
+ this.cachedNext.set(ck, {
912
998
  content: next.content,
913
999
  activationDate: next.activationDate,
914
1000
  });
915
1001
  } else {
916
- this.cachedNext.delete(name);
1002
+ this.cachedNext.delete(ck);
917
1003
  }
918
1004
  })
919
1005
  .catch((err) => {
@@ -928,11 +1014,12 @@ export class ParameterProvider {
928
1014
  * Notify all subscribers of a value change.
929
1015
  */
930
1016
  protected notifySubscribers(name: string): void {
931
- const subs = this.subscribers.get(name);
1017
+ const ck = this.cacheKey(name);
1018
+ const subs = this.subscribers.get(ck);
932
1019
  if (!subs) return;
933
1020
  const param = this.primitives.get(name);
934
- const value = this.cachedCurrent.has(name)
935
- ? this.cachedCurrent.get(name)
1021
+ const value = this.cachedCurrent.has(ck)
1022
+ ? this.cachedCurrent.get(ck)
936
1023
  : param?.options.default;
937
1024
  for (const fn of subs) {
938
1025
  fn(value);
@@ -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 {
@@ -26,7 +26,7 @@ export class AdminPaymentController {
26
26
  description: "List payment intents",
27
27
  schema: {
28
28
  query: intentQuerySchema,
29
- response: t.page(intentResourceSchema),
29
+ response: z.page(intentResourceSchema),
30
30
  },
31
31
  handler: ({ query }) => this.payments.findIntents(query),
32
32
  });
@@ -40,7 +40,7 @@ export class AdminPaymentController {
40
40
  use: [$secure({ permissions: ["payments:read"] })],
41
41
  description: "Get payment intent details",
42
42
  schema: {
43
- params: t.object({ id: t.uuid() }),
43
+ params: z.object({ id: z.uuid() }),
44
44
  response: intentResourceSchema,
45
45
  },
46
46
  handler: ({ params }) => this.payments.getIntent(params.id),
@@ -56,7 +56,7 @@ export class AdminPaymentController {
56
56
  use: [$secure({ permissions: ["payments:write"] })],
57
57
  description: "Capture an authorized payment intent",
58
58
  schema: {
59
- params: t.object({ id: t.uuid() }),
59
+ params: z.object({ id: z.uuid() }),
60
60
  body: captureIntentSchema,
61
61
  response: intentResourceSchema,
62
62
  },
@@ -74,7 +74,7 @@ export class AdminPaymentController {
74
74
  use: [$secure({ permissions: ["payments:write"] })],
75
75
  description: "Void an authorized payment intent",
76
76
  schema: {
77
- params: t.object({ id: t.uuid() }),
77
+ params: z.object({ id: z.uuid() }),
78
78
  response: intentResourceSchema,
79
79
  },
80
80
  handler: ({ params }) => this.payments.void(params.id),
@@ -90,7 +90,7 @@ export class AdminPaymentController {
90
90
  use: [$secure({ permissions: ["payments:write"] })],
91
91
  description: "Issue partial or full refund",
92
92
  schema: {
93
- params: t.object({ id: t.uuid() }),
93
+ params: z.object({ id: z.uuid() }),
94
94
  body: refundIntentSchema,
95
95
  response: refundResourceSchema,
96
96
  },
@@ -108,7 +108,7 @@ export class AdminPaymentController {
108
108
  use: [$secure({ permissions: ["payments:write"] })],
109
109
  description: "Cancel a created payment intent",
110
110
  schema: {
111
- params: t.object({ id: t.uuid() }),
111
+ params: z.object({ id: z.uuid() }),
112
112
  response: intentResourceSchema,
113
113
  },
114
114
  handler: ({ params }) => this.payments.cancel(params.id),