alepha 0.22.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (869) hide show
  1. package/assets/swagger-ui/swagger-ui-bundle.js +1 -1
  2. package/assets/swagger-ui/swagger-ui-standalone-preset.js +1 -1
  3. package/dist/api/audits/index.browser.js +49 -52
  4. package/dist/api/audits/index.browser.js.map +1 -1
  5. package/dist/api/audits/index.d.ts +629 -565
  6. package/dist/api/audits/index.d.ts.map +1 -1
  7. package/dist/api/audits/index.js +206 -98
  8. package/dist/api/audits/index.js.map +1 -1
  9. package/dist/api/files/index.browser.js +44 -44
  10. package/dist/api/files/index.browser.js.map +1 -1
  11. package/dist/api/files/index.d.ts +292 -293
  12. package/dist/api/files/index.d.ts.map +1 -1
  13. package/dist/api/files/index.js +61 -64
  14. package/dist/api/files/index.js.map +1 -1
  15. package/dist/api/jobs/index.browser.js +61 -59
  16. package/dist/api/jobs/index.browser.js.map +1 -1
  17. package/dist/api/jobs/index.d.ts +546 -347
  18. package/dist/api/jobs/index.d.ts.map +1 -1
  19. package/dist/api/jobs/index.js +165 -86
  20. package/dist/api/jobs/index.js.map +1 -1
  21. package/dist/api/keys/index.d.ts +242 -230
  22. package/dist/api/keys/index.d.ts.map +1 -1
  23. package/dist/api/keys/index.js +63 -66
  24. package/dist/api/keys/index.js.map +1 -1
  25. package/dist/api/notifications/index.browser.js +40 -38
  26. package/dist/api/notifications/index.browser.js.map +1 -1
  27. package/dist/api/notifications/index.d.ts +339 -209
  28. package/dist/api/notifications/index.d.ts.map +1 -1
  29. package/dist/api/notifications/index.js +108 -60
  30. package/dist/api/notifications/index.js.map +1 -1
  31. package/dist/api/oauth/index.d.ts +190 -78
  32. package/dist/api/oauth/index.d.ts.map +1 -1
  33. package/dist/api/oauth/index.js +290 -68
  34. package/dist/api/oauth/index.js.map +1 -1
  35. package/dist/api/organizations/index.browser.js +14 -14
  36. package/dist/api/organizations/index.browser.js.map +1 -1
  37. package/dist/api/organizations/index.d.ts +158 -134
  38. package/dist/api/organizations/index.d.ts.map +1 -1
  39. package/dist/api/organizations/index.js +18 -18
  40. package/dist/api/organizations/index.js.map +1 -1
  41. package/dist/api/parameters/index.browser.js +74 -53
  42. package/dist/api/parameters/index.browser.js.map +1 -1
  43. package/dist/api/parameters/index.d.ts +607 -513
  44. package/dist/api/parameters/index.d.ts.map +1 -1
  45. package/dist/api/parameters/index.js +205 -127
  46. package/dist/api/parameters/index.js.map +1 -1
  47. package/dist/api/payments/index.d.ts +652 -449
  48. package/dist/api/payments/index.d.ts.map +1 -1
  49. package/dist/api/payments/index.js +159 -93
  50. package/dist/api/payments/index.js.map +1 -1
  51. package/dist/api/subscriptions/index.d.ts +1032 -762
  52. package/dist/api/subscriptions/index.d.ts.map +1 -1
  53. package/dist/api/subscriptions/index.js +166 -185
  54. package/dist/api/subscriptions/index.js.map +1 -1
  55. package/dist/api/users/index.browser.js +48 -71
  56. package/dist/api/users/index.browser.js.map +1 -1
  57. package/dist/api/users/index.d.ts +1297 -1109
  58. package/dist/api/users/index.d.ts.map +1 -1
  59. package/dist/api/users/index.js +454 -369
  60. package/dist/api/users/index.js.map +1 -1
  61. package/dist/api/verifications/index.browser.js +17 -17
  62. package/dist/api/verifications/index.browser.js.map +1 -1
  63. package/dist/api/verifications/index.d.ts +169 -157
  64. package/dist/api/verifications/index.d.ts.map +1 -1
  65. package/dist/api/verifications/index.js +47 -95
  66. package/dist/api/verifications/index.js.map +1 -1
  67. package/dist/background/index.d.ts +0 -1
  68. package/dist/background/index.d.ts.map +1 -1
  69. package/dist/background/index.js.map +1 -1
  70. package/dist/background/index.workerd.js.map +1 -1
  71. package/dist/batch/index.d.ts +0 -1
  72. package/dist/batch/index.d.ts.map +1 -1
  73. package/dist/batch/index.js.map +1 -1
  74. package/dist/bin/index.js +1 -1
  75. package/dist/bin/index.js.map +1 -1
  76. package/dist/bucket/index.d.ts +27 -32
  77. package/dist/bucket/index.d.ts.map +1 -1
  78. package/dist/bucket/index.js +56 -26
  79. package/dist/bucket/index.js.map +1 -1
  80. package/dist/bucket/index.workerd.js +52 -24
  81. package/dist/bucket/index.workerd.js.map +1 -1
  82. package/dist/cache/core/index.d.ts +4 -6
  83. package/dist/cache/core/index.d.ts.map +1 -1
  84. package/dist/cache/core/index.js +4 -10
  85. package/dist/cache/core/index.js.map +1 -1
  86. package/dist/cache/core/index.workerd.js +4 -10
  87. package/dist/cache/core/index.workerd.js.map +1 -1
  88. package/dist/cache/database/index.d.ts +22 -23
  89. package/dist/cache/database/index.d.ts.map +1 -1
  90. package/dist/cache/database/index.js +11 -20
  91. package/dist/cache/database/index.js.map +1 -1
  92. package/dist/cache/redis/index.d.ts +3 -4
  93. package/dist/cache/redis/index.d.ts.map +1 -1
  94. package/dist/cache/redis/index.js +2 -2
  95. package/dist/cache/redis/index.js.map +1 -1
  96. package/dist/captcha/index.d.ts.map +1 -1
  97. package/dist/captcha/index.js +4 -4
  98. package/dist/captcha/index.js.map +1 -1
  99. package/dist/cli/config/index.d.ts +0 -1
  100. package/dist/cli/config/index.d.ts.map +1 -1
  101. package/dist/cli/core/index.d.ts +244 -475
  102. package/dist/cli/core/index.d.ts.map +1 -1
  103. package/dist/cli/core/index.js +308 -383
  104. package/dist/cli/core/index.js.map +1 -1
  105. package/dist/cli/devtools/index.d.ts +3 -9
  106. package/dist/cli/devtools/index.d.ts.map +1 -1
  107. package/dist/cli/devtools/index.js +3 -3
  108. package/dist/cli/devtools/index.js.map +1 -1
  109. package/dist/cli/i18n/index.d.ts +20 -39
  110. package/dist/cli/i18n/index.d.ts.map +1 -1
  111. package/dist/cli/i18n/index.js +51 -17
  112. package/dist/cli/i18n/index.js.map +1 -1
  113. package/dist/cli/platform/index.d.ts +89 -82
  114. package/dist/cli/platform/index.d.ts.map +1 -1
  115. package/dist/cli/platform/index.js +27 -33
  116. package/dist/cli/platform/index.js.map +1 -1
  117. package/dist/cli/platform-lib/index.d.ts +383 -410
  118. package/dist/cli/platform-lib/index.d.ts.map +1 -1
  119. package/dist/cli/platform-lib/index.js +300 -258
  120. package/dist/cli/platform-lib/index.js.map +1 -1
  121. package/dist/cli/vendor/index.d.ts +17 -41
  122. package/dist/cli/vendor/index.d.ts.map +1 -1
  123. package/dist/cli/vendor/index.js +10 -13
  124. package/dist/cli/vendor/index.js.map +1 -1
  125. package/dist/command/index.d.ts +82 -194
  126. package/dist/command/index.d.ts.map +1 -1
  127. package/dist/command/index.js +160 -563
  128. package/dist/command/index.js.map +1 -1
  129. package/dist/core/index.browser.js +845 -859
  130. package/dist/core/index.browser.js.map +1 -1
  131. package/dist/core/index.d.ts +787 -527
  132. package/dist/core/index.d.ts.map +1 -1
  133. package/dist/core/index.js +845 -859
  134. package/dist/core/index.js.map +1 -1
  135. package/dist/core/index.native.js +845 -859
  136. package/dist/core/index.native.js.map +1 -1
  137. package/dist/core/index.workerd.js +845 -859
  138. package/dist/core/index.workerd.js.map +1 -1
  139. package/dist/crypto/index.browser.js +1 -1
  140. package/dist/crypto/index.browser.js.map +1 -1
  141. package/dist/crypto/index.d.ts +3 -4
  142. package/dist/crypto/index.d.ts.map +1 -1
  143. package/dist/crypto/index.js +6 -3
  144. package/dist/crypto/index.js.map +1 -1
  145. package/dist/datetime/index.d.ts +12 -2
  146. package/dist/datetime/index.d.ts.map +1 -1
  147. package/dist/datetime/index.js +6 -1
  148. package/dist/datetime/index.js.map +1 -1
  149. package/dist/email/brevo/index.d.ts +0 -1
  150. package/dist/email/brevo/index.d.ts.map +1 -1
  151. package/dist/email/brevo/index.js +4 -4
  152. package/dist/email/brevo/index.js.map +1 -1
  153. package/dist/email/cloudflare/index.d.ts +0 -1
  154. package/dist/email/cloudflare/index.d.ts.map +1 -1
  155. package/dist/email/cloudflare/index.js +2 -2
  156. package/dist/email/cloudflare/index.js.map +1 -1
  157. package/dist/email/core/index.d.ts +15 -7
  158. package/dist/email/core/index.d.ts.map +1 -1
  159. package/dist/email/core/index.js +14 -5
  160. package/dist/email/core/index.js.map +1 -1
  161. package/dist/email/core/index.workerd.js +5 -1
  162. package/dist/email/core/index.workerd.js.map +1 -1
  163. package/dist/email/smtp/index.d.ts +8 -9
  164. package/dist/email/smtp/index.d.ts.map +1 -1
  165. package/dist/email/smtp/index.js +702 -479
  166. package/dist/email/smtp/index.js.map +1 -1
  167. package/dist/fake/index.d.ts +1580 -1238
  168. package/dist/fake/index.d.ts.map +1 -1
  169. package/dist/fake/index.js +11728 -32131
  170. package/dist/fake/index.js.map +1 -1
  171. package/dist/lock/core/index.d.ts +13 -9
  172. package/dist/lock/core/index.d.ts.map +1 -1
  173. package/dist/lock/core/index.js +5 -5
  174. package/dist/lock/core/index.js.map +1 -1
  175. package/dist/lock/redis/index.d.ts +0 -1
  176. package/dist/lock/redis/index.d.ts.map +1 -1
  177. package/dist/lock/redis/index.js.map +1 -1
  178. package/dist/logger/index.d.ts +81 -69
  179. package/dist/logger/index.d.ts.map +1 -1
  180. package/dist/logger/index.js +123 -56
  181. package/dist/logger/index.js.map +1 -1
  182. package/dist/mcp/index.d.ts +36 -90
  183. package/dist/mcp/index.d.ts.map +1 -1
  184. package/dist/mcp/index.js +65 -70
  185. package/dist/mcp/index.js.map +1 -1
  186. package/dist/orm/core/index.browser.js +54 -40
  187. package/dist/orm/core/index.browser.js.map +1 -1
  188. package/dist/orm/core/index.bun.js +140 -106
  189. package/dist/orm/core/index.bun.js.map +1 -1
  190. package/dist/orm/core/index.d.ts +145 -150
  191. package/dist/orm/core/index.d.ts.map +1 -1
  192. package/dist/orm/core/index.js +144 -109
  193. package/dist/orm/core/index.js.map +1 -1
  194. package/dist/orm/postgres/index.bun.js +64 -54
  195. package/dist/orm/postgres/index.bun.js.map +1 -1
  196. package/dist/orm/postgres/index.d.ts +36 -76
  197. package/dist/orm/postgres/index.d.ts.map +1 -1
  198. package/dist/orm/postgres/index.js +67 -57
  199. package/dist/orm/postgres/index.js.map +1 -1
  200. package/dist/queue/core/index.d.ts +62 -75
  201. package/dist/queue/core/index.d.ts.map +1 -1
  202. package/dist/queue/core/index.js +48 -71
  203. package/dist/queue/core/index.js.map +1 -1
  204. package/dist/queue/core/index.workerd.js +48 -71
  205. package/dist/queue/core/index.workerd.js.map +1 -1
  206. package/dist/queue/redis/index.d.ts +3 -4
  207. package/dist/queue/redis/index.d.ts.map +1 -1
  208. package/dist/queue/redis/index.js +2 -2
  209. package/dist/queue/redis/index.js.map +1 -1
  210. package/dist/react/auth/index.browser.js.map +1 -1
  211. package/dist/react/auth/index.d.ts +7 -4
  212. package/dist/react/auth/index.d.ts.map +1 -1
  213. package/dist/react/auth/index.js.map +1 -1
  214. package/dist/react/core/index.d.ts +87 -5
  215. package/dist/react/core/index.d.ts.map +1 -1
  216. package/dist/react/core/index.js +170 -23
  217. package/dist/react/core/index.js.map +1 -1
  218. package/dist/react/form/index.d.ts +4 -6
  219. package/dist/react/form/index.d.ts.map +1 -1
  220. package/dist/react/form/index.js +107 -71
  221. package/dist/react/form/index.js.map +1 -1
  222. package/dist/react/head/index.browser.js.map +1 -1
  223. package/dist/react/head/index.d.ts +0 -1
  224. package/dist/react/head/index.d.ts.map +1 -1
  225. package/dist/react/head/index.js.map +1 -1
  226. package/dist/react/i18n/index.d.ts +47 -5
  227. package/dist/react/i18n/index.d.ts.map +1 -1
  228. package/dist/react/i18n/index.js +116 -12
  229. package/dist/react/i18n/index.js.map +1 -1
  230. package/dist/react/intro/index.d.ts +1 -4
  231. package/dist/react/intro/index.d.ts.map +1 -1
  232. package/dist/react/intro/index.js.map +1 -1
  233. package/dist/react/router/index.browser.js +188 -29
  234. package/dist/react/router/index.browser.js.map +1 -1
  235. package/dist/react/router/index.d.ts +480 -372
  236. package/dist/react/router/index.d.ts.map +1 -1
  237. package/dist/react/router/index.js +261 -47
  238. package/dist/react/router/index.js.map +1 -1
  239. package/dist/react/sitemap/index.browser.js +35 -0
  240. package/dist/react/sitemap/index.browser.js.map +1 -0
  241. package/dist/react/sitemap/index.d.ts +91 -0
  242. package/dist/react/sitemap/index.d.ts.map +1 -0
  243. package/dist/react/sitemap/index.js +131 -0
  244. package/dist/react/sitemap/index.js.map +1 -0
  245. package/dist/react/testing/index.d.ts +4 -5
  246. package/dist/react/testing/index.d.ts.map +1 -1
  247. package/dist/react/testing/index.js +41 -15
  248. package/dist/react/testing/index.js.map +1 -1
  249. package/dist/react/testing/{chunk-BpyX8vjI.js → rolldown-runtime-Bl3dcgcQ.js} +1 -1
  250. package/dist/react/ui/index.d.ts +35 -34
  251. package/dist/react/ui/index.d.ts.map +1 -1
  252. package/dist/react/ui/index.js +12 -17
  253. package/dist/react/ui/index.js.map +1 -1
  254. package/dist/redis/index.bun.js +5 -5
  255. package/dist/redis/index.bun.js.map +1 -1
  256. package/dist/redis/index.d.ts +6 -7
  257. package/dist/redis/index.d.ts.map +1 -1
  258. package/dist/redis/index.js +6 -6
  259. package/dist/redis/index.js.map +1 -1
  260. package/dist/retry/index.d.ts +0 -1
  261. package/dist/retry/index.d.ts.map +1 -1
  262. package/dist/retry/index.js.map +1 -1
  263. package/dist/router/index.d.ts.map +1 -1
  264. package/dist/router/index.js.map +1 -1
  265. package/dist/scheduler/index.d.ts +4 -12
  266. package/dist/scheduler/index.d.ts.map +1 -1
  267. package/dist/scheduler/index.js +9 -4
  268. package/dist/scheduler/index.js.map +1 -1
  269. package/dist/scheduler/index.workerd.js +9 -4
  270. package/dist/scheduler/index.workerd.js.map +1 -1
  271. package/dist/security/index.browser.js +30 -28
  272. package/dist/security/index.browser.js.map +1 -1
  273. package/dist/security/index.d.ts +113 -44
  274. package/dist/security/index.d.ts.map +1 -1
  275. package/dist/security/index.js +452 -37
  276. package/dist/security/index.js.map +1 -1
  277. package/dist/server/auth/index.browser.js +19 -19
  278. package/dist/server/auth/index.browser.js.map +1 -1
  279. package/dist/server/auth/index.d.ts +215 -187
  280. package/dist/server/auth/index.d.ts.map +1 -1
  281. package/dist/server/auth/index.js +1145 -86
  282. package/dist/server/auth/index.js.map +1 -1
  283. package/dist/server/cookies/index.browser.js +103 -5
  284. package/dist/server/cookies/index.browser.js.map +1 -1
  285. package/dist/server/cookies/index.d.ts +86 -4
  286. package/dist/server/cookies/index.d.ts.map +1 -1
  287. package/dist/server/cookies/index.js +121 -8
  288. package/dist/server/cookies/index.js.map +1 -1
  289. package/dist/server/core/index.browser.js +22 -27
  290. package/dist/server/core/index.browser.js.map +1 -1
  291. package/dist/server/core/index.d.ts +134 -85
  292. package/dist/server/core/index.d.ts.map +1 -1
  293. package/dist/server/core/index.js +130 -118
  294. package/dist/server/core/index.js.map +1 -1
  295. package/dist/server/cors/index.d.ts +9 -10
  296. package/dist/server/cors/index.d.ts.map +1 -1
  297. package/dist/server/cors/index.js +14 -26
  298. package/dist/server/cors/index.js.map +1 -1
  299. package/dist/server/etag/index.d.ts +2 -3
  300. package/dist/server/etag/index.d.ts.map +1 -1
  301. package/dist/server/etag/index.js.map +1 -1
  302. package/dist/server/health/index.d.ts +18 -19
  303. package/dist/server/health/index.d.ts.map +1 -1
  304. package/dist/server/health/index.js +6 -6
  305. package/dist/server/health/index.js.map +1 -1
  306. package/dist/server/links/index.browser.js +15 -18
  307. package/dist/server/links/index.browser.js.map +1 -1
  308. package/dist/server/links/index.d.ts +66 -67
  309. package/dist/server/links/index.d.ts.map +1 -1
  310. package/dist/server/links/index.js +29 -32
  311. package/dist/server/links/index.js.map +1 -1
  312. package/dist/server/metrics/index.d.ts +0 -1
  313. package/dist/server/metrics/index.d.ts.map +1 -1
  314. package/dist/server/metrics/index.js +10 -3
  315. package/dist/server/metrics/index.js.map +1 -1
  316. package/dist/server/proxy/index.d.ts +0 -1
  317. package/dist/server/proxy/index.d.ts.map +1 -1
  318. package/dist/server/proxy/index.js.map +1 -1
  319. package/dist/server/rate-limit/index.d.ts +8 -9
  320. package/dist/server/rate-limit/index.d.ts.map +1 -1
  321. package/dist/server/rate-limit/index.js +6 -12
  322. package/dist/server/rate-limit/index.js.map +1 -1
  323. package/dist/server/static/index.d.ts +0 -1
  324. package/dist/server/static/index.d.ts.map +1 -1
  325. package/dist/server/static/index.js.map +1 -1
  326. package/dist/server/swagger/index.d.ts +4 -4
  327. package/dist/server/swagger/index.d.ts.map +1 -1
  328. package/dist/server/swagger/index.js +37 -25
  329. package/dist/server/swagger/index.js.map +1 -1
  330. package/dist/sms/index.d.ts +0 -1
  331. package/dist/sms/index.d.ts.map +1 -1
  332. package/dist/sms/index.js.map +1 -1
  333. package/dist/system/index.browser.js.map +1 -1
  334. package/dist/system/index.d.ts +0 -1
  335. package/dist/system/index.d.ts.map +1 -1
  336. package/dist/system/index.js +2 -1
  337. package/dist/system/index.js.map +1 -1
  338. package/dist/system/index.workerd.js.map +1 -1
  339. package/dist/topic/core/index.d.ts +19 -20
  340. package/dist/topic/core/index.d.ts.map +1 -1
  341. package/dist/topic/core/index.js +8 -8
  342. package/dist/topic/core/index.js.map +1 -1
  343. package/dist/topic/redis/index.d.ts +3 -4
  344. package/dist/topic/redis/index.d.ts.map +1 -1
  345. package/dist/topic/redis/index.js +2 -2
  346. package/dist/topic/redis/index.js.map +1 -1
  347. package/package.json +36 -36
  348. package/src/api/audits/__tests__/AuditJobs.spec.ts +83 -0
  349. package/src/api/audits/__tests__/AuditService.spec.ts +139 -1
  350. package/src/api/audits/controllers/AdminAuditController.ts +41 -41
  351. package/src/api/audits/entities/audits.ts +22 -22
  352. package/src/api/audits/index.ts +6 -1
  353. package/src/api/audits/jobs/AuditJobs.ts +29 -0
  354. package/src/api/audits/parameters/AuditParameters.ts +51 -0
  355. package/src/api/audits/primitives/$audit.ts +24 -0
  356. package/src/api/audits/schemas/auditQuerySchema.ts +13 -13
  357. package/src/api/audits/schemas/createAuditSchema.ts +18 -18
  358. package/src/api/audits/services/AuditService.ts +79 -7
  359. package/src/api/files/__tests__/FileController.spec.ts +5 -5
  360. package/src/api/files/__tests__/FileJobs.spec.ts +6 -0
  361. package/src/api/files/controllers/FileController.ts +25 -25
  362. package/src/api/files/entities/files.ts +15 -15
  363. package/src/api/files/schemas/fileCreatorSummarySchema.ts +7 -7
  364. package/src/api/files/schemas/fileQuerySchema.ts +9 -9
  365. package/src/api/files/schemas/fileResourceSchema.ts +7 -9
  366. package/src/api/files/schemas/storageStatsSchema.ts +13 -13
  367. package/src/api/jobs/__tests__/$job-hardening.spec.ts +289 -0
  368. package/src/api/jobs/__tests__/$job.spec.ts +18 -18
  369. package/src/api/jobs/controllers/AdminJobController.ts +8 -8
  370. package/src/api/jobs/entities/jobExecutionEntity.ts +29 -19
  371. package/src/api/jobs/providers/JobProvider.ts +128 -12
  372. package/src/api/jobs/providers/JobQueueProvider.ts +2 -2
  373. package/src/api/jobs/schemas/jobConfigAtom.ts +22 -22
  374. package/src/api/jobs/schemas/jobExecutionQuerySchema.ts +6 -6
  375. package/src/api/jobs/schemas/jobExecutionResourceSchema.ts +11 -15
  376. package/src/api/jobs/schemas/jobRegistrationSchema.ts +20 -19
  377. package/src/api/jobs/schemas/triggerJobSchema.ts +3 -3
  378. package/src/api/jobs/services/JobService.ts +6 -6
  379. package/src/api/keys/__tests__/ApiKeyService.spec.ts +2 -2
  380. package/src/api/keys/controllers/AdminApiKeyController.ts +10 -10
  381. package/src/api/keys/entities/apiKeyEntity.ts +15 -15
  382. package/src/api/keys/schemas/adminApiKeyQuerySchema.ts +4 -4
  383. package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +15 -15
  384. package/src/api/keys/schemas/createApiKeyBodySchema.ts +5 -5
  385. package/src/api/keys/schemas/createApiKeyResponseSchema.ts +9 -9
  386. package/src/api/keys/schemas/listApiKeyResponseSchema.ts +13 -13
  387. package/src/api/keys/schemas/revokeApiKeyParamsSchema.ts +3 -3
  388. package/src/api/keys/schemas/revokeApiKeyResponseSchema.ts +3 -3
  389. package/src/api/notifications/__tests__/AlephaApiNotifications.spec.ts +2 -2
  390. package/src/api/notifications/controllers/AdminNotificationController.ts +38 -14
  391. package/src/api/notifications/jobs/NotificationJobs.ts +7 -6
  392. package/src/api/notifications/primitives/$notification.ts +43 -4
  393. package/src/api/notifications/schemas/notificationContactPreferencesSchema.ts +4 -4
  394. package/src/api/notifications/schemas/notificationContactSchema.ts +7 -7
  395. package/src/api/notifications/schemas/notificationDetailResourceSchema.ts +9 -11
  396. package/src/api/notifications/schemas/notificationPayloadSchema.ts +11 -9
  397. package/src/api/notifications/schemas/notificationQuerySchema.ts +6 -6
  398. package/src/api/notifications/schemas/notificationResourceSchema.ts +14 -14
  399. package/src/api/notifications/services/NotificationSenderService.ts +38 -2
  400. package/src/api/oauth/__tests__/OAuthClientService.spec.ts +42 -0
  401. package/src/api/oauth/__tests__/OAuthController.spec.ts +128 -0
  402. package/src/api/oauth/controllers/OAuthController.ts +132 -12
  403. package/src/api/oauth/entities/oauthClientEntity.ts +29 -12
  404. package/src/api/oauth/helpers/oauthMetadata.ts +1 -0
  405. package/src/api/oauth/helpers/oidcMetadata.ts +19 -0
  406. package/src/api/oauth/index.ts +1 -0
  407. package/src/api/oauth/schemas/authorizeDecisionBodySchema.ts +12 -11
  408. package/src/api/oauth/schemas/authorizeQuerySchema.ts +12 -10
  409. package/src/api/oauth/schemas/registerClientBodySchema.ts +10 -11
  410. package/src/api/oauth/schemas/tokenRequestBodySchema.ts +9 -8
  411. package/src/api/oauth/services/OAuthClientService.ts +228 -15
  412. package/src/api/organizations/controllers/AdminOrganizationController.ts +8 -8
  413. package/src/api/organizations/entities/organizations.ts +6 -6
  414. package/src/api/organizations/schemas/createOrganizationSchema.ts +5 -5
  415. package/src/api/organizations/schemas/organizationQuerySchema.ts +4 -4
  416. package/src/api/organizations/schemas/updateOrganizationSchema.ts +1 -2
  417. package/src/api/parameters/__tests__/$parameter.spec.ts +229 -50
  418. package/src/api/parameters/controllers/AdminParameterController.ts +9 -12
  419. package/src/api/parameters/entities/parameters.ts +29 -16
  420. package/src/api/parameters/primitives/$parameter.ts +3 -3
  421. package/src/api/parameters/schemas/activateParameterBodySchema.ts +4 -4
  422. package/src/api/parameters/schemas/createParameterVersionBodySchema.ts +15 -15
  423. package/src/api/parameters/schemas/parameterCreatorSummarySchema.ts +7 -7
  424. package/src/api/parameters/schemas/parameterCurrentResponseSchema.ts +7 -7
  425. package/src/api/parameters/schemas/parameterHistoryResponseSchema.ts +3 -3
  426. package/src/api/parameters/schemas/parameterNameParamSchema.ts +2 -3
  427. package/src/api/parameters/schemas/parameterNamesResponseSchema.ts +3 -3
  428. package/src/api/parameters/schemas/parameterResponseSchema.ts +3 -3
  429. package/src/api/parameters/schemas/parameterStatusSchema.ts +2 -2
  430. package/src/api/parameters/schemas/parameterTreeNodeSchema.ts +6 -6
  431. package/src/api/parameters/schemas/parameterVersionParamSchema.ts +5 -6
  432. package/src/api/parameters/schemas/parameterVersionResponseSchema.ts +3 -3
  433. package/src/api/parameters/schemas/rollbackParameterBodySchema.ts +6 -9
  434. package/src/api/parameters/services/ParameterProvider.ts +152 -65
  435. package/src/api/payments/controllers/AdminPaymentController.ts +7 -7
  436. package/src/api/payments/controllers/MockCheckoutController.ts +79 -28
  437. package/src/api/payments/controllers/PaymentController.ts +4 -4
  438. package/src/api/payments/entities/paymentIntents.ts +11 -11
  439. package/src/api/payments/entities/paymentMethods.ts +11 -11
  440. package/src/api/payments/entities/refunds.ts +9 -9
  441. package/src/api/payments/providers/PaymentProvider.ts +18 -0
  442. package/src/api/payments/schemas/intentSchemas.ts +25 -25
  443. package/src/api/payments/schemas/paymentMethodSchemas.ts +3 -3
  444. package/src/api/payments/services/PaymentService.ts +60 -3
  445. package/src/api/subscriptions/__tests__/SubscriptionService.spec.ts +14 -0
  446. package/src/api/subscriptions/controllers/AdminSubscriptionController.ts +11 -11
  447. package/src/api/subscriptions/controllers/SubscriptionController.ts +5 -4
  448. package/src/api/subscriptions/entities/subscriptionEvents.ts +15 -15
  449. package/src/api/subscriptions/entities/subscriptions.ts +22 -22
  450. package/src/api/subscriptions/notifications/SubscriptionNotifications.ts +22 -22
  451. package/src/api/subscriptions/schemas/cancelSubscriptionSchema.ts +4 -4
  452. package/src/api/subscriptions/schemas/changePlanSchema.ts +5 -5
  453. package/src/api/subscriptions/schemas/createSubscriptionSchema.ts +14 -7
  454. package/src/api/subscriptions/schemas/entitlementsSchema.ts +10 -10
  455. package/src/api/subscriptions/schemas/mrrSchema.ts +9 -9
  456. package/src/api/subscriptions/schemas/planDefinitionSchema.ts +21 -21
  457. package/src/api/subscriptions/schemas/planResourceSchema.ts +19 -19
  458. package/src/api/subscriptions/schemas/subscriptionQuerySchema.ts +8 -8
  459. package/src/api/subscriptions/schemas/subscriptionSettingsSchema.ts +7 -7
  460. package/src/api/subscriptions/schemas/subscriptionStatsSchema.ts +17 -17
  461. package/src/api/subscriptions/services/SubscriptionConfig.ts +2 -2
  462. package/src/api/users/__tests__/ApiKeys-integration.spec.ts +11 -11
  463. package/src/api/users/atoms/realmAuthSettingsAtom.ts +111 -119
  464. package/src/api/users/controllers/AdminIdentityController.ts +29 -19
  465. package/src/api/users/controllers/AdminSessionController.ts +37 -27
  466. package/src/api/users/controllers/AdminUserController.ts +75 -53
  467. package/src/api/users/controllers/MySessionController.ts +125 -0
  468. package/src/api/users/controllers/RealmController.ts +9 -9
  469. package/src/api/users/controllers/UserController.ts +55 -55
  470. package/src/api/users/entities/identities.ts +8 -8
  471. package/src/api/users/entities/sessions.ts +17 -17
  472. package/src/api/users/entities/users.ts +17 -17
  473. package/src/api/users/index.ts +3 -0
  474. package/src/api/users/notifications/UserNotifications.ts +76 -24
  475. package/src/api/users/primitives/$realm.ts +12 -0
  476. package/src/api/users/schemas/completePasswordResetRequestSchema.ts +8 -12
  477. package/src/api/users/schemas/completeRegistrationRequestSchema.ts +17 -20
  478. package/src/api/users/schemas/createUserSchema.ts +2 -2
  479. package/src/api/users/schemas/identityQuerySchema.ts +4 -4
  480. package/src/api/users/schemas/identityResourceSchema.ts +3 -2
  481. package/src/api/users/schemas/loginSchema.ts +4 -4
  482. package/src/api/users/schemas/passwordResetIntentResponseSchema.ts +6 -8
  483. package/src/api/users/schemas/realmConfigSchema.ts +10 -10
  484. package/src/api/users/schemas/registerQuerySchema.ts +6 -6
  485. package/src/api/users/schemas/registerRequestSchema.ts +21 -43
  486. package/src/api/users/schemas/registerResponseSchema.ts +2 -2
  487. package/src/api/users/schemas/registerSchema.ts +13 -31
  488. package/src/api/users/schemas/registrationIntentResponseSchema.ts +19 -23
  489. package/src/api/users/schemas/resetPasswordSchema.ts +10 -17
  490. package/src/api/users/schemas/sessionQuerySchema.ts +3 -3
  491. package/src/api/users/schemas/sessionResourceSchema.ts +25 -25
  492. package/src/api/users/schemas/updateUserSchema.ts +3 -4
  493. package/src/api/users/schemas/userQuerySchema.ts +7 -7
  494. package/src/api/users/services/RegistrationService.ts +25 -11
  495. package/src/api/users/services/UserService.ts +12 -6
  496. package/src/api/verifications/__tests__/CodeVerification.spec.ts +63 -101
  497. package/src/api/verifications/__tests__/LinkVerification.spec.ts +23 -92
  498. package/src/api/verifications/controllers/VerificationController.ts +13 -27
  499. package/src/api/verifications/entities/verifications.ts +13 -14
  500. package/src/api/verifications/schemas/requestVerificationCodeResponseSchema.ts +17 -14
  501. package/src/api/verifications/schemas/validateVerificationCodeResponseSchema.ts +9 -10
  502. package/src/api/verifications/schemas/verificationSettingsSchema.ts +65 -66
  503. package/src/api/verifications/schemas/verificationTypeEnumSchema.ts +2 -2
  504. package/src/api/verifications/services/VerificationService.ts +12 -0
  505. package/src/background/__tests__/BackgroundTaskProvider.spec.ts +36 -0
  506. package/src/batch/__tests__/$batch.spec.ts +22 -22
  507. package/src/batch/__tests__/startup-buffering.spec.ts +9 -9
  508. package/src/bin/index.ts +1 -1
  509. package/src/bucket/__tests__/TenantScopedBucket.spec.ts +60 -0
  510. package/src/bucket/providers/LocalFileStorageProvider.ts +14 -6
  511. package/src/bucket/providers/MemoryFileStorageProvider.ts +18 -7
  512. package/src/bucket/providers/R2FileStorageProvider.ts +14 -6
  513. package/src/bucket/providers/S3FileStorageProvider.ts +31 -15
  514. package/src/cache/core/primitives/$cache.ts +7 -10
  515. package/src/cache/database/entities/cacheEntries.ts +16 -27
  516. package/src/cache/database/providers/DatabaseCacheProvider.ts +15 -13
  517. package/src/cache/redis/providers/RedisCacheProvider.ts +6 -6
  518. package/src/captcha/providers/TurnstileCaptchaProvider.ts +4 -4
  519. package/src/cli/core/__tests__/BuildCloudflareTask.spec.ts +178 -0
  520. package/src/cli/core/__tests__/BuildDockerTask.spec.ts +0 -2
  521. package/src/cli/core/__tests__/DbCommand.spec.ts +108 -0
  522. package/src/cli/core/atoms/appEntryOptions.ts +5 -5
  523. package/src/cli/core/atoms/buildOptions.ts +76 -88
  524. package/src/cli/core/atoms/changelogOptions.ts +3 -3
  525. package/src/cli/core/atoms/devOptions.ts +3 -3
  526. package/src/cli/core/commands/build.ts +36 -49
  527. package/src/cli/core/commands/db.ts +171 -83
  528. package/src/cli/core/commands/dev.ts +8 -8
  529. package/src/cli/core/commands/gen/changelog.ts +12 -14
  530. package/src/cli/core/commands/gen/env.ts +6 -6
  531. package/src/cli/core/commands/gen/openapi.ts +6 -6
  532. package/src/cli/core/commands/init.ts +28 -33
  533. package/src/cli/core/commands/pack.ts +10 -10
  534. package/src/cli/core/commands/root.ts +7 -8
  535. package/src/cli/core/commands/test.ts +17 -20
  536. package/src/cli/core/index.ts +0 -3
  537. package/src/cli/core/tasks/BuildCloudflareTask.ts +138 -245
  538. package/src/cli/core/tasks/BuildPrerenderTask.ts +44 -7
  539. package/src/cli/core/templates/apiHelloResponseSchemaTs.ts +4 -4
  540. package/src/cli/devtools/atoms/devtoolsOptions.ts +6 -6
  541. package/src/cli/i18n/__tests__/I18nCheckService.spec.ts +48 -0
  542. package/src/cli/i18n/atoms/i18nOptions.ts +8 -8
  543. package/src/cli/i18n/services/I18nCheckService.ts +65 -11
  544. package/src/cli/platform/commands/SecretsCommand.ts +24 -25
  545. package/src/cli/platform/commands/platform.ts +40 -46
  546. package/src/cli/platform/index.ts +1 -1
  547. package/src/cli/platform-lib/__tests__/CloudflareAdapter.spec.ts +0 -4
  548. package/src/cli/platform-lib/__tests__/PlatformInspector.spec.ts +10 -3
  549. package/src/cli/platform-lib/__tests__/VercelAdapter.spec.ts +0 -2
  550. package/src/cli/platform-lib/adapters/CloudflareAdapter.ts +141 -50
  551. package/src/cli/platform-lib/adapters/VercelAdapter.ts +6 -11
  552. package/src/cli/platform-lib/atoms/platformOptions.ts +46 -25
  553. package/src/cli/platform-lib/schemas/cloudflare.ts +87 -87
  554. package/src/cli/platform-lib/schemas/platform.ts +51 -51
  555. package/src/cli/platform-lib/schemas/vercel.ts +28 -28
  556. package/src/cli/platform-lib/services/CloudflareApi.ts +5 -5
  557. package/src/cli/platform-lib/services/VercelApi.ts +4 -4
  558. package/src/cli/platform-lib/services/VercelCli.ts +6 -15
  559. package/src/cli/platform-lib/services/WranglerApi.ts +6 -15
  560. package/src/cli/vendor/atoms/vendorOptions.ts +9 -9
  561. package/src/cli/vendor/commands/VendorCommand.ts +11 -12
  562. package/src/command/__tests__/$command.spec.ts +82 -83
  563. package/src/command/__tests__/Asker.spec.ts +6 -13
  564. package/src/command/__tests__/CliProvider.spec.ts +136 -149
  565. package/src/command/__tests__/Runner.spec.ts +86 -110
  566. package/src/command/helpers/Asker.ts +23 -58
  567. package/src/command/helpers/Runner.ts +34 -110
  568. package/src/command/index.ts +4 -9
  569. package/src/command/primitives/$command.ts +10 -10
  570. package/src/command/providers/CliProvider.ts +183 -161
  571. package/src/core/Alepha.ts +62 -13
  572. package/src/core/__tests__/$atom.spec.ts +52 -3
  573. package/src/core/__tests__/$computed.spec.ts +129 -0
  574. package/src/core/__tests__/$env.spec.ts +13 -13
  575. package/src/core/__tests__/$inject.spec.ts +4 -4
  576. package/src/core/__tests__/$module.spec.ts +1 -1
  577. package/src/core/__tests__/Alepha-graph.spec.ts +1 -1
  578. package/src/core/__tests__/Alepha-parseEnv.spec.ts +32 -32
  579. package/src/core/__tests__/Alepha-start.spec.ts +3 -3
  580. package/src/core/__tests__/CodecManager.spec.ts +113 -94
  581. package/src/core/__tests__/KeylessJsonSchemaCodec.spec.ts +138 -138
  582. package/src/core/__tests__/SchemaValidator.spec.ts +43 -44
  583. package/src/core/__tests__/StateManager.persist.browser.spec.ts +87 -0
  584. package/src/core/__tests__/StateManager.spec.ts +423 -0
  585. package/src/core/__tests__/TypeBox-usecases.spec.ts +8 -8
  586. package/src/core/__tests__/TypeProvider.spec.ts +314 -309
  587. package/src/core/__tests__/dump.spec.ts +6 -6
  588. package/src/core/__tests__/pagination.spec.ts +4 -4
  589. package/src/core/__tests__/scoped-after-start.spec.ts +43 -0
  590. package/src/core/errors/TypeBoxError.ts +10 -4
  591. package/src/core/helpers/FileLike.ts +5 -5
  592. package/src/core/helpers/coerceStrings.ts +70 -0
  593. package/src/core/helpers/jsonSchemaToZod.ts +112 -0
  594. package/src/core/index.shared.ts +4 -1
  595. package/src/core/primitives/$atom.ts +95 -27
  596. package/src/core/primitives/$computed.ts +148 -0
  597. package/src/core/primitives/$env.ts +5 -5
  598. package/src/core/primitives/$state.ts +1 -1
  599. package/src/core/providers/AlsProvider.ts +26 -0
  600. package/src/core/providers/CodecManager.ts +1 -2
  601. package/src/core/providers/JsonSchemaCodec.ts +1 -2
  602. package/src/core/providers/KeylessJsonSchemaCodec.ts +82 -57
  603. package/src/core/providers/SchemaValidator.ts +48 -158
  604. package/src/core/providers/StateManager.ts +383 -9
  605. package/src/core/providers/TypeProvider.ts +80 -734
  606. package/src/core/providers/ZodProvider.ts +380 -0
  607. package/src/core/providers/zodAugment.ts +69 -0
  608. package/src/core/schemas/pageQuerySchema.ts +19 -21
  609. package/src/core/schemas/pageSchema.ts +47 -57
  610. package/src/crypto/__tests__/SecretProvider.spec.ts +31 -0
  611. package/src/crypto/providers/SecretProvider.ts +16 -10
  612. package/src/datetime/primitives/$throttle.ts +6 -1
  613. package/src/email/brevo/providers/BrevoEmailProvider.ts +4 -4
  614. package/src/email/cloudflare/providers/CloudflareEmailProvider.ts +6 -6
  615. package/src/email/core/index.ts +7 -2
  616. package/src/email/core/primitives/$email.ts +5 -1
  617. package/src/email/core/providers/LocalEmailProvider.ts +5 -5
  618. package/src/email/smtp/providers/NodemailerEmailProvider.ts +41 -52
  619. package/src/fake/__tests__/FakeProvider.spec.ts +110 -110
  620. package/src/fake/__tests__/keyName.example.ts +21 -21
  621. package/src/fake/__tests__/keyName.spec.ts +41 -41
  622. package/src/fake/__tests__/module.example.ts +8 -8
  623. package/src/fake/providers/FakeProvider.ts +122 -121
  624. package/src/lock/core/__tests__/lock-mutual-exclusion.spec.ts +44 -0
  625. package/src/lock/core/index.ts +1 -0
  626. package/src/lock/core/primitives/$lock.ts +13 -6
  627. package/src/logger/__tests__/CliFormatterProvider.spec.ts +76 -0
  628. package/src/logger/__tests__/Logger.spec.ts +49 -0
  629. package/src/logger/index.ts +25 -18
  630. package/src/logger/providers/CliFormatterProvider.ts +75 -0
  631. package/src/logger/schemas/logEntrySchema.ts +10 -10
  632. package/src/logger/services/Logger.ts +18 -0
  633. package/src/mcp/__tests__/$prompt.spec.ts +21 -23
  634. package/src/mcp/__tests__/$tool.spec.ts +22 -22
  635. package/src/mcp/__tests__/McpServerProvider.spec.ts +82 -11
  636. package/src/mcp/__tests__/StreamableHttpMcpTransport.spec.ts +2 -2
  637. package/src/mcp/__tests__/integration.spec.ts +33 -33
  638. package/src/mcp/primitives/$prompt.ts +11 -9
  639. package/src/mcp/primitives/$tool.ts +27 -86
  640. package/src/mcp/providers/McpServerProvider.ts +55 -0
  641. package/src/mcp/transports/StreamableHttpMcpTransport.ts +7 -7
  642. package/src/orm/__tests__/$repository-tests.ts +133 -27
  643. package/src/orm/__tests__/$repository.spec.ts +23 -0
  644. package/src/orm/__tests__/$transactional-tests.ts +4 -4
  645. package/src/orm/__tests__/ModelBuilder-tests.ts +28 -28
  646. package/src/orm/__tests__/ModelBuilder.spec.ts +124 -106
  647. package/src/orm/__tests__/QueryManager.spec.ts +5 -5
  648. package/src/orm/__tests__/delete-returning-tests.ts +11 -11
  649. package/src/orm/__tests__/deletedAt-tests.ts +3 -3
  650. package/src/orm/__tests__/enums.spec.ts +29 -25
  651. package/src/orm/__tests__/execute-tests.ts +8 -8
  652. package/src/orm/__tests__/fixtures/bigEntitySchema.ts +48 -48
  653. package/src/orm/__tests__/fixtures/userEntitySchema.ts +6 -6
  654. package/src/orm/__tests__/joins-tests.ts +30 -30
  655. package/src/orm/__tests__/organization-tests.ts +105 -3
  656. package/src/orm/__tests__/organization.spec.ts +46 -0
  657. package/src/orm/__tests__/orm-errors.spec.ts +10 -10
  658. package/src/orm/__tests__/orm-next-tests.ts +29 -29
  659. package/src/orm/__tests__/orm-showcase-tests.ts +9 -9
  660. package/src/orm/__tests__/primaryKey.spec.ts +4 -4
  661. package/src/orm/__tests__/query-date-encoding-tests.ts +17 -17
  662. package/src/orm/__tests__/ref-auto-onDelete.spec.ts +14 -14
  663. package/src/orm/__tests__/references.spec.ts +7 -7
  664. package/src/orm/__tests__/security.spec.ts +17 -17
  665. package/src/orm/__tests__/string-operators-tests.ts +5 -5
  666. package/src/orm/__tests__/timestamps-tests.ts +14 -14
  667. package/src/orm/__tests__/validation-tests.ts +5 -5
  668. package/src/orm/core/__tests__/BunSqliteProvider.bun.spec.ts +8 -8
  669. package/src/orm/core/constants/PG_SYMBOLS.ts +13 -1
  670. package/src/orm/core/entities/alephaSequences.ts +8 -8
  671. package/src/orm/core/helpers/pgAttr.ts +4 -4
  672. package/src/orm/core/primitives/$entity.ts +10 -6
  673. package/src/orm/core/providers/DatabaseTypeProvider.ts +46 -53
  674. package/src/orm/core/providers/drivers/BunSqliteProvider.ts +8 -8
  675. package/src/orm/core/providers/drivers/CloudflareD1Provider.ts +3 -5
  676. package/src/orm/core/providers/drivers/NodeSqliteProvider.ts +8 -8
  677. package/src/orm/core/schemas/databaseEnvSchema.ts +4 -4
  678. package/src/orm/core/schemas/insertSchema.ts +14 -18
  679. package/src/orm/core/schemas/legacyIdSchema.ts +2 -2
  680. package/src/orm/core/schemas/updateSchema.ts +10 -16
  681. package/src/orm/core/services/PgRelationManager.ts +2 -2
  682. package/src/orm/core/services/QueryManager.ts +13 -2
  683. package/src/orm/core/services/Repository.ts +88 -33
  684. package/src/orm/core/services/SqliteModelBuilder.ts +38 -45
  685. package/src/orm/postgres/__tests__/BunPostgresProvider.bun.spec.ts +4 -4
  686. package/src/orm/postgres/providers/CloudflareHyperdriveProvider.ts +4 -6
  687. package/src/orm/postgres/schemas/postgresEnvSchema.ts +6 -6
  688. package/src/orm/postgres/services/PostgresModelBuilder.ts +127 -114
  689. package/src/queue/core/__tests__/$consumer.spec.ts +4 -4
  690. package/src/queue/core/__tests__/WorkerProvider.spec.ts +4 -4
  691. package/src/queue/core/__tests__/shared.ts +6 -6
  692. package/src/queue/core/primitives/$consumer.ts +5 -5
  693. package/src/queue/core/primitives/$queue.ts +44 -61
  694. package/src/queue/core/providers/CloudflareQueueProvider.ts +6 -0
  695. package/src/queue/core/providers/WorkerProvider.ts +17 -14
  696. package/src/queue/redis/providers/RedisQueueProvider.ts +3 -3
  697. package/src/react/core/__tests__/ErrorBoundary.browser.spec.tsx +92 -0
  698. package/src/react/core/__tests__/Router.spec.tsx +4 -4
  699. package/src/react/core/__tests__/useComputed.browser.spec.tsx +192 -0
  700. package/src/react/core/__tests__/useQuery.browser.spec.tsx +48 -0
  701. package/src/react/core/__tests__/useSelector.browser.spec.tsx +105 -0
  702. package/src/react/core/__tests__/useStore.browser.spec.tsx +113 -0
  703. package/src/react/core/components/ErrorBoundary.tsx +42 -0
  704. package/src/react/core/hooks/useAction.ts +56 -19
  705. package/src/react/core/hooks/useComputed.ts +91 -0
  706. package/src/react/core/hooks/useSelector.ts +67 -0
  707. package/src/react/core/hooks/useStore.ts +36 -17
  708. package/src/react/core/index.ts +3 -0
  709. package/src/react/core/utils/shallowEqual.ts +36 -0
  710. package/src/react/form/__tests__/FormModel-submit-loading.spec.ts +71 -0
  711. package/src/react/form/__tests__/form-submitting-reactive.browser.spec.tsx +96 -0
  712. package/src/react/form/__tests__/useForm.browser.spec.tsx +54 -54
  713. package/src/react/form/errors/FormValidationError.ts +0 -2
  714. package/src/react/form/hooks/useForm.ts +19 -4
  715. package/src/react/form/hooks/useFormQuerySync.ts +0 -0
  716. package/src/react/form/services/FormModel.ts +124 -86
  717. package/src/react/form/services/parseField.ts +66 -27
  718. package/src/react/i18n/__tests__/I18nProvider.spec.ts +89 -0
  719. package/src/react/i18n/__tests__/Localize.spec.tsx +1 -1
  720. package/src/react/i18n/__tests__/locale-routing.spec.ts +107 -0
  721. package/src/react/i18n/providers/I18nProvider.ts +173 -14
  722. package/src/react/router/__tests__/$page.browser.spec.tsx +19 -19
  723. package/src/react/router/__tests__/$page.spec.tsx +21 -21
  724. package/src/react/router/__tests__/ReactBrowserProvider.browser.spec.ts +87 -1
  725. package/src/react/router/__tests__/RouterLocaleProvider.spec.ts +127 -0
  726. package/src/react/router/atoms/ssrManifestAtom.ts +16 -16
  727. package/src/react/router/components/NestedView.tsx +11 -3
  728. package/src/react/router/hooks/useQueryParams.ts +1 -1
  729. package/src/react/router/index.browser.ts +4 -0
  730. package/src/react/router/index.shared.ts +1 -0
  731. package/src/react/router/index.ts +9 -0
  732. package/src/react/router/primitives/$page.ts +2 -2
  733. package/src/react/router/providers/ReactBrowserProvider.ts +64 -13
  734. package/src/react/router/providers/ReactBrowserRouterProvider.ts +15 -1
  735. package/src/react/router/providers/ReactPageProvider.ts +38 -13
  736. package/src/react/router/providers/ReactServerProvider.ts +105 -16
  737. package/src/react/router/providers/RootComponentsProvider.ts +13 -0
  738. package/src/react/router/providers/RouterLocaleProvider.ts +125 -0
  739. package/src/react/router/providers/__tests__/RootComponentsProvider.spec.ts +15 -0
  740. package/src/react/router/providers/__tests__/rootComponents.ssr.browser.spec.tsx +67 -0
  741. package/src/react/sitemap/__tests__/$sitemap.spec.ts +131 -0
  742. package/src/react/sitemap/index.browser.ts +21 -0
  743. package/src/react/sitemap/index.ts +25 -0
  744. package/src/react/sitemap/primitives/$sitemap.browser.ts +26 -0
  745. package/src/react/sitemap/primitives/$sitemap.ts +196 -0
  746. package/src/react/ui/atoms/uiAtom.ts +6 -6
  747. package/src/react/ui/atoms/uiThemeListAtom.ts +7 -7
  748. package/src/react/ui/hooks/useColorMode.ts +11 -4
  749. package/src/react/ui/services/SchemaControl.ts +4 -4
  750. package/src/redis/providers/BunRedisProvider.ts +19 -11
  751. package/src/redis/providers/NodeRedisProvider.ts +3 -3
  752. package/src/scheduler/primitives/$scheduler.ts +21 -8
  753. package/src/security/__tests__/assertRealmScope.spec.ts +29 -0
  754. package/src/security/atoms/currentTenantAtom.ts +6 -6
  755. package/src/security/atoms/currentUserAtom.ts +2 -2
  756. package/src/security/primitives/$issuer.ts +24 -2
  757. package/src/security/providers/JwtProvider.ts +100 -0
  758. package/src/security/providers/SecurityProvider.ts +43 -2
  759. package/src/security/schemas/permissionSchema.ts +19 -19
  760. package/src/security/schemas/roleSchema.ts +22 -28
  761. package/src/security/schemas/userAccountInfoSchema.ts +47 -37
  762. package/src/server/auth/__tests__/appleClientSecret.spec.ts +34 -0
  763. package/src/server/auth/__tests__/federationRedirectReplay.spec.ts +44 -0
  764. package/src/server/auth/helpers/appleClientSecret.ts +24 -0
  765. package/src/server/auth/helpers/jtiReplayGuard.ts +41 -0
  766. package/src/server/auth/helpers/safeRedirectPath.ts +19 -0
  767. package/src/server/auth/index.ts +1 -0
  768. package/src/server/auth/primitives/$auth.ts +6 -6
  769. package/src/server/auth/primitives/$authApple.ts +10 -10
  770. package/src/server/auth/primitives/$authFacebook.ts +10 -10
  771. package/src/server/auth/primitives/$authFranceConnect.ts +10 -10
  772. package/src/server/auth/primitives/$authGithub.ts +10 -10
  773. package/src/server/auth/primitives/$authGoogle.ts +10 -10
  774. package/src/server/auth/primitives/$authMicrosoft.ts +14 -14
  775. package/src/server/auth/providers/ServerAuthProvider.ts +67 -52
  776. package/src/server/auth/schemas/authenticationProviderSchema.ts +9 -12
  777. package/src/server/auth/schemas/tokenResponseSchema.ts +2 -2
  778. package/src/server/auth/schemas/tokensSchema.ts +16 -16
  779. package/src/server/auth/schemas/userinfoResponseSchema.ts +3 -3
  780. package/src/server/cookies/__tests__/AtomCookieBinding.spec.ts +80 -0
  781. package/src/server/cookies/__tests__/AtomCookiePersistence.browser.spec.ts +169 -0
  782. package/src/server/cookies/__tests__/AtomCookiePersistence.spec.ts +294 -0
  783. package/src/server/cookies/__tests__/ServerCookiesProvider.spec.ts +82 -12
  784. package/src/server/cookies/index.browser.ts +4 -1
  785. package/src/server/cookies/index.ts +8 -1
  786. package/src/server/cookies/primitives/$cookie.browser.ts +1 -1
  787. package/src/server/cookies/primitives/$cookie.ts +16 -0
  788. package/src/server/cookies/providers/AtomCookiePersistence.browser.ts +133 -0
  789. package/src/server/cookies/providers/AtomCookiePersistence.ts +148 -0
  790. package/src/server/cookies/providers/ServerCookiesProvider.ts +32 -4
  791. package/src/server/cookies/services/CookieParser.ts +6 -1
  792. package/src/server/core/__tests__/$action.spec.ts +13 -13
  793. package/src/server/core/__tests__/$middleware.spec.ts +10 -10
  794. package/src/server/core/__tests__/$route.spec.ts +9 -9
  795. package/src/server/core/__tests__/$sse.spec.ts +26 -26
  796. package/src/server/core/__tests__/BunHttpServerProvider.bun.spec.ts +6 -6
  797. package/src/server/core/__tests__/HttpClient.spec.ts +2 -2
  798. package/src/server/core/__tests__/NodeHttpServerProvider.spec.ts +15 -3
  799. package/src/server/core/__tests__/ServerBodyParserProvider.spec.ts +14 -14
  800. package/src/server/core/__tests__/ServerMultipartProvider.spec.ts +33 -33
  801. package/src/server/core/__tests__/ServerRouterProvider-errorHandler.spec.ts +5 -1
  802. package/src/server/core/__tests__/ServerRouterProvider-getRoutes.spec.ts +25 -25
  803. package/src/server/core/__tests__/ServerRouterProvider-serializationError.spec.ts +9 -5
  804. package/src/server/core/__tests__/ServerRouterProvider-validationError.spec.ts +56 -24
  805. package/src/server/core/errors/ValidationError.ts +6 -3
  806. package/src/server/core/helpers/isMultipart.ts +2 -1
  807. package/src/server/core/index.ts +5 -2
  808. package/src/server/core/interfaces/ServerRequest.ts +14 -14
  809. package/src/server/core/primitives/$action.ts +26 -36
  810. package/src/server/core/primitives/$route.ts +27 -0
  811. package/src/server/core/primitives/$sse.ts +3 -3
  812. package/src/server/core/providers/BunHttpServerProvider.ts +8 -9
  813. package/src/server/core/providers/NodeHttpServerProvider.ts +8 -9
  814. package/src/server/core/providers/ServerBodyParserProvider.ts +20 -12
  815. package/src/server/core/providers/ServerCompressProvider.ts +9 -10
  816. package/src/server/core/providers/ServerHelmetProvider.ts +26 -27
  817. package/src/server/core/providers/ServerMultipartProvider.ts +19 -19
  818. package/src/server/core/providers/ServerRouterProvider.ts +44 -15
  819. package/src/server/core/schemas/errorSchema.ts +20 -25
  820. package/src/server/core/schemas/okSchema.ts +9 -14
  821. package/src/server/core/services/HttpClient.ts +13 -1
  822. package/src/server/core/services/ServerRequestParser.ts +6 -6
  823. package/src/server/cors/providers/ServerCorsProvider.ts +26 -28
  824. package/src/server/health/schemas/healthSchema.ts +6 -6
  825. package/src/server/links/__tests__/$remote.spec.ts +3 -3
  826. package/src/server/links/__tests__/BatchEndpoint.spec.ts +9 -9
  827. package/src/server/links/__tests__/LinkProvider.spec.ts +9 -9
  828. package/src/server/links/__tests__/ServerLinksProvider.spec.ts +23 -23
  829. package/src/server/links/__tests__/fixtures/CrudApp.ts +21 -21
  830. package/src/server/links/atoms/apiLinksAtom.ts +2 -2
  831. package/src/server/links/atoms/linkOptionsAtom.ts +6 -6
  832. package/src/server/links/primitives/$remote.ts +3 -3
  833. package/src/server/links/providers/LinkProvider.ts +3 -3
  834. package/src/server/links/providers/ServerLinksProvider.ts +20 -20
  835. package/src/server/links/schemas/apiLinksResponseSchema.ts +23 -23
  836. package/src/server/proxy/__tests__/$proxy.spec.ts +9 -9
  837. package/src/server/proxy/providers/ServerProxyProvider.ts +5 -0
  838. package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +18 -20
  839. package/src/server/swagger/__tests__/$swagger.spec.ts +91 -94
  840. package/src/server/swagger/__tests__/ui.spec.ts +3 -3
  841. package/src/server/swagger/providers/ServerSwaggerProvider.ts +66 -43
  842. package/src/system/__tests__/NodeShellProvider.spec.ts +46 -0
  843. package/src/system/providers/NodeShellProvider.ts +4 -1
  844. package/src/topic/core/__tests__/$subscriber.spec.ts +4 -4
  845. package/src/topic/core/__tests__/shared.ts +8 -8
  846. package/src/topic/core/primitives/$subscriber.ts +5 -5
  847. package/src/topic/core/primitives/$topic.ts +14 -14
  848. package/src/topic/redis/providers/RedisTopicProvider.ts +3 -3
  849. package/dist/container/core/index.d.ts +0 -236
  850. package/dist/container/core/index.d.ts.map +0 -1
  851. package/dist/container/core/index.js +0 -231
  852. package/dist/container/core/index.js.map +0 -1
  853. package/dist/container/core/index.workerd.js +0 -192
  854. package/dist/container/core/index.workerd.js.map +0 -1
  855. package/src/cli/core/tasks/BuildSitemapTask.ts +0 -130
  856. package/src/command/helpers/PrettyAsker.ts +0 -256
  857. package/src/command/helpers/PrettyPrint.ts +0 -332
  858. package/src/container/core/__tests__/$container.spec.ts +0 -83
  859. package/src/container/core/index.ts +0 -50
  860. package/src/container/core/index.workerd.ts +0 -53
  861. package/src/container/core/interfaces/ContainerOptions.ts +0 -69
  862. package/src/container/core/primitives/$container.ts +0 -100
  863. package/src/container/core/providers/CloudflareContainerProvider.ts +0 -70
  864. package/src/container/core/providers/ContainerProvider.ts +0 -92
  865. package/src/container/core/providers/MockContainerProvider.ts +0 -62
  866. package/src/container/core/providers/NodeContainerProvider.ts +0 -53
  867. package/src/core/__tests__/jsonSchemaToTypeBox.spec.ts +0 -771
  868. package/src/core/helpers/jsonSchemaToTypeBox.ts +0 -359
  869. /package/dist/orm/core/{chunk-B4FMCO8f.js → rolldown-runtime-B4FMCO8f.js} +0 -0
