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 { $inject, t } from "alepha";
1
+ import { $inject, z } from "alepha";
2
2
  import { $command } from "alepha/command";
3
3
  import { AlephaCliUtils } from "../services/AlephaCliUtils.ts";
4
4
  import { ProjectScaffolder } from "../services/ProjectScaffolder.ts";
@@ -11,28 +11,25 @@ export class TestCommand {
11
11
  name: "test",
12
12
  description:
13
13
  "Run tests using Vitest. Pass a filter to run only matching specs, e.g. `alepha test user` or `alepha test test/auth.spec.ts`",
14
- args: t.optional(
15
- t.text({
14
+ args: z
15
+ .text({
16
16
  title: "filter",
17
17
  description: "Only run spec files whose path matches this string",
18
- }),
19
- ),
20
- flags: t.object({
21
- config: t.optional(
22
- t.string({
23
- description: "Path to Vitest config file",
24
- alias: "c",
25
- }),
26
- ),
18
+ })
19
+ .optional(),
20
+ flags: z.object({
21
+ config: z
22
+ .string()
23
+ .meta({ alias: "c" })
24
+ .describe("Path to Vitest config file")
25
+ .optional(),
27
26
  }),
28
- env: t.object({
29
- VITEST_ARGS: t.optional(
30
- t.string({
31
- default: "",
32
- description:
33
- "Additional arguments to pass to Vitest. E.g., --coverage",
34
- }),
35
- ),
27
+ env: z.object({
28
+ VITEST_ARGS: z
29
+ .string()
30
+ .describe("Additional arguments to pass to Vitest. E.g., --coverage")
31
+ .default("")
32
+ .optional(),
36
33
  }),
37
34
  handler: async ({ run, root, flags, env, args }) => {
38
35
  await this.scaffolder.ensureConfig(root, {
@@ -34,7 +34,6 @@ import { BuildCompressTask } from "./tasks/BuildCompressTask.ts";
34
34
  import { BuildDockerTask } from "./tasks/BuildDockerTask.ts";
35
35
  import { BuildPrerenderTask } from "./tasks/BuildPrerenderTask.ts";
36
36
  import { BuildServerTask } from "./tasks/BuildServerTask.ts";
37
- import { BuildSitemapTask } from "./tasks/BuildSitemapTask.ts";
38
37
  import { BuildStaticTask } from "./tasks/BuildStaticTask.ts";
39
38
  import { BuildVercelTask } from "./tasks/BuildVercelTask.ts";
40
39
 
@@ -74,7 +73,6 @@ export * from "./tasks/BuildCompressTask.ts";
74
73
  export * from "./tasks/BuildDockerTask.ts";
75
74
  export * from "./tasks/BuildPrerenderTask.ts";
76
75
  export * from "./tasks/BuildServerTask.ts";
77
- export * from "./tasks/BuildSitemapTask.ts";
78
76
  export * from "./tasks/BuildStaticTask.ts";
79
77
  export * from "./tasks/BuildTask.ts";
80
78
  export * from "./tasks/BuildVercelTask.ts";
@@ -132,7 +130,6 @@ export const AlephaCli = $module({
132
130
  BuildDockerTask,
133
131
  BuildPrerenderTask,
134
132
  BuildServerTask,
135
- BuildSitemapTask,
136
133
  BuildStaticTask,
137
134
  BuildVercelTask,
138
135
  ],
@@ -1,9 +1,8 @@
1
1
  import { basename } from "node:path";
2
2
  import { $inject } from "alepha";
3
3
  import { KV_DEFAULT_BINDING } from "alepha/cache";
4
- import type { ContainerPrimitive } from "alepha/container";
5
4
  import { SEND_EMAIL_DEFAULT_BINDING } from "alepha/email/cloudflare";
6
- import { QUEUE_DEFAULT_BINDING } from "alepha/queue";
5
+ import { QUEUE_DEFAULT_BINDING, QUEUE_DEFAULT_MAX_RETRIES } from "alepha/queue";
7
6
  import type { CronProvider, WorkerdCronProvider } from "alepha/scheduler";
8
7
  import { FileSystemProvider } from "alepha/system";
9
8
  import { ViteUtils } from "../services/ViteUtils.ts";
@@ -16,6 +15,16 @@ import { BuildTask, type BuildTaskContext } from "./BuildTask.ts";
16
15
  // here wouldn't match the one the workspace registered.
17
16
  const CLOUDFLARE_EMAIL_PROVIDER_NAME = "CloudflareEmailProvider";
18
17
 
18
+ /**
19
+ * Best-effort Cloudflare zone (registrable domain) for a wildcard Worker route:
20
+ * strip the leading `*.` and any subdomain labels, keep the last two — e.g.
21
+ * `*.club.alepha.dev` → `alepha.dev`, `*.alepha.club` → `alepha.club`. Correct
22
+ * for single-label TLDs (the common case); a multi-label public suffix
23
+ * (`.co.uk`) or a CF subdomain zone needs an explicit `CLOUDFLARE_ZONE`.
24
+ */
25
+ const deriveZone = (domain: string): string =>
26
+ domain.replace(/^\*\./, "").split(".").slice(-2).join(".");
27
+
19
28
  interface WranglerConfig {
20
29
  [key: string]: any;
21
30
  }
@@ -75,20 +84,13 @@ export interface BuildManifest {
75
84
  */
76
85
  crons: string[];
77
86
  /**
78
- * `$container()` descriptors — image, port, lifecycle settings.
79
- * Used both to populate Cloudflare Containers bindings in
80
- * wrangler.jsonc and (in future) to know which images Rocket should
81
- * pull on the deploy side.
87
+ * Cloudflare email binding, captured when the app registers
88
+ * `CloudflareEmailProvider` at artifact-build time. The prebuilt/manifest
89
+ * deploy path (Alepha Rocket `--prebuilt`) has no Vite introspection, so it
90
+ * reads this to re-emit the `send_email` wrangler binding. Absent when the
91
+ * app doesn't use Cloudflare email.
82
92
  */
83
- containers: Array<{
84
- name: string;
85
- className: string;
86
- image: string;
87
- port: number;
88
- sleepAfter: string;
89
- instanceType: string;
90
- maxInstances: number;
91
- }>;
93
+ email?: { binding: string };
92
94
  /**
93
95
  * Every env var the app declares via `$env`, captured from
94
96
  * `alepha.dump().env` at build time. The deploy `secrets` step uses this
@@ -176,13 +178,13 @@ export class BuildCloudflareTask extends BuildTask {
176
178
  };
177
179
 
178
180
  this.enhanceDomain(wrangler);
181
+ this.enhanceServices(wrangler);
179
182
  this.enhanceCron(ctx, wrangler);
180
183
  this.enhanceDatabase(wrangler);
181
184
  this.enhanceR2(wrangler);
182
185
  this.enhanceKV(wrangler);
183
186
  this.enhanceQueue(wrangler);
184
187
  this.enhanceEmail(ctx, wrangler);
185
- const containers = this.enhanceContainers(ctx, wrangler);
186
188
 
187
189
  await this.fs.writeFile(
188
190
  this.fs.join(root, distDir, "wrangler.jsonc"),
@@ -194,9 +196,9 @@ export class BuildCloudflareTask extends BuildTask {
194
196
  // re-emitting the same data we just read — skip to avoid a redundant
195
197
  // write and to keep the original manifest as the canonical record.
196
198
  if (!ctx.manifest) {
197
- await this.writeManifest(ctx, root, distDir, name, containers);
199
+ await this.writeManifest(ctx, root, distDir, name);
198
200
  }
199
- await this.writeWorkerEntryPoint(root, distDir, containers);
201
+ await this.writeWorkerEntryPoint(root, distDir);
200
202
  }
201
203
 
202
204
  /**
@@ -211,7 +213,6 @@ export class BuildCloudflareTask extends BuildTask {
211
213
  root: string,
212
214
  distDir: string,
213
215
  name: string,
214
- containers: ContainerDescriptor[],
215
216
  ): Promise<void> {
216
217
  // Discover the same primitive shapes the enhance* methods read.
217
218
  // Errors are silently swallowed — an absent primitive class just
@@ -279,6 +280,14 @@ export class BuildCloudflareTask extends BuildTask {
279
280
  env = Object.keys(ctx.alepha.dump().env).sort();
280
281
  } catch {}
281
282
 
283
+ // Capture the CF email binding so manifest-mode deploys (Rocket) can
284
+ // re-emit `send_email` — `enhanceEmail` can't introspect there.
285
+ let email: BuildManifest["email"];
286
+ try {
287
+ ctx.alepha.inject(CLOUDFLARE_EMAIL_PROVIDER_NAME);
288
+ email = { binding: SEND_EMAIL_DEFAULT_BINDING };
289
+ } catch {}
290
+
282
291
  const manifest: BuildManifest = {
283
292
  version: 1,
284
293
  project: name,
@@ -293,15 +302,7 @@ export class BuildCloudflareTask extends BuildTask {
293
302
  hasCron: crons.length > 0,
294
303
  },
295
304
  crons,
296
- containers: containers.map((c) => ({
297
- name: c.name,
298
- className: c.className,
299
- image: c.image,
300
- port: c.port,
301
- sleepAfter: c.sleepAfter,
302
- instanceType: c.instanceType,
303
- maxInstances: c.maxInstances,
304
- })),
305
+ email,
305
306
  env,
306
307
  };
307
308
 
@@ -311,6 +312,21 @@ export class BuildCloudflareTask extends BuildTask {
311
312
  );
312
313
  }
313
314
 
315
+ /** Worker-to-worker service bindings, from CLOUDFLARE_SERVICES (JSON). */
316
+ protected enhanceServices(wrangler: WranglerConfig): void {
317
+ const raw = process.env.CLOUDFLARE_SERVICES;
318
+ if (!raw) {
319
+ return;
320
+ }
321
+ const services = JSON.parse(raw) as Array<{
322
+ binding: string;
323
+ service: string;
324
+ }>;
325
+ if (services.length > 0) {
326
+ (wrangler as { services?: unknown }).services = services;
327
+ }
328
+ }
329
+
314
330
  protected enhanceDomain(wrangler: WranglerConfig): void {
315
331
  const domain = process.env.CLOUDFLARE_DOMAIN;
316
332
  if (!domain) {
@@ -318,12 +334,13 @@ export class BuildCloudflareTask extends BuildTask {
318
334
  }
319
335
 
320
336
  if (domain.includes("*")) {
321
- const zone = process.env.CLOUDFLARE_ZONE;
322
- if (!zone) {
323
- throw new Error(
324
- `Wildcard domain "${domain}" requires CLOUDFLARE_ZONE to be set (the parent zone name, e.g. "alepha.dev").`,
325
- );
326
- }
337
+ // A wildcard is a Worker *Route* (not a Custom Domain), and the CF API
338
+ // keys routes by zone. Default the zone to the registrable domain — the
339
+ // last two labels of the wildcard host (`*.club.alepha.dev` → `alepha.dev`,
340
+ // `*.alepha.club` `alepha.club`). Set CLOUDFLARE_ZONE explicitly only to
341
+ // override (a subdomain zone, or a multi-label public suffix like `.co.uk`
342
+ // where "last two labels" is wrong).
343
+ const zone = process.env.CLOUDFLARE_ZONE || deriveZone(domain);
327
344
  wrangler.routes = [
328
345
  {
329
346
  pattern: domain.endsWith("/*") ? domain : `${domain}/*`,
@@ -333,6 +350,22 @@ export class BuildCloudflareTask extends BuildTask {
333
350
  return;
334
351
  }
335
352
 
353
+ // An explicit CLOUDFLARE_ZONE forces a zone *Route* for a non-wildcard
354
+ // host too. Needed when the host is ALSO covered by another Worker's
355
+ // wildcard route on the same zone: Cloudflare evaluates Routes before
356
+ // Custom Domains, but among routes the most specific pattern wins — so
357
+ // `app.club.alepha.dev/*` beats the pooled `*.club.alepha.dev/*`, while a
358
+ // Custom Domain on that host would lose to the wildcard route entirely.
359
+ if (process.env.CLOUDFLARE_ZONE) {
360
+ wrangler.routes = [
361
+ {
362
+ pattern: `${domain}/*`,
363
+ zone_name: process.env.CLOUDFLARE_ZONE,
364
+ },
365
+ ];
366
+ return;
367
+ }
368
+
336
369
  wrangler.routes = [
337
370
  {
338
371
  pattern: domain,
@@ -386,13 +419,15 @@ export class BuildCloudflareTask extends BuildTask {
386
419
 
387
420
  const [dbName, id] = url.replace("d1://", "").replace("d1:", "").split(":");
388
421
  const binding = BuildCloudflareTask.D1_BINDING;
389
- const jurisdiction = process.env.CLOUDFLARE_JURISDICTION;
422
+ // No `jurisdiction` here: unlike r2_buckets, the wrangler D1 binding schema
423
+ // has no jurisdiction field (it warns on the unexpected key). D1 data
424
+ // residency is fixed when the database is created — see CloudflareApi —
425
+ // and the binding just references it by `database_id`.
390
426
  wrangler.d1_databases = wrangler.d1_databases || [];
391
427
  wrangler.d1_databases.push({
392
428
  binding,
393
429
  database_name: dbName,
394
430
  database_id: id,
395
- ...(jurisdiction ? { jurisdiction } : {}),
396
431
  });
397
432
  wrangler.vars ??= {};
398
433
  wrangler.vars.DATABASE_URL = `d1://${binding}`;
@@ -462,9 +497,22 @@ export class BuildCloudflareTask extends BuildTask {
462
497
  binding: QUEUE_DEFAULT_BINDING,
463
498
  queue: queueName,
464
499
  });
500
+
501
+ // The worker's queue handler calls `msg.retry()` on any throw. Cloudflare
502
+ // only gives a failing message somewhere to land if the consumer declares a
503
+ // `dead_letter_queue` — otherwise it burns `max_retries` and DISCARDS the
504
+ // message, with no record and no signal. CF creates the DLQ on demand, so a
505
+ // derived default is safe.
506
+ const maxRetries = Number(process.env.CLOUDFLARE_QUEUE_MAX_RETRIES);
507
+
465
508
  wrangler.queues.consumers = wrangler.queues.consumers || [];
466
509
  wrangler.queues.consumers.push({
467
510
  queue: queueName,
511
+ dead_letter_queue:
512
+ process.env.CLOUDFLARE_QUEUE_DLQ_NAME || `${queueName}-dlq`,
513
+ max_retries: Number.isSafeInteger(maxRetries)
514
+ ? maxRetries
515
+ : QUEUE_DEFAULT_MAX_RETRIES,
468
516
  });
469
517
  }
470
518
 
@@ -472,25 +520,30 @@ export class BuildCloudflareTask extends BuildTask {
472
520
  ctx: BuildTaskContext,
473
521
  wrangler: WranglerConfig,
474
522
  ): void {
475
- // Manifest mode doesn't capture email provider details yet. Apps
476
- // using CloudflareEmailProvider would need a manifest field added.
477
- // For now, skip non-email apps and apps using non-CF providers
478
- // are unaffected. TODO: add `emailProvider` to BuildManifest.
479
- if (ctx.manifest || !ctx.alepha) {
480
- return;
523
+ // Resolve the CF email binding from whichever source this build path has:
524
+ // - manifest/prebuilt mode (Alepha Rocket `--prebuilt`): no app boot, so
525
+ // read the binding captured into the manifest at artifact-build time.
526
+ // Without this the deploy silently drops `send_email` and the worker
527
+ // boots with email inert (binding not found).
528
+ // - full Vite introspection (`ctx.alepha`, no manifest): probe for the
529
+ // registered CloudflareEmailProvider.
530
+ let binding: string | undefined;
531
+ if (ctx.manifest) {
532
+ binding = ctx.manifest.email?.binding;
533
+ } else if (ctx.alepha) {
534
+ try {
535
+ ctx.alepha.inject(CLOUDFLARE_EMAIL_PROVIDER_NAME);
536
+ binding = SEND_EMAIL_DEFAULT_BINDING;
537
+ } catch {
538
+ // app doesn't use CloudflareEmailProvider — nothing to emit
539
+ }
481
540
  }
482
- try {
483
- ctx.alepha.inject(CLOUDFLARE_EMAIL_PROVIDER_NAME);
484
- } catch {
541
+ if (!binding) {
485
542
  return;
486
543
  }
487
544
 
488
545
  wrangler.send_email = wrangler.send_email || [];
489
- if (
490
- wrangler.send_email.some(
491
- (b: { name: string }) => b.name === SEND_EMAIL_DEFAULT_BINDING,
492
- )
493
- ) {
546
+ if (wrangler.send_email.some((b: { name: string }) => b.name === binding)) {
494
547
  return;
495
548
  }
496
549
 
@@ -504,171 +557,31 @@ export class BuildCloudflareTask extends BuildTask {
504
557
  // sender goes in the message `from` field (see CloudflareEmailProvider.send);
505
558
  // leaving the binding unrestricted lets the worker send to any verified
506
559
  // destination.
507
- const entry: Record<string, unknown> = { name: SEND_EMAIL_DEFAULT_BINDING };
508
-
509
- wrangler.send_email.push(entry);
510
- }
511
-
512
- /**
513
- * Discover `$container` primitives and emit the matching Cloudflare
514
- * Containers bindings, Durable Object bindings, and migrations into
515
- * `wrangler.jsonc`. The DO class declarations are added later, when
516
- * the worker entry point is written.
517
- *
518
- * Returns the list of container descriptors so
519
- * `writeWorkerEntryPoint` can emit `export class <NAME> extends
520
- * Container` declarations referencing them.
521
- */
522
- protected discoverContainers(ctx: BuildTaskContext): ContainerDescriptor[] {
523
- // String key, not the `$container` factory. The build task runs in
524
- // the CLI's Node realm, while the workspace's entry module is
525
- // loaded by Vite — two separate module copies of
526
- // `alepha/container`. Looking up by `$container[KIND]` (a class
527
- // reference) would dereference the CLI's ContainerPrimitive class,
528
- // which never matches the workspace's. The string form iterates
529
- // the registry by class name and survives the dual-realm — same
530
- // pattern used for `$bucket`, `$queue`, `scheduler` below.
531
- const primitives = ctx.alepha.primitives(
532
- "container",
533
- ) as ContainerPrimitive[];
534
- return primitives.map((p) => ({
535
- name: p.name.toUpperCase(),
536
- className: p.name
537
- .split(/[^a-zA-Z0-9]/)
538
- .filter(Boolean)
539
- .map((s) => s[0]!.toUpperCase() + s.slice(1))
540
- .join(""),
541
- image: p.options.image,
542
- port: p.options.port ?? 3000,
543
- sleepAfter:
544
- typeof p.options.sleepAfter === "string" ? p.options.sleepAfter : "15m",
545
- // `lite` is the post-GA name for what `$container` historically
546
- // called `dev`. Default to `lite` here and rewrite any
547
- // explicit `dev` to it on the way out — wrangler warns
548
- // otherwise.
549
- instanceType:
550
- p.options.instanceType === "dev"
551
- ? "lite"
552
- : (p.options.instanceType ?? "lite"),
553
- maxInstances: p.options.maxInstances ?? 5,
554
- envVars: p.options.envVars,
555
- }));
556
- }
557
-
558
- /**
559
- * Expand a short image ref (e.g. `alepha-rocket:0.1.0`) into the
560
- * fully-qualified `registry.cloudflare.com/<account>/<image>:<tag>`
561
- * URL that wrangler validates at deploy time.
562
- *
563
- * Cloudflare Containers only pulls from `registry.cloudflare.com`;
564
- * wrangler accepts either a Dockerfile path or a fully-qualified
565
- * registry URL in the `image` field — not a bare DockerHub-style
566
- * name. We let `$container({ image })` callers write the short
567
- * form (it matches what `wrangler containers push <local>` accepts
568
- * + matches the local docker tag) and rewrite to the CF registry
569
- * URL here.
570
- *
571
- * Pass-through cases:
572
- * - already a full URL: starts with `registry.cloudflare.com/`
573
- * or contains a scheme/`://`
574
- * - looks like a Dockerfile path: starts with `./` or `/`
575
- */
576
- protected resolveContainerImage(image: string): string {
577
- if (
578
- image.startsWith("./") ||
579
- image.startsWith("/") ||
580
- image.startsWith("registry.cloudflare.com/") ||
581
- image.includes("://")
582
- ) {
583
- return image;
584
- }
585
- const accountId = process.env.CLOUDFLARE_ACCOUNT_ID;
586
- if (!accountId) {
587
- // No account id — leave the short form and let wrangler error
588
- // out with a clearer message. This branch fires only in dry
589
- // builds where the env isn't wired (e.g. `alepha build` without
590
- // `alepha platform up` around it).
591
- return image;
592
- }
593
- return `registry.cloudflare.com/${accountId}/${image}`;
594
- }
595
-
596
- protected enhanceContainers(
597
- ctx: BuildTaskContext,
598
- wrangler: WranglerConfig,
599
- ): ContainerDescriptor[] {
600
- const descriptors: ContainerDescriptor[] = ctx.manifest
601
- ? (ctx.manifest.containers as ContainerDescriptor[])
602
- : this.discoverContainers(ctx);
603
- if (descriptors.length === 0) {
604
- return [];
605
- }
606
-
607
- wrangler.containers = wrangler.containers || [];
608
- wrangler.durable_objects = wrangler.durable_objects || {};
609
- wrangler.durable_objects.bindings = wrangler.durable_objects.bindings || [];
610
- wrangler.migrations = wrangler.migrations || [];
611
-
612
- const newSqliteClasses: string[] = [];
613
- for (const d of descriptors) {
614
- wrangler.containers.push({
615
- class_name: d.className,
616
- image: this.resolveContainerImage(d.image),
617
- instance_type: d.instanceType,
618
- max_instances: d.maxInstances,
619
- });
620
- wrangler.durable_objects.bindings.push({
621
- name: d.name,
622
- class_name: d.className,
623
- });
624
- newSqliteClasses.push(d.className);
625
- }
626
-
627
- if (newSqliteClasses.length > 0) {
628
- wrangler.migrations.push({
629
- tag: "containers-v1",
630
- new_sqlite_classes: newSqliteClasses,
631
- });
632
- }
633
-
634
- return descriptors;
560
+ wrangler.send_email.push({ name: binding });
635
561
  }
636
562
 
637
563
  protected async writeWorkerEntryPoint(
638
564
  root: string,
639
565
  distDir: string,
640
- containers: ContainerDescriptor[] = [],
641
566
  ): Promise<void> {
642
- // Extend `globalThis.__alepha_CloudflareContainer` instead of
643
- // importing `@cloudflare/containers` directly. The entry is
644
- // written AFTER Vite, so any bare specifier in here survives to
645
- // workerd (which has `no_bundle: true`) and 10021's out. The
646
- // global is set by a side-effect in `alepha/container`'s
647
- // workerd entry, which Vite has already inlined into
648
- // `./index.js`. ESM evaluates top-level imports before the
649
- // module body, so by the time the `extends` expression below is
650
- // evaluated, the global is set.
651
- const containerDeclarations = containers
652
- .map((c) => {
653
- const envVars = c.envVars
654
- ? ` envVars = ${JSON.stringify(c.envVars)};\n`
655
- : "";
656
- return `export class ${c.className} extends globalThis.__alepha_CloudflareContainer {\n defaultPort = ${c.port};\n sleepAfter = "${c.sleepAfter}";\n${envVars}}`;
657
- })
658
- .join("\n\n");
659
-
660
567
  const workerCode = `
661
568
  import "./index.js";
662
569
 
663
- // Stash the per-invocation \`executionCtx.waitUntil\` in the Alepha store
664
- // so background work (notably $job direct dispatch) can keep the isolate
665
- // alive past the response.
666
- const setWaitUntil = (executionCtx) => {
667
- if (executionCtx && typeof executionCtx.waitUntil === "function") {
668
- __alepha.set("cloudflare.waitUntil", (p) => executionCtx.waitUntil(p));
669
- } else {
670
- __alepha.set("cloudflare.waitUntil", undefined);
671
- }
570
+ // Run an invocation inside an Alepha fork carrying THIS invocation's
571
+ // \`executionCtx.waitUntil\`, so background work (notably $job direct dispatch)
572
+ // can keep the isolate alive past the response.
573
+ //
574
+ // It must be the async context, never the shared store: one isolate serves
575
+ // concurrent invocations, so a store slot would let request B overwrite
576
+ // request A's handle — A's background work would then call B's already-returned
577
+ // context ("waitUntil after response") and be silently dropped.
578
+ const withExecutionContext = (executionCtx, fn) => {
579
+ const waitUntil =
580
+ executionCtx && typeof executionCtx.waitUntil === "function"
581
+ ? (p) => executionCtx.waitUntil(p)
582
+ : undefined;
583
+
584
+ return __alepha.context.run(fn, { "cloudflare.waitUntil": waitUntil });
672
585
  };
673
586
 
674
587
  // Bind the per-invocation Worker \`env\`: keep the full binding (D1, R2, KV, …)
@@ -684,7 +597,6 @@ export default {
684
597
  const ctx = { req: request, res: undefined };
685
598
 
686
599
  bindEnv(env);
687
- setWaitUntil(executionCtx);
688
600
 
689
601
  try {
690
602
  await __alepha.start();
@@ -693,14 +605,15 @@ export default {
693
605
  return new Response("Internal Server Error", { status: 500 });
694
606
  }
695
607
 
696
- await __alepha.events.emit("web:request", ctx);
608
+ await withExecutionContext(executionCtx, () =>
609
+ __alepha.events.emit("web:request", ctx),
610
+ );
697
611
 
698
612
  return ctx.res;
699
613
  },
700
614
 
701
615
  scheduled: async (event, env, executionCtx) => {
702
616
  bindEnv(env);
703
- setWaitUntil(executionCtx);
704
617
 
705
618
  try {
706
619
  await __alepha.start();
@@ -709,15 +622,16 @@ export default {
709
622
  throw err;
710
623
  }
711
624
 
712
- await __alepha.events.emit("cloudflare:scheduled", {
713
- cron: event.cron,
714
- scheduledTime: event.scheduledTime,
715
- });
625
+ await withExecutionContext(executionCtx, () =>
626
+ __alepha.events.emit("cloudflare:scheduled", {
627
+ cron: event.cron,
628
+ scheduledTime: event.scheduledTime,
629
+ }),
630
+ );
716
631
  },
717
632
 
718
633
  queue: async (batch, env, executionCtx) => {
719
634
  bindEnv(env);
720
- setWaitUntil(executionCtx);
721
635
 
722
636
  try {
723
637
  await __alepha.start();
@@ -726,44 +640,23 @@ export default {
726
640
  throw err;
727
641
  }
728
642
 
729
- for (const msg of batch.messages) {
730
- try {
731
- await __alepha.events.emit("cloudflare:queue", msg.body);
732
- msg.ack();
733
- } catch (e) {
734
- msg.retry();
643
+ await withExecutionContext(executionCtx, async () => {
644
+ for (const msg of batch.messages) {
645
+ try {
646
+ await __alepha.events.emit("cloudflare:queue", msg.body);
647
+ msg.ack();
648
+ } catch (e) {
649
+ msg.retry();
650
+ }
735
651
  }
736
- }
652
+ });
737
653
  },
738
654
  };
739
655
  `.trim();
740
656
 
741
- const containerBlock =
742
- containers.length > 0 ? `${containerDeclarations}\n\n` : "";
743
-
744
657
  await this.fs.writeFile(
745
658
  this.fs.join(root, distDir, "main.cloudflare.js"),
746
- `${this.warningComment}\n${containerBlock}${workerCode}`.trim(),
659
+ `${this.warningComment}\n${workerCode}`.trim(),
747
660
  );
748
661
  }
749
662
  }
750
-
751
- interface ContainerDescriptor {
752
- name: string;
753
- className: string;
754
- image: string;
755
- port: number;
756
- sleepAfter: string;
757
- /**
758
- * Cloudflare Containers instance class.
759
- *
760
- * `dev` is the wrangler-pre-GA name; the platform accepts it but
761
- * emits a deprecation warning telling you to use `lite`. We
762
- * silently translate at write time (see `discoverContainers`
763
- * default + `enhanceContainers` write) so older
764
- * `$container({ instanceType: "dev" })` declarations keep working.
765
- */
766
- instanceType: "dev" | "lite" | "basic" | "standard";
767
- maxInstances: number;
768
- envVars?: Record<string, string>;
769
- }