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 { describe, expect, test } from "vitest";
3
3
  import {
4
4
  $prompt,
@@ -163,13 +163,13 @@ describe("McpServerProvider", () => {
163
163
  class Calculator {
164
164
  add = $tool({
165
165
  description: "Add numbers",
166
- schema: { params: t.object({ a: t.number(), b: t.number() }) },
166
+ schema: { params: z.object({ a: z.number(), b: z.number() }) },
167
167
  handler: async ({ params }) => params.a + params.b,
168
168
  });
169
169
 
170
170
  subtract = $tool({
171
171
  description: "Subtract numbers",
172
- schema: { params: t.object({ a: t.number(), b: t.number() }) },
172
+ schema: { params: z.object({ a: z.number(), b: z.number() }) },
173
173
  handler: async ({ params }) => params.a - params.b,
174
174
  });
175
175
  }
@@ -201,8 +201,8 @@ describe("McpServerProvider", () => {
201
201
  multiply = $tool({
202
202
  description: "Multiply",
203
203
  schema: {
204
- params: t.object({ a: t.number(), b: t.number() }),
205
- result: t.number(),
204
+ params: z.object({ a: z.number(), b: z.number() }),
205
+ result: z.number(),
206
206
  },
207
207
  handler: async ({ params }) => params.a * params.b,
208
208
  });
@@ -230,6 +230,77 @@ describe("McpServerProvider", () => {
230
230
  expect(result.content[0].text).toBe("42");
231
231
  });
232
232
 
233
+ test("passes raw MCP content (e.g. image) through verbatim when the tool has no output schema", async () => {
234
+ const alepha = Alepha.create();
235
+
236
+ class ImageTools {
237
+ screenshot = $tool({
238
+ description: "Return a tiny image",
239
+ // No `result` schema — handler returns raw MCP content blocks.
240
+ handler: async () => ({
241
+ content: [
242
+ {
243
+ type: "image",
244
+ data: "aGVsbG8=",
245
+ mimeType: "image/png",
246
+ },
247
+ ],
248
+ }),
249
+ });
250
+ }
251
+
252
+ alepha.with(AlephaMcp).with(ImageTools);
253
+ await alepha.start();
254
+
255
+ const provider = alepha.inject(McpServerProvider);
256
+ const response = await provider.handleMessage({
257
+ jsonrpc: "2.0",
258
+ id: 1,
259
+ method: "tools/call",
260
+ params: { name: "screenshot", arguments: {} },
261
+ });
262
+
263
+ const result = response?.result as {
264
+ content: Array<{ type: string; data?: string; mimeType?: string }>;
265
+ structuredContent?: unknown;
266
+ };
267
+ expect(result.content).toHaveLength(1);
268
+ expect(result.content[0].type).toBe("image");
269
+ expect(result.content[0].data).toBe("aGVsbG8=");
270
+ expect(result.content[0].mimeType).toBe("image/png");
271
+ // Raw content is NOT double-wrapped into a JSON text block.
272
+ expect(result.structuredContent).toBeUndefined();
273
+ });
274
+
275
+ test("a plain object result (no content array) still serializes to a JSON text block", async () => {
276
+ const alepha = Alepha.create();
277
+
278
+ class PlainTools {
279
+ info = $tool({
280
+ description: "Return a plain object",
281
+ // No `result` schema, but the object is not raw MCP content.
282
+ handler: async () => ({ hello: "world" }),
283
+ });
284
+ }
285
+
286
+ alepha.with(AlephaMcp).with(PlainTools);
287
+ await alepha.start();
288
+
289
+ const provider = alepha.inject(McpServerProvider);
290
+ const response = await provider.handleMessage({
291
+ jsonrpc: "2.0",
292
+ id: 1,
293
+ method: "tools/call",
294
+ params: { name: "info", arguments: {} },
295
+ });
296
+
297
+ const result = response?.result as {
298
+ content: Array<{ type: string; text: string }>;
299
+ };
300
+ expect(result.content[0].type).toBe("text");
301
+ expect(JSON.parse(result.content[0].text)).toEqual({ hello: "world" });
302
+ });
303
+
233
304
  test("should return error for unknown tool", async () => {
234
305
  const alepha = Alepha.create();
235
306
  alepha.with(AlephaMcp);
@@ -411,7 +482,7 @@ describe("McpServerProvider", () => {
411
482
  class Prompts {
412
483
  greeting = $prompt({
413
484
  description: "Generate greeting",
414
- args: t.object({ name: t.text() }),
485
+ args: z.object({ name: z.text() }),
415
486
  handler: async () => [],
416
487
  });
417
488
 
@@ -445,7 +516,7 @@ describe("McpServerProvider", () => {
445
516
  class Prompts {
446
517
  greeting = $prompt({
447
518
  description: "Generate greeting",
448
- args: t.object({ name: t.text() }),
519
+ args: z.object({ name: z.text() }),
449
520
  handler: async ({ args }) => [
450
521
  { role: "user", content: `Say hello to ${args.name}` },
451
522
  ],
@@ -591,8 +662,8 @@ describe("McpServerProvider", () => {
591
662
  contextTool = $tool({
592
663
  description: "Tool that receives context",
593
664
  schema: {
594
- params: t.object({ value: t.text() }),
595
- result: t.text(),
665
+ params: z.object({ value: z.text() }),
666
+ result: z.text(),
596
667
  },
597
668
  handler: async ({ params, context }) => {
598
669
  receivedContext = context;
@@ -677,7 +748,7 @@ describe("McpServerProvider", () => {
677
748
  class Prompts {
678
749
  contextPrompt = $prompt({
679
750
  description: "Prompt that receives context",
680
- args: t.object({ name: t.text() }),
751
+ args: z.object({ name: z.text() }),
681
752
  handler: async ({ args, context }) => {
682
753
  receivedContext = context;
683
754
  return [{ role: "user", content: `Hello ${args.name}` }];
@@ -748,7 +819,7 @@ describe("McpServerProvider", () => {
748
819
  class Tools {
749
820
  protected = $tool({
750
821
  description: "Protected tool",
751
- schema: { result: t.text() },
822
+ schema: { result: z.text() },
752
823
  handler: async ({ context }) => {
753
824
  const auth = context?.headers?.authorization;
754
825
  if (!auth?.toString().startsWith("Bearer ")) {
@@ -1,4 +1,4 @@
1
- import { Alepha, t } from "alepha";
1
+ import { Alepha, z } from "alepha";
2
2
  import { ServerProvider } from "alepha/server";
3
3
  import { describe, expect, it } from "vitest";
4
4
  import { AlephaMcp, MCP_PROTOCOL_VERSION } from "../index.ts";
@@ -17,7 +17,7 @@ import {
17
17
  class PingTool {
18
18
  ping = $tool({
19
19
  description: "Ping",
20
- schema: { params: t.object({}), result: t.text() },
20
+ schema: { params: z.object({}), result: z.text() },
21
21
  handler: async () => "pong",
22
22
  });
23
23
  }
@@ -1,4 +1,4 @@
1
- import { Alepha, t } from "alepha";
1
+ import { Alepha, z } from "alepha";
2
2
  import { describe, expect, test } from "vitest";
3
3
  import {
4
4
  $prompt,
@@ -19,11 +19,11 @@ describe("MCP Integration", () => {
19
19
  add = $tool({
20
20
  description: "Add two numbers",
21
21
  schema: {
22
- params: t.object({
23
- a: t.number(),
24
- b: t.number(),
22
+ params: z.object({
23
+ a: z.number(),
24
+ b: z.number(),
25
25
  }),
26
- result: t.number(),
26
+ result: z.number(),
27
27
  },
28
28
  handler: async ({ params }) => params.a + params.b,
29
29
  });
@@ -47,7 +47,7 @@ describe("MCP Integration", () => {
47
47
  });
48
48
 
49
49
  expect(initResponse?.result).toBeDefined();
50
- const initResult = initResponse?.result as {
50
+ const initResult = initResponse!.result as {
51
51
  capabilities: { tools?: object };
52
52
  };
53
53
  expect(initResult.capabilities.tools).toBeDefined();
@@ -66,7 +66,7 @@ describe("MCP Integration", () => {
66
66
  method: "tools/list",
67
67
  });
68
68
 
69
- const tools = (listResponse?.result as { tools: Array<{ name: string }> })
69
+ const tools = (listResponse!.result as { tools: Array<{ name: string }> })
70
70
  .tools;
71
71
  expect(tools).toHaveLength(1);
72
72
  expect(tools[0].name).toBe("add");
@@ -82,7 +82,7 @@ describe("MCP Integration", () => {
82
82
  },
83
83
  });
84
84
 
85
- const result = callResponse?.result as { content: Array<{ text: string }> };
85
+ const result = callResponse!.result as { content: Array<{ text: string }> };
86
86
  expect(result.content[0].text).toBe("30");
87
87
  });
88
88
 
@@ -129,7 +129,7 @@ describe("MCP Integration", () => {
129
129
  });
130
130
 
131
131
  const resources = (
132
- listResponse?.result as {
132
+ listResponse!.result as {
133
133
  resources: Array<{ uri: string; name: string }>;
134
134
  }
135
135
  ).resources;
@@ -145,7 +145,7 @@ describe("MCP Integration", () => {
145
145
  params: { uri: "file:///README.md" },
146
146
  });
147
147
 
148
- const content1 = (read1?.result as { contents: Array<{ text: string }> })
148
+ const content1 = (read1!.result as { contents: Array<{ text: string }> })
149
149
  .contents[0];
150
150
  expect(content1.text).toContain("Read count: 1");
151
151
 
@@ -156,7 +156,7 @@ describe("MCP Integration", () => {
156
156
  params: { uri: "file:///README.md" },
157
157
  });
158
158
 
159
- const content2 = (read2?.result as { contents: Array<{ text: string }> })
159
+ const content2 = (read2!.result as { contents: Array<{ text: string }> })
160
160
  .contents[0];
161
161
  expect(content2.text).toContain("Read count: 2");
162
162
  });
@@ -168,10 +168,10 @@ describe("MCP Integration", () => {
168
168
  codeReview = $prompt({
169
169
  name: "code-review",
170
170
  description: "Request a code review for the given code",
171
- args: t.object({
172
- language: t.text({ description: "Programming language" }),
173
- code: t.text({ description: "Code to review" }),
174
- focus: t.optional(t.text({ description: "Focus areas for review" })),
171
+ args: z.object({
172
+ language: z.text({ description: "Programming language" }),
173
+ code: z.text({ description: "Code to review" }),
174
+ focus: z.text({ description: "Focus areas for review" }).optional(),
175
175
  }),
176
176
  handler: async ({ args }) => {
177
177
  const messages = [
@@ -218,7 +218,7 @@ describe("MCP Integration", () => {
218
218
  });
219
219
 
220
220
  const prompts = (
221
- listResponse?.result as {
221
+ listResponse!.result as {
222
222
  prompts: Array<{
223
223
  name: string;
224
224
  arguments?: Array<{ name: string; required?: boolean }>;
@@ -244,7 +244,7 @@ describe("MCP Integration", () => {
244
244
  });
245
245
 
246
246
  const messages1 = (
247
- get1?.result as {
247
+ get1!.result as {
248
248
  messages: Array<{ role: string; content: { text: string } }>;
249
249
  }
250
250
  ).messages;
@@ -267,7 +267,7 @@ describe("MCP Integration", () => {
267
267
  });
268
268
 
269
269
  const messages2 = (
270
- get2?.result as { messages: Array<{ content: { text: string } }> }
270
+ get2!.result as { messages: Array<{ content: { text: string } }> }
271
271
  ).messages;
272
272
  expect(messages2).toHaveLength(2);
273
273
  expect(messages2[1].content.text).toContain("performance");
@@ -281,12 +281,12 @@ describe("MCP Integration", () => {
281
281
  calculator = $tool({
282
282
  description: "Basic calculator",
283
283
  schema: {
284
- params: t.object({
285
- op: t.enum(["add", "sub", "mul", "div"]),
286
- a: t.number(),
287
- b: t.number(),
284
+ params: z.object({
285
+ op: z.enum(["add", "sub", "mul", "div"]),
286
+ a: z.number(),
287
+ b: z.number(),
288
288
  }),
289
- result: t.number(),
289
+ result: z.number(),
290
290
  },
291
291
  handler: async ({ params }) => {
292
292
  switch (params.op) {
@@ -305,8 +305,8 @@ describe("MCP Integration", () => {
305
305
  echo = $tool({
306
306
  description: "Echo the input",
307
307
  schema: {
308
- params: t.object({ message: t.text() }),
309
- result: t.text(),
308
+ params: z.object({ message: z.text() }),
309
+ result: z.text(),
310
310
  },
311
311
  handler: async ({ params }) => params.message,
312
312
  });
@@ -324,7 +324,7 @@ describe("MCP Integration", () => {
324
324
  // Prompts
325
325
  greeting = $prompt({
326
326
  description: "Generate a greeting",
327
- args: t.object({ name: t.text() }),
327
+ args: z.object({ name: z.text() }),
328
328
  handler: async ({ args }) => [
329
329
  { role: "user", content: `Say hello to ${args.name}` },
330
330
  ],
@@ -349,7 +349,7 @@ describe("MCP Integration", () => {
349
349
  });
350
350
 
351
351
  const caps = (
352
- init?.result as {
352
+ init!.result as {
353
353
  capabilities: { tools?: object; resources?: object; prompts?: object };
354
354
  }
355
355
  ).capabilities;
@@ -365,7 +365,7 @@ describe("MCP Integration", () => {
365
365
  params: { name: "calculator", arguments: { op: "mul", a: 7, b: 8 } },
366
366
  });
367
367
  expect(
368
- (calc?.result as { content: Array<{ text: string }> }).content[0].text,
368
+ (calc!.result as { content: Array<{ text: string }> }).content[0].text,
369
369
  ).toBe("56");
370
370
 
371
371
  // Read version resource
@@ -376,7 +376,7 @@ describe("MCP Integration", () => {
376
376
  params: { uri: "app://version" },
377
377
  });
378
378
  const versionData = JSON.parse(
379
- (ver?.result as { contents: Array<{ text: string }> }).contents[0].text,
379
+ (ver!.result as { contents: Array<{ text: string }> }).contents[0].text,
380
380
  );
381
381
  expect(versionData.version).toBe("1.0.0");
382
382
 
@@ -388,7 +388,7 @@ describe("MCP Integration", () => {
388
388
  params: { name: "greeting", arguments: { name: "Alice" } },
389
389
  });
390
390
  expect(
391
- (greet?.result as { messages: Array<{ content: { text: string } }> })
391
+ (greet!.result as { messages: Array<{ content: { text: string } }> })
392
392
  .messages[0].content.text,
393
393
  ).toContain("Alice");
394
394
  });
@@ -424,7 +424,7 @@ describe("MCP Integration", () => {
424
424
  params: { name: "flaky", arguments: {} },
425
425
  });
426
426
  expect(
427
- (r1?.result as { content: Array<{ text: string }> }).content[0].text,
427
+ (r1!.result as { content: Array<{ text: string }> }).content[0].text,
428
428
  ).toBe("success");
429
429
 
430
430
  // Second call - failure
@@ -434,7 +434,7 @@ describe("MCP Integration", () => {
434
434
  method: "tools/call",
435
435
  params: { name: "flaky", arguments: {} },
436
436
  });
437
- expect((r2?.result as { isError?: boolean }).isError).toBe(true);
437
+ expect((r2!.result as { isError?: boolean }).isError).toBe(true);
438
438
 
439
439
  // Third call - success (server should still work)
440
440
  const r3 = await provider.handleMessage({
@@ -444,7 +444,7 @@ describe("MCP Integration", () => {
444
444
  params: { name: "flaky", arguments: {} },
445
445
  });
446
446
  expect(
447
- (r3?.result as { content: Array<{ text: string }> }).content[0].text,
447
+ (r3!.result as { content: Array<{ text: string }> }).content[0].text,
448
448
  ).toBe("success");
449
449
  });
450
450
  });
@@ -6,7 +6,7 @@ import {
6
6
  Primitive,
7
7
  type Static,
8
8
  type TObject,
9
- t,
9
+ z,
10
10
  } from "alepha";
11
11
  import type {
12
12
  McpContext,
@@ -32,9 +32,9 @@ import { McpServerProvider } from "../providers/McpServerProvider.ts";
32
32
  * class Prompts {
33
33
  * greeting = $prompt({
34
34
  * description: "Generate a personalized greeting",
35
- * args: t.object({
36
- * name: t.text({ description: "Name of the person to greet" }),
37
- * style: t.optional(t.enum(["formal", "casual"])),
35
+ * args: z.object({
36
+ * name: z.text({ description: "Name of the person to greet" }),
37
+ * style: z.enum(["formal", "casual"]).optional(),
38
38
  * }),
39
39
  * handler: async ({ args }) => [
40
40
  * {
@@ -48,9 +48,9 @@ import { McpServerProvider } from "../providers/McpServerProvider.ts";
48
48
  *
49
49
  * codeReview = $prompt({
50
50
  * description: "Request a code review",
51
- * args: t.object({
52
- * code: t.text({ description: "The code to review" }),
53
- * language: t.text({ description: "Programming language" }),
51
+ * args: z.object({
52
+ * code: z.text({ description: "The code to review" }),
53
+ * language: z.text({ description: "Programming language" }),
54
54
  * }),
55
55
  * handler: async ({ args }) => [
56
56
  * {
@@ -190,11 +190,13 @@ export class PromptPrimitive<T extends TObject> extends Primitive<
190
190
  const args: McpPromptArgument[] = [];
191
191
 
192
192
  for (const [name, propSchema] of Object.entries(schema.properties)) {
193
- const prop = propSchema as Record<string, unknown>;
193
+ // The description lives on the inner schema; peel optional/nullable/default
194
+ // wrappers so `z.number({ description }).optional()` still surfaces it.
195
+ const prop = z.schema.unwrap(propSchema) as Record<string, unknown>;
194
196
  args.push({
195
197
  name,
196
198
  description: prop.description as string | undefined,
197
- required: !t.schema.isOptional(propSchema),
199
+ required: !z.schema.isOptional(propSchema),
198
200
  });
199
201
  }
200
202
 
@@ -6,7 +6,7 @@ import {
6
6
  Primitive,
7
7
  type TObject,
8
8
  type TSchema,
9
- t,
9
+ z,
10
10
  } from "alepha";
11
11
  import type {
12
12
  McpContext,
@@ -40,11 +40,11 @@ import { McpServerProvider } from "../providers/McpServerProvider.ts";
40
40
  * add = $tool({
41
41
  * description: "Add two numbers together",
42
42
  * schema: {
43
- * params: t.object({
44
- * a: t.number(),
45
- * b: t.number(),
43
+ * params: z.object({
44
+ * a: z.number(),
45
+ * b: z.number(),
46
46
  * }),
47
- * result: t.number(),
47
+ * result: z.number(),
48
48
  * },
49
49
  * handler: async ({ params }) => {
50
50
  * return params.a + params.b;
@@ -54,10 +54,10 @@ import { McpServerProvider } from "../providers/McpServerProvider.ts";
54
54
  * greet = $tool({
55
55
  * description: "Generate a greeting message",
56
56
  * schema: {
57
- * params: t.object({
58
- * name: t.text(),
57
+ * params: z.object({
58
+ * name: z.text(),
59
59
  * }),
60
- * result: t.text(),
60
+ * result: z.text(),
61
61
  * },
62
62
  * handler: async ({ params }) => {
63
63
  * return `Hello, ${params.name}!`;
@@ -267,94 +267,35 @@ export class ToolPrimitive<T extends ToolPrimitiveSchema> extends Primitive<
267
267
  schema: TObject,
268
268
  options?: { root?: boolean },
269
269
  ): McpJsonSchema {
270
- const properties: Record<string, unknown> = {};
271
- const required: string[] = [];
272
-
273
- for (const [key, propSchema] of Object.entries(schema.properties)) {
274
- properties[key] = this.propertyToJsonSchema(propSchema as TSchema);
275
-
276
- // Check if property is required (not optional)
277
- if (!t.schema.isOptional(propSchema as TSchema)) {
278
- required.push(key);
279
- }
270
+ let json: any;
271
+ try {
272
+ json = z.toJSONSchema(schema as any);
273
+ } catch {
274
+ json = { type: "object", properties: {}, required: [] };
280
275
  }
281
276
 
282
- const result: McpJsonSchema = {
283
- type: "object",
284
- properties,
285
- required,
286
- };
287
-
288
- // Annotate the dialect on the root schema only (avoid noise on nested
289
- // sub-schemas where MCP doesn't expect $schema).
290
- if (options?.root !== false) {
291
- result.$schema = "https://json-schema.org/draft/2020-12/schema";
277
+ // Annotate the 2020-12 dialect on the root schema only (avoid noise on
278
+ // nested sub-schemas where MCP doesn't expect $schema).
279
+ if (options?.root === false) {
280
+ json.$schema = undefined;
281
+ } else {
282
+ json.$schema = "https://json-schema.org/draft/2020-12/schema";
292
283
  }
293
284
 
294
- return result;
285
+ return json as McpJsonSchema;
295
286
  }
296
287
 
297
288
  /**
298
- * Convert a single property schema to JSON Schema format.
289
+ * Convert a single property schema to JSON Schema format (zod-native).
299
290
  */
300
291
  protected propertyToJsonSchema(schema: TSchema): Record<string, unknown> {
301
- const result: Record<string, unknown> = {};
302
-
303
- // Check for description on all types
304
- if ("description" in schema) {
305
- result.description = schema.description;
292
+ try {
293
+ const json: any = z.toJSONSchema(schema as any);
294
+ json.$schema = undefined;
295
+ return json;
296
+ } catch {
297
+ return { type: "string" };
306
298
  }
307
-
308
- if (t.schema.isString(schema)) {
309
- result.type = "string";
310
- if ("minLength" in schema) result.minLength = schema.minLength;
311
- if ("maxLength" in schema) result.maxLength = schema.maxLength;
312
- if ("pattern" in schema) result.pattern = schema.pattern;
313
- if ("enum" in schema) result.enum = schema.enum;
314
- } else if (t.schema.isNumber(schema)) {
315
- result.type = "number";
316
- if ("minimum" in schema) result.minimum = schema.minimum;
317
- if ("maximum" in schema) result.maximum = schema.maximum;
318
- } else if (t.schema.isInteger(schema)) {
319
- result.type = "integer";
320
- if ("minimum" in schema) result.minimum = schema.minimum;
321
- if ("maximum" in schema) result.maximum = schema.maximum;
322
- } else if (t.schema.isBoolean(schema)) {
323
- result.type = "boolean";
324
- } else if (t.schema.isArray(schema)) {
325
- result.type = "array";
326
- if ("items" in schema) {
327
- result.items = this.propertyToJsonSchema(schema.items as TSchema);
328
- }
329
- } else if (t.schema.isObject(schema)) {
330
- Object.assign(result, this.schemaToJsonSchema(schema, { root: false }));
331
- } else if (t.schema.isUnsafe(schema) || t.schema.isOptional(schema)) {
332
- // Handle Unsafe types (like t.enum) and optional wrappers by checking the underlying type property
333
- const schemaAny = schema as { type?: string; enum?: unknown[] };
334
- if (schemaAny.type === "string") {
335
- result.type = "string";
336
- if ("enum" in schema) result.enum = schema.enum;
337
- if ("pattern" in schema) result.pattern = schema.pattern;
338
- } else if (schemaAny.type === "number") {
339
- result.type = "number";
340
- } else if (schemaAny.type === "integer") {
341
- result.type = "integer";
342
- } else if (schemaAny.type === "boolean") {
343
- result.type = "boolean";
344
- } else if (schemaAny.type === "array") {
345
- result.type = "array";
346
- } else if (schemaAny.type === "object") {
347
- result.type = "object";
348
- } else {
349
- // Fallback
350
- result.type = "string";
351
- }
352
- } else {
353
- // Fallback for other types
354
- result.type = "string";
355
- }
356
-
357
- return result;
358
299
  }
359
300
  }
360
301
 
@@ -19,6 +19,7 @@ import type {
19
19
  JsonRpcRequest,
20
20
  JsonRpcResponse,
21
21
  McpCapabilities,
22
+ McpContent,
22
23
  McpContext,
23
24
  McpInitializeResult,
24
25
  McpPromptDescriptor,
@@ -309,6 +310,20 @@ export class McpServerProvider {
309
310
  try {
310
311
  const result = await tool.execute(args, context);
311
312
 
313
+ // A tool WITHOUT an output schema may return raw MCP content blocks
314
+ // (e.g. an `image` block) instead of JSON — used for binary payloads
315
+ // like attachment previews. Recognized by the CallToolResult shape
316
+ // (`{ content: McpContent[] }`); passed through verbatim. Tools that
317
+ // declare an output schema always go through the structured path
318
+ // below, so a JSON result that happens to carry a `content` array is
319
+ // never mistaken for raw content.
320
+ if (!tool.hasOutputSchema()) {
321
+ const raw = this.asRawToolContent(result);
322
+ if (raw) {
323
+ return raw;
324
+ }
325
+ }
326
+
312
327
  const callResult: McpToolCallResult = {
313
328
  content: [
314
329
  {
@@ -364,6 +379,46 @@ export class McpServerProvider {
364
379
  }
365
380
  }
366
381
 
382
+ /**
383
+ * Recognize a tool handler's return value as a pre-built MCP tool result —
384
+ * i.e. it already carries a `content` array of content blocks (text, image,
385
+ * audio, resource, resource_link). Returns the normalized
386
+ * {@link McpToolCallResult} when matched, or `undefined` to fall back to the
387
+ * default JSON/text encoding. Only ever consulted for tools that did NOT
388
+ * declare an output schema (see {@link handleToolCall}).
389
+ */
390
+ protected asRawToolContent(result: unknown): McpToolCallResult | undefined {
391
+ if (!result || typeof result !== "object") {
392
+ return undefined;
393
+ }
394
+ const candidate = result as {
395
+ content?: unknown;
396
+ isError?: unknown;
397
+ _meta?: unknown;
398
+ };
399
+ if (!Array.isArray(candidate.content) || candidate.content.length === 0) {
400
+ return undefined;
401
+ }
402
+ const allBlocks = candidate.content.every(
403
+ (block): block is McpContent =>
404
+ !!block &&
405
+ typeof block === "object" &&
406
+ typeof (block as { type?: unknown }).type === "string",
407
+ );
408
+ if (!allBlocks) {
409
+ return undefined;
410
+ }
411
+ return {
412
+ content: candidate.content as McpContent[],
413
+ isError:
414
+ typeof candidate.isError === "boolean" ? candidate.isError : undefined,
415
+ _meta:
416
+ candidate._meta && typeof candidate._meta === "object"
417
+ ? (candidate._meta as Record<string, unknown>)
418
+ : undefined,
419
+ };
420
+ }
421
+
367
422
  protected handleResourcesList(): { resources: McpResourceDescriptor[] } {
368
423
  return {
369
424
  resources: Array.from(this.resources.values()).map((r) =>