@@ -1,4 +1,4 @@
1
- import { Alepha, t } from "alepha";
1
+ import { Alepha, z } from "alepha";
2
2
  import { DateTimeProvider } from "alepha/datetime";
3
3
  import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
4
4
  import { $batch, AlephaBatch } from "../index.ts";
@@ -27,7 +27,7 @@ describe("$batch primitive", () => {
27
27
  const mockHandler = createMockHandler();
28
28
  class TestApp {
29
29
  batcher = $batch({
30
- schema: t.text(),
30
+ schema: z.text(),
31
31
  maxSize: 3,
32
32
  handler: mockHandler,
33
33
  });
@@ -57,7 +57,7 @@ describe("$batch primitive", () => {
57
57
  const mockHandler = createMockHandler();
58
58
  class TestApp {
59
59
  batcher = $batch({
60
- schema: t.text(),
60
+ schema: z.text(),
61
61
  maxSize: 10,
62
62
  maxDuration: [5, "seconds"],
63
63
  handler: mockHandler,
@@ -83,7 +83,7 @@ describe("$batch primitive", () => {
83
83
  const mockHandler = createMockHandler();
84
84
  class TestApp {
85
85
  batcher = $batch({
86
- schema: t.object({ id: t.number(), value: t.text() }),
86
+ schema: z.object({ id: z.number(), value: z.text() }),
87
87
  maxSize: 2,
88
88
  partitionBy: (item) => `partition-${item.id}`,
89
89
  handler: mockHandler,
@@ -126,7 +126,7 @@ describe("$batch primitive", () => {
126
126
  const mockHandler = createMockHandler();
127
127
  class TestApp {
128
128
  batcher = $batch({
129
- schema: t.text(),
129
+ schema: z.text(),
130
130
  maxSize: 10,
131
131
  handler: mockHandler,
132
132
  });
@@ -151,7 +151,7 @@ describe("$batch primitive", () => {
151
151
 
152
152
  class TestApp {
153
153
  batcher = $batch({
154
- schema: t.text(),
154
+ schema: z.text(),
155
155
  maxSize: 1,
156
156
  handler: failingHandler,
157
157
  retry: { max: 2 }, // Try a total of 2 times
@@ -185,7 +185,7 @@ describe("$batch primitive", () => {
185
185
  });
186
186
  class TestApp {
187
187
  batcher = $batch({
188
- schema: t.text(),
188
+ schema: z.text(),
189
189
  maxSize: 1,
190
190
  handler: mockHandler,
191
191
  });
@@ -225,7 +225,7 @@ describe("$batch primitive", () => {
225
225
 
226
226
  class TestApp {
227
227
  batcher = $batch({
228
- schema: t.text(),
228
+ schema: z.text(),
229
229
  maxSize: 1,
230
230
  concurrency: 2,
231
231
  handler: slowHandler,
@@ -254,7 +254,7 @@ describe("$batch primitive", () => {
254
254
  const mockHandler = createMockHandler();
255
255
  class TestApp {
256
256
  batcher = $batch({
257
- schema: t.object({ id: t.number(), value: t.text() }),
257
+ schema: z.object({ id: z.number(), value: z.text() }),
258
258
  maxSize: 5,
259
259
  partitionBy: (item) => `p-${item.id}`,
260
260
  handler: mockHandler,
@@ -293,7 +293,7 @@ describe("$batch primitive", () => {
293
293
  const mockHandler = createMockHandler();
294
294
  class TestApp {
295
295
  batcher = $batch({
296
- schema: t.object({ id: t.number(), value: t.text() }),
296
+ schema: z.object({ id: z.number(), value: z.text() }),
297
297
  maxSize: 5,
298
298
  partitionBy: (item) => `p-${item.id}`,
299
299
  handler: mockHandler,
@@ -319,7 +319,7 @@ describe("$batch primitive", () => {
319
319
  const mockHandler = createMockHandler();
320
320
  class TestApp {
321
321
  batcher = $batch({
322
- schema: t.number(), // Expects numbers
322
+ schema: z.number(), // Expects numbers
323
323
  maxSize: 1,
324
324
  handler: mockHandler,
325
325
  });
@@ -344,7 +344,7 @@ describe("$batch primitive", () => {
344
344
  const mockHandler = createMockHandler();
345
345
  class TestApp {
346
346
  batcher = $batch({
347
- schema: t.text(),
347
+ schema: z.text(),
348
348
  maxSize: 5,
349
349
  handler: mockHandler,
350
350
  });
@@ -362,7 +362,7 @@ describe("$batch primitive", () => {
362
362
  const mockHandler = createMockHandler();
363
363
  class TestApp {
364
364
  batcher = $batch({
365
- schema: t.text(),
365
+ schema: z.text(),
366
366
  maxSize: 5,
367
367
  maxDuration: [1, "second"],
368
368
  partitionBy: (item) => item,
@@ -380,7 +380,7 @@ describe("$batch primitive", () => {
380
380
 
381
381
  class TestApp {
382
382
  httpBatch = $batch({
383
- schema: t.text(),
383
+ schema: z.text(),
384
384
  maxSize: 10,
385
385
  maxDuration: [100, "milliseconds"],
386
386
  handler: async (urls) => {
@@ -435,7 +435,7 @@ describe("$batch primitive", () => {
435
435
 
436
436
  class TestApp {
437
437
  batcher = $batch({
438
- schema: t.text(),
438
+ schema: z.text(),
439
439
  maxSize: 2,
440
440
  maxDuration: [10, "seconds"],
441
441
  handler: async (items: string[]) => {
@@ -482,7 +482,7 @@ describe("$batch primitive", () => {
482
482
 
483
483
  class TestApp {
484
484
  batcher = $batch({
485
- schema: t.object({ id: t.number(), value: t.text() }),
485
+ schema: z.object({ id: z.number(), value: z.text() }),
486
486
  maxSize: 2,
487
487
  partitionBy: (item) => `p-${item.id}`,
488
488
  handler: async (items) => {
@@ -526,7 +526,7 @@ describe("$batch primitive", () => {
526
526
 
527
527
  class TestApp {
528
528
  batcher = $batch({
529
- schema: t.text(),
529
+ schema: z.text(),
530
530
  // Not providing maxSize, concurrency, or maxDuration
531
531
  handler: mockHandler,
532
532
  });
@@ -565,7 +565,7 @@ describe("$batch primitive", () => {
565
565
 
566
566
  class TestApp {
567
567
  batcher = $batch({
568
- schema: t.text(),
568
+ schema: z.text(),
569
569
  // Not providing maxDuration, should default to 1 second
570
570
  handler: mockHandler,
571
571
  });
@@ -599,7 +599,7 @@ describe("$batch primitive", () => {
599
599
 
600
600
  class TestApp {
601
601
  batcher = $batch({
602
- schema: t.text(),
602
+ schema: z.text(),
603
603
  maxSize: 1,
604
604
  // Not providing concurrency, should default to 1
605
605
  handler: slowHandler,
@@ -625,7 +625,7 @@ describe("$batch primitive", () => {
625
625
  test("should track item status through lifecycle", async () => {
626
626
  class TestApp {
627
627
  batcher = $batch({
628
- schema: t.text(),
628
+ schema: z.text(),
629
629
  maxSize: 10,
630
630
  maxDuration: [100, "milliseconds"],
631
631
  handler: async (items: string[]) => {
@@ -679,7 +679,7 @@ describe("$batch primitive", () => {
679
679
 
680
680
  class TestApp {
681
681
  batcher = $batch({
682
- schema: t.text(),
682
+ schema: z.text(),
683
683
  maxSize: 10,
684
684
  maxDuration: [100, "milliseconds"],
685
685
  handler: mockHandler,
@@ -735,7 +735,7 @@ describe("$batch primitive", () => {
735
735
  const mockHandler = createMockHandler();
736
736
  class TestApp {
737
737
  batcher = $batch({
738
- schema: t.text(),
738
+ schema: z.text(),
739
739
  maxSize: 10,
740
740
  handler: mockHandler,
741
741
  });
@@ -1,4 +1,4 @@
1
- import { $hook, Alepha, t } from "alepha";
1
+ import { $hook, Alepha, z } from "alepha";
2
2
  import { DateTimeProvider } from "alepha/datetime";
3
3
  import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
4
4
  import { $batch, AlephaBatch } from "../index.ts";
@@ -33,7 +33,7 @@ describe("Batch startup buffering", () => {
33
33
 
34
34
  class TestApp {
35
35
  batcher = $batch({
36
- schema: t.text(),
36
+ schema: z.text(),
37
37
  maxSize: 10, // Would normally trigger flush at 10 items
38
38
  maxDuration: [1, "second"],
39
39
  handler: mockHandler,
@@ -108,7 +108,7 @@ describe("Batch startup buffering", () => {
108
108
 
109
109
  class TestApp {
110
110
  batcher = $batch({
111
- schema: t.text(),
111
+ schema: z.text(),
112
112
  maxSize: 100,
113
113
  maxDuration: [100, "milliseconds"], // Short timeout
114
114
  handler: mockHandler,
@@ -161,7 +161,7 @@ describe("Batch startup buffering", () => {
161
161
 
162
162
  class TestApp {
163
163
  batcher = $batch({
164
- schema: t.text(),
164
+ schema: z.text(),
165
165
  maxSize: 100,
166
166
  maxDuration: [1, "second"],
167
167
  handler: mockHandler,
@@ -210,7 +210,7 @@ describe("Batch startup buffering", () => {
210
210
 
211
211
  class TestApp {
212
212
  batcher = $batch({
213
- schema: t.object({ partition: t.text(), value: t.text() }),
213
+ schema: z.object({ partition: z.text(), value: z.text() }),
214
214
  maxSize: 5,
215
215
  partitionBy: (item) => item.partition,
216
216
  handler: mockHandler,
@@ -287,7 +287,7 @@ describe("Batch startup buffering", () => {
287
287
 
288
288
  class TestApp {
289
289
  batcher = $batch({
290
- schema: t.text(),
290
+ schema: z.text(),
291
291
  maxSize: 3,
292
292
  maxDuration: [500, "milliseconds"],
293
293
  handler: mockHandler,
@@ -344,7 +344,7 @@ describe("Batch startup buffering", () => {
344
344
 
345
345
  class TestApp {
346
346
  batcher = $batch({
347
- schema: t.text(),
347
+ schema: z.text(),
348
348
  maxSize: 10,
349
349
  handler: mockHandler,
350
350
  });
@@ -384,7 +384,7 @@ describe("Batch startup buffering", () => {
384
384
 
385
385
  class TestApp {
386
386
  batcher = $batch({
387
- schema: t.text(),
387
+ schema: z.text(),
388
388
  maxSize: 5,
389
389
  maxDuration: [10, "seconds"], // Long timeout so it doesn't interfere
390
390
  handler: mockHandler,
@@ -426,7 +426,7 @@ describe("Batch startup buffering", () => {
426
426
 
427
427
  class TestApp {
428
428
  batcher = $batch({
429
- schema: t.text(),
429
+ schema: z.text(),
430
430
  maxSize: 10,
431
431
  handler: mockHandler,
432
432
  });
package/src/bin/index.ts CHANGED
@@ -7,7 +7,7 @@ const alepha = Alepha.create({
7
7
  APP_NAME: "CLI",
8
8
  CLI_NAME: "alepha",
9
9
  CLI_DESCRIPTION: `Alepha CLI v${version} - Create and manage Alepha projects.`,
10
- LOG_FORMAT: (process.env.LOG_FORMAT ?? "raw") as any,
10
+ LOG_FORMAT: (process.env.LOG_FORMAT ?? "cli") as any,
11
11
  LOG_LEVEL: process.env.LOG_LEVEL ?? "alepha.core:warn,info",
12
12
  },
13
13
  });
@@ -0,0 +1,60 @@
1
+ import { Alepha } from "alepha";
2
+ import { currentTenantAtom } from "alepha/security";
3
+ import { FileSystemProvider } from "alepha/system";
4
+ import { describe, expect, it } from "vitest";
5
+ import { MemoryFileStorageProvider } from "../providers/MemoryFileStorageProvider.ts";
6
+
7
+ /**
8
+ * A tenant active on the current request/job (`currentTenantAtom`) scopes every
9
+ * file under a `{tenantId}/…` key prefix, so a pooled multi-tenant app keeps
10
+ * each tenant's objects isolated even when they reuse the same fileId. No tenant
11
+ * → the historical un-prefixed layout (covered tenant-less by the per-provider
12
+ * shared suites). Exercised here on the Memory provider; R2/S3/Local share the
13
+ * same `currentTenantAtom` resolution in their key/path builders.
14
+ */
15
+ describe("tenant-scoped bucket storage", () => {
16
+ const BUCKET = "media";
17
+ const ID = "shared-id";
18
+
19
+ const setup = () => {
20
+ const alepha = Alepha.create();
21
+ const fs = alepha.inject(FileSystemProvider);
22
+ return {
23
+ alepha,
24
+ provider: alepha.inject(MemoryFileStorageProvider),
25
+ file: (text: string) => fs.createFile({ text, name: "f.txt" }),
26
+ };
27
+ };
28
+
29
+ it("isolates files per tenant and never collides on a shared fileId", async () => {
30
+ const { alepha, provider, file } = setup();
31
+
32
+ // Tenant A uploads under a shared id.
33
+ alepha.store.set(currentTenantAtom, { id: "org-a" });
34
+ await provider.upload(BUCKET, file("a"), ID);
35
+ expect(await provider.exists(BUCKET, ID)).toBe(true);
36
+ expect(await provider.list(BUCKET)).toEqual([ID]);
37
+
38
+ // Tenant B sees nothing of A's, and the same id does not collide.
39
+ alepha.store.set(currentTenantAtom, { id: "org-b" });
40
+ expect(await provider.exists(BUCKET, ID)).toBe(false);
41
+ expect(await provider.list(BUCKET)).toEqual([]);
42
+ await provider.upload(BUCKET, file("b"), ID);
43
+ expect(await provider.list(BUCKET)).toEqual([ID]);
44
+ expect(await (await provider.download(BUCKET, ID)).text()).toBe("b");
45
+
46
+ // Back to A — still A's bytes, untouched by B.
47
+ alepha.store.set(currentTenantAtom, { id: "org-a" });
48
+ expect(await (await provider.download(BUCKET, ID)).text()).toBe("a");
49
+
50
+ // Deleting in A leaves B intact.
51
+ await provider.delete(BUCKET, ID);
52
+ expect(await provider.exists(BUCKET, ID)).toBe(false);
53
+ alepha.store.set(currentTenantAtom, { id: "org-b" });
54
+ expect(await provider.exists(BUCKET, ID)).toBe(true);
55
+
56
+ // No tenant → a separate, un-prefixed namespace (neither tenant's files).
57
+ alepha.store.set(currentTenantAtom, undefined);
58
+ expect(await provider.list(BUCKET)).toEqual([]);
59
+ });
60
+ });
@@ -12,10 +12,11 @@ import {
12
12
  AlephaError,
13
13
  type FileLike,
14
14
  type Static,
15
- t,
15
+ z,
16
16
  } from "alepha";
17
17
  import { CryptoProvider } from "alepha/crypto";
18
18
  import { $logger } from "alepha/logger";
19
+ import { currentTenantAtom } from "alepha/security";
19
20
  import { FileDetector, FileSystemProvider } from "alepha/system";
20
21
  import { FileNotFoundError } from "../errors/FileNotFoundError.ts";
21
22
  import { $bucket } from "../primitives/$bucket.ts";
@@ -28,10 +29,10 @@ import type { FileStorageProvider } from "./FileStorageProvider.ts";
28
29
  */
29
30
  export const localFileStorageOptions = $atom({
30
31
  name: "alepha.bucket.local.options",
31
- schema: t.object({
32
- storagePath: t.string({
33
- description: "Directory path where files will be stored",
34
- }),
32
+ schema: z.object({
33
+ storagePath: z
34
+ .string()
35
+ .describe("Directory path where files will be stored"),
35
36
  }),
36
37
  default: {
37
38
  storagePath: "node_modules/.alepha/buckets",
@@ -106,6 +107,9 @@ export class LocalFileStorageProvider implements FileStorageProvider {
106
107
 
107
108
  this.log.trace(`Uploading file to ${bucketName}`);
108
109
 
110
+ // The per-tenant sub-directory isn't pre-created by `onStart` (which only
111
+ // knows the un-scoped bucket name), so ensure it exists before writing.
112
+ await mkdir(this.path(bucketName), { recursive: true });
109
113
  await this.fileSystemProvider.writeFile(
110
114
  this.path(bucketName, fileId),
111
115
  file,
@@ -198,7 +202,11 @@ export class LocalFileStorageProvider implements FileStorageProvider {
198
202
  }
199
203
 
200
204
  protected path(bucket: string, fileId = ""): string {
201
- return join(this.storagePath, bucket, fileId);
205
+ // Per-tenant directory when a tenant is active, mirroring R2/S3 isolation.
206
+ const tenantId = this.alepha.store.get(currentTenantAtom)?.id;
207
+ return tenantId
208
+ ? join(this.storagePath, tenantId, bucket, fileId)
209
+ : join(this.storagePath, bucket, fileId);
202
210
  }
203
211
 
204
212
  protected isErrorNoEntry(error: unknown): boolean {
@@ -1,5 +1,6 @@
1
- import { $inject, type FileLike } from "alepha";
1
+ import { $inject, Alepha, type FileLike } from "alepha";
2
2
  import { CryptoProvider } from "alepha/crypto";
3
+ import { currentTenantAtom } from "alepha/security";
3
4
  import { FileDetector, FileSystemProvider } from "alepha/system";
4
5
  import { FileNotFoundError } from "../errors/FileNotFoundError.ts";
5
6
  import type { FileStorageProvider } from "./FileStorageProvider.ts";
@@ -13,6 +14,7 @@ interface StoredFile {
13
14
 
14
15
  export class MemoryFileStorageProvider implements FileStorageProvider {
15
16
  public readonly files: Record<string, StoredFile> = {};
17
+ protected readonly alepha = $inject(Alepha);
16
18
  protected readonly fileSystem = $inject(FileSystemProvider);
17
19
  protected readonly fileDetector = $inject(FileDetector);
18
20
  protected readonly crypto = $inject(CryptoProvider);
@@ -31,7 +33,7 @@ export class MemoryFileStorageProvider implements FileStorageProvider {
31
33
  }
32
34
  const buffer = Buffer.concat(chunks);
33
35
 
34
- this.files[`${bucketName}/${fileId}`] = {
36
+ this.files[this.key(bucketName, fileId)] = {
35
37
  buffer,
36
38
  name: file.name,
37
39
  type: file.type,
@@ -42,7 +44,7 @@ export class MemoryFileStorageProvider implements FileStorageProvider {
42
44
  }
43
45
 
44
46
  public async download(bucketName: string, fileId: string): Promise<FileLike> {
45
- const fileKey = `${bucketName}/${fileId}`;
47
+ const fileKey = this.key(bucketName, fileId);
46
48
  const stored = this.files[fileKey];
47
49
 
48
50
  if (!stored) {
@@ -59,11 +61,11 @@ export class MemoryFileStorageProvider implements FileStorageProvider {
59
61
  }
60
62
 
61
63
  public async exists(bucketName: string, fileId: string): Promise<boolean> {
62
- return `${bucketName}/${fileId}` in this.files;
64
+ return this.key(bucketName, fileId) in this.files;
63
65
  }
64
66
 
65
67
  public async delete(bucketName: string, fileId: string): Promise<void> {
66
- const fileKey = `${bucketName}/${fileId}`;
68
+ const fileKey = this.key(bucketName, fileId);
67
69
  if (!(fileKey in this.files)) {
68
70
  throw new FileNotFoundError(`File with ID ${fileId} not found.`);
69
71
  }
@@ -76,17 +78,26 @@ export class MemoryFileStorageProvider implements FileStorageProvider {
76
78
  fileIds: string[],
77
79
  ): Promise<void> {
78
80
  for (const id of fileIds) {
79
- delete this.files[`${bucketName}/${id}`];
81
+ delete this.files[this.key(bucketName, id)];
80
82
  }
81
83
  }
82
84
 
83
85
  public async list(bucketName: string): Promise<string[]> {
84
- const prefix = `${bucketName}/`;
86
+ const prefix = this.key(bucketName, "");
85
87
  return Object.keys(this.files)
86
88
  .filter((key) => key.startsWith(prefix))
87
89
  .map((key) => key.slice(prefix.length));
88
90
  }
89
91
 
92
+ /**
93
+ * In-memory key, tenant-scoped when a tenant is active (`currentTenantAtom`),
94
+ * mirroring the R2/Local/S3 layout: `{tenantId}/{bucket}/{fileId}`.
95
+ */
96
+ protected key(bucket: string, fileId = ""): string {
97
+ const tenantId = this.alepha.store.get(currentTenantAtom)?.id;
98
+ return tenantId ? `${tenantId}/${bucket}/${fileId}` : `${bucket}/${fileId}`;
99
+ }
100
+
90
101
  protected createId(): string {
91
102
  return this.crypto.randomUUID();
92
103
  }
@@ -6,10 +6,11 @@ import {
6
6
  Alepha,
7
7
  AlephaError,
8
8
  type FileLike,
9
- t,
9
+ z,
10
10
  } from "alepha";
11
11
  import { CryptoProvider } from "alepha/crypto";
12
12
  import { $logger } from "alepha/logger";
13
+ import { currentTenantAtom } from "alepha/security";
13
14
  import { FileNotFoundError } from "../errors/FileNotFoundError.ts";
14
15
  import { $bucket } from "../primitives/$bucket.ts";
15
16
  import type { FileStorageProvider } from "./FileStorageProvider.ts";
@@ -66,13 +67,11 @@ export class R2FileStorageProvider implements FileStorageProvider {
66
67
  protected readonly log = $logger();
67
68
  protected readonly crypto = $inject(CryptoProvider);
68
69
  protected readonly env = $env(
69
- t.object({
70
+ z.object({
70
71
  /**
71
72
  * The actual R2 bucket name in Cloudflare.
72
73
  */
73
- R2_BUCKET_NAME: t.string({
74
- description: "R2 bucket name in Cloudflare",
75
- }),
74
+ R2_BUCKET_NAME: z.string().describe("R2 bucket name in Cloudflare"),
76
75
  }),
77
76
  );
78
77
 
@@ -237,10 +236,19 @@ export class R2FileStorageProvider implements FileStorageProvider {
237
236
  }
238
237
 
239
238
  /**
240
- * Build the full R2 key: {prefix}/{bucketName}/{fileId}
239
+ * Build the full R2 key: {prefix}/{tenantId}/{bucketName}/{fileId}
240
+ *
241
+ * When a tenant is active on the current request/job (`currentTenantAtom`),
242
+ * its id is inserted as a directory so a pooled multi-tenant worker keeps
243
+ * each tenant's objects isolated. No tenant → the historical
244
+ * `{prefix}/{bucketName}/{fileId}` layout is unchanged.
241
245
  */
242
246
  protected key(bucketName: string, fileId: string): string {
243
247
  const parts = [bucketName, fileId];
248
+ const tenantId = this.alepha.store.get(currentTenantAtom)?.id;
249
+ if (tenantId) {
250
+ parts.unshift(tenantId);
251
+ }
244
252
  if (this.prefix) {
245
253
  parts.unshift(this.prefix);
246
254
  }
@@ -9,17 +9,18 @@ import {
9
9
  AlephaError,
10
10
  type FileLike,
11
11
  type Static,
12
- t,
12
+ z,
13
13
  } from "alepha";
14
14
  import { CryptoProvider } from "alepha/crypto";
15
15
  import { $logger } from "alepha/logger";
16
+ import { currentTenantAtom } from "alepha/security";
16
17
  import { FileDetector, FileSystemProvider } from "alepha/system";
17
18
  import { S3mini } from "s3mini";
18
19
  import { FileNotFoundError } from "../errors/FileNotFoundError.ts";
19
20
  import { $bucket } from "../primitives/$bucket.ts";
20
21
  import type { FileStorageProvider } from "./FileStorageProvider.ts";
21
22
 
22
- const envSchema = t.object({
23
+ const envSchema = z.object({
23
24
  /**
24
25
  * S3 endpoint URL. The bucket name is appended (path-style) per request.
25
26
  *
@@ -29,24 +30,24 @@ const envSchema = t.object({
29
30
  * - MinIO: `http://localhost:9000`
30
31
  * - DigitalOcean Spaces: `https://<region>.digitaloceanspaces.com`
31
32
  */
32
- S3_ENDPOINT: t.string(),
33
+ S3_ENDPOINT: z.string(),
33
34
 
34
35
  /**
35
36
  * AWS region or "auto" for R2.
36
37
  *
37
38
  * @default "auto"
38
39
  */
39
- S3_REGION: t.optional(t.string()),
40
+ S3_REGION: z.string().optional(),
40
41
 
41
42
  /**
42
43
  * Access key ID for S3 authentication.
43
44
  */
44
- S3_ACCESS_KEY_ID: t.string(),
45
+ S3_ACCESS_KEY_ID: z.string(),
45
46
 
46
47
  /**
47
48
  * Secret access key for S3 authentication.
48
49
  */
49
- S3_SECRET_ACCESS_KEY: t.string(),
50
+ S3_SECRET_ACCESS_KEY: z.string(),
50
51
  });
51
52
 
52
53
  declare module "alepha" {
@@ -121,6 +122,15 @@ export class S3FileStorageProvider implements FileStorageProvider {
121
122
  },
122
123
  });
123
124
 
125
+ /**
126
+ * Object key, tenant-scoped when a tenant is active (`currentTenantAtom`):
127
+ * `{tenantId}/{fileId}` within the per-bucket S3 bucket. No tenant → `{fileId}`.
128
+ */
129
+ protected key(fileId: string): string {
130
+ const tenantId = this.alepha.store.get(currentTenantAtom)?.id;
131
+ return tenantId ? `${tenantId}/${fileId}` : fileId;
132
+ }
133
+
124
134
  protected createId(mimeType: string): string {
125
135
  const ext = this.fileDetector.getExtensionFromMimeType(mimeType);
126
136
  return `${this.crypto.randomUUID()}.${ext}`;
@@ -142,7 +152,7 @@ export class S3FileStorageProvider implements FileStorageProvider {
142
152
  try {
143
153
  const buffer = new Uint8Array(await file.arrayBuffer());
144
154
  await client.putObject(
145
- fileId,
155
+ this.key(fileId),
146
156
  buffer,
147
157
  file.type || "application/octet-stream",
148
158
  undefined,
@@ -169,7 +179,7 @@ export class S3FileStorageProvider implements FileStorageProvider {
169
179
  );
170
180
 
171
181
  const client = this.getClient(bucketName);
172
- const response = await client.getObjectResponse(fileId);
182
+ const response = await client.getObjectResponse(this.key(fileId));
173
183
 
174
184
  if (!response) {
175
185
  throw new FileNotFoundError(
@@ -211,7 +221,7 @@ export class S3FileStorageProvider implements FileStorageProvider {
211
221
  );
212
222
 
213
223
  const client = this.getClient(bucketName);
214
- const result = await client.objectExists(fileId);
224
+ const result = await client.objectExists(this.key(fileId));
215
225
  return result === true;
216
226
  }
217
227
 
@@ -221,7 +231,7 @@ export class S3FileStorageProvider implements FileStorageProvider {
221
231
  const client = this.getClient(bucketName);
222
232
 
223
233
  try {
224
- await client.deleteObject(fileId);
234
+ await client.deleteObject(this.key(fileId));
225
235
  } catch (error) {
226
236
  this.log.error(`Failed to delete file: ${error}`);
227
237
  if (error instanceof Error) {
@@ -234,10 +244,16 @@ export class S3FileStorageProvider implements FileStorageProvider {
234
244
  public async list(bucketName: string): Promise<string[]> {
235
245
  this.log.trace(`Listing files in bucket '${bucketName}'...`);
236
246
  const client = this.getClient(bucketName);
247
+ const tenantId = this.alepha.store.get(currentTenantAtom)?.id;
248
+ const prefix = tenantId ? `${tenantId}/` : undefined;
237
249
  // Flat, single-page listing (~1000 keys). Not a search API.
238
- const objects = await client.listObjects();
250
+ const objects = await client.listObjects(undefined, prefix);
239
251
  if (!objects) return [];
240
- return objects.map((object) => object.Key);
252
+ return objects.map((object) =>
253
+ prefix && object.Key.startsWith(prefix)
254
+ ? object.Key.slice(prefix.length)
255
+ : object.Key,
256
+ );
241
257
  }
242
258
 
243
259
  public async deleteMany(
@@ -251,7 +267,7 @@ export class S3FileStorageProvider implements FileStorageProvider {
251
267
  const client = this.getClient(bucketName);
252
268
  // S3 DeleteObjects caps at 1000 keys per request.
253
269
  for (let i = 0; i < fileIds.length; i += 1000) {
254
- const chunk = fileIds.slice(i, i + 1000);
270
+ const keys = fileIds.slice(i, i + 1000).map((id) => this.key(id));
255
271
  try {
256
272
  // bun:s3 client exposes a per-key deleteObject; some SDKs also expose
257
273
  // deleteObjects(keys: string[]). Prefer batch when available.
@@ -261,9 +277,9 @@ export class S3FileStorageProvider implements FileStorageProvider {
261
277
  }
262
278
  ).deleteObjects;
263
279
  if (typeof batch === "function") {
264
- await batch.call(client, chunk);
280
+ await batch.call(client, keys);
265
281
  } else {
266
- await Promise.all(chunk.map((id) => client.deleteObject(id)));
282
+ await Promise.all(keys.map((key) => client.deleteObject(key)));
267
283
  }
268
284
  } catch (error) {
269
285
  this.log.error(`Failed to delete files: ${error}`);
@@ -10,7 +10,7 @@ import {
10
10
  Primitive,
11
11
  type Service,
12
12
  type Static,
13
- t,
13
+ z,
14
14
  } from "alepha";
15
15
  import { DateTimeProvider, type DurationLike } from "alepha/datetime";
16
16
  import { CacheProvider } from "../providers/CacheProvider.ts";
@@ -225,15 +225,12 @@ export interface CachePrimitiveOptions<
225
225
  */
226
226
  export const cacheOptions = $atom({
227
227
  name: "alepha.cache.options",
228
- schema: t.object({
229
- enabled: t.boolean({
230
- default: true,
231
- description: "Whether caching is enabled.",
232
- }),
233
- defaultTtl: t.number({
234
- default: 300,
235
- description: "Default time to live for cache entries in seconds.",
236
- }),
228
+ schema: z.object({
229
+ enabled: z.boolean().describe("Whether caching is enabled.").default(true),
230
+ defaultTtl: z
231
+ .number()
232
+ .describe("Default time to live for cache entries in seconds.")
233
+ .default(300),
237
234
  }),
238
235
  default: {
239
236
  enabled: true,